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

class NewAnwesenheitAPI
{
  public static function getJsFiles()
  {
    return array('../jquery/plugins/jquery.dataTables.min.js', 'js/anwesenheiten.js',
                  'js/klassenbuch.js', 'js/anwesenheitfilter.js', 'js/DozTool/verhaltenpdf.js');
  }

  
  public static function getInitJs(
    $pKnr,
    $pTage,
    $pBelegungen,
    $pVerhalten,
    $pAnwesenheiten,
    $pKennzArray,
    $pKennzTextAry,
    $pObjSettings,
    $pReadOnly = false,
    $pHLGruende = '',
    $pHLBemerkungen = '',
    $pUnterrichtsmittel = '',
    $pMitProzent = false,
    $pMitTageDa = false,
    $pMitTageWeg = false,
    $pAbwesenheitsgrundErforderlich = 'F',
    $pShowMoreFilterOptions = true,
    $pKtOrig = null,
    $pTeilnehmerAry = null,
    $pVonFilter = ''
  ) {
    $result = '  registerNamespace("KuferTools.Anwesenheiten");' . "\n";
    $result .= '  registerNamespace("KuferTools.Anwesenheiten.VerhaltenPDFList");' . "\n";

    $result .= '  registerNamespace("KuferTools.Anwesenheiten.DisplayEinstellungen");' . "\n";
    $result .= JsOperations::getDeclarationInt('KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus', -1);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.ShowMoreFilterOptions', $pShowMoreFilterOptions);

    $filterAnzeigeArray = array();
    $filterAnzeigeArray['anwFilterAnzeigeUhrzeit'] = isset($pObjSettings->anwFilterAnzeigeUhrzeit) && $pObjSettings->anwFilterAnzeigeUhrzeit;
    $filterAnzeigeArray['anwFilterAnzeigeUE'] = isset($pObjSettings->anwFilterAnzeigeUE) && $pObjSettings->anwFilterAnzeigeUE;
    $filterAnzeigeArray['anwFilterAnzeigeDozent'] = isset($pObjSettings->anwFilterAnzeigeDozent) && $pObjSettings->anwFilterAnzeigeDozent;
    $filterAnzeigeArray['anwFilterAnzeigeFaecher'] = isset($pObjSettings->anwFilterAnzeigeFaecher) && $pObjSettings->anwFilterAnzeigeFaecher;
    $filterAnzeigeArray['anwFilterAnzeigeBemerkung'] = isset($pObjSettings->anwFilterAnzeigeBemerkung) && $pObjSettings->anwFilterAnzeigeBemerkung;

    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit', $filterAnzeigeArray['anwFilterAnzeigeUhrzeit']);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE', $filterAnzeigeArray['anwFilterAnzeigeUE']);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent', $filterAnzeigeArray['anwFilterAnzeigeDozent']);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher', $filterAnzeigeArray['anwFilterAnzeigeFaecher']);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung', $filterAnzeigeArray['anwFilterAnzeigeBemerkung']);

    $dbwHlAnwSt = new DBWorkHLAnwesenheitStatus();
    $anwFilterStatus = $pObjSettings->anwFilterStatus;
    if ($anwFilterStatus == '') {
      $anwFilterStatus = $dbwHlAnwSt->getStatusVorbelegung();
    }
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.DisplayEinstellungen.AlleFilterStatus', $pKennzArray);
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatusText', $pKennzTextAry);
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.DisplayEinstellungen.GesetzteFilterStatus', $anwFilterStatus);

    $filter = array('Anzeige' => $filterAnzeigeArray, 'isFirstTimeTheFilterIsUsed' => true);
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.DisplayEinstellungen.Filter', $filter);

    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.MitProzent', $pMitProzent);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageDa', $pMitTageDa);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageWeg', $pMitTageWeg);

    if ($pVonFilter != '' && DateTimeOperations::isValidDate($pVonFilter)) {
      $result .= JsOperations::getDeclarationString('KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon', $pVonFilter);
    }

    $result .= JsOperations::getDeclarationString('KuferTools.Anwesenheiten.Kursnr', $pKnr);
    if (isset($pKtOrig)) {
      $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.KurstagOrig', $pKtOrig);
    }
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.KurstagInfo', $pTage);
    
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.BelegungsInfo', $pBelegungen);
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.VerhaltensInfo', $pVerhalten);
    $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.AnwesenheitsInfoOrig', $pAnwesenheiten);
    $result .= '  KuferTools.Anwesenheiten.AnwesenheitsInfo = deepObjCopy(KuferTools.Anwesenheiten.AnwesenheitsInfoOrig)' . ";\n";

    if ($pHLGruende != '') {
      $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.HLGruende', $pHLGruende);
    }
    if ($pHLBemerkungen != '') {
      $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.HLBemerkungen', $pHLBemerkungen);
    }
    if ($pUnterrichtsmittel != '') {
      $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.UnterrichtsmittelOrig', $pUnterrichtsmittel);
      $result .= '  KuferTools.Anwesenheiten.Unterrichtsmittel = deepObjCopy(KuferTools.Anwesenheiten.UnterrichtsmittelOrig)' . ";\n";
    }
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.ReadOnly', $pReadOnly);

    $tool18settings = ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_ANWESENHEIT_DOZ);
    $result .= JsOperations::getDeclarationBoolean('KuferTools.Anwesenheiten.bemerkungsfeldUeberHinterlegungBefuellen', $tool18settings->bemerkungsfeldUeberHinterlegungBefuellen);

    $result .= JsOperations::getDeclarationString('KuferTools.Anwesenheiten.AbwesenheitsgrundErforderlich', $pAbwesenheitsgrundErforderlich);

    if (DBWorkBASysSettings::isSchwerinAusbildung()) {
      $result .= JsOperations::getDeclarationJson('KuferTools.Anwesenheiten.TeilnehmerAry', $pTeilnehmerAry);
    }

    return $result;
  }

  
  public static function getTable4TotalKurs($pKnr = '')
  {
    $sprachsettings = new SprachSettingsObject();

    $result = '';
    
    $result .= '<table id="anwesenheiten4Kurs" border="1" cellspacing="0"></table>' . "\n";
    

    
    $result .= '<script id="templateHeader" type="text/html">' . "\n";
    $result .= '<thead><tr><th id="alleSetzen">' . CleanOperations::cleanStringForHtml($sprachsettings->Teilnehmer['Singular']['Nominativ']) . ' mit Status</th><th>&nbsp;</th>' . "\n";
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitProzent) { #>' . "\n"
            . '<th id="anwProzent">Anw.' . BR_WT . ' in %</th> <# } #>';
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageDa) { #>' . "\n"
            . '<th id="anwTageDa">Anw.' . BR_WT . 'Tage</th> <# } #>';
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageWeg) { #>' . "\n"
            . '<th id="anwTageWeg" title="Differenz der Tage, die ' . CleanOperations::cleanStringForHtml($sprachsettings->Teilnehmer['Singular_mit_Artikel']['Nominativ']) . ' anwesend hätte sein müssen '
            . '(unter Berücksichtigung von Fach, Eintritt, Austritt, Kündigung) und den Tagen, die er zumindest teilweise anwesend war.">'
            . 'Abw.' . BR_WT . 'Tage</th> <# } #>';

    
    $result
         .= '<#' . "\n"
           . 'var dozent = "";' . "\n"
           . 'var uhrzeit = "";' . "\n"
           . 'var UE = "";' . "\n"
           . 'var faecher = "";' . "\n"
           . 'var bemerkung ="";' . "\n";
    
    $result
           .= 'for (var ki = 0 ; ki<KurstagInfo.length; ki++)  {' . "\n"
           . '  kurstag = KurstagInfo[ki];' . "\n"
           . '  if(KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit)' . "\n"
           . '    uhrzeit = \'<br>\'+kurstag.beginn + \' - \' + kurstag.ende;' . "\n"
           . '  if(KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE)' . "\n"
           . '    UE = \'<br>\'+kurstag.ue;' . "\n"
           . '  if(KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent)' . "\n"
           . '    dozent = \'<br>\'+kurstag.dozname;' . "\n"
           . '  if(KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher)' . "\n"
           . '    faecher = \'<br>\'+kurstag.fach;' . "\n"
           . '  if(KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung)' . "\n"
           . '    bemerkung = \'<br>\'+kurstag.bemerkung;' . "\n"
           . '  /* alert("kurstag " + ki + " : (id: " + kurstag.id  + "  datum: " + kurstag.datum + ") "); */' . "\n"
         . '#>' . "\n";
    $result .= ' <th id="kt_<#= kurstag.id #>"><#= kurstag.datum #><#= uhrzeit #><#= UE #><#= dozent #><#= faecher #><#= bemerkung #>' . "\n"
               . '</th>' . "\n"
               . '<# } #>' . "\n"
               . '</tr>' . "\n"
               . '</thead>' . "\n"
               . '</script>' . "\n";

    
    

    $result .= '<script id="templateRow" type="text/html">' . "\n";
    $result .= "<# \n";
    $result .= " for (ti = 0 ; ti<BelegungsInfo.length; ti++) {\n";
    $result .= "   belegung = BelegungsInfo[ti];\n";
    $result .= "#> \n";

    $result .= '<tr class="anwesenheitsZeile" id="rowBel_<#= belegung.belegid #>">' . "\n"
               . '<th <#=KuferTools.Anwesenheiten.renderRollenByBelegungInfo(belegung) #>><#=belegung.tnname #></th>' . "\n"
               . '<td class="belegung_status"><#= belegung.status_1 #></td>' . "\n";
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitProzent) { #>' . "\n"
               . '<td class="anwProzent"><#= belegung.inProzent #>%</td> <# } #>';
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageDa) { #>' . "\n"
               . '<td class="anwTageDa"><#= belegung.tageDa #></td> <# } #>';
    $result .= '<# if (KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageWeg) { #>' . "\n"
               . '<td class="anwTageWeg"><#= belegung.tageWeg #></td> <# } #>';
    $result .= '<#' . "\n";

    
    $result .= 'for (var ki = 0 ; ki<KurstagInfo.length; ki++)  {' . "\n"
               . '  kurstag = KurstagInfo[ki];' . "\n"
               . '  anwesenheit =  KuferTools.Anwesenheiten.getAnwByBelegungKurstag(belegung.belegid, kurstag.id, AnwesenheitsInfo);' . "\n";

    $result .= "  var anwstatus = '&nbsp;';\n"
               . "  var klasseAbwesenheiten = '';\n"
               . '  if (anwesenheit != null) {' . "\n"
               . '    anwstatus = anwesenheit.astatus;' . "\n";
    $result .= '    if (anwesenheit._eanws.length>0)' . "\n"
               . '      klasseAbwesenheiten = " miteanw";' . "\n"
               . '  }' . "\n";
    $result .= '  var titleErweiterung = "";' . "\n";
    
    
    $result .= ' var klasseEintritt = belegung.eintritt !== "" && KuferTools.Utils.Date.isDateBefore(kurstag.datum,belegung.eintritt)?" vorEintritt":"";' . "\n";
    $result .= ' titleErweiterung = (belegung.eintritt !== "" && KuferTools.Utils.Date.isDateBefore(kurstag.datum,belegung.eintritt))?titleErweiterung+" Eintritt: "+belegung.eintritt:titleErweiterung;' . "\n";
    $result .= ' var klasseAustritt = (belegung.austritt !== "" && KuferTools.Utils.Date.isDateBefore(belegung.austritt,kurstag.datum))?" nachAustritt":"";' . "\n";
    $result .= ' titleErweiterung = (belegung.austritt !== "" && KuferTools.Utils.Date.isDateBefore(belegung.austritt,kurstag.datum))?titleErweiterung+" Austritt: "+belegung.austritt:titleErweiterung;' . "\n";
    $result .= ' titleErweiterung = titleErweiterung !== ""?" ("+trim(titleErweiterung)+")":"";' . "\n";
    
    $result .= '#>' . "\n"
               . '<td class= "anwesenheit<#= klasseAbwesenheiten #><#= klasseEintritt #><#= klasseAustritt #>" id="bel<#= belegung.belegid #>_kt<#= kurstag.id#>" title="<#=belegung.tnname #> am <#=kurstag.datum #><#= titleErweiterung #>">' . "\n"
               . '<#= anwstatus #>' . "\n"
               . '</td>' . "\n"
               . '<# }' . '#>' . "\n" 
               . '</tr>' . "\n"
               . '<# } #>' . "\n"
               . '</script>' . "\n";

    $result .= '<script type="text/javascript">' . "\n";
    $result .= "KuferTools.Anwesenheiten.initTable4Kurs($('#anwesenheiten4Kurs'));\n";
    $result .= "</script>\n";

    return $result;
  }

  public static function getTable4OneDay()
  {
    $sprachsettings = new SprachSettingsObject();

    $result = '';
    
    $result .= '<table id="anwesenheiten4Kurstag"></table>' . "\n";


    

    
    $result .= '<script id="templateHeader" type="text/html">' . "\n";
    $result .= '<thead><tr><th id="alleSetzen">' . CleanOperations::cleanStringForHtml($sprachsettings->Teilnehmer['Singular']['Nominativ']) . ' mit Status</th>';
    
    if (DBWorkBASysSettings::isSchwerinAusbildung()) {
      $result .= '<th>Ausbildungsberuf</th>';
    }
    $result .= '<th>&nbsp;</th><th id="<#= id #>"><#= renderdatum #></th>';
    $result .= '<th>Bemerkung</th><th title="mehrere Einträge">&nbsp;</th><th>&nbsp;</th></tr></thead>' . "\n";
    $result .= "</script>\n";
    
    $result .= '<script id="templateRow" type="text/html">' . "\n";
    $result .= "<# \n";
    $result .= " for (ti = 0 ; ti<BelegungsInfo.length; ti++) {\n";
    $result .= "  belegung = BelegungsInfo[ti];\n  anwesenheit =  KuferTools.Anwesenheiten.getAnwByBelegungKurstag(belegung.belegid, KurstagInfo[0].id, AnwesenheitsInfo);\n";
    $result .= "  extraAnwesenheitenVorhanden = '';\n";
    $result .= '  if (anwesenheit == null) { anwesenheit = {"anwid":null,"abelegid":null,"aktid":null,"astatus":null,"abemerkung":null,"extraid":null,"estatus":null,"ebemerkung":null,"evon":null,"ebis":null,"afehlminanfang":null,"afehlminende":null,"aprogresscheck":null,"ahausaufgaben":null}; ' . "\n";
    $result .= "  } else { if (anwesenheit._eanws.length > 0) extraAnwesenheitenVorhanden = '<img title=\"Mehrere Eintr&auml;ge für diesen Tag vorhanden\" class=\"anwExtraAnwClass\" alt=\"Mehrere Eintr&auml;ge für diesen Tag vorhanden\" src=\"images/achtung.gif\" border=\"0\" />'; }";
    $result .= "  selectFuerStatus = '';\n";
    $result .= "  var readOnly = (KuferTools.Anwesenheiten.ReadOnly?' disabled':'');\n";
    $result .= "  var hl_anw_bemerkung = '';\n";
    $result .= "  if (!KuferTools.Anwesenheiten.ReadOnly) hl_anw_bemerkung = '<img class=\"button_hl_anw_bemerkung\" src=\"layout/button_hinterlegung.gif\" title=\"Bemerkung aus Hinterlegung hinzufügen\">';\n #>\n";
    $result .= '<tr class="anwesenheitsZeile" id="rowBel_<#= belegung.belegid #>"><th <#=KuferTools.Anwesenheiten.renderRollenByBelegungInfo(belegung) #> ><#=belegung.tnname #></th>';
    
    if (DBWorkBASysSettings::isSchwerinAusbildung()) {
      $result .= '<td><#= KuferTools.Anwesenheiten.TeilnehmerAry[belegung.belegid].krit2 #></td>';
    }
    $result .= '<td><#= belegung.status_1 #></td><td class="belegung_status"></td>'
        . '<td class="anw_bemerkung_td"><input class="anw_bemerkung" maxlength="60" value="<#= anwesenheit.abemerkung #>"<#= readOnly #>><#= hl_anw_bemerkung #>'
        . '</td>'
        . '<td class="anw_extra_img"><img class="aufklappen klappen" src="images/aufklappen.gif"></td>'
        
        . '<td>'
        
        . '<img class="addEanwRow" title="Abwesenheit eintragen" alt="" src="images/mengeplus.gif" border="0"></a>'
       . '<input type="hidden" class="aamscode" value="<#= anwesenheit.aamscode #>" name="aamscode" ></td>'
        . '</tr>' . "\n";

    $result .= " <# } #>\n";
    $result .= "</script>\n";
    $result .= '<script class="templateEanwRow" type="text/html">' . "\n";
    $result .= '<# for (var ti = 0 ; ti < _eanws.length ; ti++)'
      . '{ #>'
      . ' <tr class="extraAnwesenheitsZeile for_anwesenheit_<#= abelegid #>">'
         . '<td colspan="2" style="padding-left: 20px;">'
           . '<label class="uhrzeit">von: </label><input style="width: 3em" type="text" name="detail_von_extra_anw" class="uhrzeit val_time eanw_von" value="<#=_eanws[ti].evon#>" maxlength="5">'
           . '<label class="uhrzeit bis">bis: </label><input style="width: 3em" type="text" name="detail_bis_extra_anw" class="uhrzeit val_time eanw_bis" value="<#=_eanws[ti].ebis#>" maxlength="5">'
         . '</td>'
         . '<td><span class="extra_anw_status_parent"></span></td>'
         . '<td>'
          . '<span><input name="detail_bemerkung_extra_anw" maxlength="60" value="<#= _eanws[ti].ebemerkung #>" class="ziel eanw_bemerkung">'
            . '<img class="button_hl_anw_bemerkung" src="layout/button_hinterlegung.gif" title="Bemerkung aus Hinterlegung einfügen">'
          . '</span>'
         . '</td>'
         . '<td><img class="delEanwRow" src="images/loeschen.gif" title="Abwesenheit löschen">'
         . '<input type="hidden" class="eamscode" value="<#=_eanws[ti].eamscode#>" name="eamscode" ></td>'
         . '<td>&nbsp;</td>'
         . '</tr>'
       . '<# } #>';
    $result .= "</script>\n";

    $result .= NewAnwesenheitAPI::_getDetailsTemplate();

    $result .= '<script type="text/javascript">';
    $result .= "KuferTools.Anwesenheiten.initTable4OneDay($('#anwesenheiten4Kurstag'));\n";
    $result .= "</script>\n";

    return $result;
  }

  public static function _getDetailsTemplate()
  {
    $result = "\n\n" . '<!-- Template für den Anwesenheiten - Detail Bildschirm-->'
      . '<script class="templateDetailsAnw" type="text/html">' . "\n"
      . '<# var vonreadOnlyBeeinflussterTeilBeiBemerkung = (KuferTools.Anwesenheiten.ReadOnly?" disabled>":\'><img class="button_hl_anw_bemerkung" src="layout/button_hinterlegung.gif" title="Bemerkung aus Hinterlegung einfügen">\'); #>' . "\n"
      . '<div id="detailsAnw" class="editAnw">' . "\n"
      . '<label>Anwesenheit:</label><span id="detail_status_anw_parent"></span><br>' . "\n"
      . '<label>Bemerkung:</label><span><input id="detail_bemerkung_anw" class="anw_bemerkung ziel" name="detail_bemerkung_anw" value="<#= KuferTools.Anwesenheiten.CurrentAnwesenheit.abemerkung #>"<#= vonreadOnlyBeeinflussterTeilBeiBemerkung #></span>' . "\n"
      . '<br><br>' . "\n"
      . '<div id="targetExtraDetails"></div>'
      . '</div></script>';

    $result .= "\n\n" . '<!-- Sub-Template für die Extra Anwesenheiten im Detail-Bildschirm -->'
      . '<script class="templateDetailsAnwEanwRow" type="text/html">'
       . '<tr class="detailsAnwExtraAnwesenheitZeile">'
         . '<td class="status"><#= estatus #></td>'
         . '<td class="bemerkung"><#= ebemerkung#></td>'
         . '<td class="von"><#= evon #></td>'
         . '<td class="bis"><#= ebis #></td>'
       . '</tr>'
    . '</script>';

    $result .= "\n\n" . '<!-- Template für den Extra - Anwesenheiten - Detail Bildschirm-->'
      . '<script class="templateDetailsExtraAnw" type="text/html">'
      . '<div id="detailsExtraAnw" class="editAnw">'
      . '<label>Anw.:</label><span id="detail_status_extra_anw_parent"></span><br>'
      . '<label>Bemerk.:</label><span><input id="detail_bemerkung_extra_anw" name="detail_bemerkung_extra_anw" value="<#= ebemerkung #>" class="ziel anw_bemerkung"><img class="button_hl_anw_bemerkung" src="layout/button_hinterlegung.gif" title="Bemerkung aus Hinterlegung einfügen"></span><br>'
      . '<label class="uhrzeit">von:</label><input type="text" name="detail_von_extra_anw" id="detail_von_extra_anw" class="uhrzeit val_time" value="<#=evon#>" maxlength="5">' 
      . '<label class="uhrzeit bis">bis:</label><input type="text" name="detail_bis_extra_anw" id="detail_bis_extra_anw" class="uhrzeit val_time" value="<#=ebis#>" maxlength="5">' 
      . '</div></script>';

    return $result;
  }

  
  public static function getLehrstoffAndUeFormPart($pKurstag, $pOhneUe = false, $pReadOnly = false)
  {
    $readOnly = $pReadOnly ? ' disabled' : '';
    
    
    
    
    $ohneUeClass = ($pOhneUe) ? 'class="ohneUe"' : '';
    $str = '<div id="lehrStoffAndUE" ' . $ohneUeClass . ">\n";
    $str .= '  <div id="unterrichtsstoff">';
    $str .= "    <label for=\"klassenbuchtext\">Arbeitsbericht: </label>\n";
    $str .= "    <textarea name='klassenbuchtext' id='klassenbuchtext'$readOnly>" . CleanOperations::cleanStringForHtml($pKurstag->klassenbuchtext) . "</textarea></div>\n";
    if (!$pOhneUe) {
      $str .= '  <div id="uegehalten">';
      $str .= "    <span id=\"spanuegehalten\">UE gehalten: </span>\n";
      $str .= "    <input type='radio' id=\"cbvereinbart\" name='klassenbuchueok' class='check_radio' value='1'$readOnly ";
      $str .= ($pKurstag->klassenbuchueok == '1') ? "checked='checked'" : '';
      $str .= '><label for="cbvereinbart" id="lbvereinbart">im vereinbarten Umfang (= ' . CleanOperations::cleanFloatMitKomma($pKurstag->ue) . " UE)</label>\n";
      $str .= "    <input type='radio' id=\"cbanders\" name='klassenbuchueok' class='check_radio' value='2'$readOnly ";
      $str .= ($pKurstag->klassenbuchueok == '2') ? "checked='checked'" : '';
      $str .= "><label for=\"cbanders\" id=\"lbanders\">anders:</label>\n";
      $str .= "    <label for=\"klassenbuchabwue\" id=\"lbgehue\">gehaltene UE: </label>\n";
      $str .= "    <input id=\"klassenbuchabwue\" type='text' class='val_float' name='klassenbuchabwue'$readOnly value='";
      $str .= CleanOperations::cleanFloatMitKomma($pKurstag->klassenbuchabwue);
      $str .= "'>\n";
      $str .= "    <label id=\"lbklassenbuchgrund\" for=\"klassenbuchgrund\">Grund: </label>\n";
      $str .= "    <textarea name=\"klassenbuchgrund\" id=\"klassenbuchgrund\" maxlength=\"2000\"$readOnly>";
      $str .= CleanOperations::cleanStringForHtml($pKurstag->klassenbuchgrund);
      $str .= "</textarea></div>\n";
    }
    $str .= '</div>';

    return $str;
  }

  
  public static function getUnterrichtsMittel()
  {
    $result = '<div id="unterrichtsMittel"><span>Unterrichtsmittel:</span><div id="zielUnterrichtsMittel"></div></div>';
    $result .= "\n\n" . '<!-- Sub-Template für eine Zeile der Unterrichtsmittel -->'
        . '<script class="templateUnterrichtsmittelRow" type="text/html">'
    
        . '<tr><td><#= anzahl #></td><td><#= material #></td><td><#= bemerkung #></td></tr>'
        . '</script>';

    $result .= "\n\n" . '<!-- Template für den Unterrichtsmittel - Detail Bildschirm-->'
      . '<script class="templateDetailsUnterrichtsmittel" type="text/html">'
      . '<div id="detailsUnterrichtsmittel" class="editUmittel">'
      . '<span><label>Datum:</label><input id="detail_datum_umittel" name="detail_datum_umittel" value="<#= datum #>" class="hasDatePicker">'
      . '<label class="detail_uhrzeit_umittel">Uhrzeit:</label><input class="val_time" id="detail_uhrzeit_umittel" name="detail_uhrzeit_umittel" value="<#= uhrzeit #>" maxlength="5"></span>' . BR_WT
      
      . '<label>Anzahl:</label><input type="text" class="val_int" name="detail_anzahl_umittel" id="detail_anzahl_umittel" value="<#=anzahl#>">' . BR_WT
      . '<label>Unterrichtsmittel:</label><textarea rows="3" cols="44" name="detail_material_umittel" id="detail_material_umittel"><#=material#></textarea>' . BR_WT
      . '<label>Bemerkung:</label><textarea rows="3" cols="44" name="detail_bemerkung_umittel" id="detail_bemerkung_umittel"><#=bemerkung#></textarea>'
      . '</div></script>';

    return $result;
  }

  
  public static function getVerhaltensInfo($pKursTag)
  {
    $result = '';

    
    $hlverhtext = HLDispatcher::GetHinterlegungDialog(\HLDispatcher::HL_VERHALTEN);
    $hlverhtext->fields = array('detail_bemerkung_verhalten');
    $hlVerhaltenDialog = $hlverhtext->CreateDialog('hlverhalten_div', '.hlverhalten', 'Verhalten');

    $result .= '<div id="verhaltensinfo"><span>Verhaltenseinträge:</span><div id="zielVerhaltensinfo"></div></div>';

    $result .= '<input id="verhaltenseintrag_hidden" name="verhaltenseintrag_hidden" type="hidden" value="">' . "\n";

    $result .= "\n\n" . '<!-- Sub-Template für eine Zeile der Verhaltenseinträge -->'
        . '<script class="templateVerhaltensinfoRow" type="text/html">'
    
        . '<tr><td><#= verhalten #></td><td><#= teilnehmer #></td></tr>'
        . '</script>';

    $result .= "\n\n" . '<!-- Sub-Template für eine TN Zeile in den Verhaltenseintrags Details -->'
        . '<script class="templateDetailsVerhaltensinfoTnRow" type="text/html">'
    
        . '<li><input type="checkbox" value="<#= belid #>" id="kt-vhd-tnlist-<#= belid #>" <#= checked #>><label for="kt-vhd-tnlist-<#= belid #>"><#= tnname #></label></li>'
        . '</script>';

    $result .= "\n\n" . '<!-- Template für den Verhaltensinfo - Detail Bildschirm-->'
      . '<script class="templateDetailsVerhaltensinfo" type="text/html">'
      . '<div id="detailsVerhaltensinfo" class="editVerhalten">'
      . '<label>betroffene Teilnehmer:</label><div id="detail_teilnehmer_verhalten"><#= tnInfoDetailsRendered #></div>'
      
      . '<label>Bemerkung:</label><textarea rows="3" cols="44" name="detail_bemerkung_verhalten" id="detail_bemerkung_verhalten"><#= verhalten #></textarea>'
  
      . '<img class="hlverhalten" src="layout/button_hinterlegung.gif" alt="Hinterlegung Verhalten" title="Hinterlegung Verhalten">'
      . '<input id="kt-vhd-textold" type="hidden" name="textold" value="<#= verhalten #>">'
      . '</div></script>';

    $result .= $hlVerhaltenDialog;

    return $result;
  }

  
  public static function getBemerkungSlashLehrinhalt($pKurstag)
  {
    return
      '<div id="BemerkungSlashLehrinhalt">
        <label id="LabelBemerkungSlashLehrinhalt" for="TextAreaBemerkungSlashLehrinhalt">Bemerkung/Lehrinhalt:</label>
        <textarea id="TextAreaBemerkungSlashLehrinhalt" name="BemerkungSlashLehrinhalt" maxlength="1000">' . CleanOperations::cleanStringForHtml($pKurstag->bemerkungen) . '</textarea>
      </div>';
  }

  
  public static function updateKtKBuch($pKurstagOrig, $pVeraenderteEigenschaftenArray)
  {
    $dbwKursTage = new DBWorkKurseTage();
    $aktKT = $pKurstagOrig;
    $originalKT = $pKurstagOrig->copy();

    $changeFlag = false;
    $changedFields = array();

    foreach ($pVeraenderteEigenschaftenArray as $eigenschaft => $wert) {
      if ($aktKT->getVarValue($eigenschaft) != $wert) {
        $aktKT->setValue2Var($eigenschaft, $wert);
        $changeFlag = true;
        $changedFields[] = $eigenschaft;
      }
    }

    if ($changeFlag) {
      try {
        if (SessionOperations::isDmzBetrieb()) {
          

          $korrekturAPI = new KurskorrekturAPI();
          $korrekturAPI->correctKurstag($aktKT, $changedFields, $originalKT);
          
          $dbwKursTage->updateKurstag($aktKT, true);
        } else {
          
          $dbwKursTage->updateKurstag($aktKT, false);
        }
      } catch (Exception $aae) {
        Logger::logg('Eintrag ins Klassenbuch - folgende Exception ist aufgetreten: ' . $aae->getMessage() . ' [' . $aae->getTraceAsString() . ']', 200);
        
        $meldung = 'Der Eintrag im Klassenbuch konnte nicht gespeichert werden!';

        throw new Exception('<h2 class="headline" id="ktform_message">' . $meldung . '</h2>');
      }
    }

    
    return count($changedFields) > 0;
  }

  
  public static function getAnwesenheit4Belegung($pAnwesenheiten, $pBelegId)
  {
    foreach ($pAnwesenheiten as $anwesenheit) {
      if ($anwesenheit->abelegid == $pBelegId) {
        return $anwesenheit;
      }
    }

    return false;
  }

  
  public static function _sendAnwesenheitenToDMZ($pAnwesenheiten)
  {
    $anwesenheitsNodes = array();
    foreach ($pAnwesenheiten as $anwInfoZuAendern) {
      $xmlNode = XMLNode::getXMLNode($anwInfoZuAendern, 'anwesenheit', array('_eanws'));
      if (is_array($anwInfoZuAendern->_eanws) && !empty($anwInfoZuAendern->_eanws)) {
        $children = array();
        foreach ($anwInfoZuAendern->_eanws  as $extraAnw) {
          $children[] = XMLNode::getXMLNode($extraAnw, 'eanw', array());
        }
        $eanwsNode = new XMLNode('eanws');
        $eanwsNode->addChilds($children);
        $xmlNode->addChild($eanwsNode);
      }
      $anwesenheitsNodes[] = $xmlNode;
    }
    $anwesenheitenNode = new XMLNode('anwesenheiten');
    $anwesenheitenNode->addChilds($anwesenheitsNodes);

    $abgleichApi = new AbgleichAPI();

    return $abgleichApi->sendeNachricht(
      AbgleichAPI::ABGLEICH_ANWESENHEITEN,
      new Nutzlast($anwesenheitenNode)
    );
  }

  
  public static function _updateAnwesenheitenInDb($pAnwesenheiten, $pDmzBetrieb)
  {
    $newExtraAnwIdAry = array();
    if (!empty($pAnwesenheiten)) {
      $betroffeneKurse = array();
      $doHistorienKlick = false;

      $dbwHlGrundsys = new DBWorkHLGrundSys();
      if ($dbwHlGrundsys->getFeldWert('ANW_HISTORIE', '') != 'W') {
        $doHistorienKlick = true;
      }
      
      $dbwAnw2 = new DBWorkAnwesenheit2();

      $dbwAnwProtocol = new DBWorkAnwesenheitProtocol();
      $dbwAnwExtraProtocol = new DBWorkAnwesenheitExtraProtocol();

      foreach ($pAnwesenheiten as $anw) {

        
        $anwId = $dbwAnw2->insertOrUpdate($anw, $pDmzBetrieb);
        $anw->setId($anwId);
        
        
        $idDerAnwProtocol = -1;
        if (!$pDmzBetrieb) {
          $idDerAnwProtocol = $dbwAnwProtocol->protocolAnwesenheit($anw);
        }

        
        
        $newExtraAnwIdAry[$anwId] = $dbwAnw2->updateExtraAnws($anw, $pDmzBetrieb);

        
        if ($idDerAnwProtocol > 0 && $anw->hasExtraAnwesenheiten()) {
          $dbwAnwExtraProtocol->protocolAnwesenheitExtra($anw, $idDerAnwProtocol);
        }

        
        if ($doHistorienKlick) {
          $knr = $dbwAnw2->GetKnr($anw);
          if (!in_array($knr, $betroffeneKurse)) {
            $betroffeneKurse[] = $knr;
          }
        }
      } 

      if ($doHistorienKlick && count($betroffeneKurse) > 0) {
        $dbwKurstag = new DBWorkKurseTageWT();
        $dbwBelegung = new DBWorkBelegung();
        foreach ($betroffeneKurse as $knr) {
          $letzterKurstag = $dbwKurstag->getDatumLetzterKurstag($knr);
          $austrittSetzen = false;
          
          if (!DateTimeOperations::isDateTimeEmptyOrDefault($letzterKurstag)
              && DateTimeOperations::isDatebeforeNow($letzterKurstag)) {
            $austrittSetzen = true;
          }
          $dbwBelegung->setEintrittTeilReal($knr, $austrittSetzen);
        }
      }
      
      
      if ($dbwAnw2->isZweiteTabelleVerfuegbar()) {
        self::_updateAnwesenheitenInTableAnw($pAnwesenheiten, $pDmzBetrieb);
      }
    } 

    return $newExtraAnwIdAry;
  }

  

  
  public static function _updateAnwesenheitenInTableAnw($pAnwesenheiten, $pDmzBetrieb)
  {
    
    
    
    $dbwAnw = new DBWorkAnwesenheit();
    
    foreach ($pAnwesenheiten as $anw) {
      $anwId = $dbwAnw->insertOrUpdate($anw, $pDmzBetrieb);
      $anw->setId($anwId);
      
      $dbwAnw->updateExtraAnwsInTableAnwExtra($anw, $pDmzBetrieb); 
    } 
  }

  

  
  public static function anwesenheitenEintragen($pAnwesenheiten)
  {
    $retAry = array('success' => true, 'extraAnwIds' => array());
    if (empty($pAnwesenheiten)) {
      return $retAry;
    }

    $result = true;
    
    if (SessionOperations::isDmzBetrieb()) {
      $result = self::_sendAnwesenheitenToDMZ($pAnwesenheiten);

      if ($result->code == AbgleichApiResult::CODE_SUCCESS) {
        
        
        $newExtraAnwIds = self::_updateAnwesenheitenInDb($pAnwesenheiten, true);
      }
    } elseif (\SessionOperations::isReplikatNichtDMZPraesentation()) {
      
      
      $newExtraAnwIds = self::_updateAnwesenheitenInDb($pAnwesenheiten, true);
    }
    
    elseif (!SessionOperations::isReplikat()) {
      
      
      $newExtraAnwIds = self::_updateAnwesenheitenInDb($pAnwesenheiten, false);
    } else { 
      $result = false;
    }

    return array('success' => $result, 'extraAnwIds' => $newExtraAnwIds ?? array());
  }

  public static function unterrichtsmittelEintragen($pUnterrichtsmittel)
  {
    
    try {
      $dbwUntMittel = new DBWorkUnterrichtsmittel(1, true);
      $uMittelIdAry = array();
      if (SessionOperations::isDmzBetrieb()) {
        
        $korrekturAPI = new KurskorrekturAPI();
        $korrekturAPI->insertUnterrichtsmittel($pUnterrichtsmittel);

        
        $uMittelIdAry = $dbwUntMittel->insertUnterrichtsmittelArray($pUnterrichtsmittel, true);
      } else {
        
        $uMittelIdAry = $dbwUntMittel->insertUnterrichtsmittelArray($pUnterrichtsmittel);
      }
    } catch (Exception $aae) {
      Logger::logg('Eintrag der Unterrichtsmittel - folgende Exception ist aufgetreten: ' . $aae->getMessage() . ' [' . $aae->getTraceAsString() . ']', 200);

      throw new Exception('Unterrichtsmittel konnten nicht gespeichert werden!');
    }
    
    
    
    $eintragErfolgreich = true;
    foreach ($uMittelIdAry as $uMittelId) {
      if ($uMittelId <= 0) {
        $eintragErfolgreich = false;
        break;
      }
    }

    return $eintragErfolgreich;
    
  }

  

  
  public static function getFachAnwesenheiten4UnterkurseFromDB($pKursObjAry, $pTnr, $pVonDat, $pBisDat, $pIsAuswertFach)
  {
    
    $kursFachAnwesenheitAry = array();
    $fachAnwGesamtAry = array();

    
    
    

    


    
    


    

    $dbwBel = new DBWorkBelegung();
    $dbwAnwesenheit = new DBWorkAnwesenheit(1, true);
    
    
    foreach ($pKursObjAry as $kursNr => $kursTitel) {
      
      
      
      $belIds = $dbwBel->getBelegungsIdsbyKursTeilnNR($pTnr, $kursNr);
      if (count($belIds) > 0) {

            
        $belid4Unterkurs = $belIds[0];
        
        
        $kursFachAnwesenheitObj = new stdClass();
        $kursFachAnwesenheitObj->kursnr = $kursNr;
        $kursFachAnwesenheitObj->kurstitel = $kursTitel;
        

        $fachAnwesenheiten = $dbwAnwesenheit->getFachAnwesenheiten(
          $belid4Unterkurs,
          $kursNr,
          $pVonDat,
          $pBisDat,
          $pIsAuswertFach
        );

        $sumUe = 0;
        $sumAnwUe = 0;
        foreach ($fachAnwesenheiten as $fachAnwObj) {
          $sumUe += $fachAnwObj->ue;
          $sumAnwUe += $fachAnwObj->anwue;
        }
        $kursFachAnwesenheitObj->ueges = $sumUe;
        $kursFachAnwesenheitObj->anwueges = $sumAnwUe;
        $kursFachAnwesenheitObj->anwprozges = '0.00';
        if ($sumUe > 0) {
          $kursFachAnwesenheitObj->anwprozges = MathOperations::floatToString($sumAnwUe / $sumUe * 100);
        }
        $kursFachAnwesenheitObj->fachAnwAry = $fachAnwesenheiten;

        $fachAnwGesamtAry = self::updateFachAnwGesamtAry($fachAnwesenheiten, $fachAnwGesamtAry);


        
        
        $kursFachAnwesenheitAry[] = $kursFachAnwesenheitObj;
      } else {
        $msg = 'Belegungs Id zu Teilnehmer Nr. ' . $pTnr . ' und Kursnr. ' . $kursNr . ' konnte in der Datenbank nicht gefunden werden.  Evtl. '
                    . 'handelt es sich um einen abgeschlossenen Unterkurs, zu dem die Belegungsdaten nicht repliziert wurden. Bitte '
                    . 'replizieren Sie die Belegungsdaten erneut (Datengruppe 3). ';

        throw new UnexpectedValueException($msg);

        
           
           
      } 
    } 
        
        
        
       

    $kombiFachAnwObjekt = new stdClass();
    $kombiFachAnwObjekt->kursFachAnwAry = $kursFachAnwesenheitAry;
    $kombiFachAnwObjekt->fachAnwGesamtAry = $fachAnwGesamtAry;

    return $kombiFachAnwObjekt;
  }

  

  
  private static function updateFachAnwGesamtAry($pAry, $pGesamtAry)
  {
    $gesamtAry = $pGesamtAry;
    
    $gesamtCnt = count($pGesamtAry);
    $aryCnt = count($pAry);
    
    if ($aryCnt == 0) {
      return $gesamtAry;
    }
    
    
    
    $gesamtIdAry = array();
    if ($gesamtCnt == 0) {
      
      
      
      $gesamtAry = unserialize(serialize($pAry));
    } else {
      
      foreach ($gesamtAry as $gesamtObj) {
        $gesamtIdAry[] = $gesamtObj->fachId;
      }

      
      foreach ($pAry as $aryObj) {
        if (!in_array($aryObj->fachId, $gesamtIdAry)) {
          
          $gesamtAry[] = $aryObj;
        }
        
        else { 
          $position = SearchOperations::getArrayIndexbyfieldnameUpper($gesamtAry, 'fachid', $aryObj->fachId);
          $gesamtObj = $gesamtAry[$position];
          $gesamtObj->ue += $aryObj->ue;
          $gesamtObj->anwue += $aryObj->anwue;

          
        } 
      } 
       $gesamtObj->anwproz = MathOperations::floatToString($gesamtObj->anwue / $gesamtObj->ue * 100);
    } 
    
    
    
    usort($gesamtAry, array(__CLASS__, 'cmpFachAnwObjekte'));

    return $gesamtAry;
  }

  

  
  private function cmpFachAnwObjekte($pObj1, $pObj2)
  {
    
    return (strcmp($pObj1->fach, $pObj2->fach));
  }

  
  public static function getAnwesenheitenAndKurstage($pKursId, $pBelIds, $pVonDat, $pBisDat, $pIsAnwKontroll, $pAnwStati)
  {
    $KtAnwesenheitAry = array();
    if (SessionOperations::isDmzBetrieb()) {
      
      $KtAnwesenheitAry = self::_getKurstageAndAnwesenheitenByDMZ($pKursId, $pBelIds, $pVonDat, $pBisDat, $pIsAnwKontroll, $pAnwStati);
    

      


      
     
    }
    
    else {
      $dbwAnwesenheit = new DBWorkAnwesenheit(1, true);
      
      foreach ($pBelIds as $belId) {
        $KtAnwObj4TerminKalender = $dbwAnwesenheit->getKurstageAndAnwesenheiten4Belegung(
          $belId,
          $pVonDat,
          $pBisDat,
          $pIsAnwKontroll,
          $pAnwStati
        );
        
        
        if (count($KtAnwObj4TerminKalender) > 0) {
          $KtAnwesenheitAry[$belId] = $KtAnwObj4TerminKalender;
        }
      } 
    } 

    return $KtAnwesenheitAry;
  }

  

  
  public static function getAnwesenheitenAndKurstageFromDB($pBelIds, $pVonDat, $pBisDat, $pIsAnwKontroll, $pAnwStati)
  {
    $KtAnwesenheitAry = array();
    $dbwAnwesenheit = new DBWorkAnwesenheit(1, true);
    
    foreach ($pBelIds as $belId) {
      $KtAnwObj4TerminKalender = $dbwAnwesenheit->getKurstageAndAnwesenheiten4Belegung(
        $belId,
        $pVonDat,
        $pBisDat,
        $pIsAnwKontroll,
        $pAnwStati
      );
      
      
      
      $KtAnwesenheitAry[$belId] = $KtAnwObj4TerminKalender;
    } 

    return $KtAnwesenheitAry;
  }

  

  
  public static function getTNObjekte4KursfachAnwByDMZ($pKursId, $pBelIds, $pVonDat, $pBisDat, $pIsAuswertFach)
  {
    
    
    $abgleichAPI = new AbgleichAPI();
    if (!$abgleichAPI->isAktiviert() || !SessionOperations::isReplikat()) {
      throw new Exception('Fehlkonfiguration - soll Anwesenheits- u. Kurstagseinträge holen via DMZ holen, aber die DMZ ist '
              . 'nicht aktiviert');
    }
    
    
    $hauptKursAnfrage = new Anw4HauptKursAnfrage();
    $hauptKursAnfrage->knr = $pKursId;
    
    $hauptKursAnfrage->belegids = $pBelIds;
    
    
    $hauptKursAnfrage->datumvon = $pVonDat;
    $hauptKursAnfrage->datumbis = $pBisDat;
    $hauptKursAnfrage->isauswertfach = $pIsAuswertFach;

    
    
    
    $message = $hauptKursAnfrage->ToXml(array('belegids'), false, array(), 'anwesenheithauptkurse');
    
    if (is_array($hauptKursAnfrage->belegids) && count($hauptKursAnfrage->belegids) > 0) {
      $children = array();
      foreach ($hauptKursAnfrage->belegids  as $belegid) {
        
        $children[] = new XMLNode('belid', $belegid);
      }
      $belegidsNode = new XMLNode('belegids');
      $belegidsNode->addChilds($children);
      $message->addChild($belegidsNode);
    }
    try {
      
      
      $result = $abgleichAPI->sendeNachricht(
        AbgleichAPI::ABGLEICH_HAUPTUNTERKURSE,
        new Nutzlast($message)
      );
      
      return $result->reason;
    } catch (AbgleichApiException $aae) {
      Logger::logg('Anwesenheitseinträge für Haupt und Unterkurse von der DMZ anfordern - folgende Exception ist'
              . ' aufgetreten: ' . $aae->getMessage() . "\n" . ' [' . $aae->getTraceAsString() . ']', 201);
      
      throw $aae;
    }
  }

  

  
  private static function _getKurstageAndAnwesenheitenByDMZ($pKursId, $pBelIds, $pVonDat, $pBisDat, $pIsAnwKontroll, $pAnwStati)
  {
    
    
    $abgleichAPI = new AbgleichAPI();
    if (!$abgleichAPI->isAktiviert() || !SessionOperations::isReplikat()) {
      throw new Exception('Fehlkonfiguration - soll Anwesenheits- u. Kurstagseinträge holen via DMZ holen, aber die DMZ ist '
              . 'nicht aktiviert');
    }
    
    $terminKalAnfrage = new Anw4TerminKalAnfrage();
    $terminKalAnfrage->knr = $pKursId;
    $terminKalAnfrage->belegids = array();
    foreach ($pBelIds as $belId) {
      $terminKalAnfrage->belegids[] = $belId;
    }
    $terminKalAnfrage->datumvon = $pVonDat;
    $terminKalAnfrage->datumbis = $pBisDat;
    $terminKalAnfrage->isanwControl = $pIsAnwKontroll;
    $terminKalAnfrage->anwstati = array();
    foreach ($pAnwStati as $anwStatus) {
      $terminKalAnfrage->anwstati[] = $anwStatus;
    }
    
    
    $message = $terminKalAnfrage->ToXml(array('belegids', 'anwstati'), false, array(), 'terminkalender');
    
    if (is_array($terminKalAnfrage->belegids) && count($terminKalAnfrage->belegids) > 0) {
      $children = array();
      foreach ($terminKalAnfrage->belegids  as $belegid) {
        
        $children[] = new XMLNode('belid', $belegid);
      }
      $belegidsNode = new XMLNode('belegids');
      $belegidsNode->addChilds($children);
      $message->addChild($belegidsNode);
    }
    if (is_array($terminKalAnfrage->anwstati) && count($terminKalAnfrage->anwstati) > 0) {
      $children = array();
      foreach ($terminKalAnfrage->anwstati  as $status) {
        $children[] = new XMLNode('status', $status);
      }
      $anwstatiNode = new XMLNode('anwstati');
      $anwstatiNode->addChilds($children);
      $message->addChild($anwstatiNode);
    }
    try {
      
      
      $result = $abgleichAPI->sendeNachricht(
        AbgleichAPI::ABGLEICH_TERMINKALENDER,
        new Nutzlast($message)
      );
      
      return $result->reason;
    } catch (AbgleichApiException $aae) {
      Logger::logg('Anwesenheitseinträge für den Terminkalender von der DMZ anfordern - folgende Exception ist'
              . ' aufgetreten: ' . $aae->getMessage() . "\n" . ' [' . $aae->getTraceAsString() . ']', 201);
      
      throw $aae;
    }
  }

  
} 


class Anw4TerminKalAnfrage extends Datamodul
{
  public $knr = '';
  public $belegids = array();
  public $datumvon = '';
  public $datumbis = '';
  public $isanwControl = '';
  public $anwstati = array();
}

class Anw4HauptKursAnfrage extends Datamodul
{
  public $knr = '';
  public $belegids = array();
  public $datumvon = '';
  public $datumbis = '';
  public $isauswertfach = false;
}