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

namespace Kufer\KuferTools\Veranstalter\KursUebersicht\Detailsreiter\Teilnehmer\HandleNachlassBearbeiten;

class HandleNachlassBearbeitenUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new HandleNachlassBearbeitenResponse());
  }

  public static function getToolSectionId()
  {
    return 630;
  }

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

  public function hasAccess($pToolsectionId = null)
  {
    if (!parent::hasAccess($pToolsectionId)) {
      return false;
    }
    if (!$this->request->isXsrfOk && !$this->request->isRefresh) {
      \Logger::logg(' Fehler beim Ändern der Nachlassdaten. Der Xsrf Schlüssel im Handler zum Nachlass bearbeiten ist falsch', 250);

      return false;
    }

    return true;
  }

  public function action()
  {
    $statusMessage = $this->handleNachlassBearbeiten();

    return $this->getResponse($statusMessage);
  }

  
  private function handleNachlassBearbeiten()
  {
    $statusMessage = '';
    $allgSettings = \AllgSettingsAPI::getAllgSettings();
    
    
    if (\SessionOperations::isReplikat() && !$allgSettings->dmzEnabled) {
      $statusMessage .= '<div class="alert alert-danger">Ein Speichern der Daten zum Nachlass ist im reinen Replikatbetrieb nicht möglich.</div>';

      return $statusMessage;
    }

    
    $dbwBelegung = new \DBWorkBelegung(1, true);
    $belegung = $dbwBelegung->getBelegung($this->request->belId);
    $nachlassBetrag = $this->request->nachlassBetrag;
    $nachlassGrund = $this->request->nachlassGrund;
    $origBelegung = $belegung->copy();

    $dbwZahlung = new \DBWorkZahlung();
    $zahlungen = $dbwZahlung->getZahlungJournalByBelegId($this->request->belId);

    
    if (count($zahlungen) == 0) {
      return '<div class="alert alert-danger">' . \CleanOperations::cleanStringForHtml($allgSettings->failSubmitMsgNachlass) . '</div>';
    }

    
    $nachlassBetragNegativ = $nachlassBetrag * -1;
    $zahlungenNachlass = \ZahlungAPI::getNachlassZahlungen($zahlungen, $nachlassBetragNegativ, $nachlassGrund, 'Nachlass', false);

    $anzFields2Change = 0;
    
    
    if ($nachlassBetrag != 0) {
      $belegung->entgelt = \MathOperations::floatToString(\MathOperations::stringToFloat($belegung->entgelt) - $nachlassBetrag);
      $belegung->bet_offen = \MathOperations::floatToString(\MathOperations::stringToFloat($belegung->bet_offen) - $nachlassBetrag);
      
      if ($this->toolSettings->writeNachlassGrund2IntBemerkung) {
        $trenner = !empty($belegung->bemerkung) ? '; ' : '';
        $belegung->bemerkung .= $trenner . $nachlassGrund;
      }

      
      
      $correctFields = array('entgelt', 'bet_offen');
      $anzFields2Change = count($correctFields);
    }

    $success = false;
    
    if ($anzFields2Change > 0) {
      
      
      
      $success = \BelegungAPI::updateBelegung($belegung, $origBelegung);
      
      if ($success) {
        
        $success = \ZahlungAPI::insertZahlungen($zahlungenNachlass);
        
        if (!$success) {
          \BelegungAPI::updateBelegung($origBelegung, $belegung);
        }
      }
    }

    if ($success) {
      $statusMessage .= '<div class="alert alert-success">' . \CleanOperations::cleanStringForHtml($allgSettings->successMsgNachlass) . '</div>';
    } else {
      $statusMessage .= '<div class="alert alert-danger">' . \CleanOperations::cleanStringForHtml($allgSettings->failSubmitMsgNachlass) . '</div>';
    }

    return $statusMessage;
  }

  protected function getResponse($statusMessage)
  {
    $this->response->statusMessage = $statusMessage;

    return $this->response;
  }
}

class HandleNachlassBearbeitenRequest
{
  public $belId;
  public $knr;
  public $nachlassBetrag;
  public $nachlassGrund;
}

class HandleNachlassBearbeitenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $statusMessage;
}