minister-view.ts 11.8 KB
Newer Older
1 2
import { NgRedux } from "@angular-redux/store";
import { Component, OnDestroy, OnInit } from "@angular/core";
3
import { Injectable } from "@angular/core";
4
import { ActivatedRoute, Router } from "@angular/router";
5
import { BehaviorSubject, Subscription } from "rxjs/Rx";
6

7
import { API_ENDPOINT } from "../../app.settings";
8 9 10 11
import { HelperDataService } from "../../services/helper-data-service";
import { LOGININFO_INITIAL_STATE } from "../../store/logininfo/logininfo.initial-state";
import { ILoginInfoRecords } from "../../store/logininfo/logininfo.types";
import { IAppState } from "../../store/store";
12 13

@Component({
14
    selector: "minister-view",
15 16
    template: `

17
    <h5> >Κατανομή <br></h5>
18

19 20 21
    <div
      class = "loading" *ngIf=" distStatus === 'STARTED'" >
    </div>
22

23
    <div style="min-height: 400px;">
24

25
    <div id="distributionNotice" (onHidden)="onHidden()" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
26
      <div class="modal-dialog modal-lg">
27
        <div class="modal-content">
28 29 30
          <div class="modal-header {{modalHeader | async}}" >
              <h3 class="modal-title pull-left"><i class="fa fa-check-square-o"></i>&nbsp;&nbsp;{{ modalTitle | async }}</h3>
            <button type="button" class="close pull-right" aria-label="Close" (click)="hideModal()">
31
              <span aria-hidden="true"><i class="fa fa-times"></i></span>
32 33 34
            </button>
          </div>
          <div class="modal-body">
35
              <p>{{ modalText | async }}</p>
36
          </div>
37 38 39
          <div class="modal-footer">
            <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Κλείσιμο</button>
          </div>
40 41 42 43 44
        </div>
      </div>
    </div>

    <div id="distributionWaitingNotice" (onHidden)="onHidden('#distributionWaitingNotice')" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
45
      <div class="modal-dialog modal-lg">
46
        <div class="modal-content">
47 48
          <div class="modal-header modal-header-warning">
            <h3 class="modal-title pull-left"><i class="fa fa-check-square-o"></i>&nbsp;&nbsp;Κατανομή μαθητών</h3>
49
            <button type="button" class="close pull-right" aria-label="Close" (click)="hideModal('#distributionWaitingNotice')">
50
              <span aria-hidden="true"><i class="fa fa-times"></i></span>
51 52 53
            </button>
          </div>
          <div class="modal-body">
54 55 56 57 58 59
            <p>Παρακαλώ περιμένετε...Η εκτέλεση της κατανομής ενδέχεται να <strong>διαρκέσει μερικά λεπτά</strong>.
            Παρακαλώ <strong>μην</strong> εκτελείτε οποιαδήποτε <strong>ενέργεια μετακίνησης</strong> στον φυλλομετρητή σας, μέχρι να ολοκληρωθεί η κατανομή.
            Παρακαλώ κλείστε αυτό το μήνυμα μόλις το διαβάσετε.</p>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Κλείσιμο</button>
60 61 62 63 64 65
          </div>
        </div>
      </div>
    </div>

    <br><br>
66
    <div>
67
        <div class="col-md-6">
68
          <button type="submit" class="btn btn-lg btn-block"  *ngIf="(loginInfo$ | async).size !== 0"  (click)="runDistribution()" [disabled] = "!capacityDisabled || secondPeriodEnabled" >
69
              Εκτέλεση  Κατανομής  Μαθητών<span class="glyphicon glyphicon-menu-right"></span>
70 71
          </button>
        </div>
72 73 74 75 76 77 78
        <br>

        <div class="col-md-6">
          <button type="submit" class="btn btn-lg btn-block"  *ngIf="(loginInfo$ | async).size !== 0"  (click)="runDistributionSecondPeriod()" [disabled] = "!secondPeriodEnabled" >
              Τοποθέτηση Μαθητών Β' Περιόδου<span class="glyphicon glyphicon-menu-right"></span>
          </button>
        </div>
79

80 81
    </div>

82 83
    </div>

84 85 86 87 88
   `
})

@Injectable() export default class MinisterView implements OnInit, OnDestroy {

89
    private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
90 91
    private modalTitle: BehaviorSubject<string>;
    private modalText: BehaviorSubject<string>;
92 93
    private modalHeader: BehaviorSubject<string>;
    private settings$: BehaviorSubject<any>;
94
    private loginInfoSub: Subscription;
95
    private settingsSub: Subscription;
96

97
    private apiEndPoint = API_ENDPOINT;
98 99 100
    private minedu_userName: string;
    private minedu_userPassword: string;
    private distStatus = "READY";
101 102
    private capacityDisabled: boolean;
    private directorViewDisabled: boolean;
103
    private applicantsResultsDisabled: boolean;
104
    private secondPeriodEnabled: boolean;
105

106
    constructor(
107
        private _ngRedux: NgRedux<IAppState>,
108 109 110
        private _hds: HelperDataService,
        private activatedRoute: ActivatedRoute,
        private router: Router) {
111 112 113 114 115
        this.loginInfo$ = new BehaviorSubject(LOGININFO_INITIAL_STATE);
        this.modalTitle = new BehaviorSubject("");
        this.modalText = new BehaviorSubject("");
        this.modalHeader = new BehaviorSubject("");
        this.settings$ = new BehaviorSubject([{}]);
116 117
    }

118 119
    public showModal(popupMsgId): void {
        (<any>$(popupMsgId)).modal("show");
120 121
    }

122 123
    public hideModal(popupMsgId): void {
        (<any>$(popupMsgId)).modal("hide");
124 125
    }

126
    public onHidden(popupMsgId): void {
127 128 129

    }

130
    ngOnDestroy() {
131 132 133 134 135 136
        (<any>$("#distributionWaitingNotice")).remove();
        (<any>$("#distributionNotice")).remove();
        if (this.loginInfoSub)
            this.loginInfoSub.unsubscribe();
        if (this.settingsSub)
            this.settingsSub.unsubscribe();
137 138 139
    }

    ngOnInit() {
140 141 142
        (<any>$("#distributionWaitingNotice")).appendTo("body");
        (<any>$("#distributionNotice")).appendTo("body");
        this.loginInfoSub = this._ngRedux.select("loginInfo")
143
            .map(loginInfo => <ILoginInfoRecords>loginInfo)
144 145
            .subscribe(loginInfo => {
                if (loginInfo.size > 0) {
146 147 148 149
                    loginInfo.reduce(({}, loginInfoObj) => {
                        this.minedu_userName = loginInfoObj.minedu_username;
                        this.minedu_userPassword = loginInfoObj.minedu_userpassword;
                        return loginInfoObj;
150 151 152 153 154 155
                    }, {});
                }
                this.loginInfo$.next(loginInfo);
            }, error => console.log("error selecting loginInfo"));

        this.retrieveSettings();
156 157 158 159
    }


