<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */


class BucherEmail extends Bucher
{
  public $target; 

  public function __construct($pZentraleEinstellungen, $pTarget)
  {
    parent::__construct($pZentraleEinstellungen);
    $this->target = $pTarget;
  }

  
  public function doBuchungStep1($pKurs, $pTNInfo, $pEPayInfo = null, $pAnmeldungenEinzeln = false, $pAnmbeginnIgnorieren = false)
  {
    $knr = $pKurs->getKursVarValue('kursnummer');
    Logger::logg(__CLASS__ . " - $this->id doBuchungStep1 - Beginn für Kurs $knr", 1);

    list($anzahlNeueTn, $anzahlNeueKinder) = $this->getAnzahlTeilnehmerKinderAnmeldungen($pKurs);
    $status = \Kufer\Web\Classes\Addfunctions\KursOperations::getAnmeldeStatusForKnr(
      $knr,
      $anzahlNeueTn,
      $anzahlNeueKinder,
      $pKurs->getKursVarValue('nuronline')
    );

    
    if (!$this->isAnmNecessary($status)) {
      return $status; 
    }

    
    if ($status == ANMELDUNGONLINE_KURSVOLL && in_array($pKurs->getKursVarValue('status'), array('A', '', ' ', 'P'))) {
      $pKurs->setKursVarValue('status', 'W'); 
    }

    $zentralInstanz = & DatenEmailWriter::getInstance();
    $emailxmlkurse = $this->getEmailXMLKurseFromKursBuchung($pKurs, $pKurs->kurs->getHotelInfoHauptTn($pTNInfo));
    Logger::logg(__CLASS__ . "hinterlege die kursbezogenen Daten  für $knr unter $this->target beim zentralen XML-eMail Versender(DatenEmailWriter)");
    $zentralInstanz->add($this->target, $emailxmlkurse);

    if (DEBUGANMELDUNG) {
      Bucher::writeAnmeldelogCsv($pKurs, $pTNInfo);
    }

    Logger::logg(__CLASS__ . 'Buchung Schritt 1 für ' . $pKurs->getKursVarValue('kursnummer') . " abgeschlossen - Status: $status", 1);

    return $status;
  }

  
  public function doBuchungStep2($pKurs, $pTNInfo, $pEPayInfo = null)
  {
    Logger::logg(__CLASS__ . " - $this->id doBuchungStep2 - Beginn für Kurs " . $pKurs->getKursVarValue('kursnummer'), 1);
    $zentralInstanz = & DatenEmailWriter::getInstance();
    $zentralInstanz->encryptXML = $this->_zentraleEinstellungen->encryptXML;
    $successful = $zentralInstanz->send($pTNInfo, $pEPayInfo);

    $stati = array(ANMELDUNGONLINE_OK, ANMELDUNGONLINE_OFFLINE, ANMELDUNGONLINE_KURSVOLL);
    
    if (($successful == 0) && $this->_zentraleEinstellungen->platzreservierung
        && SessionOperations::isReplikat() && in_array($pKurs->getStatus(), $stati)) {
      $userid = SessionOperations::getUserID();

      
      if (in_array($pKurs->getKursVarValue('status'), array('A', '', ' ', 'P', 'W'))) {
        
        $dbwbel = new DBWorkBelegung(1);
        $belegung = $dbwbel->getNewObject();
        $belegung->knr = $pKurs->getKursVarValue('kursnummer');

        
        $tn = $pTNInfo->getTeilnehmer();
        $belegung->tnr = ($tn->id != '') ? $tn->id : 0;
        $belegung->anm_datum = $dbwbel->datetimeop->getDateNow();
        $belegung->bemerkung = 'Eintrag aus dem Web generiert (E-Mail)';
        $belegung->nuronline = $pKurs->getKursVarValue('nuronline') == true;
        if ($this->_zentraleEinstellungen->toolid === 4) {
          $belegung->bemerkung = 'Eintrag für Buchung aus ' . KUFERWEB . ' (E-Mail)';
        }
        
        $dbanmeldung = new DBWorkAnmeldungReservierung(1);
        
        $anmart = $pKurs->getWeitereVarValue('typ', 0);
        $status4Replikat = 'P';
        if (StringOperations::strtoupper($anmart) === 'F') {
          $status4Replikat = 'F';
        }
        $belegungid = $dbanmeldung->Anmeldung($belegung, $userid, $status4Replikat);
        $reservierungErfolgreich = $belegungid > 0;
        
       $weiterePersonen = $pTNInfo->getWeitere(); 
        for ($j = 0; $j < $pKurs->getAnzahlWeitere(); $j++) {

            
          
          if ($status4Replikat == 'F') {
            $belegung->firma = ($tn->id != '') ? $tn->id : 0;
            
            $belegung->tnr = $weiterePersonen[$j]->id;
          }

          
          $isWeitereAnmKind = StringOperations::strtoupper($pKurs->getWeitereVarValue('typ', $j)) == 'K';
          if ($isWeitereAnmKind && !System::isKuferSql5()) {
            $idAusReservierung = BelegungOperations::doKindReservierung(1, $belegung->knr, $belegung->tnr, $belegungid, 'Platzreservierung WEB');
          } else {
            
            
            if ($isWeitereAnmKind && System::isKuferSql5()) {
              $belegung->firma = -1;
              $belegung->bezug = 3;
            }
            $idAusReservierung = $dbanmeldung->Anmeldung($belegung, $userid, 'P');
          }
          $reservierungErfolgreich = $idAusReservierung > 0 && $reservierungErfolgreich;
        }
        Logger::logg(__CLASS__ . 'Platzreservierungen am Replikat für ' . $pKurs->getKursVarValue('kursnummer') . '(' . $pKurs->getKursVarValue('status') . ')generiert');
        if (DEBUGANMELDUNG) {
          $nicht = (!$reservierungErfolgreich) ? ' nicht' : '';
          LoggerAnmeldung::logg('Platzreservierung(en)' . $nicht . ' erfolgreich', 3);
        }
      }
    }
    if ($successful !== 0) {
      Logger::logg(__CLASS__ . " - $this->id doBuchungStep2 - technische Probleme bei Kurs " . $pKurs->getKursVarValue('kursnummer'), 1);

      return ANMELDUNGONLINE_TECHNISCHEPROBLEME;
    }
    Logger::logg(__CLASS__ . " - $this->id doBuchungStep2 - Ende für Kurs " . $pKurs->getKursVarValue('kursnummer'), 1);

    return $pKurs->getStatus();
  }

  protected function getCsvLogBegin()
  {
    return 'XML-eMail Anmeldung zur Versendung hinterlegt. Anmeldedaten: ';
  }
}