<?php
require_once("config.inc.php");

function func_grundgehalt($prozentsatz)
{
  
  // Abhängige Funktion vorab: func_doz_nachbes.php
  // Daher die erfassten werte übernehmen, 1 Jahr nach dem letzten Wert eine Steigerung um 2%
  // Ab jedem neuen Jahr eine Steigerung von 2%
  $db              = dbconnect();

  $query_countchange = $db->query("SELECT count(*) Anz
                                     FROM `prog_grundgehalt`
                                    WHERE modify_date != '0000-00-00 00:00:00'
                             ");
  $row_change = $query_countchange->fetch_array();

  // Gibt es überhaupt Änderungen
  if($row_change['Anz'] > 0){
    $db              = dbconnect();
    $result_truncate = $db->query("TRUNCATE TABLE prog_tmp_grundgehalt");
    $query_minjahr   = $db->query("SELECT min(jahr) jahr
                                   FROM `prog_vergaberahmen`
                               ");
    
    $row_minjahr   = $query_minjahr->fetch_array();
    $start         = new DateTime($row_minjahr['jahr'] . '-01-01');
    $query_maxjahr = $db->query("SELECT date_format(max(date_sub(weggang, INTERVAL 1 MONTH)),'%Y-%m-28') enddat_form
                                   FROM `prog_tmp_professor`
                               ");
    $row_maxjahr = $query_maxjahr->fetch_array();
    
    $ende        = $row_maxjahr['enddat_form'];
    $end         = date_create($ende, new DateTimeZone('GMT'));
    $fehler = array();
    
    foreach (new DatePeriod($start, new DateInterval('P1M'), $end) as $cur) {
      $akt_mon = $cur->format('Y-m');
      $mon     = $cur->format('m');
      
      // Schleife über alle vorhandenen Besoldungen ab diesem Zeitpunkt. Where Bedingung evtl. kritisch. Alternativ müssten alle späteren Besoldungsstufen auf 01.01.2016 nachgetragen werden - auch nicht besser
      $query2 = "SELECT DISTINCT besoldung, stufe 
                   FROM prog_tmp_professor_besoldung
                  WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
                ";
      
      $result2 = $db->query($query2) or die("Cannot execute query2");
      while ($row2 = $result2->fetch_array()) {
        
        // Was ist das höchste Datum, bis wann der Grundgehalt erfasst wurde? Ggf. muss der Wert fiktiv hochgerechnet werden
        $result_proz = $db->query("SELECT date_format(max(startdat), '%Y-%m') proz_dat 
                                     FROM prog_grundgehalt
                                    WHERE besoldung='$row2[besoldung]'
                                      AND stufe ='$row2[stufe]'
                                 ");
        $row_proz    = $result_proz->fetch_array();
        
        if ($row_proz['proz_dat'] >= $akt_mon) {
          // Gehaltsstufe ist noch erfasst. Kein fiktiver Wert
          
          $result_akt_wert = $db->query("SELECT gid, besoldung, betrag, stufe
                                           FROM prog_grundgehalt
                                          WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
                                            AND besoldung = '$row2[besoldung]'
                                            AND stufe = '$row2[stufe]'
                                       ORDER BY startdat desc
                                          LIMIT 1");
          $row_akt_wert    = $result_akt_wert->fetch_array();
          $result_insert   = $db->query("INSERT INTO prog_tmp_grundgehalt (gid, startdat, besoldung, betrag, stufe, art) VALUES ($row_akt_wert[gid], '$akt_mon-01', '$row_akt_wert[besoldung]', '$row_akt_wert[betrag]', '$row_akt_wert[stufe]', 'B')");
          
        } else {
          if ($row_proz['proz_dat'] == NULL) {
            // Es wurde kein Grundgehalt erfasst: In Tabelle prog_tmp_professor_besoldung hat ein Professor eine Besoldungsstufe, für die es kein Grundgehalt gibt
            $fehler_cur = "$row2[besoldung]$row2[stufe]";
            if(!in_array($fehler_cur, $fehler)){
            $fehler[] .= "$fehler_cur";
              echo "<br><font size=1>Mindestens 1 Professor verwendet $row2[besoldung] Stufe: $row2[stufe]. Besoldung  zum Datum " . $cur->format('01.m.Y') . " nacherfassen</font>";
            }
            
          } else {
            // Fiktiver Gehaltswert; ab neuem Jahr + 2%
            
            // Letzter Wert ermitteln
            $result_last_wert = $db->query("SELECT betrag
                                              FROM prog_tmp_grundgehalt
                                             WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
                                               AND besoldung = '$row2[besoldung]'
                                               AND stufe = '$row2[stufe]'
                                          ORDER BY startdat desc
                                             LIMIT 1");
            $row_last_wert    = $result_last_wert->fetch_array();
            
            if ($mon == '01') { //Erhöhung im Januar um 2 Prozent
              $prozent   = $row_last_wert['betrag'] * $prozentsatz / 100;
              $next_wert = round($row_last_wert['betrag'] + $prozent, 2);
              
              $result_insert = $db->query("INSERT INTO prog_tmp_grundgehalt (startdat, besoldung, betrag, stufe, art) VALUES ('$akt_mon-01', '$row2[besoldung]', '$next_wert', '$row2[stufe]', 'F')");
              #echo "Fiktiver Grundgehalt erfasst für $row2[besoldung] Stufe: $row2[stufe] zum Datum $akt_mon: $next_wert €<br>";
            } else {
              $result_insert = $db->query("INSERT INTO prog_tmp_grundgehalt (startdat, besoldung, betrag, stufe, art) VALUES ('$akt_mon-01', '$row2[besoldung]', '$row_last_wert[betrag]', '$row2[stufe]', 'F')");
              #echo "Fiktiver Grundgehalt erfasst für $row2[besoldung] Stufe: $row2[stufe] zum Datum $akt_mon: $row_last_wert[betrag] €<br>";
            }
            
          }
        }
      }
    }
    
    $result_modify   = $db->query("UPDATE prog_grundgehalt
                                      SET modify_date = NULL
                                  ");
  } // Ende, wenn es keine Änderungen gibt
}

#func_grundgehalt(2);

?>