<?php




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







class ToolFaAnmeldung extends ToolBase
{
  private $_dbwKurse;
  private $_user;

  public function __construct()
  {
    parent::__construct();
    $this->toolTitle = 'Anmeldung';
    
    $dbwKurse = new DBWorkKurseINetAktiv();
    $dbwKurse->newSearch();
    $dbwKurse->setOrderBySettings($this->toolSettings);

    

    $searchAPI = new KurssuchAPIwSearch(false);
    $searchAPI->getSearchParamsFromReqToSession('tool' . $this->toolId);

    
    
    $dbwKurse->fromobject = $searchAPI->getFromObjectBySession($dbwKurse->fromobject, 'tool' . $this->toolId);
    $dbwKurse->toobject = $searchAPI->getToObjectBySession($dbwKurse->toobject, 'tool' . $this->toolId);

    $dbwKurse->fromobject->semester = $this->toolSettings->semlist;
    $dbwKurse->toobject->semester = '';
    $dbwKurse->justNoAusfall = $this->toolSettings->keineAusgefallenenKurse;
    
    if ($dbwKurse->fromobject->semester == '') {
      $webSettings = ToolSettingsAPI::getToolSettings(4);
      $dbwKurse->fromobject->semester = $webSettings->semlist;
    }
    $dbwKurse->beruecksichtigeKurstagRaumanzeige = $this->toolSettings->versteckeKurstageWieImRaumanzeigeprogramm;

    $this->_dbwKurse = $dbwKurse;
    $this->_user = SessionOperations::getCurrentWebToolsUser();
  }

  
  public function init($pPageId)
  {
    
    
    
    
    $this->checkBrowserReload();

    $page = null;
    switch ($pPageId) {
      default:
      case 322:
        
        if (RequestOperations::getVarValue('einstieg') != '') {
          $sprachsettings = new SprachSettingsObject();

          if (DBWorkBASysSettings::isBlak()) {
            $contenHeader = 'Suchen und anmelden:';
          } else {
            $contenHeader = 'neue Anmeldung zu ' . $sprachsettings->Kurs['Plural_mit_Artikel']['Dativ'] . ':';
          }

          $page = new PageAnmeldEinstieg('Neue Anmeldung', 322, $this, $contenHeader);
        } else {
          
          $page = $this->_handleKursuebersichtAnmeld();
        }
        break;
      case 323:
        break;
      case 327:
        
        if (DBWorkBASysSettings::isMDS()) {
          $page = $this->_handleAnmeldeseiteMDS();
        } else {
          $page = $this->_handleAnmeldeseite();
        }
        break;
      case 328:
        $page = $this->_handleAnmeldungMitarbeiter();
        break;
      case 338:
        
        $page = $this->_handleKursdetailsAnmeld();
        break;
    }
    if ($page == null) {
      throw new Exception('ungültige PageId');
    }
    $this->currentPage = $page;
  }

  
  private function _handleKursuebersichtAnmeld()
  {
    
    $pageLinks = array();

    
    $alleIds = $this->getAlleIdsKurse($this->_dbwKurse);
    $data = $this->getData($this->_dbwKurse, $alleIds, $this->toolSettings->kurseproseite);

    $data = $this->aktualisiereKursePerDmz($data);

    $anzahlAllerKursIds = count($alleIds);

    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry(); 
    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '322.0.1')
       && $this->rechteOR(array('338.1.1', '338.1.2', '338.1.3', '338.1.4', '338.1.5'))) {
      $pageLinks['details'] = $this->getUrlParamsForFile(array('toolsection_id' => 338));
    }
    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '322.0.2')) {
      $pageLinks['anmelden'] = $this->getUrlParamsForFile(array('toolsection_id' => 328));

      $dbtn = new DBWorkTeilnehmer(1, true);
      $teilnehmer = $dbtn->getTeilnehm($this->_user->tnr);

      

      $pageLinks['emptyMandatorys'] = AnmeldeAPI::getEmptyMandatoryFieldName($this->toolSettings, $teilnehmer);
    }
    
    $pageLinks['filter'] = \SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '322.0.3');


    $page = new PageKurseUebersichtAnmeld('Seminarübersicht', 322, $this, 'neue Anmeldung - Seminarübersicht', $data, $anzahlAllerKursIds, $this->toolSettings->kurseproseite);
    $page->setLinks($pageLinks);

    return $page;
  }

  public function getAjaxResponse()
  {
    $action = RequestOperations::getVarValue('action');
    
    if ($action == 'checkSepa') {
      return $this->_handleCheckSepa4Ajax();
    }
    
    elseif ($action == 'checkKonto') {
      return $this->_handleCheckDta4Ajax();
    }
  }

  
  private function _handleCheckSepa4Ajax()
  {
    $iban = trim(RequestOperations::getVarValue('iban'));
    $bic = trim(RequestOperations::getVarValue('bic'));
    $tnr = SessionOperations::getCurrentWebToolsUser()->tnr;

    $resultAry = ValidationAPI::validateSepa($iban, $bic, $tnr);

    return JsonOperations::encode4Ajax($resultAry);
  }

  
  private function _handleCheckDta4Ajax()
  {
    $konto = RequestOperations::getVarValue('konto');
    $blz = RequestOperations::getVarValue('blz');

    $resultAry = ValidationAPI::validateDta($konto, $blz);

    return JsonOperations::encode4Ajax($resultAry);
  }

  
  private function _handleKursdetailsAnmeld()
  {
    $detailSightId = 338;

    

    $reiterSeite = new ReiterSeite($detailSightId, $this->toolSettings->reiterBeschriftung);

    
    
    $knr = GetOperations::GetVarValue('knr');
    if (GetOperations::isDefined('fromOtherTool')) {
      $alleIds = array($knr);
    } else {
      
      $alleIds = $this->getAlleIdsKurse($this->_dbwKurse);
    }
    $data = $this->getData($this->_dbwKurse, $alleIds, 1, $knr);
    $kurs = $data[0];

    $kurs = $this->aktualisiereKursPerDmz($kurs);

    $anzahlAllerKursIds = count($alleIds);

    
    if (DBWorkBASysSettings::isBlak() && $kurs->kursauswahl2 == 'W') {
      $kurs->gebuehr = BLAK_NOT_SHOW_WSS;
      $kurs->geb_erm = BLAK_NOT_SHOW_WSS;
    }

    $tabPage = new TabCollectionKursdetails('Kurs', 323, $this, 'Anmeldung zum Seminar ' . $knr, $kurs, $knr, '', $anzahlAllerKursIds, 1);

    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $reiterSeite->getRecht('Kursdetails'))) {
      $pagedetails = new TabPageSightBuilderUebersicht($reiterSeite->getLabel('Kursdetails'), $kurs, $this->getToolId(), 323, '', $alleIds);
      $tabPage->addTabPage($pagedetails);
      
      $detailLinks = array();
      $detailLinks['kursdetails'] = $this->getUrlParamsForFile(array('toolsection_id' => $detailSightId));
      $pagedetails->setLinks($detailLinks);
    }

    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $reiterSeite->getRecht('Inhalt'))) {
      $tabPage->addTabPage(new TabKursDetailsInhalt($reiterSeite->getLabel('Inhalt'), $kurs, 0));
    }
    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $reiterSeite->getRecht('Inhalt'))) {
      $termineTab = new TabKursDetailsTermine($reiterSeite->getLabel('Termine'), $kurs, 324, '', '', true);
      $termineTab->setLinks(array(
          'versteckeKurstageWieImRaumanzeigeprogramm' => $this->toolSettings->versteckeKurstageWieImRaumanzeigeprogramm
          ));
      $tabPage->addTabPage($termineTab);
    }
    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $reiterSeite->getRecht('Inhalt'))) {
      $tabPage->addTabPage(new TabKursDetailsDownloadsTN($reiterSeite->getLabel('Downloads'), $knr, $this->getToolId(), 325, $this->_user->tnr));
    }
    
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $reiterSeite->getRecht('Inhalt'))) {
      $tabPage->addTabPage(new TabKursDetailsFotos($reiterSeite->getLabel('Fotos'), $knr));
    }

    $page = $tabPage;

    $pageLinks = array();
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();

    
    






























    
    if (DBWorkBASysSettings::isBlak() && $kurs->kursauswahl2 == 'W') {
      $pageLinks['BLAK_hinweis_button'] = true;
    
    } elseif (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '338.0.1')) {
      $pageLinks['anmelden'] = $this->getUrlParamsForFile(array('toolsection_id' => 328, 'knr' => $knr));

      $dbtn = new DBWorkTeilnehmer(1, true);
      $teilnehmer = $dbtn->getTeilnehm($this->_user->tnr);

      

      $pageLinks['emptyMandatorys'] = AnmeldeAPI::getEmptyMandatoryFieldName($this->toolSettings, $teilnehmer);
    }
    $page->setLinks($pageLinks);

    return $page;
  }

  
  private function _handleAnmeldeseiteMDS()
  {
    if ($_SERVER['REQUEST_METHOD'] != 'POST') {
      
      header('Location: usertools.php?tool_id=21&toolsection_id=305');
      die();
    }

    
    if (!SessionOperations::isReplikat()) {
      $page = new PageWTDefault('Anmeldung', 338, $this);
      $page->setContent('Die Anmeldungen können in dieser Betriebsart (Direktbetrieb) nicht verarbeitet werden.' . BR_WT . BR_WT
     . '<p><a href="javascript:history.back();" title="Zurück">Zurück zum Kurs</a>');
      $page->setContentHeader('Anmeldung nicht möglich');

      return $page;
    }

    $dbwBel = new DBWorkBelegung();
    $dbwTeiln = new DBWorkTeilnehmer();
    $dbwAdrPers = new DBWorkAdrPers();
    $data = JsonOperations::getFromString(RequestOperations::getVarValue('jsonData'));
    $vars = get_object_vars($data);

    $aryForXML = array();
    foreach ($vars as $key => $value) {
      
      if (StringOperations::startsWith($key, 'bel_')) {
        $belegungNeu = isset($value->belegung) ? $value->belegung : null;
        $teilnehmerNeu = isset($value->teilnehmer) ? $value->teilnehmer : null;
        $adrPersNeu = isset($value->adrPers) ? $value->adrPers : null;

        if (!is_null($teilnehmerNeu)) {
          if (isset($teilnehmerNeu->id) && $teilnehmerNeu->id != '') {
            $teilnehmerAlt = $dbwTeiln->getTeilnehm($teilnehmerNeu->id);
            $teilnehmerMerged = Datamodul::mergeWith($teilnehmerAlt, $teilnehmerNeu);
            
            $dbwTeiln->updateTeilnehmer($teilnehmerMerged, false, null, true);
            $idTeiln = $teilnehmerMerged->id;
          } else {
            $idTeiln = $dbwTeiln->insertTeilnehmer(
              Datamodul::toDatamodul('Teilnehmer', $teilnehmerNeu, array('email' => 'Kommunikation', 'mobil' => 'Kommunikation', 'tel' => 'Kommunikation', 'tel2' => 'Kommunikation', 'fax' => 'Kommunikation')),
              false,
              true
            );
            $teilnehmerMerged = $dbwTeiln->getTeilnehm($idTeiln, true);
          }
        }

        if (!is_null($adrPersNeu)) {
          $adrPersNeuDM = Datamodul::toDatamodul('AdrPers', $adrPersNeu);
          if (isset($adrPersNeuDM->adrnr) && $adrPersNeuDM->adrnr != '') {
            $adrPersAlt = $dbwAdrPers->getFirstAdrPersByTnNr($adrPersNeuDM->adrnr);
            if (!$adrPersAlt->isEmpty()) {
              $adrPersMerged = Datamodul::mergeWith($adrPersAlt, $adrPersNeuDM);
            } else {
              $adrPersMerged = $adrPersNeuDM;
            }
            $adrPersMerged->zusatz2 = $adrPersNeu->dienststelle;
            if ($adrPersMerged->id != '') {
              $dbwAdrPers->updateAdrPers($adrPersMerged);
            } else {
              $dbwAdrPers->insertAdrPers($adrPersNeuDM);
            }
          } else {
            $adrPers2Save = Datamodul::toDatamodul('AdrPers', $adrPersNeu);
            if (empty($adrPersNeu->adrnr)) {
              $adrPers2Save->adrnr = $idTeiln;
            }
            $adrPers2Save->zusatz2 = $adrPersNeu->dienststelle;
            $idAdrPers = $dbwAdrPers->insertAdrPers($adrPers2Save);
            $adrPersMerged = $dbwAdrPers->getAdrPersByID($idAdrPers);
          }
        }
        if (!is_null($belegungNeu)) {
          if (isset($belegungNeu->id) && $belegungNeu->id != '') {
            $belegungAlt = $dbwBel->getBelegung($belegungNeu->id);

            
            if ($belegungNeu->uebern_jn == false) {
              
              
              $belegungNeu->hotel_info = 'Tagesteilnehmer';
            } else {
              
              
              if ($belegungAlt->hotel_info == 'Tagesteilnehmer') {
                
                $belegungNeu->hotel_info = ' ';
              }
            }

            $belegungMerged = Datamodul::mergeWith($belegungAlt, $belegungNeu);
            if (empty($belegungNeu->tnr) && !empty($idTeiln)) {
              $belegungMerged->tnr = $idTeiln;
            }

            $dbwBel->updateBelegung($belegungMerged);
          } else {
            throw new Exception('Es wurde keine Belegung gefunden');
          }
        }

        
        
        $iNetAnm = InetFirmaAnm::getInetFirmaAnmByBelAndTnr($belegungNeu, $teilnehmerNeu);
        $iNetAnm->statusvon = 'P';

        
        $iNetAnm->uebern_jn = (($iNetAnm->uebern_jn == false) ? 'N' : 'J');

        $iNetAdrFirma = InetFirmaAdr::getInetFirmaAdrByAdrPers($adrPersNeu, $teilnehmerNeu);

        $iNetAdrFirma->firma = \SessionOperations::getCurrentWebToolsTeilnehmer()->name;
        $iNetAdrPrivat = InetFirmaAdr::getInetFirmaAdrByTnr($teilnehmerNeu);
        $aryForXML[] = new Tripel($iNetAnm, $iNetAdrFirma, $iNetAdrPrivat);
      }
      
      elseif (StringOperations::startsWith($key, 'wl_')) {
        $belegungNeu = $value->belegung;
        $teilnehmerNeu = $value->teilnehmer;
        $adrPersNeu = $value->adrPers;

        if (!is_null($belegungNeu)) {
          
          if ($belegungNeu->uebern_jn == false) {
            $belegungNeu->hotel_info = 'Tagesteilnehmer';
          }
        }

        $iNetAnm = InetFirmaAnm::getInetFirmaAnmByBelAndTnr($belegungNeu, $teilnehmerNeu);
        $iNetAnm->statusvon = '';

        
        $iNetAnm->uebern_jn = (($iNetAnm->uebern_jn == false) ? 'N' : 'J');

        $iNetAdrFirma = InetFirmaAdr::getInetFirmaAdrByAdrPers($adrPersNeu, $teilnehmerNeu);

        $iNetAdrFirma->firma = \SessionOperations::getCurrentWebToolsTeilnehmer()->name;
        $iNetAdrPrivat = InetFirmaAdr::getInetFirmaAdrByTnr($teilnehmerNeu);

        $aryForXML[] = new Tripel($iNetAnm, $iNetAdrFirma, $iNetAdrPrivat);

        if (!is_null($teilnehmerNeu)) {
          if (isset($teilnehmerNeu->id) && $teilnehmerNeu->id != '') {
            $teilnehmerAlt = $dbwTeiln->getTeilnehm($teilnehmerNeu->id);
            $teilnehmerMerged = Datamodul::mergeWith($teilnehmerAlt, $teilnehmerNeu);
            
            
            $dbwTeiln->updateTeilnehmer($teilnehmerMerged, false, null, true);
            $idTeiln = $teilnehmerMerged->id;
          } else {
            
            
            

            $idTeiln = $dbwTeiln->insertTeilnehmer(
              Datamodul::toDatamodul('Teilnehmer', $teilnehmerNeu, array('email' => 'Kommunikation', 'mobil' => 'Kommunikation', 'tel' => 'Kommunikation')),
              false,
              true
            );
            $teilnehmerMerged = $dbwTeiln->getTeilnehm($idTeiln, true);
          }
        }

        if (!is_null($adrPersNeu)) {
          $adrPersNeuDM = Datamodul::toDatamodul('AdrPers', $adrPersNeu);
          if (isset($adrPersNeuDM->adrnr) && $adrPersNeuDM->adrnr != '') {
            $adrPersAlt = $dbwAdrPers->getFirstAdrPersByTnNr($adrPersNeuDM->adrnr);
            if (!$adrPersAlt->isEmpty()) {
              $adrPersMerged = Datamodul::mergeWith($adrPersAlt, $adrPersNeuDM);
            } else {
              $adrPersMerged = $adrPersNeuDM;
            }
            $adrPersMerged->zusatz2 = $adrPersNeu->dienststelle;
            if ($adrPersMerged->id != '') {
              $dbwAdrPers->updateAdrPers($adrPersMerged);
            } else {
              $dbwAdrPers->insertAdrPers($adrPersNeuDM);
            }
          } else {
            $adrPers2Save = Datamodul::toDatamodul('AdrPers', $adrPersNeu);
            if (empty($adrPersNeu->adrnr)) {
              $adrPers2Save->adrnr = $idTeiln;
            }
            $adrPers2Save->zusatz2 = $adrPersNeu->dienststelle;
            $idAdrPers = $dbwAdrPers->insertAdrPers($adrPers2Save);
            $adrPersMerged = $dbwAdrPers->getAdrPersByID($idAdrPers);
          }
        }

        if (!is_null($belegungNeu)) {
          $belegungNeu->knr = $knr;
          $belegungNeu->tnr = $idTeiln;
          $belegungNeu->firma = $firmaTnr;
          $belegungMerged = Datamodul::toDatamodul('Belegung', $belegungNeu, array(), array());
          $dbwBel->insertBelegung($belegungMerged);
        }
      }
      elseif ($key === 'firmaBelid') {
        $firmaBelid = $value;
      } elseif ($key === 'firmaTnr') {
        $firmaTnr = $value;
      } elseif ($key === 'knr') {
        $knr = $value;
      }
    } 

    
    
    $this->doXmlAnmeldungMDS($aryForXML, $knr, $firmaBelid, $firmaTnr);

    $this->_sendOKMailMDS($knr, $aryForXML);

    $page = new PageWTDefault('Anmeldung', 338, $this);
    $page->setContent('Die Anmeldungen wurden erfolgreich an den MDS übermittelt und werden dort weiter verarbeitet.' . BR_WT
    . 'Bitte beachten Sie: ' . BR_WT
    . 'Die von Ihnen eingegebenen Daten werden bei der nächsten Übertragung überschrieben. Falls der MDS Ihre Daten dann noch nicht bearbeitet hat, '
    . 'sind Ihre Änderungen scheinbar verschwunden. Lassen Sie sich dadurch nicht aus der Ruhe bringen - die Daten sind nicht verloren, sondern werden '
    . 'mit der nächsten Übertragung nach der Bearbeitung durch den MDS bestätigt.' . BR_WT
    . BR_WT
     . '<p><a href="javascript:history.back();" title="Zurück">Zurück zum Kurs</a>');
    $page->setContentHeader('Anmeldung erfolgreich');

    return $page;
  }

  private function _sendOKMailMDS($pKnr, $pAryForXml)
  {
    $user = \SessionOperations::getCurrentWebToolsTeilnehmer();
    $email = $user->getVarValueEx('email', 'kommunikation');
    if ($email == '') {
      return;
    }

    $kurs = $this->_dbwKurse->getKurs($pKnr);
    

    $msg = $this->_replaceVarsMDS($this->toolSettings->anmeldeBestaetigungVorspann, $kurs, $user);
    $msg .= "\n\n";

    $weitereReservierungenVerworfen = false;

    foreach ($pAryForXml as $tripel) {
      
       
      $anzeigen = true;
      $status = '';
      switch ($tripel->eins->statusnach) {
        case 'W':
          $status = 'Anmeldung auf Warteliste';
          break;
        case 'S':
          if (!$weitereReservierungenVerworfen) {
            $msg .= "\n" . 'Weitere Reservierungen werden verworfen.' . "\n\n";
          }
          $weitereReservierungenVerworfen = true;
          $anzeigen = false;
          break;
        case 'A':
          $status = 'Teilnehmer angemeldet';
          break;
      }
      if ($anzeigen) {
        $tnDaten = $status . ":\n";
        $tnDaten .= 'Name: ' . $tripel->eins->name_titel . ' ' . $tripel->eins->vorname . ' ' . $tripel->eins->name . "\n";
        $tnDaten .= 'Gebiets-/Zusatzbez.: ' . $tripel->eins->gebietsbezeichnung . "\n";
        
        $tnDaten .= 'Dienststelle: ' . $tripel->zwei->dienststelle . "\n";
        
        $tnDaten .= 'Im MDK tätig seit: ' . $tripel->eins->eintritt . "\n";
        $tnDaten .= 'Mail-Adresse: ' . $tripel->eins->email . "\n";

        $adressDatenPrivat = $tripel->drei->toString();
        $adressDatenFirma = $tripel->zwei->toString();

        $msg .= $tnDaten . "\n" . $adressDatenFirma . "\n" . $adressDatenPrivat;
        $msg .= "\n" . 'Übernachtung: ';
        if ($tripel->eins->uebern_jn === 'J') {
          $msg .= 'vom ' . $tripel->eins->uebern_von . ' bis ' . $tripel->eins->uebern_bis;
        } else {
          $msg .= 'Tagesteilnehmer (ohne Übernachtung)';
        }
        $msg .= "\n\n";
        $msg .= 'Bemerkung: ' . $tripel->eins->bemerk_ext;
        $msg .= "\n\n";
      }
    }
    $msg .= "\n\n" . $this->_replaceVarsMDS($this->toolSettings->anmeldeBestaetigungNachspann, $kurs, $user);

    smtpMail::sendStandardTextMail($email, $this->_replaceVarsMDS($this->toolSettings->anmeldeBestaetigungBetreff, $kurs, $user), $msg);
  }

  private function _replaceVarsMDS($pMsg, $pKurs, $pUser)
  {
    $result = str_replace('{%k_kurzbez_titel%}', $pKurs->getVarValue('kurzbez_titel'), $pMsg);
    $result = str_replace('{%k_kurzbez%}', $pKurs->getVarValue('kurzbez'), $result);
    $result = str_replace('{%k_id%}', $pKurs->getVarValue('id'), $result);
    $result = str_replace('{%k_nrab%}', $pKurs->getVarValue('nrab'), $result);
    $result = str_replace('{%k_beginn_dat%}', $pKurs->getVarValue('beginn_dat'), $result);
    $result = str_replace('{%k_ende_dat%}', $pKurs->getVarValue('ende_dat'), $result);
    $result = str_replace('{%t_ansprache%}', ConstantOperations::getAnsprache($pUser), $result);

    return str_replace('{%t_anrede%}', ConstantOperations::getAnrede($pUser), $result);
  }

  
  private function doXmlAnmeldungMDS($pAryTripel, $knr, $firmaBelid, $firmaTnr)
  {
    $firmenanmeldungen = new XMLNode('firmenanmeldungen');
    $firmenanmeldung = new XMLNode('firmenanmeldung');
    $firmenanmeldung->addChild(new XMLNode('firma_belegid', $firmaBelid));
    $firmenanmeldung->addChild(new XMLNode('firma_tnr', $firmaTnr));
    $firmenanmeldung->addChild(new XMLNode('firma_knr', $knr));

    $anmeldungen = new XMLNode('anmeldungen');

    foreach ($pAryTripel as $tripel) {
      $anmeldung = XMLNode::getXMLNode($tripel->eins, 'anmeldung', array('bearbeiter', 'bearbdatum', 'knr', 'mobil', 'tel', 'telefon'));

      $adressen = new XMLNode('adressen');
      $adressen->addChild(XMLNode::getXMLNode($tripel->zwei, 'adresse', array('bearbeiter', 'bearbdatum')));
      $adressen->addChild(XMLNode::getXMLNode($tripel->drei, 'adresse', array('bearbeiter', 'bearbdatum')));
      if ($adressen->hasChildren()) {
        $anmeldung->addChild($adressen);
      }

      $anmeldungen->addChild($anmeldung);
    }

    $firmenanmeldung->addChild($anmeldungen);
    $firmenanmeldungen->addChild($firmenanmeldung);

    $allgsettings = AllgSettingsAPI::getAllgSettings();

    
    $teilnehmer = SessionOperations::getCurrentWebToolsTeilnehmer();
    $senderEmailData = ToolsAPI::getSenderEmailAddressAndName($teilnehmer);

    $mailAdress = $allgsettings->emailanm;
    $email = new smtpMail();
    $email->SetVar2Value('from', $senderEmailData['email']);
    $email->SetVar2Value('sendername', $senderEmailData['name']);
    $email->SetVar2Value('reply', $senderEmailData['reply']);
    $email->SetVar2Value('replyname', $senderEmailData['replyname']);
    $email->SetVar2Value('to', $mailAdress);
    $email->SetVar2Value('contenttype', SMTP_CONTENTTYPE_TEXT);
    $email->SetVar2Value('doNotSplitHTMLBody', true);
    $email->subject = 'automatisch generierte eMail - FirmenAnmeldung';
    $email->body = '<?xml version="1.0" encoding="' . \CodingOperations::getInternalEncoding() . '"?>' . "\n" . $firmenanmeldungen->getXMLstring();
    if (!$email->sendMail()) {
      throw new Exception('Versenden der Anmelde-Mail fehlgeschlagen');
    }
  }

  private function _handleAnmeldeseite()
  {
    
    $knr = RequestOperations::getVarValue('knr');
    $kurs = $this->_dbwKurse->getKurs($knr);
    $kurs = $this->aktualisiereKursPerDmz($kurs);

    $post_id = PostOperations::getVarValue('postId', 0);
    if ($post_id == 0) {
      
      $data = SessionOperations::getVarValueWTIntern('anm_bestaetigung_last');
    } elseif (SessionOperations::getVarValueWTIntern('anm_bestaetigung_' . $post_id, false)) {
      
      $data = SessionOperations::getVarValueWTIntern('anm_bestaetigung_' . $post_id);
    } else {
      
      $warenkorb = new DBWorkWarenkorbKurse();
      $warenkorb->clear();
      $warenkorb->addEntry($kurs->id);
      $warenkorb->implodeEntries();

      
      $dbwtn = new DBWorkTeilnehmer(1, true);
      $tn = $dbwtn->getTeilnehm($this->_user->tnr);
      SessionOperations::TNObjectToSession($tn, 'w_', $this->_user->tnr);

      $zahlart = PostOperations::getVarValue('anm_zahlart', '');
      if ($zahlart == 'Ü') {
        SessionOperations::setVarValueWK('w_zahlart_b', 'Ü');
      }

      
      $guthaben_verwenden = PostOperations::isDefined('guthaben_verwenden');
      SessionOperations::setVarValueWk('w_guthabenverwenden_b', $guthaben_verwenden);
      
      SessionOperations::setVarValueWk('w_abw_kontoverwenden_b', false);
      
      
      
      if (PostOperations::isDefined('abw_isNurFuerAnmeldung')) {
        
        $isNurFuerAnmeldung = PostOperations::getVarValue('abw_isNurFuerAnmeldung');
        
        $verfahren = PostOperations::getVarValue('abw_verfahren');
        $inhaber = PostOperations::getVarValue('abw_inhaber');
        $bank = PostOperations::getVarValue('abw_bank');

        $kto = PostOperations::getVarValue('abw_kto');
        $blz = PostOperations::getVarValue('abw_blz');
        $bic = PostOperations::getVarValue('abw_bic');
        $iban = PostOperations::getVarValue('abw_iban');

        if ($isNurFuerAnmeldung === 'true') {
          
          SessionOperations::setVarValueWk('w_abw_kontoverwenden_b', true);
          
          SessionOperations::setVarValueWk('w_abw_bankbez_b', $bank);
          SessionOperations::setVarValueWk('w_abw_kontoinh_b', $inhaber);
          if ($verfahren === 'iban') {
            SessionOperations::setVarValueWk('w_abw_bic_b', $bic);
            SessionOperations::setVarValueWk('w_abw_iban_b', $iban);
          } else {
            SessionOperations::setVarValueWk('w_abw_kontonr_b', $kto);
            SessionOperations::setVarValueWk('w_abw_blz_b', $blz);
          }
        } else {
          
          $dbwtn = new DBWorkTeilnehmer(1, true);
          $tn = $dbwtn->getTeilnehm(SessionOperations::getCurrentWebToolsUser()->tnr);
          if ($inhaber != '') {
            $tn->kontoinhaber = $inhaber;
          }
          if ($bank != '') {
            $tn->bankbez = $bank;
          }
          if ($verfahren === 'iban') {
            if ($bic != '') {
              $tn->bic = $bic;
            }
            if ($iban != '') {
              $tn->iban = $iban;
            }
            $tn->konto = '';
            $tn->blz = '';
          } else {
            if ($kto != '') {
              $tn->konto = $kto;
            }
            if ($blz != '') {
              $tn->blz = $blz;
            }
            $tn->bic = '';
            $tn->iban = '';
          }
          StammBvAPI::bereinigeBankdatenAnhandTeilnehmer($tn, true, false);
        }
      }

      
      
      $anzahlMa = PostOperations::getVarValue('anzahl_mitarbeiter');
      SessionOperations::setVarValueWk('gAnzahl_Mitarbeiter', $anzahlMa);



      $dbwKennz = new DBWorkKennz();

      
      SessionOperations::setVarValueAnm(ANMELDEART, ANMELDEART_INTERN_FIRMA);

      
      for ($i = 1; $i <= $anzahlMa; $i++) {
        
        
        SessionOperations::setVarValueWk('w_nachname_ma' . $i, PostOperations::getVarValue('name_' . $i));
        SessionOperations::setVarValueWk('w_name_ma' . $i, PostOperations::getVarValue('name_' . $i));
        SessionOperations::setVarValueWk('w_vorname_ma' . $i, PostOperations::getVarValue('vorname_' . $i));
        SessionOperations::setVarValueWk('w_abwadr_ma' . $i, '');
        SessionOperations::setVarValueWk('w_tel_ma' . $i, PostOperations::getVarValue('telefon_' . $i));
        SessionOperations::setVarValueWk('w_email_ma' . $i, PostOperations::getVarValue('email_' . $i));
        SessionOperations::setVarValueWk('w_tnr_ma' . $i, PostOperations::getVarValue('tnr_' . $i));

        if (DBWorkBASysSettings::isBlak()) {
          SessionOperations::setVarValueWk('w_kennz1_ma' . $i, PostOperations::getVarValue('kennz_' . $i));
          SessionOperations::setVarValueWk('w_beruf_ma' . $i, $dbwKennz->getKennzNamebyKnr(SessionOperations::getVarValueWk('w_kennz1_ma' . $i)));
          SessionOperations::setVarValueWk('w_geschlecht_ma' . $i, PostOperations::getVarValue('geschlecht_' . $i));
          SessionOperations::setVarValueWk('w_name_titel_ma' . $i, PostOperations::getVarValue('anredetitel_' . $i));
          SessionOperations::setVarValueWk('w_gebdat_ma' . $i, PostOperations::getVarValue('gebdat_' . $i));

          
          if (PostOperations::getVarValue('tnr_' . $i) == '') {
            SessionOperations::setVarValueWk('w_zusatz_ma' . $i, $tn->name);
            SessionOperations::setVarValueWk('w_strasse_ma' . $i, $tn->strasse);
            SessionOperations::setVarValueWk('w_ort_ma' . $i, $tn->ort);
          }
        }
      }


      
      
      $data = AnmeldeAPI::Kursbuchen($kurs->id, $this->getToolId(), $this->_user->email);
      $menu = new Menu();
      $data .= '<div class="clear">' . $menu->getBackLink(ToolsAPI::getHistoryEntry(2)) . '</div>';
      
      
      SessionOperations::setVarValueWTIntern('anm_bestaetigung_' . $post_id, $data);
      SessionOperations::setVarValueWTIntern('anm_bestaetigung_last', $data);
    }

    $pageLinks = array();
    $contentHeader = 'Anmeldebestätigung - Firma';
    if (DBWorkBASysSettings::isBlak()) {
      
      $contentHeader = '';
    }
    $page = new Page4ExternContent('Anmeldung', 327, $this, $contentHeader, $data);
    
    
    $page->setLinks($pageLinks);

    return $page;
  }

  private function _handleAnmeldungMitarbeiter()
  {
    
    SessionOperations::setVarValueWTIntern('cansignon', true);

    
    $knr = GetOperations::getVarValue('knr');
    $kurs = $this->_dbwKurse->getKurs($knr);

    $kurs = $this->aktualisiereKursPerDmz($kurs);

    $pageLinks = array();
    if (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '328.0.1')) {
      $pageLinks['mitarbeiterSuche'] = true;
    }
    if (DBWorkBASysSettings::isBlak()) {
      $page = new PageFaAnmeldungMitarbeiterBLAK($this, $kurs);
    } else {
      $page = new PageFaAnmeldungMitarbeiter($this, $kurs);
    }
    $page->setLinks($pageLinks);

    return $page;
  }

  public function getToolId()
  {
    return \ToolsAPI::TOOL_ANMELDUNGBUCHEN_FA;
  }

  private function aktualisiereKursPerDmz($pKurs)
  {
    $isDmzBetrieb = SessionOperations::isDmzBetrieb();
    $isSettingOk = $this->toolSettings->kursePerDmzAktualisieren;

    if ($isDmzBetrieb && $isSettingOk) {
      try {
        $pKurs = AnmeldeAPI::updateKursData($pKurs);
      } catch (Exception $e) {
        
      }
    }

    return $pKurs;
  }

  private function aktualisiereKursePerDmz($pKurse)
  {
    $isDmzBetrieb = SessionOperations::isDmzBetrieb();
    $isSettingOk = $this->toolSettings->kursePerDmzAktualisieren;

    if ($isDmzBetrieb && $isSettingOk) {
      try {
        $pKurse = AnmeldeAPI::updateKursArrayData($pKurse);
      } catch (Exception $e) {
        
      }
    }

    return $pKurse;
  }
}
?>