it-m-h / SmallTime

Small Time
GNU Affero General Public License v3.0
42 stars 32 forks source link

Darstellung von Zeiten in Stunden:Minuten #11

Open simonschaufi opened 10 years ago

simonschaufi commented 10 years ago

Ich habe das System gefunden und bin sehr begeistert davon. Allerdings werden teilweise Daten unterschiedlich erfasst / angezeigt.

In der Übersicht für den Benutzer zum Beispiel erscheint in der "Std" Spalte: "9.83"

Es gibt keine 83 Minuten, man erkennt hier, dass das auf 100 bezogen ist, müsste aber auf 60 bezogen sein. Damit kann ich mehr anfangen.

Ebenso auch links bei Monatssaldo: "-4.74 Std." und bestimmt noch an vielen anderen Stellen...

mh-77 commented 10 years ago
Das ist
    schon richtig so, in der Stundenerfassung ist es üblich die
    Zeiten nur in Stunden anzugeben mit Kommastellen und nicht in
    Stunden und Minuten.
    Es ist sonst rechnerisch viel zu kompliziert. Beispiel: 9,75 h 
    = 9 h : 45 min     9,75 h + 0,5 h = 10,25 = simple Rechnung
Am 09.07.2014 01:14, schrieb Simon
  Schaufelberger:

  Ich habe das System gefunden und bin sehr begeistert davon.
    Allerdings werden teilweise Daten unterschiedlich erfasst /
    angezeigt.
  In der Übersicht für den Benutzer zum Beispiel erscheint in der
    "Std" Spalte: "9.83"
  Es gibt keine 83 Minuten, man erkennt hier, dass das auf 100
    bezogen ist, müsste aber auf 60 bezogen sein. Damit kann ich
    mehr anfangen.
  Ebenso auch links bei Monatssaldo: "-4.74 Std." und bestimmt
    noch an vielen anderen Stellen...
  —
    Reply to this email directly or view
      it on GitHub.
simonschaufi commented 10 years ago

Bitte seien Sie doch so lieb und übernehmen nicht den kompletten Emailtext mit in die Antwort. Danke.

Das mag wohl bei 9.75 noch einfach sein aber bei 9.83 kann ich das nicht mehr so einfach im Kopf in Minuten umrechnen. Ich fände es gut, wenn man die Ansicht konfigurieren könnte, in welchem Format man die Zeit angezeigt bekommen möchte. ich habe noch kein System gesehen, das die Zeiten auf 100 bezogen ausgibt.

it-m-h commented 10 years ago

Kann ich mal in die Liste aufnehmen, da ich auch schon Anfragen diesbezüglich bekam. Viele Grüsse M. H.

simonschaufi commented 10 years ago

ich kann das auch gerne selbst mal versuchen, ich bin auch php entwickler ;) Ich wollte nur mal fragen, was Sie dazu denken. PS: die Grüße können Sie gerne weg lassen :D Das ist ein Bugtracking und keine Geschäftsemail.

it-m-h commented 10 years ago

TIPP, falls Sie das implementieren möchten: .\include\Settings\settings.txt (neue Zeile mit Titel # wert # Info) wert sollte aufgerufen werden können mit : $_settings->_array[$zeile][0-2] .\modules\sites_admin\admin04_settings_edit.php (zum editieren dort wo es passt HTML einfügen) Speichern: sollte automatisch funktionieren (die anzahl der Zeilen $y wird per POST in der Class settings abgefragt) (Später würde ich gerne die Settings mal in einem JSON speichern zudem die Settings mit Bootstrap - Menues übersichtlicher gestalten, kam aber noch nicht dazu, das fertig zu stellen)

Für die Anzeige da wird intern halt alles dezimal berechnet und es sind viele Stellen die geändert werden müssten, ich denke da lohnt sich der Aufwad kaum, aber anbei die Dateien die mir gerade einfallen im Ordner modules: .\sites_year: sites04_year.php user04_year.php .\sites_user: user04_timetable.php admin04_timetable.php

Dann für den Ausdruck des pdf .\iinclude\time_funktion_pdf.php

Ich hoffe ich habe alles berücksichtigt.

mh-77 commented 10 years ago
Guten
    Abend,
    In der Industrie ist es üblich die Zeiten mit Komma darzustellen
    und zu berechnen. Dies ist zum rechnen viel einfacher, vor allem
    wenn mal was nachkontrolliert werden muss oder die Zeiten in ein
    anderes System übertragen werden müssen. Jeden den ich frage,
    der mit Arbeitszeiten auf dem Job im Personalwesen zu tun hat
    bestätigt mir, dass es üblich ist die Zeiten in Stunden mit den
    Minuten Dezimal darzustellen.
    Googel mal nach Industrieminuten ;-) Von daher finde ich ist
    Smalltime perfekt wie es ist!
    Bitte ja nichts an den Berechnungen ändern! Wenn dann wie
    Vorgeschlagen die Darstellung ändern, das ist einfach zu
    realisieren und als erweiterung fänd ich es grundsätzlich gut..
    Ich würde da jetz aber nicht nur über die Settings gehen zum
    umschalten, sondern auch ein Separater Link im Menü oder so, wo
    man die Anzeige switchen kann. So kann schnell hin und her
    geswitcht werden jenachdem wie ich die Anzeige gerade möchte
    oder brauche.
    LG 
Am 09.07.2014 19:54, schrieb Simon
  Schaufelberger:

  Bitte seien Sie doch so lieb und übernehmen nicht den
    kompletten Emailtext mit in die Antwort. Danke.
  Das mag wohl bei 9.75 noch einfach sein aber bei 9.83 kann ich
    das nicht mehr so einfach im Kopf in Minuten umrechnen. Ich
    fände es gut, wenn man die Ansicht konfigurieren könnte, in
    welchem Format man die Zeit angezeigt bekommen möchte. ich habe
    noch kein System gesehen, das die Zeiten auf 100 bezogen
    ausgibt.
  —
    Reply to this email directly or view
      it on GitHub.
peterbeck commented 9 years ago

Hallo zusammen,

ich habe Smalltime auch jemandem vorgeschlagen (ohne es gross zu kennen), auch dort wurde ziemlich schnell bemerkt, dass die Stunden auf 100 und nicht 60 bezogen sind. Eine Option, dies umzustellen wäre sicherlich angenehm...

Gruss

it-m-h commented 9 years ago

Guten Tag Herr Beck. In der Industrie wird in dezimal gerechnet. Ich habe schon mehrere Anfragen diesbezüglich und habe das in meine ToDo eingefügt. Viele Grüsse M.Heizmann

Am 25. Februar 2015 01:18:54 schrieb Peter Beck notifications@github.com:

Hallo zusammen,

ich habe Smalltime auch jemandem vorgeschlagen (ohne es gross zu kennen), auch dort wurde ziemlich schnell bemerkt, dass die Stunden auf 100 und nicht 60 bezogen sind. Eine Option, dies umzustellen wäre sicherlich angenehm...

Gruss


Reply to this email directly or view it on GitHub: https://github.com/itmastergmbh/SmallTime/issues/11#issuecomment-75880282

thegass commented 7 years ago

ich habe das problem für unsere installation wie folgt gelöst:

in include/time_funktionen.php eine funktion hinzugefügt:

function convertFloatToHHMM($in){
    $hh=(int) $in;
    $mm=fmod((float)$in, 1);
    $format='%02d:%02d';
    if (($hh<0)&&($mm<0)){
        $mm=abs($mm);
    }
    if (($hh>=0)&&($mm<0)){
        $mm=abs($mm);
        $format='-%02d:%02d';
    }
    return sprintf($format, $hh, $mm * 60);
}

und dann an stellen an denen ich HH:MM anstatt der Dezimalwerte sehen will diese Funktion ein die Ausgabe eingebunden

z.B. in modules/sites_user/user04_timetable.php

