<?php
require_once ("config.inc.php");
#require("progress/ProgressClass.php");

function func_LB_obergrenze_Limit_stufe1()
{



  // Die Professoren können nur maximal so viele Zulagen erhalten, bis sie zum Grundgehalt C3 kommen
  // Die Entwicklung der Grundgehälter wird in prog_tmp_lb_obergrenze vermerkt.
  // Die Differenz aus W2 und C3 darf maximal als Zulage gewährt werden.
  // Diese Funktion überprüft, ob das Limit überschritten wurde und setzt die Zulage LZ ggf. auf 0
  // Es müssen Leistungszulagen LZ und BZ verglichen werden, dass die Summe der beiden nicht größer ist als die maximale Zulage
  // BZ kann derzeit nicht geprüft werden, da dort nur ein Jahreswert erfasst wird, ohne Aufsplittung auf die Professoren.
  // Vorgehensweise:
  // Schleife über alle Professoren

  $db = dbconnect();
  $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'];
  
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // Mit Stufe 2 wird diese Obergrenze nur noch bis 31.12.2017 angewendet. Dann gilt Stufe 2
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  $ende = "2017-12-31";
  $end = date_create($ende, new DateTimeZone('GMT'));
  

  $diff = $start->diff($end);
  $monate = ($diff->y*12)+$diff->m;
  
// Differenz in Jahren, Tagen und Monaten
#echo "Differenz: " . $diff->y . " Jahr(e), " . $diff->m . " Monat(e), " . $diff->d . " Tag(e)<br>" . PHP_EOL;
 
// Differenz in Tagen
#echo "Differenz: $monate Monate<br>" . PHP_EOL;


#printf('Jahr(e), %u Monat(e), %u Tag(e)', $diff->m, $diff->d);
#exit;  
  
  #$progress=new ProgressClass();
  #$progress->setWidth(800);
  #$progress->make();
  #$ln_zaehler = 0;
  
  foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) {
    $akt_mon = $cur->format('Y-m-01');
    
#echo "Start $row_minjahr[jahr]-01-01 | Ende $ende | AktMon $akt_mon<br>";
    #$akt_mon_for = $cur->format('M Y');
    
                       #$ln_zaehler = $ln_zaehler+1;
		       #$progress->setPerX($ln_zaehler,$monate);
		       #$iproz = 90/$monate*$ln_zaehler;
		       #$progress->setBarColor('#'.dechex(100-$iproz+156).dechex($iproz+80).'00');
		       
		       #$progress->setLabel('max. LBZ berechnen - Monat: '.$akt_mon_for);

    // Hier müsste die Zulage BZ noch berücksichtigt werden: prog_tmp_lb_bz c

    $query_chk = "SELECT a.monat, did, sum(wert) wert, a.art, tlblzid, w2, c3, max_zulage, b.art
                        FROM prog_tmp_lb_lz a, prog_tmp_lb_obergrenze b
                       WHERE a.monat=b.ab_datum
                         AND a.monat='$akt_mon'
                       GROUP by did
                 ";
    $result_chk = $db->query($query_chk) or die("Cannot execute query_chk");
    while ($row_chk = $result_chk->fetch_array()) {
      if ($row_chk['wert'] > $row_chk['max_zulage']) {
        $akt_zulage = $row_chk['wert'];

        // Schleife bis die maximale Zulage größer ist, als die Summe der Zulagen
        // Gestrichen werden die fiktiven Zulagen LZ
        // Testfall: Zwei Zulagen kurz vor dem Ruhestand extrem erhöhen, diese müssten beide gestrichen werden:
        // update prog_tmp_lb_lz set wert = 5000 where did = 12 and lblzid in (1005,1006);

        for ($i = $row_chk['max_zulage']; $i < $akt_zulage; $i++) {
          $query_letztezul = $db->query("SELECT max(lblzid) lblzid
                                               FROM `prog_tmp_lb_lz`
                                              WHERE wert != 0
                                                AND monat = '$akt_mon'
                                                AND art = 'F'
                                                AND did=$row_chk[did]
                                            ");
          $row_letztezul = $query_letztezul->fetch_array();

          // Die komplette Zulage streichen und Kenner O=Obergrenze setzen
          // Nur bis zum Enddatum in Stufe 1:
          if($row_letztezul['lblzid'] != ''){
          $result_zul = $db->query("UPDATE prog_tmp_lb_lz 
                                           SET wert = '0'
                                              ,art = 'O'
                                         WHERE lblzid = $row_letztezul[lblzid]
                                           AND did=$row_chk[did]
                                           AND monat <= '$ende'
                                       ");
          }
          // Prüfen, ob wie hoch die aktuelle Zulage ist, damit aus der Schleife ausgestiegen werden kann

          $query_aktzul = $db->query("SELECT sum(wert) wert
                                            FROM `prog_tmp_lb_lz`
                                           WHERE monat = '$akt_mon'
                                             AND did=$row_chk[did]
                                            ");
          $row_aktzul = $query_aktzul->fetch_array();
          $akt_zulage = $row_aktzul['wert'];
        }
      }
    }
  }
  #$progress->hide();
}

#func_LB_obergrenze_Limit_stufe1();
?>