Ankündigung

Einklappen
Keine Ankündigung bisher.

Arbeitszeitrechner

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zergling, hast du Urlaub? :P
    :arrow: [URL="http://tiny.cc/0xlvv"]Wie man Fragen richtig stellt[/URL]

    Kommentar


    • #17
      Für die Statistik würde ich (einen Teil) des eZComponent-Framworks empfehlen. Es bietet schöne Graphenfunktionen (das nur zusätzlich).

      Das struktogramm sollte eine person übernehmen, denke ich. Aber Zergling hat ja schon einen erheblichen Teil abgeliefert. Ich finde, dass der Zeitaufwand nicht zu groß ist, weil jeder frei arbeiten kann, jederzeit sein zeug abgeben kann und eben nur einen kleineren Teil schreibt. Die idee ist also wirklich umsetzbar!

      Kommentar


      • #18
        Semesterferien heißt das hier
        Montag gehts wieder los - deshalb schlage ich ja die Woche vor.

        Kommentar


        • #19
          mich reizt das auch total, vor allen dingen mal zu sehen wie die proffs das machen ^^
          zumal hätt ich auch verwendung dafür
          wenn mir jemand mal ne (kleine) vorlage gibt wie das auszusehen hat könnt ich sogar mit helfen
          wer noch
          [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
          — The best things in life aren't things[/FONT]

          Kommentar


          • #20
            Zergling
            pepe24
            phpdummi

            auf 1-2 noch wie gesagt, ist nicht viel Arbeit und es besteht keine Verpflichtung

            Kommentar


            • #21
              Ohne Verpflichtung? okay :>
              Nicht jeder Fehler ist ein Bug.

              Kommentar


              • #22
                * JAAAAA *
                kanns los gehen? [F5] [F5] [F5] [F5] [F5] [F5] [F5] [F5] [F5] [F5] [F5] ^^
                [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                — The best things in life aren't things[/FONT]

                Kommentar


                • #23
                  ich hatte mal die idee eine 2 tabellen zu erstellen in der einen stehen die projekte und in der anderen die zeiten die erste ist egal was drin steht hauptsache sie hat nen id feld die 2. tabelle hatte ich mir so gedacht

                  id | projekt | von | bis

                  wo 'projekt' die id aus der tabelle 1 verbindet um die daten zu bekommen 'von' und 'bis' sind unix_timestamps wobei dann "bis-von" gerechnet wird dann hat man ja nur noch die sec die "gearbeitet wurde"

                  diese hatte ich dann durch diese funktion gejagt wobei $diff die Differenz von 'von' und 'bis' ist.
                  PHP-Code:
                  function zeitberechnung($diff)
                  {
                      
                  $zeit["stunden"] = 0;
                      
                  $zeit["minuten"] = 0;
                      
                  $zeit["sekunden"] = 0;
                      
                  $zeit["stunden"] = $diff/3600;
                      
                  $zeit["stunden"]=floor($zeit["stunden"]);
                      
                  $zeit["minuten"]=($diff-($zeit["stunden"]*3600))/60;
                      
                  $zeit["minuten"]=floor($zeit["minuten"]);
                      
                  $zeit["sekunden"]=$diff-$zeit["stunden"]*3600-$zeit["minuten"]*60;
                      return 
                  $zeit;
                  }
                  ?> 
                  dann hatte ich gein bock mehr^^

                  ich hatte mir gesacht das man einfach alle differenzen von allen datensätzen wo projekt = aktuelles projekt ist addiert dann duch diese Funktion jagt und dann kann man ja scho $zeit["stunden"]*$preis oder so etwas machen naja^^ so ging es in meinem kopp weiter bis ich gemerkt hab das ich mal wieder kein bock hab weiterzucoden xD

                  naja ich habe mir gedacht vllt. könnt ihr ja etwas mit meinem kram anfangen ich würde es nur löschen^^

                  und bitte keine kommentare zu meinem code ja ich weiß ich mache viele fehler xD^^

                  Kommentar


                  • #24
                    hm.. klingt interessant

                    Was kleineres könnt ich auch machen, allerdings hab ich derzeit fast gar keine Zeit..

                    Wenn ihr hier öfter mal reinschreibt, was grad benötigt wird, könnt ich evt. doch helfen.. sonst eher nicht!


                    mfg
                    Andi

                    Kommentar


                    • #25
                      Dann mal los. Ich schlage vor die Template- (.html) und Skript-Dateien (.php) werden für die selbe Seite jeweils von der selben Person gemacht, es sei denn jemand hat Lust die Variablen-Benennung für alle Seiten festzulegen.

                      Aufgaben:
                      Templates/Skripte
                      Klassen:
                      Project, Work, DataHandler, AnalyseWork, parseDsn

                      Wer nimmt was?

                      Gesamtübersicht:





                      Voraussetzung
                      - Projekt-Dummy herunterladen (zB als vhost: http://www.phpfriend.de/forum/ftopic60557.html) - wer nur eine Klasse schreibt brauch das natürlich nicht
                      - Änderungen an den vorhandenen Projekt-Dummy Dateien bitte melden, Verzeichnisse & Dateien können selbständig angelegt werden
                      - ab PHP 5.1.x
                      - Apache mit aktiviertem Allow-Override und ModRewrite


                      Templates
                      Startseite
                      Formular:
                      - Projekt-Auswahl (<select>)
                      - von-Feld (<select> Kombination)
                      - bis-Feld (<select> Kombination),
                      - Start-Button (schreibt aktuelle Uhrzeit in von-Feld, JavaScript),
                      - Stop-Button (schreibt aktuelle Uhrzeit in von-Feld, JavaScript, wenn Start-Button nicht gedrückt wurde: Popup-Meldung; schickt Formular ab),
                      -Formular-Abschicken-Button
                      Weitere Links:
                      -Projekt hinzufügen,
                      -Projekt entfernen
                      -Auswertung
                      URI:
                      /work/add
                      Dateien:
                      private/templates/work/add.html
                      private/modules/work/add.php

                      Popup-Meldung
                      Kann per Parameter einen Text übergeben bekommen, OK-Button schließt das Fenster, keine Aktion
                      URI:
                      /popup/message/#message-text#
                      Dateien:
                      Private/templates/system/popup.html
                      Private/modules/system/popup.php

                      Projekt hinzufügen
                      Formular:
                      - Projekt-Name-Feld (<input>)
                      - Stundenlohn (<input>)
                      - Formular-Abschicken-Button
                      Weitere Links
                      - Zurück zur Startseite
                      URI:
                      /project/add
                      Dateien:
                      Private/templates/project/add.html
                      Private/modules/project/add.php

                      Projekt entfernen
                      Formular:
                      - Projekt-Auswahl (<select>)
                      - Formular-Abschicken-Button
                      Weitere Links
                      - Zurück zur Startseite
                      URI:
                      /project/remove/id-#xy#
                      Dateien:
                      Private/templates/project/remove.html
                      Private/modules/project/remove.php

                      Eintragungen (Work) auflisten
                      Liste der letzten 25 Eintragungen
                      Formular:
                      - Löschen Button pro Eintragung
                      URI:
                      /work/list
                      Dateien:
                      Private/templates/project/list.html
                      Private/modules/project/list.php

                      Eintragung löschen
                      keine Darstellung, lediglich Annahme der ID und Rückleitung auf Liste zurück
                      URI:
                      /work/remove/id-#xy#
                      Dateien:
                      Private/templates/project/remove.html
                      Private/modules/project/remove.php


                      Auswertung
                      Formular:
                      - Projekt-Auswahl (<select>) + Option „alle“
                      - Von-Feld (<select> oder <input> Kombination)
                      - Bis-Feld (<select> oder <input> Kombination)
                      - Formular-Abschicken-Button
                      Auswertung:
                      - ohne Request leer
                      - sonst Auflistung projektweise, Spalten: Projekt, Zeitraum (minimales von-Datum, maximales von-Datum), Stunden, Stundenlohn, Gesamtbetrag
                      - letzte Zeile: Gesamtauswertung des Requests
                      URI:
                      /work/analyse
                      Dateien:
                      Private/templates/work/analyse.html
                      Private/modules/work/analyse.php

                      Information zu Templates
                      In allen Templates (abgesehen vom Popup) sind zu Beginn {include file=“system/head.html“} und am Ende {include file=“system/foot.html“} einzufügen.

                      Die PHP-Skript Dateien müssen kein Template selbst instanzieren. Ihnen steht das Smarty-Objekt $oTpl zur Verfügung.

                      JavaScript und CSS
                      Der Einfachheit halber schreibt ihr benötigtes JavaScript und CSS in eine eigene Datei, die exakt eurem Forennamen entspricht (+ Endung).
                      Alle CSS- und JS-Dateien werden vor ihrer Darstellung durch PHP geparsed. Falls benötigt könnt ihr also auch PHP-Code einbinden.
                      Mittels $oTpl->assign(„body“, „#body-id#“) könnt ihr eurem Template eine ID zuweisen, über die ihr dann euer CSS kaskadiert um euch nicht in die Quere zu kommen.
                      (body#meine-body-id div.xy { background : red } o.ä.)

                      Formular-Elemente müssen nicht gestylt werden, bzw. Sind in der „form.css“ zu stylen.

                      PHP-Klassen:
                      Project
                      Work
                      DataHandler
                      AnalyseWork

                      PHP-Funktionen:
                      parseDsn

                      Bindende Interfaces:
                      Keine nicht-abgesprochene Änderung erlaubt
                      PHP-Code:
                      <?php
                      interface iProject
                      {
                          public function 
                      __construct($iProjectId 0);
                          
                          
                      /**
                           * @return  integer  project id
                           */
                          
                      public function getProjectId();
                          
                          
                      /**
                           * @return  string  project name
                           */
                          
                      public function getName();
                          
                          
                      /**
                           * @return  float  money per hour
                           */
                          
                      public function getTimeRate();
                          
                          
                      /**
                           * @param   string   project name
                           * @param   float    money per hour for these project
                           * @return  integer  new project id or 0 (error)
                           */
                          
                      public function set($sName$fTimeRate);
                      }

                      interface 
                      iWork
                      {
                          public function 
                      __construct($iWorkId 0);
                          
                          
                      /**
                           * @param  integer  project id
                           * @param  string   start, datetime (0000-00-00 00:00:00)
                           * @param  string   end, datetime (see above)
                           */
                          
                      public function set($iProjectId$sStartTime$sEndTime);
                          
                          public function 
                      getWorkId();
                          public function 
                      getProjectId();
                          public function 
                      getStartTime();
                          public function 
                      getEndTime();
                          
                          
                      /**
                           * calculates the timespan between start and end in minutes
                           * @return  integer  minutes
                           */
                          
                      public function getTimespan();
                      }

                      interface 
                      iDataHandler
                      {
                          
                      /**
                           * @param  constant  type of data handling (csv|database)
                           * @param  string    dsn (csv:filename|mysql:dsn-string [mysql://username:password@server/database)])
                           */
                          
                      public function __construct($cDataHandling$sDSN null);
                          
                          
                      /**
                           * @param   object  instance of Work-class
                           * @return  bool    success
                           */
                          
                      public function addWork($oWork);
                          
                          
                      /**
                           * @param   integer  work id
                           * @return  bool     success   
                           */
                          
                      public function removeWork($iWorkId);
                          
                          
                      /**
                           * @param   array   list of project ids (or array(0) for all)
                           * @param   string  start
                           * @param   string  end
                           * @return  array   array of Work-objects
                           */
                          
                      public function getWork($aProjectIds$sStartTime$sEndTime);
                          
                          
                      /**
                           * @param   object  instance of Project-class
                           * @return  bool    success
                           */
                          
                      public function addProject($oProject);
                          
                          
                      /**
                           * @param   integer  project id
                           * @return  bool     success   
                           */
                          
                      public function removeProject($iProjectId);
                          
                          
                      /**
                           * @return  array  array of Project-objects
                           */
                          
                      public function getProjects();
                      }

                      interface 
                      iAnalyseWork
                      {
                          
                      /**
                           * the analysis subjects to these Work-objects
                           */
                          
                      public function __construct($aWorkObjects);
                          
                          
                      /**
                           * @return  string  project summarize
                           */
                          
                      public function summarizeProjects();
                          
                          
                      /**
                           * @return  string  first date or datetime (as you like), 0000-00-00[ 00:00:00]
                           */
                          
                      public function getStart();
                          
                          
                      /**
                           * @return  string  last date or datetime
                           */
                          
                      public function getEnd();
                          
                          
                      /**
                           * summarize all minutes
                           * @return  integer  total minutes
                           */
                          
                      public function getMinutes();
                          
                          
                      /**
                           * @return  array  index:min -> lowest time rate, index:max -> highest time rate, index:avg -> average time rate
                           */
                          
                      public function getTimeRates();
                          
                          
                      /**
                           * @return  float  total sum (hours * time rate per project)
                           */
                          
                      public function getAmount();
                      }

                      /**
                       * parses a dsn string to its single parts
                       * @param   string  dsn string
                       * @return  array   array keys: db (is static, "mysql"), username, password, hostname, database
                       */
                      function parseDsn($sDsn);
                      ?>
                      Einzig die DataHandler-Klasse führt Datei- (CSV) oder Datenbank (MySQL)-Operationen aus.
                      Bei dieser Klasse liegt eigentlich die gesamte Arbeit. Möglicherweise können wir die Klasse nochmal aufteilen in private Methoden für mysql- und csv-Speicherung. Was meint ihr?

                      Bevor wir richtig anfangen:
                      Habe ich etwas vergessen, ist etwas falsch?

                      Zeitplan
                      - Donnerstag Abend sollten alle Baustellen vergeben sein
                      - Bis Samstag Mittag Rückmeldung ob bis Sonntag Mittag der Code fertig ist
                      - Sonntag Mittag, code hier posten oder Dateien zippen und an mich schicken (Email per PM, ich stelle die Dateien dann für alle mit Name/Datum online auf meinen Server)
                      - Bis Sonntag Abend Auswertung der Einzelteile, Versuch zu mergen (wenn alles klappt: Projekt-Ende)
                      - Bis Dienstag Abend Bugfixing möglich
                      - Mittwoch (14. März) Projektende, Download über unser Tutorial möglich

                      Zeitplan OK? Ich denke er bietet Platz genug.

                      Kommentar


                      • #26
                        boah! so viel aufwand! waaaahnsinn, ich freu mich jetzt schon
                        hab grad die strucktur runtergeladen .. ich komm ausm staunen nicht mehr raus! hab bis jetzt noch nie so ein gut durchdachtes projekt angefasst. also ich seh hier einen absoluten lerneffekt, einfach klasse!
                        Habe ich etwas vergessen, ist etwas falsch?
                        ich denke nicht
                        Zeitplan OK?
                        Ich denke er bietet Platz genug.
                        seh ich genauso
                        Wer nimmt was?
                        ich lass mir gern was zuweisen.
                        ich muss aber gestehen das ich auch nicht wirklich ahnung davon habe wie man effektiv zusammenarbeit und schnitstellen zur verfügung stellt. habe bis jetzt immer alles allein erledigt, durch meine kaum vorhandene planung sind solche also eher per zufall entstanden. letztendlich hat sich soagr die verzeichnisstrucktur im nachhinein ergeben ich könnte die templates machen, ist allerdings auch mein erster "echter" versuch mit smarty. wie gesagt ich lass mir auch was zuweisen.
                        vll bin ich euch auch eher ein klotz am bein, dann guck ich einfach mal nur zu und lerne
                        wär nett wenn du mal eine beispiel datei posten könntest (nur was ganz kleines) damit ich mir überhaupt vorstellen kann wie ich das zu machen habe :wink:

                        bin beeindruckt das du dich darauf eingelassen hast leute aufzunehmen die tatsächlich zum ersten mal einen vhost einrichten.
                        ich glaub ich bin der einzige ^^
                        [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                        — The best things in life aren't things[/FONT]

                        Kommentar


                        • #27
                          Naja das Projekt ist recht klein, aber es lohnt sich selbst hierfür zuerst die Klassen und ihre Schnittstellen zu definieren.
                          Das lustige ist, die Programmierung an sich ist dann absolut kein Problem mehr - auch für dich nicht, höchstens weil du meine Planung nicht nachvollziehen kannst, das ist dann aber Erfahrungssache oder mein Planungsfehler.
                          Zeit in die Plaung zu stecken lohnt sich. Das Projekt ist meiner Meinung nach jetzt schon so gut wie fertig. Die paar Klassen und Templates sind in 2 Stunden gemacht.

                          Wenn du etwas lernst freut mich das, ein Klotz am Bein ist keiner der sich hier freiwillig engagiert!

                          Dann weis ich dir einfach mal die Work- und AnalyseWork-Klasse zu. Hast du das Interface verstanden?

                          http://de.php.net/interfaces

                          Ich bin mir nicht sicher, ob man in Interfaces überhaupt den Konstruktor definieren darf, notfalls den aus dem Interface entfernen.
                          Deine Klasse muss also so beginnen:
                          PHP-Code:
                          <?php
                          class Work implements iWork
                          {
                          }
                          ?>
                          Alles weitere berichtet dir der Parser, falls du dich nicht an das Interface hältst.

                          Zu den Templates, ich mache hier vielleicht gleich mal
                          Projekt löschen
                          private/templates/project/remove.html
                          Code:
                          {include file="head.html"}
                          
                          <form action="{$form.action}" method="{$form.method}">
                          <select name="{$form.element.project}">
                          {foreach from=$projects item=project}
                            <option value="{$project.value}">{$project.text}</option>
                          {foreachelse}
                            <option value="0">- es gibt keine Projekte -</option>
                          {/foreach}
                          </select>
                          <input type="submit" value="löschen" />
                          </form>
                          
                          {include file="foot.html"}
                          private/modules/project/remove.php
                          PHP-Code:
                          <?php
                          $aForm 
                          = array(
                            
                          'action' => _PATH_PROJECT '/project/remove' /* die Konstante bezieht sich auf das gesamte Projekt, der Pfad auf das Modul, zufällige/unglückliche Namensgleichheit */,
                            
                          'method' => 'post',
                            
                          'elements' => array('project' => 'project_id'));
                          $oTpl->assign('form'$aForm);

                          $oData = new DataHandler(DATAHANDLER_CSV'myjobs.csv');

                          if (
                          $_SERVER['REQUEST_METHOD'] == 'POST') {
                            
                          $oData->removeProject((int) $_POST[$aForm['elements']['project']]);
                          }

                          // hier hätten wir schon den ersten Konzept-Fehler, die Daten liegen nicht optimal vor, ich muss sie umwandeln:
                          $aProjects = array();
                          foreach (
                          $oData->getProjects() as $oProject) {
                            
                          $aProjects[] = array('value' => $oProject->getId(), 'text' => $oProject->getName());
                          }

                          $oTpl->assign('projects'$aProjects);
                          ?>
                          (ungetestet und hier im Browser-Textarea geschrieben)

                          Zugegebenermaßen fehlen noch Status-Meldungen, die könnte man eventuell über eine Message-Klasse laufen lassen, die diese dann -wie auch immer- anzeigt.
                          Aber das wird vorerst zu kompliziert.

                          Kommentar


                          • #28
                            ist (bedingt durch extremen schlafmangel) schon etwas spät
                            bis morgen abend habe ich die zugewiesene baustelle (gemäß zeitplan) bestimmt verstanden. nehme die aufgabe gerne entgegen.
                            tausend dank für die ausführlich antwort!
                            sry, ich kanns mir nicht verkneifen -> ^^
                            [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                            — The best things in life aren't things[/FONT]

                            Kommentar


                            • #29
                              Ach nochwas: Das Wort "module" ist in dem Zusammenhang etwas aus der Luft gegriffen. Modul-Verwaltung sieht anders aus.

                              Update der Projekt-Dummies (lauffähig auch wenn nicht im DocRoot liegend) inklusive "Projekt löschen" Templates und Klassen-Dummies.
                              http://www.zuckermaeusken.de/files/htdocs-v0.1.zip

                              Kommentar


                              • #30
                                Habs gerade nur kurz überflogen. Alle achtung, da ist ja schon einiges passiert, Zergling!

                                Was mir noch aufgefallen ist, dass es noch eine (kleine) Exception klasse geben sollte. Alles andere sieht auf den ersten Blick gut aus. Interfaces sind hier auf sehr gut geeignet.

                                Morgen vormittag hab ich wieder mehr Zeit und werde mich umfangreicher einbringen.

                                Gute Nacht!

                                Kommentar

                                Lädt...
                                X