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

class Dozent extends Personn
{
  public $schulausbildung;
  public $dozentseit;
  public $tagessatz;
  public $stundensatz;
  public $fahrentfernung;
  public $zusvertrag;
  public $indhonsatz;
  public $sozialversnr;
  public $steuernr;
  public $info;
  public $info_intern;
  public $personalnr;
  public $inaktiv;
  public $verstorben;

  
  public $schulkey;

  public $nointernet;
  public $firmaname;
  public $firmazusatz1;
  public $firmazusatz2;
  public $firmazusatz3;
  public $firmastr;
  public $firmaort;
  public $firmatel;
  public $firmafax;
  public $firmaemail;
  public $firmawww;
  public $firmabank;
  public $firmablz;
  public $firmakto;
  public $firmaktoinhaber;
  public $dienstst;
  public $orgaeinh;

  public $webdoznicht;
  public $webdoznichtkurs;
  public $taetigkeitsbez;
  public $kuenstlername;
  public $profil;
  public $homepage;
  public $name_bf;
  public $vorname_bf;
  public $name_titel_bf;
  public $titel_bf;
  public $beruf_bf;
  public $finanzamt;
  public $name_titel;
  public $nurplz;
  public $nurort;
  public $ansprache;
  public $fachbereich;
  public $geburtsname;
  public $info_kompetenz;
  public $typ = '';

  public $kirchengemeinde = '';
  public $kirchenbezirk = '';

  public $krit1;
  public $krit2;
  public $krit3;
  public $krit4;
  public $krit5;
  public $krit6;
  public $krit7;
  public $krit8;
  public $krit9;
  public $krit10;
  public $krit11;
  public $krit12;
  public $krit13;
  public $krit14;
  public $krit15;
  public $krit16;

  
  
  public $dse_unterschrieben_datum = '';
  public $dse_unterschrieben_bearbeiter = '';
  public $dse_unterschrieben_weg = '';
  public $dse_widerrufen_datum = '';
  public $dse_widerrufen_bearbeiter = '';
  public $dse_widerrufen_weg = '';

  public $wegsatz = 0.0;

  public $vertrag_digital = false;

  public $gemeinde = '';
  public $stadtteil = '';
  public $bezirk = '';
  public $bundesland = '';

  
  public $mobil2;

  public $mobil2_anzeige = '';

  public $arykennzeichen;

  public $infohtml;

  public $info_intern_html;

  
  public $erstelltvon;

  
  public $erstelltdatum;

  
  public $bearbeiter;

  
  public $bearbdatum;

  
  public $kskbetrag;

  
  public $kskdatum;

  
  public $einsatzbezirke;

  
  public $ausbildungen;

  
  public $qualifikationen;

  
  public $ma_verwaltend = '';

  
  public $ma_planend = '';

  public function updateKommAnzeige()
  {
    parent::updateKommAnzeige();
    $this->mobil2_anzeige = isset($this->mobil2) ? $this->mobil2->wert : '';

    if (trim($this->mobil_anzeige ?? '') == '' && trim($this->mobil2_anzeige ?? '') != '') {
      $this->mobil_anzeige = $this->mobil2_anzeige;
      $this->mobil2_anzeige = ''; 
    }
  }

  

  public function getVarName($id)
  {
    $ary = array_keys(get_object_vars($this));
    
    
    
    
    

    

    $mobilKey = ArrayOperations::find(function($value) {return $value == 'mobil';}, $ary);
    $mobil2Key = ArrayOperations::find(function($value) {return $value == 'mobil2';}, $ary);

    if ($mobilKey !== null && $mobil2Key !== null && $mobilKey > $mobil2Key) {
      $tmp = $ary[$mobilKey];
      $ary[$mobilKey] = $ary[$mobil2Key];
      $ary[$mobil2Key] = $tmp;
    }

    return $ary[$id];
  }

