Compare commits

...

5 Commits

Author SHA1 Message Date
Theal0 4e3c6a7f32 Ajout de la documentation technique de la version mobile 2021-05-21 13:42:10 +02:00
Theal0 7db9a5ea8d Mise a jour du cahier des charges
- Ajout d'une RoadMap
- Modifications mineures
2021-04-22 09:25:46 +02:00
Theal0 6a76cfd20c Mise a jour du cahier des charges
- Modification de certaines pages
- Changements des nécéssités dans l'API (Format et contenu)
- Ajout de quelques choix de Framework (A completer)

(Version provisoire | en cours)
2021-04-21 15:47:29 +02:00
Theal0 3182ac4f2e Mise a jour du cahier des charges 2021-04-20 14:00:09 +02:00
Theal0 bd73613aab Ajout d'une page pour le cahier des chages de la version mobile de ScoDoc (v0) 2021-04-20 11:06:52 +02:00
2 changed files with 556 additions and 0 deletions

View File

@ -0,0 +1,151 @@
# Cahier des charges (v0) du projet d'adaptation mobile
Cahier des charges rassemblant les fonctionnalités à implémenter pour la version mobile de ScoDoc.
## Roadmap
**v0** : Lecture seule
**v1**: v0 + fixes + saisie absences
**Beta Release (scodoc-devel)**
**v2**: fixes (feedback beta tests) + intégration à distrib ScoDoc7.
**Release**
Documentation et tests
## Fonctionnalités
### Login (/ScoDoc)
Page de login inspirée de la version web actuelle (Avertissements...)
Login par département.
### Acceuil / Choix du département (/Scodoc)
Page d'acceuil, liste les départements auquels l'utilisateur est membre.
Liens vers:
- `Scolarité`
### Scolarité / Semestres (ScoDoc/DEPT/Scolarite)
Consultation des semestres et sessions en cours.
Liens vers:
- `Gestion Semestre`
### Gestion Semestre (ScoDoc/DEPT/Scolarite/Notes)
Accès au tableau de bord des formations.
Depuis ce tableau de bord:
- Affichage des infos de la formations
- Affichage sous forme de liste des enseignants
- Affichage des étudiants inscrits (Redirection vers `Page étudiant`) (+ SearchBar)
- Listes et exportation
- Photos
Liens vers:
- `Profil étudiant`
### Profil étudiant (ScoDoc/RT/Scolarite/ficheEtud?etudid=ETUD_ID)
Affichage des informations de l'étudiant.
Liens vers:
- `Gestion/Saisie des absences` (Ajout, Suppression, Justification)
- `Bulletin de notes`
(Joindre `Saisie des absences` et `Bulletin de notes` a cette page ?)
### Saisie des absences (Page a définir )
(Utilisation d'un dropdown pour le choix du groupe)
Affichage d'un tableau (Absences matin/après-midi séparées)
- A la semaine
- Sur un jour précis
### Bulletin de notes (Page a définir)
Affiche le bulletin de note d'un élève
### Paramètres (Page à définir | Probablement accessible depuis une sidebar)
Gestion de certains paramètres (A définir) du département
Potentiellement plusieurs pages (Paramètres de departement, de compte...)
## Besoins dans l'API (Source: [Documentation de l'API](https://scodoc.org/ScoDocAPI))
| Old API | New API | Remarque |
|---------|---------|----------|
| Login | | |
| `doLogin` | | Connexion avec identifiants |
| Acceuil / Choix DEPT | | |
| `index_dept` | | ??? |
| `list_depts` | | Liste les départements disponibles |
| `DeptId` | | Récupère les identifiants de départements |
| Scolarité / Semestres | | |
| `formsemestre_list` | | Liste des semestres |
| Gestion Semestre | | |
| `formation_table_recap` (?) | | Affichage des infos de la formation |
| `do_ens_list` | | Liste des enseignants |
| `search_etud_by_name` | | Recherche d'étudiant par nom |
| `search_etud_in_dept` | | Recherche d'étudiant dans le departement|
| `trombino` | | Affichage des photos des étudiants|
| Profil étudiant | | |
| `etud_info` | | Recuperation des informations d'un étudiant |
| Saisie des absences | | |
| `CalAbs` | | Recuperation d'un calendrier des absences |
| `EtatAbsences` | | Recuperation de l'état des absences |
| Bulletin de notes | | |
| `formsemestre_bulletinetud` | | Recuperation d'un bulletin de notes |
## Choix des outils (Framework JS)
### Solutions "modernes" et adaptées
Les solutions retenues ici sont récentes et mises a jour, et probablement plus durables.
#### ReactJS (Choix final)
ReactJS (OpenSource) utilise une syntaxe JSX crée en 2013 et développée par Facebook (et sa communauté).
#### Vue JS
VueJS est un Framework OpenSource crée par Evan You en 2013
#### Choix
Les deux framework ont leurs avantages, mais malgré sa difficulté a prendre en main,
React est plus adapté aux projets de cette envergure.
React est également plutot orienté mobile (iOS/Android)
Les deux framework sont bien documentés et très complets.
### Autres solutions étudiées
Ces solutions n'ont pas été retenues car inadaptés au projet
#### Angular
Utilise des TypeScript, difficile a prendre en main, d'autres solutions sont plus complètes.
#### EmberJS
Très difficile a prendre en main, Framework plutot "lourd" vu l'ampleur du projet.
#### Svelte
Interessant mais très recent, donc a une marge d'évolution et pour le moment assez incomplet.

View File

@ -0,0 +1,405 @@
# Classes
## `/`
<dl>
<dt><a href="#ChoixDept">ChoixDept</a></dt>
<dd><p>Page de choix du département</p>
</dd>
<dt><a href="#Etudiant">Etudiant</a></dt>
<dd><p>Page d&#39;information d&#39;un étudiant&#39;</p>
</dd>
<dt><a href="#GestionSemestre">GestionSemestre</a></dt>
<dd><p>Page de gestion du semestre</p>
</dd>
<dt><a href="#Login">Login</a></dt>
<dd><p>Page de Login</p>
</dd>
<dt><a href="#Scolarite">Scolarite</a></dt>
<dd><p>Page de choix du semestre</p>
</dd>
<dt><a href="#ScoNavBar">ScoNavBar</a></dt>
<dd><p>Barre de navigation</p>
</dd>
<dt><a href="#SearchStudent">SearchStudent</a></dt>
<dd><p>Module de recherche d&#39;étudiant</p>
</dd>
</dl>
## `/GestionSemestre`
<dl>
<dt><a href="#Absences">Absences</a></dt>
<dd><p>Page de gestion des absences</p>
</dd>
<dt><a href="#Accueil">Accueil</a></dt>
<dd><p>Page d&#39;accueil de la gestion du semestre</p>
</dd>
<dt><a href="#Bulletin">Bulletin</a></dt>
<dd><p>Page de présentation des bulletins étudiants</p>
</dd>
<dt><a href="#Etudiants">Etudiants</a></dt>
<dd><p>Page de présentation des étudiants inscrits au semestre</p>
</dd>
</dl>
## `/GestionSemestre/Absences`
<dl>
<dt><a href="#JustAbs">JustAbs</a></dt>
<dd><p>Module de justification des absences</p>
</dd>
<dt><a href="#SaisieAbs">SaisieAbs</a></dt>
<dd><p>Module de saisie des absences</p>
</dd>
<dt><a href="#SupprAbs">SupprAbs</a></dt>
<dd><p>Module de suppression des absences</p>
</dd>
</dl>
<br>
---
# Functions
<dl>
<dt><a href="#get">get(url)</a><code>Promise.&lt;Response&gt;</code></dt>
<dd><p>Lance une requête GET a l&#39;URL donnée en paramètre et retourne une Promise.</p>
</dd>
<dt><a href="#getLogin">getLogin(url, login, pass)</a><code>Promise.&lt;Response&gt;</code></dt>
<dd><p>Lance une requête GET a l&#39;URL donnée en paramètre et retourne une Promise.
Dans ce cas particulier, on ajoute un header d&#39;authentification.</p>
</dd>
<dt><a href="#getJson">getJson(url)</a><code>Promise.&lt;{data: any}&gt;</code></dt>
<dd><p>Lance une requête GET a l&#39;URL donnée en paramètre et retourne les données JSON d&#39;une Promise.</p>
</dd>
<dt><a href="#post">post(url, data)</a><code>Promise.&lt;Response&gt;</code></dt>
<dd><p>Lance une requête POST a l&#39;URL donnée en paramètre et retourne une Promise.</p>
</dd>
</dl>
<br>
---
## `/`
<a name="ChoixDept"></a>
## ChoixDept
Page de choix du département
**Kind**: global class
<a name="ChoixDept+getData"></a>
### choixDept.getData()
Recupère la liste des départements depuis l'API
**Kind**: instance method of [<code>ChoixDept</code>](#ChoixDept)
<a name="Etudiant"></a>
## Etudiant
Page d'information d'un étudiant'
**Kind**: global class
<a name="Etudiant+getData"></a>
### etudiant.getData()
Recupère les données de l'étudiant depuis l'API
**Kind**: instance method of [<code>Etudiant</code>](#Etudiant)
<a name="GestionSemestre"></a>
## GestionSemestre
Page de gestion du semestre
**Kind**: global class
<a name="GestionSemestre+getData"></a>
### gestionSemestre.getData()
Recupère la liste des étudiants inscrits au semestre pour le Select depuis l'API
**Kind**: instance method of [<code>GestionSemestre</code>](#GestionSemestre)
<a name="Login"></a>
## Login
Page de Login
**Kind**: global class
<a name="Login+checkCredentials"></a>
### login.checkCredentials(e)
Verifie la validité des identifiants depuis l'API
**Kind**: instance method of [<code>Login</code>](#Login)
| Param | Type |
| --- | --- |
| e | <code>event</code> |
<a name="Scolarite"></a>
## Scolarite
Page de choix du semestre
**Kind**: global class
<a name="Scolarite+getData"></a>
### scolarite.getData()
Recupère la liste des semestres depuis l'API
**Kind**: instance method of [<code>Scolarite</code>](#Scolarite)
<a name="ScoNavBar"></a>
## ScoNavBar
Barre de navigation
**Kind**: global class
<a name="SearchStudent"></a>
## SearchStudent
Module de recherche d'étudiant
**Kind**: global class
* [SearchStudent](#SearchStudent)
* [.searchStudent(search)](#SearchStudent+searchStudent)
* [.result()](#SearchStudent+result) ⇒ <code>JSX.Element</code>
<a name="SearchStudent+searchStudent"></a>
### searchStudent.searchStudent(search)
Lance une recherche de l'étudiant depuis l'API
**Kind**: instance method of [<code>SearchStudent</code>](#SearchStudent)
| Param | Type | Description |
| --- | --- | --- |
| search | <code>String</code> | Texte recherché |
<a name="SearchStudent+result"></a>
### searchStudent.result() ⇒ <code>JSX.Element</code>
Presentation du résultat
**Kind**: instance method of [<code>SearchStudent</code>](#SearchStudent)
**Returns**: <code>JSX.Element</code> - - Resultat au format JSX
<br>
---
## `/GestionSemestre`
<a name="Absences"></a>
## Absences
Page de gestion des absences
**Kind**: global class
* [Absences](#Absences)
* [.openModal(key, data)](#Absences+openModal)
* [.getData()](#Absences+getData)
<a name="Absences+openModal"></a>
### absences.openModal(key, data)
Gère l'ouverture des Modal
**Kind**: instance method of [<code>Absences</code>](#Absences)
| Param | Type | Description |
| --- | --- | --- |
| key | <code>String</code> | Correspond au type de modal [isOpen, isDelOpen, isJustOpen] |
| data | <code>Object</code> | Objet contenant les données à transmettre |
<a name="Absences+getData"></a>
### absences.getData()
Recupère les données d'absences depuis l'API
**Kind**: instance method of [<code>Absences</code>](#Absences)
<a name="Accueil"></a>
## Accueil
Page d'accueil de la gestion du semestre
**Kind**: global class
<a name="Accueil+getData"></a>
### accueil.getData()
Recupère les données du semestre selectionné depuis l'API
**Kind**: instance method of [<code>Accueil</code>](#Accueil)
<a name="Bulletin"></a>
## Bulletin
Page de présentation des bulletins étudiants
**Kind**: global class
* [Bulletin](#Bulletin)
* [.getData()](#Bulletin+getData)
* [.getPdf()](#Bulletin+getPdf)
<a name="Bulletin+getData"></a>
### bulletin.getData()
Recupère les données de bulletin depuis l'API
**Kind**: instance method of [<code>Bulletin</code>](#Bulletin)
<a name="Bulletin+getPdf"></a>
### bulletin.getPdf()
Recupère les données de bulletin en tant que "blob" pour un PDF depuis l'API
**Kind**: instance method of [<code>Bulletin</code>](#Bulletin)
<a name="Etudiants"></a>
## Etudiants
Page de présentation des étudiants inscrits au semestre
**Kind**: global class
<a name="Etudiants+getData"></a>
### etudiants.getData()
Recupère la liste des étudiants inscrits au semestre depuis l'API
**Kind**: instance method of [<code>Etudiants</code>](#Etudiants)
<br>
---
## `/GestionSemestre/Absences`
<a name="JustAbs"></a>
## JustAbs
Module de justification des absences
**Kind**: global class
* [JustAbs](#JustAbs)
* [.onFormSubmit](#JustAbs+onFormSubmit)
* [.postData(data)](#JustAbs+postData)
<a name="JustAbs+onFormSubmit"></a>
### justAbs.onFormSubmit
Gestion des données du formulaire
**Kind**: instance property of [<code>JustAbs</code>](#JustAbs)
| Param | Type |
| --- | --- |
| e | <code>Event</code> |
<a name="JustAbs+postData"></a>
### justAbs.postData(data)
Envoie une requête POST a l'API
**Kind**: instance method of [<code>JustAbs</code>](#JustAbs)
| Param | Type | Description |
| --- | --- | --- |
| data | <code>String</code> | Données à envoyer sous la forme param1=val1&param2=val2... |
<a name="SaisieAbs"></a>
## SaisieAbs
Module de saisie des absences
**Kind**: global class
* [SaisieAbs](#SaisieAbs)
* [.onFormSubmit](#SaisieAbs+onFormSubmit)
* [.postData(data)](#SaisieAbs+postData)
<a name="SaisieAbs+onFormSubmit"></a>
### saisieAbs.onFormSubmit
Gestion des données du formulaire
**Kind**: instance property of [<code>SaisieAbs</code>](#SaisieAbs)
| Param | Type |
| --- | --- |
| e | <code>Event</code> |
<a name="SaisieAbs+postData"></a>
### saisieAbs.postData(data)
Envoie une requête POST a l'API
**Kind**: instance method of [<code>SaisieAbs</code>](#SaisieAbs)
| Param | Type | Description |
| --- | --- | --- |
| data | <code>String</code> | Données à envoyer sous la forme param1=val1&param2=val2... |
<a name="SupprAbs"></a>
## SupprAbs
Module de suppression des absences
**Kind**: global class
<a name="SupprAbs+postData"></a>
### supprAbs.postData(data)
Envoie une requête POST a l'API
**Kind**: instance method of [<code>SupprAbs</code>](#SupprAbs)
| Param | Type | Description |
| --- | --- | --- |
| data | <code>String</code> | Données à envoyer sous la forme param1=val1&param2=val2... |
<br>
---
## Global
<a name="get"></a>
## get(url) ⇒ <code>Promise.&lt;Response&gt;</code>
Lance une requête GET a l'URL donnée en paramètre et retourne une Promise.
**Kind**: global function
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | URL de la requête |
<a name="getLogin"></a>
## getLogin(url, login, pass) ⇒ <code>Promise.&lt;Response&gt;</code>
Lance une requête GET a l'URL donnée en paramètre et retourne une Promise. Dans ce cas particulier, on ajoute un header d'authentification.
**Kind**: global function
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | URL de la requête |
| login | <code>String</code> | Identifiant |
| pass | <code>String</code> | Mot de passe |
<a name="getJson"></a>
## getJson(url) ⇒ <code>Promise.&lt;{data: any}&gt;</code>
Lance une requête GET a l'URL donnée en paramètre et retourne les données JSON d'une Promise.
**Kind**: global function
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | URL de la requête |
<a name="post"></a>
## post(url, data) ⇒ <code>Promise.&lt;Response&gt;</code>
Lance une requête POST a l'URL donnée en paramètre et retourne une Promise.
**Kind**: global function
| Param | Type | Description |
| --- | --- | --- |
| url | <code>String</code> | URL de la requête |
| data | <code>String</code> | Données de la requête au format "param1=val1&param2=val2..." |