Goedemiddag allemaal!

Ik ben even bezig met een klein projectje. Ik moet een reserveringssysteem voor een accomodatie maken. Per klant maak ik orders aan die een bepaalde termijn beslaan. Dit kan elke willekeurige datum zijn tussen 1 april van elk jaar en 30 okt.

Ik wil nu graag een overzicht maken met de dagen dat deze accomodatie bezet is, maar ik heb alleen een start en een eind datum van de gehuurde periode. Op welke manier kan ik het best dit overzicht in elkaar klussen? Ik wil dus een overzichtje van april tm oktober met dus een verschil in beschikbare en bezette dagen.

Heeft iemand een tip?
Ik zal eens kijken naar een calender als ik jou was! Daar kun je veel vandaan halen denk ik!
@ Niek: Ik heb er even naar gekeken maar ik ben bang dat het toch nog wat te beperkt is.

Wanneer ik een order aanmaak geef ik de begin en eind datum op, eventueel met een tijd. Met de PHP Event Calender kan ik geen termijn aangeven.



wish list/in progress:

* Recurring events within date range



En je snapt natuurlijk wel dat ik de opdracht geven niet alle data laat invullen. Dit moet gewoon automatisch.

@Jurgen B: Ik ga nog wel even wat andere calenders opzoeken!
je kan het dan tog ook zelf alleen dat stukje er bij maken?
Je begint altijd met het datamodel. Welke tabellen heb je nodig en welke velden?
Op zijn minst:

klanten: id, naam, adres, enz
locaties: id, naam, nummer, aantal_personen, prijs, enz
reserveringen id, van, tot, klant_id, lokatie_id

In de tabel reserveringen zijn de velden van en tot van het type DATETIME.

Voor een bepaalde datum (bijvoorbeeld vandaag) kun je dan een query als deze maken:

SELECT k.naam, l.naam, r.van, r.tot
FROM klanten AS k, locaties AS l, reserveringen AS r
WHERE k.id = r.klant_id
AND l.id = r.locatie_id
AND NOW() BETWEEN van AND tot

(query niet getest)
@Jan: Precies deze tabellen had ik al, iets anders omdat de betalingen per reservering lopen.

Verder kan ik hier wel wat mee. Ik ga even pielen!

Groeten!
Oke, ik ben al een heel stuk verder. Ik ben aan de slag gegaan met de kalender van Arjan. Lekker duidelijk en goed te overzien.

Ik ben voor de test even met de acties (kortingen etc) die ook in het overzicht zichtbaar moeten worden begonnen.

Ik heb nu het volgende:

<?php

//Voor iedere dag in de week gaan we nu een loopje beginnen!
foreach($dagen as $dag2)
{
//Welke weekdag is het?
$dagindeweek = date('w', mktime(0,0,0,$maand,$dag2,$jaar));

//Laten we eens kijken of er een actie geld voor een dag!
$sql_ca = " SELECT
id,
naam,
memo,
locatie,
van,
tot
FROM
acties
WHERE
van = '".date ("$jaar-$maand-$dag2")."'
AND
locatie = '$locatie'
";
$res_ca = mysql_query($sql_ca) or die (mysql_error());
$cou_ca = mysql_num_rows($res_ca);

//Laten we eens kijken of er een huurder in de locatie zit!
$sql_cr = " SELECT
oid
FROM
orders
";
$res_cr = mysql_query($sql_cr) or die (mysql_error());

//Als het 1 is (maandag) begint er een nieuwe rij!
if($dagindeweek == 1) {
echo '<tr>';
}

//Stel dat het toevallig dezelfde datum als vandaag is? Dan willen we een groen randje!
if(($dag2 == date('j')) && ($maand == date('n')) && ($jaar == date('Y'))){
echo '<td class="vandaag">';
}

//Stel dat er een actie is! Dan willen we een rood randje!
elseif($cou_ca === 1){
echo '<td class="actie" >';
}

//hier de rest van het script.
?>

Ik kan nu precies een datum in het overzicht aangeven die in de database staat en waar dus een actie voor geld.

Wanneer ik de query verander om alle dagen waarop de actie geld te selecteren in:

<?php
$sql_ca = " SELECT
id,
naam,
memo,
locatie,
van,
tot
FROM
acties
WHERE
NOW() BETWEEN
van = '".date ("$jaar-$maand-$dag2")."'
AND
tot = '".date ("$jaar-$maand-$dag2")."'
AND
locatie = '$locatie'
";
?>

Krijg ik geen resultaat, en ook geen error.

Waar zit de fout? Ik zou niet weten hoe ik het anders moet doen namelijk!
Voor de PostgreSQL-boys & girls: Zie http://www.yapf.net/Articles/ArticleView/793 hoe je de database voor je aan het werk kan zetten.

In MySQL kun je dit vanaf versie 5.x volgens mij zelf gaan programmeren, maar heb hier geen ervaring mee. Je moet de functie in elk geval zelf gaan maken.
Frank, betekend dit dat ik het beste een nieuw systeem kan klussen, totaal gebaseerd op sql?

Of bedoel je met die functie dat ik de tussenliggende waarden krijg. Wanneer een datum met die waarde overeenkomt is hij true, dus kan ik een vakje een mooi kleurtje maken?

edit:
Ik heb heel veel rondgekeken naar een functie in bestaande kalender script dit deze mogelijkheid ook hebben. Het is niet echt uit te pluizen (iig ik raak het overzicht kwijt)

Daarom ga ik me maar eerst wat verdiepen in kleine voorbeeldjes van deze manier van selecteren en van fucnties. Hebe er eigenlijk nooit één geschrven. Ben altijd van de lange weg maar nu zie ik het nut er wel degelijk van in aangezien het een hoop werk bespaart.

Wanneer ik er aan toe ben laat ik het weten!

Heeft nou echt niemand ooit zo'n probleem opgelost?
Nou, ik heb het één en ander uitgezocht.

Ik ben begonnen met een hele algemene functie waar ik al mijn parameters in stop. Locatie, datum etc.

Daarna ben ik begonnen met het uitzoeken van die generate_series() uit het artikel van Frank.

Na even wat proberen kwam ik er achter dat mijn hoster niet de juiste PostgreSQL versie draait. Ik heb minimal 8.0 nodig blijkt uit het artikel, mijn hoster draait 7.4.7. Ik zal wel even contact opnemen met hem.

edit:
"is er in php dan wel een goeie optie ervoor? "

Ja, een While lus die met mktime de datums maakt en kijkt of er een record voro die datum is.

dit kwam ik tegen op ons concurerende forum. Een optie die zeker het bekijken waard is. Zo kan ik het redelijk netjes oplossen denk ik zelf

Reageren