Merge branch 'edge_v4' into 'develop_v4'

Restructured ILoginInfo

See merge request !244
parents 94b9c239 b790526b
......@@ -81,7 +81,6 @@ class DirectorView extends ControllerBase
'error_code' => 4003,
], Response::HTTP_FORBIDDEN);
} elseif ($userRole === 'epal') {
$selectIdNew = $selectId;
if ($classId == 1) {
$selectIdNew = -1;
} elseif ($classId == 2) {
......@@ -374,6 +373,7 @@ class DirectorView extends ControllerBase
$userRole = $tmpRole;
}
}
if ($userRole === '') {
return $this->respondWithStatus([
'error_code' => 4003,
......@@ -390,6 +390,7 @@ class DirectorView extends ControllerBase
} else {
$schools = [];
}
if ($schools) {
$list = array();
......@@ -582,6 +583,27 @@ class DirectorView extends ControllerBase
}
}
protected function getLimit($name, $categ)
{
static $limits = array();
$key = "{$name}_{$categ}";
if (isset($limits[$key])) {
$limit = $limits[$key];
} else {
$limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => $name, 'category' => $categ));
$limitdown = reset($limit_down);
if ($limitdown) {
$limit = $limitdown->limit_down->value;
} else {
$limit = -1;
}
$limits[$key] = $limit;
}
return $limit;
}
public function returnstatus($id)
{
$schoolid = $id;
......@@ -595,13 +617,7 @@ class DirectorView extends ControllerBase
$CourseA = $this->entityTypeManager->getStorage('epal_student')->loadByProperties(array('id' => $schoolid));
if ($CourseA) {
$limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 1, 'category' => $categ));
$limitdown = reset($limit_down);
if ($limitdown) {
$limit = $limitdown->limit_down->value;
} else {
$limit = -1;
}
$limit = $this->getLimit(1, $categ);
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => -1, 'currentclass' => 1));
......@@ -610,44 +626,47 @@ class DirectorView extends ControllerBase
}
}
$CourseB = $this->entityTypeManager->getStorage('eepal_sectors_in_epal')->loadByProperties(array('epal_id' => $schoolid));
if ($CourseB) {
$limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 2, 'category' => $categ));
$limitdown = reset($limit_down);
if ($limitdown) {
$limit = $limitdown->limit_down->value;
} else {
$limit = -1;
}
$limit = $this->getLimit(2, $categ);
$sCon = $this->connection->select('eepal_sectors_in_epal_field_data', 'eSchool');
$sCon->leftJoin('epal_student_class', 'eStudent',
'eStudent.epal_id = ' . $schoolid . ' ' .
'AND eStudent.specialization_id = eSchool.sector_id ' .
'AND eStudent.currentclass = 2');
$sCon->fields('eSchool', array('sector_id'))
->fields('eStudent', array('specialization_id'))
->groupBy('specialization_id')
->groupBy('sector_id')
->condition('eSchool.epal_id', $schoolid, '=');
$sCon->addExpression('count(eStudent.id)', 'eStudent_count');
foreach ($CourseB as $object) {
$sectorid = $object->sector_id->entity->id();
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $sectorid, 'currentclass' => 2));
if (sizeof($studentPerSchool) < $limit) {
$results = $sCon->execute()->fetchAll(\PDO::FETCH_OBJ);
foreach ($results as $result) {
if ($result->eStudent_count < $limit) {
return false;
}
}
}
$CourseC = $this->entityTypeManager->getStorage('eepal_specialties_in_epal')->loadByProperties(array('epal_id' => $schoolid));
if ($CourseC) {
$limit_down = $this->entityTypeManager->getStorage('epal_class_limits')->loadByProperties(array('name' => 3, 'category' => $categ));
$limitdown = reset($limit_down);
if ($limitdown) {
$limit = $limitdown->limit_down->value;
} else {
$limit = -1;
}
$limit = $this->getLimit(3, $categ);
$sCon = $this->connection->select('eepal_specialties_in_epal_field_data', 'eSchool');
$sCon->leftJoin('epal_student_class', 'eStudent',
'eStudent.epal_id = ' . $schoolid . ' ' .
'AND eStudent.specialization_id = eSchool.specialty_id ' .
'AND eStudent.currentclass = 3');
$sCon->fields('eSchool', array('specialty_id'))
->fields('eStudent', array('specialization_id'))
->groupBy('specialization_id')
->groupBy('specialty_id')
->condition('eSchool.epal_id', $schoolid, '=');
$sCon->addExpression('count(eStudent.id)', 'eStudent_count');
foreach ($CourseC as $object) {
$specialityid = $object->specialty_id->entity->id();
$studentPerSchool = $this->entityTypeManager->getStorage('epal_student_class')->loadByProperties(array('epal_id' => $schoolid, 'specialization_id' => $specialityid, 'currentclass' => 3));
$results = $sCon->execute()->fetchAll(\PDO::FETCH_OBJ);
if (sizeof($studentPerSchool) < $limit) {
foreach ($results as $result) {
if ($result->eStudent_count < $limit) {
return false;
}
}
}
return true;
}
......
......@@ -101,5 +101,5 @@ class MyLocalization extends NgLocalization {
})
class AppModule { }
// enableProdMode();
enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);
......@@ -8,7 +8,6 @@ import { NgRedux, select } from "@angular-redux/store";
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 {minValue} from "../../constants";
......@@ -66,7 +65,6 @@ import {
</form>
</div>
<div id="checksaved1" (onHidden)="onHidden('#checksaved1')"
class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
......@@ -102,10 +100,6 @@ import {
private courseActive = <number>-1;
private showLoader: BehaviorSubject<boolean>;
constructor(private fb: FormBuilder,
private _hds: HelperDataService,
private activatedRoute: ActivatedRoute,
......@@ -121,8 +115,6 @@ import {
}
public showModal(popupMsgId): void {
(<any>$(popupMsgId)).modal("show");
}
......@@ -135,7 +127,6 @@ import {
}
ngOnDestroy() {
}
......@@ -153,7 +144,6 @@ import {
});
}
handleChange(e: Event) {
this.newvalue = e.target["value"];
}
......@@ -166,7 +156,6 @@ import {
else {
this.showLoader.next(true);
let std = this.CapacityPerCourse$.getValue();
std[ind].capacity = this.newvalue;
this.saveCapacitySub = this._hds.saveCapacity(taxi, sect, spec, this.newvalue).subscribe(data => {
......@@ -179,9 +168,7 @@ import {
this.showLoader.next(false);
console.log("Error Saving Capacity");
});
}
}
else {
if (oldvalue === null)
......@@ -189,7 +176,6 @@ import {
}
}
setActive(ind) {
this.courseActive = ind;
}
......
......@@ -8,12 +8,9 @@ import { NgRedux, select } from "@angular-redux/store";
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 {minValue} from "../../constants";
import {
FormBuilder,
FormGroup,
......@@ -114,11 +111,6 @@ import {
<option value="3" [selected]="StudentDetails$.checkstatus != '0' && StudentDetails$.checkstatus != '1'">Δεν ελέγχθηκε</option>
</select>
</div>
<!-- <div class="col-md-2">
<button type="button" class="btn-primary btn-sm pull-right" (click)="confirmStudent(StudentDetails$.id, cb, j)">
Ενημέρωση
</button>
</div> -->
</div>
<div class="row oddin" style="margin: 0px 2px 0px 2px; line-height: 2em;">
......@@ -277,8 +269,6 @@ import {
</div>
</div>
</div>
`
})
......@@ -302,8 +292,6 @@ import {
private sector = <number>0;
private special = <number>0;
constructor(private fb: FormBuilder,
private _hds: HelperDataService,
private activatedRoute: ActivatedRoute,
......@@ -321,7 +309,6 @@ import {
}
public showConfirmModal(): void {
(<any>$("#applicationDeleteConfirm")).modal("show");
}
......@@ -337,7 +324,6 @@ import {
(<any>$("#applicationDeleteError")).modal("hide");
}
public showModal(popupMsgId): void {
(<any>$(popupMsgId)).modal("show");
}
......@@ -351,7 +337,6 @@ import {
}
ngOnDestroy() {
(<any>$("#applicationDeleteConfirm")).remove();
(<any>$("#applicationDeleteError")).remove();
......@@ -367,17 +352,14 @@ import {
this.CoursesPerSchoolSub = this._hds.FindCoursesPerSchool().subscribe(x => {
this.CoursesPerSchool$.next(x);
this.showLoader.next(false);
},
error => {
this.CoursesPerSchool$.next([{}]);
console.log("Error Getting courses perSchool");
this.showLoader.next(false);
});
}
findstudent(taxi, sector, special) {
this.showLoader.next(true);
this.retrievedStudent.next(false);
......@@ -396,7 +378,6 @@ import {
}
setActive(ind) {
this.StudentActive = -1;
if (this.courseActive === ind) {
......@@ -421,8 +402,6 @@ import {
this.StudentActive = ind;
}
confirmStudent(student, cb, ind) {
let rtype;
if (cb.value === 1)
......@@ -451,7 +430,6 @@ import {
});
}
deleteApplication(appId: number, taxi, sector, special): void {
this.applicationId = appId;
......@@ -461,10 +439,6 @@ import {
this.showConfirmModal();
}
deleteApplicationDo(): void {
this.hideConfirmModal();
......@@ -485,8 +459,6 @@ import {
console.log("Error Getting courses perSchool");
this.showLoader.next(false);
});
this.StudentInfoSub = this._hds.getStudentPerSchool(this.taxi, this.sector, this.special)
.subscribe(data => {
this.StudentInfo$.next(data);
......@@ -499,8 +471,6 @@ import {
this.showLoader.next(false);
this.showModal("#emptyselection");
});
}).catch(err => {
this.showErrorModal();
this.showLoader.next(false);
......
......@@ -5,7 +5,7 @@ import { Injectable } from "@angular/core";
import { BehaviorSubject, Subscription } from "rxjs/Rx";
import { NgRedux, select } from "@angular-redux/store";
import { IAppState } from "../../store/store";
import { ILoginInfo, ILoginInfoToken } from "../../store/logininfo/logininfo.types";
import { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { HelperDataService } from "../../services/helper-data-service";
import { LoginInfoActions } from "../../actions/logininfo.actions";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
......@@ -25,7 +25,7 @@ export default class HeaderComponent implements OnInit, OnDestroy {
private studentRole = STUDENT_ROLE;
private authRole: string;
private cuName: string;
private loginInfo$: BehaviorSubject<ILoginInfo>;
private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
private cuser: any;
private showLoader$: BehaviorSubject<boolean>;
private modalTitle: BehaviorSubject<string>;
......@@ -66,14 +66,14 @@ export default class HeaderComponent implements OnInit, OnDestroy {
ngOnInit() {
(<any>$("#headerNotice")).appendTo("body");
this.loginInfoSub = this._ngRedux.select("loginInfo")
.map(loginInfo => <ILoginInfo>loginInfo)
.map(loginInfo => <ILoginInfoRecords>loginInfo)
.subscribe(loginInfo => {
if (loginInfo.size > 0) {
loginInfo.reduce(({}, loginInfoToken) => {
this.authToken = loginInfoToken.auth_token;
this.authRole = loginInfoToken.auth_role;
this.cuName = loginInfoToken.cu_name;
return loginInfoToken;
loginInfo.reduce(({}, loginInfoObj) => {
this.authToken = loginInfoObj.auth_token;
this.authRole = loginInfoObj.auth_role;
this.cuName = loginInfoObj.cu_name;
return loginInfoObj;
}, {});
if (this.hasvalue === false) {
......@@ -88,17 +88,11 @@ export default class HeaderComponent implements OnInit, OnDestroy {
console.log("Error Getting courses perSchool");
this.showLoader.next(false);
});
}
}
this.loginInfo$.next(loginInfo);
});
}
ngOnDestroy() {
......@@ -106,7 +100,6 @@ export default class HeaderComponent implements OnInit, OnDestroy {
if (this.loginInfoSub) {
this.loginInfoSub.unsubscribe();
}
}
signOut() {
......
import {Router, ActivatedRoute, Params} from "@angular/router";
import {OnInit, OnDestroy, Component} from "@angular/core";
import { LoginInfoActions } from "../actions/logininfo.actions";
import { ILoginInfo } from "../store/logininfo/logininfo.types";
import { ILoginInfoRecords } from "../store/logininfo/logininfo.types";
import { NgRedux, select } from "@angular-redux/store";
import { BehaviorSubject, Subscription } from "rxjs/Rx";
import { IAppState } from "../store/store";
......@@ -60,7 +60,7 @@ export default class Home implements OnInit, OnDestroy {
private authRole: string;
private name: any;
private xcsrftoken: any;
private loginInfo$: BehaviorSubject<ILoginInfo>;
private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
private apiEndPoint = API_ENDPOINT;
private apiEndPointParams = API_ENDPOINT_PARAMS;
private loginInfoSub: Subscription;
......@@ -83,20 +83,21 @@ export default class Home implements OnInit, OnDestroy {
ngOnInit() {
this.loginInfoSub = this._ngRedux.select("loginInfo").subscribe(loginInfo => {
let linfo = <ILoginInfo>loginInfo;
this.loginInfoSub = this._ngRedux.select("loginInfo")
.map(loginInfo => <ILoginInfoRecords>loginInfo)
.subscribe(linfo => {
if (linfo.size > 0) {
linfo.reduce(({}, loginInfoToken) => {
this.authToken = loginInfoToken.auth_token;
this.authRole = loginInfoToken.auth_role;
linfo.reduce(({}, loginInfoObj) => {
this.authToken = loginInfoObj.auth_token;
this.authRole = loginInfoObj.auth_role;
if (this.authToken && this.authToken.length > 0 && this.authRole && this.authRole === STUDENT_ROLE) {
if (loginInfoToken.lock_application === 1)
if (loginInfoObj.lock_application === 1)
this.router.navigate(["/info"]);
else {
this.router.navigate(["/parent-form"]);
}
}
return loginInfoToken;
return loginInfoObj;
}, {});
}
......
......@@ -7,7 +7,6 @@ import { NgRedux, select } from "@angular-redux/store";
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 {
FormBuilder,
......
......@@ -7,8 +7,6 @@ import { NgRedux, select } from "@angular-redux/store";
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 {
FormBuilder,
FormGroup,
......@@ -124,7 +122,6 @@ import {
this.showModal();
this.showLoader.next(false);
});
}
calccolor(size, limit) {
......
......@@ -8,7 +8,7 @@ import { NgRedux, select } from "@angular-redux/store";
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 { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
import { API_ENDPOINT } from "../../app.settings";
......@@ -109,7 +109,7 @@ import { API_ENDPOINT } from "../../app.settings";
@Injectable() export default class InformStudents implements OnInit, OnDestroy {
loginInfo$: BehaviorSubject<ILoginInfo>;
loginInfo$: BehaviorSubject<ILoginInfoRecords>;
private modalTitle: BehaviorSubject<string>;
private modalText: BehaviorSubject<string>;
private modalHeader: BehaviorSubject<string>;
......@@ -143,13 +143,13 @@ import { API_ENDPOINT } from "../../app.settings";
(<any>$("#emaiSentNotice")).appendTo("body");
this.loginInfoSub = this._ngRedux.select("loginInfo")
.map(loginInfo => <ILoginInfo>loginInfo)
.map(loginInfo => <ILoginInfoRecords>loginInfo)
.subscribe(loginInfo => {
if (loginInfo.size > 0) {
loginInfo.reduce(({ }, loginInfoToken) => {
this.minedu_userName = loginInfoToken.minedu_username;
this.minedu_userPassword = loginInfoToken.minedu_userpassword;
return loginInfoToken;
loginInfo.reduce(({ }, loginInfoObj) => {
this.minedu_userName = loginInfoObj.minedu_username;
this.minedu_userPassword = loginInfoObj.minedu_userpassword;
return loginInfoObj;
}, {});
}
this.loginInfo$.next(loginInfo);
......@@ -160,7 +160,6 @@ import { API_ENDPOINT } from "../../app.settings";
this.successSending = -1;
this.retrieveSettings();
}
ngOnDestroy() {
......@@ -187,7 +186,6 @@ import { API_ENDPOINT } from "../../app.settings";
}
informUnlocatedStudents(unallocated, period) {
this.successSending = -2;
this.numSuccessMails = 0;
this.numFailMails = 0;
......
......@@ -8,7 +8,7 @@ import { NgRedux, select } from "@angular-redux/store";
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 { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
import { MINISTRY_ROLE, PDE_ROLE, DIDE_ROLE } from "../../constants";
......@@ -27,8 +27,6 @@ import { API_ENDPOINT } from "../../app.settings";
// encapsulation: ViewEncapsulation.None,
template: `
<div style="min-height: 500px; ">
<h5> >Επιλογή Αναφοράς<br><br></h5>
......@@ -88,7 +86,7 @@ import { API_ENDPOINT } from "../../app.settings";
@Injectable() export default class MinisterReports implements OnInit, OnDestroy {
private formGroup: FormGroup;
private loginInfo$: BehaviorSubject<ILoginInfo>;
private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
private loginInfoSub: Subscription;
private apiEndPoint = API_ENDPOINT;
private minedu_userName: string;
......@@ -117,23 +115,22 @@ import { API_ENDPOINT } from "../../app.settings";
ngOnInit() {
this.loginInfoSub = this._ngRedux.select("loginInfo")
.map(loginInfo => <ILoginInfo>loginInfo)
.map(loginInfo => <ILoginInfoRecords>loginInfo)
.subscribe(loginInfo => {
if (loginInfo.size > 0) {
loginInfo.reduce(({}, loginInfoToken) => {
this.minedu_userName = loginInfoToken.minedu_username;
this.minedu_userPassword = loginInfoToken.minedu_userpassword;
if (loginInfoToken.auth_role === PDE_ROLE || loginInfoToken.auth_role === DIDE_ROLE) {
this.userRole = loginInfoToken.auth_role;
this.minedu_userName = loginInfoToken.auth_token;
this.minedu_userPassword = loginInfoToken.auth_token;
loginInfo.reduce(({}, loginInfoObj) => {
this.minedu_userName = loginInfoObj.minedu_username;
this.minedu_userPassword = loginInfoObj.minedu_userpassword;
if (loginInfoObj.auth_role === PDE_ROLE || loginInfoObj.auth_role === DIDE_ROLE) {
this.userRole = loginInfoObj.auth_role;
this.minedu_userName = loginInfoObj.auth_token;
this.minedu_userPassword = loginInfoObj.auth_token;
}
return loginInfoToken;
return loginInfoObj;
}, {});
}
this.loginInfo$.next(loginInfo);
}, error => console.log("error selecting loginInfo"));
}
ngOnDestroy() {
......
......@@ -8,7 +8,7 @@ import { NgRedux, select } from "@angular-redux/store";
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 { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
......@@ -121,7 +121,7 @@ import {
@Injectable() export default class MinisterSettings implements OnInit, OnDestroy {
private formGroup: FormGroup;
private loginInfo$: BehaviorSubject<ILoginInfo>;
private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
private modalTitle: BehaviorSubject<string>;
private modalText: BehaviorSubject<string>;
private modalHeader: BehaviorSubject<string>;
......@@ -188,13 +188,13 @@ import {
(<any>$("#configNotice")).appendTo("body");
this.loginInfoSub = this._ngRedux.select("loginInfo")
.map(loginInfo => <ILoginInfo>loginInfo)
.map(loginInfo => <ILoginInfoRecords>loginInfo)
.subscribe(loginInfo => {
if (loginInfo.size > 0) {
loginInfo.reduce(({}, loginInfoToken) => {
this.minedu_userName = loginInfoToken.minedu_username;
this.minedu_userPassword = loginInfoToken.minedu_userpassword;
return loginInfoToken;
loginInfo.reduce(({}, loginInfoObj) => {
this.minedu_userName = loginInfoObj.minedu_username;
this.minedu_userPassword = loginInfoObj.minedu_userpassword;
return loginInfoObj;
}, {});
}
this.loginInfo$.next(loginInfo);
......@@ -253,36 +253,23 @@ import {
}
toggleCapacityFilter() {
this.capacityDisabled = !this.capacityDisabled;
}
toggleDirectorView() {
this.directorViewDisabled = !this.directorViewDisabled;
}
toggleApplicantsLogin() {
this.applicantsLoginDisabled = !this.applicantsLoginDisabled;
}
toggleApplicantsResults() {
this.applicantsResultsDisabled = !this.applicantsResultsDisabled;
}
toggleSecondPeriod() {
this.secondPeriodEnabled = !this.secondPeriodEnabled;
}
}
......@@ -8,7 +8,7 @@ import { NgRedux, select } from "@angular-redux/store";
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 { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
......@@ -68,11 +68,6 @@ import { API_ENDPOINT } from "../../app.settings";
<br><br>
<div>
<!--
<form [formGroup]="formGroup" #form>
-->
<div class="col-md-6">
<button type="submit" class="btn btn-lg btn-block" *ngIf="(loginInfo$ | async).size !== 0" (click)="runDistribution()" [disabled] = "!capacityDisabled || secondPeriodEnabled" >
Εκτέλεση Κατανομής Μαθητών<span class="glyphicon glyphicon-menu-right"></span>
......@@ -95,7 +90,7 @@ import { API_ENDPOINT } from "../../app.settings";
@Injectable() export default class MinisterView implements OnInit, OnDestroy {
private loginInfo$: BehaviorSubject<ILoginInfo>;