fix BelegteSchichtenCount bei Ueberbelegung *AlleSchichten.php. Andere Files noch mit altem Count
This commit is contained in:
parent
d582440ae3
commit
022387d1f6
|
|
@ -65,25 +65,32 @@ echo "<button type='button' onclick='expand_all_table_rows();'>Alles Ausklappen<
|
||||||
function ZeigeHelferLevelTabelle($db_link,$HelferLevel,$HelferLevelAnzeige){
|
function ZeigeHelferLevelTabelle($db_link,$HelferLevel,$HelferLevelAnzeige){
|
||||||
// fuer Anzahlanzeige in Ueberschrift
|
// fuer Anzahlanzeige in Ueberschrift
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link);
|
||||||
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
// "Alle Schichten der Con" (Gesamtstatistik besetzt/gewollt)
|
// "Alle Schichten der Con" (Gesamtstatistik besetzt/gewollt)
|
||||||
echo '<table class="commontable">';
|
echo '<table class="commontable">';
|
||||||
echo "<tr class='infoheader'>";
|
echo "<tr class='infoheader'>";
|
||||||
echo "<th colspan='5'>Alle Schichten der Con (Besetzt/Gesamt) " . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . "</th></tr>";
|
echo "<th colspan='5'>Alles: ";
|
||||||
|
echo "Besetzt (+Überbelegt) / Gesamt ";
|
||||||
|
echo "${iBelegteSchichtenCount}(+${iueberBelegteSchichtenCount})/$iAlleSchichtenCount </th></tr>";
|
||||||
|
|
||||||
$alleHelferLevel = alleHelferLevel($db_link);
|
$alleHelferLevel = alleHelferLevel($db_link);
|
||||||
// Summe Ausgabe alle Dienste pro Helferlevel
|
// Summe Ausgabe alle Dienste pro Helferlevel
|
||||||
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
||||||
$meine = "";
|
$meine = "";
|
||||||
if ($HelferLevelIteration == $HelferLevel) {
|
if ($HelferLevelIteration == $HelferLevel) {
|
||||||
$meine = "← Schichten für mich zum eintragen";
|
$meine = "<div style='float:right'>← Schichten für mich zum eintragen</div>";
|
||||||
} else { $meine = "Eintragen hier nur nach Rücksprache mit Orga";}
|
} else { $meine = "<div style='float:right'>Eintragen hier nur nach Rücksprache mit Orga</div>";}
|
||||||
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
||||||
$meine = "$meine - Schichten werden gerade unten angezeigt";
|
$meine = "$meine Schichten werden gerade unten angezeigt";
|
||||||
}
|
}
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelIteration);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link,$HelferLevelIteration);
|
||||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung (Besetzt/Gesamt) (" . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . ") $meine</th></tr>";
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
|
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung ";
|
||||||
|
echo "${iBelegteSchichtenCount}(+$iueberBelegteSchichtenCount)/$iAlleSchichtenCount $meine</th></tr>";
|
||||||
}
|
}
|
||||||
echo '</table>';
|
echo '</table>';
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +102,6 @@ $OldWas = "";
|
||||||
$MeineDienste = SchichtIdArrayEinesHelfers($db_link, $HelferID);
|
$MeineDienste = SchichtIdArrayEinesHelfers($db_link, $HelferID);
|
||||||
//print_r($MeineDienste);
|
//print_r($MeineDienste);
|
||||||
|
|
||||||
echo '</table>';
|
|
||||||
// Tabelle mit allen Diensten und Schichten
|
// Tabelle mit allen Diensten und Schichten
|
||||||
echo '<table class="commontable collapsible">';
|
echo '<table class="commontable collapsible">';
|
||||||
while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
|
while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
|
||||||
|
|
@ -106,8 +112,11 @@ while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
|
||||||
$SchichtID = $zeile['SchichtID'];
|
$SchichtID = $zeile['SchichtID'];
|
||||||
$DienstID = $zeile['DienstID'];
|
$DienstID = $zeile['DienstID'];
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevelAnzeige, $DienstID);
|
||||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) <!-- Abfrage $HelferLevel, $DienstID -->";
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
|
$ueberBelegteSchichten = ($iueberBelegteSchichtenCount >0) ? "[+$iueberBelegteSchichtenCount]" : "";
|
||||||
|
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) $ueberBelegteSchichten <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||||
echo "</th>";
|
echo "</th>";
|
||||||
echo "</tr>";
|
echo "</tr>";
|
||||||
SchichtInfo($SchichtID, $InfoWas, $InfoWo, $InfoDauer, $Leiter, $LeiterHandy, $LeiterEmail, $Info);
|
SchichtInfo($SchichtID, $InfoWas, $InfoWo, $InfoDauer, $Leiter, $LeiterHandy, $LeiterEmail, $Info);
|
||||||
|
|
|
||||||
|
|
@ -66,25 +66,32 @@ echo "<button type='button' onclick='expand_all_table_rows();'>Alles Ausklappen<
|
||||||
function ZeigeHelferLevelTabelle($db_link,$HelferLevel,$HelferLevelAnzeige){
|
function ZeigeHelferLevelTabelle($db_link,$HelferLevel,$HelferLevelAnzeige){
|
||||||
// fuer Anzahlanzeige in Ueberschrift
|
// fuer Anzahlanzeige in Ueberschrift
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link);
|
||||||
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
// "Alle Schichten der Con" (Gesamtstatistik besetzt/gewollt)
|
// "Alle Schichten der Con" (Gesamtstatistik besetzt/gewollt)
|
||||||
echo '<table class="commontable">';
|
echo '<table class="commontable">';
|
||||||
echo "<tr class='infoheader'>";
|
echo "<tr class='infoheader'>";
|
||||||
echo "<th colspan='5'>Alle Schichten der Con (Besetzt/Gesamt) " . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . "</th></tr>";
|
echo "<th colspan='5'>Alles: ";
|
||||||
|
echo "Besetzt (+Überbelegt) / Gesamt ";
|
||||||
|
echo "${iBelegteSchichtenCount}(+${iueberBelegteSchichtenCount})/$iAlleSchichtenCount </th></tr>";
|
||||||
|
|
||||||
$alleHelferLevel = alleHelferLevel($db_link);
|
$alleHelferLevel = alleHelferLevel($db_link);
|
||||||
// Summe Ausgabe alle Dienste pro Helferlevel
|
// Summe Ausgabe alle Dienste pro Helferlevel
|
||||||
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
||||||
$meine = "";
|
$meine = "";
|
||||||
if ($HelferLevelIteration == $HelferLevel) {
|
if ($HelferLevelIteration == $HelferLevel) {
|
||||||
$meine = "← Schichten für mich zum eintragen";
|
$meine = "<div style='float:right'>← Schichten für mich zum eintragen</div>";
|
||||||
} else { $meine = "Eintragen hier nur nach Rücksprache mit Orga";}
|
} else { $meine = "<div style='float:right'>Eintragen hier nur nach Rücksprache mit Orga</div>";}
|
||||||
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
||||||
$meine = "$meine - Schichten werden gerade unten angezeigt";
|
$meine = "$meine Schichten werden gerade unten angezeigt";
|
||||||
}
|
}
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelIteration);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link,$HelferLevelIteration);
|
||||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung (Besetzt/Gesamt) (" . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . ") $meine</th></tr>";
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
|
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung ";
|
||||||
|
echo "${iBelegteSchichtenCount}(+$iueberBelegteSchichtenCount)/$iAlleSchichtenCount $meine</th></tr>";
|
||||||
}
|
}
|
||||||
echo '</table>';
|
echo '</table>';
|
||||||
}
|
}
|
||||||
|
|
@ -106,8 +113,11 @@ while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
|
||||||
$SchichtID = $zeile['SchichtID'];
|
$SchichtID = $zeile['SchichtID'];
|
||||||
$DienstID = $zeile['DienstID'];
|
$DienstID = $zeile['DienstID'];
|
||||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevelAnzeige, $DienstID);
|
||||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) <!-- Abfrage $HelferLevel, $DienstID -->";
|
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||||
|
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||||
|
$ueberBelegteSchichten = ($iueberBelegteSchichtenCount >0) ? "[+$iueberBelegteSchichtenCount]" : "";
|
||||||
|
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) $ueberBelegteSchichten <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||||
echo "</th>";
|
echo "</th>";
|
||||||
echo "</tr>";
|
echo "</tr>";
|
||||||
SchichtInfo($SchichtID, $InfoWas, $InfoWo, $InfoDauer, $Leiter, $LeiterHandy, $LeiterEmail, $Info);
|
SchichtInfo($SchichtID, $InfoWas, $InfoWo, $InfoDauer, $Leiter, $LeiterHandy, $LeiterEmail, $Info);
|
||||||
|
|
|
||||||
94
html/SQL.php
94
html/SQL.php
|
|
@ -278,24 +278,7 @@ function AlleSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
||||||
$params[] = $DienstID;
|
$params[] = $DienstID;
|
||||||
$types .= "i";
|
$types .= "i";
|
||||||
}
|
}
|
||||||
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
||||||
$stmt = mysqli_prepare($db_link, $sql);
|
|
||||||
if (!$stmt) {
|
|
||||||
error_log("AlleSchichtenCount prepare failed: " . mysqli_error($db_link));
|
|
||||||
echo "Fehler bei Datenbankabfrage.<br>";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($params) {
|
|
||||||
mysqli_stmt_bind_param($stmt, $types, ...$params);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mysqli_stmt_execute($stmt)) {
|
|
||||||
error_log("AlleSchichtenCount execute failed: " . mysqli_stmt_error($stmt));
|
|
||||||
echo "Fehler bei Ausführung der Abfrage.<br>";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = mysqli_stmt_get_result($stmt);
|
$result = mysqli_stmt_get_result($stmt);
|
||||||
mysqli_stmt_close($stmt);
|
mysqli_stmt_close($stmt);
|
||||||
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
||||||
|
|
@ -305,15 +288,11 @@ function AlleSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
||||||
|
|
||||||
function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
||||||
{
|
{
|
||||||
$sql = "SELECT Count(HelferID) AS Anzahl
|
$sql = "SELECT COUNT(HelferID) AS Anzahl
|
||||||
FROM EinzelSchicht, Schicht, Dienst
|
FROM EinzelSchicht
|
||||||
WHERE EinzelSchicht.SchichtID=Schicht.SchichtID
|
JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
||||||
AND Schicht.DienstID=Dienst.DienstID ";
|
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
||||||
// $sql = "SELECT COUNT(HelferID) AS Anzahl
|
WHERE 1=1";
|
||||||
// FROM EinzelSchicht
|
|
||||||
// JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
|
||||||
// JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
|
||||||
// WHERE 1=1";
|
|
||||||
|
|
||||||
$params = [];
|
$params = [];
|
||||||
$types = '';
|
$types = '';
|
||||||
|
|
@ -329,24 +308,7 @@ function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#
|
||||||
$params[] = $DienstID;
|
$params[] = $DienstID;
|
||||||
$types .= 'i';
|
$types .= 'i';
|
||||||
}
|
}
|
||||||
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
||||||
$stmt = mysqli_prepare($db_link, $sql);
|
|
||||||
if (!$stmt) {
|
|
||||||
error_log("Prepare failed: " . mysqli_error($db_link));
|
|
||||||
echo "Abfrage konnte nicht vorbereitet werden.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($params)) {
|
|
||||||
mysqli_stmt_bind_param($stmt, $types, ...$params);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mysqli_stmt_execute($stmt)) {
|
|
||||||
error_log("AlleBelegteSchichtenCount Execute failed: " . mysqli_stmt_error($stmt));
|
|
||||||
echo "Abfrage konnte nicht ausgeführt werden.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = mysqli_stmt_get_result($stmt);
|
$result = mysqli_stmt_get_result($stmt);
|
||||||
mysqli_stmt_close($stmt);
|
mysqli_stmt_close($stmt);
|
||||||
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
||||||
|
|
@ -354,6 +316,48 @@ function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#
|
||||||
return $zeile['Anzahl'];
|
return $zeile['Anzahl'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevel = -1, $DienstID = -1) {
|
||||||
|
$sql = "SELECT
|
||||||
|
SUM(LEAST(Soll, Belegt)) AS Besetzt,
|
||||||
|
SUM(GREATEST(0, Belegt - Soll)) AS Ueberbelegt
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
Schicht.SchichtID,
|
||||||
|
COUNT(EinzelSchicht.HelferID) AS Belegt,
|
||||||
|
Schicht.Soll
|
||||||
|
FROM Schicht
|
||||||
|
LEFT JOIN EinzelSchicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
||||||
|
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
||||||
|
WHERE 1=1";
|
||||||
|
|
||||||
|
$params = [];
|
||||||
|
$types = "";
|
||||||
|
|
||||||
|
if ($HelferLevel != -1) {
|
||||||
|
$sql .= " AND Dienst.HelferLevel = ?";
|
||||||
|
$params[] = $HelferLevel;
|
||||||
|
$types .= "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($DienstID != -1) {
|
||||||
|
$sql .= " AND Dienst.DienstID = ?";
|
||||||
|
$params[] = $DienstID;
|
||||||
|
$types .= "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql .= " GROUP BY Schicht.SchichtID, Schicht.Soll
|
||||||
|
) AS Belegung";
|
||||||
|
|
||||||
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
||||||
|
$result = mysqli_stmt_get_result($stmt);
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
|
||||||
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
||||||
|
return [
|
||||||
|
'besetzt' => (int)($zeile['Besetzt'] ?? 0),
|
||||||
|
'ueberbelegt' => (int)($zeile['Ueberbelegt'] ?? 0)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function AlleSchichtenImZeitbereich($db_link, $Von, $Bis, $HelferLevel = -1)#stmt
|
function AlleSchichtenImZeitbereich($db_link, $Von, $Bis, $HelferLevel = -1)#stmt
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue