Commit inicial. Només hi ha dues diferències de l'original: 1.0
authorviric@llimona
Sat, 06 May 2006 00:50:37 +0200
changeset 0 e269d7e3f581
child 1 5c3469118f32
child 3 2018e982200d
Commit inicial. Només hi ha dues diferències de l'original: - Fitxer README afegit - db renombrat a db.sql, per claredat
README
calc-deutes.php
db-config.inc
db.sql
delete-compra.php
delete-pagament.php
faq.html
getdb.inc
index.html
list-compres.php
list-gent.php
list-pagaments.php
list-persona.php
test.php
update-compra.php
update-gent.php
update-pagament.php
view-compra.php
view-pagament.php
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,4 @@
+El fitxer db-config.inc no hauria de ser llegible per a tothom, ja que
+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.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc-deutes.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Deutes finals</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</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);
+
+	// Iniciem els deutes de cadascun
+	foreach($gent as $id => $persona)
+	{
+		$deutes[$id]["pagat"] = 0;
+		$deutes[$id]["toca_pagar"] = 0;
+		$deutes[$id]["pagaments"] = 0;
+	}
+	$total_a_pagar = 0;
+
+	// Obtenim totes les compres i pagaments
+	$compres = obtenir_compres($connexio);
+	$pagaments = obtenir_pagaments($connexio);
+	// Per cada compra...
+	foreach($compres as $data => $compra)
+	{
+		$compradors = obtenir_compradors($data, $connexio);
+
+		// Calcul dels compradors globals
+		foreach($compradors as $persona => $dades)
+		{
+			$deutes[$persona]["pagat"] += $dades["pagat"];
+			$deutes[$persona]["toca_pagar"] += $dades["toca_pagar"];
+			$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)
+				{
+					$deutes[$persona]["toca_pagar"] += $dades["toca_pagar"];
+					$total_a_pagar += $dades["toca_pagar"];
+				}
+			}
+	}
+	if ($pagaments != 0)
+		foreach($pagaments as $data => $pagament)
+		{
+			$pagadors = obtenir_pagadors($data,$connexio);
+			// Els cobraments seran 'pagaments' negatius.
+			foreach($pagadors as $persona => $dades)
+				$deutes[$persona]["pagaments"] += $dades["pagat"] - $dades["cobrat"];
+		}
+?>
+
+<H2>Deutes finals</H2>
+
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<CAPTION>Deutes finals</CAPTION>
+<TR>
+	<TH>Persona
+	<TH>Pagat
+	<TH>Toca pagar
+	<TH>Percentatge a pagar
+	<TH>Balanç
+	<TH>Pagaments
+	<TH>Balanç amb pagaments
+<?php
+	$suma_pagat = 0;
+	$suma_toca_pagar = 0;
+	$suma_percentatge = 0;
+	$suma_balans = 0;
+	$suma_pagaments = 0;
+	$suma_balans_pagaments = 0;
+	foreach($gent as $key => $value)
+	{
+		if ($deutes[$key]["pagat"] != 0 || $deutes[$key]["toca_pagar"] != 0 ||
+			$deutes[$key]["pagaments"] != 0)
+		{
+			// Serveix per calcular el preu que toca pagar a cada un realment
+			echo "<TR>\n\t<TD>";
+			echo "<A HREF=\"list-persona.php?user_id=$key\">";
+			echo strtohtml($gent[$key]["nom"]) . "</A>\n";
+
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["pagat"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["toca_pagar"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["toca_pagar"]
+				/ $total_a_pagar * 100));
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["pagat"]
+				- $deutes[$key]["toca_pagar"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["pagaments"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($deutes[$key]["pagat"]
+				- $deutes[$key]["toca_pagar"] + $deutes[$key]["pagaments"]));
+
+			//echo "\t<TD>" . $deutes[$key]["pagat"] . "\n";
+			//echo "\t<TD>" . $deutes[$key]["toca_pagar"] . "\n";
+			//echo "\t<TD>" . ($deutes[$key]["toca_pagar"] / $total_a_pagar * 100) . "\n";
+
+			//echo "\t<TD>" . ($deutes[$key]["pagat"] - $deutes[$key]["toca_pagar"]) . "\n";
+			//echo "\t<TD>" . $deutes[$key]["pagaments"] . "\n";
+			//echo "\t<TD>" . ($deutes[$key]["pagat"] - $deutes[$key]["toca_pagar"] + $deutes[$key]["pagaments"]) . "\n";
+
+			$suma_pagat += $deutes[$key]["pagat"];
+			$suma_toca_pagar += $deutes[$key]["toca_pagar"];
+			$suma_percentatge += ($deutes[$key]["toca_pagar"] / $total_a_pagar * 100);
+			$suma_balans += $deutes[$key]["pagat"] - $deutes[$key]["toca_pagar"];
+			$suma_pagaments += $deutes[$key]["pagaments"];
+			$suma_balans_pagaments += $deutes[$key]["pagat"] - $deutes[$key]["toca_pagar"] + $deutes[$key]["pagaments"];
+		}
+	}
+
+	printf("<TR>\n\t<TH>Total\n");
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_pagat));
+		// La suma ha de ser lo mateix que total_a_pagar
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_toca_pagar));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_percentatge));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_balans));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_pagaments));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_balans_pagaments));
+	/*
+	echo "<TR>\n\t<TH>Total\n" .
+		"\t<TD>" . $suma_pagat . "\n" .
+		// La suma ha de ser lo mateix que total_a_pagar
+		"\t<TD>" . $suma_toca_pagar ."\n" .
+		"\t<TD>" . $suma_percentatge . "\n" .
+		"\t<TD>" . $suma_balans . "\n" .
+		"\t<TD>" . $suma_pagaments . "\n" .
+		"\t<TD>" . $suma_balans_pagaments . "\n";
+	*/
+?>
+</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 són cobraments del grup. Els positius són 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 referència a les <em>compres</em>), i els <em>pagaments</em>, que fan
+	referència als préstecs o saldades de deutes.
+</ul>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db-config.inc	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,6 @@
+<?php
+$mysql_server = "localhost";
+$mysql_user = "prova_pis";
+$mysql_password = "patata";
+$mysql_db = "prova_pis";
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db.sql	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,110 @@
+-- use pis;
+drop table compres if exists;
+drop table excepcions if exists;
+drop table gent if exists;
+drop table compradors if exists;
+drop table compradors_excepcions if exists;
+
+CREATE TABLE compres (
+	data	TIMESTAMP NOT NULL,
+	botiga	CHAR(30) NOT NULL,
+	motiu	TEXT,
+	preu	DECIMAL(18,10) UNSIGNED NOT NULL,
+	comentari	TEXT,
+
+	PRIMARY KEY (data)
+	) TYPE = InnoDB;
+
+CREATE TABLE excepcions (
+	id	MEDIUMINT NOT NULL AUTO_INCREMENT,
+	data	TIMESTAMP NOT NULL,
+	article	TINYTEXT,
+	preu	DECIMAL(18,10) UNSIGNED NOT NULL,
+
+	KEY data (data),
+	PRIMARY KEY (id),
+	FOREIGN KEY (data) REFERENCES compres (data)
+	) TYPE = InnoDB;
+
+CREATE TABLE gent (
+	id	MEDIUMINT NOT NULL AUTO_INCREMENT,
+	nom	VARCHAR(50) NOT NULL,
+	habitant	BOOL,
+
+	PRIMARY KEY (id)
+	) TYPE = InnoDB;
+
+CREATE TABLE compradors (
+	id	MEDIUMINT NOT NULL AUTO_INCREMENT,
+	data	TIMESTAMP NOT NULL, 
+	persona	MEDIUMINT NOT NULL, 
+	pagat	 DECIMAL(18,10) UNSIGNED NOT NULL,
+	toca_pagar	DECIMAL(18,10) UNSIGNED NOT NULL,
+
+	KEY data (data),
+	KEY persona (persona),
+	FOREIGN KEY (data) REFERENCES compres(data),
+	FOREIGN KEY (persona) REFERENCES gent(id),
+	PRIMARY KEY (id)
+	) TYPE = InnoDB;
+
+CREATE TABLE compradors_excepcions (
+	id	MEDIUMINT NOT NULL AUTO_INCREMENT,
+	ex_id	MEDIUMINT NOT NULL,
+	persona	MEDIUMINT NOT NULL,
+	toca_pagar	DECIMAL(18,10) UNSIGNED NOT NULL,
+
+	KEY ex_id (ex_id),
+	KEY persona (persona),
+	FOREIGN KEY (ex_id) REFERENCES excepcions (id),
+	FOREIGN KEY (persona) REFERENCES gent (id),
+	PRIMARY KEY (id)
+	) TYPE = InnoDB;
+	
+CREATE TABLE pagaments (
+	data	TIMESTAMP NOT NULL,
+	comentari	TEXT,
+
+	PRIMARY KEY (data)
+	) TYPE = InnoDB;
+
+CREATE TABLE pagadors (
+	id	MEDIUMINT NOT NULL AUTO_INCREMENT,
+	data	TIMESTAMP NOT NULL, 
+	persona	MEDIUMINT NOT NULL, 
+	pagat	 DECIMAL(18,10) UNSIGNED NOT NULL,
+	cobrat	 DECIMAL(18,10) UNSIGNED NOT NULL,
+
+	KEY data (data),
+	KEY persona (persona),
+	FOREIGN KEY (data) REFERENCES pagaments(data),
+	FOREIGN KEY (persona) REFERENCES gent(id),
+	PRIMARY KEY (id)
+	) TYPE = InnoDB;
+
+-- INSERT INTO gent (nom,habitant) VALUES('Lluis', 1);
+-- INSERT INTO gent (nom,habitant) VALUES('Marc', 1);
+-- INSERT INTO gent (nom,habitant) VALUES('Natxo', 1);
+-- INSERT INTO gent (nom,habitant) VALUES('Borja', 1);
+-- INSERT INTO gent (nom,habitant) VALUES('Xumi', 0);
+-- INSERT INTO gent (nom,habitant) VALUES('Boira', 0);
+
+-- SET @date := NOW();
+-- INSERT INTO compres (data,botiga,motiu,preu) VALUES(@date,'Esclat',
+-- 	'Compra setmanal',2203);
+-- INSERT INTO excepcions (data,article,preu) VALUES(@date,'Bicicleta', 200);
+-- INSERT INTO excepcions (data,article,preu) VALUES(@date,'Patates', 3);
+
+-- INSERT INTO compradors (data,persona,pagat,toca_pagar)
+-- 	VALUES(@date,1,1203,500);
+-- INSERT INTO compradors (data,persona,pagat,toca_pagar)
+-- 	VALUES(@date,2,0,500);
+-- INSERT INTO compradors (data,persona,pagat,toca_pagar)
+-- 	VALUES(@date,3,500,500);
+-- INSERT INTO compradors (data,persona,pagat,toca_pagar)
+-- 	VALUES(@date,4,500,500);
+
+-- INSERT INTO compradors_excepcions (ex_id, persona, toca_pagar)
+	-- VALUES(1,1,200);
+-- INSERT INTO compradors_excepcions (ex_id, persona, toca_pagar)
+	-- VALUES(2,5,3);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/delete-compra.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Eliminar compra</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+<?php
+
+	include("getdb.inc");	
+	// Variables globals
+	$touchdb = 1; // Si val 0, no es modificarà la base de dades
+
+	// Fem la connexió
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+	$data = $_GET["id"];
+
+
+	// Crides a funcions per obtenir parametres
+	$habitants = obtenir_habitants($connexio);
+	$num_habitants = count($habitants);
+	$altres = obtenir_altres($connexio);
+	$gent = obtenir_gent($connexio);
+
+	$compra = obtenir_compra($data, $connexio);
+	$compradors = obtenir_compradors($data, $connexio);
+	$excepcions = obtenir_excepcions($data, $connexio);
+
+	$preu_per_compradors = $compra["preu"];
+	$max_compradors_ex = 0;
+	if ($excepcions != 0)
+		foreach($excepcions as $key => $value)
+		{
+			$preu_per_compradors -= $excepcions[$key]["preu"];
+			$compradors_excepcions[$key] = obtenir_compradors_excepcions($key, $connexio);
+			$max_compradors_ex = max(count($compradors_excepcions[$key]),$max_compradors_ex);
+		}
+
+
+if(!isset($_GET["sure"]) && isset($_GET["id"]))
+{
+?>
+
+<H1 ALIGN=center>Eliminar compra</H1>
+
+<H2>Dades generals</H2>
+
+<p> Dades de la compra: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Hora i Data:
+	<TD> <?php
+		echo date("d/m/Y H:i",$data); ?>
+
+<TR>
+	<TH> Botiga:
+	<TD> <?php 
+		echo strtohtml($compra["botiga"]); ?>
+
+<TR>
+	<TH> Motiu:
+	<TD> <?php 
+		echo strtohtml($compra["motiu"]); ?>
+
+<TR>
+	<TH> Comentari:
+	<TD> <?php 
+		echo strtohtml($compra["comentari"]); ?>
+
+<TR>
+	<TH> Preu:
+	<TD> <?php 
+		echo pricetohtml($compra["preu"]); ?>
+
+<TR>
+	<TH> Preu (a repartir)
+	<TD> <?php 
+		echo pricetohtml($preu_per_compradors); ?>
+
+</TABLE>
+
+
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<CAPTION>Compradors globals</CAPTION>
+<TR>
+	<TH>Persona
+	<TH>Pagat
+	<TH>Toca pagar
+	<TH>Percentatge
+	<TH>Toca pagar + excepcions
+	<TH>Balanç
+<?php
+	$suma_pagat = 0;
+	$suma_toca_pagar = 0;
+	$suma_percentatge = 0;
+	$suma_toca_pagar_ex = 0;
+	$suma_balans = 0;
+	foreach($gent as $key => $value)
+	{
+		// Serveix per calcular el preu que toca pagar a cada un realment
+		$modificador = 0;
+		if ($excepcions != 0)
+			foreach($excepcions as $key_ex => $value_ex)
+			{
+				if(isset($compradors_excepcions[$key_ex][$key]["toca_pagar"]))
+					$modificador += $compradors_excepcions[$key_ex][$key]["toca_pagar"];
+			}
+
+
+		if (isset($compradors[$key]))
+		{
+			/*
+			if (!isset($compradors[$key]["pagat"]))
+				$compradors[$key]["pagat"] = 0;
+			if (!isset($compradors[$key]["toca_pagar"]))
+				$compradors[$key]["toca_pagar"] = 0;
+			*/
+
+			echo "<TR>\n\t<TD>". strtohtml($gent[$key]["nom"]) . "\n";
+
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["pagat"])); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"])); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"]
+				* 100 / $preu_per_compradors)); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"]
+				+ $modificador)); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["pagat"]
+				- ($compradors[$key]["toca_pagar"] + $modificador))); 
+			//echo "\t<TD>" . $compradors[$key]["pagat"] . "\n";
+			//echo "\t<TD>" . $compradors[$key]["toca_pagar"] . "\n";
+			//echo "\t<TD>" . ($compradors[$key]["toca_pagar"] * 100 / $preu_per_compradors) . "\n";
+
+			//echo "\t<TD>" . ($compradors[$key]["toca_pagar"] + $modificador) . "\n";
+			//echo "\t<TD>" . ($compradors[$key]["pagat"] - ($compradors[$key]["toca_pagar"] + $modificador)) . "\n";
+
+			$suma_pagat += $compradors[$key]["pagat"];
+			$suma_toca_pagar += $compradors[$key]["toca_pagar"];
+			$suma_percentatge += ($compradors[$key]["toca_pagar"] / $preu_per_compradors*100);
+			$suma_toca_pagar_ex += $compradors[$key]["toca_pagar"] + $modificador;
+			$suma_balans += $compradors[$key]["pagat"] - ($compradors[$key]["toca_pagar"] + $modificador);
+		}
+	}
+	echo "<TR>\n\t<TH>Total\n";
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_pagat));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_toca_pagar));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_percentatge));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_toca_pagar_ex));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_balans));
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+<H2>Excepcions</H2>
+
+<TABLE BORDER=1>
+<TR>
+	<TH>Id
+	<TH>Article
+	<TH>Preu
+	<TH COLSPAN=<?php echo $max_compradors_ex ?>>Toca Pagar
+
+<?php
+	if ($excepcions != 0)
+		foreach($excepcions as $key => $value)
+		{
+			$compradors_excepcions[$key] = obtenir_compradors_excepcions($key, $connexio);
+			// Poso els noms dels compradors
+			echo "<TR>\n\t<TD>\n\t<TD>\n\t<TD>\n";
+			foreach($compradors_excepcions[$key] as $key_c => $value_c)
+			{
+				echo "\t<TH>" . $gent[$key_c]["nom"] . "\n";
+			}
+			// Poso l'excepcio en si
+			printf("<TR>\n\t<TH>%d\n", $key);
+			echo "\t<TD>" . strtohtml($excepcions[$key]["article"]) . "\n";
+			printf("\t<TD align=right>%s\n", pricetohtml($excepcions[$key]["preu"]));
+			foreach($compradors_excepcions[$key] as $key_c => $value_c)
+			{
+				printf("\t<TD align=right>%.2f\n", pricetohtml($value_c["toca_pagar"]));
+			}
+		}
+?>
+
+</TABLE>
+
+<HR WIDTH="70%">
+<BR>
+<CENTER>
+<TABLE BORDER=2>
+<TR>
+	<TD><A HREF="delete-compra?id=<?php echo $_GET["id"]; ?>&amp;sure=yes"><STRONG>ELIMINAR SEGUR!</STRONG></A>
+</TR>
+</TABLE>
+</CENTER>
+
+<?php
+}
+elseif (isset($_GET["id"]) && $_GET["sure"] == "yes")
+{
+	if ($excepcions != 0)
+		foreach($excepcions as $key_ex => $value_ex)
+		{
+			// Borrem excepcions
+			$query = "DELETE FROM compradors_excepcions WHERE ex_id=$key_ex;";
+			if ($touchdb)
+			{
+				$resultat = mysql_query($query, $connexio);
+				if (!$resultat)
+					warn_mysql("compradors_excepcions");
+			}
+			else
+				echo $query . "<BR>\n";
+		}
+	// Borrem compradors
+	$query = "DELETE FROM compradors WHERE data=FROM_UNIXTIME($data);";
+	if ($touchdb)
+	{
+		$resultat = mysql_query($query, $connexio);
+		if (!$resultat)
+			warn_mysql("compradors");
+	}
+	else
+		echo $query . "<BR>\n";
+
+	// Borrem excepcions
+	$query = "DELETE FROM excepcions WHERE data=FROM_UNIXTIME($data);";
+	if ($touchdb)
+	{
+		$resultat = mysql_query($query, $connexio);
+		if (!$resultat)
+			warn_mysql("excepcions");
+	}
+	else
+		echo $query . "<BR>\n";
+
+	// Borrem compres
+	$query = "DELETE FROM compres WHERE data=FROM_UNIXTIME($data);";
+	if ($touchdb)
+	{
+		$resultat = mysql_query($query, $connexio);
+		if (!$resultat)
+			warn_mysql("compres");
+	}
+	else
+		echo $query . "<BR>\n";
+
+	echo "<p>Si no hi ha cap error en línies anteriors, la compra ha estat eliminada.</p>\n";
+	
+}
+?>
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/delete-pagament.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Eliminar pagament</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+<?php
+
+	include("getdb.inc");	
+	// Variables globals
+	$touchdb = 1; // Si val 0, no es modificarà la base de dades
+
+	// Fem la connexió
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+	$data = $_GET["id"];
+
+
+	// Crides a funcions per obtenir parametres
+	$habitants = obtenir_habitants($connexio);
+	$num_habitants = count($habitants);
+	$altres = obtenir_altres($connexio);
+	$gent = obtenir_gent($connexio);
+
+	$pagament = obtenir_pagament($data, $connexio);
+	$pagadors = obtenir_pagadors($data, $connexio);
+
+if(!isset($_GET["sure"]) && isset($_GET["id"]))
+{
+?>
+
+<H1 ALIGN=center>Eliminar pagament</H1>
+
+<H2>Dades generals</H2>
+
+<p> Dades del pagament: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Data i Hora:
+	<TD> <?php
+		echo date("d/m/Y H:i",$data); ?>
+
+<TR>
+	<TH> Comentari:
+	<TD> <?php 
+		echo strtohtml($pagament["comentari"]); ?>
+
+</TABLE>
+
+
+<H2>Pagadors i cobradors</H2>
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<CAPTION>Pagadors</CAPTION>
+<TR>
+	<TH>Persona
+	<TH>Pagat
+	<TH>Cobrat
+	<TH>Balanç
+<?php
+	$suma_pagat = 0;
+	$suma_cobrat = 0;
+	$suma_balans = 0;
+	foreach($gent as $key => $value)
+	{
+		if (isset($pagadors[$key]))
+		{
+			echo "<TR>\n\t<TD>". strtohtml($gent[$key]["nom"]) . "\n";
+
+			printf("\t<TD align=right>%.2f\n", $pagadors[$key]["pagat"]);
+			printf("\t<TD align=right>%.2f\n", $pagadors[$key]["cobrat"]);
+			printf("\t<TD align=right>%.2f\n", $pagadors[$key]["pagat"] - $pagadors[$key]["cobrat"]);
+
+			$suma_pagat += $pagadors[$key]["pagat"];
+			$suma_cobrat += $pagadors[$key]["cobrat"];
+			$suma_balans += $pagadors[$key]["pagat"] - $pagadors[$key]["cobrat"]; 
+		}
+	}
+	echo "<TR>\n\t<TH>Total\n";
+	printf("\t<TD align=right>%.2f\n", $suma_pagat);
+	printf("\t<TD align=right>%.2f\n", $suma_cobrat);
+	printf("\t<TD align=right>%.2f\n", $suma_balans);
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+<BR>
+<CENTER>
+<TABLE BORDER=2>
+<TR>
+	<TD><A HREF="delete-pagament?id=<?php echo $_GET["id"]; ?>&amp;sure=yes"><STRONG>ELIMINAR SEGUR!</STRONG></A>
+</TR>
+</TABLE>
+</CENTER>
+
+<?php
+}
+elseif (isset($_GET["id"]) && $_GET["sure"] == "yes")
+{
+	// Borrem pagadors
+	$query = "DELETE FROM pagadors WHERE data=FROM_UNIXTIME($data);";
+	if ($touchdb)
+	{
+		$resultat = mysql_query($query, $connexio);
+		if (!$resultat)
+			warn_mysql("pagadors");
+	}
+	else
+		echo $query . "<BR>\n";
+
+	// Borrem pagament
+	$query = "DELETE FROM pagaments WHERE data=FROM_UNIXTIME($data);";
+	if ($touchdb)
+	{
+		$resultat = mysql_query($query, $connexio);
+		if (!$resultat)
+			warn_mysql("pagaments");
+	}
+	else
+		echo $query . "<BR>\n";
+
+	echo "<p>Si no hi ha cap error en línies anteriors, el pagament ha estat eliminat.</p>\n";
+	
+}
+?>
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/faq.html	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,268 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Frequently Asked Questions</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<h1 align=center>Ètxelon - Frequently Asked Questions</h1>
+
+<A HREF="#faq1">1. Què és l'Ètxelon?</A> <BR>
+<A HREF="#faq2">2. Què són les <em>compres</em>?</A> <BR>
+<A HREF="#faq3">3. Què són els <em>pagaments</em>?</A> <BR>
+<A HREF="#faq4">4. Què és el preu d'una compra?</A> <BR>
+<A HREF="#faq5">5. Com funcionen les <em>excepcions</em>?</A> <BR>
+<A HREF="#faq6">6. Nosaltres fem servir <em>pot comú</em>.
+Com el fem participar al programa? </A> <BR>
+<A HREF="#faq7">7. Tenim un servei que s'ha de pagar a través del banc. Podem
+contar-lo amb el
+programa?</A> <BR>
+<A HREF="#faq8">8. Per anar més ràpid, podem crear una persona que representi
+a un
+conjunt?</A> <BR>
+<A HREF="#faq9">9. Quina diferència hi ha entre els habitants i els no
+habitants?</A> <BR>
+<A HREF="#faq10">10. Perquè haig de tenir fitxada a la gent, encara que només
+hi
+tingui un sol deute?</A> <BR>
+<A HREF="#faq11">11. Puc borrar a una persona?</A> <BR>
+<A HREF="#faq12">12. Si dec diners, com sé a qui els dec?</A> <BR>
+<A HREF="#faq13">13. Com sé que el programa compta bé?</A> <BR>
+<A HREF="#faq14">14. En quina moneda funciona el programa?</A> <BR>
+<A HREF="#faq15">15. Què volen dir els números en vermell?</A> <BR>
+<A HREF="#faq16">16. Puc estafar o ser estafat amb l'Ètxelon?</A> <BR>
+<A HREF="#faq17">17. Fa l'Ètxelon que no em tornin mai més els diners que
+em deuen?</A> <BR>
+<A HREF="#faq18">18. Al afegir una compra, què significa <em>a parts
+iguals</em>?</A> <BR>
+<A HREF="#faq19">19. Al afegir una compra, no em quadra al utilitzar
+repartiment <em>"cal pagar"</em></A>
+
+<HR WIDTH="70%">
+
+<h2><A NAME="faq1">1. Què és l'Ètxelon?</A></h2>
+
+<p>L'Ètxelon és un programa pensat per portar les comptes entre un grup de
+persones. Va ser inicialment creat per fer-ho entre companys de pis, però el seu
+ús es pot extendre a grups d'amics, o de fet, a qualsevol grup de persones que
+moguin diners entre ells. </p>
+<p>El programa controla tots els moviments diferenciant-los en dos tipus:
+<em>compres</em> i <em>pagaments</em>.
+Altres preguntes en aquesta FAQ fan referència als dubtes
+que hi puguin haver.</p>
+
+<h2><A NAME="faq2">2. Què són les <em>compres</em>?</A></h2>
+
+<p>Les <em>compres</em>
+ofereixen el control de diners quan es pagen diners a una tercera
+persona (normalment una empresa, una botiga), sense que aquesta els hagi
+de tornar mai. El
+cas més típíc és quan es compra alguna cosa a alguna botiga (d'aquí el nom de
+<em>compres</em>). </p>
+<p>En una compra hi ha dos moviments a destacar: pagar i haver de pagar. Hi ha
+persones que paguen la compra, i n'hi ha que són les que els tocaria pagar-la.
+Això depen de cada compra, i el programa ha de saber quina és la quantitat que
+ha pagat cadascú, i la que li tocaria pagar en realitat.</p>
+<p>El camp <em>pagat</em> determina com s'han pagat els diners a la botiga, i en
+total ha de sumar el <em>preu</em> de la compra. </p>
+
+<p>Els diners que paguen en una compra es consideren perduts (justificadament,
+clar). No es controla quants diners es dóna a una botiga). </p>
+
+<h2><A NAME="faq3">3. Què són els <em>pagaments</em>?</A></h2>
+
+<p>Els <em>pagaments </em>
+controlen els diners que es dónen d'una persona a una altra.
+Al contrari de les compres, estan pensats per moure diners <strong>entre les
+persones</strong>. S'entenen casos així els préstecs de diners, o bé quan volen
+saldar deutes (ja sigui parcial o totalment). De fet, no hi ha cap diferència
+entre aquests dos casos, ja que sempre és que unes persones paguen a unes
+altres. D'aquí el nom de <em>pagaments</em>.</p>
+
+<h2><A NAME="faq4">4. Què és el preu d'una compra?</A></h2>
+
+<p>El preu d'una compra és la quantitat de diners total que s'ha donat a la
+botiga. El programa es cuida de repartir les coses quan hi ha excepcions. </p>
+
+<h2><A NAME="faq5">5. Com funcionen les <em>excepcions</em>?</A></h2>
+
+<p>Les <em>excepcions </em>
+són parts d'una compra que s'han de repartir entre els
+compradors de diferent manera a la especificada de manera general. De moment (i
+per comoditat), només es poden repartir les
+<em>excepcions </em> a parts iguals.</p>
+
+<p>A les <em>excepcions </em>
+hi pot participar gent diferent que a la especificada de
+manera general a la compra, o bé els mateixos que han participat.
+El programa es
+cuidarà de controlar quant ha de deure o pagar cadascú als resultats finals.</p>
+
+<h2><A NAME="faq6">6. Nosaltres fem servir <em>pot comú</em>.
+Com el fem participar al programa?</A></h2>
+
+<p>El programa serveix per evitar els problemes que comporta utilitzar un pot
+comú. El que pretén és saber en qualsevol moment els deutes que es tenen amb la
+gent; aquests es poden saldar regularment, o anant-los equilibrant amb el temps.
+Això es pot fer fent que el que deu més diners pagui les compres, o bé que el
+que deu doni diners al que li deuen. O fins i tot, el que deu pot pagar a un
+altre que també deu. El programa s'encarrega de controlar-ho tot, perquè en
+qualsevol moment es vegi com van els deutes.</p>
+
+<p>És important <strong>no intentar barrejar</strong> l'ús d'un pot comú i
+l'Ètxelon.</p>
+
+<h2><A NAME="faq7">7. Tenim un servei que s'ha de pagar a través del banc. Podem
+contar-lo amb el
+programa?</A></h2>
+
+<p>Sí, i a més és un dels casos on el programa és més útil. S'ha de crear una
+persona "virtual" que serà el banc en qüestió. Llavors, ingressar diners al banc
+s'ha d'apuntar com si la gent donés diners a la persona <em>banc</em>. Quan
+l'empresa a qui hem de pagar ens cobra diners pel banc, ho apuntem com una
+compra que ha pagat la persona <em>banc</em> per nosaltres (nosaltres som els
+compradors, i ell és el que paga).</p>
+
+<p>A més, així sempre es veu reflexat a les comptes finals quants diners hi ha
+al banc. S'ha de mirar de que el banc sempre degui diners a la gent (perquè li
+n'hem deixat perquè ens pagui el servei), i no que li deguin, indicador de que
+no hi ha prous diners a la compta.</p>
+
+<h2><A NAME="faq8">8. Per anar més ràpid, podem crear una persona que representi
+a un
+conjunt?</A></h2>
+
+<p>Es pretén poder fer grups de persones, però encara no està fet. Es pot crear
+una persona que representi a un conjunt, però llavors no quedarà clara la
+relació entre aquesta persona i les que representa.</p>
+
+<h2><A NAME="faq9">9. Quina diferència hi ha entre els habitants i els no
+habitants?</A></h2>
+
+<p>En realitat no hi ha cap diferència. Simplement, els habitants són els únics
+que surten en alguns llistats poc detallats. També venen colocats per defecte a
+les compres, i a les comptes finals surten a devant de la resta de gent.</p>
+
+<p>Convertir en habitant a una persona (o cosa) que no sol itervenir a les
+compres només farà que haguem de retocar sovint els paràmetres que venen per
+defecte al afegir una nova compra. </p>
+
+<p>Aquí també es veu que el programa està molt enfocat a un pis d'estudiants. En
+el cas de grups d'amics, es podrien considerar habitants els que més tenen a
+veure en compres (els que compren les coses més sovint). Sempre hi ha d'haver
+com a mínim <strong>un</strong> habitant.</p>
+
+<h2><A NAME="faq10">10. Perquè haig de tenir fitxada a la gent, encara que només
+hi
+tingui un sol deute?</A></h2>
+
+<p>El programa controla deutes entre "entitats", que s'enten com a persones, o
+bé com a altres coses (com l'exemple del banc, vist més amunt). No es referencia
+pel nom de la gent, ja que podria portar problemes si alguns noms s'apunten de
+manera diferent.</p>
+
+<p>És possible que per qüestions d'escriptura diferent del nom, a algú se li
+acudeixi afegir una persona que ja existeix, però utilitzant un nom diferent per
+referenciar-lo. És fàcil preveure els problemes que això comportarà.</p>
+
+<h2><A NAME="faq11">11. Puc borrar a una persona?</A></h2>
+
+<p>Encara no està implementat, però és evident que no es pot borrar una persona
+que hagi tingut a veure en alguna compta. Quan hi hagi la opció, només es podrà
+fer si aquesta persona està lliure de qualsevol moviment (ja siguin compres o
+pagaments), perquè sinó faria desquadrar per sempre les comptes. </p>
+
+<h2><A NAME="faq12">12. Si dec diners, com sé a qui els dec?</A></h2>
+
+<p>El programa funciona d'una manera global; tothom ha tingut a veure en compres
+i pagaments amb moltes persones diferents (si més no, és possible que sigui
+així). Per tant, els diners es deuen a qui es deuen diners. </p>
+
+<p>En realitat no és important a qui es dónen els diners. Si algú vol quedar sense deutes, que els
+pagui a qualsevol altre, i els deutes passaran a ser de l'altre. De tota manera
+segurament és més còmode per a tothom que els diners es paguin a qui es deuen.
+</p>
+
+<h2><A NAME="faq13">13. Com sé que el programa compta bé?</A></h2>
+
+<p>Jo (l'autor) no garanteixo que funcioni bé. Només puc dir que l'utilitzo per
+les meves compres, i pel que he provat, no té cap error. Diria que
+només hi poden haver errades en el seu ús, bé sigui perquè no s'entenen bé els
+conceptes de funcionament, o bé perquè s'han entrat les dades malament. </p>
+
+<p>Cada cop que s'afegeix una compra o un pagament val la pena anar a
+visualitzar com ha quedat, ja que el programa ens oferirà un balanç total de la
+compra. Aquest ha de ser sempre de zero, ja que és la resta del que s'ha pagat
+amb el que s'ha de pagar en total. Si no és així, és que els valors s'han entrat
+malament. </p>
+
+<p>Les errades en entrar comptes o pagaments haurien de ser controlades pel
+programa, i avisar abans d'insertar els moviments a la base de dades. Ho sento,
+encara no està fet! He assumit que la gent l'utilitzarà correctament. </p>
+
+<h2><A NAME="faq14">14. En quina moneda funciona el programa?</A></h2>
+
+<p>Funciona per a qualsevol, sempre que totes les quantitats de diners
+estiguin en la mateixa moneda! En principi està pensat per a Euros, i per això
+s'ofereixen els resultats en dos decimals.</p>
+
+<h2><A NAME="faq15">15. Què volen dir els números en vermell?</A></h2>
+
+<p>Als balanços finals, són quantitats de diners que es deuen. En realitat,
+qualsevol número negatiu es mostra en vermell, per fer més còmode la lectura.
+</p>
+
+<h2><A NAME="faq16">16. Puc estafar o ser estafat amb l'Ètxelon?</A></h2>
+
+<p>Evidentment, tothom ha de fer servir el programa bé. Si algú canvia compres
+per altres, o les apunta intencionadament malament al seu favor, l'Ètxelon no
+hi pot fer res. Per tant, el bon càlcul dels deutes també està relacionat amb si
+la gent que utilitza l'Ètxelon és de confiança o no. </p>
+
+<h2><A NAME="faq17">17. Fa l'Ètxelon que no em tornin mai més els diners que
+em deuen?</A></h2>
+
+<p>Això queda a l'elecció de la gent que utilitza el programa. Evidentment, si
+no es paguen els deutes, quedaran tots reflexats als comptes finals.</p>
+
+<p>La manera normal d'utilitzar el programa és anar equilibrant els deutes
+fent pagar més en les compres a qui deu més diners, o bé que el més deutor
+dóni directament diners a l'altra gent una vegada superada una quantitat
+límit de diners. L'Ètxelon, evidentment, no controla res d'això; simplement
+ofereix xifres.</p>
+
+<h2><A NAME="faq18">18. Al afegir una compra, què significa <em>a parts
+iguals</em>?</A></h2>
+
+<p>Significa que els diners s'haurien d'haver pagat entre tots, repartits a
+parts iguals. Per exemple, si es fa una compra de 100 Euros, i es sel·leccionen
+quatre persones, a cadascuna li tocarà pagar-ne 25. </p>
+
+<p>Aquesta és l'opció que vé per defecte al afegir una nova compra. També es pot
+escollir repartir-ho amb percentatges, o bé directament indicant el que ha de
+pagar cadascú. L'opció de triar com repartir la compra està a l'esquerra de la
+forma de repartiment.</p>
+
+<h2><A NAME="faq19">19. Al afegir una compra, no em quadra al utilitzar
+repartiment <em>"cal pagar"</em></A></h2>
+
+<p>Això passa perquè hi ha excepcions. La suma del que es paga amb <em>"cal
+pagar"</em>
+no ha d'incloure les excepcions, tot i que aquestes estan incloses en el preu
+total. </p>
+
+<p>Per tant, la suma del que es paga d'aquesta manera ha de ser el total del
+preu de la compra <strong>menys</strong> el total de les excepcions segons cada
+persona. De fet, la suma del que es paga amb <em>"cal pagar"</em> és el que
+s'anomena <em>preu a repartir</em> quan es visualitza una compra.</p>
+
+<HR WIDTH="70%">
+
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</BODY>
+</HTML>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/getdb.inc	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,217 @@
+
+<?php
+	include("db-config.inc");
+
+	function obtenir_habitants($connection)
+	{
+		$resultat_habitants = mysql_query("SELECT id,nom FROM gent WHERE habitant=1 ORDER BY nom;", $connection);
+		if (!$resultat_habitants)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al obtenir
+				<STRONG>habitants</STRONG>! </p>
+<?php
+			echo "Error MYSQL:" . mysql_errno() . ": " . mysql_error() . "<BR>";
+		}
+
+		// Processem el resultat
+		while ($fila = mysql_fetch_row($resultat_habitants))
+			$habitant[] = array( "id" => $fila[0],
+										"nom" => $fila[1]);
+		mysql_free_result($resultat_habitants);
+		return $habitant;
+	}
+
+	function obtenir_altres($connection)
+	{
+		$resultat_altres = mysql_query("SELECT id,nom FROM gent WHERE habitant=0 ORDER BY nom;", $connection);
+
+		if (!$resultat_altres)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al obtenir
+				<STRONG>altres</STRONG>! </p>
+<?php
+			echo "Error MYSQL:" . mysql_errno().": ".mysql_error()."<BR>";
+		}
+
+		while ($fila = mysql_fetch_row($resultat_altres))
+			$altres[] = array( "id" => $fila[0],
+									"nom" => $fila[1]);
+		return $altres;
+	}
+
+	function obtenir_gent($connection)
+	{
+		$resultat = mysql_query("SELECT id,nom,habitant FROM gent ORDER BY habitant DESC ,nom ASC", $connection);
+
+		if (!$resultat)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al obtenir
+				<STRONG>gent</STRONG>! </p>
+<?php
+			echo "Error MYSQL:" . mysql_errno().": ".mysql_error()."<BR>";
+		}
+
+		while ($fila = mysql_fetch_row($resultat))
+			$gent[$fila[0]] = array( "nom" => $fila[1],
+									"habitant" => $fila[2]);
+		return $gent;
+	}
+
+	function obtenir_compra($date,$connection)
+	{
+		$resultat = mysql_query("SELECT UNIX_TIMESTAMP(data),botiga,motiu,preu,comentari FROM compres WHERE data=FROM_UNIXTIME(" . $date . ")", $connection);
+
+		// Només hi haurà una fila
+		$fila = mysql_fetch_row($resultat);
+		$compra["data"] = $fila[0];
+		$compra["botiga"] = $fila[1];
+		$compra["motiu"] = $fila[2];
+		settype($fila[3],"float");
+		$compra["preu"] = $fila[3];
+		$compra["comentari"] = $fila[4];
+
+		return $compra;
+	}
+
+	function obtenir_pagament($date,$connection)
+	{
+		$resultat = mysql_query("SELECT UNIX_TIMESTAMP(data),comentari FROM pagaments WHERE data=FROM_UNIXTIME(" . $date . ")", $connection);
+
+		// Només hi haurà una fila
+		$fila = mysql_fetch_row($resultat);
+		$pagament["data"] = $fila[0];
+		$pagament["comentari"] = $fila[1];
+
+		return $pagament;
+	}
+
+	function obtenir_excepcions($date,$connection)
+	{
+		$query = "SELECT id,article,preu FROM excepcions WHERE data=FROM_UNIXTIME($date) ORDER BY article";
+		$resultat = mysql_query($query, $connection);
+
+		while ($fila = mysql_fetch_row($resultat))
+			$excepcio[$fila[0]] = array("article" => $fila[1], "preu" => $fila[2]);
+		
+		if (!isset($excepcio))
+			$excepcio=0;
+		return $excepcio;
+	}
+
+	function obtenir_compradors($date,$connection)
+	{
+		$query = "SELECT compradors.persona,compradors.pagat,compradors.toca_pagar FROM compradors,gent WHERE compradors.data=FROM_UNIXTIME($date) AND compradors.persona=gent.id ORDER BY gent.nom;";
+		$resultat = mysql_query($query, $connection);
+
+		// Puc fer lo de sota perquè per una sola compra no hi poden haver compradors repetits.
+		while ($fila = mysql_fetch_row($resultat))
+			$compradors[$fila[0]] = array( "pagat" => $fila[1],
+										"toca_pagar" => $fila[2]);
+		return $compradors;
+	}
+
+	function obtenir_compradors_excepcions($ex_id,$connection)
+	{
+		$query = "SELECT compradors_excepcions.persona,compradors_excepcions.toca_pagar FROM compradors_excepcions,gent WHERE compradors_excepcions.ex_id=$ex_id AND compradors_excepcions.persona = gent.id ORDER BY gent.nom;";
+		$resultat = mysql_query($query, $connection);
+
+		// Puc fer lo de sota perquè per una sola compra no hi poden haver compradors repetits.
+		while ($fila = mysql_fetch_row($resultat))
+			$compradors[$fila[0]] = array("toca_pagar" => $fila[1]);
+		return $compradors;
+	}
+
+	function obtenir_pagadors($date,$connection)
+	{
+		$query = "SELECT pagadors.persona,pagadors.pagat,pagadors.cobrat FROM pagadors,gent WHERE pagadors.data=FROM_UNIXTIME($date) AND pagadors.persona=gent.id ORDER BY gent.nom;";
+		$resultat = mysql_query($query, $connection);
+
+		// Puc fer lo de sota perquè per en un sol pagament no hi poden haver pagadors repetits
+		while ($fila = mysql_fetch_row($resultat))
+			$pagadors[$fila[0]] = array( "pagat" => $fila[1],
+												"cobrat" => $fila[2]);
+		return $pagadors;
+	}
+
+	function obtenir_compres($connection)
+	{
+		$resultat = mysql_query("SELECT UNIX_TIMESTAMP(data),botiga,motiu,preu,comentari FROM compres ORDER BY data DESC;", $connection);
+
+
+		while ($fila = mysql_fetch_row($resultat))
+		{
+			settype($fila[3],"double");
+			$compres[$fila[0]] = array(
+				"botiga" => $fila[1],
+				"motiu" => $fila[2],
+				"preu" => $fila[3],
+				"comentari" => $fila[4]);
+		}
+
+		if (!isset($compres))
+			$compres=0;
+
+		return $compres;
+	}
+
+	function obtenir_pagaments($connection)
+	{
+		$resultat = mysql_query("SELECT UNIX_TIMESTAMP(data),comentari FROM pagaments ORDER BY data DESC;", $connection);
+
+
+		while ($fila = mysql_fetch_row($resultat))
+		{
+			$pagaments[$fila[0]] = array("comentari" => $fila[1]);
+		}
+
+		if (!isset($pagaments))
+			$pagaments=0;
+
+		return $pagaments;
+	}
+
+	// FUNCIONS PER GENERAR CODI HTML
+
+	function select_altres($variable, $default=-1)
+	{
+		$num_altres = count($GLOBALS["altres"]);
+
+		echo "<SELECT name=\"$variable\">\n";
+
+		foreach($GLOBALS["altres"] as $i)
+		{
+			echo "<OPTION value=\"" .$i["id"] . "\"";
+			if ($default == $i["id"])
+				echo " selected";
+			echo ">" . strtohtml($i["nom"]) . "\n";
+		}
+
+		echo "</SELECT>";
+	}
+
+	function strtosql($cadena)
+	{
+		return ereg_replace("\'", "\'", $cadena);
+	}
+
+	function strtohtml($cadena)
+	{
+		$new= ereg_replace("[<]", "&lt;", $cadena);
+		$new= ereg_replace("[>]", "&gt;'", $cadena);
+		$new= ereg_replace("[&]", "&amp;'", $cadena);
+
+		return $new;
+	}
+
+	function pricetohtml($price)
+	{
+		if ($price < 0)
+			return sprintf("<FONT COLOR=\"FF0000\">%.2f</FONT>", $price);
+		else
+			return sprintf("%.2f", $price);
+
+	}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/index.html	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Menú principal</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<h1 align=center>Ètxelon</h1>
+
+<CENTER>
+
+<h2>Menú</h2>
+
+<TABLE BORDER=1>
+<TR>
+	<TH>Compres
+	<TH>Pagaments
+	<TH>Gent
+<TR>
+	<TD ALIGN=center> <A HREF="list-compres">Llistat</A>
+	<TD ALIGN=center> <A HREF="list-pagaments">Llistat</A>
+	<TD ALIGN=center> <A HREF="list-gent">Llistat</A>
+<TR>
+	<TD ALIGN=center> <A HREF="update-compra">Afegir nova</A>
+	<TD ALIGN=center> <A HREF="update-pagament">Afegir nou</A>
+	<TD ALIGN=center> <A HREF="update-gent">Afegir nova</A>
+<TR>
+	<TD COLSPAN=3 ALIGN=center> <A HREF="calc-deutes">Calcular deutes</A>
+</TABLE>
+
+<BR>
+
+<TABLE BORDER=1>
+<TR>
+	<TH COLSPAN=3>Documentació
+<TR>
+	<TD COLSPAN=3 ALIGN=center> <A HREF="faq">F.A.Q.</A>
+</TABLE>
+</CENTER>
+
+<HR WIDTH="70%">
+
+<H2>Descripció</H2>
+
+<P>Aquest és un sistema de control de les compres i préstecs que es fan entre
+els habitants d'un pis i els seus amics.
+Se suposa que s'ha de fer servir quan
+es vulguin controlar detalladament els deutes que hi ha entre els habitants, i
+entre els habitants i els amics.  </P>
+
+<HR WIDTH="70%">
+
+<H2>Utilització</H2>
+
+<!--
+<TABLE ALIGN=center BORDER=2>
+<TR>
+<TD><STRONG>IMPORTANT!!!!!</STRONG> No utilitzeu el caràcter
+<em>apòstrof</em> (') en cap camp dels formularis!
+</TABLE>
+-->
+
+
+<UL>
+<LI><strong>Compres</strong>
+	<UL>
+	<LI>Les compres indiquen la manera en què perden controladament diners els
+		habitants del pis (i amics). Normalment això passa quan es compren coses.
+	<LI>L'opció <em>"afegir nova compra"</em> permet que qualsevol persona
+		(de la <em>gent</em>) participi en la compra, ja sigui perquè
+		s'ha de repartir entre ell, o bé perquè alguna cosa era per ell.
+	</UL>
+<LI><STRONG>Pagaments</STRONG>
+	<UL>
+	<LI>Els pagaments són la manera en què s'intercanvien diners entre ells els
+		habitants del pis i els amics. Pot ser tan per préstecs com per passar
+		comptes d'antics deutes.
+	<LI>Si es vol fer un control minuciós dels diners, s'haurien de guardar tots
+		els préstecs i retorns de diners que es fan.
+	</UL>
+<LI><STRONG>Gent</STRONG>
+	<UL>
+	<LI>Fa referència a la gent que té a veure amb les compres. N'hi ha dos
+		tipus: els <em>habitants del pis</em> i els <em>altres</em> (amics).
+	<LI>Només es poden portar els comptes de la gent controlada per la base de
+		dades. Tothom que vulgui ser tingut en compte en els deutes, ha d'estar
+		fitxat.
+	<LI>Normalment s'afegira gent que no és del pis (<em>no habitant</em>), o
+		sigui, amics amb qui s'han de passar comptes.
+	</UL>
+<LI>Calcular deutes
+	<UL>
+	<LI>Aquesta última opció serveix per veure l'estat actual de les comptes de
+	la gent. Es tenen en compte tant les compres com els pagaments.
+	</UL>
+</UL>
+
+<HR WIDTH="70%">
+
+<p> The whole engine validates HTML 3.2
+	<a href="http://validator.w3.org/check/referer"><img border="0"
+		src="/valid-html32.png"
+		alt="Valid HTML 3.2!" height="31" width="88"></a>
+</p>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/list-compres.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Consulta de compres</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<h1 align=center>Ètxelon</h1>
+<h2>Total de compres</h2>
+
+<?php
+	include("getdb.inc");
+	$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);
+?>
+
+<TABLE BORDER=1>
+<TR>
+	<TH ROWSPAN=2>Data
+	<TH ROWSPAN=2>Botiga
+	<TH ROWSPAN=2>Motiu
+	<TH ROWSPAN=2>Preu
+	<TH COLSPAN=<?php echo $num_habitants?>>Pagat
+	<TH ROWSPAN=2>Excepcions
+	<TH ROWSPAN=2>Eliminiar
+<TR>
+<?php
+		foreach($habitants as $i)
+			echo "\t<TH>" . strtohtml($i["nom"]). "\n";
+?>
+
+<?php
+	$query = "SELECT UNIX_TIMESTAMP(data),botiga,motiu,preu FROM compres ORDER BY data DESC";
+	$resultat = mysql_query($query, $connexio);
+
+	// Per cada compra ...
+	$num_compres = 0;
+	while ($fila = mysql_fetch_row($resultat))
+	{
+		$data = $fila[0];
+		$date_shown = date("d/m/Y H:i",$data);
+		printf("<tr>\n\t<td><A HREF=\"view-compra?id=%s\">%s</A>\n", $data,
+			$date_shown);
+		printf("\t<td>%s\n", strtohtml($fila[1]));
+		printf("\t<td>%s\n", strtohtml($fila[2]));
+		printf("\t<td align=right>%s\n", pricetohtml($fila[3]));
+
+		// Obtenim lo que toca pagar a cadascú
+		$query = "SELECT compradors.persona,compradors.pagat,compradors.toca_pagar FROM compradors,gent WHERE compradors.data = FROM_UNIXTIME($data) AND compradors.persona = gent.id AND gent.habitant = 1 ORDER BY gent.nom;";
+		$resultat2 = mysql_query($query, $connexio);
+		
+		unset($compradors);
+		while ($fila2 = mysql_fetch_row($resultat2))
+		{
+			$compradors[$fila2[0]] = array( "pagat" => $fila2[1],
+											"toca_pagar" => $fila2[2]);
+		}
+		foreach($habitants as $i)
+		{
+			if (isset($compradors[$i["id"]]))
+				printf("\t<td align=right>%s\n", pricetohtml($compradors[$i["id"]]["pagat"]));
+			else
+				printf("\t<td align=right>%s\n", pricetohtml(0));
+		}
+		$excepcions = obtenir_excepcions($data,$connexio);
+		if ($excepcions != 0)
+			printf("\t<td align=right>%d\n", count($excepcions));
+		else
+			printf("\t<td align=right>0\n");
+		printf("\t<td><A HREF=\"delete-compra?id=%s\">Eliminar</A>\n", $data);
+
+		$num_compres++;
+	}
+
+?>
+</TABLE>
+
+<P>Hi ha un total de <?php echo $num_compres ?> compres. </P>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/list-gent.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Llistat de gent</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<h1 align=center>Ètxelon</h1>
+<h2>Llistat de gent</h2>
+
+<?php
+	include("getdb.inc");
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+
+	mysql_select_db($mysql_db, $connexio);
+
+
+	// Crides a funcions per obtenir parametres
+	$altres = obtenir_altres($connexio);
+	$habitants = obtenir_habitants($connexio);
+?>
+
+<TABLE BORDER=0>
+<TR>
+<TD VALIGN=top>
+
+	<TABLE BORDER=1>
+	<CAPTION>Habitants</CAPTION>
+	<TR>
+		<TH>Id
+		<TH>Nom
+<?php
+		foreach($habitants as $i)
+		{
+			echo "<TR>\n";
+			echo "\t<TD>" . $i["id"] . "\n";
+			echo "\t<TD>" . strtohtml($i["nom"]) . "\n";
+		}
+?>
+	</TABLE>
+<TD VALIGN=top>
+
+	<TABLE BORDER=1>
+	<CAPTION>Altres</CAPTION>
+	<TR>
+		<TH>Id
+		<TH>Nom
+<?php
+		foreach($altres as $i)
+		{
+			echo "<TR>\n";
+			echo "\t<TD>" . $i["id"] . "\n";
+			echo "\t<TD>" . strtohtml($i["nom"]) . "\n";
+		}
+?>
+	</TABLE>
+<TD VALIGN=top>
+	<UL>
+	<LI>Els noms estan ordenats alfabèticament
+	<LI>El camp <em>"Id"</em> és l'identificador que té la persona dins la
+		base de dades.
+	</UL>
+
+</TABLE>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/list-pagaments.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Consulta de pagaments</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<h1 align=center>Ètxelon</h1>
+<h2>Total de pagaments</h2>
+
+<?php
+	include("getdb.inc");
+	$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);
+?>
+
+<TABLE BORDER=1>
+<TR>
+	<TH ROWSPAN=2>Data
+	<TH COLSPAN=<?php echo $num_habitants?>>Pagat
+	<TH COLSPAN=<?php echo $num_habitants?>>Cobrat
+	<TH ROWSPAN=2>Comentari
+	<TH ROWSPAN=2>Eliminar
+<TR>
+<?php
+		foreach($habitants as $i)
+			echo "\t<TH>" . strtohtml($i["nom"]) . "\n";
+		foreach($habitants as $i)
+			echo "\t<TH>" . strtohtml($i["nom"]) . "\n";
+?>
+
+<?php
+	$query = "SELECT UNIX_TIMESTAMP(data),comentari FROM pagaments ORDER BY data DESC";
+	$resultat = mysql_query($query, $connexio);
+
+	// Per cada pagament ...
+	$num_pagaments = 0;
+	while ($fila = mysql_fetch_row($resultat))
+	{
+		$data = $fila[0];
+		$date_shown = date("d/m/Y H:i",$data);
+		printf("<tr>\n\t<td><A HREF=\"view-pagament?id=%s\">%s</A>\n",
+			$data, $date_shown);
+
+		/*
+		// Obtenim lo que toca pagar a cadascú
+		$query = "SELECT pagadors.persona,pagadors.pagat,pagadors.cobrat FROM pagadors,gent WHERE pagadors.data = FROM_UNIXTIME($data) AND pagadors.persona = gent.id AND gent.habitant = 1 ORDER BY gent.nom;";
+		$resultat2 = mysql_query($query, $connexio);
+		
+		while ($fila2 = mysql_fetch_row($resultat2))
+		{
+			$pagadors[$fila2[0]] = array( "pagat" => $fila2[1]);
+		}
+		*/
+		$pagadors = obtenir_pagadors($data, $connexio);
+		foreach($habitants as $i)
+		{
+			if (isset($pagadors[$i["id"]]))
+				printf("\t<td align=right>%s\n", pricetohtml($pagadors[$i["id"]]["pagat"]));
+			else
+				printf("\t<td align=right>%s\n", pricetohtml(0));
+		}
+		foreach($habitants as $i)
+		{
+			if (isset($pagadors[$i["id"]]))
+				printf("\t<td align=right>%s\n", pricetohtml($pagadors[$i["id"]]["cobrat"]));
+			else
+				printf("\t<td align=right>%s\n", pricetohtml(0));
+		}
+		// Comentari
+		printf("\t<td>%s\n", strtohtml($fila[1]));
+		// Eliminar
+		printf("\t<td align=center><A HREF=\"delete-pagament?id=%s\">Eliminar</A>\n", $data);
+		$num_pagaments++;
+	}
+
+?>
+</TABLE>
+
+<P>Hi ha un total de <?php echo $num_pagaments ?> pagaments. </P>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/list-persona.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Consulta de compres</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<?php
+	include("getdb.inc");
+	$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);
+
+	$gent = obtenir_gent($connexio);
+
+	$persona = $_GET["user_id"];
+
+	
+	// Necessitem $GET_["user_id"]
+?>
+
+<h1 align=center>Ètxelon</h1>
+<h1 align=center>Moviments de
+"<EM><?php echo strtohtml($gent[$persona]["nom"]) ?></EM>"</h1>
+
+<h2>Compres on ha tingut a veure</h2>
+
+
+<TABLE BORDER=1>
+<TR>
+	<TH>Data
+	<TH>Botiga
+	<TH>Motiu
+	<TH>Preu
+	<TH>Pagat
+	<TH>Excepcions
+	<TH>Eliminiar
+<?php
+	$query = "SELECT UNIX_TIMESTAMP(compres.data),compres.botiga,compres.motiu,compres.preu FROM compres,compradors WHERE compradors.data=compres.data AND compradors.persona=$persona GROUP BY compres.data ORDER BY compres.data DESC;";
+	$resultat = mysql_query($query, $connexio);
+
+	// Per cada compra ...
+	$num_compres = 0;
+	while ($fila = mysql_fetch_row($resultat))
+	{
+		$data = $fila[0];
+		$date_shown = date("d/m/Y H:i",$data);
+		printf("<tr>\n\t<td><A HREF=\"view-compra?id=%s\">%s</A>\n", $data,
+			$date_shown);
+		printf("\t<td>%s\n", strtohtml($fila[1]));
+		printf("\t<td>%s\n", strtohtml($fila[2]));
+		printf("\t<td align=right>%s\n", pricetohtml($fila[3]));
+
+		// Obtenim lo que toca pagar a cadascú
+		$query = "SELECT compradors.persona,compradors.pagat,compradors.toca_pagar FROM compradors WHERE compradors.data = FROM_UNIXTIME($data) AND compradors.persona = $persona;";
+		$resultat2 = mysql_query($query, $connexio);
+		
+		unset($compradors);
+		// Hauria de sortir només 1 fila! 1 per la persona que hem escollit.
+		while ($fila2 = mysql_fetch_row($resultat2))
+		{
+			$compradors[$fila2[0]] = array( "pagat" => $fila2[1],
+											"toca_pagar" => $fila2[2]);
+		}
+
+		if (isset($compradors[$persona]))
+			printf("\t<td align=right>%s\n", pricetohtml($compradors[$persona]["pagat"]));
+		else
+			printf("\t<td align=right>%s\n", pricetohtml(0));
+
+		$excepcions = obtenir_excepcions($data,$connexio);
+		if ($excepcions != 0)
+			printf("\t<td align=right>%d\n", count($excepcions));
+		else
+			printf("\t<td align=right>0\n");
+		printf("\t<td><A HREF=\"delete-compra?id=%s\">Eliminar</A>\n", $data);
+
+		$num_compres++;
+	}
+
+?>
+</TABLE>
+
+<P>En/La <?php echo $gent[$persona]["nom"] ?> té a veure en <?php echo $num_compres ?> compres. </P>
+
+<HR WIDTH="70%">
+
+
+<h2>Compres on ha tingut a veure <EM>amb excepcions</EM></h2>
+
+<TABLE BORDER=1>
+<TR>
+	<TH>Data
+	<TH>Botiga
+	<TH>Motiu
+	<TH>Preu
+	<TH>Pagat
+	<TH>Excepcions
+	<TH>Eliminiar
+<?php
+	$query = "SELECT UNIX_TIMESTAMP(compres.data),compres.botiga,compres.motiu,compres.preu FROM compres,compradors_excepcions,excepcions WHERE excepcions.data=compres.data AND compradors_excepcions.ex_id=excepcions.id AND compradors_excepcions.persona=$persona GROUP BY compres.data ORDER BY compres.data DESC;";
+	$resultat = mysql_query($query, $connexio);
+
+	// Per cada compra ...
+	$num_compres = 0;
+	while ($fila = mysql_fetch_row($resultat))
+	{
+		$data = $fila[0];
+		$date_shown = date("d/m/Y H:i",$data);
+		printf("<tr>\n\t<td><A HREF=\"view-compra?id=%s\">%s</A>\n", $data,
+			$date_shown);
+		printf("\t<td>%s\n", strtohtml($fila[1]));
+		printf("\t<td>%s\n", strtohtml($fila[2]));
+		printf("\t<td align=right>%s\n", pricetohtml($fila[3]));
+
+		// Obtenim lo que toca pagar a cadascú
+		$query = "SELECT compradors.persona,compradors.pagat,compradors.toca_pagar FROM compradors WHERE compradors.data = FROM_UNIXTIME($data) AND compradors.persona = $persona;";
+		$resultat2 = mysql_query($query, $connexio);
+		
+		unset($compradors);
+		// Hauria de sortir només 1 fila! 1 per la persona que hem escollit.
+		while ($fila2 = mysql_fetch_row($resultat2))
+		{
+			$compradors[$fila2[0]] = array( "pagat" => $fila2[1],
+											"toca_pagar" => $fila2[2]);
+		}
+
+		if (isset($compradors[$persona]))
+			printf("\t<td align=right>%s\n", pricetohtml($compradors[$persona]["pagat"]));
+		else
+			printf("\t<td align=right>%s\n", pricetohtml(0));
+
+		$excepcions = obtenir_excepcions($data,$connexio);
+		if ($excepcions != 0)
+			printf("\t<td align=right>%d\n", count($excepcions));
+		else
+			printf("\t<td align=right>0\n");
+		printf("\t<td><A HREF=\"delete-compra?id=%s\">Eliminar</A>\n", $data);
+
+		$num_compres++;
+	}
+
+?>
+</TABLE>
+
+<P>En/La <?php echo $gent[$persona]["nom"] ?> té a veure <em>amb excepcions</em> en <?php echo $num_compres ?> compres. </P>
+
+<HR WIDTH="70%">
+
+<!-- ************* PAGAMENTS ************** -->
+
+<h2>Pagaments</h2>
+
+
+<TABLE BORDER=1>
+<TR>
+	<TH ROWSPAN=1>Data
+	<TH COLSPAN=1>Balanç
+	<TH ROWSPAN=1>Comentari
+	<TH ROWSPAN=1>Eliminar
+<?php
+	$query = "SELECT UNIX_TIMESTAMP(pagaments.data),pagaments.comentari FROM pagaments,pagadors WHERE pagaments.data=pagadors.data AND pagadors.persona=$persona ORDER BY pagaments.data DESC";
+	$resultat = mysql_query($query, $connexio);
+
+	// Per cada pagament ...
+	$num_pagaments=0;
+	while ($fila = mysql_fetch_row($resultat))
+	{
+		$data = $fila[0];
+		$date_shown = date("d/m/Y H:i",$data);
+		printf("<tr>\n\t<td><A HREF=\"view-pagament?id=%s\">%s</A>\n",
+			$data, $date_shown);
+
+		/*
+		// Obtenim lo que toca pagar a cadascú
+		$query = "SELECT pagadors.persona,pagadors.pagat,pagadors.cobrat FROM pagadors,gent WHERE pagadors.data = FROM_UNIXTIME($data) AND pagadors.persona = gent.id AND gent.habitant = 1 ORDER BY gent.nom;";
+		$resultat2 = mysql_query($query, $connexio);
+		
+		while ($fila2 = mysql_fetch_row($resultat2))
+		{
+			$pagadors[$fila2[0]] = array( "pagat" => $fila2[1]);
+		}
+		*/
+		$pagadors = obtenir_pagadors($data, $connexio);
+		if (isset($pagadors[$persona]))
+			printf("\t<td align=right>%s\n", pricetohtml($pagadors[$persona]["cobrat"] - $pagadors[$persona]["pagat"]));
+		else
+			printf("\t<td align=right>%s\n", pricetohtml(0));
+		// Comentari
+		printf("\t<td>%s\n", strtohtml($fila[1]));
+		// Eliminar
+		printf("\t<td align=center><A HREF=\"delete-pagament?id=%s\">Eliminar</A>\n", $data);
+
+		$num_pagaments++;
+	}
+
+?>
+</TABLE>
+
+
+<P>En/La <?php echo $gent[$persona]["nom"] ?> té a veure en <?php echo $num_pagaments ?> pagaments. </P>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,16 @@
+<?
+	function test($num)
+	{
+		for ($i=0; $i < $num; $i++)
+			$array[$i+10] = chr(32+$i);
+		return $array;
+	}
+
+	$a = test(50);
+	reset($a);
+
+	while(list($key,$val) = each($a))
+	{
+		echo "Element ". $key ." és \"" . $val . "\". <br>";
+	}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update-compra.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,606 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Edició de les compres</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<H1 ALIGN=center>Ètxelon</H1>
+
+<?php
+	
+	include("getdb.inc");
+
+	// Variables globals
+	$touchdb = 1;	// Tocar la base de dades
+
+	
+	// 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);
+	
+if(!isset($_POST["afegir"]) && !isset($_GET["id"]))
+{
+?>
+
+<!-- DEMANAR PER AFEGIR COSES -->
+
+<?php
+	// VARIALBES
+	if(isset($_GET["num_excepcions"]))
+		$num_excepcions= $_GET["num_excepcions"];
+	elseif(isset($_POST["num_excepcions"]))
+		$num_excepcions= $_POST["num_excepcions"];
+	else
+		$num_excepcions=3;
+
+	if(isset($_GET["num_altres"]))
+		$num_altres= $_GET["num_altres"];
+	elseif(isset($_POST["num_altres"]))
+		$num_altres= $_POST["num_altres"];
+	else
+		$num_altres=1;
+
+	if(isset($_GET["num_altres_excepcions"]))
+		$num_altres_excepcions = $_GET["num_altres_excepcions"];
+	elseif(isset($_POST["num_altres_excepcions"]))
+		$num_altres_excepcions = $_POST["num_altres_excepcions"];
+	else
+		$num_altres_excepcions=1;
+
+	// Considerem que estem retocant una compra que volem afegir, si hi ha botiga definit.
+	// Això es fa servir per les checkboxes que per default estan ON, i es vol saber si s'havien desactivat.
+	if(isset($_POST["botiga"]))
+		$retocant=1;
+	else
+		$retocant=0;
+?>
+
+<H2>Afegir nova compra</H2>
+
+<form action="update-compra" method="post">
+
+<input type=hidden name=num_excepcions value=<?php
+	echo $num_excepcions;
+	?>>
+<input type=hidden name=num_altres value=<?php
+	echo $num_altres;
+	?>>
+<input type=hidden name=num_altres_excepcions value=<?php
+	echo $num_altres_excepcions;
+	?>>
+
+<p> Dades de la compra: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Data:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="dia"
+		size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["dia"];
+			else
+				echo date('d');
+			?>">
+		<input type="text" name="mes" size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["mes"];
+			else
+				echo date('m');
+			?>">
+		<input type="text" name="any" size=4 maxlength=4
+		value="<?php
+			if ($retocant)
+				echo $_POST["any"];
+			else
+				echo date('Y');
+			?>">
+
+<TR>
+	<TH>Hora:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="hora"
+		size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["hora"];
+			else
+				echo date('H');
+			?>">
+		<input type="text" name="minut" size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["minut"];
+			else
+				echo date('i');
+			?>">
+
+<TR>
+	<TH>Botiga:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="botiga" size=30 maxlength=30 value="<?php
+	if(isset($_POST["botiga"]))
+		echo strtohtml($_POST["botiga"]);
+	?>">
+<TR>
+	<TH>Motiu:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="motiu" size=30 maxlength=250 value="<?php
+	if(isset($_POST["motiu"]))
+		echo strtohtml($_POST["motiu"]);
+	?>">
+<TR>
+	<TH>Comentari:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="comentari" size=40 maxlength=250 value="<?php
+	if(isset($_POST["comentari"]))
+		echo strtohtml($_POST["comentari"]);
+	?>">
+<TR>
+	<TH>Preu:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="preu" size=6 maxlength=8 value="<?php
+	if(isset($_POST["preu"]))
+		echo $_POST["preu"];
+	?>">
+<TR>
+	<TH>
+<?php
+		// Imprimim el nom dels habitants
+		foreach($habitants as $i)
+			echo "\t<TH>" . strtohtml($i["nom"]). "\n";
+	for($i=0; $i<$num_altres;$i++)
+		{
+			echo "\t<TH>";
+			if(isset($_POST["altres"][$i]))
+				select_altres("altres[$i]", $_POST["altres"][$i]);
+			else
+				select_altres("altres[$i]");
+			echo "\n";
+		}
+?>
+<TR>
+	<TH>Pagat:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"text\" name=\"pagat[" . $i["id"] . "]\" size=6 maxlength=8 value=";
+		if (isset($_POST["pagat"][$i["id"]]))
+			echo $_POST["pagat"][$i["id"]];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+<?php
+	for($i=0; $i<$num_altres;$i++)
+	{
+		echo "\t<TD><input type=\"text\" name=\"pagat_altres[$i]\" size=6 maxlength=8 value=";
+		if (isset($_POST["pagat_altres"][$i]))
+			echo $_POST["pagat_altres"][$i];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+<TR>
+	<TH><input type="radio" name="percentatges" value=checkboxes checked>Parts iguals:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"checkbox\" name=\"checkbox[" . $i["id"] . "]\" value=checked ";
+		// Codi raro?
+		if (isset($_POST["checkbox"][$i["id"]]))
+			echo "checked";
+		else
+			if (!$retocant)
+				echo "checked";
+		echo ">\n";
+	}
+?>
+<?php
+	for($i=0; $i<$num_altres;$i++)
+	{
+		echo "\t<TD><input type=\"checkbox\" name=\"checkbox_altres[" . $i. "]\" value=checked ";
+		// Codi raro?
+		if (isset($_POST["checkbox_altres"][$i]))
+			echo "checked";
+		echo ">\n";
+	}
+?>
+<TR>
+	<TH><input type="radio" name="percentatges" value=si>Percentatges:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"text\" name=\"percent[" . $i["id"] . "]\" size=3 maxlength=6 value=\"";
+		if (isset($_POST["percent"][$i["id"]]))
+			echo $_POST["percent"][$i["id"]];
+		else
+			echo 100/$num_habitants;
+		echo "\">\n";
+	}
+?>
+<?php
+	for($i=0; $i<$num_altres;$i++)
+	{
+		echo "\t<TD><input type=\"text\" name=\"percent_altres[$i]\" size=3 maxlength=6 value=\"\n";
+		if (isset($_POST["percent_altres"][$i]))
+			echo $_POST["percent_altres"][$i];
+		else
+			echo "0";
+		echo "\">\n";
+	}
+?>
+<TR>
+	<TH><input type="radio" name="percentatges" value=no>Cal pagar:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"text\" name=\"tocapagar[" . $i["id"] . "]\" size=6 maxlength=8 value=\"";
+		if (isset($_POST["tocapagar"][$i["id"]]))
+			echo $_POST["tocapagar"][$i["id"]];
+		else
+			echo "0";
+		echo "\">\n";
+	}
+?>
+<?php for($i=0; $i<$num_altres;$i++)
+		{
+			echo "<TD><input type=\"text\" name=\"tocapagar_altres[$i]\" size=6 maxlength=8 value=\"";
+			if (isset($_POST["tocapagar_altres"][$i]))
+				echo $_POST["tocapagar_altres"][$i];
+			else
+				echo "0";
+			echo "\">\n";
+		}
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+
+<H2>Excepcions</H2>
+<p>Empleneu les necessàries. S'agafaran si hi ha algo a
+	<STRONG>Article</STRONG>):</p>
+
+<TABLE BORDER=0>
+<TR>
+	<TH>Excepció
+	<TH>Article
+	<TH>Preu
+	<TH COLSPAN=<?php echo $num_habitants+$num_excepcions;?>>Compradors
+
+<?php
+	// Imprimim les excepcions amb altra gent
+	for ($i=1;$i<=$num_excepcions;$i++)
+	{
+?>
+<TR>
+	<TD COLSPAN=3>
+<?php
+	foreach($habitants as $j)
+		echo "\t<TH>" . strtohtml($j["nom"]) . "\n";
+?>
+<?php
+	for($j=0; $j<$num_altres_excepcions;$j++)
+	{
+		echo "\t<TH>";
+		if(isset($_POST["ealtres"][$i][$j]))
+			select_altres("ealtres[$i][$j]", $_POST["ealtres"][$i][$j]);
+		else
+			select_altres("ealtres[$i][$j]");
+		echo "\n";
+	}
+?>
+<TR>
+	<TH><?php echo $i; ?>
+
+	<TD><input type="text" name="earticle[<?php echo $i;?>]" size=30 maxlength=30 <?php
+		if (isset($_POST["earticle"][$i]))
+			echo "value=\"" . strtohtml($_POST["earticle"][$i]) . "\"";
+		?>>
+	<TD><input type="text" name="epreu[<?php echo $i;?>]" size=6 maxlength=8 <?php
+		if (isset($_POST["epreu"][$i]))
+			echo "value=\"" . $_POST["epreu"][$i] . "\"";
+		?>>
+<?php
+	foreach($habitants as $j)
+	{
+		echo "\t<TD><input type=\"checkbox\" name=\"eparticipat[$i][". $j["id"] . "]\" value=si";
+		if(isset($_POST["eparticipat"][$i][$j["id"]]))
+			if($_POST["eparticipat"][$i][$j["id"]] == "si")
+				echo " checked";
+		echo ">\n";
+	}
+	for ($j=0;$j<$num_altres_excepcions;$j++)
+	{
+		echo "\t<TD><input type=\"checkbox\" name=\"eparticipat_altres[$i][$j]\" value=si";
+		if(isset($_POST["eparticipat_altres"][$i][$j]))
+			if($_POST["eparticipat_altres"][$i][$j] == "si")
+				echo " checked";
+		echo ">\n";
+	}
+}
+?>
+
+</TABLE>
+
+<HR WIDTH="70%">
+<center>
+<input type=submit value="Afegir compra" name=afegir>
+<input type=reset value="Ressetejar formulari">
+</center>
+
+
+<H2>Alterar el formulari</H2>
+
+<p>Seleccionar el número d'excepcions:
+	<input type=text name=num_excepcions size=2 maxlength=2 value=<?php echo $num_excepcions ?>>
+</p>
+
+<p>Seleccionar el número d'altra gent (general) a la compra:
+	<input type=text name=num_altres size=2 maxlength=2 value=<?php echo $num_altres ?>>
+</p>
+
+<p>Seleccionar el número d'altra gent (a les excepcions) a la compra:
+	<input type=text name=num_altres_excepcions size=2 maxlength=2 value=<?php echo $num_altres_excepcions ?>>
+</p>
+
+<p align=center><input type=submit value="Canviar" name=canviar> </p>
+</form>
+
+<HR WIDTH="70%">
+
+<H2>Utilització</H2>
+
+<ul>
+<li>Per evitar que una compra s'inserti dues vegades, és important que aquesta
+tingui la <em>data</em> i la <em>hora</em> del rebut de compra.
+<li>El comentari és totalment opcional. És normal no escriure-hi res.
+<!-- De fet, la opció del comentari va ser afegida més tard -->
+<li>El <em>preu</em> ha de ser la suma del que s'ha <em>pagat</em>.
+<li>Els <em>percentatges</em> han de sumar <strong>100</strong>.
+<li>En cas de <em>no utilitzar percentatges</em>, cal sel·leccionar la opció
+	<em>"Cal pagar"</em>. El contingut d'aquests camps (per raons lògiques) ha
+	de ser el preu que toca pagar a cadascú finalment. Això significa que s'han
+	de tenir en compte les excepcions (i els que les paguen) a l'hora d'utilitzar
+	la opció <em>"Cal pagar"</em>. La suma dels camps <em>"Cal pagar"</em> ha
+	de sumar igualment el <em>preu</em> de la compra.
+<li>S'ha d'anar en compte en no deixar un preu buit en un article (s'assumirà
+	<strong>0</strong>), o en no sel·leccionar cap comprador. Això és típic quan
+	sense voler s'emplena el camp <em>"article"</em> d'una excepció que no volem
+	que es tingui en compte.
+<li>És important saber el número d'excepcions i de gent no-habitant del pis que
+	intervindrà en la compra abans de teclejar-la, ja que alterar qualsevol de
+	les variables que <em>alteren el formulari</em> suposa perdre totes les dades
+	dels camps ja emplenats.
+</ul>
+
+<!-- FI DE DEMANAR PER AFEGIR COSES -->
+
+<?php
+} // Fi del if del 'submit'
+else if(isset($_POST["afegir"]))
+{
+	// Afegir les coses a la base de dades
+
+	// Falta xequejar si les dades estan bé
+
+	if (mysql_select_db($mysql_db,$connexio))
+	{
+		settype($_POST["hora"], "integer");
+		settype($_POST["minut"], "integer");
+		settype($_POST["dia"], "integer");
+		settype($_POST["mes"], "integer");
+		settype($_POST["any"], "integer");
+
+		settype($_POST["preu"], "double"); // Preu=0 ERROR TO HANDLE ***
+
+		// ** El preu ha de ser la suma de lo que ha pagat tothom. O inferior!
+		$data = mktime($_POST["hora"], $_POST["minut"], 0, $_POST["mes"], $_POST["dia"], $_POST["any"]);
+
+		// Inserto la fila a 'compres'
+		$query = "INSERT INTO compres VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["botiga"]) . "','". strtosql($_POST["motiu"]) . "', ". $_POST["preu"] . ", '" . strtosql($_POST["comentari"]) ."');";
+		$resultat = 1; // Per si no es fa la query, assumim que no hi ha errors
+		if ($touchdb)
+			$resultat = mysql_query($query, $connexio);
+		else
+			echo $query . "<BR>";
+
+
+		// Comprovem el resultat de l'inserció a "compres"
+		if (!$resultat)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al actualitzar les dades a
+				<STRONG>compres</STRONG>! </p>
+<?php
+			echo mysql_errno().": ".mysql_error()."<BR>";
+		}
+		else
+		{
+			$preu_per_compradors = $_POST["preu"];
+
+			// Afegim les excepcions
+			for ($i = 1; $i <= $_POST["num_excepcions"]; $i++)
+			{
+				if($_POST["earticle"][$i] != "")
+				{
+					settype($_POST["epreu"][$i], "double"); // Preu=0 ERROR TO HANDLE ***
+
+					$preu_per_compradors -= $_POST["epreu"][$i];
+
+					// ** El preu de l'article ha de ser inferior al preu de la compra!
+
+					// Inserto la fila a 'excepcions'
+					$query = "INSERT INTO excepcions (data,article,preu) VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["earticle"][$i]) .
+								"',". $_POST["epreu"][$i] . ");";
+					$resultat = 1; // Per si no es fa la query, assumim que no hi ha errors
+					if ($touchdb)
+						$resultat = mysql_query($query, $connexio);
+					else
+						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
+					if ($touchdb)
+					{
+						$resultat = mysql_query($query, $connexio);
+						$ex_id = mysql_result($resultat, 0, "id");
+					}
+					else
+					{
+						echo $query . "<BR>";
+						$ex_id = 255;
+					}
+					
+					// Comptem quants participen
+					$participants = 0;
+					foreach($habitants as $j)
+						if (isset($_POST["eparticipat"][$i][$j["id"]]))
+							$participants++;
+					for ($j=0;$j<$_POST["num_altres_excepcions"];$j++)
+						if (isset($_POST["eparticipat_altres"][$i][$j]))
+							$participants++;
+					$preu_per_cap = $_POST["epreu"][$i] / $participants;
+
+					// Els habitants que compren l'article
+					foreach($habitants as $j)
+					{
+						if (isset($_POST["eparticipat"][$i][$j["id"]]))
+						{
+							$query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $j["id"] . ",". $preu_per_cap.");";
+							if ($touchdb)
+								$resultat = mysql_query($query, $connexio);
+							else
+								echo $query . "<BR>";
+						}
+					}
+
+					for ($j=0;$j<$_POST["num_altres_excepcions"];$j++)
+					{
+						if (isset($_POST["eparticipat_altres"][$i][$j]))
+						{
+							$persona = $_POST["ealtres"][$i][$j];
+							$query = "INSERT INTO compradors_excepcions (ex_id,persona,toca_pagar) VALUES($ex_id," . $persona . ",". $preu_per_cap.");";
+							if ($touchdb)
+								$resultat = mysql_query($query, $connexio);
+							else
+								echo $query . "<BR>";
+						}
+					}
+				}
+			}	// Fi del for
+			// Afegim el que han pagat i el que els toca pagar a cada habitant
+			// Participen els habitants + $num_altres
+			
+			// Comptem quans participen si hi ha checkboxes
+			if ($_POST["percentatges"] == "checkboxes")
+			{
+				$participants = 0;
+				foreach($habitants as $j)
+					if (isset($_POST["checkbox"][$j["id"]]))
+						$participants++;
+				for ($j=0;$j<$_POST["num_altres"];$j++)
+					if (isset($_POST["checkbox_altres"][$j]))
+						$participants++;
+			}
+							
+			// Els habitants que compren
+			foreach($habitants as $i)
+			{
+				$total_a_pagar = 0;
+				settype($_POST["pagat"][$i["id"]], "double");
+				if ($_POST["percentatges"] == "checkboxes")
+				{	
+					if(isset($_POST["checkbox"][$i["id"]]))
+						$total_a_pagar = $preu_per_compradors / $participants;
+				}
+				elseif ($_POST["percentatges"] == "si")
+				{	
+					settype($_POST["percent"][$i["id"]], "double");
+					$total_a_pagar = $preu_per_compradors * $_POST["percent"][$i["id"]] / 100;
+				}
+				else
+				{
+					settype($_POST["tocapagar"][$i["id"]], "double");
+					$total_a_pagar = $_POST["tocapagar"][$i["id"]];
+				}
+
+				if ($_POST["pagat"][$i["id"]] != 0 || $total_a_pagar != 0)
+				{
+					$query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $i["id"] . ",".
+						$_POST["pagat"][$i["id"]] . ", $total_a_pagar);";
+					if ($touchdb)
+						$resultat = mysql_query($query, $connexio);
+					else
+						echo $query . "<BR>\n";
+				}
+			}
+
+			// Els altres que compren
+			for($i=0; $i < $_POST["num_altres"]; $i++)
+			{
+				$total_a_pagar = 0;
+				settype($_POST["pagat_altres"][$i], "double");
+				if ($_POST["percentatges"] == "checkboxes")
+				{	
+					if(isset($_POST["checkbox_altres"][$i]))
+						$total_a_pagar = $preu_per_compradors / $participants;
+				}
+				elseif ($_POST["percentatges"] == "si")
+				{	
+					settype($_POST["percent_altres"][$i], "double");
+					$total_a_pagar = $preu_per_compradors * $_POST["percent_altres"][$i] / 100;
+				}
+				else
+				{
+					settype($_POST["tocapagar_altres"][$i], "double");
+					$total_a_pagar = $_POST["tocapagar_altres"][$i];
+				}
+
+				if ($_POST["pagat_altres"][$i] != 0 || $total_a_pagar != 0)
+				{
+					$persona = $_POST["altres"][$i];
+					$query = "INSERT INTO compradors (data,persona,pagat,toca_pagar) VALUES(FROM_UNIXTIME($data)," . $persona . ",".
+						$_POST["pagat_altres"][$i] . ", $total_a_pagar);";
+					if ($touchdb)
+						$resultat = mysql_query($query, $connexio);
+					else
+						echo $query . "<BR>";
+				}
+			}
+			
+
+			// *** No s'hauria de deixar continuar si peta la compra!!!! (de fet és el que fa. O NO?)
+		}	// Fi de si la inserció de compres va bé.
+
+		// Què cutre que és això. **
+		echo "Si no hi ha cap missatge d'error, tot ha anat bé! La compra ha estat afegida.<BR>";
+			
+	}
+	else
+	{
+	?>
+		<p> <STRONG>ERROR:</STRONG> No s'ha pogut connectar a la base de dades!
+		Segurament degut a una contrassenya incorrecta. </p>
+	<?php
+			echo mysql_errno().": ".mysql_error()."<BR>";
+	}
+
+}
+?>
+
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update-gent.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Edició dels pagaments</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<H1 ALIGN=center>Ètxelon</H1>
+
+<?php
+	include("getdb.inc");
+	// Variables globals
+	$touchdb = 1;	// Tocar la base de dades
+
+	// Fem la connexió
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+	// Crides a funcions per obtenir parametres
+	
+if(!isset($_POST["afegir"]) && !isset($_GET["id"]))
+{
+?>
+
+<!-- DEMANAR PER AFEGIR COSES -->
+
+<H2>Afegir nova persona</H2>
+
+<form action="update-gent" method="post">
+
+<p> Dades de la persona: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Nom:
+	<TD><input type="text" name="nom" size=20 maxlength=50>
+<TR>
+	<TH>Habitant:
+	<TD><SELECT name=habitant>
+		<OPTION value=no>No
+		<OPTION value=si>Sí
+		</SELECT>
+</TABLE>
+
+<HR WIDTH="70%">
+<center>
+<input type=submit value="Afegir persona" name=afegir>
+<input type=reset value="Ressetejar formulari">
+</center>
+
+</form>
+
+<H2>Utilització</H2>
+
+<UL>
+<LI>Es permet afegir només una persona a la vegada.
+<LI>Normalment es voldrà que <strong>no sigui habitant</strong>, a part de que
+	algú més comenci a viure al pis. De tota manera, la opció interessa en el
+	cas de <em>crear</em> una nova base de dades.
+</UL>
+
+<!-- FI DE DEMANAR PER AFEGIR COSES -->
+
+<?php
+} // Fi del if del 'submit'
+else if(isset($_POST["afegir"]))
+{
+	// Afegir les coses a la base de dades
+
+	// Falta xequejar si les dades estan bé
+
+		if($_POST["habitant"] == "si")
+			$habitant = 1;
+		else
+			$habitant = 0;
+		// Inserto la fila a 'gent'
+
+		$query = "INSERT INTO gent (nom,habitant) VALUES('" . strtosql($_POST["nom"]) .
+			"'," .strtosql($habitant) . ");";
+		$resultat = 1; // Per si no es fa la query, assumim que no hi ha errors
+		if ($touchdb)
+			$resultat = mysql_query($query, $connexio);
+		else
+			echo $query . "<BR>";
+
+		// Comprovem el resultat de l'inserció a "pagaments"
+		if (!$resultat)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al actualitzar les dades a
+				<STRONG>gent</STRONG>! </p>
+<?php
+			echo mysql_errno().": ".mysql_error()."<BR>";
+		}
+
+		// Què cutre que és això. **
+		echo "Si no hi ha cap missatge d'error, tot ha anat bé! La persona ha estat afegida.<BR>";
+
+}
+?>
+
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/update-pagament.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,295 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Edició dels pagaments</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<H1 ALIGN=center>Ètxelon</H1>
+
+<?php
+	include("getdb.inc");
+	// Variables globals
+	$touchdb = 1;	// Tocar la base de dades
+
+	// Considerem que estem retocant un pagament que volem afegir, si hi ha comentari definit.
+	// És per poder donar la data bé.
+	if(isset($_POST["botiga"]))
+		$retocant=1;
+	else
+		$retocant=0;
+
+	// 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);
+	
+if(!isset($_POST["afegir"]) && !isset($_GET["id"]))
+{
+?>
+
+<!-- DEMANAR PER AFEGIR COSES -->
+
+<?php
+	// VARIALBES
+	if(isset($_GET["num_altres"]))
+		$num_altres = $_GET["num_altres"];
+	elseif(isset($_POST["num_altres"]))
+		$num_altres = $_POST["num_altres"];
+	else
+		$num_altres=1;
+?>
+
+<H2>Afegir nou pagament</H2>
+
+<form action="update-pagament" method="post">
+
+<input type=hidden name=num_altres value=<?php
+	echo $num_altres;
+	?>>
+
+<p> Dades del pagament: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Data:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="dia"
+		size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["dia"];
+			else
+				echo date('d');
+			?>">
+		<input type="text" name="mes" size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["mes"];
+			else
+				echo date('m');
+			?>">
+		<input type="text" name="any" size=4 maxlength=4
+		value="<?php
+			if ($retocant)
+				echo $_POST["any"];
+			else
+				echo date('Y');
+			?>">
+
+<TR>
+	<TH>Hora:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="hora"
+		size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["hora"];
+			else
+				echo date('H');
+			?>">
+		<input type="text" name="minut" size=2 maxlength=2
+		value="<?php
+			if ($retocant)
+				echo $_POST["minut"];
+			else
+				echo date('i');
+			?>">
+
+<TR>
+	<TH>Comentari:
+	<TD COLSPAN=<?php echo $num_habitants+$num_altres?> ><input type="text" name="comentari" size=40 maxlength=250 <?php
+	if (isset($_POST["comentari"]))
+		echo "value=\"" . strtohtml($_POST["comentari"]) . "\"";
+	?>>
+<TR>
+	<TH>
+<?php
+		// Imprimim el nom dels habitants
+		foreach($habitants as $i)
+			echo "\t<TH>" . strtohtml($i["nom"]) . "\n";
+?>
+<?php 
+	for($i=0; $i<$num_altres;$i++)
+		{
+			echo "\t<TH>";
+			if(isset($_POST["altres"][$i]))
+				select_altres("altres[$i]", $_POST["altres"][$i]);
+			else
+				select_altres("altres[$i]");
+			echo "\n";
+		}
+?>
+<TR>
+	<TH>Pagat:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"text\" name=\"pagat[" . $i["id"] . "]\" size=6 maxlength=8 value=";
+		if (isset($_POST["pagat"][$i["id"]]))
+			echo $_POST["pagat"][$i["id"]];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+<?php
+	for($i=0; $i<$num_altres;$i++)
+	{
+		echo "\t<TD><input type=\"text\" name=\"pagat_altres[$i]\" size=6 maxlength=8 value=";
+		if (isset($_POST["pagat_altres"][$i]))
+			echo $_POST["pagat_altres"][$i];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+<TR>
+	<TH>Cobrat:
+<?php
+	foreach($habitants as $i)
+	{
+		echo "\t<TD><input type=\"text\" name=\"cobrat[" . $i["id"] . "]\" size=6 maxlength=8 value=";
+		if (isset($_POST["cobrat"][$i["id"]]))
+			echo $_POST["cobrat"][$i["id"]];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+<?php
+	for($i=0; $i<$num_altres;$i++)
+	{
+		echo "\t<TD><input type=\"text\" name=\"cobrat_altres[" . $i["id"] . "]\" size=6 maxlength=8 value=";
+		if (isset($_POST["cobrat_altres"][$i]))
+			echo $_POST["cobrat_altres"][$i];
+		else
+			echo "0";
+		echo ">\n";
+	}
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+<center>
+<input type=submit value="Afegir pagament" name=afegir>
+<input type=reset value="Ressetejar formulari">
+</center>
+
+
+<H2>Alterar formulari</H2>
+<p>Seleccionar el número d'altra gent al pagament:
+	<input type=text name=num_altres size=2 maxlength=2 value=<?php echo $num_altres ?>>
+</p>
+
+<p align=center><input type=submit value="Canviar" name=canviar> </p>
+</form>
+
+<HR WIDTH="70%">
+
+<H2>Utilització</H2>
+
+<UL>
+<LI>És important escriure el <em>comentari</em> ja que serà amb el que els
+	habitants identifiquin el pagament.
+<LI>La suma del que s'ha <em>pagat</em> ha de ser igual a la suma del que s'ha
+	<em>cobrat</em>.
+<LI><em>Alterar el formulari</em> per afegir altres persones borrarà els
+	camps que ja s'havien emplenat.
+</UL>
+
+<!-- FI DE DEMANAR PER AFEGIR COSES -->
+
+<?php
+} // Fi del if del 'submit'
+else if(isset($_POST["afegir"]))
+{
+	// Afegir les coses a la base de dades
+
+	// Falta xequejar si les dades estan bé
+
+		settype($_POST["hora"], "integer");
+		settype($_POST["minut"], "integer");
+		settype($_POST["dia"], "integer");
+		settype($_POST["mes"], "integer");
+		settype($_POST["any"], "integer");
+
+		// ** El preu ha de ser la suma de lo que ha pagat tothom. O inferior!
+		$data = mktime($_POST["hora"], $_POST["minut"], 0, $_POST["mes"], $_POST["dia"], $_POST["any"]);
+
+		// Inserto la fila a 'pagaments'
+		$query = "INSERT INTO pagaments VALUES(FROM_UNIXTIME($data),'" . strtosql($_POST["comentari"]) ."');";
+		$resultat = 1; // Per si no es fa la query, assumim que no hi ha errors
+		if ($touchdb)
+			$resultat = mysql_query($query, $connexio);
+		else
+			echo $query . "<BR>";
+
+
+		// Comprovem el resultat de l'inserció a "pagaments"
+		if (!$resultat)
+		{
+?>
+			<p> <STRONG>ERROR:</STRONG> Error al actualitzar les dades a
+				<STRONG>pagaments</STRONG>! </p>
+<?php
+			echo mysql_errno().": ".mysql_error()."<BR>";
+		}
+		else
+		{
+			// Afegim el que han pagat i el que els toca pagar a cada habitant
+			// Participen els habitants + $num_altres
+			
+			// Els habitants que paguen
+			foreach($habitants as $i)
+			{
+				settype($_POST["pagat"][$i["id"]], "double");
+				settype($_POST["cobrat"][$i["id"]], "double");
+
+				if ($_POST["pagat"][$i["id"]] != 0 || $_POST["cobrat"][$i["id"]] != 0 )
+				{
+					$query = "INSERT INTO pagadors (data,persona,pagat,cobrat) VALUES(FROM_UNIXTIME($data)," . $i["id"] . ",". $_POST["pagat"][$i["id"]] . ", ". $_POST["cobrat"][$i["id"]] . ");";
+					if ($touchdb)
+						$resultat = mysql_query($query, $connexio);
+					else
+						echo $query . "<BR>\n";
+				}
+			}
+
+			// Els altres que paguen
+			for($i=0; $i < $_POST["num_altres"]; $i++)
+			{
+				settype($_POST["pagat_altres"][$i], "double");
+				settype($_POST["cobrat_altres"][$i], "double");
+
+				if ($_POST["pagat_altres"][$i] != 0 || $_POST["cobrat_altres"][$i] != 0)
+				{
+					$persona = $_POST["altres"][$i];
+					$query = "INSERT INTO pagadors (data,persona,pagat,cobrat) VALUES(FROM_UNIXTIME($data)," . $persona . ",". $_POST["pagat_altres"][$i] . ", " . $_POST["cobrat_altres"][$i] . ");";
+					if ($touchdb)
+						$resultat = mysql_query($query, $connexio);
+					else
+						echo $query . "<BR>";
+				}
+			}
+			
+
+			// *** No s'hauria de deixar continuar si peta el pagament!!!! (de fet és el que fa. O NO?)
+		}	// Fi de si la inserció de pagaments va bé.
+
+		// Què cutre que és això. **
+		echo "Si no hi ha cap missatge d'error, tot ha anat bé! El pagament ha estat afegit.<BR>";
+
+}
+?>
+
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/view-compra.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Veure compra</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<H1 ALIGN=center>Ètxelon</H1>
+<H2>Veure compra</H2>
+
+<?php
+	include("getdb.inc");
+	
+	// Fem la connexió
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+
+	$data = $_GET["id"];
+
+	// Crides a funcions per obtenir parametres
+	$habitants = obtenir_habitants($connexio);
+	$num_habitants = count($habitants);
+	$altres = obtenir_altres($connexio);
+	$gent = obtenir_gent($connexio);
+
+	$compra = obtenir_compra($data, $connexio);
+	$compradors = obtenir_compradors($data, $connexio);
+	$excepcions = obtenir_excepcions($data, $connexio);
+
+	$preu_per_compradors = $compra["preu"];
+	$max_compradors_ex = 0;
+	
+	// La variable $comprador_excepcions_existeix servirà per saber si algú de
+	// gent tindrà a veure amb la compra. Indica que la persona (índex de
+	// l'array) existeix com a comprador d'alguna excepció.
+
+	if ($excepcions != 0)
+		foreach($excepcions as $key => $value)
+		{
+			$preu_per_compradors -= $excepcions[$key]["preu"];
+			$compradors_excepcions[$key] = obtenir_compradors_excepcions($key, $connexio);
+			$max_compradors_ex = max(count($compradors_excepcions[$key]),$max_compradors_ex);
+			foreach($compradors_excepcions[$key] as $persona => $dades)
+			{
+				$comprador_excepcions_existeix[$persona] = 1; // Existeix
+			}
+		}
+?>
+
+<H2>Dades generals</H2>
+
+<p> Dades de la compra: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Data i Hora:
+	<TD> <?php
+		echo date("d/m/Y H:i",$data); ?>
+
+<TR>
+	<TH> Botiga:
+	<TD> <?php 
+		echo strtohtml($compra["botiga"]); ?>
+
+<TR>
+	<TH> Motiu:
+	<TD> <?php 
+		echo strtohtml($compra["motiu"]); ?>
+
+<TR>
+	<TH> Comentari:
+	<TD> <?php 
+		echo strtohtml($compra["comentari"]); ?>
+
+<TR>
+	<TH> Preu:
+	<TD> <?php 
+		echo pricetohtml($compra["preu"]); ?>
+
+<TR>
+	<TH> Preu (a repartir)
+	<TD> <?php 
+		echo pricetohtml($preu_per_compradors); ?>
+
+</TABLE>
+
+
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<CAPTION>Compradors globals</CAPTION>
+<TR>
+	<TH>Persona
+	<TH>Pagat
+	<TH>Toca pagar
+	<TH>Percentatge
+	<TH>Toca pagar + excepcions
+	<TH>Balanç
+<?php
+	$suma_pagat = 0;
+	$suma_toca_pagar = 0;
+	$suma_percentatge = 0;
+	$suma_toca_pagar_ex = 0;
+	$suma_balans = 0;
+	foreach($gent as $key => $value)
+	{
+		// Serveix per calcular el preu que toca pagar a cada un realment
+		$modificador = 0;
+		if ($excepcions != 0)
+			foreach($excepcions as $key_ex => $value_ex)
+			{
+				if(isset($compradors_excepcions[$key_ex][$key]["toca_pagar"]))
+					$modificador += $compradors_excepcions[$key_ex][$key]["toca_pagar"];
+			}
+
+		if (isset($compradors[$key]) ||
+			isset($comprador_excepcions_existeix[$key]))
+		{
+			
+			if (!isset($compradors[$key]["pagat"]))
+				$compradors[$key]["pagat"] = 0;
+			if (!isset($compradors[$key]["toca_pagar"]))
+				$compradors[$key]["toca_pagar"] = 0;
+			
+
+			echo "<TR>\n\t<TD>". strtohtml($gent[$key]["nom"]) . "\n";
+
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["pagat"])); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"])); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"]
+				* 100 / $preu_per_compradors)); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["toca_pagar"]
+				+ $modificador)); 
+			printf("\t<TD align=right>%s\n", pricetohtml($compradors[$key]["pagat"]
+				- ($compradors[$key]["toca_pagar"] + $modificador))); 
+			/*
+			echo "\t<TD>" . $compradors[$key]["pagat"] . "\n";
+			echo "\t<TD>" . $compradors[$key]["toca_pagar"] . "\n";
+			echo "\t<TD>" . ($compradors[$key]["toca_pagar"] * 100 / $preu_per_compradors) . "\n";
+			echo "\t<TD>" . ($compradors[$key]["toca_pagar"] + $modificador) . "\n";
+			echo "\t<TD>" . ($compradors[$key]["pagat"] - ($compradors[$key]["toca_pagar"] + $modificador)) . "\n";
+			*/
+
+			$suma_pagat += $compradors[$key]["pagat"];
+			$suma_toca_pagar += $compradors[$key]["toca_pagar"];
+			$suma_percentatge += ($compradors[$key]["toca_pagar"] / $preu_per_compradors*100);
+			$suma_toca_pagar_ex += $compradors[$key]["toca_pagar"] + $modificador;
+			$suma_balans += $compradors[$key]["pagat"] - ($compradors[$key]["toca_pagar"] + $modificador);
+		}
+	}
+	echo "<TR>\n\t<TH>Total\n";
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_pagat));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_toca_pagar));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_percentatge));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_toca_pagar_ex));
+	printf("\t<TD align=right>%s\n", pricetohtml($suma_balans));
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+<H2>Excepcions:</H2>
+
+<TABLE BORDER=1>
+<TR>
+	<TH>Id
+	<TH>Article
+	<TH>Preu
+	<TH COLSPAN=<?php echo $max_compradors_ex ?>>Toca Pagar
+
+<?php
+	if ($excepcions != 0)
+		foreach($excepcions as $key => $value)
+		{
+			$compradors_excepcions[$key] = obtenir_compradors_excepcions($key, $connexio);
+			// Poso els noms dels compradors
+			echo "<TR>\n\t<TD>\n\t<TD>\n\t<TD>\n";
+			foreach($compradors_excepcions[$key] as $key_c => $value_c)
+			{
+				echo "\t<TH>" . $gent[$key_c]["nom"] . "\n";
+			}
+			// Poso l'excepcio en si
+			echo "<TR>\n\t<TH>" . $key . "\n";
+			echo "\t<TD>" . strtohtml($excepcions[$key]["article"]) . "\n";
+			printf("\t<TD align=right>%s\n", pricetohtml($excepcions[$key]["preu"]));
+			foreach($compradors_excepcions[$key] as $key_c => $value_c)
+			{
+				printf("\t<TD align=right>%.2f\n", pricetohtml($value_c["toca_pagar"]));
+			}
+		}
+?>
+
+</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>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 amb excepcions</em>.
+<li>El <em>total a pagar</em> ha de ser igual al <em>preu (a repartir)</em>.
+<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>El camp <em>"Id"</em> de les <em>excepcions</em> és l'identificador que té
+	l'excepció dins la base de dades.
+</ul>
+
+<HR WIDTH="70%">
+
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/view-pagament.php	Sat May 06 00:50:37 2006 +0200
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+	<title>Ètxelon - Veure pagament</title>
+	<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+</head>
+
+<body>
+
+<H1 ALIGN=center>Ètxelon</H1>
+<H2>Veure pagament</H1>
+
+<?php
+	include("getdb.inc");
+	
+	// Fem la connexió
+	$connexio = mysql_connect($mysql_server, $mysql_user, $mysql_password);
+	mysql_select_db($mysql_db, $connexio);
+
+
+	$data = $_GET["id"];
+
+	// Crides a funcions per obtenir parametres
+	$habitants = obtenir_habitants($connexio);
+	$num_habitants = count($habitants);
+	$altres = obtenir_altres($connexio);
+	$gent = obtenir_gent($connexio);
+
+	$pagament = obtenir_pagament($data, $connexio);
+	$pagadors = obtenir_pagadors($data, $connexio);
+?>
+
+<H2>Dades generals</H2>
+
+<p> Dades del pagament: </p>
+<TABLE BORDER=0>
+<TR>
+	<TH>Data i Hora:
+	<TD> <?php
+		echo date("d/m/Y H:i",$data); ?>
+
+<TR>
+	<TH> Comentari:
+	<TD> <?php 
+		echo strtohtml($pagament["comentari"]); ?>
+
+</TABLE>
+
+
+<H2>Pagadors i cobradors</H2>
+<!-- Taula de compradors globals -->
+<TABLE BORDER=1>
+<CAPTION>Pagadors</CAPTION>
+<TR>
+	<TH>Persona
+	<TH>Pagat
+	<TH>Cobrat
+	<TH>Balanç
+<?php
+	$suma_pagat = 0;
+	$suma_cobrat = 0;
+	$suma_balans = 0;
+	foreach($gent as $key => $value)
+	{
+		if (isset($pagadors[$key]))
+		{
+			echo "<TR>\n\t<TD>". strtohtml($gent[$key]["nom"]) . "\n";
+
+			printf("\t<TD align=right>%s\n", pricetohtml($pagadors[$key]["pagat"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($pagadors[$key]["cobrat"]));
+			printf("\t<TD align=right>%s\n", pricetohtml($pagadors[$key]["pagat"] - $pagadors[$key]["cobrat"]));
+
+			$suma_pagat += $pagadors[$key]["pagat"];
+			$suma_cobrat += $pagadors[$key]["cobrat"];
+			$suma_balans += $pagadors[$key]["pagat"] - $pagadors[$key]["cobrat"]; 
+		}
+	}
+	echo "<TR>\n\t<TH>Total\n";
+	printf("\t<TD align=right>%.2f\n", pricetohtml($suma_pagat));
+	printf("\t<TD align=right>%.2f\n", pricetohtml($suma_cobrat));
+	printf("\t<TD align=right>%.2f\n", pricetohtml($suma_balans));
+?>
+</TABLE>
+
+<HR WIDTH="70%">
+
+<H2>Llegenda</H2>
+
+<UL>
+<LI>La suma del que s'ha <em>pagat</em> ha de ser igual a la suma del que s'ha
+	<em>cobrat</em>. O sigui, que el <em>balanç total</em> ha de ser
+	<strong>0</strong>.
+</UL>
+
+<HR WIDTH="70%">
+<BR>
+<A HREF="index">Tornar al menú d'inici</A>
+
+</body>
+</html>