diff --git a/README.md b/README.md index a8af718..e13d0ce 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,246 @@ # TP_MVVM_2024 +*Marc Chevaldonné • le 2 septembre 2024* + +## Contexte + +La gestion du matériel au département informatique de l'IUT Clermont Auvergne, et en particulier la gestion des prêts et des emprunts, n'est pas satisfaisante aujourd'hui. + +Nous souhaiterions permettre aux usagers (étudiants, enseignants, personnel) de facilement emprunter et rendre du matériel, tout en gardant un contrôle. + +Le plus simple est de faire une application mobile multiplateformes (Android ou iPhone) pour faciliter son utilisation. + +On distingue alors trois types d'utilisateurs : + +- les étudiants (qui peuvent consulter la liste du matériel restant disponible, faire une demande d'emprunt ou rendre du matériel) +- le personnel affilié au département informatique (qui peut consulter la liste du matériel restant disponible, et emprunter et rendre du matériel mais sans autorisation ; il peut aussi réserver du matériel pour une période afin de garantir la possibilité d'emprunt par des étudiants pendant la période ; enfin, il peut accepter un emprunt ou le refuser) +- les administrateurs (qui ont les mêmes droits que le personnel mais qui peuvent en plus mettre à jour la liste du matériel, *ie* ajouter, modifier ou supprimer du matériel). + +Le matériel (un périphérique, un ordinateur, un smartphone, un livre, un outil, ...) est associé à un nom, un membre du personnel (un membre du personnel *responsable* de ce matériel), un nombre d'exemplaires. Chaque exemplaire possède un identifiant unique, un état (neuf, très bon état, bon état, état moyen, ...), une *situation* (emprunté, libre, réservé). + +Un emprunt est associé à un nom d'emprunteur, le nom du membre du personnel ayant validé l'emprunt, la date de l'emprunt et la date de retour. + +Il vous est demandé de réaliser cette application en respectant le calendrier et les contraintes ci-dessous. La quantité de travail étant importante, il est peu probable que quelqu'un parvienne à terminer l'application. C'est la raison pour laquelle il vous est demandé de respecter l'ordre des tâches ci-dessous qui a été pensé pour son intérêt pédagogique et sa difficulté croissante. + +## Fourni + +Le modèle est fourni ainsi qu'une couche d'accès aux données (probablement un stub, mais si je trouve le temps, une base de données locale ou accessible via un service web). + +## Calendrier prévisionnel + +On distinguera trois phases : + +1. Réalisation des vues (2 semaines) +2. Réalisation de l'application dans le respect du patron d'architecture **MVVM** (*Model-View-ViewModel*) (4 semaines). Pour cette partie, vous devrez utiliser votre propre *framework*. +3. Modification de l'application en utilisant le **MVVM Community Toolkit** (1 semaine). + +## Évaluation + +Vous serez évaluée/évalué à l'oral individuellement sur la base de votre travail. + +## Cas d'utilisation + +Les cas d'utilisation suivants sont donnés dans l'ordre dans lequel il vous est conseillé de les réaliser : + +### (Tous les utilisateurs) Préférences utilisateur + +#### Changer de thème + +L'utilisateur doit pouvoir changer de thème en utilisant l'une des méthodes suivantes (par ordre de difficulté croissante) : + +- utiliser le thème du système (*light* ou *dark*) : pour changer le thème, l'utilisateur doit donc changer le thème de son appareil, +- sauvegarder la préférence du thème au niveau de l'application avec comme possibilités : thème du système, *light* ou *dark* (dans les deux derniers cas, même si c'est différent du thème du système), +- même chose que précédemment avec un ou deux thèmes supplémentaires : + - *color-blindness* theme : pour augmenter l'accessibilité de l'application, permettre à l'utilisateur de choisir un thème adapté aux personnes ne percevant pas correctement les couleurs (comme les daltoniens par exemple), + - *Odin* theme : un thème utilisant les couleurs d'Odin + +#### Changer de langue + +L'utilisateur doit pouvoir changer la langue de l'application en utilisant l'une des méthodes suivantes (par ordre de difficulté croissante) : + +- utiliser la langue du système : pour changer la langue, l'utilisateur doit donc changer celle de son appareil, +- sauvegarder la préférence de la langue au niveau de l'application avec comme possibilités : langue du système, français ou *english* ou les langues que vous parlez couramment. + +#### Changer la taille de la police + +L'utilisateur doit pouvoir changer la taille de la police en utilisant l'une des méthodes suivantes (par ordre de difficulté croissante) : + +- utiliser la taille de police du système : pour la changer, l'utilisateur doit donc changer celle de son appareil, +- sauvegarder la préférence de la taille de la police au niveau de l'application avec comme possibilités : *je vois bien* et *je ne vois pas bien*. + +### (Tous les utilisateurs) Connexion/Déconnexion + +#### Se connecter + +L'utilisateur doit pouvoir se connecter pour accéder à toutes les autres fonctionnalités. Pour cela, il doit fournir son email et son mot de passe. + +> Note +> On simulera un cas où l'annuaire de l'IUT est utilisé. Il n'y a donc pas besoin de proposer un cas "S'inscrire" ou "J'ai oublié mon mot de passe". + +#### Se déconnecter + +L'utilisateur doit pouvoir se déconnecter à tout moment. + +### (Tous les utilisateurs) Voir le matériel + +#### Accéder à la liste du matériel + +L'utilisateur doit pouvoir voir l'intégralité du matériel. + +#### Accéder aux détails d'un élément + +L'utilisateur doit pouvoir accéder aux détails d'un élément du matériel. + +### (Tous les utilisateurs) Voir le matériel emprunté par l'utilisateur + +L'utilisateur doit pouvoir voir le matériel qu'il a emprunté. Pour celui-ci, il peut accéder aux détails et voir la date de retour qui avait été donnée lors de l'emprunt. + +### (Administrateurs) Ajouter/Modifier/Supprimer un périphérique + +Un administrateur doit pouvoir ajouter (en remplissant les détails), modifier les détails, ou supprimer un périphérique de la liste. + +Les détails associés à un périphérique sont : + +- le nom, +- la description, +- une photo (ou icone), +- le nom du *responsable*, +- le nombre d'exemplaires (s'il y en a plus d'un), +- la liste des exemplaires. + +Pour chaque exemplaire : + +- l'état d'emprunt (*emprunté* ou *libre*), +- l'état du matériel (*comme neuf*, *très bon*, *bon*, *moyen*) +- la date de retour si déjà emprunté. + +### (Membres du personnel) Emprunter/Rendre/Réserver + +#### Emprunter du matériel + +Un membre du personnel peut emprunter un périphérique sans faire de demande d'autorisation. Pour cela, il doit choisir un exemplaire du périphérique dans la liste du matériel. + +#### Rendre du matériel + +Un membre du personnel peut rendre un périphérique. Pour cela, il doit choisir le périphérique à rendre dans la liste du matériel qu'il a emprunté. + +#### Réserver du matériel + +Un membre du personnel peut réserver du matériel pour indiquer aux collègues qu'il est préférable de ne pas laisser des étudiants emprunter le matériel durant une période donnée. + +Pour cela, l'utilisateur doit donner les informations suivantes : + +- le périphérique concerné, +- le nombre d'exemplaires, +- la période (dates de début et de fin) + +### (Étudiants) Emprunter/Rendre + +#### Faire une demande d'emprunt de matériel + +Un étudiant peut faire une demande d'emprunt en précisant : + +- le périphérique (type et exemplaire), +- la date de retour, +- une liste de membres du personnel pouvant valider la demande, +- un commentaire (optionnel). + +#### Rendre du matériel + +Un étudiant peut indiquer qu'il souhaite rendre du matériel. Les membres du personnel indiqués précédemment recevront la demande. La liste peut être modifiée au moment du rendu. + +### (Membes du personnel) Valider un emprunt/rendu + +#### Valider un emprunt + +Un membre du personnel peut valider une demande d'emprunt qu'il a reçue. Avant de valider la demande, il peut changer éventuellement : + +- la date de retour, +- l'exemplaire. + +#### Valider un retour + +Un membre du personnel peut valider un retour d'un périphérique. + +> Note +> S'il était dans la liste des membres du personnel lors de la demande de rendu, il recevra la demande. +> Mais s'il n'était pas dans la liste, il peut quand même parcourir la liste du matériel, trouver l'exemplaire, et valider le rendu. + +#### Valider un emprunt rapide + +Un membre du personnel doit pouvoir réaliser un emprunt rapide en suivant les actions suivantes : + +- scanner le qrcode de l'étudiant (qu'on imaginera sur sa carte étudiant), +- scanner le qrcode de l'exemplaire, +- choisir une date de retour, +- valider. + +## Contraintes sur les vues + +### Couleurs, thèmes, police + +Concernant les thèmes, les couleurs et la police, on s'inspirera des applications classiques comme **Musique** ou **Podcast** sur iOS. + + + + +*Exemples de thèmes et couleurs *light* et *dark* pour l'application **Musique** sur iOS* + +### Affichage des listes et des détails + +Pour l'affichage de la liste et du détail, on s'inspirera de l'application **Discogs**. + + + + +*Exemples d'affichage de master/detail dans le cas de l'application **Discogs***. + +### Gestion de l'orientation + +On souhaite avoir un affichage du détail d'un périhérique différent en fonction de l'orientation (plutôt en une colonne en mode portrait ; plutôt sur deux colonnes en mode paysage) comme dans l'exemple ci-dessous : + + + + +*Exemples de gestion de l'orientation sur une application maison* + +On peut également gérer l'idiome (téléphone ou tablette) pour un rendu différent et adapté. + + + +*Exemples de rendu variant selon l'idiome sur une application maison* + +### Préférences + +Pour accéder aux préférences (et au bouton de déconnexion), on pourra choisir l'une des deux méthodes suivantes : + +- un menu tiroir comme dans l'application **ATP WTA Live** : + + + + +- un système classique iOS avec un *tap* sur l'icône de l'utilisateur suivi d'un parcours entre les différentes écrans de formulaire (comme dans l'application **Signal**) : + + Dans l'exemple ci-dessous, l'utilisateut tape sur son icône (en haut à gauche), puis sur *Paramètres* dans le menu contextuel, puis sur *Apparence*, puis sur *Thème* + + + + + + + +### Multi-plateformes + +L'application doit fonctionner sur Android et iOS. + +## Contraintes sur MVVM + +Il vous est demandé de suivre les conseils donnés en cours quant à l'utilisation du patron d'architecture **Model-View-ViewModel**, et notamment : + +- l'utilisation de *VM wrapper* et de *VM applicatives* +- l'utilisation la plus limitée possible de *code-behind* +- l'utilisation du *Data-Binding* aussi bien pour les propriétés que pour les actions +- l'utilisation de *ContentView*s +- l'utilisation de l'injection de dépendance. + +L'utilisation du framework **MVVM Community Toolkit** est interdite pour la partie 2, mais fait l'objet de la partie 3. Une validation de la partie 2 auprès de votre enseignant avant de passer à la partie 3. diff --git a/images/IMG_5679.PNG b/images/IMG_5679.PNG new file mode 100644 index 0000000..3924333 Binary files /dev/null and b/images/IMG_5679.PNG differ diff --git a/images/IMG_5712.PNG b/images/IMG_5712.PNG new file mode 100644 index 0000000..82ce25d Binary files /dev/null and b/images/IMG_5712.PNG differ diff --git a/images/IMG_9404.PNG b/images/IMG_9404.PNG new file mode 100644 index 0000000..7d783d4 Binary files /dev/null and b/images/IMG_9404.PNG differ diff --git a/images/IMG_9405.PNG b/images/IMG_9405.PNG new file mode 100644 index 0000000..eb43a1b Binary files /dev/null and b/images/IMG_9405.PNG differ diff --git a/images/IMG_9416.PNG b/images/IMG_9416.PNG new file mode 100644 index 0000000..853c118 Binary files /dev/null and b/images/IMG_9416.PNG differ diff --git a/images/IMG_9417.PNG b/images/IMG_9417.PNG new file mode 100644 index 0000000..cf8a571 Binary files /dev/null and b/images/IMG_9417.PNG differ diff --git a/images/IMG_9418.PNG b/images/IMG_9418.PNG new file mode 100644 index 0000000..c2f40b0 Binary files /dev/null and b/images/IMG_9418.PNG differ diff --git a/images/IMG_9419.PNG b/images/IMG_9419.PNG new file mode 100644 index 0000000..4e8e387 Binary files /dev/null and b/images/IMG_9419.PNG differ diff --git a/images/IMG_9420.PNG b/images/IMG_9420.PNG new file mode 100644 index 0000000..8bcecdd Binary files /dev/null and b/images/IMG_9420.PNG differ diff --git a/images/IMG_9421.PNG b/images/IMG_9421.PNG new file mode 100644 index 0000000..83dc42a Binary files /dev/null and b/images/IMG_9421.PNG differ diff --git a/images/IMG_9422.PNG b/images/IMG_9422.PNG new file mode 100644 index 0000000..8e6893c Binary files /dev/null and b/images/IMG_9422.PNG differ diff --git a/images/WTA_PlayerView_01.png b/images/WTA_PlayerView_01.png new file mode 100644 index 0000000..7d2686b Binary files /dev/null and b/images/WTA_PlayerView_01.png differ diff --git a/images/WTA_PlayerView_02.png b/images/WTA_PlayerView_02.png new file mode 100644 index 0000000..3135224 Binary files /dev/null and b/images/WTA_PlayerView_02.png differ diff --git a/images/WTA_PlayerView_03.png b/images/WTA_PlayerView_03.png new file mode 100644 index 0000000..82479eb Binary files /dev/null and b/images/WTA_PlayerView_03.png differ