  public function setValue2Var($var, $val)
  {
    switch ($var) {
      default: parent::setValue2Var($var, $val);
        break;
      case 'mobil2':
        if ($this->mobil2 == null) {
          $this->mobil2 = new Kommunikation();
        }
        $this->mobil2->typ = $this->getKommType();
        if ($val instanceof Kommunikation) {
          $val = $val->wert;
        }
        $this->mobil2->wert = $val;
        $this->mobil2->nr = $this->id;
        if (!isset($this->mobil2->art) || $this->mobil2->art == '') {
          $this->mobil2->art = 'M';
        }
        if (!isset($this->mobil2->bezeichner) || $this->mobil2->bezeichner == '') {
          $this->mobil2->bezeichner = 'Mobilfunktelefon 2';
        }
        break;
    }
  }

  
  protected function _referenzVariablen()
  {
    $referenz = parent::_referenzVariablen();
    $referenz[] = 'mobil2';

    return $referenz;
  }

  
  public function getKommAnzeigeAry($pOrigDm)
  {
    
    

    $kommDataAry = array('tel', 'tel2', 'mobil', 'email', 'fax', 'fax2', 'email2', 'mobil2');
    $kommAnzeigeAry = array();
    
    foreach ($kommDataAry as $kommDat) {
      if (empty($pOrigDm) || $this->{$kommDat}->wert !== $pOrigDm->{$kommDat}->wert) {
        $kommAnzeigeAry[] = $kommDat . '_anzeige';
      }
    }

    
    if (in_array('tel_anzeige', $kommAnzeigeAry) && trim($this->tel->wert) == '' && !in_array('tel2_anzeige', $kommAnzeigeAry)) {
      $kommAnzeigeAry[] = 'tel2_anzeige';
    }
    if (in_array('fax_anzeige', $kommAnzeigeAry) && trim($this->fax->wert) == '' && !in_array('fax2_anzeige', $kommAnzeigeAry)) {
      $kommAnzeigeAry[] = 'fax2_anzeige';
    }

    if (in_array('mobil_anzeige', $kommAnzeigeAry) && trim($this->mobil->wert) == '' && !in_array('mobil2_anzeige', $kommAnzeigeAry)) {
      $kommAnzeigeAry[] = 'mobil2_anzeige';
    }
    if (in_array('email_anzeige', $kommAnzeigeAry) && trim($this->email->wert) == '' && !in_array('email2_anzeige', $kommAnzeigeAry)) {
      $kommAnzeigeAry[] = 'email2_anzeige';
    }

    return $kommAnzeigeAry;
  }

  

  public function getTyp($pFieldName)
  {
    switch ($pFieldName) {
      default:
        return parent::getTyp($pFieldName);
      case 'geburtstag':
      case 'seitwann':
      case 'dozentseit':
      case 'erstelltdatum':
      case 'kskdatum':
        return \DatamodulVarType::TYPE_DATE;
      case 'bearbdatum':
      case 'dse_unterschrieben_datum':
      case 'dse_widerrufen_datum':
        return \DatamodulVarType::TYPE_DATETIME;
      case 'id':
      case 'entfernung':
      case 'fahrtentfernung':
        return \DatamodulVarType::TYPE_INT;
      case 'stdsatz':
      case 'tagessatz':
      case 'wegsatz':
      case 'kskbetrag':
        return \DatamodulVarType::TYPE_FLOAT;
      case 'inaktiv':
      case 'verstorben':
      case 'internet':
      case 'nointernet':
      case 'vertrag_digital':
        return \DatamodulVarType::TYPE_BOOL_WF;
      case 'arykennzeichen':
      case 'einsatzbezirke':
      case 'ausbildungen':
      case 'qualifikationen':
        return \DatamodulVarType::TYPE_ARRAY;
    }
  }

  
  public function getKommType()
  {
    return 'D';
  }

  
  public function getVarName4EmailSenderSetting(string $pEmpfaenger): string
  {
    return 'absenderDozentAn' . $pEmpfaenger;
  }

  
  public function getDbTyp(): string
  {
    return 'D';
  }

  public function getVarValueEx($name, $datamodulname)
  {
    $value = parent::getVarValueEx($name, $datamodulname);
    if (StringOperations::strtolower($datamodulname) == 'kommunikation') {
      
      
      $value = str_replace('##IDPART##', 'dozids=' . $this->id, $value ?? '');
    }

    return $value;
  }

