Empfehlungen: Erweiterte Suche

Online Dienstplan

Fragen zur Konzeptionierung und womit man am besten anfäng? Hier rein...

Online Dienstplan

Beitragvon spearhead » Do 7. Jan 2010, 22:35

Hallo,

ich bin absoluter Neuling in CakePHP und muss für meine Ausbildung einen relativ Komplexen Online Dienstplan für einen Rettungsdienst erstellen. Hierbei sollen man Mitarbeiter in Dienste auf bestimmten Fahrzeugen zuteilen können und das ganze in tabellarischer Form ausgeben. Sprich Montag bis Sonntag einer Woche. Darüber soll es ein Rechtesystem geben das zwischen Zivildienern, und Hauptberuflichen unterscheidet usw...

Mein Problem ist die Grundstruktur wie man das am besten im Sinne der MVC Struktur am besten macht. Kann mir jemand helfen?
spearhead
 
Beiträge: 26
Registriert: Do 7. Jan 2010, 22:30
CakePHP-Version: 1.3
OS: OSX

Re: Online Dienstplan

Beitragvon mbrod » Do 7. Jan 2010, 23:24

Das ist sicher eine ziemlich anspruchsvolle Aufgabenstellung. Ich habe mich mal an einem Disposystem versucht und weiß daher wovon ich rede. Damals allerdings rein php ohne cake.

Das wichtigste sind die Models und deren Beziehung zueinander. Du wirst mit mindestens dreien zu tun haben: 1. Appointment, der Termin oder die Schicht, bei der 2. Staff (Personal) und 3. Resource (Fahrzeug) zusammenkommen. Also als erstes die Datenbanktabellen mit benötigten Feldern erstellen: appointments, staffs, recources. Die entsprechenden Felder für die Relationen (has many, belongs to etc.) strikt nach den CakePHP Konventionen erstellen. Das ganze dann mit der shell backen.

Damit steht schon mal eine ganze Menge und nach Aufruf der Seite kann man schon mal ein paar Leute und Fahrzeuge eintragen und unter appointments/add diese zu Schichten einteilen.

Die Aufgabe wird dann sein, zu verhindern, dass staff und resources sich nicht in Schichten überlappen.

Das ganze in Views vernünftig darzustellen ist, mit Sicherheit auch keine zu unterschätzende Herausforderung.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Online Dienstplan

Beitragvon Mathias » Do 7. Jan 2010, 23:36

Schön zu hören, dass CakePHP schon ein Teil der Ausbildung geworden ist. Ich gehe mal davon aus, dass du dich schon mit dem Prinzip MVC auseinandergesetzt hast und weißt, was die einzelnen Buchstaben bedeuten.

Eine Grundstruktur ist dir schon vorgegeben, MVC. Der Plan ist, wie man am besten die Ziele der Applikation (dein Dienstplan) aufteilt.
Zum Beispiel wäre ein Fahrzeug ein Objekt. Dafür erstellst du ein Model, in dem bestimmte Daten festgehalten werden.
Die Fahrzeuge müssen sich unterscheiden lassen, da es ja wahrscheinlich mehrere Fahrzeuge geben wird. Wie man das macht, ist natürlich abhängig von den Gegebenheiten. Eine Möglichkeit wäre die Kennzeichen zu speichern, oder die Fahrzeugnummern. Fahrzeugnummern sind wahrscheinlich besser, da du einfache Verknüpfungen anhand einer einzelnen Nummer machen kannst, oder auch ordnen.

So kann man sich erstmal durch die Voraussetzungen durcharbeiten. Das zweite wären zum Beispiel die Mitarbeiter. Mitarbeiter könnte man anhand von generierten IDs unterscheiden. Weitere Eigenschaften eines Mitarbeiters könnten der Name, Vorname, Alter usw. sein. Und natürlich müsste auch hier festgehalten werden, welche Art der Anstellung er hat - Zivi oder Hauptberufler.

Nun könnte man natürlich das einfach dort reinschreiben (Eigenschaft: Zivi oder Hauptberufler). Das hat aber den Nachteil, dass man dort alles eintragen kann, was man möchte oder dass man es immer wieder eintragen muss.
Also könnte man ein eigenes Model erstellen, was zum Beispiel Anstellungsart heißt und packt dort die Anstellungsart rein, die durch eine eindeutige ID identifiziert wird.

Und jetzt kommen die oben genannten Verknüpfungen ins Spiel. Du hast bis jetzt nur 3 allein stehende Models: Fahrzeuge, Mitarbeiter und Anstellungsart. Die müssen jetzt natürlich verbunden werden, damit das Ganze auch Sinn macht.
EIN Mitarbeiter hat EINE Anstellungsart. EINE Anstellungsart kann aber VIELEN Mitarbeitern zugeordnet sein.
EIN Fahrzeug kann VIELE Mitarbeiter haben. EIN Mitarbeiter kann auf EINEM Fahrzeug arbeiten (zu einer bestimmten Zeit).