//-------------------------------------------------------------------------
        // Fusszeile mit den Summen
        //-------------------------------------------------------------------------
        ?>
        <tr>
                <td COLSPAN=3 class=td_background_info width=70 align=center></td>
                <td COLSPAN=<?php echo $t; ?> class=td_background_info width=550 align = left>Sollstunden :
                        <?php
                        echo convertFloatToHHMM($_monat->_SummeSollProMonat); ?> Std.</td>
                <td class=td_background_info width=40 align=center><?php if($_monat->_SummeWorkProMonat>0) echo convertFloatToHHMM($_monat->_SummeWorkProMonat) ?></td>
                <td class=td_background_info width=40 align=center><?php
                        if($_monat->_SummeSaldoProMonat>0){
                                echo convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''));
                        }elseif($_monat->_SummeSaldoProMonat<0){
                                echo "<font class=minus>". convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', '')). "</font>";
                        }
                        ?>
                </td>
                <td COLSPAN=<?php echo $a; ?> class=td_background_info width=50 align=center><?php echo convertFloatToHHMM($_monat->_SummeAbsenzProMonat)?></td>
                <?php
                if($_settings->_array[18][1]) echo "<td class=td_background_info width=16 align=center> </td>";
                ?>
        </tr>
DKeppi commented 6 years ago

In modules/sites_user/user03_stat.php zB.:

Zeile 60: echo "<td class=td_background_tag align=left>".convertFloatToHHMM(number_format($_jahr->_saldo_t, 2, '.', ''))." Std.</td>";

Zeile 87: echo "<td class=td_background_tag align=left>".convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''))." Std.</td>";

DKeppi commented 6 years ago

Gleiches in einigen Zeilen in /modules/sites_year/user04_year.php

DKeppi commented 5 years ago

Leider zeigt es mir in der /modules/sites_year/user04_year.php also in der Jahresübersicht keine Minuswerte an, dort steht dann 00:00 :(

DKeppi commented 5 years ago

Habs hinbekommen, muss zB. lauten

. convertFloatToHHMM(number_format($anzeige[$year]['Summ']['Saldo'], 2, '.', '')) .

DKeppi commented 4 years ago

Falls Interesse besteht kann ich gerne meine veränderten Files zur Verfügung stellen. Es ist dort durchgehend kein Dezimal mehr, sondern nur mehr Std:Min. mit der oben genannten Funktion.

Die commits der letzten Monate/Jahre habe ich manuell ebenfalls mit rein genommen. Ein Update ist ja nicht mehr möglich, da es alles retour auf Dezimal bringen würde!

l1ngu commented 4 years ago

Hallo DKeppi,

ich interessiere mich für die geänderten Files. Ich würde mich freuen. MfG

Falls Interesse besteht kann ich gerne meine veränderten Files zur Verfügung stellen. Es ist dort durchgehend kein Dezimal mehr, sondern nur mehr Std:Min. mit der oben genannten Funktion.

Die commits der letzten Monate/Jahre habe ich manuell ebenfalls mit rein genommen. Ein Update ist ja nicht mehr möglich, da es alles retour auf Dezimal bringen würde!

DKeppi commented 4 years ago

Hier meine Files! Habe vorab noch meine User aus dem Data Verzeichnis entfernt und den Admin auf Standard gestellt.

smalltime.zip

l1ngu commented 4 years ago

Perfekt, vielen Dank!!

ChrisSka commented 4 years ago

Hallo zusammen,

ich habe die modifizierten Dateien von DKeppi verwendet, nur habe ich da leider ein kleines Rechenproblem.

Ich hänge mal zwei Screenshots ran, um das genauer zu erläutern. Mal rechnet es richtig und mal wird mir immer eine Minute abgezogen. Habt ihr vielleicht eine Idee woran das liegen könnte?

Gruss ChrisSka

Juni Juli

DKeppi commented 2 years ago

Hab dieselben Probleme mit der Rundung, mal ist es 1 Minute zu viel, mal eine zu wenig.

Zudem habe ich soeben bemerkt, dass ich bei den auszuzahlenden Stunden nur ganze Stunden angeben kann. Um meine Jahressumme auf 0 zu bringen, müsste ich aber zB. 80:10 eingeben können, oder zumindest 80,16 Klappt leider beides nicht!

it-m-h commented 2 years ago

Versuchen Sie anstelle eines Kommas ein Punkt bei Dezimal

Am 30. November 2021 08:18:57 schrieb DKeppi @.***>:

Hab dieselben Probleme mit der Rundung, mal ist es 1 Minute zu viel, mal eine zu wenig. Zudem habe ich soeben bemerkt, dass ich bei den auszuzahlenden Stunden nur ganze Stunden angeben kann. Um meine Jahressumme auf 0 zu bringen, müsste ich aber zB. 80:10 eingeben können, oder zumindest 80,16 Klappt leider beides nicht!— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

DKeppi commented 2 years ago

Perfekt :)

image

ChrisSka commented 2 years ago

Hallo zusammen,

Hat vielleicht jemand das Problem mit dem Rechenproblem irgendwie lösen können?

Auch ein Zusatz in der Function convertFloatToHHMM bei dem Befehl $mm=abs($mm); Ein + 0.01 hat leider keine Auswirkung -> $mm=abs($mm) + 0.01;

it-m-h commented 2 years ago

Bei den Anzeigen (z.B. admin04.timetable.php : Zeile 89 usw.) echo GetTimeHM(number_format($_monat->_MonatsArray[$z][13], 2, '.', ''));

// Funktion für die Darstellung in h:m (z.B. in include/time_funktionen.php integrieren) function GetTimeHM($time) { $time = explode('.', $time); $min = round($time[1] / 100 * 60, 0); $min = str_pad($min, 2, "0", STR_PAD_LEFT); return $time[0] . ':' . $min; }

// Tooggle Darstellung per GET? // ---------------------------------------------------------------------------- // TOGGLE -> Time Dezimal or h:min // ---------------------------------------------------------------------------- if (!isset($_COOKIE["time"])) { setcookie("time", 0, time() + (3600 * 1000)); }

if (isset($_GET['ToggleTime'])) { if ($_COOKIE["time"] == 0) { setcookie("time", 1, time() + (3600 1000)); return 1; } else { setcookie("time", 0, time() + (3600 1000)); return 0; } }

Sollte eigentlich dann funktionieren und könnte per GET umgeschaltet werden.

ChrisSka commented 2 years ago

Hallo,

habe die "function GetTimeHM($time)" in time_funktionen.php integriert und die Einträge erstmal in der admin04_timetable.php abgeändert. Die Summe pro Tag passen erstmal. Aber das Monatsgesamtergebnis ganz unten in der Tabelle sollte eigentlich die Summe der obigen Werte ermitteln, da passt das Ergebnis leider nicht. Da kann ich nicht die Funktion GetTimeHM verwenden, da ich dort nicht in einem Array bin. Oder liege ich da irgendwie falsch?

Wie integriere ich die Funktion GetTimeHM, wenn er nicht in einem Array ist? z.B bei der PDF-Ausgabe. Dort wird er momentan mit -> convertFloatToHHMM(number_format($_jahr->_saldo_t)); ausgegeben und somit falsch wie vorher.

Den zweiten Teil mit dem Toggle hab ich nicht ganz verstanden? Muss der auch in die time_funktionen.php mit rein oder wo muss der hin bzw brauch in den für die HH:MM Anzeige überhaupt?

it-m-h commented 2 years ago

Salü, vermutlich meinst Du in der Datei Zeile 146 oder 148. Diese zeigt ja die Zeit in z.B. 5.75 an: number_format($_monat->_SummeSaldoProMonat, 2, '.', ''); und 5:45 sollte augegeben werden mit (sollte es auf jeden Fall, ohne das geprüft zu haben) GetTimeHM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''));

Die Saldi und Berechnungen sind hier in der Klasse: $_monat) PDF das selbe: $_jahr->_saldo_t da ist das ganze in dezimal

Toggle = Schalter zwischen 0 und 1 also, wenn 0 dann setzte 1, wenn 1 dann setze 0 $_GET['ToggleTime'] = GET Variable vorhanden, Schalter umlegen z.B. admin.php?ToggleTime oder admin.php?xxxxxxxxxxxxxxxxxxxxxxxx&ToggleTime

Jetzt könnte die Funktion dann noch erweitert werden, wenn das Cookie 1 ist, dass die Zeit in h:min angezeigt wird function GetTimeHM($time) { if ($_COOKIE["time"]) { $time = explode('.', $time); $min = round($time[1] / 100 * 60, 0); $min = str_pad($min, 2, "0", STR_PAD_LEFT); return $time[0] . ':' . $min; } else { return $time; } }

