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


class ToolFirmaMa extends ToolBase
{
  private $_dbwBelegung;
  private $_user;

  public function __construct()
  {
    parent::__construct();
    $this->toolTitle = 'angemeldete Mitarbeiter';

    
    $dbwbelegung = new DBWorkBelegung();
    $dbwbelegung->newSearch();


    
    if ($this->toolSettings->useTool21Semester) {
      $tool21Settings = ToolSettingsAPI::getToolSettings(21);
      $semester = $tool21Settings->semlist;
      $keineAusgefallenenKurse = $tool21Settings->keineAusgefallenenKurse;
    } else {
      $semester = $this->toolSettings->semlist;
      $keineAusgefallenenKurse = $this->toolSettings->keineAusgefallenenKurse;
    }


    $dbwbelegung->fromobject->kurs->semester = $semester;
    $dbwbelegung->toobject->kurs->semester = '';
    $dbwbelegung->dbwkurse->justNoAusfall = $keineAusgefallenenKurse;
    
    $dbwbelegung->orderby = $this->toolSettings->sorttn;
    $dbwbelegung->orderbyasc = $this->toolSettings->sorttnasc;
    $this->_dbwBelegung = $dbwbelegung;
    $this->_user = SessionOperations::getCurrentWebToolsUser();
  }

  
  public function init($pPageId)
  {
    switch ($pPageId) {
      default:
      case 314: 
        $page = $this->_handleMitarbeiterUebersicht();
        break;
      case 481:
        $page = $this->_handleNotenEinesMitarbeiters($pPageId);
        break;
    }
    if ($page == null) {
      throw new Exception('ungültige PageId');
    }
    $this->currentPage = $page;
  }

  
  private function _handleMitarbeiterUebersicht()
  {
    $dbwteilnehmer = new DBWorkTeilnehmer(1, true);
    
    $belegungAry = $this->_dbwBelegung->getBelegungenbyTeilnehmerNR($this->_user->tnr);

    
    $data = array();

    $tnStatus = $this->toolSettings->tnstatus;
    if ($this->toolSettings->tnstatus == '') {
      $tnStatus = '-ATP';
    }
    $tnStatus = str_replace('-', ' ', $tnStatus);
    $tnStatus = StringOperations::convertArray2InList(\StringOperations::str_split($tnStatus));
    if (StringOperations::strpos($tnStatus, 'A') !== false) {
      $tnStatus .= ", ' ', ''";
    }

    foreach ($belegungAry as $belegung) {
      
      
      $mitarbeiterKursAry = $dbwteilnehmer->getTeilnehmerByFirmaKurs($this->_user->tnr, $belegung->knr, false, $tnStatus);

      foreach ($mitarbeiterKursAry as $mitarbeiter) {
        if (!isset($data[$mitarbeiter->id])) {
          $data[$mitarbeiter->id] = array('teilnehmer' => $mitarbeiter, 'belegungen' => array());
        }
        $data[$mitarbeiter->id]['belegungen'][] = $belegung;
      }
    }

    
    
    usort($data, array('ToolFirmaMa', '_sortData'));
    
    $pageLinks['mitarbeiterkurse'] = \SecurityOperations::privilegAllowedCurrentUser($this->getToolId(), '314.0.1');
    if (\SecurityOperations::privilegAllowedCurrentUser($this->getToolId(), '314.0.3') == 2) {
      $pageLinks['mitarbeiternoten'] = $this->getUrlParamsForFile(array('toolsection_id' => 481));
    }

    
    if (\SecurityOperations::privilegAllowedCurrentUser($this->getToolId(), '314.0.2') == 2
       && SecurityOperations::checkToolAccess(SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_KURSUEBERSICHT_FA, 336)) {
      $pageLinks['details'] = $this->getUrlParamsForFile(array('toolsection_id' => 336, 'tool_id' => \ToolsAPI::TOOL_KURSUEBERSICHT_FA)); 
    }


    
    if (DBWorkBASysSettings::isBlak()) {
      $page = new PageFaMitarbeiterUebersichtBLAK($this, $data);
    } else {
      $page = new PageFaMitarbeiterUebersicht($this, $data);
    }


    $page->setLinks($pageLinks);

    return $page;
  }

  
  private function _sortData($dataA, $dataB)
  {
    
    if ($this->toolSettings->sorttnasc) {
      $groesser = 1;
      $kleiner = -1;
    }
    
    else {
      $groesser = -1;
      $kleiner = 1;
    }

    $isABigger = strcmp($dataA['teilnehmer']->name, $dataB['teilnehmer']->name);
    if ($isABigger > 0) {
      return $groesser;
    } elseif ($isABigger < 0) {
      return $kleiner;
    }
    
    else {
      $isABigger = strcmp($dataA['teilnehmer']->vorname, $dataB['teilnehmer']->vorname);
      if ($isABigger > 0) {
        return $groesser;
      } elseif ($isABigger < 0) {
        return $kleiner;
      } else {
        return 0;
      }
    }
  }

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

  private function _handleNotenEinesMitarbeiters($pPageId)
  {
    $tnr = GetOperations::getVarValue('tnr');
    $firmenTn = SessionOperations::getCurrentWebToolsTeilnehmer();

    
    $this->_dbwBelegung->fromobject->firma = $firmenTn->id;
    $tnStatus = $this->toolSettings->tnstatus;
    if ($this->toolSettings->tnstatus == '') {
      $tnStatus = 'ATP';
    }
    $tnStatus = \StringOperations::str_split($tnStatus);
    if (in_array('A', $tnStatus)) {
      array_push($tnStatus, '', ' ');
    }
    $belegungenDesMitarbeiters = $this->_dbwBelegung->getBelegungenbyTeilnehmerNR($tnr, $tnStatus);

    
    $belegungIds = ArrayOperations::mapAttribut($belegungenDesMitarbeiters, 'id');
    $kursnummern = $this->_getKursnummernFromBelegungen($belegungenDesMitarbeiters);

    $dbwTnFach = new DBWorkTNFach(1, true);
    $dbwTnNoten = new DBWorkTNNoten(1, true);
    $dbwKursFach = new DBWorkKursFach(1, true);

    $data = new stdClass();
    $data->belegungen = $belegungenDesMitarbeiters;
    $data->tnFaecher = $dbwTnFach->getTNFachByBelIds($belegungIds);
    $data->tnNoten = $dbwTnNoten->getTNNotenByBelIds($belegungIds);
    $data->kursFach = $dbwKursFach->getFaecherByKursnummern($kursnummern);
    $data->backLink = ToolsAPI::getLastHistoryEntry();
    if (count($belegungenDesMitarbeiters) > 0) {
      $data->teilnehmer = $belegungenDesMitarbeiters[0]->teilnehmer;
    } else { 
      $dbwTeilnehmer = new DBWorkTeilnehmer(1, true);
      $data->teilnehmer = $dbwTeilnehmer->getTeilnehm($tnr);
    }

    $data->ohneNotenloseFaecher = $this->toolSettings->notenOhneNotenloseFaecher;
    $data->ohneFaecherloseBelegungen = $this->toolSettings->notenOhneFaecherloseBelegungen;

    
    if ($this->toolSettings->notenOhneEinzelnoten) {
      $presenter = new NotenUebersichtZuTnEinfach();
    } else {
      
      $presenter = new NotenUebersichtZuTn();
    }

    return new PageFaKurseNoten($this, $pPageId, $data, $presenter);
  }

  
  private function _getKursnummernFromBelegungen($pBelegungen)
  {
    return array_map(function($pBelegung) {
      return $pBelegung->kurs->id;
    }, $pBelegungen);
  }
}

class PageFaMitarbeiterUebersicht extends PageBaseWT
{
  private $_data;

  public function __construct($pTool, $pData)
  {
    parent::__construct('Mitarbeiter', 305, $pTool);
    $this->_data = $pData;
  }

  
  public function getContentHeader()
  {
    return 'angemeldete Mitarbeiter:';
  }

  
  public function getSpecialJS()
  {
    $JSFile = 'js/FATool/mitarbeiteruebersicht.js';

    return array($JSFile);
  }

  
  public function getSpecialCss()
  {
    $cssAry = parent::getSpecialCss();
    $cssAry[] = './css/toolMaUebersicht.css';

    return $cssAry;
  }

  
  public function getContent()
  {
    $result = '';
    $result .= '<div>';

    if (count($this->_data) === 0) {
      $result .= $this->getNoDataMessageDefault(4);
    } else {
      
      foreach ($this->_data as $zeile => $mitarbeiterKurseAry) {
        
        $result .= '<div class="teilnehmer_div';
        if ($zeile % 2 == 0) { 
          $result .= ' farbe_sicht_erstezeile ';
        }
        $result .= '">';

        $showMitarbeiterKurse = isset($this->links['mitarbeiterkurse']) && $this->links['mitarbeiterkurse'];
        if ($showMitarbeiterKurse) {
          $result .= '<img src="images/anmclose.gif" class="showKurse4Firmenmitarbeiter">';
        } else {
          $result .= '&nbsp;';
        }
        $result .= '<span class="text_main_menu teilnehmer_span">';

        $result .= $this->showMitarbeiterInfo($mitarbeiterKurseAry['teilnehmer']);
        $result .= '</span>';


        $result .= '<span class="anzahl_kurse">';
        $result .= ' Anzahl Seminare: <span class="bold">' . count($mitarbeiterKurseAry['belegungen']) . '</span>';
        $result .= '</span>';

        if (isset($this->links['mitarbeiternoten']) && $this->links['mitarbeiternoten'] != '') {
          $result .= '<span class="mitarbeiter_noten">';
          $result .= ' <a href="' . CleanOperations::cleanStringForHtml($this->links['mitarbeiternoten']) . '&tnr=' . CleanOperations::cleanInt($mitarbeiterKurseAry['teilnehmer']->id) . '">'
                    . '<img src="images/noten.gif" class="firmenmitarbeiter_noten" title="Noten des Mitarbeiters" alt="Noten des Mitarbeiters" height="16" width="16">'
                    . '</a>';
          $result .= '</span>';
        }

        if ($showMitarbeiterKurse) {
          
          $result .= $this->_getMitarbeiterKurseDiv($mitarbeiterKurseAry);
        }
        $result .= '</div>'; 
      }
    }
    $result .= '</div>'; 

    return $result;
  }

  
  protected function _getMitarbeiterKurseDiv($mitarbeiterKurseAry)
  {
    $result = '';
    $result .= '<div class="kurse_div">' . BR_WT;
    foreach ($mitarbeiterKurseAry['belegungen'] as $belegung) {
      $result .= '<div class="einzelkurs">';

      
      
      $result .= $this->getBelegungsSpan($belegung, $mitarbeiterKurseAry['teilnehmer']->id);

      $result .= '</div>'; 
    }
    $result .= '</div>'; 

    return $result;
  }

  protected function _getBelegungDetailLink($pBelId)
  {
    $result = '';
    if (isset($this->links['details']) && $this->links['details'] != '') {
      $result .= ' <a href="' . CleanOperations::cleanStringForHtml($this->links['details']) . '&belid=' . CleanOperations::cleanInt($pBelId) . '">';
      $result .= '<img src="images/details.gif" height="13" width="13"></a>';
    }

    return $result;
  }

  
  protected function showMitarbeiterInfo($pTeilnehmer)
  {
    return CleanOperations::cleanStringForHtml($pTeilnehmer->namevorname);
  }

  
  protected function getBelegungsSpan($pBelegung, $pTnr)
  {
    $result = '<span class="kursteilnehmer">' . CleanOperations::cleanStringForHtml($pBelegung->kurs->id) . ' ' . CleanOperations::cleanStringForHtml($pBelegung->kurs->kurzbez);
    
    if ($this->toolSettings->useTool21Semester) {
      $result .= $this->_getBelegungDetailLink($pBelegung->id);
    }
    $result .= '</span>';

    return $result;
  }
} 



class PageFaMitarbeiterUebersichtBLAK extends PageFaMitarbeiterUebersicht
{
  
  protected function getBelegungsSpan($pBelegung, $pTnr)
  {
    
    $result = '<span class="kursteilnehmer">';
    
    $result .= '<span class="kursdetailslink_blak">' . $this->_getBelegungDetailLink($pBelegung->id) . '</span>';
    $setLink = (isset($this->links['details']) && $this->links['details'] != '');
    
    if ($setLink) {
      $result .= '<a href="' . CleanOperations::cleanStringForHtml($this->links['details']) . '&belid=' . CleanOperations::cleanInt($pBelegung->id) . '">';
    }
    $result .= '<span class="kurstitel_blak"> ' . CleanOperations::cleanStringForHtml($pBelegung->kurs->id) . ' ' . CleanOperations::cleanStringForHtml($pBelegung->kurs->kurzbez) . '</span>';
    if ($setLink) {
      $result .= '</a>';
    }

    $knr = $pBelegung->knr;
    $tnr = $pTnr;

    
    
    static $dbwBelegung = null;
    if ($dbwBelegung == null) {
      $dbwBelegung = new DBWorkBelegung();
    }

    $pkteInfo = $dbwBelegung->getPunkteInfo4KnrTnr($knr, $tnr);

    
    static $dbwhlstatuskz = null;
    if (is_null($dbwhlstatuskz)) {
      $dbwhlstatuskz = new DBWorkHLStatusKZ(1, true);
      $dbwhlstatuskz->prepareListcompare();
    }
    $result .= '<span class="belegungsstatus_blak">' . CleanOperations::cleanStringForHtml($dbwhlstatuskz->getFieldbyID($pkteInfo->status, 'kennz', 'text')) . '</span>';

    $pkteStatus = BelegungOperations::getDisplayString4PunkteStatus($tnr, $knr, $pkteInfo->pkt_ok_stat, $pkteInfo->status, $pkteInfo->punkte);
    $result .= '<span class="pkt_ok_stat" title="' . CleanOperations::cleanStringForHtml(BelegungOperations::getDisplayTitle4PunkteStatus($pkteStatus)) . '">'
               . $pkteStatus . '</span>' . "\n";

    if ($pkteStatus != '?') {
      $result .= '<span class="punkte">' . $pkteInfo->punkte . '</span>' . "\n";
    }

    if ($pkteInfo->pkt_ok_am != '') {
      $result .= '<span class="pkt_ok_am">' . $pkteInfo->pkt_ok_am . '</span>' . "\n";
    }

    $result .= '</span>';

    return $result;
  }

  
  protected function _getMitarbeiterKurseDiv($mitarbeiterKurseAry)
  {
    $result = '';
    $result .= '<div class="kurse_div">' . BR_WT;

    
    $result .= '<span class="belegungsstatus_blak">Status der Anmeldung</span>';
    $result .= '<span class="pkt_ok_stat">Status für Punkte</span>';
    $result .= '<span class="punkte">Punkte</span>';
    $result .= '<span class="pkt_ok_am">Punkte bestätigt am</span>' . BR_WT;

    foreach ($mitarbeiterKurseAry['belegungen'] as $belegung) {
      $result .= '<div class="einzelkurs">';

      
      
      $result .= $this->getBelegungsSpan($belegung, $mitarbeiterKurseAry['teilnehmer']->id);

      $result .= '</div>'; 
    }

    $result .= '</span>';

    $result .= '</div>'; 

    return $result;
  }

  
  protected function showMitarbeiterInfo($pTeilnehmer)
  {
    $showBerufsgruppe = true;
    $showPunkte = true;
    $result = $pTeilnehmer->namevorname;
    if ($showBerufsgruppe) {
      $tnr = $pTeilnehmer->id;

      $dbwkennz = new DBWorkKennz(1, true);
      $separator = 'komma';

      
      $result .= '<span class="berufsgruppe_blak">Berufsgruppe: ' . $dbwkennz->_getBerufsgruppen4TN($separator, $tnr) . '</span>';
    }
    if ($showPunkte) {
      $result .= '<span class="famapunkte">';
      if ($pTeilnehmer->zertifikat_druck_dat != '') {
        $result .= ' Zertifikat am ' . CleanOperations::cleanDateString($pTeilnehmer->zertifikat_druck_dat);
      }

      $result .= '</span>';
    }

    return $result;
  }
}