diff --git a/package-lock.json b/package-lock.json index a7b79ff4ae1bfbce4116a3047847a5c0008c671f..f04e87a59caac613f408dc98b2f884201fe7757a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7146,9 +7146,9 @@ } }, "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "move-concurrently": { "version": "1.0.1", diff --git a/package.json b/package.json index 7017524ed15d4530dfe73ca58e3d90b904db58ba..3e5acf48ec95e69783ab196a04b1a682ea576812 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "fuse.js": "^3.2.1", "hammerjs": "^2.0.8", "jump.js": "^1.0.2", + "moment": "^2.29.1", "ng2-emoji": "^0.2.0", "ngx-markdown": "^6.3.0", "ngx-moment": "^2.0.0", diff --git a/src/app/members/account/account-routing.module.ts b/src/app/members/account/account-routing.module.ts index 64390455f1a502e50d69d835ec51f0cfb2bb630f..4494b72832145e3830c1a6bc3928a12b7ec2734b 100644 --- a/src/app/members/account/account-routing.module.ts +++ b/src/app/members/account/account-routing.module.ts @@ -7,6 +7,7 @@ import {MyDataComponent} from './my-data/my-data.component' import {EditDataComponent} from './edit-data/edit-data.component' import {MyFileComponent} from './my-file/my-file.component' import { PersonalDataResolver } from './core' +import {AccountValidationResolver} from './core' const routes: Routes = [ @@ -19,9 +20,9 @@ const routes: Routes = [ path: 'donnees', component: MyDataComponent, resolve : { - 'personalData' : PersonalDataResolver + 'personalData' : PersonalDataResolver, + //'validatedAccount' : AccountValidationResolver }, - }, { path: 'modifier_donnees', component: EditDataComponent, diff --git a/src/app/members/account/core/account-validation.service.ts b/src/app/members/account/core/account-validation.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..5dbc601623b33089eae49582ebf38d698c81fc77 --- /dev/null +++ b/src/app/members/account/core/account-validation.service.ts @@ -0,0 +1,69 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Resolve,ActivatedRouteSnapshot } from '@angular/router'; +import { Observable, of, forkJoin } from 'rxjs'; +import { tap, map, filter,catchError } from 'rxjs/operators'; +import { ApiService, AuthService,} from 'app/core'; + + +@Injectable({ + providedIn: 'root' +}) +export class AccountValidationService extends ApiService { + + //api url + private baseUrl = this.apiUrl + 'registrations'; + + constructor( + private http: HttpClient, + private auth: AuthService + ) { super(); } + + //get personalData by user + get(filters: any): Observable<String> { + const url = this.baseUrl; + return this.http.get(url, { params: filters }).pipe( + map((data: any) => { + + return data}), + ); + } + retrieve(id: number | string): Observable<String> { + let url = this.baseUrl; + return this.http.get<String>(url).pipe( + map(v =>{ + console.log('validation',v) + if(v instanceof Array){ + if (v.length>1){ + return v.find((user)=>user.user_id===id).validated + } + return v[0].validated + } + + }), + ); + } + + forUser(userId: number): Observable<String> { + return this.get({ user_id: String(userId)}); + } +} + +@Injectable({ + providedIn: 'root' + }) +export class AccountValidationResolver implements Resolve<String>{ + + constructor(private service: AccountValidationService, private auth: AuthService) { } + //fetch registration status + + resolve(route: ActivatedRouteSnapshot): Observable<String> { + const user = this.auth.getUserSnapshot(); + return this.service.retrieve(user.id).pipe( + catchError(e => of(null)) + ); + + } +} + + diff --git a/src/app/members/account/core/index.ts b/src/app/members/account/core/index.ts index 93715acac06af7dd80f8a27a25ad5d95ca04bf7f..ccdcd8cea7180e630c43cce7fc2094f35eec6741 100644 --- a/src/app/members/account/core/index.ts +++ b/src/app/members/account/core/index.ts @@ -1,2 +1,3 @@ export * from './personal-data.model'; export * from './personal-data.service'; +export * from './account-validation.service'; diff --git a/src/app/members/account/core/personal-data.model.ts b/src/app/members/account/core/personal-data.model.ts index 468eaa426b60e27c22ac48778cbd8ac1f53775be..a2c4ba0964b68022ea421987badd25d8375136ce 100644 --- a/src/app/members/account/core/personal-data.model.ts +++ b/src/app/members/account/core/personal-data.model.ts @@ -1,10 +1,13 @@ import { User, UserAdapter, IAdapter } from 'app/core'; + export class PersonalDataSchema { user_id: string; url : string; + year: string; + registration: Registration; firstName:string; lastName: string; gender: string; @@ -27,6 +30,21 @@ export class PersonalDataSchema { dependantsNumber:number; } +class RegistrationSchema { + id: Number; + submitted: string; + validated: boolean; +} + + +export class Registration extends RegistrationSchema { + + constructor(args: RegistrationSchema) { + super(); + Object.assign(this, args); + } +} + export class PersonalData extends PersonalDataSchema { constructor(args: PersonalDataSchema) { @@ -41,10 +59,12 @@ export class PersonalDataAdapter implements IAdapter<PersonalData> { adapt(data: any): PersonalData { return new PersonalData({ - url : data.url, - user_id: data.user_id, - firstName: data.user.first_name, - lastName: data.user.last_name, + url : data.url?data.url:'', + user_id: data.user_id?data.user_id:'', + registration:data.registration?data.registration:{id: 0,submitted: '',validated: false}, + year:data.year?data.year:'', + firstName: data.user.first_name?data.user.first_name:'', + lastName: data.user.last_name?data.user.last_name:'', gender: data.gender?data.gender:'', nationality : data.nationality?data.nationality:'', addressNumber: data.addressNumber?data.addressNumber:'', diff --git a/src/app/members/account/core/personal-data.service.ts b/src/app/members/account/core/personal-data.service.ts index c5bf690deafbd8fca4db32385c14387391b0a667..be2695f8cbb6dc4f3a89f085c349a4fe6db6ffab 100644 --- a/src/app/members/account/core/personal-data.service.ts +++ b/src/app/members/account/core/personal-data.service.ts @@ -34,11 +34,18 @@ export class PersonalDataService extends ApiService { let url = this.baseUrl; return this.http.get<PersonalData>(url).pipe( map(v =>{ + if(v instanceof Array){ if (v.length>1){ return this.adapter.adapt(v.find((user)=>user.user_id===id)) } - return this.adapter.adapt(v[0]) + else if (v.length===1){ + return this.adapter.adapt(v[0]) + }else{ + + return this.adapter.adapt({}) + } + } }), diff --git a/src/app/members/account/edit-data/edit-data.component.ts b/src/app/members/account/edit-data/edit-data.component.ts index 9bd2489410fc184120f94b0917d3def99865de16..01714e3de4a17ae2a977bb64ec67cbb7b4fa4387 100644 --- a/src/app/members/account/edit-data/edit-data.component.ts +++ b/src/app/members/account/edit-data/edit-data.component.ts @@ -94,8 +94,8 @@ export class EditDataComponent implements OnInit { street:this.personalData.street, zipCode:this.personalData.zipCode, city:this.personalData.city, - personalPhone:[this.personalData.personalPhone,Validators.pattern("^[0-9, ]*[0-9, ]{10}$")], - parentsPhone:this.personalData.parentsPhone, + personalPhone:[this.personalData.personalPhone,Validators.pattern("^([0-9]{2}[. ]?){5}$")], + parentsPhone:[this.personalData.parentsPhone,Validators.pattern("^([0-9]{2}[. ]?){5}$")], parentsEmail:[this.personalData.parentsEmail,Validators.email], school:this.personalData.school, grade:this.personalData.grade, diff --git a/src/app/members/account/my-data/my-data.component.html b/src/app/members/account/my-data/my-data.component.html index d17a78139d79381b6ed2138e4ea12dfa2e78e330..935b3768091963c6c6a796c599c5738f14eb9af9 100644 --- a/src/app/members/account/my-data/my-data.component.html +++ b/src/app/members/account/my-data/my-data.component.html @@ -1,4 +1,7 @@ <app-form-page> + <mat-divider class='top-margin'></mat-divider> + <p><span class='label'>Statut du dossier d'inscription : </span><span [ngClass]="styleValidatedAccount()">{{validatedAccount}}</span></p> + <mat-divider></mat-divider> <h2>Mes données</h2> <p><span class='label'>Prénom : </span>{{personalData.firstName}} </p> <p><span class='label'>Nom : </span>{{personalData.lastName}}</p> diff --git a/src/app/members/account/my-data/my-data.component.scss b/src/app/members/account/my-data/my-data.component.scss index 80c01087c041cb2478c88bbd9577c9037b6cb8e2..b787390fa97d901555fd5b21ffa110606f623d0e 100644 --- a/src/app/members/account/my-data/my-data.component.scss +++ b/src/app/members/account/my-data/my-data.component.scss @@ -1,4 +1,20 @@ .label{ color:grey; font-weight: 600; +} + +.in-progress-label{ + color : brown +} + +.not-sent-label{ + color:red +} + +.validated-label{ + color:green +} + +.top-margin{ + margin-top: 15px; } \ No newline at end of file diff --git a/src/app/members/account/my-data/my-data.component.ts b/src/app/members/account/my-data/my-data.component.ts index cf04c137f8fb73ee21894fa5afbf2b03dcaee093..5a7c5e3b792098fbc93e29588e81d04474cab039 100644 --- a/src/app/members/account/my-data/my-data.component.ts +++ b/src/app/members/account/my-data/my-data.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import {ActivatedRoute,Router} from '@angular/router' import {PersonalData} from '../core' +import * as moment from 'moment' import {User} from 'app/core' @Component({ @@ -11,7 +12,9 @@ import {User} from 'app/core' export class MyDataComponent implements OnInit { personalData: PersonalData; - + validatedAccount : String; + dateNow: Date; + currentYear: String; public grade = { "troisieme": "Troisième", @@ -20,6 +23,17 @@ export class MyDataComponent implements OnInit { "terminale":"Terminale" } + + //Styles validated account label depending on the status of the account + public styleValidatedAccount = ()=> { + if(this.validatedAccount==="Données personnelles non remplies"){ + return 'not-sent-label' + }else if (this.validatedAccount==="En cours de validation"){ + return 'in-progress-label' + }else if (this.validatedAccount==="Validé"){ + return 'validated-label' + } + } public scholarship = { "echelon0": "Oui, échelon 0", "echelon1": "Oui, échelon 1", @@ -45,7 +59,21 @@ export class MyDataComponent implements OnInit { ngOnInit() { - this.personalData = this.route.snapshot.data['personalData']; + this.personalData = this.route.snapshot.data['personalData'] + this.dateNow = new Date() + if(moment(this.dateNow).month()>=9){ + this.currentYear = moment(this.dateNow).year() + "/"+ String(moment(this.dateNow).year()+1) + }else{ + this.currentYear = String(moment(this.dateNow).year() -1) + "/"+moment(this.dateNow).year() + } + + if(this.personalData.registration.validated){ + this.validatedAccount= "Validé" + }else if(this.personalData.year===this.currentYear){ + this.validatedAccount="En cours de validation" + }else{ + this.validatedAccount="Données personnelles non remplies" + } }