In etwa in der Art, aber es ist an vielen Stellen umzuprogrammieren. Leider auch Texte in der Klasse vom Monat (z.B. Ferienberechnungen usw. ) Ist sehr viel Arbeit, viel Vergnügen. Ich würde mir überlegen nur die Monatsansicht, also die Tageszeiten umzusetzen ;)

ChrisSka commented 2 years ago

Guten Abend zusammen,

habe es mir leichter gemacht und die neue Function "GetTimeHM" in die vorhandene Function "convertFloatToHHMM($in)" eingefügt und das alte rausgelöscht. Somit spare ich mir die Änderungen in den Dateien. Funktioniert alles soweit.

Habe nur noch ein paar Kleinigkeiten wo ich einfach nicht weiter komme.

  1. Problemfall: Nach Änderungen von Dezimal in HH:MM rechnet er mir die vorhandenen Zeiten einfach nicht nochmal neu. Kann man da irgendwie eine Neuberechnung anstossen oder bleibt mir nichts anderes übrig als alle Daten löschen und neu einzugeben? Ab April rechnet es richtig, davor so wie auf dem Screenshot. timetable

1. Update Gebe gerade auch ältere Monate ein. Dort werden die Monate entweder richtig berechnet oder es weicht immer so eine Minute ab, entweder runter oder hoch. Habe mir auch die Timestamps konvertiert, um zusehen ob da irgendwelche Daten nicht stimmen, hatte eher an Sekunden gedacht, sodass hier hoch- bzw. abgerundet wird. Aber leider nicht der Fall. Ändere ich eine Stempelzeit um eine Minute. so sollte es ja dann passen, aber NEIN, es werden dann 2 Minuten abgezogen --> Gesamtzeit liegt bei 160:31 ; nach Änderung um eine Minute steht dann 160:29

2. Update Habe in der Function den letzten Parameter auf 1 gesetzt. ->$min = round($time[1] / 100 * 60, 1); Dann erhalte ich nach der Zeitangabe eine Kommastelle, z.B. 8:55.2 Daher entstehen wahrscheinlich diese Rechenfehler. Diese Kommastellen erhalte ich nur bei Stempelzeiten die nicht im 15min Schritten liegen (xx:15,xx:30,xx:45,xx:00) Beispielstempelzeit xx:50 -> x:25.2; xx:55 -> x:34.8

  1. Problemfall: In der PDF-Ausgabe nimmt er mir das convert.... nicht so wirklich ab. Teilweise funktioniert es mit dem Befehl convert(number_format...., teilweise nimmt er das number_format nicht an und zeigt mir eine weisse Seite. Und die Summen zeigt er mir auch nicht richtig an. Sollstunden sollte 42:30 erscheinen, tauscht mir aber die letzten Zahlen, genauso wie bei Gesamtüberstunden, 3:03 anstatt 3:30 Und bei Tagen ohne Werte, also Wochenende, Feiertage und noch nicht erreichte Tage fehlt mir die erst 0 (Null)

So stehts bei mir in der time_funktionen_pdf.php: $pdf->Cell(72,5,"Sollstunden: " . convertFloatToHHMM($_monat->_SummeSollProMonat) . " Std.",1,'','L', '1'); $pdf->Cell(13,5,convertFloatToHHMM($_monat->_SummeWorkProMonat),1,'','C', '1'); $pdf->Cell(13,5,convertFloatToHHMM($_monat->_SummeSaldoProMonat),1,'','C', '1'); $pdf->Cell(14,5,convertFloatToHHMM($_monat->_SummeAbsenzProMonat),1,'','C', '1');

Füge ich hier bei Sollstunden das number_format ein, erhalte ich eine weisse Seite. Bei den anderen 3, wird der Zellhintergrund weiss und die Zeit aufgerundet, also 3:30 wird zu 4:00

Echt komisch. Mit PDF erstellen in PHP bin ich leider noch nicht so erfahren, wie man sieht ;-)

pdf

pdf2