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){
|
||||
// fuer Anzahlanzeige in Ueberschrift
|
||||
$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)
|
||||
echo '<table class="commontable">';
|
||||
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);
|
||||
// Summe Ausgabe alle Dienste pro Helferlevel
|
||||
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
||||
$meine = "";
|
||||
if ($HelferLevelIteration == $HelferLevel) {
|
||||
$meine = "← Schichten für mich zum eintragen";
|
||||
} else { $meine = "Eintragen hier nur nach Rücksprache mit Orga";}
|
||||
$meine = "<div style='float:right'>← Schichten für mich zum eintragen</div>";
|
||||
} else { $meine = "<div style='float:right'>Eintragen hier nur nach Rücksprache mit Orga</div>";}
|
||||
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
||||
$meine = "$meine - Schichten werden gerade unten angezeigt";
|
||||
$meine = "$meine Schichten werden gerade unten angezeigt";
|
||||
}
|
||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelIteration);
|
||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung (Besetzt/Gesamt) (" . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . ") $meine</th></tr>";
|
||||
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link,$HelferLevelIteration);
|
||||
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung ";
|
||||
echo "${iBelegteSchichtenCount}(+$iueberBelegteSchichtenCount)/$iAlleSchichtenCount $meine</th></tr>";
|
||||
}
|
||||
echo '</table>';
|
||||
}
|
||||
|
|
@ -95,7 +102,6 @@ $OldWas = "";
|
|||
$MeineDienste = SchichtIdArrayEinesHelfers($db_link, $HelferID);
|
||||
//print_r($MeineDienste);
|
||||
|
||||
echo '</table>';
|
||||
// Tabelle mit allen Diensten und Schichten
|
||||
echo '<table class="commontable collapsible">';
|
||||
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'];
|
||||
$DienstID = $zeile['DienstID'];
|
||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||
$ueberBelegteSchichten = ($iueberBelegteSchichtenCount >0) ? "[+$iueberBelegteSchichtenCount]" : "";
|
||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) $ueberBelegteSchichten <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||
echo "</th>";
|
||||
echo "</tr>";
|
||||
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){
|
||||
// fuer Anzahlanzeige in Ueberschrift
|
||||
$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)
|
||||
echo '<table class="commontable">';
|
||||
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);
|
||||
// Summe Ausgabe alle Dienste pro Helferlevel
|
||||
foreach ($alleHelferLevel as $HelferLevelIteration => $HelferLevelBeschreibung) {
|
||||
$meine = "";
|
||||
if ($HelferLevelIteration == $HelferLevel) {
|
||||
$meine = "← Schichten für mich zum eintragen";
|
||||
} else { $meine = "Eintragen hier nur nach Rücksprache mit Orga";}
|
||||
$meine = "<div style='float:right'>← Schichten für mich zum eintragen</div>";
|
||||
} else { $meine = "<div style='float:right'>Eintragen hier nur nach Rücksprache mit Orga</div>";}
|
||||
if ($HelferLevelIteration == $HelferLevelAnzeige) {
|
||||
$meine = "$meine - Schichten werden gerade unten angezeigt";
|
||||
$meine = "$meine Schichten werden gerade unten angezeigt";
|
||||
}
|
||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelIteration);
|
||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelIteration);
|
||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung (Besetzt/Gesamt) (" . $iBelegteSchichtenCount . "/" . $iAlleSchichtenCount . ") $meine</th></tr>";
|
||||
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link,$HelferLevelIteration);
|
||||
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||
echo "<tr class='infoheader'><th colspan='5' > → Schichten $HelferLevelBeschreibung ";
|
||||
echo "${iBelegteSchichtenCount}(+$iueberBelegteSchichtenCount)/$iAlleSchichtenCount $meine</th></tr>";
|
||||
}
|
||||
echo '</table>';
|
||||
}
|
||||
|
|
@ -106,8 +113,11 @@ while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
|
|||
$SchichtID = $zeile['SchichtID'];
|
||||
$DienstID = $zeile['DienstID'];
|
||||
$iAlleSchichtenCount = AlleSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||
$Belegung = AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevelAnzeige, $DienstID);
|
||||
$iBelegteSchichtenCount = $Belegung['besetzt'];
|
||||
$iueberBelegteSchichtenCount = $Belegung['ueberbelegt'];
|
||||
$ueberBelegteSchichten = ($iueberBelegteSchichtenCount >0) ? "[+$iueberBelegteSchichtenCount]" : "";
|
||||
echo "$Was ($iBelegteSchichtenCount/$iAlleSchichtenCount) $ueberBelegteSchichten <!-- Abfrage $HelferLevel, $DienstID -->";
|
||||
echo "</th>";
|
||||
echo "</tr>";
|
||||
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;
|
||||
$types .= "i";
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
$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);
|
||||
|
|
@ -305,15 +288,11 @@ function AlleSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
|||
|
||||
function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
||||
{
|
||||
$sql = "SELECT Count(HelferID) AS Anzahl
|
||||
FROM EinzelSchicht, Schicht, Dienst
|
||||
WHERE EinzelSchicht.SchichtID=Schicht.SchichtID
|
||||
AND Schicht.DienstID=Dienst.DienstID ";
|
||||
// $sql = "SELECT COUNT(HelferID) AS Anzahl
|
||||
// FROM EinzelSchicht
|
||||
// JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
||||
// JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
||||
// WHERE 1=1";
|
||||
$sql = "SELECT COUNT(HelferID) AS Anzahl
|
||||
FROM EinzelSchicht
|
||||
JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
||||
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
||||
WHERE 1=1";
|
||||
|
||||
$params = [];
|
||||
$types = '';
|
||||
|
|
@ -329,24 +308,7 @@ function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#
|
|||
$params[] = $DienstID;
|
||||
$types .= 'i';
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
$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);
|
||||
|
|
@ -354,6 +316,48 @@ function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#
|
|||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue