On s'intéresse à une interface Web permettant d'aider des entreprises ou des particuliers à louer un espace (soit un local pour une activité d'entreprise, soit un logement pour un particulier). Le système doit pouvoir être utilisé également par les propriétaires. L'application doit fournir un accès par interface Web et doit disposer d'une connexion vers une basse de donnes contenant les informations.
Les locaux peuvent être situés dans diverses régions et les demandes peuvent être faites pour plusieurs régions à la fois. Par contre on se limite, pour le projet, à considérer seulement les régions d'île de France et les arrondissements de Paris, qui peuvent être identifiés par le code postal ou un autre code de région ( à vous de choisir une bonne solution).
1.Approche de base
On considère tout d'abord le contexte où les propriétaires vont placer leurs biens à louer sur le site Web et laissent ensuite toute la gestion au site web. Dans cette approche, on va considérer seulement le cas où un particulier souhaite louer un seul appartement.
Le principe est que le futur locataire va se connecter sur le site et va chercher, dans la base, les appartements disponibles qui peuvent lui convenir. La recherche se fait en fonction de plusieurs critères : dates de disponibilité, type d'appartement, emplacement, loyer, etc. Par contre le system doit interdire de demander la liste de tous les appartements disponibles dans la base de données. Aussi on ne fournit pas d'informations complètes sur les appartements directement sur la page Web, mais seulement une liste succincte pour aider le client à choisir au maximum 5 appartements parmi les proposés, en attendant des informations complémentaires sur chacun d'eux. Une fois les informations parvenues, le futur locataire a un maximum de 4 jours pour valider définitivement l'appartement de son choix.
Les appartements sélectionnés (choisi provisoirement pour étude) vont être considérés comme déjà loués (pour la période demandée) et donc non disponibles pour des autres demandes de réservation pour la même période. Ils seront à nouveau disponibles lors de la validation de l'un d'entre eux (sauf celui qui aura été validé) ou à la fin des 4 jours.
Dans la pratique, cette formule s'applique dans le cadre de la location de maisons de vacances.
2.Extension de l'approche de base
On veut maintenant compliquer le contexte et introduire la possibilité pour le propriétaire d'intervenir dans les décisions, ce qui est usuel pour une location de longue durée.
Avant de démarrer avec cette deuxième partie il est conseillé de faire une copie du projet. Il est acceptable de présenter les deux parties séparément si leur fusion n'a pas pu être faite.
Pour la deuxième approche, les locataires, comme précédemment, vont sélectionner un maximum de 5 emplacements. Ils doivent ensuite attendre la confirmation du propriétaire avant de valider leur choix. L'emplacement est considéré comme disponible  tant que le propriétaire n'a pas répondu.
Du coté du propriétaire, il reçoit aussi des listes de candidats possibles. Il fait alors un classement qui est retourné au site pour prendre une décision. Si le locataire n'a pas de réponse passés 2 jours qui suivent sa requête, la réponse sera considérée comme négative.
Comme précédemment le locataire a 4 jours pour décider s'il prend l' appartement pour lequel il a été accepté. Un appartement dont le propriétaire a accepté un locataire est considéré comme étant déjà loué pour la période donnée.
Le propriétaire peut répondre avec un refus n'importe quand ou un ordre de préférence pour les demandes qu'il a reçu au moment où il a prit une décision. Une demande reste sur sa page au plus 2 jours.
On veut ajouter encore plus de flexibilité à cette deuxième approche par l'introduction des facilités de location sur le site pour les entreprises. La différence est qu'une entreprise peut demander plusieurs locaux en même temps et si un des locaux n'est plus disponible ou si la demande pour un des locaux du paquet a été refusée, on veut alors que toute la demande soit rejetée automatiquement.
Le principe de choix est similaire à celui énoncé précédemment. Pour qu'un futur locataire puisse être choisi il faut qu'il soit « bien placé » par une majorité de propriétaires (avoir par exemple le meilleur rang moyen d'acceptation). En cas d'égalité parfaite entre candidats le système pourra choisir un des candidats par ordre alphabétique ou aléatoirement ou à partir d'une autre règle. En cas de superposition (plusieurs locataires ont choisi un même emplacement), le système doit attendre les réponses de tous les propriétaires concernant cette demande.
3.Demandes spécifiques
Pour toute l'application, quand on demande de spécifier un certain prix ou une certaine dimension, il faut pouvoir le spécifier en une des trois façons suivants: au moins x, au plus x ou entre x et y. Quand rien n'est spécifié il faut considérer qu'il peut prendre n'importe quelle valeur, mais on ne laisse pas la possibilité à quelqu’un de sortir toute la base de données sur une page Web par une simple demande avec toutes les cases vides. Au moins un des paramètres doit être spécifié pour donner une réponse.
Pour simuler le temps dans l'application on demande la création d'une table spéciale avec un seul enregistrement qui contient la date courante et qui va déterminer les actions à faire en fonction de son état. L'avancement de la date courante va se faire jour par jour par l'actionnement d'un bouton situé dans une page ouverte par le browser web.
Pour chaque demande d'un utilisateur il faut fournir un code et demander un mot de passe pour qu'il puisse revenir plus tard pour modifier, voir les demandes inscrites dans son compte et pouvoir les mettres a jour. Le code peut être demandé à l'utilisateur et il peut être, par exemple, l'adresse email à laquelle il peut être joint. C'est à vous d'établir le disign complet de l'application et de voir quelles informations seront utiles pour assurer une bonne ergonomie et confidentialité.
Vous pourrez  peut être régler en PHP des problèmes de cohérence que vous n'avez pu résoudre dans la partie de design de la base de données. Bien sur, nous souhaitons qu'un maximum ait été pris en compte lors de la construction des tables, si le coût est raisonnable. De même, on souhaite qu'un maximum de demandes soit envoyé vers la basse de données, quand c'est possible, plutôt que de les faire par une application PHP.
Il est demandé de décrire dans votre rapport toutes les décisions prises, tels que le design de la base de données, le choix des tables.
4.Requêtes à considérer sur les pages Web
Exprimez les Requêtes suivantes le mieux possible (SQL de préférence, PHP sinon). Écrivez les dans une page web.
1)Combien de temps maximum faut il attendre avant d'avoir une réponse à une demande de logement? (ici il faut considérer le cas des demandes multiples pour un même emplacement et suivi par des demandes en paquets faites par les entreprises par exemple ou les demandes multiples peuvent se superposer pour des emplacements différents du même paquet)
2)Quel est le propriétaire qui a le plus d'appartements?
3)Quels sont les appartements les plus associés à un appartement donné dans le cas des demandes par paquet?
4)Identifier les utilisateurs préenregistrés qui essaient de profiter du système en créant plusieurs comptes pour le même nom et prénom. Vérifier si ceux-ci ont aussi la même adresse.
5)Identifier les utilisateurs qui placent des demandes de réservation sur le site et qui ne prennent jamais d'appartement en location (tant pour la première approche que pour la   deuxième)
6)Quelle est la région la plus/moine chère? (en fonction du type de localisation des appartements adopté)
7)Quel sont les 3 locataires les plus grands déménageurs pour une période donnée?
8)Quel sont les 3 locataires les plus malins qui ont changé d'appartement en louant un après l'autre sans pose (les appartements sont loués à partir d'une date donnée pour une période donnée dans l'application) sur le site et qui l'ont fait le plus rapidement possible?
9)Identifier les dépendances des paquets de demandes multiples enchaînées en cycle. Par exemple si une entreprise demande deux emplacements dans le même temps et un des emplacements a été déjà demandé par une deuxième entreprise et l'autre emplacement par une troisième entreprise, alors on a un cycle si la deuxième et la troisième entreprise ont dans leur paquets respectifs des demandes d'emplacements en commun. Ces dépendances peuvent déterminer des cas non décidables.
10)Essayer d'imaginer un algorithme qui donne des points de fidélité (utilisateurs du site) aux locataires et propriétaires. C'est à vous de choisir les critères, mais il faut pouvoir les expliquer.