Avoid the booking of full fligths.
[Project_webapp.git] / includes / formsearch.php
index e40ab128e046423e4e81ff62d902e78a601fcd78..cd12ee4a5b988b8aff76f592022ed64c1f77cd3e 100644 (file)
@@ -4,6 +4,7 @@ $form_departure_date = filter_input(INPUT_POST, "departure_date", FILTER_SANITIZ
 $form_arrival_city = filter_input(INPUT_POST, "arrival_city", FILTER_SANITIZE_STRING);
 $form_arrival_date = filter_input(INPUT_POST, "arrival_date", FILTER_SANITIZE_STRING);
 $form_date_now = filter_input(INPUT_POST, "date_now", FILTER_SANITIZE_STRING);
+$action = filter_input(INPUT_POST, "action", FILTER_SANITIZE_STRING);
 
 $oDepartureDate = new DateTime($form_departure_date);
 $oArrivalDate = new DateTime($form_arrival_date);
@@ -25,7 +26,7 @@ if ($oDepartureDate < $oDateNow) {
     $input_failure = true;
 }
 
-if ($oArrivalDate <= $oDepartureDate) {
+if (!($action === "return_flight") && $oArrivalDate <= $oDepartureDate) {
     echo "Arrival date is before departure date. <br>";
     $input_failure = true;
 }
@@ -39,16 +40,17 @@ if (empty($form_arrival_date)) {
 
 ?>
 
-<h1> Rechercher un vol </h1>
+<h1> Rechercher un vol <?php if ($action === "return_flight") { echo "retour"; } ?> </h1>
 
 <form action="index.php" id="search" method="post">
  <input type="hidden" name="form" value="search" />
+ <?php if ($action === "return_flight") { echo "<input type=\"hidden\" name=\"action\" value=\"return_flight\" />"; } ?>
  <input type="hidden" name="date_now" value="<?php echo $form_date_now; ?>" />
  <label> De&#769;part : Ville -> </label>
  <select size="1" name="departure_city" required>
   <optgroup label="Se&#769;lectionner une ville">
  <?php
- $sql_pquery = "select distinct VilleD from VOLS";
+ $sql_pquery = "select distinct VilleD from VOLS order by VilleD";
  global $connection;
  $connection->prepare_query($sql_pquery);
  $connection->run_prepared_query();
@@ -71,7 +73,7 @@ if (empty($form_arrival_date)) {
  <select size="1" name="arrival_city" required>
   <optgroup label="Se&#769;lectionner une ville">
  <?php
- $sql_pquery = "select distinct VilleA from VOLS";
+ $sql_pquery = "select distinct VilleA from VOLS order by VilleA";
  global $connection;
  $connection->prepare_query($sql_pquery);
  $connection->run_prepared_query();
@@ -89,65 +91,93 @@ if (empty($form_arrival_date)) {
   </optgroup>
  </select>
  <label> Date -> </label>
- <input type="datetime-local" name="arrival_date" <?php if (isset($form_arrival_date)) echo "value=\"$form_arrival_date\"";?> />
+ <input type="datetime-local" name="arrival_date" <?php if (isset($form_arrival_date)) { echo "value=\"$form_arrival_date\""; } ?> />
  <input type="submit" value="Rechercher">
 </form>
 <br>
 
 <?php
 if (!$input_failure) {
-    global $connection;
-    $sql_pquery = "select VOLS.NumVol as NumVol, VilleD, DateD, VilleA, DateA, Classe, round(CoutVol*CoeffPrix, 2) as Prix from VOLS, DEFCLASSES
-                   where DEFCLASSES.NumVol = VOLS.NumVol and
-                   DateD >= ? and VilleD = ? and DateA <= ? and VilleA = ?
-                   order by DateD, NumVol, Prix";
-    $connection->prepare_query($sql_pquery);
-    $connection->prepared_query_bind_param("ssss", array($form_departure_date, $form_departure_city, $form_arrival_date, $form_arrival_city));
-    $connection->run_prepared_query();
-    $connection->get_pquery_result();
-    $rows = $connection->get_result_array();
-    $connection->close_prepared_query();
-    //var_dump($rows);
-    if (empty($rows)) {
-        echo "Aucun vol ne correspond aux crite&#768;res de recherche. <br>";
-    } else {
-        echo "<table id=\"search\">\n";
-        echo "  <tr>\n";
-        echo "    <th>Nume&#769;ro de vol</th>\n";
-        echo "    <th>Ville de de&#769;part</th>\n";
-        echo "    <th>Date de de&#769;part</th>\n";
-        echo "    <th>Ville d'arrive&#769;e</th>\n";
-        echo "    <th>Date d'arrive&#769;e</th>\n";
-        echo "    <th>Classe</th>\n";
-        echo "    <th>Prix d'une place</th>\n";
-        echo "    <th>Re&#769;server</th>\n";
-        echo "  </tr>\n";
-        foreach ($rows as $row) {
-            echo "  <tr>\n";
-            echo "    <td>" . $row['NumVol'] . "</td>\n";
-            echo "    <td>" . $row['VilleD'] . "</td>\n";
-            echo "    <td>" . $row['DateD'] . "</td>\n";
-            echo "    <td>" . $row['VilleA'] . "</td>\n";
-            echo "    <td>" . $row['DateA'] . "</td>\n";
-            echo "    <td>" . $row['Classe'] . "</td>\n";
-            echo "    <td>" . $row['Prix'] . "&euro;</td>\n";
-            echo "    <td>
+     global $connection;
+     $sql_pquery = "select VOLS.NumVol as NumVol, VilleD, DateD, VilleA, DateA, DEFCLASSES.Classe, round(CoutVol*CoeffPrix, 2) as Prix, CapAv
+                    from VOLS join DEFCLASSES on DEFCLASSES.NumVol = VOLS.NumVol
+                    join AVIONS on AVIONS.NumAv = VOLS.NumAv
+                    where DateD >= ? and VilleD = ? and DateA <= ? and VilleA = ?
+                    order by DateD, NumVol, Prix";
+     $connection->prepare_query($sql_pquery);
+     $connection->prepared_query_bind_param("ssss", array($form_departure_date, $form_departure_city, $form_arrival_date, $form_arrival_city));
+     $connection->run_prepared_query();
+     $connection->get_pquery_result();
+     $fligths = $connection->get_result_array();
+     $connection->close_prepared_query();
+     //var_dump($fligths);
+     if (empty($fligths)) {
+         echo "Aucun vol ne correspond aux crite&#768;res de recherche. <br>";
+     } else {
+         if ($action === "return_flight" && isset($_SESSION['return_flight_nb_place'])) {
+             $nb_places = $_SESSION['return_flight_nb_place'];
+             unset($_SESSION['return_flight_nb_place']);
+         } else {
+             $nb_places = 1;
+         }
+         echo "<table id=\"search\">\n";
+         echo "  <tr>\n";
+         echo "    <th>Nume&#769;ro de vol</th>\n";
+         echo "    <th>Ville de de&#769;part</th>\n";
+         echo "    <th>Date de de&#769;part</th>\n";
+         echo "    <th>Ville d'arrive&#769;e</th>\n";
+         echo "    <th>Date d'arrive&#769;e</th>\n";
+         echo "    <th>Classe</th>\n";
+         echo "    <th>Prix d'une place</th>\n";
+         echo "    <th>Re&#769;server</th>\n";
+         echo "  </tr>\n";
+         foreach ($fligths as $fligth) {
+             $sql_pquery = "select sum(NbPlaces) from RESERVATIONS where NumVol = ?";
+             $connection->prepare_query($sql_pquery);
+             $connection->prepared_query_bind_param("s", array($fligth['NumVol']));
+             $connection->run_prepared_query();
+             $connection->get_pquery_result();
+             $rows = $connection->get_result_array();
+             $connection->close_prepared_query();
+             $booked_places = $rows[0][0];
+             if (is_null($booked_places)) {
+                 $booked_places = 0;
+             }
+             if (isset($fligth['CapAv']) && isset($booked_places)) {
+                 $free_places = $fligth['CapAv'] - $booked_places;
+             } else {
+                 $free_places = "Inconnu";
+             }
+             echo "  <tr>\n";
+             echo "    <td>" . $fligth['NumVol'] . "</td>\n";
+             echo "    <td>" . $fligth['VilleD'] . "</td>\n";
+             echo "    <td>" . $fligth['DateD'] . "</td>\n";
+             echo "    <td>" . $fligth['VilleA'] . "</td>\n";
+             echo "    <td>" . $fligth['DateA'] . "</td>\n";
+             echo "    <td>" . $fligth['Classe'] . "</td>\n";
+             echo "    <td>" . $fligth['Prix'] . "&euro;</td>\n";
+             echo "    <td>
+                        Places libres : " . $free_places . "
                         <form action=\"index.php\" id=\"booking\" method=\"post\">
                           <input type=\"hidden\" name=\"form\" value=\"booking\" />
-                          <input type=\"hidden\" name=\"flight_id\" value=\"" . $row['NumVol'] . "\" />
-                          <input type=\"hidden\" name=\"class_name\" value=\"" . $row['Classe'] . "\" />
-                          <input type=\"hidden\" name=\"place_price\" value=\"" . $row['Prix'] . "\" />
+                          <input type=\"hidden\" name=\"flight_id\" value=\"" . $fligth['NumVol'] . "\" />
+                          <input type=\"hidden\" name=\"class_name\" value=\"" . $fligth['Classe'] . "\" />
+                          <input type=\"hidden\" name=\"place_price\" value=\"" . $fligth['Prix'] . "\" />
                           <label> Place(s) : </label>
-                          <input type=\"number\" name=\"nb_place\" min=\"1\" max=\"9\" value=\"1\" required/>
-                          <label> Vol retour : </label>
-                          <input type=\"checkbox\" name=\"return_flight\" checked required/>
-                          <input type=\"submit\" value=\"Re&#769;server\">
-                        </form>
-                      </td>\n";
-            echo "  </tr>\n";
-        }
-        echo "</table>";
-    }
-}
+                          <input type=\"number\" name=\"nb_place\" min=\"1\" max=\"9\" value=\"" . $nb_places . "\" required/>\n";
+             if ($action !== "return_flight") {
+                 echo "       <label> Vol retour : </label>\n";
+                 echo "       <input type=\"checkbox\" name=\"return_flight\" checked/>\n";
+             }
+             if ($free_places !== 0 || $free_places === "Inconnu") {
+                 echo "       <input type=\"submit\" value=\"Re&#769;server\">\n";
+             }
+             echo "     </form>
+                       </td>\n";
+             echo "  </tr>\n";
+         }
+         echo "</table>\n";
+     }
+ }
 
 ?>