From fca91fbbf19ae99ccdef4343a1102bd46f187218 Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Mon, 25 Oct 2021 12:06:28 +0200 Subject: [PATCH] feat(reports): Added warnings when avrop is past end-date and reporting should be disabled. (TV-811) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squashed commit of the following: commit 2b42a23e3fc1599375a6b321c89eb3cc1cf1baa5 Author: Erik Tiekstra Date: Mon Oct 25 10:03:29 2021 +0200 Typo commit 9534faccaeca0b5b4224715dbc5984c50e471a13 Author: Erik Tiekstra Date: Mon Oct 25 09:04:52 2021 +0200 Implemented warning for GP commit 585fa6c8abfa60604a38d443275ad8facf0ba256 Author: Erik Tiekstra Date: Mon Oct 25 07:35:40 2021 +0200 Implemented warning for avvikelsereport commit 37c45f89c6c11fa1d7357de0e9b1b626312bf0de Merge: 1276f606 612e0997 Author: Erik Tiekstra Date: Mon Oct 25 07:26:35 2021 +0200 Merge branch 'develop' into feature/TV-811-report-warnings-when-avrop-is-past-enddate commit 1276f606ddf9f1393c57c16a44144b8431ddf015 Author: Erik Tiekstra Date: Fri Oct 22 15:08:41 2021 +0200 Implemented warning message for frånvaro --- .../avvikelse-report-form.component.html | 221 +++++++++--------- .../avvikelse-report-form.component.scss | 1 + .../avvikelse-report-form.component.ts | 31 ++- .../franvaro-report-form.component.html | 6 +- .../franvaro-report-form.component.ts | 32 ++- .../gemensam-planering-form.component.html | 4 +- .../gemensam-planering-form.component.ts | 22 ++ .../src/app/shared/models/avrop.model.ts | 2 +- 8 files changed, 199 insertions(+), 120 deletions(-) diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.html index 978fc0b..c124ca3 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.html @@ -6,117 +6,128 @@ reportTitle="Avvikelserapport (avvikelse)" >
-
- -

Avvikelserapport (avvikelse) för deltagare {{avrop.fullName}} är nu inskickad till Arbetsförmedlingen.

-
-
Datum
-
{{submittedDate | date:'longDate'}} kl {{submittedDate | date:'shortTime'}}
-
+
+ +

{{notAllowedToReportWarning(avrop)}}

+ Tillbaka till deltagaren
- - -
-
- -
- -
-
- -
-
- -
- -
- -
- Förhandsgranska - - Avbryt -  och gå tillbaka till deltagaren - -
-
- - - -
Orsak till avvikelse:
-
{{(chosenReason$ | async)?.name }}
- - -
{{getCurrentQuestionFromId(question.fraga).name}}
-
{{question.svar.length === 0 ? 'Inget svar' : question.svar }}
-
-
Dag för avvikelse:
-
{{avvikelseSubmitData.avvikelseAlternativ.rapporteringsdatum }}
-
-
+ +
-

Kunde inte spara Avvikelserapport (avvikelse). Ladda om sidan och försök igen.

-

{{error.message}}

+

+ Avvikelserapport (avvikelse) för deltagare {{avrop.fullName}} är nu inskickad till Arbetsförmedlingen. +

+
+
Datum
+
{{submittedDate | date:'longDate'}} kl {{submittedDate | date:'shortTime'}}
+
- + Tillbaka till deltagaren +
+ + +
+
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+ Förhandsgranska + + Avbryt +  och gå tillbaka till deltagaren + +
+
+ + + +
Orsak till avvikelse:
+
{{(chosenReason$ | async)?.name }}
+ + +
{{getCurrentQuestionFromId(question.fraga).name}}
+
{{question.svar.length === 0 ? 'Inget svar' : question.svar }}
+
+
Dag för avvikelse:
+
{{avvikelseSubmitData.avvikelseAlternativ.rapporteringsdatum }}
+
+
+ +

Kunde inte spara Avvikelserapport (avvikelse). Ladda om sidan och försök igen.

+

{{error.message}}

+
+
+
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.scss b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.scss index e48ed8e..59ea7cd 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.scss +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.scss @@ -5,6 +5,7 @@ &__confirmation, &__textareas, + &__warning, &__form { display: flex; flex-direction: column; diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.ts index f31b808..e4fe4eb 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/avvikelse-report-form/avvikelse-report-form.component.ts @@ -10,6 +10,7 @@ import { CustomError } from '@msfa-models/error/custom-error'; import { markControlsAsDirty } from '@msfa-utils/mark-controls-as-dirty.util'; import { RegexValidator } from '@msfa-utils/validators/regex.validator'; import { RequiredValidator } from '@msfa-validators/required.validator'; +import { addDays } from 'date-fns'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; import { map, shareReplay, switchMap, take } from 'rxjs/operators'; import { AvvikelseReportFormService } from './avvikelse-report-form.service'; @@ -87,10 +88,6 @@ export class AvvikelseReportFormComponent implements OnInit, OnDestroy { return this.avvikelseFormGroup.get('questions') as FormArray; } - get maxDate(): Date { - return new Date(); - } - getCurrentQuestionFromId(id: string): AvvikelseQuestion { return this.currentQuestions.find(currentQuestions => currentQuestions.id === id); } @@ -133,8 +130,30 @@ export class AvvikelseReportFormComponent implements OnInit, OnDestroy { return formControl.invalid && (formControl.touched || this.shouldValidate$.value); } - minDate(avrop: Avrop): Date { - return new Date(avrop.receivedTimestamp); + maxDate(endDate: Date): Date { + const now = new Date(); + return now < endDate ? now : endDate; + } + + private _isAfterStartDate(startDate: Date): boolean { + return new Date() > startDate; + } + private _isBeforeLastPossibleReportDay(endDate: Date): boolean { + const lastPossibleReportDay = addDays(endDate, 5); // Reporting is allowed at latest 5 days past avrop end date. + return lastPossibleReportDay > new Date(); + } + + isAllowedToReport(avrop: Avrop): boolean { + return this._isAfterStartDate(avrop.startDate) && this._isBeforeLastPossibleReportDay(avrop.endDate); + } + + notAllowedToReportWarning(avrop: Avrop): string { + if (!this._isBeforeLastPossibleReportDay(avrop.endDate)) { + return 'Det går inte att göra Avvikelserapport (avvikelse) eftersom tjänsten har avslutats.'; + } + if (!this._isAfterStartDate(avrop.startDate)) { + return 'Det går inte att göra Avvikelserapport (avvikelse) eftersom tjänsten inte har startat ännu.'; + } } openConfirmDialog(): void { diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html index 0b9ac53..b7e3eff 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/franvaro-report-form/franvaro-report-form.component.html @@ -6,9 +6,9 @@ reportTitle="Avvikelserapport (frånvaro)" >
-
+
-

Det går inte att rapportera frånvaro eftersom tjänsten inte har startat ännu.

+

{{notAllowedToReportWarning(avrop)}}

Tillbaka till deltagaren @@ -112,7 +112,7 @@ (false); confirmDialogOpen$ = new BehaviorSubject(false); franvaroFormGroup = new FormGroup( @@ -117,12 +117,38 @@ export class FranvaroReportFormComponent { return new Date(this.dateFormControl.value); } + get dayOrPartOfDayFromValue(): string { + return this.wholeDayFormControl.value ? 'Heldag' : 'Del av dag'; + } + + private _isAfterStartDate(startDate: Date): boolean { + return new Date() > startDate; + } + private _isBeforeLastPossibleReportDay(endDate: Date): boolean { + const lastPossibleReportDay = addDays(endDate, 5); // Reporting is allowed at latest 5 days past avrop end date. + return lastPossibleReportDay > new Date(); + } + + isAllowedToReport(avrop: Avrop): boolean { + return this._isAfterStartDate(avrop.startDate) && this._isBeforeLastPossibleReportDay(avrop.endDate); + } + + notAllowedToReportWarning(avrop: Avrop): string { + if (!this._isBeforeLastPossibleReportDay(avrop.endDate)) { + return 'Det går inte att göra Avvikelserapport (frånvaro) eftersom tjänsten har avslutats.'; + } + if (!this._isAfterStartDate(avrop.startDate)) { + return 'Det går inte att göra Avvikelserapport (frånvaro) eftersom tjänsten inte har startat ännu.'; + } + } + getReasonNameFromValue(reasons: FranvaroReason[], value: string): string { return reasons.find(reason => reason.value.toString() === value)?.name; } - get dayOrPartOfDayFromValue(): string { - return this.wholeDayFormControl.value ? 'Heldag' : 'Del av dag'; + maxDate(endDate: Date): Date { + const now = new Date(); + return now < endDate ? now : endDate; } formControlIsInvalid(formControlNames: string[]): boolean { diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html index 07c812d..00d019e 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.html @@ -5,9 +5,9 @@ [avrop]="avrop" >
-
+
-

Det går inte att skicka Gemensam planering eftersom tjänsten inte har startat ännu.

+

{{notAllowedToReportWarning(avrop)}}

Tillbaka till deltagaren diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts index e7b0210..4dfca21 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/report-forms/gemensam-planering-form/gemensam-planering-form.component.ts @@ -9,6 +9,7 @@ import { GemensamPlanering, mapGemensamPlaneringToGemensamPlaneringPostRequest, } from '@msfa-models/gemensam-planering.model'; +import { addDays } from 'date-fns'; import { BehaviorSubject, Observable } from 'rxjs'; import { map, shareReplay, switchMap, take } from 'rxjs/operators'; import { GemensamPlaneringFormService } from './gemensam-planering-form.service'; @@ -147,4 +148,25 @@ export class GemensamPlaneringFormComponent { }, }); } + + private _isAfterStartDate(startDate: Date): boolean { + return new Date() > startDate; + } + private _isBeforeLastPossibleReportDay(endDate: Date): boolean { + const lastPossibleReportDay = addDays(endDate, 5); // Reporting is allowed at latest 5 days past avrop end date. + return lastPossibleReportDay > new Date(); + } + + isAllowedToReport(avrop: Avrop): boolean { + return this._isAfterStartDate(avrop.startDate) && this._isBeforeLastPossibleReportDay(avrop.endDate); + } + + notAllowedToReportWarning(avrop: Avrop): string { + if (!this._isBeforeLastPossibleReportDay(avrop.endDate)) { + return 'Det går inte att göra Gemensam planering eftersom tjänsten har avslutats.'; + } + if (!this._isAfterStartDate(avrop.startDate)) { + return 'Det går inte att göra Gemensam planering eftersom tjänsten inte har startat ännu.'; + } + } } diff --git a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts index 1e219aa..931bf98 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts @@ -72,6 +72,6 @@ export function mapAvropResponseToAvrop(data: AvropResponse): Avrop { utforandeVerksamhet: utforandeverksamhet, handledareCiamUserId: handledareCiamUserId, handledare, - receivedTimestamp: recievedTimestamp, + receivedTimestamp: new Date(recievedTimestamp), }; }