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


class AnwHauptUnterKurseListe extends DruckListe
{
  
  private $_belIds;

  
  private $_showBemerkFach;
  
  private $_isAuswertFach;

  
  private $_gesamtbreite;
  private $_dbwKurse;
  
  private $_listFontSize;
  
  private $_tableheaderSize;
  
  private $_anwDist2RightMargin;
  private $_anwProzDist2RightMargin;
  private $_ueDist2RightMargin;
  
  private $_headerRightBeg;

  
  private $_title1 = ' ';

  
  private $_belAry4KursFachAnwAry = array();
  
  private $_hauptKurs;

  
  public function __construct($pSelnr, $pToolId)
  {
    
    
    
    
    
    
    $this->settings = new \webtools\drucklisten\DruckSheetSettings();
    $this->setUseSettings(false);
    $this->selnr = $pSelnr;
    $this->toolId = $pToolId;

    
    $this->dtop = new DateTimeOperations();
    $this->mop = new MathOperations();
    $this->htmlop = new HTMLOperations();
    $this->sprachSettings = SettingsFactory::getSettings('SprachSettingsObject');
    $this->kurstage = new webtools\drucklisten\Kurstage();
  }

  
  
  
  public function getListID()
  {
    return 26;
  }

  public function getListTyp()
  {
    return '24';
  }

  
  public function loadSettings()
  {
    
    $this->loadFactoryDefaults();
  }

  
  public function loadFactoryDefaults()
  {
    
    
    
    if (!isset($this->settings->druckbereich)) {
      $this->settings->druckbereich = new webtools\drucklisten\Druckbereich();
    }
    $this->settings->druckbereich->hochformat = 1; 
    
    $this->setTitle1();
  }

  public function setTitle1()
  {
    
    $this->_title1 = 'Anwesenheiten für Kurse und deren Hauptkurse';
  }

  
  public function _prepare($pKnr = '')
  {
    DruckSheet::_prepare($pKnr);
    
    
    $this->loadDialogSettingsFromPOST();
    $this->_dbwKurse = new DBWorkKurse(1, true);


    
    
    $this->setBelAry4KursFachAnwesenheiten();

    
    
    $this->spaltenbeginnary = array(6,  11,   13,  15,  62,  68,   80);
    $this->spaltenbreiteary = array(56,  51,   49,  47,   6,  12,   13);
    $endindex = count($this->spaltenbeginnary) - 1; 
    $this->_gesamtbreite = $this->spaltenbeginnary[$endindex] + $this->spaltenbreiteary[$endindex] - $this->spaltenbeginnary[0]; 

    $this->_tableheaderSize = 10.5;
    $this->_listFontSize = 8.5;
    
    
    $this->_anwProzDist2RightMargin = 9;
    $this->_anwDist2RightMargin = 10;
    $this->_ueDist2RightMargin = 5;

    $this->_headerRightBeg = 76;
  }

  
  public function getDruckbereichEnabled($optionName)
  {
    switch ($optionName) {
      case 'hochformat':
        return true;
    }

    return false;
  }

  
  protected function loadDialogSettingsFromPOST()
  {
    
    if (\PostOperations::isDefined('anwhauptunterkurseobj')) {
      $anwHauptUnterkurseObj = JsonOperations::getFromStringBase64(\PostOperations::getVarValue('anwhauptunterkurseobj'));
      
      SessionOperations::setVarValueWTIntern('anwhauptunterkurseobj_' . $this->toolId, $anwHauptUnterkurseObj);
    } else {  
      $anwHauptUnterkurseObj = SessionOperations::getVarValueWTIntern('anwhauptunterkurseobj_' . $this->toolId);
    }

    
    $this->kurstage->von = trim($anwHauptUnterkurseObj->ktVon);
    $this->kurstage->bis = trim($anwHauptUnterkurseObj->ktBis);

    
    $this->_showBemerkFach = $anwHauptUnterkurseObj->isBemerkFach == 1;
    
    $this->_isAuswertFach = $anwHauptUnterkurseObj->isAuswertFach == 1;
    
    
    
    $this->_belIds = explode(':', $anwHauptUnterkurseObj->belIds);
  }

  
  public function setKurstagary($dummyParam)
  {
  }

  
  public function setBelAry4KursFachAnwesenheiten()
  {
    $this->_belAry4KursFachAnwAry = array();

    $allgsettings = AllgSettingsAPI::getAllgSettings();
    $vonDat = '';
    $bisDat = '';
    
    
    
    if (isset($this->kurstage->von, $this->kurstage->bis)) {
      $vonDat = $this->kurstage->von;
      $bisDat = $this->kurstage->bis;
    }

    
    
    
    $unterKursAry = array();
    
    $isUnterkurs = $this->_dbwKurse->isUnterkurs($this->selnr);
    
    if ($isUnterkurs) {
      $this->_hauptKurs = $this->_dbwKurse->getKursgruppenNrAndTitel($this->selnr);
      
      
      

      if (count($this->_hauptKurs) == 0) {
        Logger::logg('Zum Kurs ' . $this->selnr . ' wurde kein Hauptkurs gefunden, obwohl er in der Datenbank vorhanden sein sollte. Bitte '
                     . 'Tabelle kursgruppe in der DB kontrollieren', 205);
        
        
        return;
      }

      if (is_array($this->_hauptKurs)) {
        $hauptKnr = key($this->_hauptKurs);
        
        
        $unterKursAry = $this->_dbwKurse->getTitelDerUnterKurse($hauptKnr);
      }
      
    }
    
    if (!is_array($this->_hauptKurs)) {
      $aktkurs = $this->_dbwKurse->getKurs($this->selnr);
      $unterKursAry = array($this->selnr => $aktkurs->kurzbez);
      $this->_hauptKurs = $unterKursAry;
    }


    
    
    if (SessionOperations::isReplikat() && !$allgsettings->dmzEnabled) {
      
      
      $dbwTeiln = new DBWorkTeilnehmer();
      foreach ($this->_belIds as $belId) {
        
        

        
        
        $teilnehmer = $dbwTeiln->getTeilnehmByBelegung($belId);
        $tnObj4KursfachAnw = new stdClass();
        $tnObj4KursfachAnw->tnr = $teilnehmer->id;
        $tnObj4KursfachAnw->namevorname = $teilnehmer->namevorname;
        $kombiFachAnwObj = NewAnwesenheitAPI::getFachAnwesenheiten4UnterkurseFromDB($unterKursAry, $teilnehmer->id, $vonDat, $bisDat, $this->_isAuswertFach);

        
        
        $tnObj4KursfachAnw->kursFachAnwAry = $kombiFachAnwObj->kursFachAnwAry;
        $tnObj4KursfachAnw->fachAnwGesamtAry = $kombiFachAnwObj->fachAnwGesamtAry;

        
        
        $this->_belAry4KursFachAnwAry[$belId] = $tnObj4KursfachAnw;
      }
    }
    
    
    else {
      
      
      $tmp = NewAnwesenheitAPI::getTNObjekte4KursfachAnwByDMZ($this->selnr, $this->_belIds, $vonDat, $bisDat, $this->_isAuswertFach);
      $this->_belAry4KursFachAnwAry = JsonOperations::getFromString($tmp);

      
    }
  }

  
  public function create($pDozId = -1, $pPrintAllowed4User = false)
  {
    $this->setDozId($pDozId);
    
    
    
    if (!empty($this->selnr)) {
      $selnrary = explode(':', $this->selnr);
      
      
      if (!$this->checkDozTable($selnrary) || !$pPrintAllowed4User) {
        $this->ausgabeFault($this->getWarntext($pPrintAllowed4User));
      } else {
        
        $this->pdf = $this->__initPDF(); 
        try {
          
          
          $this->_prepare();
          
          
          
          $belAry4FachCnt = count($this->_belAry4KursFachAnwAry);
          if ($belAry4FachCnt == 0) {
            $warning = 'Der Hauptkurs zum Unterkurs ' . $this->selnr . ' wurde nicht in der Datenbank gefunden. Bitte überprüfen Sie Ihre Semestereinstellungen.';
            $this->ausgabeFault($warning);
          }
          
          else {
            
            
            $this->pdf->AddPage();
            $this->_createContent();
            $this->footer();
            $this->pdf->Output('', $this->getOutputName());
          }
        }
        
        catch (UnexpectedValueException $unExpEx) {
          Logger::logg($unExpEx->getMessage(), 220);

          
          $faultMess = 'Beim Ermitteln der Belegungen f&uuml;r die Anwesenheitsliste für Kurse und deren Hauptkurse ist ein Fehler aufgetreten.';
          $this->ausgabeFault($faultMess);
        } catch (Exception $ex) {
          $faultMess = 'Beim Anfordern der Eintr&auml;ge f&uuml;r die Anwesenheit für Kurse und deren Hauptkurse von der DMZ ist ein Fehler aufgetreten';

          $this->ausgabeFault($faultMess);
        }
      }
    }
  }

  
  public function _createHeader($pKurs = '')
  {
    $this->_createHeaderTop('Stand: ');

    
    $von = ($this->kurstage->von != '' ? ' von ' . $this->kurstage->von : '');
    $bis = ($this->kurstage->bis != '' ? ' bis ' . $this->kurstage->bis : '');
    $this->pdf->CellAtX('7%', $this->_title1 . $von . $bis, 'B', '', 10.3);
    $this->pdf->CellAtX($this->_headerRightBeg . '%', 'Seite:         ' . $this->pdf->PageNo());
    $maxwidth = $this->getWidth4Title();
    if ($this->pdf->GetStringWidth($this->_title1) > $maxwidth) {
      $this->pdf->ln(8);
    }
    $this->pdf->ln(9);
  }

  
  protected function _createHeaderTop($pDatumsText)
  {
    $allgsettings = AllgSettingsAPI::getAllgSettings();
    
    $this->pdf->ln();
    
    $this->pdf->CellAtX('7%', StringOperations::html_entity_decode($allgsettings->vhsname), 'B', '', 14.3);
    $this->pdf->CellAtX($this->_headerRightBeg . '%', $pDatumsText . $this->dtop->getDateNow());
    $this->pdf->ln(8);
  }

  
  protected function _printDruckListe($pKurs = '')
  {
    
    $this->pdf->CellAtX($this->spaltenbeginnary[0] . '%', 'Hauptkurs / TN / Unterkurs', 'B', '', $this->_tableheaderSize, $this->spaltenbreiteary[0] . '%', 0, $this->height);
    $this->pdf->CellAtX(($this->spaltenbeginnary[4] + 1.5) . '%', 'UE', 'B', '', $this->_tableheaderSize, $this->spaltenbreiteary[4] . '%', 0, $this->height);
    $this->pdf->CellAtX($this->spaltenbeginnary[5] . '%', 'Anwesend', 'B', '', $this->_tableheaderSize, $this->spaltenbreiteary[5] . '%', 0, $this->height);
    $this->pdf->CellAtX($this->spaltenbeginnary[6] . '%', 'Anw. in %', 'B', '', $this->_tableheaderSize, $this->spaltenbreiteary[6] . '%', 0, $this->height);
    $this->pdf->ln($this->height);
    
    $this->pdf->CellAtX($this->spaltenbeginnary[0] . '%', '', '', '', '', $this->_gesamtbreite . '%', 'B', 2);
    
    $this->pdf->ln(4);

    
    
    foreach ($this->_hauptKurs as $key => $val) {
      $hauptKnr = $key;
      $hauptKursTitel = $val;
    }

    $this->pdf->CellAtX($this->spaltenbeginnary[0] . '%', $hauptKnr . ' ' . $hauptKursTitel, '', '', $this->_listFontSize, $this->_gesamtbreite . '%', 0, $this->height);
    $this->pdf->ln($this->height + 2);

    
    foreach ($this->_belAry4KursFachAnwAry as $tnObj4KursfachAnw) {
      if (count($tnObj4KursfachAnw->kursFachAnwAry) > 0) {
        $anwProzGes = MathOperations::floatToString($tnObj4KursfachAnw->anwprozgeshaupt);
        
        $this->pdf->CellAtX($this->spaltenbeginnary[1] . '%', $tnObj4KursfachAnw->namevorname, '', '', $this->_listFontSize, $this->spaltenbreiteary[1] . '%', 0, $this->height);
        $this->pdf->CellAtX($this->spaltenbeginnary[6] . '%', $anwProzGes . ' %', '', 'R', $this->_listFontSize, $this->_anwProzDist2RightMargin . '%', 0, $this->height);

        
        $this->pdf->ln($this->height + 2);
        
        foreach ($tnObj4KursfachAnw->kursFachAnwAry as $kursFachAnwesenheit) {
          

          $this->pdf->CellAtX(
            $this->spaltenbeginnary[2] . '%',
            $kursFachAnwesenheit->kursnr . ' ' . $kursFachAnwesenheit->kurstitel,
            '',
            '',
            $this->_listFontSize,
            $this->spaltenbreiteary[2] . '%',
            0,
            $this->height
          );

          $ues = MathOperations::floatToString($kursFachAnwesenheit->ueges);
          $this->pdf->CellAtX($this->spaltenbeginnary[4] . '%', $ues, '', 'R', $this->_listFontSize, $this->_ueDist2RightMargin . '%', 0, $this->height);

          
          $anwUes = MathOperations::floatToString($kursFachAnwesenheit->anwueges);
          $this->pdf->CellAtX($this->spaltenbeginnary[5] . '%', $anwUes, '', 'R', $this->_listFontSize, $this->_anwDist2RightMargin . '%', 0, $this->height);

          $anwProz = MathOperations::floatToString($kursFachAnwesenheit->anwprozges);
          $this->pdf->CellAtX($this->spaltenbeginnary[6] . '%', $anwProz . ' %', '', 'R', $this->_listFontSize, $this->_anwProzDist2RightMargin . '%', 0, $this->height);
          $this->pdf->ln($this->height);

          
          foreach ($kursFachAnwesenheit->fachAnwAry as $fachAnwObj) {
            $this->_printKursCell($fachAnwObj);
          }
        }
      } else {
        
        $this->pdf->CellAtX($this->spaltenbeginnary[1] . '%', $tnObj4KursfachAnw->namevorname, '', '', $this->_listFontSize, $this->spaltenbreiteary[1] . '%', 0, $this->height);
        $this->pdf->CellAtX($this->spaltenbeginnary[3] . '%', '', '', 'R', $this->_listFontSize, $this->_anwProzDist2RightMargin . '%', 0, $this->height);
        
        $ues = MathOperations::floatToString($tnObj4KursfachAnw->uegeshaupt);
        $this->pdf->CellAtX($this->spaltenbeginnary[4] . '%', $ues, '', 'R', $this->_listFontSize, $this->_ueDist2RightMargin . '%', 0, $this->height);

        
        $anwUes = MathOperations::floatToString($tnObj4KursfachAnw->anwuegeshaupt);
        $this->pdf->CellAtX($this->spaltenbeginnary[5] . '%', $anwUes, '', 'R', $this->_listFontSize, $this->_anwDist2RightMargin . '%', 0, $this->height);

        $anwProz = MathOperations::floatToString($tnObj4KursfachAnw->anwprozgeshaupt);
        $this->pdf->CellAtX($this->spaltenbeginnary[6] . '%', $anwProz . ' %', '', 'R', $this->_listFontSize, $this->_anwProzDist2RightMargin . '%', 0, $this->height);
        $this->pdf->ln($this->height);
        
        
      }

      
      

      foreach ($tnObj4KursfachAnw->fachAnwGesamtAry as $fachAnwGesObj) {
        $this->_printKursCell($fachAnwGesObj, true);
      }
    }

    $this->pdf->ln(3);
  }

  
  protected function _printKursCell($pFachAnwObj, $pShiftBack = false)
  {
    
    $spaltenIndex4Fach = $pShiftBack ? 2 : 3;

    
    $this->pdf->CellAtX(
      $this->spaltenbeginnary[$spaltenIndex4Fach] . '%',
      $pFachAnwObj->fach,
      '',
      '',
      $this->_listFontSize,
      $this->spaltenbreiteary[$spaltenIndex4Fach] . '%',
      0,
      $this->height
    );

    
    $ues = MathOperations::floatToString($pFachAnwObj->ue);
    $this->pdf->CellAtX($this->spaltenbeginnary[4] . '%', $ues, '', 'R', $this->_listFontSize, $this->_ueDist2RightMargin . '%', 0, $this->height);

    
    $anwUes = MathOperations::floatToString($pFachAnwObj->anwue);
    $this->pdf->CellAtX($this->spaltenbeginnary[5] . '%', $anwUes, '', 'R', $this->_listFontSize, $this->_anwDist2RightMargin . '%', 0, $this->height);

    $anwProz = MathOperations::floatToString($pFachAnwObj->anwproz);
    $this->pdf->CellAtX($this->spaltenbeginnary[6] . '%', $anwProz . ' %', '', 'R', $this->_listFontSize, $this->_anwProzDist2RightMargin . '%', 0, $this->height);
    $this->pdf->ln($this->height);
  }
}