PHP/MySQL Problem beim berechnen von Überstunden

S

sideshow

Mitglied
Thread Starter
Dabei seit
24.01.2005
Beiträge
92
Reaktionspunkte
0
Tach allerseits!

Eigentlich ist mein Problem eher ein Denkproblem oder mathematischer Natur, ich poste es einfach trotzdem mal! :)

Also, folgendes:
Ich habe für meinen Betrieb eine Browserbasierte Zeiterfassung geschrieben. Das Ganze sieht so aus das sich der User einloggt, Start- und Enzeit seiner Tätigkeit eingibt und er so einen Überblick über seine Arbeitszeit hat und der Chef kann alles leichter abrechnen.

Ich würde nun gerne die Überstunden die ein Angestellter erarbeitet hat anzeigen lassen. Ist ja auch so gesehen nicht so schwer. Ich habe in der Datenbank bei den Userdaten die Wochenarbeitszeit eines Users gespeichert - z.B. 39 Stunden.

Teile ich das durch 5 (Arbeitstage) bekomme ich die Soll-Zeit die ein Angestellter am Tag arbeiten sollte (7,8 Stunden). Nun lässt es sich leicht ausrechnen was wieviel Überstunden jemand am Tag hat.
Ich nehme jeden Zeiteintrag eines Users des Tages, errechne die Zeit die er insgesamt gearbeitet hab und somit hab ich Überstunden (oder eben auch nicht :))
Das funktioniert auch ohne Probleme!

Jetzt zu meinem Problem:
Ich hätte das auch gerne für die gesamten Überstunden. Die Rechnungsgrundlage ist ja eigentlich die gleiche - nur das ich vorher sehen muss wieviel Tage der User gearbeitet hat (also wie viele in der DB als Eintrag da sind).
Also, sagen wir mal ein Angestellter hat fünf Tage gearbeitet (39 Stunden) - dann rechnet sich das recht leicht - nun aber zu meiner Problematik!

Angenommen der Angestelle ist ganz frisch in der Firma und schreibt den ersten Tag ins System und kommt prompt auf 10 Stunden. Dann hat er 10 - 7,8 = 2,2 Überstunden. Am Tag wie gesamt.
So, wenn ich jetzt aber einen Tag weiter springe (dann wird ja auch die Überstundenanzeige neu gerendert und berechnet).
Dann springt meine Überstundentagesanzeige auf 0 - soll sie ja auch und ist soweit OK.
Die Überstundengesamtanzeige steht weiterhin auf 2,2.
ABER: Trage ich jetzt die erste Tätigkeit ein - sagen wir von 8 Uhr bis 11 Uhr, dann fließt der Tag in die Berechnung mit ein und mein Zähler der Gesamtüberstunden springt wieder auf 0. Wenn ich ganz genau 7,8 (also die Tagesstunden) Stunden arbeite, dann bin ich nachher wieder bei 2,2 Überstunden. Arbeite ich auch an diesem Tag länger fließt das in die Überstundenberechnung mit ein.
Die Berechnung ist somit völlig korrekt, nur das auf NULL springen nervt mich.

Hat da jemand ne Idee wie man das lösen könnte?

Ich hoffe, ihr versteht mein Problem - schriftlich erklärt so ganz ohne Hintergrund und Grafiken ist das glaub ich nicht einfach! :/ Noch dazu erkläre ich so schlecht! ;D
 
Eine zweite Anzeige der Berechnung OHNE den aktuellen Tag. Dann hat man beides: 1. wieviel habe ich, wenn ich jetzt aufhöre und 2. wieviel hatte ich bis gestern Abend.

Greetz
Thomas
 
  • Gefällt mir
Reaktionen: sideshow
Eine zweite Anzeige der Berechnung OHNE den aktuellen Tag. Dann hat man beides: 1. wieviel habe ich, wenn ich jetzt aufhöre und 2. wieviel hatte ich bis gestern Abend.

Greetz
Thomas

Mh... das ist gar keine so schlechte Idee! Ich glaube du hast mich da auf ne Lösung gebracht!

Danke Dir!!!:)
Endlich hat das :kopfkratz: ein Ende!
 
Wieso speicherst du den Ü-Datensatz nicht auch in die db ab?

z.b. deine StoreDayIntoDB methode könnte doch den entsprechenden wert in die db schreiben und beim auslesen hast du es in deinem datensatz-objekt.
 
Wieso speicherst du den Ü-Datensatz nicht auch in die db ab?

z.b. deine StoreDayIntoDB methode könnte doch den entsprechenden wert in die db schreiben und beim auslesen hast du es in deinem datensatz-objekt.

So was hab ich mir auch schon durch den Kopf gehen lassen... aber noch nicht so richtig. Das wäre natürlich auch eine gute Möglichkeit! In meiem Fall schmeisse ich nicht einen "ganzen" Tag in die Datenbank sondern immer einen Eintrag "Von - Bis". Sieht ungefähr so aus:

Code:
ID    user_id    time_from_ts    time_to_ts    time_duration_ts    ...
 1             3    11188828828    11188829023 xxxxxxx

Und jetzt müsste ich mir quasi einfallen lassen, wo ich die Überstunden des Users hinschreibe. Was dann wohl sinn machen würde, wenn ich die Überstunden an den User in der User-Table hängen würde...

Ich setz mich morgen mal dran in der Arbeit - wenn ich eine Lösung gefunden hab dann poste ich sie.

Ansonsten - wenn mir nix gescheites einfällt - dann lass ich es so wie es ist. Es funktioniert ja wie gesagt, es ist nur etwas "unschön".
 
So was hab ich mir auch schon durch den Kopf gehen lassen... aber noch nicht so richtig. Das wäre natürlich auch eine gute Möglichkeit! In meiem Fall schmeisse ich nicht einen "ganzen" Tag in die Datenbank sondern immer einen Eintrag "Von - Bis". Sieht ungefähr so aus:

Code:
ID    user_id    time_from_ts    time_to_ts    time_duration_ts    ...
 1             3    11188828828    11188829023 xxxxxxx

Und jetzt müsste ich mir quasi einfallen lassen, wo ich die Überstunden des Users hinschreibe. Was dann wohl sinn machen würde, wenn ich die Überstunden an den User in der User-Table hängen würde...

Ich setz mich morgen mal dran in der Arbeit - wenn ich eine Lösung gefunden hab dann poste ich sie.

Ansonsten - wenn mir nix gescheites einfällt - dann lass ich es so wie es ist. Es funktioniert ja wie gesagt, es ist nur etwas "unschön".

Aber wie man den laufenden Tag behandelt, ist doch von der Implementierung unabhängig. Wenn ich 7 Überstunden habe und morgens beginne, habe ich ja rechnerisch alles aufgebraucht, was aber nicht ganz der Erwartung entspricht. Also muss ich den aktuellen Tag irgendwie gesondert behandeln.

Wie auch immer.
Ciao Thomas
 
Jo, genau da liegt das Problem!!! :)

Ich denke ich weiss jetzt wie ich es behandeln muss und werde mich morgen früh gleich mal dran setzen!!!
 
Zurück
Oben Unten