Antworten auf deine Fragen:
Neues Thema erstellen

Brainstorming Verfügbarkeit prüfen

lachender_engel

Aktives Mitglied

Hallo Zusammen.
Ich brauche mal Eure Hilfe und ein Brainstorming bei folgender Aufgabe:
Für eine Schule arbeite ich ProBono (kostenlos) an einem kleinen Tool bzw. an einer Erweiterung.
Es gibt eine Webseite über die die Verfügbarkeit von Freizeit-Räumen (Sporthalle, EDV, Garten, etc.) abzufragen und ein Raum zu buchen ist. Nun möchten die gerne eine Funktion haben, dass jemand sieht welche Räume in einer bestimmten Zeit frei sind. Zusätzlich sollen noch Tage - und + vor dem Datum berücksichtig werden.
Im Beispiel:
"Günther braucht vom 3.5.2015 bis 6.5.2015 einen Raum, für vier Tage. Paramter: -1 und +2 Tage zu Beginn und -0 und +3 Tage zum Ende."
Die Tabelle der Belegung ist wie folgt angelegt:
Code:
ID|RaumID|Jahr|Monat|Tag
Jeder Eintrag steht für die Belegung eines Tages eines Raumes. Ist ein Tag nicht in der Liste, ist der Raum noch frei.

Nun muss ich eine Funktion erdenken die mir ausgibt welcher Raum zu den genannten Daten frei ist.
Dazu gibt es folgende Paramter:
PHP:
    $dDateFrom = '2015-05-03';
    $iDateFromBeforeDays = 1;
    $iDateFromAfterDays = 2;
    $dDateTo = '2015-05-06';
    $iDateToBeforeDays = 0;
    $iDateToAfterDays = 3;
    $iBookingDays = 4;
Am Ende sollte ein Array rauskommen das die Räume enthält die
a) genau zu dem Zeitraum frei sind und
b) zu einem alternativen Datum, für 4 Tage, frei sind.

Wie würdet Ihr bei der Funktion vorgehen?
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

Ein erster, naiver Ansatz wäre wohl sowas:

Code:
Für Anfangstag von (Wunschbeginn - Maximum Tage früher) bis (Wunschbeginn - Maximum Tage früher):
   falls Anfangstag + Buchungsdauer > Wunschende + Maximum Tage später
   dann
     Abbruch
   sonst
     Setze die Liste der freien Räume gleich der Liste aller Räume
     Für Datum von Anfangstag bis (Anfangstag + Buchungsdauer):
       Wähle alle Räume, die zu Datum belegt sind
       Entferne diese aus der Liste der freien Räume
   gib die Liste der freien Räume für Anfangstag aus

Das gibt dann ein Ergebnis wie
-2 Tage: Raum 1, Raum 7, Raum 10
-1 Tage: Raum 1, Raum 4
usw.

Deine Tabellenstruktur lässt keine schönen Bereichsauswahlen zu, daher kann das wahrscheinlich nicht in einer eleganten Abfrage geklärt werden.


Duddle
 

lachender_engel

Aktives Mitglied

Danke, @Duddle, für Deinen ersten Ansatz.
Dabei sah ich, dass ich noch einen wichtigen Paramter vergessen habe: Die Anzahl der Tage. Daher habe ich meinen Beitrag entsprechend angepasst.

Es geht also, in meinem Beispiel, darum einen freien Zeitraum von vier Tagen, in der Zeit DatumVon und DatumBis, alternativ mit den - und + Tagen, zu finden.

Mein Kopf raucht :confused:
 

tr4ze

Mod | Forum

Teammitglied
PSD Beta Team
Schon der Ansatz deiner Tabelle macht es kompliziert. Normalisiere mal deine Datensätze.
z.B. 2 Tabellen

Raum -> |id|name|
Buchungen -> |Raum id|Datum|

Dann trägst du jeden Tag einzeln in Buchung ein.

Die Abfrage ist dann relativ simpel: Ist das Datum Raum id frei true|false
Wenn true -> Prüfe optionale Anforderung
Wenn wieder true -> buchen
Wenn false -> alternative suchen
Wenn true -> buchen
wenn false -> Fehler werfen Abruch

Das System wäre sehr modular und erweiterungsfähig.
Vielleicht möchte man irgendwann wissen welcher Nutzer welchen Raum wie oft genutzt hat.
Das könnte man mit einer weiteren Tabelle Nutzer sowie einer Erweiterung der Tabelle Buchungen um eine Nutzer Id sehr schnell machen.
Oder nimm mal Ferien und Wochenden, Räume wie Gärten sind in diesen Zeiten vielleicht zugänglich, Räume im Schulgebäude nicht.
Ein Tabelle Ferientermine /Feiertage zu erstellen und mit den Daten aus Buchung abzugleichen ist mit obiger Struktur ebenfalls sehr simple.
 

lachender_engel

Aktives Mitglied

Schon der Ansatz deiner Tabelle macht es kompliziert. Normalisiere mal deine Datensätze.
Mag sein, ich kann es aber nicht ändern da es sich um ein bestehendes System handelt und ich damit arbeiten muss, was da ist.
Klar, ich kann alles neu entwickeln und schöner machen, was ungefähr 27mal länger dauert als damit zu arbeiten, was da ist.
 

lachender_engel

Aktives Mitglied

Die Buchungsdauer lässt sich aus Wunschtermin-Anfang und Wunschtermin-Ende ableiten. Ich nehme an, die Buchung ist durchgängig.
Ja, Du hast recht.
Ich überlege mir gerade die Setting einfacher zu machen. In dem dei Raumbuchung mit drei Angaen erfolgen:
1.) frühester Buchungstag
2.) spätester Buchungstag
3.) Raum-Nutzungsdauer in Tagen
Das macht es, denke ich, einfacher als mit diesen + und - Tagen rumzuhantieren.
Löst aber nicht die eigentliche Aufgabe ;-)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben