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


class DBWorkKurseBulkloadWB extends DBWorkKurseBase
{
  function getKurseByIdArray($pKursIds)
  {
    if (!is_array($pKursIds) || count($pKursIds) == 0)
      return array();
    
    $cleanKursIds = array_map(array($this->dboperation, 'getString4Sql'),$pKursIds);
    $kursnummern = StringOperations::convertArray2InList($cleanKursIds);
    
    $this->dboperation->clear();
    $sql = 'SELECT '.$this->select.' FROM kurse k WHERE k.nr in ('.$kursnummern.') ' . $this->getSearchSQL('k.');
    $this->dboperation->query($sql);
    
    $dbresult = $this->getAllRows();
    
    
    $dbresult = $this->fillTexts($dbresult);
    
    
    $zusatztexte          = $this->dbzusatztexte->getZusatzTexteByKursIds($pKursIds);
    
    
    
    
    $alleDozenten = $this->getDozentenForKurse($pKursIds);
    $dozenten = array();
    foreach ($alleDozenten as $knr=>$dozs) {
      
      if (count($dozs) > 0)
        $dozenten[$knr] = $dozs[0];
    }
    
    
    
    $dbworkBelegung = DBWorkBelegung::getDefaultInstance($this->dbtyp, true, true);
    $belegungsdaten = $dbworkBelegung->getBelegungCountByKnrArray($pKursIds, true);

    
    $wartelistenDaten = $dbworkBelegung->getCountTnInWartelisteByKursen($pKursIds);
    
    
    $dbworkKinder = DBWorkKinder::getDefaultInstance($this->dbtyp, true);
    $kinderanzahlen = $dbworkKinder->getKinderAnzahlByKursIds($pKursIds, true);
    
    $dbwgeb = new DBWorkKursgebuehr(1, true);
    $kursGebuehren = $dbwgeb->getGebuehrenByKnrs($pKursIds);
    $retour = array();
    
    foreach ($dbresult as $kurs) {
      if (isset($dozenten[$kurs->id]))
        $kurs->hauptdozent = $dozenten[$kurs->id];
      if (isset($zusatztexte[$kurs->id]))
        $kurs->zusatztexte= $zusatztexte[$kurs->id];
      if (isset($belegungsdaten[$kurs->id])) {
        $kurs->anmeldungen= $belegungsdaten[$kurs->id];
        $kurs->teil_akt   = $kurs->anmeldungen;
      }
      $kurs->teil_frei = intval($kurs->teil_max) - intval($kurs->teil_akt);
      if (isset($kinderanzahlen[$kurs->id]))
        $kurs->kinderanzahl= $kinderanzahlen[$kurs->id];
      if ($kurs->anmeldungen >= 0)
        $kurs->anmeldungeng = 0; 
      if (($kurs->anmeldungen >= $kurs->teil_min) && ($this->objsettings->anmstatuscheck2==true)) 
        $kurs->anmeldungeng = 1; 
      if (($kurs->anmeldungen >= BelegungOperations::getBelegschwelle($kurs->teil_max,$this->objsettings->belegschwelleProz,$this->objsettings->belegschwelleZahl)) && ($this->objsettings->anmstatuscheck3==true)) 
        $kurs->anmeldungeng = 2; 
      if (($kurs->anmeldungen >= $kurs->teil_max) && ($this->objsettings->anmstatuscheck4==true)) 
        $kurs->anmeldungeng = 3; 
      $kurs->anmeldungeng_web = BelegungOperations::getAnmStatus($kurs->anmeldungen,$kurs->teil_min,$kurs->teil_max,$this->objsettings_web);
      $kurs->teil_wart = $wartelistenDaten[$kurs->id];
      
      
      if($kurs->id != '') {
        if (isset($alleDozenten[$kurs->id])) {
          $this->_setDozentenKommasepariert($alleDozenten[$kurs->id], $kurs);
          $this->_setDozentenListe($alleDozenten[$kurs->id], $kurs);
        }
        $kurs->gebuehrentabelle = $this->getGebuehrenTabelle($kurs, $kursGebuehren[$kurs->id]);
      }
      $retour[] = $kurs;
    }
    return $retour;
  }

  protected function postGetAllRowsHook($pDatamodules, $pRefreshCache = false)
  {
    
    return DBWork::postGetAllRowsHook($pDatamodules, $pRefreshCache);
  }
  
  
  function fillTexts( $pKursAry ) 
  {
    if (!is_array($pKursAry) || count($pKursAry) == 0)
      return $pKursAry;
    $kursnummern = '';
    $kurseIndiziert = array();
    foreach ($pKursAry as $kurs) {
      $kursnummern .= "'".$kurs->id."',";
      $kurseIndiziert[$kurs->id] = $kurs;
    }
    
    $kursnummern = substr($kursnummern, 0, -1);
    $this->dboperation->clear();
    $this->dboperation->query(
      'SELECT k.nr, ' . $this->clob('k.webinfo') . ', '
      . $this->clob('k.vorspann') . ', '
      . $this->clob('k.nachspann') . ', '
      . $this->clob('k.individtermine') . ', ' 
      . $this->clob('k.info') . ', ' 
      . $this->clob('k.keinkursbeginn') . ', '
      . $this->clob('k.termindarstweb') . ', ' 
      . $this->clob('k.gebuehrergaenztext') . ', ' 
      . $this->clob('k.keinewebanmeld') . ', ' 
      . $this->clob('k.intnotiz') . ', ' 
      . $this->clob('k.abg_bemerk') . ', ' 
      . $this->clob('k.material') .  ', ' 
      . $this->clob('k.vkz_text') .  
      " FROM kurse k WHERE k.nr in ($kursnummern)"
    );
    
    $rowcount = $this->dboperation->rowcount();
    for ($i = 0; $i<$rowcount; $i++) {
      $this->dboperation->selectrow($i);
      $nr = $this->getDatamodulValue('nr');
      $kurseIndiziert[$nr]->webinfo = $this->getDatamodulValue("webinfo");
      $kurseIndiziert[$nr]->vorspann = $this->getDatamodulValue("vorspann");
      $kurseIndiziert[$nr]->nachspann = $this->getDatamodulValue("nachspann");
      $kurseIndiziert[$nr]->individtermine = $this->getDatamodulValue("individtermine");
      $kurseIndiziert[$nr]->info = $this->getDatamodulValue("info");
      $kurseIndiziert[$nr]->keinkursbeginn = $this->getDatamodulValue("keinkursbeginn");
      $kurseIndiziert[$nr]->termindarstweb = $this->getDatamodulValue("termindarstweb");
      $kurseIndiziert[$nr]->gebuehrergaenztext = $this->getDatamodulValue("gebuehrergaenztext");
      $kurseIndiziert[$nr]->keinewebanmeld = $this->getDatamodulValue("keinewebanmeld");
      $kurseIndiziert[$nr]->intnotiz = $this->getDatamodulValue("intnotiz");
      $kurseIndiziert[$nr]->abg_bemerk = $this->getDatamodulValue("abg_bemerk");
      $kurseIndiziert[$nr]->material = $this->getDatamodulValue("material");
      $kurseIndiziert[$nr]->vkz_text = $this->getDatamodulValue("vkz_text");
    }
    
     
    
    $kurseIndiziert =  $this->postGetAllRowsHook( $kurseIndiziert);
    
    return $kurseIndiziert;
  }
}