Hi,
@nahpets: Was du bisher beschreibst ist auch in der Tat trivial. Und existiert so auch schon. Die Webseite wird dir nicht viel bringen, es sei denn du wolltest direkt bei uns buchen. Dann müssten wir aber erstmal warten bis das auch fertig programmiert ist. ^^ Im Anhang findest du einen Ausschnitt aus unserem Wireframe, wie das in etwa umzusetzen ist.
Auf dem Screenshot sieht man: Die Webseite erkennt, dass ein Kind mitreist und sucht passende Optionen raus, die verfügbar sind. Hunde sind gegen Aufpreis pro Tag möglich, andere Tiere kostenlos. Weitere Leistungen sind auch zu sehen, je mit unterschiedlicher Preis-Berechnung. Dass der Transfer nur möglich ist, weil die Anreise an einem Freitag liegt, wäre eine mögliche Hürde. Weil die Buchung nur 7 Nächte hat, wird keine Zwischenreinigungsoption angezeigt. (Der Screenshot stammt vom firmenfremden Designer. Das ist nur ein Wireframe und kein Design oder tatsächliche Daten)
Wir haben selbstverständlich schon Ferienwohnungen, Buchungen, Leistungen, eine n:m-Relation zwischen den Ferienwohnungen und Leistungen und hunderte weitere Tabellen. Die Leistungen haben einen Namen, eine Beschreibung und einen Preis. Das reicht für unsere Mitarbeiter, weil die wissen, dass das Abendessen einmalig 15€ kostet, der Hund aber 15€ pro Tag. Und die wissen auch, dass die Leistung "Abendessen" nur auf einer bestimmten Menge an Ferienhäusern angeboten werden kann und nur an bestimmten Tagen. Diese Informationen bietet unsere bisherige Datenbankstruktur nicht. Und deine, soweit ich das sehe, auch nicht.
Wie ich diese Regeln in einer Datenbank jetzt formulieren soll; tja, das frage ich ja gerade. Ich kann dir beispielhaft zeigen wie es jetzt aussieht. Bisher gibt es lediglich einen Text im Kundenlogin und in E-Mails zum Kunden, der ihnen sagt, was jetzt inklusive ist. Das soll aber erweitert werden auf all das was noch zubuchbar und möglich ist; was also bisher unsere Büro-Mitarbeiter in Handarbeit machen. Das sieht (stark gekürzt) in etwa so aus:
Code:
Im Geamtpreis sind enthalten:
# if ferienhaus.id in (42, 21, 33, 34, 45, 75, 23, 22):
# if (buchung.bis - buchung.von) > 5:
eine Zwischenreinigung
# elseif (buchung.bis - buchung.von) > 10:
zwei Zwischenreinigungen
# endif
# elseif ferienhaus.id in (102, 54, 101):
Nur ein kurzer Ausschnitt. Leistungen sind also entweder inklusive oder optional. Falls optional, entweder kostenlos oder mit Aufpreis. Deren Verfügbarkeit richtet sich nach Kriterien wie Buchungsdauer, Anzahl Teilnehmer, Saison, Wochentage während der Buchung, Anzahl Erwachsene / Kinder / Babies uvm. Und das jeweils je nach Ferienhaus. Die maximale Menge an Zubuchungen einer Leistung richtet sich ebenfalls nach diesen Kriterien. Die Berechnung des Preises auch, wobei hier unterschieden werden muss zwischen pro Nacht, pro Person, pro Person und Nacht und evtl. noch mehr. Die bisherige Vielfalt an Kriterien und Leistungen ist, sagen wir, überschaubar. Aber sobald die technische Möglichkeit besteht mehr anzubieten, wird sich das ändern. Das System sollte jetzt so flexibel wie möglich sein. Konnte ich einigermasen klar machen, wo das Problem liegt?
@NamenLozer: Mh, deine Idee gefällt mir wirklich ganz gut. Ich denke das werde ich mal genauer durchplanen. Melde mich dann ggf. nochmal.
@Perlsau: Du beschreibst ja quasi nur eine einfache n:m Relation zwischen Ferienhäusern und Leistungen. Das hilft allerdings nicht viel, dann die Relation hilft mir nicht weiter, wenn Leistungen unter bestimmten Bedingungen angeboten werden können, die wiederrum von der Buchung abhängen. Auch ist die doch recht dynamische Berechnung des Preises damit nicht bewerkstelligt. Oder?
@Furtbichler: Das läuft dann ja im Wesentlichen auf ein ähnliches Prinzip wie bei NamenLozer heraus. Da wir nur Skriptsprachen verwenden, haben wir hier ja einen guten Vorteil. Einen Grund mehr, das System mit Plugins mal genauer unter die Lupe zu nehmen.
@generic: Unter Artikeln verstehst du vermutlich auch die Leistungen wie Zwischenreinigung usw. Ich könnte in der Relationstabelle weitere Felder hinzufügen, sowas wie "minimale Nächte der Buchung", "maxmimale ~", "muss Montag während der Buchung haben" usw. Allerdings währen das schon eine ganze Menge verschiedener Spalten. Man kann diese Kritierien auch in eine weitere Tabelle Auslagern, wobei beim Hinzufügen neuer Leistungen ja dennoch immer wieder Code geändert werden müsste. Wenn die Relationen abhängig von weiterem Bedingungen sind, dann kommen wir dem Plugin-System von NamenLozer ja wieder recht nahe.
Liebe Grüße,
Valentin