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


class ToolVorgesetzter extends ToolBase
{
  private $_dbwBelegung;
  private $_dbwTeilnehmer;
  private $_user;
  private $_teilnehmerProSeite;

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

    
    $this->_teilnehmerProSeite = $this->toolSettings->teilnehmerProSeite > 0 ? $this->toolSettings->teilnehmerProSeite : 6;
    
    if ($this->toolSettings->useTool20Semester) {
      $semester = ToolSettingsAPI::getToolSettings(20)->semlist;
    } else {
      $semester = $this->toolSettings->semlist;
    }
    
    $this->_dbwTeilnehmer = new DBWorkTeilnehmer(1, true);
    $this->_dbwTeilnehmer->newSearch();

    
    $dbwbelegung = new DBWorkBelegung();
    $dbwbelegung->newSearch();
    $dbwbelegung->fromobject->kurs->semester = $semester;
    $dbwbelegung->toobject->kurs->semester = '';
    
    
    
    
    
    
    $this->_dbwBelegung = $dbwbelegung;
    $this->_user = SessionOperations::getCurrentWebToolsUser();
  }

  

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

  
  private function _handleTeilnehmerUebersicht($pPageId = 453)
  {
    
    
    $alleTeilnehmerIds = $this->getTeilnehmerNummern4Vorgesetzten();


    
    
    $this->setTotalData($alleTeilnehmerIds);
    $tnAnzahl = count($alleTeilnehmerIds);
    $tnNummernDerSeite = ToolsAPI::getDataForCurrentPage($alleTeilnehmerIds, $this->_teilnehmerProSeite);

    
    $mitarbeiterTnAry = $this->_dbwTeilnehmer->getTeilnehmByIdArray($tnNummernDerSeite);

    
    $data = array();

    
    $tnStatus = $this->toolSettings->tnstatus;
    if ($this->toolSettings->tnstatus == '') {
      $tnStatus = '-ATP';
    }
    $tnStatus = str_replace('-', ' ', $tnStatus);
    $tnStatus = \StringOperations::str_split($tnStatus);
    if (in_array('A', $tnStatus)) {
      array_push($tnStatus, ' ', '');
    }


    
    foreach ($mitarbeiterTnAry as $mitarbeiterTn) {
      
      $data[$mitarbeiterTn->id] = array('teilnehmer' => $mitarbeiterTn, 'belegungen' => array());


      
      
      $belegungAry = $this->_dbwBelegung->getBelegungenbyTeilnehmerNR($mitarbeiterTn->id, $tnStatus);
      

      
      foreach ($belegungAry as $belegung) {

        
        $data[$mitarbeiterTn->id]['belegungen'][] = $belegung;
      }
    }

    
    
    

    usort($data, array('ToolVorgesetzter', '_sortData'));

    $pageLinks = array();
    
    $pageLinks['mitarbeiterkurse'] = \SecurityOperations::privilegAllowedCurrentUser($this->getToolId(), '453.0.1');

    $pageLinks['print'] = true;
    
    $page = new PageTeilnehmerUebersicht4Vorgesetzte($this, $data, $pPageId, $tnAnzahl, $this->_teilnehmerProSeite);

    $page->setLinks($pageLinks);

    return $page;
  }

  

  
  private function getTeilnehmerNummern4Vorgesetzten()
  {
    
    $dbwTn = $this->_dbwTeilnehmer;

    $searchAPI = new TeilnehmersuchAPI();
    
    
    
    
    
    
    $searchAPI->getSearchParamsFromReqToSession('tool' . $this->toolId, 'searchteilnehmer');

    
    
    $dbwTn->fromobject = $searchAPI->getFromObjectBySession($dbwTn->fromobject, 'tool' . $this->toolId);
    $dbwTn->toobject = $searchAPI->getToObjectBySession($dbwTn->toobject, 'tool' . $this->toolId);
    $dbwTn->orderby = $this->toolSettings->sorttn;  
    $dbwTn->orderbyasc = $this->toolSettings->sorttnasc;

    
    
    return $dbwTn->getTeilnehmerIDsByVorgesetztenNr($this->_user->tnr);


    
  }

  

  
  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_VORGESETZTER_TN;
  }
}