<?php
  /* class kind */
  class familienversicherte
  {
      var $id;
      var $userId;
      var $parentId;
      var $versnummer;
      var $rechtskreis;
      var $typ;

      function __construct($id = 0)
      {
          if ($id != 0) {
              $query = "SELECT * FROM familienversicherte WHERE id = '$id'";
              $result = dbQuery($query)
                  or error ("Konnte Familienversicherte/n nicht aus der Datenbank lesen: " . dbError());
              $numRows = dbNumRows($result);
              if ($numRows != 0 ) {
                  $row = dbFetchRow($result);
                  $this->id = unescape($row['id']);
                  $this->userId = unescape($row['userId']);
                  $this->parentId = unescape($row['parentId']);
                  $this->typ = unescape($row['typ']);
                  /* FIXME: Select User should be in class User
                     User::constructor is calling this method -> recursion! */
                  $query = "SELECT versnummer, rechtskreis FROM users
                      WHERE userId = " . $this->userId;

                  $subresult = dbQuery($query)
                      or error ("Konnte Familienversicherte/n nicht aus der Datenbank lesen: " . dbError());
                  if (dbNumRows($subresult) > 0) {
                      $row = dbFetchRow($subresult); 
                      $this->versnummer = $row['versnummer'];
                      $this->rechtskreis = $row['rechtskreis'];
                  }
              }
              dbFreeResult($result);
          }
          return $this;
      }

      function update() {
          /* userid ausgelassen: Kinder können ihre Eltern nicht
             mehr wechseln, nachdem sie angelegt wurden :) */
          $this->aenderungsdatum = date("Y-m-d" ,time());
          $table = "familienversicherte";
          $query = "UPDATE $table SET ".
            "userId = '" . $this->userId . "', " .
            "parentId = '" . $this->parentId . "', " .
            "typ = '" . $this->typ . "'" .
            " WHERE id = " . $this->id;
          $result = dbQuery($query)
            or error ("Konnte Änderungen nicht in der Datenbank speichern: ($query)" . dbError());

          @dbFreeResult($result);
      }

      function delete() {
          $table = "familienversicherte";
          $query = "DELETE FROM $table".
            " WHERE id = " . $this->id;
          $result = dbQuery($query)
            or error ("Konnte Familienmitglied nicht loeschen: ($query)" . dbError());
          $table = "kinder";
          $query = "DELETE FROM $table".
               " WHERE versnummer = '" . $this->versnummer . "'
              AND rechtskreis = '" . $this->rechtskreis . "'
              AND userId = " . $this->parentId;
          $result = dbQuery($query)
            or error ("Konnte Kind nicht loeschen: ($query)" . dbError());

          @dbFreeResult($result);
      }


      function insert() {
          $versicherte = $this->getVersicherte($this->parentId);
          # check if we've already inserted this member
          foreach ($versicherte as $fami) {
              $user = new user(0,$fami->userId);
              if ($user->versnummer == $this->versnummer && $user->rechtskreis == $this->rechtskreis) {
                  return false;
              }
          }
          /* Fetch user Id */
          $user = new user($this->versnummer, 0,0,$this->rechtskreis);
          if ($user->userId) {
              $query = "INSERT INTO familienversicherte SET ".
                  "userId = '". $user->userId . "',".
                  "parentId = '" . $this->parentId . "'," .
                  "typ = " . $this->typ;
              if (!$result = dbQuery($query)) {
                  error ("Konnte Kind nicht in die Datenbank einfügen: " . dbError(). "<br>\n".
                          "Query: $query");
                  return false;
              }
              /* Id des eingetragenen Familienmitgliedes */
              $this->id= dbInsertId();
              @dbFreeResult($result);
              /* Wenn Jugendlicher oder Kind, auch in Kinder eintragen */
              if (! $user->checklegalage()) {
                  /* Ist Kind schon eingetragen? */
                  $query = "SELECT * FROM kinder WHERE userId = " . $this->parentId . "
                            AND (vorname = '" . $user->vorname . "'
                            OR versnummer = '" . $user->versnummer. "')";
                  $result = dbQuery($query) or error("Kann Kinder nicht lesen");
                  if (dbNumRows($result) < 1) {

                      $kind = new kind();
                      $kind->userId = $this->parentId;
                      $kind->vorname = $user->vorname;
                      $kind->geburtsdatum = $user->geburtsdatum;
                      $kind->versnummer = $user->versnummer;
                      $kind->rechtskreis = $user->rechtskreis;
                      $kind->ersteller = $user->ersteller;
                      $kind->insert();
                  }
              }
          } else {
            return false;
          }
          return true;
      }
 
      /**
       * liest mitversicherte aus
       *
      **/
      function getVersicherte($parentId) {
          $query = "SELECT id FROM familienversicherte
              WHERE parentId = $parentId"; 
          if (!$result = dbQuery($query)) {
              error ("Konnte Familienversicherte nicht lesen: " . dbError(). "<br>\n".
                      "Query: $query");
              return false;
          }
          $familienversicherte = Array();
          while ($row = dbFetchRow($result)) {
              $id = $row['id'];
              $userId = $row['userId'];
              if ($userId != $parentId) {
                  $familienversicherte[] = new familienversicherte($id); 
              }
          } 
          return $familienversicherte;
      }
    
      /** Sucht Familienversicherte **/
      static public function getByUserId($userId) {
          $query = "SELECT id FROM familienversicherte
              WHERE userId = $userId"; 
          if (!$result = dbQuery($query)) {
              error ("Konnte Familienversicherte nicht lesen: " . dbError(). "<br>\n".
                      "Query: $query");
              return false;
          }
          if (dbNumRows($result) ==0) {
            return false;
          }
          $row = dbFetchRow($result);
          $id = $row['id'];
          $fami = new familienversicherte($id); 
          return $fami;
      }
  }
