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


class FachVertraegeDoz
{
  private $_cssPrefix = 'fachvertraege_';

  public function render($data, $status)
  {
    $result = $this->_renderStatusMessage($status);
    $result .= $this->_renderButtonsOben($data);
    $result .= $this->_renderKurse($data);
    $result .= $this->_renderButtonsUnten($data);

    return $result;
  }

  private function _renderStatusMessage($status)
  {
    $result = '';
    if (isset($status['vertragNichtGefunden']) && $status['vertragNichtGefunden']) {
      $result .= HTMLOperations::getAlertBox('Der PDF-Ausdruck des Vertrages wurde nicht gefunden', 'Vertrag nicht gefunden.');
    }
    if (isset($status['errorHolenInfosPerDmz']) && $status['errorHolenInfosPerDmz']) {
      $result .= HTMLOperations::getAlertBox('Die Vertragsinformationen konnten nicht ausgelesen werden.<br>Bitte versuchen Sie es erneut, oder wenden sich an die Einrichtung.', 'Vertragsdaten konnten nicht ausgelesen werden');
    }
    if (isset($status['errorBeschaefitungsverhaeltnisInkonsistent']) && $status['errorBeschaefitungsverhaeltnisInkonsistent']) {
      $result .= HTMLOperations::getAlertBox('Die Vertragsinformationen konnten nicht ausgelesen werden.<br>Bitte lassen Sie von einem Mitarbeiter der BFI die Zeiträume Ihrer Beschäftigungsverhältnisse prüfen.', 'Vertragsdaten konnten nicht ausgelesen werden');
    }

    if (isset($status['successReklamation']) && $status['successReklamation']) {
      $result .= HTMLOperations::getSuccessBox(
        '<div class="successbox_text">Ihre Reklamation wurde erfolgreich abgesendet.</div>',
        'Verträge reklamiert'
      );
    }
    if (isset($status['errorReklamationDmz']) && $status['errorReklamationDmz']) {
      $result .= HTMLOperations::getAlertBox(
        '<div class="alertbox_text">Beim Bearbeiten Ihrer Reklamation ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.</div>',
        'Fehler beim Versenden der Reklamation'
      );
    }
    if (isset($status['errorReklamationEmail']) && $status['errorReklamationEmail']) {
      $result .= HTMLOperations::getWarningBox(
        '<div class="warningbox_text">Ihre Reklamation wurde erfolgreich Abgesendet und eingetragen, jedoch konnte der zuständige Mitarbeiter nicht darüber informiert werden.<br>Bitte wenden Sie sich an die Einrichtung.</div>',
        'Fehler beim Versenden der Reklamation'
      );
    }
    if (isset($status['successAkzeptieren']) && $status['successAkzeptieren']) {
      $result .= HTMLOperations::getSuccessBox(
        '<div class="successbox_text">Der Vertrag/die Verträge wurden erfolgreich akzeptiert.</div>',
        'Verträge akzeptiert'
      );
    }
    if (isset($status['errorAkzeptierenDmz']) && $status['errorAkzeptierenDmz']) {
      $result .= HTMLOperations::getAlertBox(
        'Beim Akzeptieren der Verträge ist ein Fehler aufgetreten.<br>Bitte versuchen Sie es erneut, oder wenden sich an die Einrichtung.',
        'Fehler beim Akzeptieren der Verträge'
      );
    }

    return $result;
  }

  private function _renderKurse($dataAry)
  {
    $result = '<ul class="' . $this->_cssPrefix . 'kurse">';
    if (count($dataAry) > 0) {
      foreach ($dataAry as $data) {
        $result .= '<li class="' . $this->_cssPrefix . 'kursblock"">';
        $result .= $this->_renderKurs($data->kurs, $data->deputate);
        $result .= $this->_renderDeputatsBlock($data->deputate);
        $result .= '</li>';
      }
    } else {
      $result .= '<li>';
      $result .= 'Es wurden keine Deputats-Verträge für Sie gefunden.';
      $result .= '</li>';
    }
    $result .= '</ul>';

    return $result;
  }

  private function _renderKurs($kurs, $deputate)
  {
    $showCheckbox = $this->_showCheckBox4Kurs($deputate);

    return '<div class="' . $this->_cssPrefix . 'kurs">'
           . '<span class="' . $this->_cssPrefix . 'kurs_aufklappen"></span>'
           . ($showCheckbox ? '<span class="' . $this->_cssPrefix . 'kurs_checkbox"><input type="checkbox" class="' . $this->_cssPrefix . 'kurs_setze_deputate"></span>' : '')
           . '<span class="' . $this->_cssPrefix . 'kurs_nr">' . CleanOperations::cleanStringForHtml($kurs->id) . '</span>'
           . '<span class="' . $this->_cssPrefix . 'kurs_kurzbez">' . CleanOperations::cleanStringForHtml($kurs->kurzbez) . '</span>'
           . '</div>';
  }

  private function _renderDeputatsBlock($deputate)
  {
    $result = '<ul class="' . $this->_cssPrefix . 'deputate">';
    if (count($deputate) > 0) {
      foreach ($deputate as $deputat) {
        $result .= '<li>';
        $result .= $this->_renderDeputatsinfos($deputat);
        $result .= '</li>';
      }
    } else { 
      $result .= '<li>';
      $result .= 'Es wurden keine Deputatsdaten für Sie gefunden.';
      $result .= '</li>';
    }
    $result .= '</ul>';

    return $result;
  }

  private function _renderDeputatsinfos($deputat)
  {
    $status = $deputat->getVertragStatus();
    $linkVertragsdruck = 'usertools.php?tool_id=39&toolsection_id=494&action=printVertrag&deputat_id=' . CleanOperations::cleanInt($deputat->id);

    $datum = DateTimeOperations::getValidDateString($deputat->druckdat);

    return '<div class="' . $this->_cssPrefix . 'deputat">'
           . ($this->_showCheckBox4Deputat($deputat) ? '<span class="' . $this->_cssPrefix . 'deputat_markieren"><input type="checkbox" class="' . $this->_cssPrefix . 'deputat_checkbox" id="' . $this->_cssPrefix . 'deputat_checkbox_' . CleanOperations::cleanInt($deputat->id) . '"></span>' : '')
           . '<span class="' . $this->_cssPrefix . 'deputat_titel"><a href="' . $linkVertragsdruck . '">' . $deputat->titel . '</a></span>'
           . (!DateTimeOperations::isDateTimeDefault($datum) ? '<span class="' . $this->_cssPrefix . 'deputat_druckdat">' . DateTimeOperations::getValidDateString($deputat->druckdat) . '</span>' : '')
           . '<span class="' . $this->_cssPrefix . 'deputat_status">' . $this->_getStatusText($status) . '</span>'
           . '</div>';
  }

  private function _showCheckBox4Deputat($deputat)
  {
    $status = $deputat->getVertragStatus();

    return ($status == Deputat::VERTRAG_UNBEARBEITET);
  }

  private function _showCheckBox4Kurs($deputateImKurs)
  {
    foreach ($deputateImKurs as $deputat) {
      if ($this->_showCheckBox4Deputat($deputat)) {
        return true;
      }
    }

    return false;
  }

  private function _getStatusText($pVertragStatus)
  {
    switch ($pVertragStatus) {
      default:
      case Deputat::VERTRAG_UNBEARBEITET:
        return 'unbearbeitet';
      case Deputat::VERTRAG_AKZEPTIERT:
        return 'akzeptiert';
      case Deputat::VERTRAG_REKLAMIERT:
        return 'reklamiert';
    }
  }

  private function _renderButtonsOben($pData)
  {
    $buttons = HTMLOperations::createButtonSpan('alles anzeigen', 'alle Verträge ausklappen', $this->_cssPrefix . 'ausklappen', '', 'images/anmclose.gif');
    
    $buttons .= HTMLOperations::createButtonSpan('Kursnummer', 'Sortierung der Verträge nach Kursnummer', $this->_cssPrefix . 'sort_kurs_nr sortAb', '', 'images/asc.gif');
    $buttons .= HTMLOperations::createButtonSpan('Kurstitel', 'Sortierung der Verträge nach Kurstitel', $this->_cssPrefix . 'sort_kurs_titel sortAuf', '', 'images/desc.gif');

    $buttons .= HTMLOperations::createButtonSpan('Datum', 'Sortierung der Verträge nach Datum', $this->_cssPrefix . 'sort_datum sortAb', '', 'images/asc.gif');
    $buttons .= HTMLOperations::createButtonSpan('Status', 'Sortierung der Verträge nach Status', $this->_cssPrefix . 'sort_status sortAb', '', 'images/asc.gif');

    return '<div class="' . $this->_cssPrefix . 'buttons">'
           . $buttons
           . '</div>';
  }

  private function _renderButtonsUnten($pData)
  {
    $buttons = HTMLOperations::createButtonSpan('Reklamieren', 'Die ausgewählten Verträge Reklamieren', $this->_cssPrefix . 'reklamieren');
    $buttons .= HTMLOperations::createButtonSpan('Akzeptieren', 'Die ausgewählten Verträge Akzeptieren', $this->_cssPrefix . 'akzeptieren');

    return '<div class="' . $this->_cssPrefix . 'buttons">'
           . $buttons
           . '</div>';
  }
}