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

class XmlDataGeneratorAnmeldedaten
{
  
  public function getXmlNode($anmeldedaten)
  {
    $anmeldedatenNode = new XMLNode('anmeldedaten');

    $erkannteTnDubletten = $anmeldedaten->getDublettenNummern();
    if ($erkannteTnDubletten != '') {
      $erkannteTnDublettenNode = $anmeldedatenNode->addChild(new XMLNode('erkannteTnDubletten'));
      foreach ($erkannteTnDubletten as $id) {
        $erkannteTnDublettenNode->addChild(new XMLNode('id', $id));
      }
    }

    $abwZahler = $anmeldedaten->getAbwZahler();
    if (isset($abwZahler) && $abwZahler->id > 0) {
      $abwZahlerNode = new XMLNode('abwzahler');
      $abwZahlerNode->addChild(new XMLNode('id', $abwZahler->id));
      $abwZahlerNode->addChild(new XMLNode('blz', $abwZahler->blz));
      $abwZahlerNode->addChild(new XMLNode('konto', $abwZahler->konto));
      $abwZahlerNode->addChild(new XMLNode('iban', $abwZahler->iban));
      $anmeldedatenNode->addChild($abwZahlerNode);

      if ($abwZahler->isRechnungsEmpfaenger) {
        $anmeldedatenNode->addChild(new XMLNode('abweichenderzahleralsrechnungsadresse', 'W'));
      }
    }

    $firmaNichtZuordnen = $anmeldedaten->getFirmaNichtZuordnen();
    if ($firmaNichtZuordnen != '') {
      $anmeldedatenNode->addChild(new XMLNode('firmanichtzuordnen', $firmaNichtZuordnen));
    }

    $anmeldedatenNode->addChild(new XMLNode('knr', $anmeldedaten->getKurs()->id));
    $anmeldedatenNode->addChild(new XMLNode('gutschein_id', $anmeldedaten->getGutscheinId()));

    
    $anmeldedatenNode->addChild(new XMLNode('newsl_erlaubt', $anmeldedaten->getHauptBelegung()->teilnehmer->newsl_erlaubt));

    if (is_null($anmeldedaten->getHauptBelegung())) {
      $hauptbelegungNode = $anmeldedatenNode->addChild(new XMLNode('hauptbelegung', '', '', '', true));
    } else {
      $hauptbelegungNode = $anmeldedatenNode->addChild(XMLNode::getXMLNode($anmeldedaten->getHauptBelegung(), 'hauptbelegung', array('erm_grund'), true));
    }

    $ePayInfo = $anmeldedaten->getEPayInfo();
    if ($ePayInfo != '') {
      $ePayInfoNode = $hauptbelegungNode->addChild(new XMLNode('epayinfo'));
      $ePayInfoNode = $this->_ePayInfoAnhaengen($ePayInfoNode, $ePayInfo);
    }

    $weitereBelegungenNode = new XMLNode('weiterebelegungen');
    foreach ($anmeldedaten->getWeitereBelegungen() as $weitereBelegung) {
      $weitereBelegungenNode->addChild(XMLNode::getXMLNode($weitereBelegung, 'weiterebelegung', array(), true));
    }
    $anmeldedatenNode->addChild($weitereBelegungenNode);

    $kinderNode = new XMLNode('kinder');
    foreach ($anmeldedaten->getKinder() as $kind) {
      $kinderNode->addChild(XMLNode::getXMLNode($kind, 'kind', array(), true));
    }
    $anmeldedatenNode->addChild($kinderNode);

    $teilnehmerdatenNode = new XMLNode('teilnehmerdaten');
    foreach ($anmeldedaten->getWeitereTeilnehmer() as $teilnehmer) {
      $teilnehmerNode = XMLNode::getXMLNode($teilnehmer, 'teilnehmer', array(), true);
      $teilnehmer->negiereKommunikationNrUndId();
      $kommunikationsdatenNode = $teilnehmer->getKommunikationAlsXMLNode();
      $teilnehmerNode->addChild($kommunikationsdatenNode);
      $teilnehmerdatenNode->addChild($teilnehmerNode);
    }
    $anmeldedatenNode->addChild($teilnehmerdatenNode);

    $zahlungenNode = new XMLNode('zahlungen');
    foreach ($anmeldedaten->getZahlungen() as $zahlung) {
      $zahlungenNode->addChild(XMLNode::getXMLNode($zahlung, 'zahlung', array(), true));
    }
    $anmeldedatenNode->addChild($zahlungenNode);

    $fortlGebuehrenNode = new XMLNode('fortlgebuehren');
    foreach ($anmeldedaten->getFortlGebuehren() as $fortlGebuehr) {
      $fortlGebuehrenNode->addChild(XMLNode::getXMLNode($fortlGebuehr, 'fortlgebuehr', array(), true));
    }
    $anmeldedatenNode->addChild($fortlGebuehrenNode);

    return $anmeldedatenNode;
  }

  private function _ePayInfoAnhaengen(XMLNode $pNode, EPayInfo $pEPayInfo)
  {
    $pNode->addChild(new XMLNode('epay_tid', $pEPayInfo->tid));
    $pNode->addChild(new XMLNode('epay_tid_merchant', $pEPayInfo->tidMerchant));
    $pNode->addChild(new XMLNode('epay_type', $pEPayInfo->type));
    $pNode->addChild(new XMLNode('epay_ordertime', $pEPayInfo->ordertime));
    $pNode->addChild(new XMLNode('epay_payerid', $pEPayInfo->payerid));
    $pNode->addChild(new XMLNode('epay_institution', $pEPayInfo->institution));
    $pNode->addChild(new XMLNode('epay_feeamount', $pEPayInfo->feeamount));
    $pNode->addChild(new XMLNode('epay_amount', $pEPayInfo->amount));
    $pNode->addChild(new XMLNode('epay_state', $pEPayInfo->paymentState));

    $paymentDateValue = $pEPayInfo->paymentDate;
    $paymentDateAttribut = '';
    if (!isset($paymentDateValue) || $paymentDateValue === '') {
      $paymentDateAttribut = 'leer="true"';
      $paymentDateValue = '-';
    }
    $pNode->addChild(new XMLNode('epay_payment_date', $paymentDateValue, $paymentDateAttribut));
    $pNode->addChild(new XMLNode('epay_processing_mode', $pEPayInfo->processingMode));

    $pNode->addChild(new XMLNode('epay_order_id', $pEPayInfo->order_id));
    $pNode->addChild(new XMLNode('epay_authorizationid', $pEPayInfo->authorizationid));
    $pNode->addChild(new XMLNode('epay_capture_id', $pEPayInfo->capture_id));

    if (isset($pEPayInfo)) {
      $payonline = ePaymentApi::getPayonlineProviderKeyFromSession();
    } else {
      $payonline = 0;
    }

    $pNode->addChild(new XMLNode('payonline', $payonline));

    return $pNode;
  }
}