From e591149b7de6d99fb85a50de80b315b1cb0316f2 Mon Sep 17 00:00:00 2001 From: Julien Gautier Date: Tue, 3 Oct 2023 13:49:23 +0200 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'services'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/core/services/backend.service.ts | 39 ++++-- src/app/core/services/calculator.service.ts | 125 ++++++++++++++++++++ src/app/core/services/index.ts | 4 +- src/app/core/services/jump-table.service.ts | 31 +++++ src/app/core/services/utilities.service.ts | 4 + 5 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 src/app/core/services/calculator.service.ts create mode 100644 src/app/core/services/jump-table.service.ts diff --git a/src/app/core/services/backend.service.ts b/src/app/core/services/backend.service.ts index e711d0f..0db6342 100755 --- a/src/app/core/services/backend.service.ts +++ b/src/app/core/services/backend.service.ts @@ -2,9 +2,37 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { JumpDoc, JumpViewResults } from 'src/app/core/models'; +import { Jump } from 'src/app/core/models'; import { environment } from 'src/environments/environment'; +export interface JumpDoc { + _id?: string; + _rev?: string; + type: string; + date: string; + numero: number, + lieu?: string; + oaci?: string; + aeronef?: string; + imat?: string; + hauteur?: number, + voile?: string; + taille?: number, + categorie?: string; + module?: string; + participants?: number, + programme?: string; + accessoires?: string; + zone?: string; + dossier?: string; + video?: string; +} + +export interface JumpViewResults { + rows: Array; + total_rows: number; +} + @Injectable({ providedIn: 'root' }) export class BackendService { private _couchdbUrl = environment.couchdbUrl; @@ -38,15 +66,6 @@ export class BackendService { return this._http.delete(url, this.httpOptions).toPromise(); } - /* helper function to save date on updated_at, created_at */ - getCurrentDate(): Date { - return new Date(); - } - - getCurrentDateFr(): string { - return new Date().toLocaleDateString("fr"); - } - /* get all docs from couchDB view 'allJumps' */ getJumps(): Observable { //const url = this._couchdbUrl + '/' + this._couchdbDatabase + '/_design/' + this._couchdbDesign + '/_view/allJumps/'; diff --git a/src/app/core/services/calculator.service.ts b/src/app/core/services/calculator.service.ts new file mode 100644 index 0000000..e59a249 --- /dev/null +++ b/src/app/core/services/calculator.service.ts @@ -0,0 +1,125 @@ +import { Injectable } from '@angular/core'; + +import { CalculatorResult, Range, weightSizes } from 'src/app/core/models'; +import { UtilitiesService } from 'src/app/core/services'; + +@Injectable({ providedIn: 'root' }) +export class CalculatorService { + public coeffKgLbs: number = this._utilitiesService.getCoeffKgLbs(); + public coeffFtM: number = this._utilitiesService.getCoeffFtM(); + + constructor( + private _utilitiesService: UtilitiesService + ) { } + + private _getTableColumn(jumps: number): number { + let column: number = 0; + weightSizes[0].ranges.some((range: Range) => { + if (jumps >= range.start && jumps < range.end) { + column = (range.num-1) + return true; + } + return false; + }); + + return column; + } + + private _getTableLine(weight: number): number { + let line: number; + let min = 60; + let max = 110; + if (weight < min) { + line = min; + } else if (weight > max) { + line = max; + } else { + line = weight; + } + return line; + } + + private _isInRange(nb: number, range: Range): boolean { + return (nb >= range.start && nb < range.end); + } + + private _reduceLimit(surface: number, percentOff: number): number { + return Math.ceil(surface * (100 - percentOff) / 100); + } + + public canopySizeCalc(weight: number, jumps: number): CalculatorResult { + let result: CalculatorResult = { + min: 59, + min11: 34 + }; + if (jumps > 2000) { + return result; + } + let index: number = (this._getTableLine(weight) - this._getTableLine(0)); + result.min = weightSizes[index].ranges[this._getTableColumn(jumps)].value; + result.min11 = this._reduceLimit(result.min, 11); + + return result; + } + + public convertFeet2Meters(size: number): number { + return (size * this._utilitiesService.getCoeffFtM()); + } + + public getCanopySizes(weight: number, reduce = false): number[] { + var data: number[] = []; + if (weight < 60) { + weight = 60; + } + if (weight > 110) { + weight = 110; + } + if (weight >= 60 && weight <= 110) { + const line = (weight - this._getTableLine(0)); + let data = weightSizes[line]; + if (reduce) { + return data.ranges.map((range: Range): number => { + return Math.ceil(range.value * (100 - 11) / 100); + }); + } else { + return data.ranges.map((range: Range): number => { + return range.value; + }); + } + } + return data; + } + + public getCharge(canopySize: number, nakedWeight: number, equipementWeight: number): number { + return (((nakedWeight + equipementWeight) * this.coeffKgLbs) / canopySize); + } + + public getRangeNum(jumps: number): number { + let data: Range[] = weightSizes[0].ranges; + let num: number = 1; + data.some((range: Range): boolean => { + if (jumps >= range.start && jumps < range.end) { + num = range.num; + return true; + } else if (jumps > 2000) { + num = 9; + return true; + } + return false; + }); + return num; + } + + public getStateColor(values: CalculatorResult): string { + let color: string = 'danger'; + if (values.current! >= values.min11 && values.current! < values.min) { + color = 'warning'; + } + if (values.current! >= values.min) { + color = 'success'; + } + + return color; + } + +} \ No newline at end of file diff --git a/src/app/core/services/index.ts b/src/app/core/services/index.ts index 2cba96e..cd41b72 100644 --- a/src/app/core/services/index.ts +++ b/src/app/core/services/index.ts @@ -1,12 +1,14 @@ +export * from './aeronefs.service'; export * from './api.service'; export * from './applications.service'; export * from './auth-guard.service'; export * from './auth-resolver.service'; export * from './backend.service'; -export * from './aeronefs.service'; +export * from './calculator.service'; export * from './canopies.service'; export * from './dropzones.service'; export * from './jumps.service'; +export * from './jump-table.service'; export * from './jwt.service'; export * from './no-auth-guard.service'; export * from './profiles.service'; diff --git a/src/app/core/services/jump-table.service.ts b/src/app/core/services/jump-table.service.ts new file mode 100644 index 0000000..65f4f7c --- /dev/null +++ b/src/app/core/services/jump-table.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from "rxjs"; + +@Injectable({ providedIn: 'root' }) +export class JumpTableService { + + tableRefresh: boolean; + _tableRefreshBS = new BehaviorSubject(false); + + jumpRefresh: boolean; + _jumpRefreshBS = new BehaviorSubject(false); + + constructor() { + this.tableRefresh = false;; + this.jumpRefresh = false;; + + //this._tableRefreshBS.next(this.tableRefresh); + //this._jumpRefreshBS.next(this.jumpRefresh); + } + + updateTableRefresh(val: boolean) { + this.tableRefresh = val; + this._tableRefreshBS.next(this.tableRefresh); + } + + updateJumpRefresh(val: boolean) { + this.jumpRefresh = val; + this._jumpRefreshBS.next(this.jumpRefresh); + } + +} \ No newline at end of file diff --git a/src/app/core/services/utilities.service.ts b/src/app/core/services/utilities.service.ts index 633c6b0..e992f66 100644 --- a/src/app/core/services/utilities.service.ts +++ b/src/app/core/services/utilities.service.ts @@ -55,6 +55,10 @@ export class UtilitiesService { return colors; } + getCurrentDateFr(): string { + return new Date().toLocaleDateString("fr"); + } + getSeriesColors(opacity: number, palette: string = 'all'): string[] { let colors: string[] = []; switch (palette) {