diff --git a/drupal/modules/epal/src/Controller/DirectorView.php b/drupal/modules/epal/src/Controller/DirectorView.php index 509ed6cf20345eab63d11d437ffda32c7847c89c..c558221aa8dcce12721e05f52a5d1a211fce4157 100755 --- a/drupal/modules/epal/src/Controller/DirectorView.php +++ b/drupal/modules/epal/src/Controller/DirectorView.php @@ -362,6 +362,13 @@ public function SaveCapacity(Request $request,$taxi,$tomeas,$specialit) { $postData = json_decode($content); $cap = $postData->capacity; + if ($cap<= 0 || $cap > 99) + { + return $this->respondWithStatus([ + 'message' => t("Number out of limits!"), + ], Response::HTTP_BAD_REQUEST); + } + if (($tomeas == 0) && ($specialit == 0)) { $CapacityPerClass = $this->entityTypeManager->getStorage('eepal_school')->loadByProperties(array('id' => $schoolid )); diff --git a/source/components/director/director-classcapacity.ts b/source/components/director/director-classcapacity.ts index 59ca8aa4e9084ad400051b7c01abdb4703552fff..78d18e9ec738bedeffe6bb25045705c0e4477f6f 100644 --- a/source/components/director/director-classcapacity.ts +++ b/source/components/director/director-classcapacity.ts @@ -9,6 +9,9 @@ import { IAppState } from '../../store/store'; import {Router, ActivatedRoute, Params} from '@angular/router'; import { BehaviorSubject, Subscription } from 'rxjs/Rx'; import { ILoginInfo } from '../../store/logininfo/logininfo.types'; +import { VALID_CAPACITY_PATTERN} from '../../constants'; +import {maxValue} from '../../constants'; + import { FormBuilder, @@ -48,7 +51,14 @@ import { <p style="margin-top: 20px; line-height: 2em;"> ΞλλάξΟΞ΅ ΟΞ±ΟΞ±ΞΊΞ±Ξ»Ο ΟΞΏΞ½ Ξ±ΟΞΉΞΈΞΌΟ ΟΟΞ½ ΟΞΌΞ·ΞΌΞ¬ΟΟΞ½ ΟΞΏΟ ΞΌΟΞΏΟΡίΟΞ΅ Ξ½Ξ± Ξ΄Ξ·ΞΌΞΉΞΏΟ ΟΞ³Ξ�ΟΞ΅ΟΞ΅ ΟΟΞΏ ΟΟολΡίο ΟΞ±Ο ΞΊΞ±ΞΉ ΟΞ±ΟΞ�ΟΟΞ΅ <i>ΞΟΞΏΞΈΞ�ΞΊΞ΅Ο ΟΞ·</i>.</p> - <input type="number" formControlName="capacity" min="1" max="10"> + <input type="number" formControlName="capacity" min="1" max="10" ng-min="1" ng-max="99" > + + <div class="alert alert-danger" *ngIf="formGroup.get('capacity').touched && formGroup.get('capacity').hasError('maxValue')"> + Ξ£Ο ΞΌΟληΟΟΟΟΞ΅ ΟΞ·Ξ½ διαθΡΟΞΉΞΌΟΟΞ·ΟΞ± ΟΞ±Ο ΟΞ΅ ΟΞΌΞ�ΞΌΞ±ΟΞ± ! + </div> + <div class="alert alert-danger" *ngIf="formGroup.get('capacity').touched && formGroup.get('capacity').hasError('required')"> + Ξ Ξ±ΟΞ±ΞΊΞ±Ξ»Ο ΟΟ ΞΌΟληΟΟΟΟΞ΅ ΞΞ½Ξ± ΞΌΞΉΞΊΟΟΟΞ΅ΟΞΏ Ξ±ΟΞΉΞΈΞΌΟ! + </div> <button type="button" class="btn-primary btn-sm pull-right" (click) ="saveCapacity()"> ΞΟΞΏΞΈΞ�ΞΊΞ΅Ο ΟΞ· @@ -148,11 +158,15 @@ import { tomeas: ['', []], taxi: ['', []], specialit: ['', []], - capacity: ['', []], + capacity: ['', [Validators.pattern(VALID_CAPACITY_PATTERN),Validators.required, maxValue(99)]], }); } + + + + public showModal(popupMsgId):void { console.log("about to show modal"); //(<any>$('#distributionWaitingNotice')).modal('show'); @@ -325,8 +339,6 @@ import { } - - saveCapacity() { var taxi = +this.formGroup.value.taxi; @@ -336,7 +348,9 @@ import { if ((taxi === 2 && tomeas === 0) || (taxi === 3 && tomeas === 0 ) || (taxi ===3 && specialit === 0 ) - || (taxi === 4 && tomeas === 0 ) || (taxi ===4 && specialit === 0 ) || (taxi = 0) || (capc ===0)) + || (taxi === 4 && tomeas === 0 ) || (taxi ===4 && specialit === 0 ) || (taxi = 0) || (this.formGroup.invalid) + + ) { this.showModal("#checksaved"); } else diff --git a/source/components/infoviews/eduadmin-view.ts b/source/components/infoviews/eduadmin-view.ts index 079fa4c132eff2992f97c157abd8035ce622d795..47dfdfcc87b517c70ea9869c498da946093007f3 100644 --- a/source/components/infoviews/eduadmin-view.ts +++ b/source/components/infoviews/eduadmin-view.ts @@ -19,13 +19,16 @@ import { @Component({ selector: 'eduadmin-view', template: ` - <h3> ΞΟΞΉΞΈΞΌΟΟ ΞΞ±ΞΈΞ·ΟΟΞ½ Ξ±Ξ½Ξ± ΟΞΌΞ�ΞΌΞ± ΟΟΞΏΞ»Ξ΅Ξ―ΞΏΟ </h3> - + <h4> ΞΟΞΉΞΈΞΌΟΟ ΞΞ±ΞΈΞ·ΟΟΞ½ Ξ±Ξ½Ξ± ΟΞΌΞ�ΞΌΞ± ΟΟΞΏΞ»Ξ΅Ξ―ΞΏΟ !!! </h4> + <div class = "loading" *ngIf="(SchoolsPerPerf$ | async).size === 0"> + </div> <ul class="list-group main-view"> <div *ngFor="let SchoolNames$ of SchoolsPerPerf$ | async; let i=index; let isOdd=odd; let isEven=even" > <li class="list-group-item isclickable" (click)="setActiveRegion(SchoolNames$.id)" [class.changelistcolor]= "SchoolNames$.status === false" [class.oddout]="isOdd" [class.evenout]="isEven" [class.selectedout]="regionActive === SchoolNames$.id" > <h5> {{SchoolNames$.name}}</h5> </li> + <div class = "loading" *ngIf="(CoursesPerPerf$ | async).size === 0"> + </div> <div *ngFor="let CoursesNames$ of CoursesPerPerf$ | async; let j=index; let isOdd2=odd; let isEven2=even" [class.oddin]="isOdd2" [class.evenin]="isEven2" [class.changecolor]="calccolor(CoursesNames$.size,CoursesNames$.limitdown)" [hidden]="SchoolNames$.id !== regionActive" > <div> {{CoursesNames$.name}}</div> <div class= "aastyle"><strong>ΞΟΞΉΞΈΞΌΟΟ ΞΞ±ΞΈΞ·ΟΟΞ½:</strong>{{CoursesNames$.size}} </div> diff --git a/source/constants.ts b/source/constants.ts index 0088cf9f85009b39b905ad57dc797f8454e86e1d..6137c4699d9358afb33b340aab1991cfd028a9ee 100644 --- a/source/constants.ts +++ b/source/constants.ts @@ -1,3 +1,8 @@ + +import {ValidatorFn} from '@angular/forms'; +import {AbstractControl} from '@angular/forms'; + + export const COURSEFIELDS_RECEIVED = 'COURSEFIELDS_RECEIVED'; export const COURSEFIELDS_SELECTED_SAVE = 'COURSEFIELDS_SELECTED_SAVE'; @@ -40,6 +45,8 @@ export const VALID_NAMES_PATTERN = '[A-Za-zΞ-Ξ©ΞΞΞΞΞΞΞΞΞ±-ΟΞ¬ΞΞ�Ξ―Ξ export const VALID_ADDRESS_PATTERN = '[0-9A-Za-zΞ-Ξ©ΞΞΞΞΞΞΞΞ±-ΟΞ¬ΞΞ�Ξ―ΟΟΟ ]*$'; export const VALID_ADDRESSTK_PATTERN = '[0-9 ]*$'; export const VALID_DIGITS_PATTERN = '69[0-9]*$'; +export const VALID_CAPACITY_PATTERN = '[0-9]*$'; + export const VALID_EMAIL_PATTERN = '[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}'; @@ -57,3 +64,14 @@ export const STUDENT_ROLE = 'student'; export const PDE_ROLE = 'pde'; export const DIDE_ROLE = 'dide'; export const MINISTRY_ROLE = 'supervisor'; + +export function maxValue(max: Number): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} => { + const input = control.value, + isValid = input > 99; + if(isValid) + return { 'maxValue': {max} } + else + return null; + }; +}