So oder so ähnlich kann man seine Models verknüpfen.
Es kommen natürlich noch weitere Models dazu, wenn ich mir die Projektbeschreibung durchlese. Aber ich will ja nicht deine Arbeit machen ;)

Soweit zu dem M. Das C behandelt die Interaktion mit den Models. Hier musst natürlich überlegen, was du überhaupt mit einem Fahrzeug machen möchtest. Sicherlich willst du eins erstellen, bestehende editieren können und überflüssige entfernen. Die so genannten actions musst natürlich programmieren bzw. diese nicht unbedingt, da es Standardactions sind und diese beim Backen automatisch mit erstellt werden.

Das V in MVC ist für die Darstellung deiner Daten zuständig. Hier hast natürlich viele Möglichkeiten, deinen Dienstplan zu präsentieren. Die Daten, die du hier darstellst sind die Daten die du per Controller aus dem (den) Model(s) holst.

Was du mit einem Rechtesystem meinst, müsstest du nochmal genauer erläutern. Verstehen kann man, dass Hauptberufler innerhalb der Applikation andere Rechte haben als Zivis. Oder aber auch, was ich mir eher denke, dass man einfach bei einem Dienst zwischen diesen beiden unterscheiden kann. Es macht doch sehr wenig Sinn, wenn alle Leute, die am Dienst teilnehmen sollen, sich in den Dienstplan einloggen und Sachen verändern können. Ich denke, dafür gibt es eine einzelne Person oder eine Abteilung, die das übernehmen wird. Was aber nicht heißen soll, dass es nicht möglich ist, Gruppen- und Nutzerrechte zu verwalten.

Hier noch zwei Screenshots von einem meiner Projekte um dir zu zeigen, dass es möglich ist, einen Dienstplan zu erstellen und wie sowas am Ende aussehen kann.
Der Hintergrund meines Projektes:
Die kleine Firma ist ein Filmdienstleister und vermietet ein bestimmtes Gerät. Davon hat sie aber 4 Stück. Dieses Gerät wird zeitweise vermietet. Die Vermietungsdauer wird in diesem Kalender dargestellt. Miettage werden hier unterschieden in halbe Miettage ([halbtransparente Darstellung] Tage, an denen das Gerät nicht arbeitet, weil es gerade verschifft wird) und volle Miettage ([volle Opazität] Tage, an denen das Gerät tatsächlich arbeitet). Die verschiedenen Geräte könnte man natürlich anhand einer Seriennummer ordnen und vergleichen, aber ich habe mich für eine Farbunterscheidung entschieden, da sie sich einfacher merken lässt als lange Seriennummern.

Ich hoffe, ich konnte dir einen kleines Denkanstoß geben. Solltest du noch Fragen haben, immer her damit ;)
Dateianhänge
backyard01.jpg
Simple Darstellung on Form von Zeilen. Sie dienen einer Auflistung.
backyard01.jpg (68.32 KiB) 1033-mal betrachtet
backyard02.jpg
Komplexe Darstellung in einem Kalender. Kleines schwarzes Fenster gibt weitere Informationen zur Vermietung preis.
backyard02.jpg (97.46 KiB) 1033-mal betrachtet
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Online Dienstplan

Beitragvon spearhead » Fr 8. Jan 2010, 09:31

danke, vorerst für die zahlreichen Tips. Werde mal versuchen was zusammenzustöpseln. Habe ein relativ umfangreiche Datenbank erstellt. Was mir noch nicht ganz klar ist, ist das Zusammenspiel von Controller und Model. Angenommen ich möchte nun meine Oberfläche ausprogrammieren die mehr oder weniger aus einem Kalender besteht welcher eine Woche ausgibt, und darin sich folgende "Blocks" von Diensten befinden.

Uhrzeit von - bis
Fahrzeugfunknummer
Fahrer
Sani1
Sani2

Kann mir irgendwer in pseudocode ca. sagen wie hier die Interaktion zwischen Model und Controller aussieht? Ist es sinnvoll z.b. die Dienste innerhalb des Kalenders als eigenen Helper einzubinden (HTML & Logik) ?
spearhead
 
Beiträge: 26
Registriert: Do 7. Jan 2010, 22:30
CakePHP-Version: 1.3
OS: OSX

Re: Online Dienstplan

Beitragvon Mathias » Sa 9. Jan 2010, 20:43

