Les calculs sont effectués par le modèle déjà fourni.
Le cumul par poste donne:
</div>
| Poste | Cumul |
|:-------------|-------------:|
| TRANSPORT | 58.50 € |
| HEBERGEMENT | 65.00 € |
| RESTAURATION | 14.50 € |
| LOISIRS | 0.00 € |
| AUTRES | 12.00 € |
| **TOTAL** | **150.00 €** |
<div style="float:left;width:30%">
liste des postes
| 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 |
|:-------------|---------:|:-----------------|
| 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 |
<div style="clear:both"></div>
## Interface de l'application
...
...
@@ -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`.
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`).
* `addParticipant(String)`: ajouter un participant.
* `getParticipant(int)`: accès à un participant par sa position.
* `removeParticipant(String)`: supprimer un participant.
* `getNbParticipants`: lire le nombre de participants.
* `addOperation(String, String, double)`: ajouter une opération.
* `getOperation(int)`: accès à une opération par son numéro.
* `removeOperation(int)`: supprimer une opération.
* `getNbOpérations`: lire le nombre d'opérations.
* `getSum(String)`: lire le cumul pour un poste (désigné par son nom).
* `computeBalance()`: calcule les soldes et totaux.
* `getNbOperations()`: affiche le nombre d'opérations totales.
* `getNbOperations(string)`: affiche le nombre d'opérations pour un poste.
* `getSumOperation()`: affiche le cumul des montants.
* `getSumOperations(string)`: affiche le cumul des opérations pour un poste.
## Tâches à réaliser
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.
## Tâches à réaliser.
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:
(pour chaque ticket et en bleu, les méthodes vous fournissant les données)
1. Afficher le cumul des dépenses par poste.
<api>getSumOperations(string)`: affiche le cumul des opérations pour un poste.</api>
2. Completer les classes internes `ParticipantAdapter` et `ParticipantViewHolder` pour afficher les noms des participant dans `R.id.text1`.
<api>getNbParticipants: lire le nombre de participants.</api>
<api>getParticipant(int)`: accès à un participant par sa position.</api>
<api>Participant.getName()`: accesseur sur le nom du paticipant.</api>
3. Afficher le solde par participant en dessous de chaque nom (utiliser le champ `TextView` dont l'id est `R.id.text2`)
<api>getBalance(String participant): accesseur sur le solde du participant</api>
4. Ajouter un participant.
L'EditText `R.id.new_participant` permet la saisie du pseudo.
Le bouton `R.id.add_participant` effectuera l'ajout.
<api>addParticipant(String): ajouter un participant.</api>
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.
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...`
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.
6. Ajouter un menu contextuel sur la liste des participants qui comporte un seul item qui permet de supprimer un participant.
<api>removeParticipant(String): supprimer un participant.</api>
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.
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>