From 86a020e57d53f8013b634a87a62044ab199736c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=9D=CE=AF=CE=BA=CE=BF=CF=82=20=CE=9A=CE=B1=CF=84=CF=83?= =?UTF-8?q?=CE=B1=CE=BF=CF=8D=CE=BD=CE=BF=CF=82?= Date: Tue, 14 Mar 2017 09:26:34 +0200 Subject: [PATCH] updated Criteria Component --- source/actions/criteria.actions.ts | 21 ++++- .../application.form.main.html | 56 ++++++++++-- .../application.form.main.ts | 90 +++++++++++++++---- .../application.submit.ts | 16 ++++ source/constants.ts | 1 + source/services/helper-data-service.ts | 25 +++++- source/store/criteria/criteria.reducer.ts | 26 +++++- .../store/criteria/criteria.transformers.ts | 6 ++ source/store/criteria/criteria.types.ts | 8 ++ 9 files changed, 218 insertions(+), 31 deletions(-) diff --git a/source/actions/criteria.actions.ts b/source/actions/criteria.actions.ts index e8417d5..9abcb85 100644 --- a/source/actions/criteria.actions.ts +++ b/source/actions/criteria.actions.ts @@ -1,12 +1,29 @@ -import { CRITERIA_SAVE} from '../constants'; +import { CRITERIA_RECEIVED, CRITERIA_SAVE} from '../constants'; import { Injectable } from '@angular/core'; import { NgRedux } from 'ng2-redux'; import { IAppState } from '../store'; +import { HelperDataService } from '../services/helper-data-service'; @Injectable() export class CriteriaActions { constructor( - private _ngRedux: NgRedux) {} + private _ngRedux: NgRedux, + private _hds: HelperDataService) {} + + getCriteria = (reload) => { + const { criter } = this._ngRedux.getState(); + //if (sectorFields.size === 0) { + if (reload === true || (reload === false && criter.size === 0)) { + return this._hds.getCriteria().then(criteria => { + return this._ngRedux.dispatch({ + type: CRITERIA_RECEIVED, + payload: { + criteria + } + }); + }); + } + }; saveCriteria = (criter) => { return this._ngRedux.dispatch({ diff --git a/source/components/student-application-form/application.form.main.html b/source/components/student-application-form/application.form.main.html index a7ea3fb..6569ace 100644 --- a/source/components/student-application-form/application.form.main.html +++ b/source/components/student-application-form/application.form.main.html @@ -112,31 +112,45 @@
-
+ Εισοδηματικά κριτήρια + + +
+
- + + + + + - +
Η επιλογή από αυτή τη λίστα είναι απαραίτητη!
+
+
+ + Κοινωνικά κριτήρια

Επιλέξτε όσα από τα παρακάτω κριτήρια πληρούνται για εσάς. Οι επιλογές σας επέχουν θέση υπέυθυνης δήλωσης. Θα πρέπει να προσκομίσετε τα αντίστοιχα δικαιολογητικά στο σχολείο εγγραφής σας, όταν σας ζητηθεί.

+ + + +
+ + + + +
+
+ +
+
+ {{criter$.name}} +
+
+ +
+ +
+ +
+ + +
diff --git a/source/components/student-application-form/application.form.main.ts b/source/components/student-application-form/application.form.main.ts index 583c9ab..59b5cab 100644 --- a/source/components/student-application-form/application.form.main.ts +++ b/source/components/student-application-form/application.form.main.ts @@ -14,6 +14,7 @@ import { FormBuilder, FormGroup, FormControl, + FormArray, Validators, } from '@angular/forms'; @@ -30,6 +31,9 @@ import { public studentDataGroup: FormGroup; public applicantDataGroup: FormGroup; public studentCriteriaGroup: FormGroup; + + private rss = new FormArray([]); + private selectionIncomeId = 0; //public orphanmode = 0; //public childrenmode = 0; @@ -45,8 +49,8 @@ import { regionaddress: ['ΓΙΑΝΝΙΤΣΩΝ 5', [Validators.pattern(VALID_ADDRESS_PATTERN),Validators.required]], regiontk: ['26334', [Validators.pattern(VALID_ADDRESSTK_PATTERN),Validators.required]], regionarea: ['ΠΑΤΡΑ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], - certificatetype: ['Απολυτήριο Λυκείου', this.checkChoice], - relationtostudent: ['Μαθητής', this.checkChoice], + certificatetype: ['Απολυτήριο Λυκείου', checkChoice], + relationtostudent: ['Μαθητής', checkChoice], telnum: ['2610789789', [Validators.pattern(VALID_DIGITS_PATTERN),Validators.required]], }); @@ -55,6 +59,7 @@ import { guardiansurname: ['ΚΑΤΣΑΟΥΝΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], }); + /* this.studentCriteriaGroup = this.fb.group({ orphanmono: false, orphantwice: false, @@ -63,9 +68,15 @@ import { twins: false, disability: false, studies: false, - income: ['noincomecriterio', this.checkChoice ], + income: ['noincomecriterio', checkChoice ], + }); + */ + this.studentCriteriaGroup = this.fb.group({ + formArray: this.rss, + income: ['noincomecriterio', checkChoice ], + incometest: ['noincomecriterio', checkChoice ], }); - + }; ngOnInit() { @@ -80,10 +91,16 @@ import { return state.studentDataFields; }); + this._sdfb.getCriteria(true); this.criteria$ = this._ngRedux.select(state => { if (state.criter.size > 0) { state.criter.reduce(({}, criteria) => { - this.studentCriteriaGroup.setValue(criteria); + //this.studentCriteriaGroup.setValue(criteria); + if (criteria.selected === true && (criteria.id === "8" || criteria.id === "9" || criteria.id === "10" || criteria.id === "11" )) + this.selectionIncomeId = Number(criteria.id); + console.log("Yes"); + console.log(this.selectionIncomeId); + this.rss.push( new FormControl(criteria.selected, [])); return criteria; }, {}); } @@ -112,6 +129,13 @@ import { submitSelected() { this._sdfa.saveStudentDataFields([this.studentDataGroup.value]); + this.studentCriteriaGroup.controls['formArray']['controls'][7].setValue(false); + this.studentCriteriaGroup.controls['formArray']['controls'][8].setValue(false); + this.studentCriteriaGroup.controls['formArray']['controls'][9].setValue(false); + this.studentCriteriaGroup.controls['formArray']['controls'][10].setValue(false); + this.studentCriteriaGroup.controls['formArray']['controls'][this.selectionIncomeId-1].setValue(true); + this._sdfb.saveCriteria([this.studentCriteriaGroup.value.formArray]); + this.router.navigate(['/application-submit']); } @@ -139,20 +163,52 @@ import { //console.log(this.studentCriteriaGroup.value); } - checkstatus() { - //this.studentCriteriaGroup.controls[name].setValue(cb.checked); - //console.log("after check"); - //console.log(this.studentCriteriaGroup.value); - this._sdfb.saveCriteria([this.studentCriteriaGroup.value]); + checkcriteria(cb, mutual_disabled) { + if (mutual_disabled !== "-1" && cb.checked === true) { + this.studentCriteriaGroup.controls['formArray']['controls'][mutual_disabled-1].setValue(false); + } + //this._sdfb.saveCriteria([this.studentCriteriaGroup.value.formArray]); } - checkChoice(c: FormControl) { - console.log(c.value); - if (c.value === "noincomecriterio") - return {status: true} - else - // Null means valid, believe it or not - return null; + + + checkstatus(cb) { + console.log("Hey"); + console.log(this.studentCriteriaGroup.value.income); + //this._sdfb.saveCriteria([this.studentCriteriaGroup.value.income]); + + + console.log("OK"); + console.log(cb.value); + + if (cb.value === "<= 3000 Ευρώ") + this.selectionIncomeId = 8; + else if (cb.value === "<= 6000 Ευρώ") + this.selectionIncomeId = 9; + else if (cb.value === "<= 9000 Ευρώ") + this.selectionIncomeId = 10; + else if (cb.value === "> 9000 Ευρώ") + this.selectionIncomeId = 11; + + + //this.studentCriteriaGroup.value[9] = true; + //this.studentCriteriaGroup.value[9] = false; + console.log(this.studentCriteriaGroup.value.formArray); + console.log(this.studentCriteriaGroup.value); + //this._sdfb.saveCriteria([this.studentCriteriaGroup.value.formArray]); + } + + +} + + +function checkChoice(c: FormControl) { + console.log(c.value); + if (c.value === "noincomecriterio") + return {status: true} + else + // Null means valid, believe it or not + return null; } diff --git a/source/components/student-application-form/application.submit.ts b/source/components/student-application-form/application.submit.ts index fd34bb6..11c9bbc 100644 --- a/source/components/student-application-form/application.submit.ts +++ b/source/components/student-application-form/application.submit.ts @@ -127,6 +127,21 @@ import {AppSettings} from '../../app.settings'; }); this.showLoaderSchools$ = this.regions$.map(regions => regions.size === 0); + this.criteria$ = this._ngRedux.select(state => { + if (state.criter.size > 0) { + state.criter.reduce(({}, criteria) => { + //code to be replaced in next version + if (criteria.selected === true && Number(criteria.id) !== 11) + this.studentCriteria.push(Number(criteria.id)); + + return criteria; + }, {}); + } + return state.criter; + }); + this.showLoaderCriteria$ = this.criteria$.map(criter => criter.size === 0); + + /* this.criteria$ = this._ngRedux.select(state => { if (state.criter.size > 0) { state.criter.reduce(({}, criteria) => { @@ -158,6 +173,7 @@ import {AppSettings} from '../../app.settings'; return state.criter; }); this.showLoaderCriteria$ = this.criteria$.map(criter => criter.size === 0); + */ this.sectors$ = this._ngRedux.select(state => { state.sectors.reduce((prevSector, sector) =>{ diff --git a/source/constants.ts b/source/constants.ts index 674bab0..0bead0c 100644 --- a/source/constants.ts +++ b/source/constants.ts @@ -23,6 +23,7 @@ export const AMKAFILL_SAVE = 'AMKAFILL_SAVE'; export const LOGININFO_SAVE = 'LOGININFO_SAVE'; export const LOGININFO_INIT = 'LOGININFO_INIT'; +export const CRITERIA_RECEIVED = 'CRITERIA_RECEIVED'; export const CRITERIA_SAVE = 'CRITERIA_SAVE'; //export const VALID_NAMES_PATTERN = '[Α-ΩΆΈΉΊΎΌΏα-ωάέήίύόώ ]*$'; diff --git a/source/services/helper-data-service.ts b/source/services/helper-data-service.ts index da5b6aa..5937550 100644 --- a/source/services/helper-data-service.ts +++ b/source/services/helper-data-service.ts @@ -229,7 +229,30 @@ export class HelperDataService { return rsa; } - + getCriteria() { + this.loginInfo$.forEach(loginInfoToken => { + console.log(loginInfoToken.get(0)); + this.authToken = loginInfoToken.get(0).auth_token; + }); + let headers = new Headers({ + "Content-Type": "application/json", + "X-CSRF-Token": "LU92FaWYfImfZxfldkF5eVnssdHoV7Aa9fg8K1bWYUc", + }); + this.createAuthorizationHeader(headers); + let options = new RequestOptions({ headers: headers }); + return new Promise((resolve, reject) => { + this.http.get(`${AppSettings.API_ENDPOINT}/criteria/list`, options) + .map(response => response.json()) + .subscribe(data => { + resolve(data); + }, // put the data returned from the server in our variable + error => { + console.log("Error HTTP GET Service"); // in case of failure show this message + reject("Error HTTP GET Service"); + }, + () => console.log("Sector Fields Received"));//run this code in all cases); */ + }); + }; getCurrentUser() { return new Promise((resolve, reject) => { diff --git a/source/store/criteria/criteria.reducer.ts b/source/store/criteria/criteria.reducer.ts index 45b96c1..2141f4e 100644 --- a/source/store/criteria/criteria.reducer.ts +++ b/source/store/criteria/criteria.reducer.ts @@ -3,17 +3,26 @@ import { INITIAL_STATE } from './criteria.initial-state'; import { Seq } from 'immutable'; import { + CRITERIA_RECEIVED, CRITERIA_SAVE } from '../../constants'; export function criteriaReducer(state: ICriter = INITIAL_STATE, action): ICriter { switch (action.type) { + case CRITERIA_RECEIVED: + let newCriter = Array(); + let i=0; + action.payload.criteria.forEach(criteria => { + newCriter.push({id: criteria.id, name: criteria.name, mutual_disabled_id: criteria.mutual_disabled_id, selected: false}); + i++; + }); + return Seq(newCriter).map(n => n).toList(); + case CRITERIA_SAVE: let criter = Array(); let ind=0; - - action.payload.criter.forEach(criteria => { - criter.push(criteria); + state.forEach(criteria => { + criter.push({id: criteria.id, name: criteria.name, mutual_disabled_id: criteria.mutual_disabled_id, selected: action.payload.criter[0][ind]}); ind++; }); @@ -21,3 +30,14 @@ export function criteriaReducer(state: ICriter = INITIAL_STATE, action): ICriter default: return state; } }; +/* +case COURSEFIELDS_SELECTED_SAVE: + let selectedCourseFields = Array(); + let ind=0; + state.forEach(courseField => { + selectedCourseFields.push({id: courseField.id, name: courseField.name, selected: action.payload.courseFieldsSelected[ind]}); + ind++; + }); + return Seq(selectedCourseFields).map(n => n).toList(); +default: return state; +*/ diff --git a/source/store/criteria/criteria.transformers.ts b/source/store/criteria/criteria.transformers.ts index 227e127..10eba2c 100644 --- a/source/store/criteria/criteria.transformers.ts +++ b/source/store/criteria/criteria.transformers.ts @@ -3,10 +3,16 @@ import { ICriteria, ICriter } from './criteria.types'; export function deimmutifyCriteria(state: ICriter): ICriteria[] { let fetchedCriteria = new Array(); + /* state.forEach(criteria => { fetchedCriteria.push({orphanmono: criteria.orphanmono, orphantwice: criteria.orphantwice, threechildren: criteria.threechildren, manychildren: criteria.manychildren, twins: criteria.twins, disability: criteria.disability, studies: criteria.studies, income: criteria.income, }); }); + */ + state.forEach(criteria => { + fetchedCriteria.push({id: criteria.id, name: criteria.name, mutual_disabled_id: criteria.mutual_disabled_id, selected: criteria.selected, + }); + }); return fetchedCriteria; }; diff --git a/source/store/criteria/criteria.types.ts b/source/store/criteria/criteria.types.ts index b3d7a48..6d83c0b 100644 --- a/source/store/criteria/criteria.types.ts +++ b/source/store/criteria/criteria.types.ts @@ -1,6 +1,7 @@ import { List } from 'immutable'; export interface ICriteria { + /* orphanmono: boolean; orphantwice: boolean; threechildren: boolean; @@ -9,6 +10,13 @@ export interface ICriteria { disability: boolean; studies: boolean; income: string; + */ + + id: string; + name: string; + mutual_disabled_id: string, + //globalIndex: number; + selected: boolean; } export type ICriter = List; -- GitLab