From 0eeb0d3e12b9272f65a68ad81089595c38e78892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Andr=C3=A9?= Date: Sat, 15 Feb 2020 22:40:26 +0100 Subject: [PATCH] Evol de la page Summary avec les stats pour la saison en cours --- Back/skydiveLogs-api/Data/JumpsDb-log.db | Bin 90112 -> 516096 bytes .../src/app/new-jump/new-jump.component.ts | 8 +- .../src/app/summary/summary.component.html | 40 ++++++++ .../src/app/summary/summary.component.ts | 52 ++++++---- Front/skydivelogs-app/src/models/stats.ts | 30 ++++-- .../src/services/stats.service.ts | 95 ++++++++++-------- 6 files changed, 154 insertions(+), 71 deletions(-) diff --git a/Back/skydiveLogs-api/Data/JumpsDb-log.db b/Back/skydiveLogs-api/Data/JumpsDb-log.db index 36532992f14a25880b9c8824033db1f766d9c570..c473c06e9e3462f2fca67b9f5108e94176e206bf 100644 GIT binary patch literal 516096 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 diff --git a/Front/skydivelogs-app/src/app/summary/summary.component.html b/Front/skydivelogs-app/src/app/summary/summary.component.html index e51c644..fdfddcb 100644 --- a/Front/skydivelogs-app/src/app/summary/summary.component.html +++ b/Front/skydivelogs-app/src/app/summary/summary.component.html @@ -15,10 +15,50 @@
+ + + + + + + + + +
{{element.label}}{{element.nb}}
+ + + + + + + + + +
{{element.label}}{{element.nb}}
+ + + + + + + + + +
{{element.label}}{{element.nb}}
+ + + + + + + + + +
{{element.label}}{{element.nb}}
diff --git a/Front/skydivelogs-app/src/app/summary/summary.component.ts b/Front/skydivelogs-app/src/app/summary/summary.component.ts index 6d0a724..448d175 100644 --- a/Front/skydivelogs-app/src/app/summary/summary.component.ts +++ b/Front/skydivelogs-app/src/app/summary/summary.component.ts @@ -1,30 +1,42 @@ -import { Component, OnInit } from '@angular/core'; -import { MatTableDataSource } from '@angular/material/table'; -import { ServiceComm } from '../../services/service-comm.service'; -import { StatsService } from '../../services/stats.service'; +import { Component, OnInit } from "@angular/core"; +import { MatTableDataSource } from "@angular/material/table"; +import { ServiceComm } from "../../services/service-comm.service"; +import { StatsService } from "../../services/stats.service"; +import { + StatsByDzResp, + StatsByAircraftResp, + StatsByGearResp, + StatsByJumpTypeResp, + StatsByYearResp +} from "../../models/stats"; @Component({ - selector: 'app-summary', - templateUrl: './summary.component.html', - styleUrls: ['./summary.component.css'] + selector: "app-summary", + templateUrl: "./summary.component.html", + styleUrls: ["./summary.component.css"] }) export class SummaryComponent implements OnInit { - public displayedColumns: Array = ['label', 'nb']; - public dsNbJumpByDz; - public dsNbJumpByAircraft; - public dsNbJumpByGear; - public dsNbJumpByType; - public dsNbJumpByYear; + public dsNbJumpByDz: MatTableDataSource; + public dsNbJumpByAircraft: MatTableDataSource; + public dsNbJumpByGear: MatTableDataSource; + public dsNbJumpByType: MatTableDataSource; + public dsNbJumpByYear: MatTableDataSource; + public dsJumpForLastYearByDz: MatTableDataSource; + public dsJumpForLastYearByJumpType: MatTableDataSource; + public dsJumpForLastMonthByDz: MatTableDataSource; + public dsJumpForLastMonthByJumpType: MatTableDataSource; + private countDatasLoaded: number; + public displayedColumns: Array = ["label", "nb"]; constructor( private serviceApi: StatsService, private serviceComm: ServiceComm - ) { } + ) {} ngOnInit() { this.countDatasLoaded = 0; - this.serviceComm.UpdatedComponentTitle('Summary'); + this.serviceComm.UpdatedComponentTitle("Summary"); const statsResult = this.serviceApi.getStatsOfJumps(); @@ -50,11 +62,17 @@ export class SummaryComponent implements OnInit { }); statsResult.statsForLastYear.subscribe(data => { - this.dsNbJumpByYear = new MatTableDataSource(data); + this.dsJumpForLastYearByDz = new MatTableDataSource(data.byDz); + this.dsJumpForLastYearByJumpType = new MatTableDataSource( + data.byJumpType + ); this.countDatasLoaded++; }); statsResult.statsForLastMonth.subscribe(data => { - this.dsNbJumpByYear = new MatTableDataSource(data); + this.dsJumpForLastMonthByDz = new MatTableDataSource(data.byDz); + this.dsJumpForLastMonthByJumpType = new MatTableDataSource( + data.byJumpType + ); this.countDatasLoaded++; }); } diff --git a/Front/skydivelogs-app/src/models/stats.ts b/Front/skydivelogs-app/src/models/stats.ts index 0dd4e9c..f04aa4a 100644 --- a/Front/skydivelogs-app/src/models/stats.ts +++ b/Front/skydivelogs-app/src/models/stats.ts @@ -1,4 +1,4 @@ -import { Observable } from 'rxjs'; +import { Observable } from "rxjs"; export class StatsResp { public statsByDz: Observable>; @@ -19,6 +19,7 @@ export class StatsByDzResp { public label: string; public nb: number; } + export class StatsByAircraftResp { constructor(data: any) { Object.assign(this, data); @@ -27,6 +28,7 @@ export class StatsByAircraftResp { public label: string; public nb: number; } + export class StatsByGearResp { constructor(data: any) { Object.assign(this, data); @@ -35,6 +37,7 @@ export class StatsByGearResp { public label: string; public nb: number; } + export class StatsByJumpTypeResp { constructor(data: any) { Object.assign(this, data); @@ -43,6 +46,7 @@ export class StatsByJumpTypeResp { public label: string; public nb: number; } + export class StatsByYearResp { constructor(data: any) { Object.assign(this, data); @@ -52,11 +56,16 @@ export class StatsByYearResp { public nb: number; } - - export class StatsForLastYearResp { - constructor(data: any) { - Object.assign(this, data); + constructor( + dataByDz: Array, + dataByJumpType: Array + ) { + this.byDz = new Array(); + this.byJumpType = new Array(); + + Object.assign(this.byDz, dataByDz); + Object.assign(this.byJumpType, dataByJumpType); } public byDz: Array; @@ -64,8 +73,15 @@ export class StatsForLastYearResp { } export class StatsForLastMonthResp { - constructor(data: any) { - Object.assign(this, data); + constructor( + dataByDz: Array, + dataByJumpType: Array + ) { + this.byDz = new Array(); + this.byJumpType = new Array(); + + Object.assign(this.byDz, dataByDz); + Object.assign(this.byJumpType, dataByJumpType); } public byDz: Array; diff --git a/Front/skydivelogs-app/src/services/stats.service.ts b/Front/skydivelogs-app/src/services/stats.service.ts index d01e9b2..f807f2c 100644 --- a/Front/skydivelogs-app/src/services/stats.service.ts +++ b/Front/skydivelogs-app/src/services/stats.service.ts @@ -1,8 +1,8 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { environment } from '../environments/environment'; +import { Injectable } from "@angular/core"; +import { HttpClient, HttpHeaders } from "@angular/common/http"; +import { Observable } from "rxjs"; +import { map } from "rxjs/operators"; +import { environment } from "../environments/environment"; import { StatsResp, StatsByDzResp, @@ -12,16 +12,15 @@ import { StatsByYearResp, StatsForLastMonthResp, StatsForLastYearResp -} from '../models/stats'; +} from "../models/stats"; @Injectable() export class StatsService { - private readonly headers = new HttpHeaders({ - 'Access-Control-Allow-Origin': environment.urlApi + "Access-Control-Allow-Origin": environment.urlApi }); - constructor(private http: HttpClient) { } + constructor(private http: HttpClient) {} public getStatsOfJumps(): StatsResp { const resultats = new StatsResp(); @@ -39,10 +38,10 @@ export class StatsService { } private getStatsByDz(): Observable> { - return this.http.get>( - `${environment.urlApi}/api/Stats/ByDz`, - { headers: this.headers } - ) + return this.http + .get>(`${environment.urlApi}/api/Stats/ByDz`, { + headers: this.headers + }) .pipe( map(response => { const stats = response.map(data => new StatsByDzResp(data)); @@ -52,10 +51,11 @@ export class StatsService { } private getStatsByAircraft(): Observable> { - return this.http.get>( - `${environment.urlApi}/api/Stats/ByAircraft`, - { headers: this.headers } - ) + return this.http + .get>( + `${environment.urlApi}/api/Stats/ByAircraft`, + { headers: this.headers } + ) .pipe( map(response => { const stats = response.map(data => new StatsByAircraftResp(data)); @@ -65,10 +65,11 @@ export class StatsService { } private getStatsByJumpType(): Observable> { - return this.http.get>( - `${environment.urlApi}/api/Stats/ByJumpType`, - { headers: this.headers } - ) + return this.http + .get>( + `${environment.urlApi}/api/Stats/ByJumpType`, + { headers: this.headers } + ) .pipe( map(response => { const stats = response.map(data => new StatsByJumpTypeResp(data)); @@ -78,10 +79,10 @@ export class StatsService { } private getStatsByGear(): Observable> { - return this.http.get>( - `${environment.urlApi}/api/Stats/ByGear`, - { headers: this.headers } - ) + return this.http + .get>(`${environment.urlApi}/api/Stats/ByGear`, { + headers: this.headers + }) .pipe( map(response => { const stats = response.map(data => new StatsByGearResp(data)); @@ -91,10 +92,10 @@ export class StatsService { } private getStatsByYear(): Observable> { - return this.http.get>( - `${environment.urlApi}/api/Stats/ByYear`, - { headers: this.headers } - ) + return this.http + .get>(`${environment.urlApi}/api/Stats/ByYear`, { + headers: this.headers + }) .pipe( map(response => { const stats = response.map(data => new StatsByYearResp(data)); @@ -103,31 +104,39 @@ export class StatsService { ); } - private getStatsOfLastYear(): Observable { - return this.http.get( - `${environment.urlApi}/api/Stats/ForLastYear`, - { headers: this.headers } - ) + return this.http + .get( + `${environment.urlApi}/api/Stats/ForLastYear`, + { headers: this.headers } + ) .pipe( map(response => { - const stats = response.map(data => new StatsByDzResp(data)); - return stats; + const statsByDz = response.byDz.map(data => new StatsByDzResp(data)); + const statsByJumpType = response.byJumpType.map( + data => new StatsByDzResp(data) + ); + + return new StatsForLastYearResp(statsByDz, statsByJumpType); }) ); } private getStatsOfLastMonth(): Observable { - return this.http.get( - `${environment.urlApi}/api/Stats/ForLastMonth`, - { headers: this.headers } - ) + return this.http + .get( + `${environment.urlApi}/api/Stats/ForLastMonth`, + { headers: this.headers } + ) .pipe( map(response => { - const stats = response.map(data => new StatsByDzResp(data)); - return stats; + const statsByDz = response.byDz.map(data => new StatsByDzResp(data)); + const statsByJumpType = response.byJumpType.map( + data => new StatsByDzResp(data) + ); + + return new StatsForLastMonthResp(statsByDz, statsByJumpType); }) ); } - }