Les calculs sont effectués par le modèle déjà fourni.
</div>
Le cumul par poste donne:
| Poste | Cumul |
<div style="float:left;width:30%">
|:-------------|-------------:|
liste des postes
| TRANSPORT | 58.50 € |
| HEBERGEMENT | 65.00 € |
| RESTAURATION | 14.50 € |
| LOISIRS | 0.00 € |
| AUTRES | 12.00 € |
| **TOTAL** | **150.00 €** |
| Poste | <b> Cumul |
|:-------------|--------------------:|
| TRANSPORT | <b> 58.50 € |
| HEBERGEMENT | <b> 65.00 € |
| RESTAURATION | <b> 14.50 € |
| LOISIRS | <b> 0.00 € |
| AUTRES | <b> 12.00 € |
| **TOTAL** | <b> **150.00 €** |
</div>
Et le solde par participant: (calculé comme 150/4 - ce qui a été payé par le participant)
| Participant | Solde | Détail du calcul |
<div style="clear:both"></div>
|:-------------|---------:|:-----------------|
| Ahmed | 10.50 € | 37.50 - 27.00 |
| Bruno | -27.50 € | 37.50 + 27.50 |
| Celine | -6.00 € | 37.50 - 43.50 |
| Déborah | 23.00 € | 37.50 - 14.50 |
## Interface de l'application
## Interface de l'application
...
@@ -145,41 +155,35 @@ La seconde activité présente la liste des opérations et permet d'afficher
...
@@ -145,41 +155,35 @@ La seconde activité présente la liste des opérations et permet d'afficher
Le modèle complet de données vous est fourni (vous n'aurez donc à priori à modifier aucune des classes `ModelApplication`, `Operation` ou `Participant`.
Le modèle complet de données vous est fourni (vous n'aurez donc à priori à modifier aucune des classes `ModelApplication`, `Operation` ou `Participant`.
Ce modèle est intégré dans la version initiale (et partielle) de l'application android.
Ce modèle est intégré dans la version initiale (et partielle) de l'application android.
Vous pouvez utiliser les méthodes suivantes du modèle (la classe `ModelApplication`).
## Tâches à réaliser.
* `addParticipant(String)`: ajouter un participant.
L'application qui vous est fournie avec ce projet est incomplète.
* `getParticipant(int)`: accès à un participant par sa position.
Dans le cadre de ce DS, vous devez réaliser les tickets suivants:
* `removeParticipant(String)`: supprimer un participant.
(pour chaque ticket et en bleu, les méthodes vous fournissant les données)
* `getNbParticipants`: lire le nombre de participants.
1. Afficher le cumul des dépenses par poste.
* `addOperation(String, String, double)`: ajouter une opération.
<api>getSumOperations(string)`: affiche le cumul des opérations pour un poste.</api>
* `getOperation(int)`: accès à une opération par son numéro.
2. Completer les classes internes `ParticipantAdapter` et `ParticipantViewHolder` pour afficher les noms des participant dans `R.id.text1`.
* `removeOperation(int)`: supprimer une opération.
<api>getNbParticipants: lire le nombre de participants.</api>
* `getNbOpérations`: lire le nombre d'opérations.
<api>getParticipant(int)`: accès à un participant par sa position.</api>
* `getSum(String)`: lire le cumul pour un poste (désigné par son nom).
<api>Participant.getName()`: accesseur sur le nom du paticipant.</api>
* `computeBalance()`: calcule les soldes et totaux.
3. Afficher le solde par participant en dessous de chaque nom (utiliser le champ `TextView` dont l'id est `R.id.text2`)
* `getNbOperations()`: affiche le nombre d'opérations totales.
<api>getBalance(String participant): accesseur sur le solde du participant</api>
* `getNbOperations(string)`: affiche le nombre d'opérations pour un poste.
4. Ajouter un participant.
* `getSumOperation()`: affiche le cumul des montants.
L'EditText `R.id.new_participant` permet la saisie du pseudo.
* `getSumOperations(string)`: affiche le cumul des opérations pour un poste.
Le bouton `R.id.add_participant` effectuera l'ajout.
<api>addParticipant(String): ajouter un participant.</api>
## Tâches à réaliser
5. Si l'ajout de participant est impossible (si un participant de même pseudo existe déjà) une exception est levée.
L'application qui vous est fournie avec ce projet est incomplète.
Dans le cadre de ce DS, vous devez réaliser les tickets suivants:
1. Afficher le cumul des dépenses par poste.
2. Completer les classes internes `ParticipantAdapter` et `ParticipantViewHolder` pour afficher les noms des participant dans `R.id.text1`.
3. Afficher le solde par participant en dessous de chaque nom.
Utiliser le champ `TextView` dont l'id est `R.id.text2`
et la méthode `getBalance(String participant)` de l'application.
4. Ajouter un participant. L'`EditText` `R.id.new_participant` permet la saisie du pseudo.
Le bouton `R.id.add_participant` effectuera l'ajout.
5. Si l'ajout de participant est impossible (si un participant de même pseudo existe déjà) une exception est levée.
Compléter la question précédente pour que ces exceptions soient récupérées et affichent une annonce (`Toast`) affichant le message lié à l'exception.
Compléter la question précédente pour que ces exceptions soient récupérées et affichent une annonce (`Toast`) affichant le message lié à l'exception.
6. Ajouter un menu contextuel sur la liste des participants qui comporte un seul item qui permet de supprimer un participant.
6. Ajouter un menu contextuel sur la liste des participants qui comporte un seul item qui permet de supprimer un participant.
7. Créer une seconde activité qui sera lancée par n'importe lequel des boutons libellé `STATS...`
<api>removeParticipant(String): supprimer un participant.</api>
Cette activité se présentera sous la forme affichée ci-dessus (faire le layout complet) mais seul les statistiques générales seront présentées.
7. Créer une seconde activité qui sera lancée par n'importe lequel des boutons libellé `STATS...`
Cette activité se présentera sous la forme affichée ci-dessus (faire le layout complet) mais seul les statistiques générales seront présentées.
<api>getNbOperations(): affiche le nombre d'opérations totales</api>
<api>getSumOperation(): affiche le cumul des montants.</api>
8. Faire en sorte que l'appui sur le bouton `Fermer` fasse revenir sur l'activité initiale.
8. Faire en sorte que l'appui sur le bouton `Fermer` fasse revenir sur l'activité initiale.
9. Complétez le projet de sorte que les statistiques propres à un poste soient affichées sur la partie inférieure (selon le bouton `STATS...` choisi).
9. Complétez le projet de sorte que les statistiques propres à un poste soient affichées sur la partie inférieure (selon le bouton `STATS...` choisi).
<api>getSum(String): lire le cumul pour un poste (désigné par son nom)</api>
<api>getNbOperations(string): affiche le nombre d'opérations pour un poste</api>