  public function getVarValue($pName)
  {
    switch ($pName) {
      case 'dse_status_symbol':
        return $this->getDsgvoStatus();
      case 'dse_status_text':
        return $this->getDsgvoStatusOnlyText();
      case 'fachbereichliste':
        return $this->getFachBereichListe();
      case (preg_match('/copyright_([1-6])/', $pName, $matches) ? true : false):
        if (isset($this->{$pName})) {
          return $this->{$pName};
        }
        $fotoNr = $matches[1];

        return $this->getCopyrightFoto($fotoNr);
      case 'is_leiter':
        if (empty($this->id)) {
          return false;
        }

        $dbwBeziehung = DBWorkBeziehung::getDefaultInstance(1, true);
        $beziehungZuVeranstalter = $dbwBeziehung->getBeziehungVeranstalterVonLeiter($this->id);

        return $beziehungZuVeranstalter->nr1 > 0;
      case 'beim_veranstalter_seit':
        if (empty($this->id)) {
          return '';
        }

        $dbwBeziehung = DBWorkBeziehung::getDefaultInstance(1, true);
        $beziehungZuVeranstalter = $dbwBeziehung->getBeziehungVeranstalterVonLeiterOderMitarbeiter($this->id);

        return $beziehungZuVeranstalter->gueltig_von;
      case 'veranstalter':
        if (empty($this->id)) {
          return '';
        }

        $dbwBeziehung = DBWorkBeziehung::getDefaultInstance(1, true);
        $beziehungZuVeranstalter = $dbwBeziehung->getBeziehungVeranstalterVonLeiterOderMitarbeiter($this->id);
        if ($beziehungZuVeranstalter->nr1 > 0) {
          $dbwDoz = DBWorkDozenten::getDefaultInstance(1, true);
          $dozent = $dbwDoz->getDozent($beziehungZuVeranstalter->nr1);

          return $dozent->getVarValue('name_vorname_ohne_komma');
        }

        return '';
      case 'einsatzbezirke':
        if (empty($this->id)) {
          return '';
        }

        if (!isset($this->einsatzbezirke)) {
          $dbwDozBezirk = DBWorkDozBezirk::getDefaultInstance(1, true);
          $this->einsatzbezirke = $dbwDozBezirk->getEinsatzbezirkeByDnr($this->id);
        }

        return $this->einsatzbezirke;
      case 'arykennzeichen':
        if (empty($this->id)) {
          return '';
        }

        if (!isset($this->arykennzeichen)) {
          $dbwKennzAd = DBWorkKennzAd::getDefaultInstance(1, true);
          $this->arykennzeichen = $dbwKennzAd->getKennzForTypUndNr('D', $this->id);
        }

        return $this->arykennzeichen;
      case 'ausbildungen':
        if (empty($this->id)) {
          return '';
        }

        if (!isset($this->ausbildungen)) {
          $dbwAusbildung = \DBWorkTNAusbildung::getDefaultInstance(1, true);
          $this->ausbildungen = $dbwAusbildung->getAusbildungByDnr($this->id);
        }

        return $this->ausbildungen;
      case 'qualifikationen':
        if (empty($this->id)) {
          return '';
        }

        if (!isset($this->qualifikationen)) {
          $dbwDozQualifikationenAD = DBWorkQualifikationenAD::getDefaultInstance(1, true);
          $this->qualifikationen = $dbwDozQualifikationenAD->getQualifikationen4Dozent($this->id);
        }

        return $this->qualifikationen;
      default:
        return parent::getVarValue($pName);
    }
  }

  public function getDatamodulByName($datamodulname)
  {
    switch ($datamodulname) {
      default:
        return parent::getDatamodulByName($datamodulname);
      case 'maplanend':
        return $this->getPlanenderMitarbeiter() ?? new \BASysBenutzer();
      case 'maverwaltend':
        return $this->getVerwaltenderMitarbeiter() ?? new \BASysBenutzer();
    }
  }

  
  protected function getFachBereichListe()
  {
    $dbwFachBer = new DBWorkDozFachbereich();
    $fachBereichAry = $dbwFachBer->getFachbereichByDNr($this->id);

    
    $fachBereiche = '<ul class = "fachbereich">';
    foreach ($fachBereichAry as $fachbereich) {
      $fachBereiche .= '<li>' . $fachbereich->text . '</li>';
    }
    $fachBereiche .= '</ul>';

    return $fachBereiche;
  }

  
  protected function getCopyrightFoto($pFotoNr)
  {
    $dbwFoto = new \DBWorkFoto();
    $foto = $dbwFoto->getFoto('D', $this->id, $pFotoNr);

    return $foto->copyright;
  }

  public function getEMailName(): string
  {
    return $this->getVarValue('name_vorname_ohne_komma');
  }

  public function getEMailAddress(): ?string
  {
    return $this->getVarValueEx('email', 'kommunikation');
  }

  public function getFotoTyp(): ?string
  {
    return \Foto::TYP_DOZENTEN;
  }

  
  private $cacheVerwaltenderMitarbeiter;

  
  public function getVerwaltenderMitarbeiter(): ?\BASysBenutzer
  {
    if (!is_null($this->cacheVerwaltenderMitarbeiter)) {
      return $this->cacheVerwaltenderMitarbeiter;
    }

    if (is_null($this->ma_verwaltend) || $this->ma_verwaltend === '') {
      return null;
    }

    $this->cacheVerwaltenderMitarbeiter = \DBWorkBASysUser::getDefaultInstance()
      ->findOneByFilter(
        \Kufer\Web\Classes\Dbfilter\BASysBenutzerSQLFilter::create()->equalsKennung($this->ma_verwaltend)
      );

    return $this->cacheVerwaltenderMitarbeiter;
  }

  
  private $cachePlanenderMitarbeiter;

  
  public function getPlanenderMitarbeiter(): ?\BASysBenutzer
  {
    if (!is_null($this->cachePlanenderMitarbeiter)) {
      return $this->cachePlanenderMitarbeiter;
    }

    if (is_null($this->ma_planend) || $this->ma_planend === '') {
      return null;
    }

    $this->cachePlanenderMitarbeiter = \DBWorkBASysUser::getDefaultInstance()
      ->findOneByFilter(
        \Kufer\Web\Classes\Dbfilter\BASysBenutzerSQLFilter::create()->equalsKennung($this->ma_planend)
      );

    return $this->cachePlanenderMitarbeiter;
  }

  public function isKskDatumInCurrentQuater(): bool
  {
    return \DateTimeOperations::isDateInCurrentQuater($this->kskdatum);
  }
}