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

function func_LB_FZ()
{

  // Berechnung der Leistungszulagen für die Wahrnehmung von Funktionen
  // Ermitteln des Anfangsdatum (vergaberahmen
  // Ermitteln des Enddatum (wenn der letze in Ruhestand geht)
  // START: Schleife über alle Funktionen
  //        START: ForEach Schleife über alle Monate
  //                START: Wenn gueltig_bis im katalog überschritten ist bzw. Startdatum erreicht, dann keine weitere Hochrechnung mehr (inserts) bzw. ab startdatum erst loslegen
  //                       START: Wie viele Einträge in Tab prog_lb_fz gibt es für diesen Monat or enddat =0000-00-00?
  //                       >0, dann Wert gefunden, dann Art=B
  //                           START: Schleife über die hinterlegten Beträge, zu diesem Monat
  //                                  Insert into prog_tmp_lb_fz, art=B
  //                           ENDE: Schleife über die hinterlegten Beträge, zu diesem Monat
  //                       ELSE: Wenn kein Eintrag in Tab prog_lb_fz gefunden wurde, dann letze Monatssumme mit Art=B zugrunde legen
  //                       -- Wert nicht gefunden, dann Art=F
  //                                  Insert into prog_tmp_lb_fz, art=F
  //                       ENDE: Wenn kein Betrag hinterlegt ist, dann letzten Betrag für diese Funktion für die Hochrechnung annehmen
  //                ENDE: Wenn gueltig_bis im katalog überschritten ist bzw. Startdatum erreicht, dann keine weitere Hochrechnung mehr (inserts) bzw. ab startdatum erst loslegen
  //        ENDE: ForEach Schleife über alle Monate
  // ENDE: Schleife über alle Funktionen

  $db = dbconnect();
  $result_truncate = $db->query("TRUNCATE TABLE prog_tmp_lb_fz");
  $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');
  
  # 1 Monat abziehen, da man wissen möchte, in welchem Monat der Prof seine letzte Zulage bekommt. In der DB steht der erste Tag der Pension
  $query_maxjahr = $db->query("SELECT date_format(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'));
  $query = "SELECT kfid, date_format(gueltig_ab, '%Y-%m') gueltig_ab_form, date_format(gueltig_bis, '%Y-%m') gueltig_bis_form
              FROM prog_kat_funktionen
             ORDER BY kfid ASC";
  $result = $db->query($query) or die("Cannot execute query");
  while ($row = $result->fetch_array()) {

    // $start = date_create_from_format('Y-m-d', $row['startdat_form'], new DateTimeZone('GMT'));

    foreach(new DatePeriod($start, new DateInterval('P1M') , $end) as $cur) { // START: ForEach Schleife über alle Monate

      // echo $cur->format('Y-m')."<br />";

      $akt_mon = $cur->format('Y-m');
      #$query_gueltig = $db->query("SELECT date_format(gueltig_bis, '%Y-%m') gueltig_bis_form
      #                                       FROM prog_kat_funktionen
      #                                      WHERE kfid=$row[kfid]
      #                                    ");
      #$row_gueltig = $query_gueltig->fetch_array();
      if (($row['gueltig_bis_form'] == '0000-00' OR $row['gueltig_bis_form'] >= $akt_mon) AND $row['gueltig_ab_form'] <= $akt_mon) { // START: Wenn gueltig_bis im katalog überschritten ist, dann keine weitere Hochrechnung mehr (inserts) bzw. wenn das Beginndatum erreicht wurde

        //            echo $cur->format('Y-m')." - $row[bezeichnung] - $row[gueltig_bis_form]<br />";

        $query_aktbesetz = $db->query("SELECT count(*) Anz
                                             FROM prog_lb_fz
                                            WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
                                              AND (date_format(enddat, '%Y-%m') >= '$akt_mon'  OR enddat = '0000-00-00')
                                              AND kfid=$row[kfid]
                                          ");
        $row_aktbesetz = $query_aktbesetz->fetch_array();
        if ($row_aktbesetz['Anz'] > 0) {

          // dann Wert gefunden, dann Art=B
          // START: Schleife über die hinterlegten Beträge, zu diesem Monat

          $query_aktbes = "SELECT lbfzid, wert, did
                                 FROM prog_lb_fz
                                WHERE date_format(startdat, '%Y-%m') <= '$akt_mon'
                                  AND (date_format(enddat, '%Y-%m') >= '$akt_mon'  OR enddat = '0000-00-00')
                                  AND kfid=$row[kfid]";
          $result_aktbes = $db->query($query_aktbes) or die("Cannot execute query_aktbes");
          while ($row_aktbes = $result_aktbes->fetch_array()) {
            $result_insert = $db->query("INSERT INTO prog_tmp_lb_fz (lbfzid, monat, did, kfid, wert, art) VALUES ($row_aktbes[lbfzid], '$akt_mon-01', $row_aktbes[did], $row[kfid], $row_aktbes[wert], 'B')");
          }
        }
        else {

          // ELSE: Wenn kein Eintrag in Tab prog_lb_fz gefunden wurde, dann letze Monatssumme mit Art=B zugrunde legen

          $query_lastbes_mon = $db->query("SELECT max(monat) monat
                                             FROM prog_tmp_lb_fz
                                            WHERE date_format(monat, '%Y-%m') < '$akt_mon'
                                              AND kfid=$row[kfid]
                                              AND art='B'
                                            ORDER BY monat desc
                                            LIMIT 1
                                          ");
          $row_lastbesetz_mon = $query_lastbes_mon->fetch_array();
          $query_lastbes = $db->query("SELECT sum(wert) wert
                                         FROM prog_tmp_lb_fz
                                        WHERE monat='$row_lastbesetz_mon[monat]'
                                          AND kfid=$row[kfid]
                                          AND art='B'
                                      ");
          $row_lastbesetz = $query_lastbes->fetch_array();
          if ($row_lastbesetz['wert'] != "") {

            // echo "INSERT INTO prog_tmp_lb_fz (lbfzid, monat, did, kfid, wert, art) VALUES (0, '$akt_mon-01', 0, $row[kfid], $row_lastbesetz[wert], 'F')<br />";

            $result_insert = $db->query("INSERT INTO prog_tmp_lb_fz (lbfzid, monat, did, kfid, wert, art) VALUES (0, '$akt_mon-01', 0, $row[kfid], $row_lastbesetz[wert], 'F')");
          } // Ende wenn letzter wert ungleich 0
        } // ENDE: Wenn kein Eintrag in Tab prog_lb_fz gefunden wurde, dann letze Monatssumme mit Art=B zugrunde legen
      } // ENDE: Wenn gueltig_bis im katalog überschritten ist, dann keine weitere Hochrechnung mehr (inserts)
    } // ENDE: ForEach Schleife über alle Monate
  } // ENDE: Schleife über alle Funktionen
} // Ende Funktion
//func_LB_FZ();
?>