<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */


class DBWorkAnmeldungReservierungEmailXML extends DBWorkAnmeldungReservierung
{
  
  public $emailxml;
  
  public $emailxmlkurse;

  
  public function AddEMailXML($emailxml)
  {
    $dbwxmlmail = new DBWorkEMailXML($this->dbtyp, true);

    return $dbwxmlmail->insertXMLMail($emailxml);
  }

  
  public function AddEMailXMLKomm($emailxmlkomm)
  {
    $dbwxmlmailkomm = new DBWorkEMailXMLKommunikation($this->dbtyp, true);

    return $dbwxmlmailkomm->insertXMLMailkomm($emailxmlkomm);
  }

  
  public function AddEMailXMLKennz($pEmailxmlkennz)
  {
    $dbwxmlmailkennz = new DBWorkEMailXMLKennz($this->dbtyp, true);

    return $dbwxmlmailkennz->insertEmailXMLKennz($pEmailxmlkennz);
  }

  
  public function AddEMailXMLBranchen($pEmailxmlbranche)
  {
    $dbwxmlmailbranchen = new DBWorkEMailXMLBranchen($this->dbtyp, true);

    return $dbwxmlmailbranchen->insertEmailXMLBranche($pEmailxmlbranche);
  }

  
  public function AddEMailXMLAttach($pToInsert)
  {
    $dbw = new DBWorkEMailXMLAttach($this->dbtyp, true);

    return $dbw->insertEmailXMLAttach($pToInsert);
  }

  
  public function AddEMailXMLKWerb($pEmailxmlkwerb)
  {
    $dbw = new DBWorkEMailXMLKWerb($this->dbtyp, true);

    return $dbw->insertEmailXMLKWerb($pEmailxmlkwerb);
  }

  
  public function AddEmailXMLWeitere($emailxmlweitere, $kurs_id, $user_id, $pBelegungsStatus = 'P', $pEmailId = 0)
  {
    if (isset($emailxmlweitere->emailxml) && $emailxmlweitere->emailxml != '') {
      $emailxmlweitere->emailstammID = $this->AddEMailXML($emailxmlweitere->emailxml);
      if ($emailxmlweitere->emailstammID === false) {
        return false;
      }

      
      for ($i = 0; $i < count($emailxmlweitere->emailxml->arykommunikation); $i++) {
        $emailxmlweitere->emailxml->arykommunikation[$i]->emailID = $emailxmlweitere->emailstammID;

        
        if ($this->AddEMailXMLKomm($emailxmlweitere->emailxml->arykommunikation[$i]) === false) {
          return false;
        }
      }

      
      for ($i = 0; $i < count($emailxmlweitere->emailxml->arykennzeichen); $i++) {
        $emailxmlweitere->emailxml->arykennzeichen[$i]->emailid = $emailxmlweitere->emailstammID;

        
        if ($this->AddEMailXMLKennz($emailxmlweitere->emailxml->arykennzeichen[$i]) === false) {
          return false;
        }
      }
	
      for ($i = 0; $i < count($emailxmlweitere->emailxml->arybranchen); $i++) {
        $emailxmlweitere->emailxml->arybranchen[$i]->emailid = $emailxmlweitere->emailstammID;

        
        if ($this->AddEMailXMLBranchen($emailxmlweitere->emailxml->arybranchen[$i]) === false) {
          return false;
        }
      }


      
      for ($i = 0; $i < count($emailxmlweitere->emailxml->arykwerb); $i++) {
        $emailxmlweitere->emailxml->arykwerb[$i]->emailid = $emailxmlweitere->emailstammID;

        
        if ($this->AddEMailXMLKWerb($emailxmlweitere->emailxml->arykwerb[$i]) === false) {
          return false;
        }
      }
      
      for ($i = 0; $i < count($emailxmlweitere->emailxml->aryattachments); $i++) {
        $emailxmlweitere->emailxml->aryattachments[$i]->emailid = $emailxmlweitere->emailstammID;

        
        if ($this->AddEMailXMLAttach($emailxmlweitere->emailxml->aryattachments[$i]) === false) {
          return false;
        }
      }
    } else {
      $emailxmlweitere->emailstammID = $pEmailId;
    }

    
    

    $dbwxmlmailweitere = new DBWorkEMailXMLWeitere($this->dbtyp, true);

    if ($emailxmlweitere->typ == 'K' && !System::isKuferSql5()) {
      
      
      $dbwXmlKurse = new DBWorkEMailXMLKurse($this->dbtyp, true);
      $xmlkurs = $dbwXmlKurse->getXMLMailKurse($emailxmlweitere->emailkursID);
      $emailxmlweitere->belegID = BelegungOperations::doKindReservierung($this->dbtyp, $kurs_id, '0', $xmlkurs->belegID, 'Platzreservierung WEB');
    } else {
      $dbwanmeldungreserv = new DBWorkAnmeldungReservierung($this->dbtyp, true);
      $belegung = new Belegung();
      $belegung->knr = $kurs_id;
      $belegung->tnr = '0'; 
      
      $belegung->entgelt = '0';
      $belegung->bet_offen = '0';
      $belegung->anm_datum = $this->datetimeop->getDateTimeNow();

      if ($emailxmlweitere->typ == 'K' && System::isKuferSql5()) {
        $belegung->firma = -1;
        $belegung->bezug = 3;
      }
      $emailxmlweitere->belegID = $dbwanmeldungreserv->Anmeldung($belegung, $user_id, $pBelegungsStatus);

      
      
      
      if (!SessionOperations::isReplikat()
         || (REPLIKATMITONLINEBUCHUNG && $this->dboperation->connectionInfo->db_hybrid && $this->dbtyp == 2)) {
        $dbuser = new DBWorkUser($this->dbtyp, true);
        $dbbasysuser = new DBWorkBASysUser($this->dbtyp, true);
        $benutzer = $dbuser->getUser($user_id);
        $basysbenutzer = $dbbasysuser->getBASysUser($benutzer->ben);

        $this->neutralerZahlungssatz(
          $kurs_id,
          0,
          $emailxmlweitere->belegID,
          $basysbenutzer,
          'Platzreservierung aus dem Internet (Weiterer)'
        );
      }
    }
    $weitereId = $dbwxmlmailweitere->insertXMLMailWeitere($emailxmlweitere);

    if ($weitereId && isset($emailxmlweitere->hotelAnm) && $emailxmlweitere->hotelAnm instanceof EmailXMLHotel) {
      $emailxmlweitere->hotelAnm->emailkursid = $emailxmlweitere->emailkursID;
      $emailxmlweitere->hotelAnm->emailweitereid = $weitereId;
      $emailxmlweitere->hotelAnm->bearbdatum = $this->datetimeop->getDateNow();
      $emailxmlweitere->hotelAnm->bearbeiter = $user_id;
      if ($this->AddEmailXMLHotel($emailxmlweitere->hotelAnm) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    return $weitereId;
  }

  
  public function AddEmailXMLHotel($pEmailXMLHotel)
  {
    $dbweho = new DBWorkEMailXMLHotel($this->dbtyp, true);

    return $dbweho->insertXMLMailHotel($pEmailXMLHotel);
  }

  
  public function AddEmailXMLKurse($emailxmlkurse, $user_id, $pBelegungsStatus = 'P')
  {
    $dbwxmlmailkurs = new DBWorkEMailXMLKurse($this->dbtyp, true);
    $dbwanmeldungreserv = new DBWorkAnmeldungReservierung($this->dbtyp, true);
    $belegung = new Belegung();
    $belegung->knr = $emailxmlkurse->kursnummer;
    $belegung->tnr = '0'; 
    
    $belegung->entgelt = '0';
    $belegung->bet_offen = '0';
    $belegung->anm_datum = $this->datetimeop->getDateTimeNow();

    $emailxmlkurse->belegID = $dbwanmeldungreserv->Anmeldung($belegung, $user_id, $pBelegungsStatus);

    return $dbwxmlmailkurs->insertXMLMailKurs($emailxmlkurse);
  }

  
  public function Anmeldung($user_id, $pBelegungsStatus = 'P', $pPHP53DummyParam1 = '', $pPHP53DummyParam2 = '')
  {
    $this->dboperation->beginTransaction(); 
    
    $emailid = $this->AddEMailXML($this->emailxml);
    
    if ($emailid === false) {
      $this->dboperation->rollbackTransaction();

      return false;
    }

    
    for ($i = 0; $i < count($this->emailxml->arykommunikation); $i++) {
      $this->emailxml->arykommunikation[$i]->emailID = $emailid;

      
      if ($this->AddEMailXMLKomm($this->emailxml->arykommunikation[$i]) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    
    for ($i = 0; $i < count($this->emailxml->arybranchen); $i++) {
      $this->emailxml->arybranchen[$i]->emailid = $emailid;

      
      if ($this->AddEMailXMLBranchen($this->emailxml->arybranchen[$i]) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    
    for ($i = 0; $i < count($this->emailxml->arykennzeichen); $i++) {
      $this->emailxml->arykennzeichen[$i]->emailid = $emailid;

      
      if ($this->AddEMailXMLKennz($this->emailxml->arykennzeichen[$i]) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    
    for ($i = 0; $i < count($this->emailxml->arykwerb); $i++) {
      $this->emailxml->arykwerb[$i]->emailid = $emailid;

      
      if ($this->AddEMailXMLKWerb($this->emailxml->arykwerb[$i]) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    
    for ($i = 0; $i < count($this->emailxml->aryattachments); $i++) {
      $this->emailxml->aryattachments[$i]->emailid = $emailid;

      
      if ($this->AddEMailXMLAttach($this->emailxml->aryattachments[$i]) === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }
    }

    
    for ($c = 0; $c < count($this->emailxmlkurse); $c++) {
      $this->emailxmlkurse[$c]->emailID = $emailid;
      
      $belegungsstatus = $pBelegungsStatus;
      if (isset($this->emailxmlkurse[$c]->aryweitere, $this->emailxmlkurse[$c]->aryweitere[0])
           && $this->emailxmlkurse[$c]->aryweitere[0]->typ == 'F') {
        $belegungsstatus = 'F';
      }
      $mailkurseid = $this->AddEmailXMLKurse($this->emailxmlkurse[$c], $user_id, $belegungsstatus);
      
      if ($mailkurseid === false) {
        $this->dboperation->rollbackTransaction();

        return false;
      }

      
      for ($i = 0; $i < count($this->emailxmlkurse[$c]->aryweitere); $i++) {
        if (!isset($this->emailxmlkurse[$c]->aryweitere[$i]->emailxml) && ($this->emailxmlkurse[$c]->aryweitere[$i]->emailxml != '')) {
          $this->emailxmlkurse[$c]->aryweitere[$i]->emailstammID = $emailid;
        }

        $this->emailxmlkurse[$c]->aryweitere[$i]->emailkursID = $mailkurseid;
        if ($this->AddEmailXMLWeitere(
          $this->emailxmlkurse[$c]->aryweitere[$i],
          $this->emailxmlkurse[$c]->kursnummer,
          $user_id,
          $pBelegungsStatus,
          $emailid
        ) === false) {
          $this->dboperation->rollbackTransaction();

          return false;
        }
      }
      
      if (isset($this->emailxmlkurse[$c]->hotelAnm) && !$this->emailxmlkurse[$c]->hotelAnm->isEmpty()) {
        $this->emailxmlkurse[$c]->hotelAnm->emailkursid = $mailkurseid;
        $this->emailxmlkurse[$c]->hotelAnm->bearbdatum = $this->datetimeop->getDateNow();
        $this->emailxmlkurse[$c]->hotelAnm->bearbeiter = $user_id;
        if ($this->AddEmailXMLHotel($this->emailxmlkurse[$c]->hotelAnm)
            === false) {
          $this->dboperation->rollbackTransaction();

          return false;
        }
      }

      
      
      if (!SessionOperations::isReplikat()
          || (REPLIKATMITONLINEBUCHUNG && $this->dboperation->connectionInfo->db_hybrid && $this->dbtyp == 2)) {
        
        
        if (ConstantOperations::isMSSQLBelegungssatzDirektAnmeldungGewuenscht($pBelegungsStatus)) {
          $dbwEmailXMLKurse = new DBWorkEMailXMLKurse($this->dbtyp, true);
          $dbuser = new DBWorkUser($this->dbtyp, true);
          $dbbasysuser = new DBWorkBASysUser($this->dbtyp, true);
          $benutzer = $dbuser->getUser($user_id);
          $basysbenutzer = $dbbasysuser->getBASysUser($benutzer->ben);
          $tmpemailxml = $dbwEmailXMLKurse->getXMLMailKurse($mailkurseid);

          $this->neutralerZahlungssatz(
            $tmpemailxml->kursnummer,
            0,
            $tmpemailxml->belegID,
            $basysbenutzer,
            'Platzreservierung aus dem Internet'
          );
        }
      }
    }

    $this->dboperation->commitTransaction();

    return true;
  }
}