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

function func_LB_obergrenze_Limit($obergrenze)
{
$beginn_ges = microtime(true); 


  // Die Professoren können nur maximal 1000€ Zulagen haben aus BZ und LZ
  // 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
    // 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'];
  $end = date_create($ende, new DateTimeZone('GMT'));
 
#  foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) {
#    $akt_mon = $cur->format('Y-m-01');
  
  
    $query_chk = "SELECT did, sum(wert) wert_lz, monat
                    FROM prog_tmp_lb_lz
                GROUP BY did, monat
                ORDER BY did
                 ";
    $result_chk = $db->query($query_chk) or die("Cannot execute query_chk");
    while ($row_chk = $result_chk->fetch_array()) {
     
/* Schleifeninhalte
10 	125.00 	2017-12-01
10 	125.00 	2018-01-01
10 	125.00 	2018-02-01
*/
       
      $query_zulbz = $db->query("SELECT sum(wert) wert_bz
                                   FROM prog_tmp_lb_bz a
                                  WHERE did='$row_chk[did]'
                                    AND a.monat='$row_chk[monat]'
                                  GROUP by did
                                ");
       $row_zulbz = $query_zulbz->fetch_array();
       $akt_zulage = $row_zulbz['wert_bz'] + $row_chk['wert_lz'];
# wert_bz: 954.7100
# wert_lz: 125.00
# akt_zulage: 1079,74

       if($akt_zulage > $obergrenze){
 #        echo "$row_chk[did]: $row_chk[monat] -> $akt_zulage | ";
         
         
         
         
         
        // 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 werdne:
        // update prog_tmp_lb_lz set wert = 5000 where did = 12 and lblzid in (1005,1006);

        for ($i = $obergrenze; $i < $akt_zulage; $i++) {
        # Es kann eine Dauerschleife entstehen, wenn kein Wert mehr gekürzt werden kann, also keine fiktiven Leistungszulagen mehr. Dann muss der Wert akt_zulage unter Obergrenze gesetzt werden, damit es weitergeht
          $query_letztezul = $db->query("SELECT max(lblzid) lblzid
                                               FROM `prog_tmp_lb_lz`
                                              WHERE wert != 0
                                                AND monat = '$row_chk[monat]'
                                                AND art = 'F'
                                                AND did=$row_chk[did]
                                            ");
          $row_letztezul = $query_letztezul->fetch_array();

          // Die komplette Zulage streichen und Kenner O=Obergrenze setzen

          $result_zul = $db->query("UPDATE prog_tmp_lb_lz 
                                       SET wert = '0'
                                          ,art = 'O'
                                     WHERE lblzid = $row_letztezul[lblzid]
                                       AND monat = '$row_chk[monat]'
                                       AND did=$row_chk[did]
                                  ");

          // 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 = '$row_chk[monat]'
                                             AND did=$row_chk[did]
                                            ");
          $row_aktzul = $query_aktzul->fetch_array();
          
          # Gibt es noch Kürzungspotential? Damti keine Dauerschleife entsteht, wenn kein Update auf fiktive Beträge mehr gemacht werden kann
          $query_ds = $db->query("SELECT count(*) Anz
                                    FROM `prog_tmp_lb_lz`
                                   WHERE monat = '$row_chk[monat]'
                                     AND did=$row_chk[did]
                                     AND wert != '0.00'
                                     AND art='F'
                                 ");
          $row_ds = $query_ds->fetch_array();
          
          if($row_ds['Anz'] == 0){
            $akt_zulage = $obergrenze - 1;
          }else{
            $akt_zulage = $row_aktzul['wert']+$row_zulbz['wert_bz'];
          }
          
        }
#         echo "summe neu $akt_zulage<br>";
         
         
         
         
         
         
         
         
         
       }
    }            
  #}
$dauer2 = number_format(microtime(true)-$beginn_ges, 2, ',', '.');
#        echo"<hr><b>$dauer2</b>";    
}

#func_LB_obergrenze_Limit(1000);
?>