    runDistribution() {
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
        this.distStatus = "STARTED";
        this.showModal("#distributionWaitingNotice");
        this._hds.makeDistribution(this.minedu_userName, this.minedu_userPassword)
            .then(msg => {
                this.modalTitle.next("Κατανομή Μαθητών");
                this.modalText.next("Η κατανομή ολοκληρώθηκε με επιτυχία!");
                this.modalHeader.next("modal-header-success");
                this.showModal("#distributionNotice");

                if (this.distStatus !== "ERROR")
                    this.distStatus = "FINISHED";
            })
            .catch(err => {
                console.log(err);
                this.distStatus = "ERROR";

                this.modalTitle.next("Κατανομή Μαθητών");
                this.modalText.next("Αποτυχία κατανομής. Προσπαθήστε ξανά. Σε περίπτωση που το πρόβλημα παραμένει, παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος.");
                this.modalHeader.next("modal-header-danger");
                this.showModal("#distributionNotice");
            });
181 182
    }

183 184
    runDistributionSecondPeriod() {

185
        this.distStatus = "STARTED";
186

187
        this.showModal("#distributionWaitingNotice");
188

189 190 191 192 193 194
        this._hds.makeDistributionSecondPeriod(this.minedu_userName, this.minedu_userPassword)
            .then(msg => {
                this.modalTitle.next("Τοποθέτηση Μαθητών 2ης Περιόδου Αιτήσεων");
                this.modalText.next("Η τοποθέτηση μαθητών της δεύτερης περιόδου αιτήσεων ολοκληρώθηκε με επιτυχία!");
                this.modalHeader.next("modal-header-success");
                this.showModal("#distributionNotice");
195

196 197 198 199 200 201
                if (this.distStatus !== "ERROR")
                    this.distStatus = "FINISHED";
            })
            .catch(err => {
                console.log(err);
                this.distStatus = "ERROR";
202

203 204 205 206 207
                this.modalTitle.next("Τοποθέτηση Μαθητών 2ης Περιόδου Αιτήσεων");
                this.modalText.next("Αποτυχία τοποθέτησης. Προσπαθήστε ξανά. Σε περίπτωση που το πρόβλημα παραμένει, παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος.");
                this.modalHeader.next("modal-header-danger");
                this.showModal("#distributionNotice");
            });
208 209 210

    }

211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
    retrieveSettings() {

        this.settingsSub = this._hds.retrieveAdminSettings(this.minedu_userName, this.minedu_userPassword).subscribe(data => {
            this.settings$.next(data);
            this.capacityDisabled = Boolean(Number(this.settings$.value["capacityDisabled"]));
            this.directorViewDisabled = Boolean(Number(this.settings$.value["directorViewDisabled"]));
            this.applicantsResultsDisabled = Boolean(Number(this.settings$.value["applicantsResultsDisabled"]));

            this.secondPeriodEnabled = Boolean(Number(this.settings$.value["secondPeriodEnabled"]));

            if (this.capacityDisabled === false) {
                this.modalTitle.next("Κατανομή Μαθητών");
                this.modalText.next(("ΠΡΟΣΟΧΗ: Για να μπορείτε να εκτελέσετε την κατανομή, παρακαλώ πηγαίνετε στις Ρυθμίσεις και ΑΠΕΝΕΡΓΟΠΟΙΗΣΤΕ  ") +
                    ("τη δυνατότητα των Διευθυντών να τροποποιούν τη χωρητικότητα του σχολείου τους."));
                this.modalHeader.next("modal-header-warning");
                this.showModal("#distributionNotice");
            }
            else if (this.directorViewDisabled === false) {
                this.modalTitle.next("Κατανομή Μαθητών");
                this.modalText.next(("ΠΡΟΣΟΧΗ: Για να μπορείτε να εκτελέσετε την κατανομή, παρακαλώ πηγαίνετε στις Ρυθμίσεις και ΑΠΕΝΕΡΓΟΠΟΙΗΣΤΕ  ") +
                    ("τη δυνατότητα των Διευθυντών της προβολής κατανομής των μαθητών του σχολείου τους."));
                this.modalHeader.next("modal-header-warning");
                this.showModal("#distributionNotice");
            }
            else if (this.applicantsResultsDisabled === false) {
                this.modalTitle.next("Κατανομή Μαθητών");
                this.modalText.next(("ΠΡΟΣΟΧΗ: Για να μπορείτε να εκτελέσετε την κατανομή, παρακαλώ πηγαίνετε στις Ρυθμίσεις και ΑΠΕΝΕΡΓΟΠΟΙΗΣΤΕ  ") +
                    ("τη δυνατότητα της προβολής αποτελεσμάτων κατανομής από τους μαθητές."));
                this.modalHeader.next("modal-header-warning");
                this.showModal("#distributionNotice");
            }
        },
            error => {
                this.settings$.next([{}]);
                console.log("Error Getting MinisterRetrieveSettings");
            });
247
    }
248

249
}