Les missions
Nous allons maintenant développer le module mission.
TP : Module mission
- Ajouter un module
MissionModule
sur le même principe que le moduleAgentModule
- Déplacer le component
MissionListComponent
dans le moduleMissionModule
- Ajouter un component
MissionListTableComponent
pour afficher le tableau des missions - Ajouter deux colonnes supplémentaires contenant respectivement un bouton
Modifier
et un boutonSupprimer
- Au-dessus du tableau, ajouter un bouton
Ajouter une mission
TP : Le service mission
Voici un exemple d'un objet Mission :
{
cost: 680,
country: "Australie",
date_from: "2021-01-13",
date_to: "2021-02-10",
id_mission: 1,
ref_agent: 2
}
- Dans le module
MissionModule
ajouter une interfacemission.model
pour définir l'objetMission
- Dans le service
MissionService
ajouter la méthodeloadMissionList
pour charger les missions - Dans la méthode
loadMissionList
appeler l'URLhttp://localhost:3000/missions
enGET
pour charger les missions - Dans le service
MissionService
ajouter la méthodeaddNewMission
pour ajouter une nouvelle mission (laisser vide pour le moment) - Dans le service
MissionService
ajouter la méthodeeditMission
pour éditer une mission (laisser vide pour le moment) - Dans le service
MissionService
ajouter la méthodedeleteMission
pour supprimer une mission (laisser vide pour le moment)
Résultat attendu :
TP : Prénom et nom de l'agent
Dans l'affichage des missions on peut voir la référence vers l'ID de l'agent concerné par la mission. Il faudrait pouvoir afficher le prénom et le nom de l'agent pour plus de clarté.
- Dans le module
MissionListComponent
charger le serviceAgentService
- Dans la fonction d'initialisation du component, appeler le chargement des agents
- Ajouter la liste des agents en input dans le component
MissionListTableComponent
- Dans le component
MissionListTableComponent
, ajouter une méthodegetFullNameByIdAgent()
qui prend en paramètre l'ID d'un agent et qui retourne le nom complet (prénom + nom)
Résultat attendu :
TP : Supprimer une mission
- Dans le component
MissionListTableComponent
ajouter un paramètre de sortiedeleteMission
- Un clic sur le bouton de suppression doit appeler le paramètre de sortie
deleteMission
avec l'ID de la mission - Dans
MissionListComponent
, à l'appel du paramètredeleteMission
, exécuter la méthodedeleteMission
du serviceMissionService
- Appeler l'URL
http://localhost:3000/missions/del/:idMission
avec la méthodeDELETE
pour supprimer une mission - Au retour de la requête envoyer un
toastr
à l'utilisateur pour l'informer de la suppression de la mission et supprimer la mission du tableaumissions
Résultat attendu :
TP : Ajouter une nouvelle mission
Dans cette partie nous allons créer un formulaire réactif pour créer une nouvelle mission.
- Importer le module
ReactiveFormsModule
depuis@angular/forms
dans le modulemission
- Créer un nouveau component
MissionFormComponent
- Dans le component
MissionFormComponent
, importer le serviceFormBuilder
- Créer le formulaire réactif
missionForm
qui doit correspondre à l'objet mission (cost
,country
,date_from
,date_to
,ref_agent
) - Dans la vue du component
MissionFormComponent
créer le formulaire HTML et lier votre formulairemissionForm
- Dans le component
MissionFormComponent
, ajouter une variable en inputagents
de typeAgent[]
- Dans le component
MissionFormComponent
, ajouter une variable en outputonSubmit
de typeEventEmitter<Mission>
- Dans le component
MissionFormComponent
, ajouter une méthodesubmit
- Dans la vue du component
MissionFormComponent
, lier l'évènementngSubmit
avec la méthodesubmit
- La méthode
submit
doit envoyer un nouvel objet mission dans la variable d'outputonSubmit
- Dans la vue du component
MissionFormComponent
le champ de formulaire Agent doit être unselect
avec la liste des agents. Pour cela utiliser la propriétéagents
. - Importer le module
BsDatepickerModule.forRoot()
depuisngx-bootstrap/datepicker
dans le modulemission
- Dans la vue du component
MissionFormComponent
les champs de formulairedate_from
etdate_to
doivent ouvrir undatepicker
de sélection. Pour cela ajouter l'attributbsDatepicker
et[bsConfig]="{ dateInputFormat: 'YYYY-MM-DD', isAnimated: true }"
sur les deux inputs - Dans la méthode
submit
du componentMissionFormComponent
il faut appelertoISOString().split('T')[0]
sur les valeurs dedate_from
etdate_to
pour avoir les valeurs au format 'YYYY-MM-DD' - Créer un nouveau component
NewMissionComponent
et importer les servicesMissionService
etAgentService
- Dans la vue du component
NewMissionComponent
appeler le componentMissionFormComponent
. L'évenement de sortieonSubmit
doit appeler la méthodeaddNewMission
du serviceMissionService
- Dans le service
MissionService
la méthodeaddNewMission(mission: Mission)
doit appeler l'URLhttp://localhost:3000/missions/add
en POST. Au retour de la réponse, il faut envoyer untoastr
pour prévenir que la mission a bien été créée et renvoyer vers la pagemission-list
- Dans le routeur
MissionRoutingModule
, ajouter une routenew-mission
vers le componentNewMissionComponent
- Dans le component
MissionListComponent
régler lerouterLink
du bouton ajouter une mission vers la route/new-mission
du backend
Résultat attendu :
TP : Éditer une mission
Dans cette partie nous allons voir comment ré-utiliser le formulaire de mission pour éditer une mission existante.
Il est possible de passer une variable dans une route Angular. Pour cela il faut définir une route avec un paramètre comme ceci :
const routes: Routes = [
{ path: 'edit-book/:id_book', component: EditBookComponent },
];
Ici nous avons définis une variable id_book
et si l'utilisateur appel /edit-book/1
alors id_book
vaudra 1.
Pour récupérer la variable dans le component, il faut importer le service ActivatedRoute
et appeler snapshot.paramMap.get('id_book')
pour avoir la valeur, exemple :
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router'
@Component({
selector: 'app-edit-book',
templateUrl: './edit-book.component.html',
styleUrls: ['./edit-book.component.scss']
})
export class EditBookComponent {
constructor(private route: ActivatedRoute) { }
getIdBook(): number {
return this.route.snapshot.paramMap.get('id_book');
}
}
- Dans le component
MissionFormComponent
, ajouter une variable en inputmission
de typeMission
- Ajouter un nouveau component
EditMissionComponent
et importer les servicesMissionService
etAgentService
- Ajouter une nouvelle route
edit-mission/:id_mission
vers le componentEditMissionComponent
- Dans la vue
EditMissionComponent
l'évenement de sortieonSubmit
doit appeler la méthodeeditMission
du serviceMissionService
- La méthode
editMission
du serviceMissionService
doit appeler l'URLhttp://localhost:3000/missions/update/:id_mission
en PUT. Au retour de la réponse, il faut envoyer untoastr
pour informer que la mission a bien été éditée puis renvoyer l'utilisateur vers la pagemission-list
- Dans la vue du component
EditMissionComponent
appeler le componentMissionFormComponent
et envoyer la mission qui correspond àid_mission
passé en paramètre de la route. - Dans le component
MissionFormComponent
implémenter l'interfaceOnInit
et ajouter la méthodengOnInit
- Si la variable d'input
mission
est différent denull
alors éditer le formulaire avec les valeurs demission
. - Dans la méthode
submit
si la variable d'inputmission
estnull
alors mettreid_mission = 0
sinonid_mission
doit être égale àmission.id_mission
Résultat attendu :