Hallo Ihrs,
ich habe ein Eingabeformular, in welchem Mitarbeiter ihre geleisteten Stunden eintragen können. Die Tagesleistung umfasst maximal 9 Stunden, wobei die letzte 1/2 Stunde eine andere Abrechnungsnummer hat. Also 1 - 8,5 Stunden Lohnart 1, von 8,5 - 9 Stunden Lohnart 29.
Nun habe ich es so programmiert, dass nach Eintrag der geleisteten Stunden in die DB, die geleisteten Stunden bezogen auf Mitarbeiternummer, Datum und Auftragsnummer addiert werden, und wenn die 1/2 Stunde schlagend wird, der letzte Eintrag um diese 1/2 Stunde reduziert und eine neue Zeile mit dieser 1/2 Stunde zur DB hinzugefügt wird.
Das Ganze funktioniert.
Nun darf aber die Tagesleistung die 9 Stunden nicht übersteigen. Somit habe ich es nun so, dass die Tagesleistung bezogen auf Mitarbeiternummer und Tag addiert wird. Auch hier wird dann bei der Auftragsnummer, bei welcher die 1/2 Stunde angefallen ist, um diese reduziert wird und diese 1/2 Stunde in einer neuen Zeile mit der Lohnart 29 zur DB hinzugefügt wird.
Auch das funktioniert.
Mein Problem ist nun, dass ich diese zwei Optionen auf einem Skript habe und daher immer beide angesprochen werden.
Wie kann ich es so programmieren, dass immer nur eine der beiden Optionen ausgeführt wird?
Der Fehler: die 1/2 Stunde wird zweimal in die DB eingetragen.
Hier der Code, mit welchem Mitarbeiternummer, Datum und Auftragsnummer addiert werden und dann die 1/2 Stunde vom vorigen Eintrag abgezogen wird und diese 1/2 Stunde dann in eine neue Zeile geschrieben wird:
Auf demselben Script habe ich nun auch die Option, mit welcher das Ganze nur bezogen auf Mitarbeiternummer und Tag durchgeführt wird.
Hier ist der Code der selbe, mit der Ausnahme, dass die Auftragsnummer
nicht abgefragt wird.
Denke, dass sich das Ganze schon lösen lässt, ich aber den Weg dazu nicht weiß.
Könnt Ihr mir bitte helfen? Danke
ich habe ein Eingabeformular, in welchem Mitarbeiter ihre geleisteten Stunden eintragen können. Die Tagesleistung umfasst maximal 9 Stunden, wobei die letzte 1/2 Stunde eine andere Abrechnungsnummer hat. Also 1 - 8,5 Stunden Lohnart 1, von 8,5 - 9 Stunden Lohnart 29.
Nun habe ich es so programmiert, dass nach Eintrag der geleisteten Stunden in die DB, die geleisteten Stunden bezogen auf Mitarbeiternummer, Datum und Auftragsnummer addiert werden, und wenn die 1/2 Stunde schlagend wird, der letzte Eintrag um diese 1/2 Stunde reduziert und eine neue Zeile mit dieser 1/2 Stunde zur DB hinzugefügt wird.
Das Ganze funktioniert.
Nun darf aber die Tagesleistung die 9 Stunden nicht übersteigen. Somit habe ich es nun so, dass die Tagesleistung bezogen auf Mitarbeiternummer und Tag addiert wird. Auch hier wird dann bei der Auftragsnummer, bei welcher die 1/2 Stunde angefallen ist, um diese reduziert wird und diese 1/2 Stunde in einer neuen Zeile mit der Lohnart 29 zur DB hinzugefügt wird.
Auch das funktioniert.
Mein Problem ist nun, dass ich diese zwei Optionen auf einem Skript habe und daher immer beide angesprochen werden.
Wie kann ich es so programmieren, dass immer nur eine der beiden Optionen ausgeführt wird?
Der Fehler: die 1/2 Stunde wird zweimal in die DB eingetragen.
Hier der Code, mit welchem Mitarbeiternummer, Datum und Auftragsnummer addiert werden und dann die 1/2 Stunde vom vorigen Eintrag abgezogen wird und diese 1/2 Stunde dann in eine neue Zeile geschrieben wird:
PHP:
// Abfrage der Tabelle bezogen auf die MA - Nummer und Auftragsnummer
$sql = "SELECT *,SUM(hGesamt) as 'summe' FROM r_abrechnung ".
"WHERE persnr ='".$_SESSION['user_persnr']."' ".
"AND status = 1 ".
"AND dat = '".$dat."' ".
"AND auftragsNr = '".$auftragsNr."' ".
"group BY 'dat' ORDER BY 'id' DESC";
$res = mysql_query ($sql) or die (mysql_errno() . ": Keine Verbindung zu \"r_abrechnung\"! " . mysql_error());
$num = mysql_num_rows($res);
while ($row = mysql_fetch_object($res)){
if($row->summe > 8.5){
$erg = ($row->summe - 8.5);
$auf = "INSERT INTO r_abrechnung (tag,monat,jahr,dat,auftragsNr,arbBericht," .
"beginH,beginM,endH,endM,lohn1,noLa1,lohn29,zaLa29,lohn2,zaLa2,lohn3,zaLa3,lohn19,diaeten,lohn8,kmAbFa,lohn9,za,lohn12,".
"amtsstunden,lohn13,arzt,hGesamt,".
"persNr,status,alias)" .
" VALUES ('$row->tag','$row->monat','$row->jahr','$row->dat','$row->auftragsNr',''," .
"'','','','','','','$row->lohn29','$erg','','','','',".
"'','','','','','','','','','','$erg','$row->persNr',1,'$row->persNr')";
mysql_query ($auf,$connection) or die (mysql_errno() . ": ZaLa29 " . mysql_error());
// Nun vom vorletzten Eintrag 0.5h abziehen
$sql = "SELECT * FROM r_abrechnung ORDER BY id DESC LIMIT 2";
$erg = mysql_query($sql) or die("MySQL-Fehler ".mysql_error());
$letzter = mysql_fetch_array($erg);
$vorletzter = mysql_fetch_array($erg);
mysql_free_result($erg);
$uts = mktime($vorletzter[endH], $vorletzter[endM]);
$uts -= 1800;
$stunde = date('H', $uts);
$minute = date('i', $uts);
$ergH = ($vorletzter['hGesamt'] - 0.5);
$upd = "UPDATE r_abrechnung set ";
$upd .= "tag = '$vorletzter[tag]',";
$upd .= "monat = '$vorletzter[monat]',";
$upd .= "jahr = '$vorletzter[jahr]',";
$upd .= "dat = '$vorletzter[dat]',";
$upd .= "auftragsNr = '$vorletzter[auftragsNr]',";
$upd .= "arbBericht = '$vorletzter[arbBericht]',";
$upd .= "beginH = '$vorletzter[beginH]',";
$upd .= "beginM = '$vorletzter[beginM]',";
$upd .= "endH = '$stunde',";
$upd .= "endM = '$minute',";
$upd .= "noLa1 = '$ergH',";
$upd .= "zaLa29 = '$vorletzter[zaLa29]',";
$upd .= "zaLa2 = '$vorletzter[zaLa2]',";
$upd .= "zaLa3 = '$vorletzter[zaLa3]',";
$upd .= "hGesamt = '$ergH',";
$upd .= "diaeten = '$vorletzter[diaeten]',";
$upd .= "kmAbFa = '$vorletzter[kmAbFa]'";
$upd .= "WHERE persnr = '$vorletzter[persNr]'";
$upd .= " AND status = 1";
$upd .= " AND dat = '$vorletzter[dat]'";
$upd .= " AND auftragsNr = '$vorletzter[auftragsNr]'";
$upd .= " AND id = '$vorletzter[id]'";
mysql_query ($upd,$connection) or die (mysql_errno() . ": upd " . mysql_error());
}
}
Auf demselben Script habe ich nun auch die Option, mit welcher das Ganze nur bezogen auf Mitarbeiternummer und Tag durchgeführt wird.
Hier ist der Code der selbe, mit der Ausnahme, dass die Auftragsnummer
PHP:
"AND auftragsNr = '".$auftragsNr."' ".
Denke, dass sich das Ganze schon lösen lässt, ich aber den Weg dazu nicht weiß.
Könnt Ihr mir bitte helfen? Danke
Zuletzt bearbeitet: