<?
  include ('../functions.php');
  // repairbeschreibungen();
  // getbestellungen();
  repairhmnr();
  exit;

  function repairhmnr() {
      $startdate = '2011-01-01 00:00:00';
      $enddate = '2011-05-31 23:59:59';
      $query = "SELECT * from kontobewegungen
          WHERE datum >= UNIX_TIMESTAMP('$startdate')
          AND datum <= UNIX_TIMESTAMP('$enddate')
          AND praemienid != ''
          AND wert < 0 
          ORDER by datum";
      $result = dbQuery($query) or error("Cannot select: $query - " . dbError());
      print "Results: " . dbNumRows($result) . "\n";
      $i=0;
      while ($row = dbFetchRow($result,MYSQL_ASSOC)) {
          $pkey = $row['pkey'];
          $datum = date('Y-m-d',$row['datum']);
          $beschreibung = $row['beschreibung'];
          $praemienid = $row['praemienid'];
          $praemienhmid = $row['praemienhmid'];

          $name = '';
          $zusatz = '';
          if (!preg_match('/Bestellung der Pr.mie:? (.*)$/',$beschreibung,$matches)) {
              die ("Kein Prämienname gefunden: $beschreibung, $pkey\n");
          }
          $praemienname = $matches[1];
          $zusatz = '';
          if (preg_match('/^(.*) - (.+)$/',$praemienname,$matches)) {
              $praemienname = $matches[1];
              $zusatz = $matches[2];
          }
          $praemienname = str_replace(' - ','',$praemienname);

          if (preg_match('/^Spende/',$praemienname)) {
              continue;
          }

          /* Search for praemie */
          $subquery = "SELECT * FROM praemien
                       WHERE id = $praemienid";
          $subresult = dbQuery($subquery) or die("Cannot select: $subquery");
          if (dbNumRows($subresult) == 0) {
              die("Cannot find Praemie $praemienname ($praemienid) - $subquery\n");
          }
          $subrow = dbFetchRow($subresult);
          $geldpraemie = $subrow['geldpraemie'];

          if ($geldpraemie == 1) { continue; }
          $i++;

          /* Find Artikel */
          $subquery = "SELECT * FROM praemienartikel
                       WHERE praemienid = $praemienid";
          $subresult = dbQuery($subquery) or die("Cannot select: $subquery");
          if (dbNumRows($subresult) == 0) {
              print "Cannot find Artikel $praemienname\n";
              continue;
          }
          if (dbNumRows($subresult) > 1) {
              if ($zusatz == '') {
                  $datum = $row['datum'];
                  print "Es gibt mehrere Artikel zur Praemie, aber im Kontoauszug ist keiner vermerkt: ($pkey) ($praemienid) $praemienname" . date('Y-m-d',$datum) . "\n";
                  continue;
              }
              $praemienhmnr = 0;
              while ($subrow = dbFetchRow($subresult))
              {
                  $anzeige = $subrow['anzeige'];
#                  print "Anzeige: '$anzeige', Zusatz: '$zusatz'\n";
                  if ($anzeige == $zusatz) {
                      $praemienhmnr = $subrow['hmnr'];
                      break;
                  }
              }
              if ($praemienhmnr == 0) {
                  print "Konnte Artikel nicht finden: ($praemienid) $praemienname - $zusatz\n";
                  exit;
              }
          } else {
              $subrow = dbFetchRow($subresult);
              $praemienhmnr = $subrow['hmnr'];
          }

//          if ($zusatz != '') {
              if ($praemienhmid != $praemienhmnr) {
                  if ($praemienhmnr == '') {
                      die ("Kann Praemienhmnr nicht finden:" .utf8_encode($praemienname) . ' - ' . utf8_encode($zusatz) . "($praemienhmid, $praemienhmnr, $pkey)\n");
                  }
                  print utf8_encode($praemienname) . ' - ' . utf8_encode($zusatz) . "($praemienhmid, $praemienhmnr, $pkey)\n";
                  $subquery = "UPDATE kontobewegungen 
                      SET praemienhmid = $praemienhmnr
                      WHERE pkey = $pkey";
                  dbQuery($subquery) or die(dbError());
              }
//          }

      }
      print "Processed $i lines\n";
  }

  function getbestellungen() {
      $startdate = '2011-01-01 00:00:00';
      $enddate = '2011-05-31 23:59:59';

      $query = "SELECT * from kontobewegungen
          WHERE datum >= UNIX_TIMESTAMP('$startdate')
          AND datum <= UNIX_TIMESTAMP('$enddate')
          AND praemienid != ''
          AND wert < 0 
          ORDER by datum";
      $result = dbQuery($query) or error("Cannot select: $query");
      while ($row = dbFetchRow($result,MYSQL_ASSOC)) {
          print ".";
          $pkey = $row['pkey'];
          $datum = date('Y-m-d',$row['datum']);
          $beschreibung = $row['beschreibung'];
          $praemienid = $row['praemienid'];
          $name = '';
          if (!preg_match('/Bestellung der Pr.mie:? (.*)$/',$beschreibung,$matches)) {
              die ("Kein Prämienname gefunden: $beschreibung, $pkey\n");
          }
          $praemienname = $matches[1];
          if (preg_match('/^Spende/',$praemienname)) {
              continue;
          }
          $zusatz = '';
          if (preg_match('/^(.*) - (.+)$/',$praemienname,$matches)) {
              $praemienname = $matches[1];
              $zusatz = $matches[2];
          }
          $praemienname = str_replace(' - ','',$praemienname);

          $subquery = "SELECT name FROM praemien
              WHERE id = $praemienid";
          $subresult = dbQuery($subquery) or error("Cannot select: $subquery");
          if (dbNumRows($subresult) > 1) {
              print $datum . ' - ' . $praemienid . ' - ' . 
                  utf8_encode($praemienname) . ' - ' .
                  utf8_encode($name) . "\n";
              die("Mehr als eine Praemie gefunden: $pkey\n");
          }
          if (dbNumRows($subresult) == 0) {
              print $datum . ' - ' . $praemienid . ' - ' . 
                  utf8_encode($praemienname) . ' - ' .
                  utf8_encode($name) . "\n";
              die("Keine Praemie gefunden: $pkey\n");
          } else {
              $row = dbFetchRow($subresult,MYSQL_ASSOC);
              $name = $row['name'];
          }
          print $datum . ' - ' . $praemienid . ' - ' . 
              utf8_encode($praemienname) . ' - ' .
              utf8_encode($name) . "\n";
          if ($praemienname != $name) {
              print "Falsch: $pkey\n";
              $id = getpraemiebyname($praemienname);
              print "Eventuell: $id\n";
              #exit;
          }
      }
}

function repairbeschreibungen() {
    $query = 'SELECT pkey, kommentar, beschreibung 
        FROM kontobewegungen 
        WHERE 1';
    $result = dbQuery($query);
    while ($row = dbFetchRow($result, MYSQL_ASSOC))
    {
        $pkey = $row['pkey'];
        $kommentar = $row['kommentar'];
        $beschreibung = $row['beschreibung'];
        $kommentar = html_entity_decode($kommentar,ENT_QUOTES,'ISO-8859-15');
        $beschreibung = html_entity_decode($beschreibung,ENT_QUOTES,'ISO-8859-15');
        $kommentarnew = str_replace('\\','',$kommentar);
        $beschreibungnew = str_replace('\\','',$beschreibung);

        if (($kommentarnew != $kommentar) || ($beschreibungnew != $beschreibung)) {
            print 'Kommentar: ' . 
                utf8_encode($kommentar) .' - '. 
                utf8_encode($kommentarnew) . "\n";
            print 'Beschreib: ' .
                utf8_encode($beschreibung) . ' - ' .
                utf8_encode($beschreibungnew) . "\n";
        }
        $subquery = "UPDATE kontobewegungen
                     SET kommentar = '" . dbEscapeString($kommentarnew) . "',
                         beschreibung = '" . dbEscapeString($beschreibungnew) . "'
                     WHERE pkey = $pkey";
        dbQuery($subquery) or error("Kann nicht updaten: $subquery");
    }
}

function getpraemiebyname($name) {
  $query = "SELECT id FROM praemien WHERE name = '$name'";
  $result = dbQuery($query) or die("Cannot select: $query");
  if (dbNumRows($result) == 0) {
      return 0;
  }
  if (dbNumRows($result) > 1) {
      print "Mehrere gefunden: $name\n";
      return 0;
  }
  $row = dbFetchRow($result,MYSQL_ASSOC);
  return $row['id'];
}

