diff --git a/source/actions/criteria.actions.ts b/source/actions/criteria.actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..e8417d59b60af23c264f851a827351333e07fd57 --- /dev/null +++ b/source/actions/criteria.actions.ts @@ -0,0 +1,20 @@ +import { CRITERIA_SAVE} from '../constants'; +import { Injectable } from '@angular/core'; +import { NgRedux } from 'ng2-redux'; +import { IAppState } from '../store'; + +@Injectable() +export class CriteriaActions { + constructor( + private _ngRedux: NgRedux) {} + + saveCriteria = (criter) => { + return this._ngRedux.dispatch({ + type: CRITERIA_SAVE, + payload: { + criter + } + }); + }; + +} diff --git a/source/actions/index.ts b/source/actions/index.ts index 35b750651ce26c14b3facfa579a60be5faa22bcc..c1e589b007cb52c5d2c4f487a86c8318a929b010 100644 --- a/source/actions/index.ts +++ b/source/actions/index.ts @@ -6,7 +6,10 @@ import { StudentDataFieldsActions } from './studentdatafields.actions'; import { EpalClassesActions } from './epalclass.actions'; import { AmkaFillsActions} from './amkafill.actions'; import { LoginInfoActions} from './logininfo.actions'; -const ACTION_PROVIDERS = [ CourseFieldsActions, SectorFieldsActions, RegionSchoolsActions, SectorCoursesActions, StudentDataFieldsActions, EpalClassesActions, AmkaFillsActions, LoginInfoActions ]; +import { CriteriaActions} from './criteria.actions'; + +const ACTION_PROVIDERS = [ CourseFieldsActions, SectorFieldsActions, RegionSchoolsActions, SectorCoursesActions, StudentDataFieldsActions, + EpalClassesActions, AmkaFillsActions, LoginInfoActions, CriteriaActions ]; export { CourseFieldsActions, @@ -17,5 +20,6 @@ export { EpalClassesActions, AmkaFillsActions, LoginInfoActions, + CriteriaActions, ACTION_PROVIDERS, }; diff --git a/source/app.settings.ts b/source/app.settings.ts index df5dc3708a146a15a0613f649f2d172129e0a7c8..0a4a068ce1ada18f11382f5df234433f67feddce 100644 --- a/source/app.settings.ts +++ b/source/app.settings.ts @@ -1,6 +1,7 @@ export class AppSettings { public static get API_ENDPOINT(): string { - return 'http://localhost/angular/eepal-front/drupal'; + return 'http://localhost/drupal-8.2.5'; + // return 'http://localhost/angular/eepal-front/drupal'; // return 'http://localhost/drupal'; // return 'http://eepal.dev/drupal'; // return 'http://eduslim2.minedu.gov.gr/drupal'; diff --git a/source/components/student-application-form/application.form.main.html b/source/components/student-application-form/application.form.main.html index 111cdc8e06d4b50d6af12013d6b44fcca5aff9a1..330f5f7afdd75f4c213e1196e30a58242e7e1093 100644 --- a/source/components/student-application-form/application.form.main.html +++ b/source/components/student-application-form/application.form.main.html @@ -1,18 +1,23 @@
-
+
+ + + + + +
+
+ +
+
+
+ +
+
+
+
-
@@ -129,14 +134,79 @@ Επιτρέπονται μόνο ψηφία σε αυτό το πεδίο!
+ +
+
+ +
+ Εισοδηματικά κριτήρια + +
+
+ +
+ Η επιλογή από αυτή τη λίστα είναι απαραίτητη! +
+
+ + Κοινωνικά κριτήρια +

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

+
+
+
Ορφανός από τον ένα γονέα
+
+
+
+
Ορφανός και από τους δύο γονείς
+
+
+
+
Μέλος Τρίτεκνης Οικογένειας
+
+
+
+
Μέλος Πολύτεκνης Οικογένειας
+
+
+
+
Πολύδυμα Τέκνα
+
+
+
+
Γονείς, τέκνα, αδέλφια ή σύζυγος με αναπηρία 67% και άνω
+
+
+
+
Αδελφός,-ή που σπουδάζει σε άλλη πόλη
+
+
+ + + + + + + +
+ +
-
-
@@ -144,7 +214,3 @@
- -
- -
diff --git a/source/components/student-application-form/application.form.main.ts b/source/components/student-application-form/application.form.main.ts index 76259a7ca08d6bdadfda18041e99d190be049ae5..4858839d729c684131cce7bda901e57e7e070628 100644 --- a/source/components/student-application-form/application.form.main.ts +++ b/source/components/student-application-form/application.form.main.ts @@ -1,11 +1,12 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs/Rx'; import { Injectable } from "@angular/core"; -import { StudentDataFieldsActions } from '../../actions/studentdatafields.actions'; import { Router } from '@angular/router'; import { NgRedux, select } from 'ng2-redux'; +import { StudentDataFieldsActions } from '../../actions/studentdatafields.actions'; import { IStudentDataFields } from '../../store/studentdatafields/studentdatafields.types'; -//import { ICourseFields } from '../../store/coursefields/coursefields.types'; +import { CriteriaActions } from '../../actions/criteria.actions'; +import { ICriter } from '../../store/criteria/criteria.types'; import { IAppState } from '../../store/store'; import { VALID_NAMES_PATTERN, VALID_ADDRESS_PATTERN, VALID_ADDRESSTK_PATTERN, VALID_DIGITS_PATTERN } from '../../constants'; @@ -24,20 +25,23 @@ import { @Injectable() export default class StudentApplicationMain implements OnInit { private studentDataFields$: Observable; - //private courseFields$: Observable; + private criteria$: Observable; public studentDataGroup: FormGroup; + public applicantDataGroup: FormGroup; + public studentCriteriaGroup: FormGroup; + //public orphanmode = 0; + //public childrenmode = 0; constructor(private fb: FormBuilder, private _sdfa: StudentDataFieldsActions, + private _sdfb: CriteriaActions, private _ngRedux: NgRedux, private router: Router) { this.studentDataGroup = this.fb.group({ epaluser_id: [1,[]], name: ['ΝΙΚΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], studentsurname: ['ΚΑΤΣΑΟΥΝΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], - //guardianfirstname: ['ΑΝΑΣΤΑΣΙΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], - //guardiansurname: ['ΚΑΤΣΑΟΥΝΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], 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]], @@ -45,10 +49,27 @@ import { relationtostudent: ['Μαθητής', Validators.required], telnum: ['2610789789', [Validators.pattern(VALID_DIGITS_PATTERN),Validators.required]], }); - + + this.applicantDataGroup = this.fb.group({ + guardianfirstname: ['ΑΝΑΣΤΑΣΙΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], + guardiansurname: ['ΚΑΤΣΑΟΥΝΟΣ', [Validators.pattern(VALID_NAMES_PATTERN),Validators.required]], + }); + + this.studentCriteriaGroup = this.fb.group({ + orphanmono: false, + orphantwice: false, + threechildren: false, + manychildren: false, + twins: false, + disability: false, + studies: false, + income: ['noincomecriterio', checkChoice], + }); + }; ngOnInit() { + this.studentDataFields$ = this._ngRedux.select(state => { if (state.studentDataFields.size > 0) { state.studentDataFields.reduce(({}, studentDataField) => { @@ -58,17 +79,66 @@ import { } return state.studentDataFields; }); - } + this.criteria$ = this._ngRedux.select(state => { + if (state.criter.size > 0) { + state.criter.reduce(({}, criteria) => { + this.studentCriteriaGroup.setValue(criteria); + return criteria; + }, {}); + } + return state.criter; + }); - saveSelected() { - this._sdfa.saveStudentDataFields([this.studentDataGroup.value]); - this.router.navigate(['/region-schools-select']); } - submitSelected() { this._sdfa.saveStudentDataFields([this.studentDataGroup.value]); + this.router.navigate(['/application-submit']); } + + checkorphan(orphanModeName,cb) { + if (orphanModeName === "mono" && cb.checked === true) + this.studentCriteriaGroup.controls['orphantwice'].setValue(false); + else if (orphanModeName === "twice" && cb.checked === true) + this.studentCriteriaGroup.controls['orphanmono'].setValue(false); + + this._sdfb.saveCriteria([this.studentCriteriaGroup.value]); + + //console.log("after check"); + //console.log(this.studentCriteriaGroup.value); + } + + checkchildren(childrenModeName, cb) { + if (childrenModeName === "three" && cb.checked === true) + this.studentCriteriaGroup.controls['manychildren'].setValue(false); + else if (childrenModeName === "many" && cb.checked === true) + this.studentCriteriaGroup.controls['threechildren'].setValue(false); + + this._sdfb.saveCriteria([this.studentCriteriaGroup.value]); + + //console.log("after check"); + //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]); + } + + +} + + +function checkChoice(c: FormControl) { + console.log("here!!!!"); + 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/constants.ts b/source/constants.ts index 59ac51976871804735b6579a23c329d93a4d5311..7532e07308e450f807edd07e7244bd394b190c48 100644 --- a/source/constants.ts +++ b/source/constants.ts @@ -19,6 +19,8 @@ export const AMKAFILL_SAVE = 'AMKAFILL_SAVE'; export const LOGININFO_SAVE = 'LOGININFO_SAVE'; +export const CRITERIA_SAVE = 'CRITERIA_SAVE'; + //export const VALID_NAMES_PATTERN = '[Α-ΩΆΈΉΊΎΌΏα-ωάέήίύόώ ]*$'; export const VALID_NAMES_PATTERN = '[A-Za-zΑ-ΩΆΈΉΊΎΌΏα-ωάέήίύόώ ]*$'; export const VALID_ADDRESS_PATTERN = '[0-9A-Za-zΑ-ΩΆΈΉΊΎΌΏα-ωάέήίύόώ ]*$'; diff --git a/source/containers/globalstyles.css b/source/containers/globalstyles.css index 903e76d23de28ae7776ad7a482aabc308e16b9a6..f142990131b2594f3a6226333952c5981f7fed14 100644 --- a/source/containers/globalstyles.css +++ b/source/containers/globalstyles.css @@ -147,3 +147,8 @@ .form-group input[type="checkbox"]:checked + .btn-group > label span:last-child { display: none; } + +fieldset{ +border-width: 1px; +border-style: inset; +} diff --git a/source/store/criteria/criteria.initial-state.ts b/source/store/criteria/criteria.initial-state.ts new file mode 100644 index 0000000000000000000000000000000000000000..a469eca01f1bf29799ed3e587d60b09c1e45008b --- /dev/null +++ b/source/store/criteria/criteria.initial-state.ts @@ -0,0 +1,5 @@ +import { List } from 'immutable'; +import { ICriteria } from './criteria.types'; + +// export const INITIAL_STATE = List([new CourseFieldRecord({})]); +export const INITIAL_STATE = List(); diff --git a/source/store/criteria/criteria.reducer.ts b/source/store/criteria/criteria.reducer.ts new file mode 100644 index 0000000000000000000000000000000000000000..45b96c1b9f6d841d5b084caee01324b4816ee5f7 --- /dev/null +++ b/source/store/criteria/criteria.reducer.ts @@ -0,0 +1,23 @@ +import { ICriteria, ICriter } from './criteria.types'; +import { INITIAL_STATE } from './criteria.initial-state'; +import { Seq } from 'immutable'; + +import { + CRITERIA_SAVE +} from '../../constants'; + +export function criteriaReducer(state: ICriter = INITIAL_STATE, action): ICriter { + switch (action.type) { + case CRITERIA_SAVE: + let criter = Array(); + let ind=0; + + action.payload.criter.forEach(criteria => { + criter.push(criteria); + ind++; + }); + + return Seq(criter).map(n => n).toList(); + default: return state; + } +}; diff --git a/source/store/criteria/criteria.transformers.ts b/source/store/criteria/criteria.transformers.ts new file mode 100644 index 0000000000000000000000000000000000000000..227e127fff628b5f51f6e191f2516a85bcb2cffe --- /dev/null +++ b/source/store/criteria/criteria.transformers.ts @@ -0,0 +1,12 @@ +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, + }); + }); + return fetchedCriteria; +}; diff --git a/source/store/criteria/criteria.types.ts b/source/store/criteria/criteria.types.ts new file mode 100644 index 0000000000000000000000000000000000000000..b3d7a48ac282bbe604d013a4679b452da6aa4ab5 --- /dev/null +++ b/source/store/criteria/criteria.types.ts @@ -0,0 +1,14 @@ +import { List } from 'immutable'; + +export interface ICriteria { + orphanmono: boolean; + orphantwice: boolean; + threechildren: boolean; + manychildren: boolean; + twins: boolean; + disability: boolean; + studies: boolean; + income: string; +} + +export type ICriter = List; diff --git a/source/store/criteria/index.ts b/source/store/criteria/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e72285654eda37e849ea644637281abbd0391232 --- /dev/null +++ b/source/store/criteria/index.ts @@ -0,0 +1,10 @@ +import { ICriter, ICriteria } from './criteria.types'; +import { criteriaReducer } from './criteria.reducer'; +import { deimmutifyCriteria } from './criteria.transformers'; + +export { + ICriter, + ICriteria, + criteriaReducer, + deimmutifyCriteria, +}; diff --git a/source/store/index.ts b/source/store/index.ts index 1b680d03a9ca3a4bef3c9e79567ccf5e913c7775..64aefef980b9f94dd9d117cdc743a8405460ef52 100644 --- a/source/store/index.ts +++ b/source/store/index.ts @@ -8,6 +8,7 @@ import { ISectors, ISector, ISectorCourse } from './sectorcourses/sectorcourses. import { IStudentDataField, IStudentDataFields } from './studentdatafields/studentdatafields.types'; import { IEpalClass, IEpalClasses } from './epalclasses/epalclasses.types'; import { ILoginInfoToken, ILoginInfo } from './logininfo/logininfo.types'; +import { ICriter, ICriteria } from './criteria/criteria.types'; export { IAppState, @@ -27,7 +28,8 @@ export { IEpalClass, IEpalClasses, ILoginInfo, - + ICriter, + ICriteria }; export const middleware = [ diff --git a/source/store/store.ts b/source/store/store.ts index b71d967900a39b1c2367dfd508dbf1a35e5c20e7..322ad2651382f56ca174c5b64ac8e31205d5ed71 100644 --- a/source/store/store.ts +++ b/source/store/store.ts @@ -7,6 +7,7 @@ import * as studentDataFields from './studentdatafields'; import * as epalclasses from './epalclasses'; import * as amkafills from './amkafill'; import * as loginInfo from './logininfo'; +import * as criter from './criteria'; /* * This is where we 'assemble' the full store out of its modules. @@ -21,6 +22,7 @@ export interface IAppState { epalclasses?: epalclasses.IEpalClasses; amkafills?: amkafills.IAmkaFills; loginInfo?: loginInfo.ILoginInfo; + criter?: criter.ICriter; }; export const rootReducer = combineReducers({ @@ -32,6 +34,7 @@ export const rootReducer = combineReducers({ epalclasses: epalclasses.epalclassesReducer, amkafills: amkafills.amkafillReducer, loginInfo: loginInfo.loginInfoReducer, + criter: criter.criteriaReducer, }); export function deimmutify(state: IAppState): Object { @@ -44,5 +47,6 @@ export function deimmutify(state: IAppState): Object { epalclasses: epalclasses.deimmutifyEpalClasses(state.epalclasses), amkafills: amkafills.deimmutifyAmkaFills(state.amkafills), loginInfo: loginInfo.deimmutifyLoginInfo(state.loginInfo), + criter: criter.deimmutifyCriteria(state.criter), }; }