--- a/update-compra.php Fri Oct 13 11:28:57 2006 +0200
+++ b/update-compra.php Wed Nov 08 22:38:58 2006 +0100
@@ -265,7 +265,7 @@
<H2>Excepcions</H2>
<p>Empleneu les necessàries. S'agafaran si hi ha algo a
- <STRONG>Article</STRONG>):</p>
+ <STRONG>Article</STRONG>:</p>
<TABLE BORDER=0>
<TR>
@@ -389,211 +389,389 @@
// Afegir les coses a la base de dades
// Falta xequejar si les dades estan bé
+/* Ha de retornar false si falla. True si va bé */
+ settype($_POST["hora"], "integer");
+ settype($_POST["minut"], "integer");
+ settype($_POST["dia"], "integer");
+ settype($_POST["mes"], "integer");
+ settype($_POST["any"], "integer");
- if (mysql_select_db($mysql_db,$connexio))
+ settype($_POST["preu"], "double"); // Preu=0 ERROR TO HANDLE ***
+
+ $error = "";
+
+function end_error()
+{
+ global $error;
+ echo "<p><strong>ERROR!</strong> " . $error . "</p>\n";
+ echo "<p>Prem \"Enrera\" al navegador per a corregir la compra.</p>\n";
+ exit(-1);
+ echo "hola";
+}
+
+function compra_valida()
+{
+ global $error, $habitants;
+ if ($_POST["preu"] == 0)
{
- settype($_POST["hora"], "integer");
- settype($_POST["minut"], "integer");
- settype($_POST["dia"], "integer");
- settype($_POST["mes"], "integer");
- settype($_POST["any"], "integer");
+ $error = "El preu ha de ser més de 0";
+ return false;
+ }
+ $preu_per_compradors = $_POST["preu"];
+
+ /* Posem a 0 els toca_pagar finals */
+ foreach($habitants as $j)
+ $toca_pagar[$j["id"]] = 0.;
- settype($_POST["preu"], "double"); // Preu=0 ERROR TO HANDLE ***
+ for ($i = 1; $i <= $_POST["num_excepcions"]; $i++)
+ {
+ if($_POST["earticle"][$i] != "")
+ {
+ settype($_POST["epreu"][$i], "double");
+
+ if ($_POST["epreu"][$i] == 0)
+ {
+ $error = "Una excepció té preu 0.";
+ return false;
+ }
+
+ $preu_per_compradors -= $_POST["epreu"][$i];
- // ** 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"]);
+ 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++;
+
+ if ($participants == 0)
+ {
+ $error = "En una excepció no hi ha participants.";
+ return false;
+ }
+
+ $preu_per_cap = $_POST["epreu"][$i] / $participants;
- // 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>";
+ // Els habitants que compren l'article
+ foreach($habitants as $j)
+ {
+ if (isset($_POST["eparticipat"][$i][$j["id"]]))
+ {
+ $toca_pagar[$j["id"]] += $preu_per_cap;
+ }
+ }
+ for ($j=0;$j<$_POST["num_altres_excepcions"];$j++)
+ {
+ if (isset($_POST["eparticipat_altres"][$i][$j]))
+ {
+ $persona = $_POST["ealtres"][$i][$j];
+ $toca_pagar[$persona] += $preu_per_cap;
+ }
+ }
+ }
+ }
+
+ 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++;
+
+ if ($participants == 0)
+ {
+ $error = "No hi ha participants de la compra.";
+ return false;
+ }
+ }
- // 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>";
+ $suma_pagat = 0;
+ // Els habitants que compren
+ foreach($habitants as $i)
+ {
+ $total_a_pagar = 0;
+ settype($_POST["pagat"][$i["id"]], "double");
+
+ $suma_pagat += $_POST["pagat"][$i["id"]];
+
+ 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
{
- $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];
+ settype($_POST["tocapagar"][$i["id"]], "double");
+ $total_a_pagar = $_POST["tocapagar"][$i["id"]];
+ }
- // ** El preu de l'article ha de ser inferior al preu de la compra!
+ $toca_pagar[$i["id"]] += $total_a_pagar;
+ $toca_pagar[$i["id"]] -= $_POST["pagat"][$i["id"]];
+ }
+ // Els altres que compren
+ for($i=0; $i < $_POST["num_altres"]; $i++)
+ {
+ $total_a_pagar = 0;
+ settype($_POST["pagat_altres"][$i], "double");
+ $suma_pagat += $_POST["pagat_altres"][$i];
+ 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];
+ }
- // 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>";
+ $persona = $_POST["altres"][$i];
+
+ $toca_pagar[$persona] += $total_a_pagar;
+ $toca_pagar[$persona] -= $_POST["pagat_altres"][$i];
+ }
- // 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;
+ if ($suma_pagat != $_POST["preu"])
+ {
+ $error = "El total pagat no correspon amb el preu de la compra.";
+ return false;
+ }
+ $suma_toca_pagar = 0;
+ for($i=0; $i < $_POST["num_altres"]; $i++)
+ {
+ $persona = $_POST["altres"][$i];
+ $suma_toca_pagar += $toca_pagar[$persona];
+ }
+ foreach($habitants as $i)
+ {
+ $suma_toca_pagar += $toca_pagar[$i["id"]];
+ }
+ if (abs($suma_toca_pagar) > 0.01)
+ {
+ $error = "El càlcul final no quadra per una suma de " .
+ abs($suma_toca_pagar) . " EUR";
+ return false;
+ }
+ return true;
+}
- // 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>";
- }
- }
+ /* Començem a tocar la base de dades */
+
+ if (!mysql_select_db($mysql_db,$connexio))
+ {
+ $error = "La connexió amb la base de dades ha fallat.\n";
+ $error .= mysql_errno().": ".mysql_error();
+ end_error();
+ }
+
+ // ** 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"]);
+
+ $query = "SELECT data from compres where data = " .
+ "FROM_UNIXTIME($data);";
- 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)
+ if ($touchdb)
+ {
+ $resultat = mysql_query($query, $connexio);
+ if (mysql_num_rows($resultat) > 0)
+ {
+ $error = "La compra ja existeix.";
+ end_error();
+ }
+ }
+ else
+ echo $query;
+
+ if (!compra_valida())
+ end_error();
+
+ /* Començem a afegir les coses a la base de dades */
+ // 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)
+ {
+ $error = "Error al actualitzar les dades a <strong>compres</strong>:\n" . mysql_errno() . ": " . mysql_error()."<br>";
+ end_error();
+ }
+
+
+ $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_per_compradors -= $_POST["epreu"][$i];
+
+ // 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)
{
- $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";
- }
+ $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 altres que compren
- for($i=0; $i < $_POST["num_altres"]; $i++)
+ // Els habitants que compren l'article
+ foreach($habitants as $j)
{
- $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
+ if (isset($_POST["eparticipat"][$i][$j["id"]]))
{
- 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);";
+ $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>";
}
}
-
-
- // *** 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
+ 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")
{
- ?>
- <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>";
+ $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>";
+ }
+ }
+
+ // Què cutre que és això. **
+ echo "Si no hi ha cap missatge d'error, tot ha anat bé! La compra ha estat afegida.<BR>";
+
}
?>