add-new-license.component.ts 8.76 KB
import { Component, AfterViewInit, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ApplicationService } from '../services/application.service';
//import { OnlyNumber } from '../components/shared/only-number-validator.directive';
//import { EmailValidator } from '../components/shared/email-validator.directive';
//import { forbiddenNameValidator } from '../components/shared/forbidden-name-validator.directive';

import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';

declare var jQuery: any;

@Component({
    templateUrl: './app/components/add-new-license.component.html'
})
export class AddNewLicenseComponent implements AfterViewInit, OnInit {

    //addNewLicenseForm: FormGroup;

    addNewLicenseForm = new FormGroup({
        licenseType: new FormControl(),
        accountNo: new FormControl(),
        licenseeFirstName: new FormControl(),
        licenseeLastName: new FormControl(),
        accountType: new FormControl(),
        institutionName: new FormControl(),
        address: new FormControl(),
        city: new FormControl(),
        state: new FormControl(),
        country: new FormControl(),
        zip: new FormControl(),
        phone: new FormControl(),
        email: new FormControl(),
        subscriptionStartDate: new FormControl(),
        subscriptionEndDate: new FormControl(),
        subscriptionPrice: new FormControl(),
        exportImages: new FormControl(),
        userName1: new FormControl(),
        password: new FormControl(),
        securityQuestion: new FormControl(),
        answer: new FormControl()
    });

    LicenseTypes = ['Concurrent License', 'Single License', 'Site License', 'Reseller'];

    AccountTypes = ['High School', 'Community College', 'Career College', 'Higher Education', 'Library', 'Medical School', 'Corporate Training', 'Other'];

    SecurityQuestions = ['What is your pets name', 'Where did you spend your ....', 'What was the last name of your ....', 'What is the name of your ....'];


    constructor(private application: ApplicationService, private router: Router, private fb: FormBuilder) {
        this.createForm();
    }

    createForm() {
        this.addNewLicenseForm = this.fb.group({
            licenseType: ['', Validators.required],
            accountNo: ['', [Validators.required]],
            licenseeFirstName: ['', Validators.required],
            licenseeLastName: ['', Validators.required],
            accountType: ['', Validators.required],
            institutionName: ['', Validators.required],
            address: ['', Validators.required],
            city: ['', Validators.required],
            state: ['', Validators.required],
            country: ['', Validators.required],
            zip: ['', Validators.compose([(Validators.required, Validators.pattern(/^\d{5}$/))])],  // -- Working (5) numbers
            phone: ['', Validators.compose([(Validators.required, Validators.pattern(/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/))])],
            email: ['', Validators.compose([Validators.required, Validators.pattern(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)])], //:=>/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
            subscriptionStartDate: ['', Validators.required],
            subscriptionEndDate: ['', Validators.required],
            subscriptionPrice: ['', [(Validators.required, Validators.pattern(/^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i))]],
            exportImages: ['', Validators.compose([Validators.required, Validators.pattern('(?:NaN|-?(?:(?:\\d+|\\d*\\.\\d+)(?:[E|e][+|-]?\\d+)?|Infinity))')])],
            userName1: ['', Validators.required],
            password: ['', Validators.required],
            securityQuestion: ['', Validators.required],
            answer: ['', Validators.required]
        });

        this.addNewLicenseForm.valueChanges
            .subscribe(data => this.onValueChanged(data));

        this.onValueChanged(); // (re)set validation messages now
    }

    ngAfterViewInit(): void {
        this.initializeUIElements();

        jQuery(function () {
            jQuery('#datetimepicker1, #datetimepicker2').datetimepicker({
                //language: 'pt-BR'
            });
        });
    }

    initializeUIElements(): void {



    }

    ngOnInit(): void {
        /*if (this.application.currentUser == null) {
            this.router.navigate(['/login']);
        }*/
        this.createForm();
    }

    showAlert(id: string): void {
        jQuery('#' + id).modal('show');
    }

    //ngOnInit(): void {
    //    this.buildForm();
    //}

    //buildForm(): void {
    //    this.heroForm = this.fb.group({
    //        'name': [this.hero.name, [
    //            Validators.required,
    //            Validators.minLength(4),
    //            Validators.maxLength(24),
    //            forbiddenNameValidator(/bob/i)
    //        ]
    //        ],
    //        'alterEgo': [this.hero.alterEgo],
    //        'power': [this.hero.power, Validators.required]
    //    });

    //    this.heroForm.valueChanges
    //        .subscribe(data => this.onValueChanged(data));

    //    this.onValueChanged(); // (re)set validation messages now
    //}


    onValueChanged(data?: any) {
        if (!this.addNewLicenseForm) { return; }
        const form = this.addNewLicenseForm;

        for (const field in this.formErrors) {
            // clear previous error message (if any)
            this.formErrors[field] = '';
            const control = form.get(field);

            if (control && control.dirty && !control.valid) {
                const messages = this.validationMessages[field];
                for (const key in control.errors) {
                    this.formErrors[field] += messages[key] + ' ';
                }
            }
        }
    }

    formErrors = {
        'licenseType': '',
        'accountNo': '',
        'licenseeFirstName': '',
        'licenseeLastName': '',
        'accountType': '',
        'institutionName': '',
        'address': '',
        'city': '',
        'state': '',
        'country': '',
        'zip': '',
        'phone': '',
        'email': '',
        'subscriptionStartDate': '',
        'subscriptionEndDate': '',
        'subscriptionPrice': '',
        'exportImages': '',
        'userName1': '',
        'password': '',
        'securityQuestion': '',
        'answer': ''
    };

    validationMessages = {
        'licenseType': {
            'required': 'License type is required.'
        },
        'accountNo': {
            'required': 'Account Number is required.'
        },
        'licenseeFirstName': {
            'required': 'LicenseeFirstName is required.',
            'forbiddenName': 'Someone named "Bob" cannot be a Licensee'
        },
        'licenseeLastName': {
            'required': 'LicenseeLastName is required.'
        },
        'accountType': {
            'required': 'AccountType is required.'
        },
        'institutionName': {
            'required': 'InstitutionName is required.'
        },
        'address': {
            'required': 'Address is required.'
        },
        'city': {
            'required': 'City is required.'
        },
        'state': {
            'required': 'State is required.'
        },
        'country': {
            'required': 'Country is required.'
        },
        'zip': {
            'required': 'Zip is required.',
            'pattern': 'Only 5 digited numbers (US zip) are allowed.'
        },
        'phone': {
            'required': 'Phone is required.',
            'pattern': 'Not a valid US pattern.'
        },
        'email': {
            'required': 'Email is required.',
            'pattern': 'Email pattern is not valid.'
        },
        'subscriptionStartDate': {
            'required': 'SubscriptionStartDate is required.'
        },
        'subscriptionEndDate': {
            'required': 'SubscriptionEndDate is required.'
        },
        'subscriptionPrice': {
            'required': 'SubscriptionPrice is required.',
            'pattern': 'Currency not valid.'
        },
        'exportImages': {
            'required': 'ExportImages is required.',
            'pattern': 'Only numbers are allowed.'
        },
        'userName1': {
            'required': 'UserName is required.'
        },
        'password': {
            'required': 'Password is required.'
        },
        'securityQuestion': {
            'required': 'SecurityQuestion is required.'
        },
        'answer': {
            'required': 'Answer is required.'
        }
    };

}