<?php

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


class WBAnmeldungNormalFirma extends WBAnmeldungFirma
{
  private $is3rdPartyInvolved;
  private $expTeilnehmer;
  private $webSettings;

  private $mitWerbung = false;

  public function __construct($urlparameter)
  {
    $this->anmeldeart = ANMELDEART_URL_NORMALFIRMA;
    $this->setIs3rdPartyInvolved();
    $this->expTeilnehmer = new ExpTeilnehmer();
    $this->expTeilnehmer->export->expCalculation->enforceParamForValueTeilnehmerEdit = true;
    $this->webSettings = ToolSettingsAPI::getToolSettings(4);

    parent::__construct($urlparameter); 
  }

  private function setIs3rdPartyInvolved()
  {
    $this->is3rdPartyInvolved = SessionOperations::getVarValueAnm(ANMELDEART) === ANMELDEART_INTERN_FIRMA;
  }

  
  public function _checkStep($ziel, $geprueft = 0)
  {
    if (!is_numeric($ziel) || $ziel <= 0) {
      $ziel = 1;
    }

    if ($ziel >= 1 && $geprueft < 1) {
      $this->setStepAndValidated(1);
    }

    if ($ziel >= 2 && $geprueft < 2) {
      $this->setStepAndValidated(2);
    }

    if ($ziel >= 3 && $geprueft < 3) {
      $tmpurlparam = new URLParameterAnmeldungZusatzPerson();
      $this->getSight(62);
      $this->mitWerbung = true;
      
      if ($ziel == 3 && RequestOperations::getMethod() === 'post' && $tmpurlparam->schrittback == '') {
        
        $flag = PostOperations::getVarValue('kw_anm_normal_firma') == '1';
        if ($flag) {

          $this->getTeilnehmerFromRequest2Session('tedit', 'ma');
          $this->getBelegungWeitererFromRequest2Session('bedit', 'ma');

          if (SessionOperations::getVarValueAnm(ANMELDEART, ANMELDEART_INTERN_NORMAL) !== ANMELDEART_INTERN_FIRMA) {
            SessionOperations::setDatamodulToSession(new TeilnehmerPflicht(), 'wk_w_');
            
            
            
          }

          SessionOperations::setVarValueAnm(ANMELDEART, ANMELDEART_INTERN_FIRMA); 
        } else {
          SessionOperations::setVarValueAnm(ANMELDEART, ANMELDEART_INTERN_NORMAL); 
          $this->getTeilnehmerFromRequest2Session();
          $this->getBelegungFromRequest2Session();

          
          $this->delMitarbeiterWithHigherIndexFromSession(0);
        }
        $this->setIs3rdPartyInvolved();
      }

      $check = ''; 
      if ($this->is3rdPartyInvolved) {
        $check = new WBAnmeldungCheckMAFromHauptTN();
      }

      if (!$this->checkEingaben($check)) {
        $this->step = 2;

        return;
      }
      if ($this->is3rdPartyInvolved) {
        $this->step = 3;
      } else {
        $this->step = 4;
      }
      SessionOperations::setVarValueWk('last_validated_step', 3);
      $this->mitWerbung = false;
    }

    
    if ($ziel >= 4 && $geprueft < 4) {
      if ($this->is3rdPartyInvolved) {
        $this->mitWerbung = false;
        $tmpurlparam = new URLParameterAnmeldungZusatzPerson();
        if ($ziel == 4 && RequestOperations::getMethod() === 'post' && $tmpurlparam->schrittback == '') {
          $this->getTeilnehmerFromRequest2Session();
          $this->getBelegungFromRequest2Session();
        }
        $this->getSight(72);
        if (!$this->checkEingaben()) {
          $this->step = 3;

          return;
        }
        $this->setStepAndValidated(4);
      } else {
        if ($this->isLastStepOk()) {
          $this->setStepAndValidated(5);
        } else {
          $this->step = 4;
        }
      }
    }

    if ($ziel >= 5 && $geprueft <= 5) {
      if ($this->isLastStepOk()) {
        $this->setStepAndValidated(5);
      } else {
        $this->step = 4;
      }
    }

    
    if ($ziel >= 6 && $geprueft <= 6) {
      $this->setStepAndValidated(6);
    }
    if ($ziel >= 99 && $geprueft <= 99) {
      $this->step = 99;
      SessionOperations::setVarValueWk('last_validated_step', 99);
    }
  }

  protected function setStepAndValidated($pStep)
  {
    $this->step = $pStep;
    SessionOperations::setVarValueWk('last_validated_step', $pStep);
  }

  
  private function isLastStepOk()
  {
    
    return PostOperations::getVarValue('tedit_agb', '##') === '1' && PostOperations::getVarValue('tedit_widerruf', '##') === '1';
  }

  
  public function content()
  {
    $isFehlerAufgetreten = (count($this->pflichtfeldFehlerArray) > 0 || count($this->formatFehlerArray) > 0);
    switch ($this->step) {
      default:
      case 1:
      case 2: 
        if ($this->is3rdPartyInvolved) {
          $this->dataarraybody = SessionOperations::getTeilnehmerFromSession('ma');
        } else {
          $this->dataarraybody = SessionOperations::getTeilnehmerFromSession();
        }
        if ($isFehlerAufgetreten) {
          $this->warnungpflichtfelder(62, $this->expTeilnehmer);
        } else {
          $this->showsightcomplete(62, $this->expTeilnehmer);
        }
        break;
      case 3:
        if ($this->is3rdPartyInvolved) {
          
          $this->dataarraybody = SessionOperations::getTeilnehmerFromSession();

          if ($isFehlerAufgetreten) {
            $this->warnungpflichtfelder(72, $this->expTeilnehmer);
            break;
          } else {
            
            
            $this->showsightcomplete(72, $this->expTeilnehmer);
          }
          break;
        }
        
      case 4: 
        if (isset($this->urlparameter->payOnline) && $this->urlparameter->payOnline) {
          $this->ePaymentStart($this->urlparameter);
        } else {
          $this->dataarrayheader = SessionOperations::getTeilnehmerFromSession();
          $this->anmeldungbestaetigen();
        }
        break;
      case 5: 
        if ($this->is3rdPartyInvolved) {
          if (SessionOperations::getVarValueWk('gAnzahl_Mitarbeiter', -1) !== -1) {
            
            $this->delMitarbeiterWithHigherIndexFromSession(1);
          }
          $this->addWeiterePerson2Session($this->getPersonObject(), 'gAnzahl_Mitarbeiter', 'w', 'ma');
        }
        if (ePaymentApi::isAnyPayonlineInSession() || (isset($this->urlparameter->payOnline) && $this->urlparameter->payOnline)) {
          $this->ePaymentCommit($this->urlparameter);
        } else {
          $this->anmeldungabschliessen();
        }
        if ($this->webSettings->tnDatenBeiAnmeldungBehalten == 0) {
          SessionOperations::setVarValueAnm(ANMELDEART, null);
        }
        break;
      case 6: 
        if (isset($this->urlparameter->payOnline) && $this->urlparameter->payOnline) {
          $this->ePaymentExecute($this->urlparameter);
        }
        break;
      case 99:
        if (isset($this->urlparameter->payOnline) && $this->urlparameter->payOnline) {
          $this->doSchritt99($this->urlparameter);
        }
        break;
    }
  }

  private function delMitarbeiterWithHigherIndexFromSession($pFromIndex)
  {
    while (SessionOperations::getVarValueWk('gAnzahl_Mitarbeiter', '-1') > max(0, $pFromIndex - 1)) {
      $this->delWeiterePersonFromSession($pFromIndex, $this->getPersonObject(), 'gAnzahl_Mitarbeiter', 'w', 'ma');
    }
  }

  
  public function _anmeldungbestaetigenPersonenPart()
  {
    $retour = '';

    $this->dataarraybody = SessionOperations::getTeilnehmerFromSession();
    if ($this->is3rdPartyInvolved) {
      $firmenpart = $this->getsightcomplete(73, $this->expTeilnehmer);

      
      $this->dataarraybody = array();
      $this->dataarrayheader = SessionOperations::getTeilnehmerFromSession('ma');
      if (count($this->dataarrayheader) > 0) {
        $retour .= $this->getsightcomplete(61, $this->expTeilnehmer);
      }
      $retour = str_replace('__kw_anm_normal_firma_firmenpart__', $firmenpart, $retour);
    } else {
      $retour .= $this->getsightcomplete(61, $this->expTeilnehmer);
      $retour = str_replace('__kw_anm_normal_firma_firmenpart__', '', $retour);
    }

    return $retour;
  }

  
  public function getTeilnehmerFromRequest2Session($pRequestPraefix = 'tedit', $pSessionSuffix = '')
  {
    parent::getTeilnehmerFromRequest2Session($pRequestPraefix, $pSessionSuffix);

    $sessionSuffix = ($pSessionSuffix != '' ? '_' . $pSessionSuffix : '');

    if ($this->mitWerbung) {
      
      
      $nowerb = SessionOperations::getVarValueWk('w_nowerbung' . $sessionSuffix, '');
      $notelwerb = SessionOperations::getVarValueWk('w_notelwerbung' . $sessionSuffix, '');
      $nomailwerb = SessionOperations::getVarValueWk('w_mailwerbung' . $sessionSuffix, '');
      if ($nowerb === '') {
        SessionOperations::setVarValueWk('w_nowerbung' . $sessionSuffix, '1');
      }
      if ($notelwerb === '') {
        SessionOperations::setVarValueWk('w_notelwerbung' . $sessionSuffix, '1');
      }
      if ($nomailwerb === '') {
        SessionOperations::setVarValueWk('w_mailwerbung' . $sessionSuffix, '1');
      }
    }
  }
}

class WBAnmeldungCheckMAFromHauptTN extends WBAnmeldungCheckMA
{
  
  public function check($pPrefix = 'tedit')
  {
    return parent::check($pPrefix);
  }
}