Die Interaktion zwischen Model und Controller ist das Abrufen der gewünschten Daten mit dem find-Befehl, was einer MySQL-Abfrage gleich kommt. Die Abfrage muss für dein Vorhaben logischerweise Suchkriterien haben wie zum Beispiel die angezeigte Woche, der Monat oder das Jahr. Weiterführende Infos in der API oder auch in der Dokumentation.
Mit dieser Suchabfrage hole ich mir alle Aufträge eines bestimmten Monats (wobei Auftragsstart später und Auftragsende früher sein können) in einem bestimmten Jahr und lasse sie mir nach der ID ordnen.
Code: Alles auswählen
        $jobs = $this->Job->find('all', array('conditions' => array(
            'start <=' => date('Y-m-d', mktime(0, 0, 0, $month, date('t', mktime(0, 0, 0, $month+1, 1, $year)), $year)),
            'end >=' => date('Y-m-d', mktime(0, 0, 0, $month-1, 1, $year))), 'recursive' => 0, 'order'=>array('Job.id' => 'asc')));


Ich habe bei mir keinen Helper benutzt. Die ganze Kalendererstellungslogik inklusive Auftragsdarstellungen hab ich in die View reingecodet.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Online Dienstplan

Beitragvon spearhead » Di 12. Jan 2010, 01:26

klingt sinnvoll. Meine große Frage...wie realisiere ich in der View folgendes Feature. Jeder Dienst hat einen Link "DETAILS" der am besten irgendein AJAX Popup, sprich kein neues Browserfenster udgl. öffnet, und die ID des entsprechenden Dienstes an dieses Popup übergibt und darin dann Details wie Fahrer,Sani,Notarzt usw. angezeigt werden. Pseudocode würde mir schon reichen,...lg und danke für die zahlreichen tipps bisher...
spearhead
 
Beiträge: 26
Registriert: Do 7. Jan 2010, 22:30
CakePHP-Version: 1.3
OS: OSX

Re: Online Dienstplan

Beitragvon Mathias » Di 12. Jan 2010, 02:27

Du kannst dir zum Beispiel ein jQuery Plugin runterladen, welches AJAX Requests ausführt (clueTip) und einbinden.
Das Plugin nimmt sich die Zieladresse und schickt eine Abfrage. Folglich reagiert die Applikation darauf -> bestimmte action eines Controller. Hierbei übergibst du die ID.
Deine Adresse lautet zum Beispiel /commissions/view/34. Die wird via AJAX aufgerufen und du landest im commissions_controller mit der action view und dem Parameter 34, was halt die ID des abzurufenden Dienstes ist.
Im Controller wird dann halt eine Datenbankabfrage gemacht. Ergebnis dürfte wohl bei richtiger Abfrage dieser eine bestimmte Dienst sein. Das Array wird in einer Variable gespeichert und steht somit in der View zur Verfügung. Zum Schluss wird noch abgefragt, ob der Request eine AJAX-Abfrage ist und entsprechend behandelt.
Code: Alles auswählen
    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Commission.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->set('commission', $this->Commission->read(null, $id));
        if($this->RequestHandler->isAjax()) {
            $this->render(null,'ajax','admin_view_for_ajax');  
            Configure::write('debug', 0);
        }
    }

Und somit hast du dann deine Daten per AJAX abgefragt.

Sollte JavaScript beim Client deaktiviert sein, funktioniert der Link als ganz normaler Verweise und öffnet in der View 'view' des commissions_controller.

Mit der oben genannten Methode ist auch die kleine schwarze Box in meiner Applikation (Screenshot weiter oben) gelöst.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Online Dienstplan

Beitragvon spearhead » Di 12. Jan 2010, 16:14

super...eine frage noch. Ich würde gerne jQuery bzw. jQuery UI nutzen für mein Projekt. Wie funktioniert hier die Einbindung in Cake und gibt es dabei einschränkungen?
spearhead
 
Beiträge: 26
Registriert: Do 7. Jan 2010, 22:30
CakePHP-Version: 1.3
OS: OSX

Re: Online Dienstplan

Beitragvon Mathias » Mi 13. Jan 2010, 08:49

Nein, es gibt keine Einschränkungen. Bei der Einbindung wird dir google, das Manual oder/und die API helfen.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Online Dienstplan

Beitragvon mbrod » Mi 13. Jan 2010, 09:50

Beispielcode, wie ich einen Kalender eingebunden habe:
Code: Alles auswählen
echo $javascript->link(array(
            'jquery/jquery-1.3.2.min',
            'jquery/jquery-ui-1.7.2.custom.min',
            'jquery/ui.datepicker-de'
        ),false
    );
echo $javascript->codeBlock(
        '$(document).ready(function(){
            $("#CalculationStartDate").datepicker({showButtonPanel: true, changeMonth: true, changeYear: true, showOtherMonths: true });
        });'
,
        array('allowCache'=>false,'safe'=>false,'inline'=>false)
    );
echo $html->css(array('jquery-custom-theme/jquery-ui-1.7.2.custom'),null,null,false);
 

Das Input-Element, wo der Kalender dann erscheinen soll muss die 'id'=>'CalculationStartDate' bekommen.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X


Zurück zu Konzeption und Vorgehensweise

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast