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


class BuchungsvorgangWebTools extends Buchungsvorgang
{
  private $_toolid;
  
  private $_kursnummer;

  public function __construct($pToolid)
  {
    
    
    $this->setToolId($pToolid);
    
    DatenWriter::resetWriter();
    parent::__construct();
  }

  public function _getToolSettings($pZentraleEinstellungen)
  {
    
    
    
    $toolsettings = ToolSettingsAPI::getToolSettings(0);

    $pZentraleEinstellungen->toolid = $this->_toolid;
    
    $pZentraleEinstellungen->suppressTNBestaetigung = $toolsettings->suppressInfoMail;
    
    $pZentraleEinstellungen->suppressASBestaetigung = !$toolsettings->bccAnmeldebestaetigungeMail;
    $pZentraleEinstellungen->addressASBestaetigung = EmailOperations::getToolEmailAddressForVhs($toolsettings->bccAnmeldebestaetigungeMailAdresse);
    $pZentraleEinstellungen->platzreservierung = true;
    $pZentraleEinstellungen->vornameSaeubern = true;
    $pZentraleEinstellungen->infoMailMultipleContent = $toolsettings->infoMailMultipleContent;
    $pZentraleEinstellungen->infoMailTextContent = $toolsettings->infoMailTextContent;
    if (isset($toolsettings->bestaetigungKursVorTn)) { 
      $pZentraleEinstellungen->bestaetigungKursVorTn = $toolsettings->bestaetigungKursVorTn;
    }

    return $pZentraleEinstellungen;
  }

  
  public function createTNInfo($pTnr = -1, $pTeilnehmer = null)
  {
    if ($pTnr === -1) {
      $teilnehmer = \SessionOperations::getCurrentWebToolsTeilnehmer(true);
    } elseif (!is_null($pTeilnehmer)) {
      $teilnehmer = $pTeilnehmer;
    } else {
      $dbwtn = new DBWorkTeilnehmer();
      $teilnehmer = $dbwtn->getTeilnehm($pTnr, true);
    }
    
    $teilnehmer->bemerkung = PostOperations::getVarValue('anm_bemerkung', '');

    
    $teilnehmer->newsl_erlaubt = PostOperations::isDefined('newsl_erlaubt') ? 'J' : '';
    if ($teilnehmer->newsl_erlaubt == 'J') {
      
      $teilnehmer->newsl_bemerk = PostOperations::getVarValue('newsl_bemerkung', '');
    }

    $teilnehmer->dse = PostOperations::isDefined('dseCheckbox');

    
    $teilnpflicht = $teilnehmer->copyAsTeilnehmerPflicht();
    $teilnpflicht->aryattachments = SessionOperations::getDokumentFromSession();

    $weitere = SessionOperations::getWeitereFromSession();

    if ($this->_zentraleEinstellungen->vornameSaeubern) {
      
      $teilnehmary = array($teilnpflicht);
      TeilnehmerParent::saeubereVornamen($teilnehmary);
    }

    $tninfo = new TNInfo($teilnpflicht, $weitere);
    $this->setTNInfo($tninfo);
  }

  
  public function setToolId($pToolid)
  {
    $this->_toolid = $pToolid;
  }

  
  public function setKursnummer($pKnr)
  {
    $this->_kursnummer = $pKnr; 
  }

  
  public function verrechneGebuehrMitGuthaben()
  {
    
    if (!SessionOperations::isReplikat()) {
      return;
    }
    
    if (isset($this->_kurseByStatus[ANMELDUNGONLINE_OK])) {
      $dbwtn = new DBWorkTeilnehmer(1, true);
      $tn = $dbwtn->getTeilnehm(SessionOperations::getCurrentWebToolsUser()->tnr);
      $guthaben = MathOperations::stringToFloat($tn->guthaben);

      foreach ($this->_kurseByStatus[ANMELDUNGONLINE_OK] as $kursbuchung) {
        if ($kursbuchung->kurs->guthabenverwenden === true && $guthaben > 0) {
          $gebuehr = MathOperations::stringToFloat($kursbuchung->kurs->kursgebuehr);
          $guthaben = $guthaben - $gebuehr;
        }
      }
      $guthaben = MathOperations::floatToString(($guthaben > 0) ? $guthaben : 0);
      
      if ($tn->guthaben != $guthaben) {
        $tn->guthaben = $guthaben;
        
        $dbwtn->updateTeilnehmer($tn, true);
      }
    }
  }

  
  public function buchungStep2($pAnmeldungenEinzeln = false)
  {
    $technischeProbleme = false;
    for ($i = 0; $i < count($this->_kurse); $i++) {
      $alterStatus = $this->_kurse[$i]->getStatus();
      $neuerStatus = $this->_kurse[$i]->doBuchungStep2($this->_tninfo);
      $this->kurse_anmstatus[$this->_kurse[$i]->getKursVarValue('kursnummer')] = $neuerStatus;

      if ($alterStatus != $neuerStatus) {
        $this->removeKursByStatus($alterStatus, $this->_kurse[$i]->getKursVarValue('kursnummer'));
        $this->addKursByStatus($neuerStatus, $this->_kurse[$i]);
      }
      
      
      if ($neuerStatus != ANMELDUNGONLINE_TECHNISCHEPROBLEME) {
        $warenkorb = new DBWorkWarenkorbKursInfo();
        $warenkorb->delEntry($this->_kurse[$i]->getKursVarValue('kursnummer'));
      } else {
        $technischeProbleme = true;
      }
    }
    $webSettings = ToolSettingsAPI::getToolSettings($this->_toolid);
    

    return $technischeProbleme;
  }

  

  
  public function cleanUp($pTechnischeProbleme = false)
  {
    parent::cleanUp();
    
    
    
    if (!$pTechnischeProbleme) {
      $user = \SessionOperations::getCurrentWebToolsUser();
      SessionOperations::session_destroy_selective();
      \SessionOperations::setCurrentWebToolsUser($user);
    }
  }
}