{"version":3,"file":"oepa-asbestos-certification-shared.module-CvAEYLix.mjs","sources":["../../../projects/oepa-asbestos/src/lib/shared/certification/common-service/certification-mapping.service.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/new-certification-contractor-modal/new-certification-contractor-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/new-certification-contractor-modal/new-certification-contractor-modal.component.html","../../../projects/oepa-asbestos/src/lib/internal/certification/certification-search/certification-search-component.service.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/search-certification-modal/search-certification-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/search-certification-modal/search-certification-modal.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/common-service/certification-dummy-data.service.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/server/certification-application-doc-names.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-official-use/certification-official-use.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-official-use/certification-official-use.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/applicant-info-modal/applicant-info-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/applicant-info-modal/applicant-info-modal.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/applicant-information/applicant-information.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/applicant-information/applicant-information.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/out-of-state-certification-modal/out-of-state-certification-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/out-of-state-certification-modal/out-of-state-certification-modal.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/out-of-state-certification-table/out-of-state-certification-table.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/out-of-state-certification-table/out-of-state-certification-table.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-button-bar/certification-button-bar.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-button-bar/certification-button-bar.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-modal/training-course-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-modal/training-course-modal.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-table/training-course-table.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-table/training-course-table.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-submitter/certification-submitter.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-submitter/certification-submitter.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-info.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-info.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-search/employer-search.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-search/employer-search.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-info-search/employer-info-search.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/employer-info/employer-info-search/employer-info-search.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-application.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/certification-application.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/replacement-reason/replacement-reason.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/replacement-reason/replacement-reason.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-replace-application/certification-replace-application.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-replace-application/certification-replace-application.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/new-certification-modal/new-certification-modal.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/new-certification-modal/new-certification-modal.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-search/training-course-search.service.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-search/training-course-search.component.ts","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-application/training-course-search/training-course-search.component.html","../../../projects/oepa-asbestos/src/lib/shared/certification/certification-shared.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { OepaFormAddress, OepaFormContact } from 'oepa-ui-lib';\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\nimport { OutOfStateCertification } from '../server/out-of-state-certification';\n\nimport { CertificationApplication } from '../certification-application/certification-application';\nimport { EmployerInfo } from '../certification-application/employer-info/employer-info'\nimport { ApplicantInformation } from '../certification-application/applicant-information/applicant-information'\nimport { Address,PhoneNumber } from \"oepa-ebiz-lib\";\nimport { AsbestosCertifiedPerson } from '../../server/asbestos-certified-person';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CertificationMappingService {\n  constructor(private fb: FormBuilder) { }\n\n  public buildAsbestosMailingAddressForm(address: OepaFormAddress | undefined): FormGroup {\n    if (!address) {\n      address = {};\n    }\n    const form = this.fb.group({\n      id: [(address.id || '')],\n      line1: [(address.line1 || '')],\n      line2: [(address.line2 || '')],\n      city: [(address.city || '')],\n      state: [(address.state || 'OH')],\n      postalCode: [(address.postalCode || '')]\n    });\n    return form;\n  }\n\n  public buildAsbestosStreetAddressForm(address: OepaFormAddress | undefined): FormGroup {\n    if (!address) {\n      address = {};\n    }\n    const form = this.fb.group({\n      id: [(address.id || '')],\n      line1: [(address.line1 || ''), [Validators.required, Validators.maxLength(40)]],\n      line2: [(address.line2 || '')],\n      city: [(address.city || ''), [Validators.required, Validators.maxLength(30)]],\n      state: [(address.state || 'OH'), Validators.required],\n      postalCode: [(address.postalCode || ''), [Validators.required, Validators.maxLength(5)]]\n    });\n    return form;\n  }\n\n  public buildAsbestosContactForm(contactInfo: OepaFormContact | undefined): FormGroup {\n    if (!contactInfo) {\n      contactInfo = {};\n    }\n    const form = this.fb.group({\n      id:[(contactInfo.id || '')],\n      firstName: [(contactInfo.firstName || '')],\n      middleName: [(contactInfo.middleName || '')],\n      lastName: [(contactInfo.lastName || '')],\n      phoneNumber: [(contactInfo.phoneNumber || '')],\n      emailAddress: [(contactInfo.emailAddress || '')]\n    });\n    return form;\n  }\n    \n public buildApplicantInformationForm(applicantInfo: ApplicantInformation | undefined): FormGroup {\n  if (!applicantInfo ) {\n    applicantInfo = { contactInfo:{},streetAddress:{}};\n  } else if (!applicantInfo.contactInfo || !applicantInfo.streetAddress){\n    if (!applicantInfo.contactInfo) {\n        applicantInfo.contactInfo={};\n    }\n    if (!applicantInfo.streetAddress) {\n      applicantInfo.streetAddress={};\n    }\n  }\n  const form = this.fb.group({\n    contactInfo:this.buildAsbestosContactForm(applicantInfo.contactInfo),\n    certificationType:[(applicantInfo.certificationType||'')],\n    certificationNumber:[(applicantInfo.certificationNumber||'')],\n    last4ssn:[(applicantInfo.last4ssn||'')],\n    dateOfBirth:[(applicantInfo.dateOfBirth || null)],\n    streetAddress: this.buildAsbestosStreetAddressForm(applicantInfo.streetAddress),\n  });\n  return form;\n}\n\npublic buildEmployerInformationForm(employerInfo: EmployerInfo | undefined): FormGroup {\n  if (!employerInfo ) {\n    employerInfo = {employerAddress:{}};\n  } else if(!employerInfo.employerAddress){\n    employerInfo.employerAddress = {};\n  }\n  \n  const form = this.fb.group({\n    id: [(employerInfo.id || '')],\n    employerName:[(employerInfo.employerName ||'')],\n    employerAddress:this.buildAsbestosStreetAddressForm(employerInfo.employerAddress),\n    employerPhone:[(employerInfo.employerPhone || '')],\n    employerEmail: [(employerInfo.employerEmail ||'')],\n    search: this.fb.group({\n      id:0,\n      employerName: '',\n      employerAddress: {},\n      employerPhone: '',\n      employerEmail: ''\n    })\n    \n  });\n  return form;\n}\n\npublic buildCertifiedPersonForm(certifiedPerson: AsbestosCertifiedPerson | undefined): FormGroup {\n  if (!certifiedPerson) {\n    certifiedPerson = {};\n  } \n  const form = this.fb.group({\n    last4ssn: certifiedPerson.last4ssn,\n    dateOfBirth: certifiedPerson.dateOfBirth,\n  });\n  return form;\n}\n\n  public buildOutOfStateCertificationForm(outOfStateCertification: OutOfStateCertification | undefined, isExternalUser:boolean): FormGroup {\n    if (!outOfStateCertification) { outOfStateCertification = {}; }\n    if(isExternalUser) {\n      const form = this.fb.group({\n        id: [(outOfStateCertification.id || '')],\n        applicationID: [outOfStateCertification.applicationID],\n        certificationNumber: [(outOfStateCertification.certificationNumber || ''), [Validators.required]],\n        state: [(outOfStateCertification.state || 'OH'), [Validators.required]],\n      });\n      return form;\n    } else {\n      const form = this.fb.group({\n        id: [(outOfStateCertification.id || '')],\n        applicationID: [outOfStateCertification.applicationID],\n        certificationNumber: [(outOfStateCertification.certificationNumber || ''), [Validators.required]],\n        state: [(outOfStateCertification.state || 'OH')],\n      });\n      return form;\n    }\n    \n  }\n  \n  /*public buildTrainingCourseInfoForm(trainingCourse: TrainingCourse): any {\n    if (!trainingCourse) { trainingCourse = {}; }\n    const form = {\n      id: [(trainingCourse.id || '')],\n      \n      applicationID: [(trainingCourse.applicationID || ''), [Validators.required, Validators.maxLength(100)]],\n      trainingCertificationNumber: [(trainingCourse.trainingCertificationNumber || '')],\n      search: this.fb.group({\n        applicationID: '',\n        trainingCertificationNumber: '',\n      })\n    };\n\n    return form;\n  }\n  public buildTrainingCourseSearchForm(trainingCourse: TrainingCourse): any {\n    if (!trainingCourse) { trainingCourse = {}; }\n    const form = {\n      id: [(trainingCourse.id || '')],\n      \n      applicationID: [(trainingCourse.applicationID || ''), [Validators.required, Validators.maxLength(100)]],\n      trainingCertificationNumber: [(trainingCourse.trainingCertificationNumber || '')],\n      search: this.fb.group({\n        applicationID: '',\n        trainingCertificationNumber: '',\n      })\n    };\n\n    return form;\n  }*/\n  \n  \n  public mapFormCertificationApplicationToCertificationApplicationObj(formCertificationApplication: CertificationApplication): AsbestosCertificationApplication {\n   const certificationApplicationObj: AsbestosCertificationApplication = \n   {revenue: {},\n    applicantMailingAddress:{}, \n    employerMailingAddress:{},\n    employerPhone:{},\n    applicantPhone:{},\n    certification: {},\n    documents:[] };\n\n    //console.log('formCertificationApplication: ' + JSON.stringify(formCertificationApplication));\n    certificationApplicationObj.id      = formCertificationApplication.id;\n    certificationApplicationObj.source  = formCertificationApplication.source;\n    certificationApplicationObj.revenue = formCertificationApplication.revenue;\n\n    certificationApplicationObj.applicationType   = formCertificationApplication.applicationType;\n    certificationApplicationObj.applicationStatus = formCertificationApplication.applicationStatus;\n\n    certificationApplicationObj.certification                    = formCertificationApplication.certification;\n    certificationApplicationObj.certification!.certificationType  = this.mapFormCertificationTypeToCertificationTypeObj(formCertificationApplication.applicantInfo?.certificationType);\n    \n    certificationApplicationObj.applicantFirstName         = formCertificationApplication.applicantInfo?.contactInfo?.firstName;\n    certificationApplicationObj.applicantLastName          = formCertificationApplication.applicantInfo?.contactInfo?.lastName;\n    certificationApplicationObj.applicantMiddleName        = formCertificationApplication.applicantInfo?.contactInfo?.middleName;\n\n    certificationApplicationObj.applicantEmail             = formCertificationApplication.applicantInfo?.contactInfo?.emailAddress;\n    certificationApplicationObj.applicantPhone             = this.mapFormPhoneNumberToPhoneNumberObj(formCertificationApplication.applicantInfo?.contactInfo?.phoneNumber);\n\n    certificationApplicationObj.applicantMailingAddress     = (formCertificationApplication.applicantInfo) ? this.mapFormAddressToAddressObj(formCertificationApplication.applicantInfo.streetAddress):this.mapFormAddressToAddressObj(undefined);\n\n    certificationApplicationObj.employerEntityID            = formCertificationApplication.employerInfo?.id;\n    \n    certificationApplicationObj.employerName                = formCertificationApplication.employerInfo?.employerName;\n    certificationApplicationObj.employerPhone!.phoneNumber   = formCertificationApplication.employerInfo?.employerPhone;\n    certificationApplicationObj.employerEmail               = formCertificationApplication.employerInfo?.employerEmail;\n    certificationApplicationObj.employerMailingAddress      = this.mapFormAddressToAddressObj(formCertificationApplication.employerInfo?.employerAddress);\n    certificationApplicationObj.mailToApplicant             = formCertificationApplication.mailToApplicant;\n    certificationApplicationObj.mailToEmployer              = formCertificationApplication.mailToEmployer;\n    \n    certificationApplicationObj.mailToOther                 = formCertificationApplication.mailToOther;\n    certificationApplicationObj.otherMailingAddress         = this.mapFormAddressToAddressObj(formCertificationApplication.otherMailingAddress);\n\n    certificationApplicationObj.convicted                   = this.mapYesNoStringToBoolean(formCertificationApplication.convicted);\n    certificationApplicationObj.convictedDocument           = formCertificationApplication.convictedDocument;\n\n    certificationApplicationObj.usaf                        =  this.mapYesNoStringToBoolean(formCertificationApplication.usaf);\n    certificationApplicationObj.usafType                    = formCertificationApplication.usafType;\n    certificationApplicationObj.usafDocument                = formCertificationApplication.usafDocument;\n    \n    certificationApplicationObj.documents                   = (formCertificationApplication.documents && formCertificationApplication.documents.length > 0) ? formCertificationApplication.documents:[];\n    certificationApplicationObj.outOfStateCertificationList = formCertificationApplication.outOfStateCertificationList;\n      \n    certificationApplicationObj.trainingCourseList          = formCertificationApplication.trainingCourseList;\n  \n    certificationApplicationObj.receivedDate                = this.mapFormDateToDateObj(formCertificationApplication.receivedDate);\n    certificationApplicationObj.submitDate                  = this.mapFormDateToDateObj(formCertificationApplication.submitDate);\n    certificationApplicationObj.denyDate                    = this.mapFormDateToDateObj(formCertificationApplication.denyDate);\n    certificationApplicationObj.approveDate                 = this.mapFormDateToDateObj(formCertificationApplication.approveDate);\n    certificationApplicationObj.issueDate                   = this.mapFormDateToDateObj(formCertificationApplication.issueDate);\n    certificationApplicationObj.expirationDate              = this.mapFormDateToDateObj(formCertificationApplication.expirationDate) ;\n    certificationApplicationObj.source                      = formCertificationApplication.source;\n    certificationApplicationObj.lynxPhotoID                 = formCertificationApplication.lynxPhotoID;\n    if(certificationApplicationObj.source === 'Mail')\n    {\n      certificationApplicationObj.mailSubmitName = formCertificationApplication.submitterName;\n    } else {\n      certificationApplicationObj.ebizSubmitName = formCertificationApplication.submitterName;\n    }\n    certificationApplicationObj.replacementReason = formCertificationApplication.replacementReason;\n    certificationApplicationObj.photoDocument     = formCertificationApplication.photoDocument;\n    certificationApplicationObj.attested          =  formCertificationApplication.attested;\n    //console.log('map to certificationApplicationObj: ' + JSON.stringify(certificationApplicationObj));\n    return certificationApplicationObj;\n  }\n        \n  public mapCertificationApplicationObjToFormCertificationApplication(certificationApplicationObj: AsbestosCertificationApplication | undefined): CertificationApplication {\n    //console.log('CertificationApplicationObj: ' + JSON.stringify(certificationApplicationObj));\n    if (!certificationApplicationObj) {\n      certificationApplicationObj = {revenue: {}, certification: {}}\n    } else {\n      if (!certificationApplicationObj.revenue) {\n        certificationApplicationObj.revenue = {}\n      }\n\n      if (!certificationApplicationObj.certification) {\n        certificationApplicationObj.certification = {}\n      } else if (!certificationApplicationObj.certification.certifiedPerson) {\n        certificationApplicationObj.certification.certifiedPerson = {address: {}}\n      }\n      if(!certificationApplicationObj.documents){\n        certificationApplicationObj.documents = [];\n      }\n    }\n\n    const formCertificationApplication: CertificationApplication = {certification:{},\n                                                                    applicantInfo:{contactInfo:{},streetAddress:{}},\n                                                                    employerInfo:{employerAddress:{}},\n                                                                    applicantMailingAddress:{},\n                                                                    employerMailingAddress:{},\n                                                                    trainingCourseMultiselect:[]};\n\n    if (certificationApplicationObj) {\n      formCertificationApplication.id                       = certificationApplicationObj.id;\n      \n      formCertificationApplication.id                       = certificationApplicationObj.id;\n      formCertificationApplication.source                   = certificationApplicationObj.source;\n  \n      formCertificationApplication.certification            = (certificationApplicationObj.certification ) ? certificationApplicationObj.certification:{};\n      formCertificationApplication.revenue                  = certificationApplicationObj.revenue;\n  \n      formCertificationApplication.applicationType          = certificationApplicationObj.applicationType;\n      formCertificationApplication.applicationStatus        = certificationApplicationObj.applicationStatus;\n  \n      formCertificationApplication.applicantFirstName       = certificationApplicationObj.applicantFirstName;\n      formCertificationApplication.applicantLastName        = certificationApplicationObj.applicantLastName;\n      formCertificationApplication.applicantMiddleName      = certificationApplicationObj.applicantMiddleName;\n\n      formCertificationApplication.applicantEmail           = certificationApplicationObj.applicantEmail;\n      formCertificationApplication.applicantPhone           = this.mapPhoneNumberObjToFormPhoneNumber(certificationApplicationObj.applicantPhone);\n  \n      formCertificationApplication.applicantMailingAddress  = certificationApplicationObj.applicantMailingAddress ? this.mapAddressObjToFormAddress(certificationApplicationObj.applicantMailingAddress):this.mapAddressObjToFormAddress(undefined);\n      formCertificationApplication.applicantInfo = {\n        certificationType:(certificationApplicationObj.certification && certificationApplicationObj.certification.certificationType) ? this.mapCertificationTypeObjToFormCertificationType(certificationApplicationObj.certification.certificationType):\"\",\n        certificationNumber:certificationApplicationObj.certification!.certificationNumber,\n        last4ssn:(certificationApplicationObj.certification && certificationApplicationObj.certification.certifiedPerson && certificationApplicationObj.certification.certifiedPerson.last4ssn) ? certificationApplicationObj.certification.certifiedPerson.last4ssn:'',\n        dateOfBirth:(certificationApplicationObj.certification && certificationApplicationObj.certification.certifiedPerson && certificationApplicationObj.certification.certifiedPerson.dateOfBirth ) ? this.mapDateObjToFormDate(certificationApplicationObj.certification.certifiedPerson.dateOfBirth):undefined,\n        contactInfo :{\n        id:(certificationApplicationObj.certification && certificationApplicationObj.certification.certifiedPerson) ? certificationApplicationObj.certification.certifiedPerson.id:'',\n        firstName:(certificationApplicationObj.applicantFirstName) ? certificationApplicationObj.applicantFirstName : '',\n        lastName:(certificationApplicationObj.applicantLastName) ? certificationApplicationObj.applicantLastName: '',\n        middleName:(certificationApplicationObj.applicantMiddleName) ? certificationApplicationObj.applicantMiddleName : '',\n        emailAddress:(certificationApplicationObj.applicantEmail) ? certificationApplicationObj.applicantEmail : '',\n        phoneNumber:this.mapPhoneNumberObjToFormPhoneNumber(certificationApplicationObj.applicantPhone),\n        },\n        streetAddress:(certificationApplicationObj.applicantMailingAddress) ? this.mapAddressObjToFormAddress(certificationApplicationObj.applicantMailingAddress):this.mapAddressObjToFormAddress(undefined),\n        \n      }\n  \n      formCertificationApplication.employerInfo = {id:certificationApplicationObj.employerEntityID ? certificationApplicationObj.employerEntityID :'',\n                                                   employerName:certificationApplicationObj.employerName ? certificationApplicationObj.employerName:'',\n                                                   employerEmail:certificationApplicationObj.employerEmail,\n                                                   employerPhone:certificationApplicationObj.employerPhone!.phoneNumber,\n                                                   employerAddress:certificationApplicationObj.employerMailingAddress ? this.mapAddressObjToFormAddress(certificationApplicationObj.employerMailingAddress) :\n                                                                   this.mapAddressObjToFormAddress(undefined) \n                                                  };\n\n      \n      formCertificationApplication.employerEntityID            = certificationApplicationObj.employerEntityID;\n  \n      formCertificationApplication.employerName                = certificationApplicationObj.employerName;\n      formCertificationApplication.employerPhone               = certificationApplicationObj.employerPhone ? certificationApplicationObj.employerPhone.phoneNumber:'';\n      formCertificationApplication.employerEmail               = certificationApplicationObj.employerEmail;\n      formCertificationApplication.employerMailingAddress      = certificationApplicationObj.employerMailingAddress ? this.mapAddressObjToFormAddress(certificationApplicationObj.employerMailingAddress):this.mapAddressObjToFormAddress(undefined);\n      \n      formCertificationApplication.mailToApplicant             = certificationApplicationObj.mailToApplicant;\n      formCertificationApplication.mailToEmployer              = certificationApplicationObj.mailToEmployer;\n      formCertificationApplication.mailToType                  = certificationApplicationObj.mailToApplicant ? 'Home':certificationApplicationObj.mailToEmployer ? 'Employer':undefined;\n  \n      formCertificationApplication.mailToOther                 = certificationApplicationObj.mailToOther;\n      formCertificationApplication.otherMailingAddress         = certificationApplicationObj.otherMailingAddress ? this.mapAddressObjToFormAddress(certificationApplicationObj.otherMailingAddress):this.mapAddressObjToFormAddress(undefined);\n      \n      formCertificationApplication.convicted                   = this.mapBooleanToYesNoString(certificationApplicationObj.convicted);\n      formCertificationApplication.convictedDocument           = certificationApplicationObj.convictedDocument;\n  \n      formCertificationApplication.usaf                        = this.mapBooleanToYesNoString(certificationApplicationObj.usaf);\n      formCertificationApplication.usafType                    = certificationApplicationObj.usafType;\n      formCertificationApplication.usafDocument                = certificationApplicationObj.usafDocument;\n      \n      formCertificationApplication.documents                   = (certificationApplicationObj.documents && certificationApplicationObj.documents.length)? certificationApplicationObj.documents:[];\n      formCertificationApplication.outOfStateCertificationList = certificationApplicationObj.outOfStateCertificationList;\n      formCertificationApplication.trainingCourseMultiselect   = [],\n      formCertificationApplication.trainingCourseList          = certificationApplicationObj.trainingCourseList;\n    \n      formCertificationApplication.receivedDate                = this.mapDateObjToFormDate(certificationApplicationObj.receivedDate);\n      formCertificationApplication.submitDate                  = this.mapDateObjToFormDate(certificationApplicationObj.submitDate);\n      formCertificationApplication.denyDate                    = this.mapDateObjToFormDate(certificationApplicationObj.denyDate);\n      formCertificationApplication.approveDate                 = this.mapDateObjToFormDate(certificationApplicationObj.approveDate);\n      formCertificationApplication.issueDate                   = this.mapDateObjToFormDate(certificationApplicationObj.issueDate);\n      formCertificationApplication.expirationDate              = this.mapDateObjToFormDate(certificationApplicationObj.expirationDate);\n      formCertificationApplication.source                      = certificationApplicationObj.source;\n      formCertificationApplication.ebizSubmitAccount           = certificationApplicationObj.ebizSubmitAccount;\n      formCertificationApplication.submitterName               =  certificationApplicationObj.source === 'Mail' ? certificationApplicationObj.mailSubmitName : certificationApplicationObj.ebizSubmitName\n      formCertificationApplication.lynxPhotoID                 = certificationApplicationObj.lynxPhotoID;\n      formCertificationApplication.replacementReason           = certificationApplicationObj.replacementReason;\n      \n      formCertificationApplication.expReminderSentDate           = certificationApplicationObj.expReminderSentDate;\n      formCertificationApplication.expReminderDocument           = certificationApplicationObj.expReminderDocument;\n      \n      formCertificationApplication.photoDocument               = certificationApplicationObj.photoDocument;\n      formCertificationApplication.attested                    = certificationApplicationObj.attested;\n    }\n    //console.log('map to formCertificationApplication: ' + JSON.stringify(formCertificationApplication));\n    return formCertificationApplication;\n  }\n\n  public mapBooleanToYesNoString(boolean: boolean | undefined): string | undefined {\n    \n      if (boolean === true) {\n        return 'yes';\n      } else if (boolean === false) {\n        return 'no';\n      } else {\n        return undefined;\n      }\n    \n  }\n\n  public mapYesNoStringToBoolean(yesNoString: string | undefined): boolean | undefined {\n    if (yesNoString === 'yes') {\n      return true;\n    } else if (yesNoString === 'no') {\n      return false;\n    } else {\n      return undefined;\n    }\n  }\n\n  \n\n  public mapPhoneNumberObjToFormPhoneNumber(objPhoneNumber: PhoneNumber | undefined): string {\n    let phoneNumber: string = '';\n    if (objPhoneNumber && objPhoneNumber.phoneNumber && objPhoneNumber.phoneNumber.length === 10) {\n      phoneNumber = objPhoneNumber.phoneNumber.replace(/^(\\d{0,3})(\\d{0,3})(\\d{0,4})/, '($1) $2-$3');\n    }\n    return phoneNumber;\n  }\n\n  public mapFormPhoneNumberToPhoneNumberObj(phoneNumber: string | undefined): PhoneNumber {\n    const objPhoneNumber: PhoneNumber = {};\n    if (phoneNumber && phoneNumber.length > 0) {\n      objPhoneNumber.phoneNumber = phoneNumber.replace(/\\D/g, '');\n      if (objPhoneNumber.phoneNumber.length > 10) {\n        objPhoneNumber.phoneNumber = objPhoneNumber.phoneNumber.substring(0, 10);\n      }\n    }\n    return objPhoneNumber;\n  }\n\n  public mapFederalTaxIDObjToFormFederalTaxID(objFederalTaxID: string | undefined): string {\n    let federalTaxID: string = '';\n    if (objFederalTaxID && objFederalTaxID.length === 9) {\n      federalTaxID = objFederalTaxID.replace(/^(\\d{0,2})(\\d{0,7})/, '$1-$2');\n    }\n    return federalTaxID;\n  }\n\n  public mapFormFederalTaxIDToFederalTaxIDObj(federalTaxID: string | undefined): string {\n    let objFederalTaxID: string = '';\n    if (federalTaxID && federalTaxID.length > 0) {\n      objFederalTaxID = federalTaxID.replace(/\\D/g, '');\n      if (objFederalTaxID.length > 10) {\n        objFederalTaxID = objFederalTaxID.substring(0, 9);\n      }\n    }\n    return objFederalTaxID;\n  }\n\n  public mapDateObjToFormDate(objDate: any | undefined) {\n    let date: Date | undefined = undefined;\n    if (objDate && objDate !== 0) {\n      date = new Date(objDate);\n    }\n    return date;\n  }\n\n  public mapFormDateToDateObj(date: Date | undefined) {\n    if (date) {\n      date.setHours(0, 0, 0, 0);\n    }\n    return date;\n  }\n  public buildEmployerInfoSearchForm(employer:EmployerInfo | undefined): any {\n    if (!employer) { employer = {}; }\n    const form = {\n      id: [(employer.id || '')],\n     \n      employerName:(employer && employer.employerName) ? employer.employerName:'Employer one',\n    employerAddress:(employer && employer.employerAddress) ? this.buildAsbestosStreetAddressForm(employer.employerAddress) :this.buildAsbestosStreetAddressForm(undefined),\n    employerPhone:(employer && employer.employerPhone) ? employer.employerPhone: '6142223333',\n    employerEmail: (employer && employer.employerEmail) ? employer.employerEmail:'tester@epa.ohio.gov',\n    search: this.fb.group({\n      id:0,\n      employerName: '',\n      employerAddress: '',\n      employerPhone: '',\n      employerEmail: ''\n    })\n    \n    };\n    return form;\n  }\n  public mapStateObjToFormState(address: Address | undefined): string {\n    let state: string = 'OH'; // default to Ohio\n    if (address && address.state && address.state.length === 2) {\n      state = address.state;\n    }\n    return state;\n  }\n  \n  public mapAddressObjToFormAddress(address: Address | undefined): OepaFormAddress{\n    const addressForm: OepaFormAddress = {};\n    addressForm.id    = address ? address.id: '';\n    addressForm.line1 = address ? address.addressLine1: '';\n    addressForm.line2 = address ? address.addressLine2: '';\n    addressForm.city  = address ? address.city: '';\n    addressForm.state = this.mapStateObjToFormState(address);\n    addressForm.postalCode = address ? address.zip: '';\n    \n    return addressForm;\n  }\n  public mapFormAddressToAddressObj(address: OepaFormAddress | undefined): Address{\n    const addressObj: Address = {};\n    if (address) {\n      addressObj.id = address.id;\n      addressObj.addressLine1 = address.line1;\n      addressObj.addressLine2 = address.line2;\n      addressObj.city = address.city;\n      addressObj.state = address.state;\n      addressObj.zip = address.postalCode;\n    }\n\n    return addressObj;\n  }\n  public mapCertificationTypeObjToFormCertificationType(type: string | undefined): string{\n    let certificationTypeForm: string = '';\n    switch (type) {\n      case \"AbateSpec\":\n      certificationTypeForm = \"Abatement Specialist (Supervisor)\";\n        break;\n      case \"EvalSpec\":\n      certificationTypeForm = \"Evaluation Specialist (Building Inspector/Management Planner)\";\n        break;\n      case \"AbateProjDesign\":\n      certificationTypeForm = \"Abatement Project Designer\";\n        break;\n      case \"AirMonitorTech\":\n      certificationTypeForm = \"Air Monitoring Technician\";\n        break;\n      case \"AbateWorker\":\n      certificationTypeForm = \"Abatement Worker\";\n        break;\n      default:\n        break;\n      }\n    return certificationTypeForm;\n  }\n  public mapFormCertificationTypeToCertificationTypeObj(type: string | undefined): string {\n     let certificationTypeObj: string = '';\n     switch (type) {\n      case \"Abatement Specialist (Supervisor)\":\n       certificationTypeObj = \"AbateSpec\";\n         break;\n      case \"Evaluation Specialist (Building Inspector/Management Planner)\":\n       certificationTypeObj = \"EvalSpec\";\n         break;\n       case \"Abatement Project Designer\":\n       certificationTypeObj = \"AbateProjDesign\";\n         break;\n       case \"Air Monitoring Technician\":\n       certificationTypeObj = \"AirMonitorTech\";\n         break;\n       case \"Abatement Worker\":\n       certificationTypeObj = \"AbateWorker\";\n         break;\n       default:\n         break;\n       }\n     return certificationTypeObj;\n}\npublic mapFormApplicantInfoToApplicantInfoObj(applicantInfo:ApplicantInformation):AsbestosCertifiedPerson\n{\n  let certifiedPerson:AsbestosCertifiedPerson = {address:{}};\n  certifiedPerson.id = applicantInfo.contactInfo?.id;\n  certifiedPerson.firstName = applicantInfo.contactInfo?.firstName;\n  certifiedPerson.lastName = applicantInfo.contactInfo?.lastName;\n  certifiedPerson.middleName = applicantInfo.contactInfo?.middleName;\n  certifiedPerson.address!.id = applicantInfo.streetAddress?.id;\n  certifiedPerson.address!.addressLine1 = applicantInfo.streetAddress?.line1;\n  certifiedPerson.address!.addressLine2 = applicantInfo.streetAddress?.line2;\n  certifiedPerson.address!.zip= applicantInfo.streetAddress?.postalCode;\n  certifiedPerson.address!.city = applicantInfo.streetAddress?.city;\n  certifiedPerson.address!.state = applicantInfo.streetAddress?.state;\n  \n  \n return certifiedPerson;\n}\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Router  } from '@angular/router';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { OepaMessageType } from 'oepa-ui-lib';\nimport { OEPAReference } from 'oepa-common-lib';\nimport { CertificationService } from '../common-service/certification.service';\nimport { ApplicantInformation } from '../certification-application/applicant-information/applicant-information';\nimport { CertificationSearchFilter } from '../server/certification-search-filter';\nimport { AsbestosCertifiedPerson } from '../../server/asbestos-certified-person';\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\nimport { AsbestosCurrentApplicantAddress } from '../server/asbestos-current-applicant-address';\nimport { CertificationSummary } from '../server/certification-summary';\nimport { CertificationMappingService } from '../common-service/certification-mapping.service';\n\n@Component({\n  selector: 'oepa-new-certification-contractor-modal',\n  templateUrl: './new-certification-contractor-modal.component.html',\n  styleUrls: ['./new-certification-contractor-modal.component.css']\n})\nexport class NewCertificationContractorModalComponent implements OnInit {\n\n  public showValidation: boolean = true;\n  @Input() person: AsbestosCertifiedPerson | undefined;\n  @Input() sourceType: string = '';\n  @Output() info: EventEmitter<any> = new EventEmitter(true);\n  \n  public certificationTypes: Array<OEPAReference> | undefined;\n\n  public certificationApplication: AsbestosCertificationApplication = {};\n  public imageRoot: string = '/AngularWebApp/assets/images';\n  public inProgressMsg: string = '';\n  public contractorFormGroup!: FormGroup;\n  public newContractor: ApplicantInformation | undefined;\n  public errorMessage: string = '';\n  public searchFilter: CertificationSearchFilter = {};\n  public currentApplicantAddress: AsbestosCurrentApplicantAddress = {};\n  public existingCertificationSummary: Array<CertificationSummary> = [];\n  public certPersonSummary: CertificationSummary = {};\n  public thisDOB!: Date;\n  public typeValue: string = 'default';\n\n  constructor(private certificationService: CertificationService,\n    private router: Router,\n    public bsModalRef: BsModalRef,\n    private certificationMappingService: CertificationMappingService) {\n  }\n\n  ngOnInit() {\n\n    this.searchFilter = {\n      applicantLast4ssn: this.person ? this.person.last4ssn : '',\n      applicantDateOfBirth: this.person ? this.person.dateOfBirth : undefined,\n      applicantFirstname: this.person ? this.person.firstName : '',\n      applicantLastname: this.person ? this.person.lastName : '',\n    }\n\n    this.getCertificationTypes();\n    this.createForm();\n\n    // this.getCertificationTypes();\n    this.contractorFormGroup.controls['certificationType'].valueChanges.subscribe(\n    { next : type => {\n      this.typeValue = type\n    }});\n  }\n\n  private getCertificationTypes() {\n    if (!this.person) {\n      this.errorMessage = 'No person selected.';\n    }\n    this.inProgressMsg = 'Preparing form...';\n    if (this.person && this.person.id) {\n      this.certificationService.retrieveCertificationTypesForPerson(this.person.id).subscribe(\n      { next : (types) => {\n        this.certificationTypes = types;\n        this.getCurrentCertificationApplicantAddress(this.searchFilter);\n      }, error : err => {\n        console.log('Failed retrieving certification types: ' + err);\n        this.inProgressMsg = '';\n      }});\n    } else {\n      this.certificationService.retrieveCertificationTypes().subscribe(\n      { next : types => {\n        this.certificationTypes = types;\n        this.getCurrentCertificationApplicantAddress(this.searchFilter);\n      }, error : err => {\n        console.log('Failed retrieving certification types: ' + err);\n        this.inProgressMsg = '';\n      }});\n    }\n  }\n\n  private getCurrentCertificationApplicantAddress(searchfilter: CertificationSearchFilter) {\n    this.certificationService.retrieveCurrentCertificationApplicantAddress(searchfilter).subscribe(\n    { next : (result) => {\n      this.inProgressMsg = '';\n      if (result && result.success) {\n\n        if (result.currentApplicantAddress) {\n            this.currentApplicantAddress = result.currentApplicantAddress;\n            this.contractorFormGroup.controls['streetAddress'].setValue(this.certificationMappingService.mapAddressObjToFormAddress(this.currentApplicantAddress.applicantMailingAddress));\n        }\n      } else {\n        this.errorMessage = 'Retrieval of current applicant address failed' + result.log ? (': ' + result.log?.join(', ') + '.') : '.';\n      }\n      this.inProgressMsg = '';\n    }, error : err => {\n      this.inProgressMsg = '';\n      this.errorMessage = 'Retrieval of current applicant address failed: ' + err;\n    }});\n  }\n\n  public reset() {\n    this.contractorFormGroup.reset();\n    this.errorMessage = '';\n  }\n\n  public cancel() {\n    this.info.emit(true);\n  }\n\n  private createForm() {\n    this.contractorFormGroup = this.certificationMappingService.buildApplicantInformationForm(this.newContractor);\n  }\n\n  public createNewCertification() {\n    this.inProgressMsg = \"Creating New Certification Application...\";\n    this.errorMessage = '';\n    //populated data into the form\n    this.certificationApplication = { \n      certification: { \n        certificationType: this.contractorFormGroup.controls['certificationType'].value,\n        certifiedPerson: {\n          id: this.person?.id ? this.person.id: undefined,\n          firstName: this.person?.firstName,\n          lastName: this.person?.lastName,\n          last4ssn: this.person?.last4ssn,\n          dateOfBirth: this.person?.dateOfBirth,\n          address: {\n            id: this.currentApplicantAddress.applicantMailingAddress && this.currentApplicantAddress.applicantMailingAddress.id ? this.currentApplicantAddress.applicantMailingAddress.id : '',\n            addressLine1: this.contractorFormGroup.controls['streetAddress'].get('line1')?.value,\n            addressLine2: this.contractorFormGroup.controls['streetAddress'].get('line2')?.value,\n            city: this.contractorFormGroup.controls['streetAddress'].get('city')?.value,\n            state: this.contractorFormGroup.controls['streetAddress'].get('state')?.value,\n            zip: this.contractorFormGroup.controls['streetAddress'].get('postalCode')?.value,\n          } \n        } \n      },\n       source: this.sourceType,\n     };\n\n    this.certificationService.createCertificationApplication(this.certificationApplication).subscribe(\n    { next : result => {\n      if (result && result.success) {\n        this.certificationService.showMessage('Certification application has been created', OepaMessageType.INFO, 'created application with id: ' + result.obj?.id);\n\n        if (this.certificationApplication.source == 'eBusinessCenter') {\n          if (result.obj?.certification?.certificationNumber) {\n            this.certificationService.eBizAssociatedAccountWithCertifications(result.obj.certification.certificationNumber).subscribe(\n            { next : () => {\n              this.router.navigate(['asbestos-external/individual-certification/certification-application', result.obj?.id, 'edit']);\n              this.info.emit(true);\n            }, error : err => {\n              this.errorMessage ='An error occurred creating the privilege: ' + err;\n  \n            }});\n          }\n        } else {\n          this.router.navigate(['asbestos-internal/certification/certification-application', result.obj?.id, 'edit']);\n          this.info.emit(true);\n        }\n      } else {\n        this.errorMessage = 'Certification application could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n      }\n\n    }, error : err => {\n      this.inProgressMsg = '';\n      this.errorMessage ='An error occurred while creating the certification application: ' + err;\n    }});\n  }\n\n\n}\n","<div class=\"modal-header\">\n  <h4 class=\"modal-title\"><b>New Certification</b></h4>\n  <button type=\"button\" class=\"btn-close\" (click)=\"bsModalRef.hide()\"></button>\n</div>\n\n<div class=\"modal-body\">\n    <form *ngIf=\"!inProgressMsg\" [formGroup]=\"contractorFormGroup\">\n      <div class=\"card\">\n\n        <div class=\"card-header\">\n          <div class=\"row\">\n            <div class=\"col-sm-12\">\n              <div class=\"card-title\">\n                <div class=\"row\">\n\n                  <div class=\"col-sm-12\">\n                    <div class=\"row\">\n                      <label class=\"col-sm-4\">First Name:</label>\n                      <div class=\"col-sm-8\">\n                          {{ person?.firstName}}\n                        <!-- <input class=\"form-control\" placeholder=\"\" name=\"applicantFirstname\" formControlName=\"firstName\" readonly=\"true\"> -->\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"col-sm-12\">\n                    <div class=\"row\">\n                      <label class=\"col-sm-4\">Last Name:</label>\n                      <div class=\"col-sm-8\">\n                        {{person?.lastName}} \n                        <!-- <input class=\"form-control\" placeholder=\"\" name=\"applicantLastname\" formControlName=\"lastName\" readonly=\"true\"> -->\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"col-sm-12\">\n                    <div class=\"row\">\n                      <label class=\"col-sm-4\">Date of Birth:</label>\n                      <div class=\"col-sm-8\">\n                        {{person?.dateOfBirth | date: 'MM/dd/yyyy'}}\n                        <!-- <input class=\"form-control\" placeholder=\"\" name=\"applicantDateOfBirth\" formControlName=\"dateOfBirth\"  readonly=\"true\"> -->\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"col-sm-12\">\n                    <div class=\"row\">\n                      <label class=\"col-sm-4\">Last 4 SSN:</label>\n                      <div class=\"col-sm-8\">\n                        {{person?.last4ssn}}\n                        <!-- <input class=\"form-control\" placeholder=\"\" name=\"applicantLast4ssn\" formControlName=\"last4ssn\" readonly=\"true\"> -->\n                      </div>\n                    </div>\n                  </div>\n\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"card-body\">\n          <div class=\"row\">\n            <div class=\"col-md-12\">\n              <div class=\"form-group\">\n                <label>Certification Type</label>\n                <select class=\"form-control\"\n                  name=\"certificationType\" formControlName=\"certificationType\" id=\"CertificationTypeSelect\">\n                  <option value=\"default\"></option>\n                  <option *ngFor=\"let t of certificationTypes\" [ngValue]=\"t.code\">{{t.name}} </option> \n                \n                </select>\n                <!-- <pre>test: {{typeValue}}</pre>\n                <pre>{{contractorFormGroup.controls['certificationType'].dirty}} </pre> -->\n                <small class=\"alert text-danger\" *ngIf=\"typeValue == 'default' \" >\n                  Certification Type is required</small>    \n              </div>\n            </div>\n          </div>\n\n          <div class=\"row\">\n            <div class=\"col-md-12\">\n              <oepa-address [group]=\"contractorFormGroup.controls['streetAddress'] | formControl\" addressOneLabel=\"Street Address\"\n                zipCodeLabel=\"Zip\" [showValidation]=\"true\"></oepa-address>\n            </div>\n          </div>\n\n        </div>\n\n      </div>\n    </form>\n    <div *ngIf=\"inProgressMsg\">\n      <div class=\"alert alert-info text-center\">\n        <h3>{{inProgressMsg}}</h3>\n        <span class=\"spinner-border text-primary\" role=\"status\"></span>\n      </div>\n    </div>\n</div>\n<div class=\"modal-footer d-block\">\n  <div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n    {{errorMessage}}\n  </div>\n  <div *ngIf=\"!inProgressMsg\" class=\"text-center\">\n    <button class=\"btn btn-primary me-2\" type=\"button\" id=\"createNewContractorAndAppBtn\" \n      [disabled]=\"!contractorFormGroup.valid || typeValue == 'default'\"\n      name=\"createNewContractorAndAppBtn\" (click)=\"createNewCertification()\">Create Certification Application</button>\n\n      <button class=\"btn btn-primary me-2\" type=\"button\" id=\"cancelBtn\" name=\"cancelBtn\" (click)=\"cancel()\">Cancel</button>\n  </div>\n</div>","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { OepaAction } from 'oepa-ui-lib';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { OepaUserAccount, OepaUserAccountService } from 'oepa-common-lib';\nimport { CertificationSearchState } from './certification-search-state';\nimport { CertificationSearchFilter } from '../../../shared/certification/server/certification-search-filter';\nimport { CertificationSummaryResult } from '../../../shared/certification/server/certification-summary-result';\nimport { CertificationPrivilegeTypes } from '../../../shared/certification-privilege-types';\nimport { AsbestosCertifiedPersonFilter } from '../../../shared/server/certified-person-filter';\nimport { AsbestosCertifiedPerson } from '../../../shared/server/asbestos-certified-person';\nimport { CertificationApplicationSummary } from '../../../shared/certification/server/certification-application-summary';\nimport { CertificationSummary } from '../../../shared/certification/server/certification-summary';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CertificationSearchComponentService {\n  private certificationUrl: string = '/ebiz/api/v1/asbestos/certification'\n  private searchState: CertificationSearchState | undefined;\n\n\n  constructor(private http: HttpClient, private oepaUserAccountService: OepaUserAccountService) { }\n\n  public getSearchState(): CertificationSearchState | undefined {\n    return this.searchState;\n  }\n\n  public setSearchState(searchState: CertificationSearchState): void {\n    this.searchState = searchState;\n  }\n\n\n  public retrieveCertificationApplicationInternalList(searchFilter: CertificationSearchFilter): Observable<CertificationSummaryResult> {\n    let headers = new HttpHeaders();\n    headers.append('Content-Type', 'application/json');\n    const url = this.certificationUrl + '/asbestos/certificationlists/search';\n    return this.http.post<CertificationSummaryResult>(url, searchFilter, { headers: headers, responseType: 'json' });\n  }\n\n  public retrieveCertificationsSummaryByCertNoLast4snBdate(searchFilter: CertificationSearchFilter): Observable<CertificationSummaryResult> {\n    let headers = new HttpHeaders();\n    headers.append('Content-Type', 'application/json');\n    const url = this.certificationUrl + '/retrieveCertificationsSummaryByCertNoLast4snBdate';\n    return this.http.post<CertificationSummaryResult>(url, searchFilter, { headers: headers, responseType: 'json' });\n  }\n\n  public searchPersons(searchFilter: AsbestosCertifiedPersonFilter): Observable<AsbestosCertifiedPerson[]> {\n    let headers = new HttpHeaders();\n    headers.append('Content-Type', 'application/json');\n    const url = this.certificationUrl + '/persons/search';\n    return this.http.post<AsbestosCertifiedPerson[]>(url, searchFilter, { headers: headers, responseType: 'json' });\n  }\n\n  public searchPersonsBirthDateAndSSN(searchFilter: AsbestosCertifiedPersonFilter): Observable<AsbestosCertifiedPerson[]> {\n    let headers = new HttpHeaders();\n    headers.append('Content-Type', 'application/json');\n    const url = this.certificationUrl + '/persons/search/bdateSSN';\n    return this.http.post<AsbestosCertifiedPerson[]>(url, searchFilter, { headers: headers, responseType: 'json' });\n  }\n\n  public retrieveCertificationsSummaryByLast4snBdateFirstAndLastName(searchFilter: CertificationSearchFilter): Observable<CertificationSummaryResult> {\n    let headers = new HttpHeaders();\n    headers.append('Content-Type', 'application/json');\n    const url = this.certificationUrl + '/retrieveCertificationsSummaryByLast4snBdateFirstAndLastName';\n    return this.http.post<CertificationSummaryResult>(url, searchFilter, { headers: headers, responseType: 'json' });\n  }\n  \n  /**\n     * Retrieve the list of valid certification actions based on the user's privileges and the certification's status\n     * @param userAccount\n     * @param certification \n     */\n  public getCertificationActions(userAccount: OepaUserAccount, certification: CertificationSummary): OepaAction[] {\n    const actions: OepaAction[] = [];\n    const statusActions = CERTIFICATION_STATUS_ACTIONS_MAP[certification.certificationStatus || 'NoStatus'];\n    const privileges = this.oepaUserAccountService.getPrivilegeList(userAccount);\n    if (statusActions && privileges) {\n      statusActions.forEach(action => {\n        privileges.forEach(privilege => {\n          if (USER_PRIVILEGE_CERTIFICATION_ACTIONS_MAP[privilege] && USER_PRIVILEGE_CERTIFICATION_ACTIONS_MAP[privilege].indexOf(action.title) > -1) {\n            if ((action.title === CertificationActionTitles.renew || action.title === CertificationActionTitles.replace) && certification.currentApplicationStatus !== 'Issued' && certification.currentApplicationStatus !== 'Denied') {\n                console.log('Not allowing renew/replace action for license with current application status = ' + certification.currentApplicationStatus);\n              } else {\n                    this.addUniqueAction(action, actions); \n              }\n            }\n        });\n      });\n    }\n    if (actions.length === 0) {\n      actions.push(notAvailable);\n    }\n    return actions;\n  }\n\n  private addUniqueAction(action: OepaAction, actions: OepaAction[]): OepaAction[] {\n    const duplicate = actions.find(dup => {\n      return dup.title === action.title;\n    });\n    if (!duplicate) {\n      actions.push(action);\n    }\n    return actions;\n  }\n\n  private includeAction(action: OepaAction, application: CertificationApplicationSummary, certificationStatus: string): boolean {\n    let rtn: boolean = true;\n    if (action.title === CertificationApplicationActionTitles.downloadRFI && application.rfiDocCount === 0) {     \n        rtn = false;      \n    }\n    if (action.title === CertificationApplicationActionTitles.review && application.applicationType === 'Replace') {\n      rtn = false;\n    }\n    if (action.title === CertificationApplicationActionTitles.issue && application.status === 'ReadyForReview' && application.applicationType !== 'Replace' ) {\n      rtn = false;\n    }\n    if ((certificationStatus === 'Suspended' || certificationStatus === 'Revoked') && \n    (action.title === CertificationApplicationActionTitles.edit || action.title === CertificationApplicationActionTitles.delete ||\n      action.title === CertificationApplicationActionTitles.review || action.title === CertificationApplicationActionTitles.issue)) {\n  rtn = false;\n}\n    return rtn;\n  }\n\n  /**\n   * Retrieve the list of valid certification actions based on the user's privileges and certification application's status.\n   * @param userAccount \n   * @param application \n   */\n  public getcertificationApplicationActions(userAccount: OepaUserAccount, application: CertificationApplicationSummary, certificationStatus: string): OepaAction[] {\n    const actions: OepaAction[] = [];\n    const statusActions = CERTIFICATION_APP_STATUS_ACTIONS_MAP[application.status || ''];\n    const privileges = this.oepaUserAccountService.getPrivilegeList(userAccount);\n    if (statusActions && privileges) {\n      statusActions.forEach(action => {\n        privileges.forEach(privilege => {\n          if (USER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[privilege] && USER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[privilege].indexOf(action.title) > -1) {\n            if (this.includeAction(action, application, certificationStatus)) {\n              this.addUniqueAction(action, actions);\n            }\n          }\n        });\n      });\n    }\n    if (actions.length === 0) {\n      actions.push(notAvailable);\n    }\n    return actions;\n  }\n}\n\n/** Helper method to create the Certification Application actions  */\nexport class CertificationApplicationActionTitles {\n  public static view = 'View';\n  public static edit = 'Edit';\n  public static delete = 'Delete';\n  public static downloadPDF = 'Download Application';\n  public static downloadDocuments = 'Download Application and Documents';\n  public static review = 'Review';\n  public static issue = 'Issue';\n  public static downloadRFI = 'Download RFI';\n  public static downloadCertification = 'Download Issuance Documents';\n}\n\n// Define an OepaAction object for each possible action\nconst viewApplication: OepaAction = { title: CertificationApplicationActionTitles.view, className: 'bi bi-eye' };\nconst editApplication: OepaAction = { title: CertificationApplicationActionTitles.edit, className: 'bi bi-pencil-fill' };\nconst deleteApplication: OepaAction = { title: CertificationApplicationActionTitles.delete, className: 'bi bi-x-lg' };\nconst downloadPDF: OepaAction = { title: CertificationApplicationActionTitles.downloadPDF, className: 'bi bi-download' };\nconst downloadDocuments: OepaAction = { title: CertificationApplicationActionTitles.downloadDocuments, className: 'bi bi-download' };\nconst reviewApplication: OepaAction = { title: CertificationApplicationActionTitles.review, className: 'bi bi-check' };\nconst issueApplication: OepaAction = { title: CertificationApplicationActionTitles.issue, className: 'bi bi-patch-check-fill' };\nconst downloadRFI: OepaAction = { title: CertificationApplicationActionTitles.downloadRFI, className: 'bi bi-download' };\nconst downloadCertification: OepaAction = { title: CertificationApplicationActionTitles.downloadCertification, className: 'bi bi-download'};\nconst notAvailable: OepaAction = { title: 'N/A', className: undefined };\n\n// map of Certification application status values to valid actions\nconst CERTIFICATION_APP_STATUS_ACTIONS_MAP: {[key:string]:OepaAction[]} = {\n  'Pending': [editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI, deleteApplication],\n  'Submitted': [editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'ReadyForReview': [issueApplication, reviewApplication, editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'Approved': [issueApplication, editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'Issued': [editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI, downloadCertification],\n  'Deficient': [editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'DenialPending': [reviewApplication, editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'Denied': [editApplication, viewApplication, downloadPDF, downloadDocuments, downloadRFI],\n  'Hold': [editApplication, viewApplication, downloadPDF]\n};\n\n// map of user privilege to valid certification application actions\nlet USER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP: {[key:string]:string[]} = {};\nUSER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[CertificationPrivilegeTypes.deleteAllowed] = [CertificationApplicationActionTitles.delete, CertificationApplicationActionTitles.downloadCertification];\nUSER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[CertificationPrivilegeTypes.editAnyAllowed] = [CertificationApplicationActionTitles.edit, CertificationApplicationActionTitles.downloadCertification];\nUSER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[CertificationPrivilegeTypes.reviewAllowed] = [CertificationApplicationActionTitles.view, CertificationApplicationActionTitles.review, CertificationApplicationActionTitles.issue, \n                                              CertificationApplicationActionTitles.downloadDocuments, CertificationApplicationActionTitles.downloadCertification, CertificationApplicationActionTitles.downloadPDF,\n                                              CertificationApplicationActionTitles.downloadRFI];\nUSER_PRIVILEGE_CERTIFICATION_APP_ACTIONS_MAP[CertificationPrivilegeTypes.viewAnyAllowed] = [];\n\n\n//Certification actions\nexport class CertificationActionTitles {\n  public static renew = 'Renew';\n  public static replace = 'Replace';\n  public static suspend = 'Suspend';\n  public static revoke = 'Revoke';\n  public static viewNotes = 'View Notes';\n  public static editNotes = 'Edit Notes';\n\n}\n\n// Define an OepaAction object for each possible action\nconst renewCertification: OepaAction = { title: CertificationActionTitles.renew, className: 'bi bi-arrow-repeat' };\nconst replaceCertification: OepaAction = { title: CertificationActionTitles.replace, className: 'bi bi-copy' };\nconst suspendCertification: OepaAction = { title: CertificationActionTitles.suspend, className: 'bi bi-pause-btn'};\nconst revokeCertification: OepaAction = { title: CertificationActionTitles.revoke, className: 'bi bi-ban'};\nconst viewNotes: OepaAction = { title: CertificationActionTitles.viewNotes, className: 'bi bi-chat-left'};\nconst editNotes: OepaAction = { title: CertificationActionTitles.editNotes, className: 'bi bi-pencil-fill'};\n\n\n// map of Certification status values to valid actions\nconst CERTIFICATION_STATUS_ACTIONS_MAP: {[key:string]:OepaAction[]} = {\n  'Active': [renewCertification, replaceCertification, suspendCertification, revokeCertification, viewNotes, editNotes], \n  'Expired': [renewCertification, viewNotes, editNotes],\n  'Extended': [viewNotes, editNotes],\n  'Suspended': [revokeCertification, viewNotes, editNotes],\n  'Revoked': [viewNotes, editNotes],\n  'ApplDenied': [viewNotes, editNotes],\n  'NoStatus': [viewNotes, editNotes],\n};\n\n// map of user privilege to valid Certification actions\nlet USER_PRIVILEGE_CERTIFICATION_ACTIONS_MAP: {[key:string]:string[]} = {};\nUSER_PRIVILEGE_CERTIFICATION_ACTIONS_MAP[CertificationPrivilegeTypes.viewAnyAllowed]  = [ CertificationActionTitles.viewNotes ];\nUSER_PRIVILEGE_CERTIFICATION_ACTIONS_MAP[CertificationPrivilegeTypes.createAllowed] \n= [CertificationActionTitles.renew, CertificationActionTitles.replace, CertificationActionTitles.suspend, CertificationActionTitles.revoke,\n  CertificationActionTitles.viewNotes, CertificationActionTitles.editNotes];\n\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EventEmitter, } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\nimport { OepaTableHeader, OepaTableRow, OepaTableConfig } from 'oepa-ui-lib';\nimport { OepaMappingService } from 'oepa-common-lib';\n\nimport { AllowedUserActions } from '../../allowed-user-actions/allowed-user-actions';\nimport { AsbestosCertifiedPerson } from '../../server/asbestos-certified-person';\nimport { AsbestosCertifiedPersonFilter } from '../../server/certified-person-filter';\nimport { CertificationSearchComponentService } from '../../../internal/certification/certification-search/certification-search-component.service';\nimport { CertificationService } from '../common-service/certification.service';\nimport { CertificationSummary } from '../server/certification-summary';\nimport { NewCertificationContractorModalComponent } from '../new-certification-contractor-modal/new-certification-contractor-modal.component';\n\n@Component({\n  selector: 'oepa-search-certification-modal',\n  templateUrl: './search-certification-modal.component.html',\n  styleUrls: ['./search-certification-modal.component.css']\n})\nexport class SearchCertificationModalComponent implements OnInit {\n  public imageRoot: string = '/AngularWebApp/assets/images';\n  public inProgressMsg: string = \"\";\n  public searchFormGroup!: FormGroup;\n  public openSearchCriteria: boolean = true;\n  public existingCertificationSummary: Array<CertificationSummary> = [];\n  public contractorTableData: Array<OepaTableRow> = [];\n  public tableHeader!: OepaTableHeader;\n  public allowedActions: AllowedUserActions = new AllowedUserActions();\n  public errorMessage: string = '';\n  public infoMessage: string = '';\n  public warnMessage: string = '';\n  public selectedPerson: AsbestosCertifiedPerson | undefined;\n  public searchPerson: AsbestosCertifiedPerson = {};\n  public existing: boolean = false;\n  public info: EventEmitter<any> = new EventEmitter(true);\n  public certificationNumberHelpText = 'This field is for the certification number found on your Ohio EPA certification card.  This is NOT the field for your training course certificate number.';\n  public selectedRows: Array<OepaTableRow> = [];  \n  public tableConfig: OepaTableConfig = {\n    rowsPerPage: 10,\n    classNames: ['table-striped', 'table-bordered', 'table-sm'],\n    hideFooter: true\n  };\n  public searchCompleted = false;\n  public okToCreateNewPerson = false;\n\n  @Input() sourceType: string = '';\n  @Input() newCertification = false;\n\n  constructor(private fb: FormBuilder,\n    private certificationService: CertificationService,\n    private certificationSearchComponentService: CertificationSearchComponentService,\n    private modalService: BsModalService,\n    public bsModalRef: BsModalRef,\n    private oepaMappingService: OepaMappingService) {\n  }\n\n  ngOnInit() {\n    this.getCertificationColumns();\n    this.createForm(undefined);\n  }\n\n  private getCertificationColumns() {\n    this.tableHeader = {\n      columns: [\n        { title: 'Certification #', id: 'certificationNumber', sort: 'none', filterable: true },\n        { title: 'Name', id: 'applicantName', sort: 'none', filterable: true },\n        { title: 'Last 4 SSN', id: 'personLast4ssn', sort: 'none', filterable: true },\n        { title: 'Date of Birth', id: 'personDateOfBirth', sort: 'none', filterable: true },\n      ]\n    }\n    if (this.sourceType === 'eBusinessCenter')  {\n      this.tableHeader.columns.unshift({ title: '', id: 'select', sort: 'none', singleSelectColumn: true, className: 'select-col' });\n    }\n    return this.tableHeader;\n  }\n\n  public createNewCertification() {\n    this.newCertification = true;\n    this.prepareForNewCertification();\n  }\n\n  private prepareForNewCertification() {\n    this.searchFormGroup.valueChanges.subscribe(\n    { next : searchForm => {\n      this.searchPerson.firstName = searchForm.applicantFirstname;\n      this.searchPerson.lastName = searchForm.applicantLastname;\n      this.searchPerson.last4ssn = searchForm.applicantLast4ssn;\n      this.searchPerson.dateOfBirth = searchForm.applicantDateOfBirth;\n       if ((this.searchPerson.firstName && this.searchPerson.firstName.length > 0) &&\n           (this.searchPerson.lastName && this.searchPerson.lastName.length > 0) &&\n           (this.searchPerson.last4ssn && this.searchPerson.last4ssn.length === 4) &&\n           (this.searchPerson.dateOfBirth !== null)) {\n        this.okToCreateNewPerson = true;\n       }\n    }});\n  }\n\n  public createNewIndividual(person : AsbestosCertifiedPerson) {\n    this.info.emit(true);\n    const initialState = {\n      sourceType: this.sourceType,\n      person: person\n    }\n\n    const newContractorCompl = this.modalService.show(NewCertificationContractorModalComponent, { initialState, class: 'modal-lg',ignoreBackdropClick: true });\n    (<NewCertificationContractorModalComponent>newContractorCompl.content).info.subscribe(\n    { next : () => {\n      newContractorCompl.hide();\n    }});\n  }\n\n  public reset() {\n    this.searchFormGroup.reset();\n    this.openSearchCriteria = true;\n    this.contractorTableData = [];\n    this.errorMessage = '';\n    this.warnMessage = '';\n    this.infoMessage = '';\n    this.inProgressMsg = '';\n    this.selectedPerson = undefined;\n    this.searchPerson = {};\n    this.searchCompleted = false;\n  }\n\n  private createForm(search: AsbestosCertifiedPersonFilter |undefined) {\n    this.searchFormGroup = this.fb.group({\n      certificationNumber: search ? search.certificationNumber : '',\n      applicantLast4ssn: search ? search.applicantLast4ssn : '',\n      applicantDateOfBirth: search ? search.applicantDateOfBirth : '',\n      applicantLastname: search ? search.applicantLastname : '',\n      applicantFirstname: search ? search.applicantFirstname : ''\n    });\n    if (this.newCertification) {\n      this.prepareForNewCertification();\n    }\n  }\n\n  private getSearchformValues(): AsbestosCertifiedPersonFilter {\n    const search: AsbestosCertifiedPersonFilter = {\n      certificationNumber: this.searchFormGroup.controls['certificationNumber'].value || undefined,\n      applicantLast4ssn: this.searchFormGroup.controls['applicantLast4ssn'].value || undefined,\n      applicantDateOfBirth: this.searchFormGroup.controls['applicantDateOfBirth'].value || null,\n      applicantLastname: this.searchFormGroup.controls['applicantLastname'].value || undefined\n    };\n    return search;\n  }\n\n  public submitSearch() {\n    const searchFilter = this.getSearchformValues();\n    if ((!searchFilter.applicantLastname && !searchFilter.certificationNumber) || !searchFilter.applicantLast4ssn || !searchFilter.applicantDateOfBirth) {\n      this.errorMessage = 'Please enter all required search fields';\n      return;\n    }\n    this.contractorTableData = [];\n    this.selectedPerson = undefined;\n    this.errorMessage = '';\n    this.warnMessage = '';\n    this.inProgressMsg = \"Searching Certification...\";\n\n    this.certificationSearchComponentService.searchPersons(searchFilter).subscribe(\n    { next : (persons: AsbestosCertifiedPerson[]) => {\n      this.searchCompleted = true;\n      if (persons && persons.length == 1) {\n        this.selectedPerson = persons[0];\n        this.refreshTable(this.selectedPerson);\n        this.inProgressMsg = '';\n      } else if (persons && persons.length > 1) {\n        this.errorMessage = 'Multipe records matching the search criteria were found. ';\n        this.inProgressMsg = '';\n      } else {\n        // if search includes last name and Cert Number try ignoring Cert Number\n        if (searchFilter.applicantLastname && searchFilter.certificationNumber) {\n          this.searchLastNameBirthDateAndSSN(searchFilter);\n        } else {\n          this.searchDateAndSSN(searchFilter);\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Search failed: ' + err;\n      this.inProgressMsg = '';\n    }});\n  }\n\n  private searchLastNameBirthDateAndSSN(searchFilter: AsbestosCertifiedPersonFilter) {\n    searchFilter.certificationNumber = undefined;\n    this.certificationSearchComponentService.searchPersons(searchFilter).subscribe(\n    { next : (persons: AsbestosCertifiedPerson[]) => {\n      if (persons && persons.length == 1) {\n        this.selectedPerson = persons[0];\n        this.searchFormGroup.controls['certificationNumber'].setValue(undefined);\n        this.refreshTable(this.selectedPerson);\n        this.inProgressMsg = '';\n      } else if (persons && persons.length > 1) {\n        this.errorMessage = 'Multipe records matching the search criteria were found. ';\n        this.inProgressMsg = '';\n      } else {\n        this.searchDateAndSSN(searchFilter);\n      }\n    }, error : err => {\n      this.errorMessage = 'Search failed: ' + err;\n      this.inProgressMsg = '';\n    }});\n  }\n\n  private searchDateAndSSN(searchFilter: AsbestosCertifiedPersonFilter) {\n        this.certificationSearchComponentService.searchPersonsBirthDateAndSSN(searchFilter).subscribe(\n        { next : (closeMatches: AsbestosCertifiedPerson[]) => {\n          this.inProgressMsg = '';\n          if (!closeMatches || closeMatches.length == 0) {\n            if (!this.newCertification) {\n              this.errorMessage = 'No records matching the search criteria were found. Please verify the information entered is correct and contact Ohio EPA staff at 614-644-0226 if you held a certification in the past that was not found during the search.';\n            } else {\n              this.infoMessage = 'No certifications found. Select the Create Certification button below to create a new certification for this person.';\n            }\n          } else {\n        this.searchFormGroup.controls['certificationNumber'].setValue(undefined);\n            this.warnMessage = 'A certification has been found matching the Last 4 SSN and Date of Birth values provided. '\n            + \"Please ensure that the Last Name entered is spelled correctly and matches the name of the individual's previous certification. \"\n        + 'If you are having trouble retrieving your previous certification information, please contact the Asbestos Licensing Program at 614-644-0226 for assistance before proceeding. '\n        + 'If you are certain no previous certification exists for this individual, select the Create New Certification button below to create a new certification.';\n          }\n        }, error : err => {\n          this.errorMessage = 'Search failed: ' + err;\n          this.inProgressMsg = '';\n        }});\n      }\n\n  public refreshTable(person: AsbestosCertifiedPerson) {\n    this.contractorTableData = [];\n    if (person.certifications) {\n      person.certifications.forEach(certification => {\n        const row: OepaTableRow = this.convertDataTocontractorTableRow(person, certification.certificationNumber);\n        this.contractorTableData.push(row);\n      });\n    }\n    this.contractorTableData = this.contractorTableData.slice();\n  }\n\n  private convertDataTocontractorTableRow(person: AsbestosCertifiedPerson, certificationNumber: string): OepaTableRow {\n    const row: OepaTableRow = {\n      cells: [\n        { id: 'certificationNumber', value: certificationNumber },\n        { id: 'personLast4ssn', value: person.last4ssn ? person.last4ssn : '' },\n        { id: 'personDateOfBirth', value: person.dateOfBirth ? this.oepaMappingService.mapDateToDateDateString(new Date(person.dateOfBirth)) : '', sortValue: person.dateOfBirth ? new Date(person.dateOfBirth) : null },\n        { id: 'applicantName', value: (person.firstName + ' ' || '') + (person.lastName || '') },\n      ],\n      dataSource: certificationNumber,\n      actions: undefined,\n      selectable: true,\n    };\n    return row;\n  }\n\n  public addCertificationToList() {\n    let certificationNumber: string = this.selectedRows[0].dataSource;\n    if (certificationNumber) {\n      let foundExisting = false;\n      this.existingCertificationSummary = this.certificationService.getExistingCertificationSummaryData();\n      this.existingCertificationSummary.forEach((existingItem) => {\n        if (certificationNumber == existingItem.certificationNumber) {\n          foundExisting = true;\n        }\n      });\n\n      if (!foundExisting) {\n        this.certificationService.eBizAssociatedAccountWithCertifications(certificationNumber).subscribe(\n        { next : () => {\n          this.info.emit(true);\n        }, error : err => {\n          this.errorMessage = 'Could not add certification ' + certificationNumber + ': ' + err;\n        }});\n      } else {\n        this.errorMessage = 'Certification ' + certificationNumber +  ' is already on the list.';\n      }\n    } else {\n      this.errorMessage = 'No certification number for selected row';\n    }\n  }\n\n  public onRowSelect(selectedRows: Array<OepaTableRow>) {\n    this.selectedRows = [];\n    if (selectedRows) {\n      selectedRows.forEach((row) => {\n        this.selectedRows.push(row);\n      });\n    }\n  }\n\n  public cancelPopup() {\n    this.info.emit(false);\n  }\n\n  public cancel() {\n    this.info.emit(true);\n  }\n\n}","<div class=\"modal-header\">\n  <h4 class=\"modal-title\"><b>{{newCertification ? 'Create New Certification' : 'Individual Certification Search'}}</b></h4>\n  <button type=\"button\" class=\"btn-close\" (click)=\"bsModalRef.hide()\"></button>\n</div>\n<div class=\"modal-body\">\n  <div *ngIf=\"!newCertification\" class=\"alert alert-info\">\n    Enter values in the fields below to search for existing certifications and click the Search button. If this individual has no existing certifications,\n    select the Create New Certification Button.\n  </div>\n  <div *ngIf=\"newCertification\" class=\"alert alert-info\">\n    Enter values in the fields below and click Search to verify whether a certification exists for this individual.\n  </div>\n  <form [formGroup]=\"searchFormGroup\" id=\"searchFormGroup\">\n    <div *ngIf=\"!newCertification\" class=\"row\">\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>Last Name</label>\n          <input type=\"text\" class=\"form-control\" formControlName=\"applicantLastname\" id=\"applicantLastname\"\n            name=\"applicantLastname\" maxlength=\"50\">\n          <small class=\"alert text-danger\"\n            *ngIf=\"(searchFormGroup.controls['applicantLastname'].value === '' || searchFormGroup.controls['applicantLastname'].value === null) &&\n              (searchFormGroup.controls['certificationNumber'].value === '' || searchFormGroup.controls['certificationNumber'].value === null)\">\n            Last Name or Certification Number is required</small>\n        </div>\n      </div>\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>Certification Number\n            <span *ngIf=\"certificationNumberHelpText\" class=\"oepa-help\">\n              <span [tooltip]=\"certificationNumberHelpText\" placement=\"right\">\n                <i class=\"bi bi-question-circle-fill\"></i>\n              </span>&nbsp;</span>\n          </label>\n          <input type=\"text\" class=\"form-control\" formControlName=\"certificationNumber\" id=\"certificationNumber\"\n            name=\"certificationNumber\">\n          <small class=\"alert text-danger\"\n            *ngIf=\"(searchFormGroup.controls['applicantLastname'].value === '' || searchFormGroup.controls['applicantLastname'].value === null) &&\n              (searchFormGroup.controls['certificationNumber'].value === '' || searchFormGroup.controls['certificationNumber'].value === null)\">\n            Last Name or Certification Number is required</small>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>Last 4 SSN</label>\n          <input type=\"text\" class=\"form-control\" formControlName=\"applicantLast4ssn\" id=\"applicantLast4ssn\"\n            name=\"applicantLast4ssn\" mask=\"0000\" minlength=\"4\">\n          <small class=\"alert text-danger\"\n            *ngIf=\"searchFormGroup.controls['applicantLast4ssn'].value === '' || searchFormGroup.controls['applicantLast4ssn'].value === null\">required</small>\n        </div>\n      </div>\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>Date of Birth</label>\n          <oepa-datepicker id=\"dateofbirth\" name=\"dateofbirth\" [group]=\"searchFormGroup\" field=\"applicantDateOfBirth\">\n          </oepa-datepicker>\n          <small class=\"alert text-danger\"\n            *ngIf=\"searchFormGroup.controls['applicantDateOfBirth'].value === '' || searchFormGroup.controls['applicantDateOfBirth'].value === null\">required</small>\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"newCertification\" class=\"row\">\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>First Name</label>\n          <input type=\"text\" class=\"form-control\" formControlName=\"applicantFirstname\" id=\"applicantFirstname\" name=\"applicantFirstname\" maxlength=\"50\">\n          <small class=\"alert text-danger\"\n            *ngIf=\"searchFormGroup.controls['applicantFirstname'].value === '' || searchFormGroup.controls['applicantFirstname'].value === null\">\n            required</small>\n        </div>\n      </div>\n      <div class=\"col-sm-6\">\n        <div class=\"form-group\">\n          <label>Last Name</label>\n          <input type=\"text\" class=\"form-control\" formControlName=\"applicantLastname\" id=\"applicantLastname\" name=\"applicantLastname\" maxlength=\"50\">\n          <small class=\"alert text-danger\"\n            *ngIf=\"searchFormGroup.controls['applicantLastname'].value === '' || searchFormGroup.controls['applicantLastname'].value === null\">\n            required</small>\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"!inProgressMsg\" class=\"row\">\n      <div class=\"col-sm-12 text-center\">\n        <button class=\"btn btn-primary me-1\" type=\"button\" id=\"searchBtn\" name=\"searchBtn\"\n          (click)=\"submitSearch()\">Search</button>&nbsp;&nbsp;&nbsp;\n        <button class=\"btn btn-primary me-1\" type=\"button\" id=\"resetBtn\" name=\"resetBtn\"\n          (click)=\"reset()\">Reset</button>\n      </div>\n    </div>\n    <div *ngIf=\"inProgressMsg\">\n      <div class=\"alert alert-info text-center\">\n        <h3>{{inProgressMsg}}</h3>\n        <span class=\"spinner-border text-primary\" role=\"status\"></span>\n      </div>\n    </div>\n  </form>\n\n  <br>\n\n  <div *ngIf=\"contractorTableData && contractorTableData.length > 0\" class=\"card\">\n\n    <div class=\"card-header\">\n        Certificate(s) &nbsp; <span class=\" badge bg-secondary\">{{contractorTableData.length}}</span>\n    </div>\n    <div class=\"card-body\">\n      <oepa-table tableId=\"contractorTable\" [config]=\"tableConfig\" [data]=\"contractorTableData\" [header]=\"tableHeader\"\n      (rowSelected)=\"onRowSelect($event)\">\n      </oepa-table>\n    </div>\n  </div>\n</div>\n<div class=\"modal-footer d-block\">\n  <div class=\"row\">\n    <div class=\"col-sm-12\">\n      <div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n        {{errorMessage}}\n      </div>\n      <div *ngIf=\"infoMessage\" class=\"alert alert-info\">\n        {{infoMessage}}\n      </div>\n      <div *ngIf=\"warnMessage\" class=\"alert alert-warning\">\n        {{warnMessage}}\n      </div>\n    </div>\n    <div class=\"col-sm-12 text-center\">\n      <button *ngIf=\"selectedPerson && sourceType === 'eBusinessCenter'\" class=\"btn btn-primary me-2\" type=\"button\" [disabled]=\"!selectedRows || selectedRows.length !== 1\"\n        id=\"updateCertificationBtn\" (click)=\"addCertificationToList()\">\n        Add SelectedCertification to List</button>&nbsp;\n\n      <button *ngIf=\"selectedPerson\" class=\"btn btn-primary me-2\" type=\"button\"\n        id=\"createNewCertificationBtn\" name=\"createNewCertificationBtn\" (click)=\"createNewIndividual(selectedPerson)\">\n        Create New Certification For This Person</button>\n\n      <button *ngIf=\"!newCertification && (!contractorTableData || contractorTableData.length === 0)\" class=\"btn btn-primary me-2\"\n        type=\"button\" id=\"createNewCertificationBtn\" name=\"createNewCertificationBtn\"\n        (click)=\"createNewCertification()\">\n        Create New Certification</button>&nbsp;\n\n      <button *ngIf=\"newCertification && !selectedPerson\" class=\"btn btn-primary me-2\" [disabled]=\"!okToCreateNewPerson || !searchCompleted\"\n          type=\"button\" id=\"createCertificationBtn\" name=\"createCertificationBtn\"\n          (click)=\"createNewIndividual(searchPerson)\">\n          Create Certification</button>&nbsp;\n\n      <button class=\"btn btn-primary me-2\" type=\"button\" id=\"cancelPopupBtn\" name=\"cancelPopupBtn\"\n        (click)=\"cancel()\">Cancel</button>\n    </div>\n  </div>\n</div>","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { of } from 'rxjs';\nimport { CertificationSummaryTestData } from '../server/certification-summary-test-data';\nimport { CertificationApplicationSummaryTestData } from '../server/certification-application-summary-test-data';\n\n@Injectable()\nexport class CertificationDummyDataService {\n  private dummyCertificationItems: Array<CertificationSummaryTestData> = [];\n  private dummyApplicationItems: Array<CertificationApplicationSummaryTestData> = [];\n  constructor() {\n    this.dummyCertificationItems = [ \n      { \n        smvsPriority: true,\n        certificationNumber: '0001',\n        applicantName: 'Arunee Niamlarb',\n        applicantLast4ssn: '1233',\n        applicantDateOfBirth: '10/25/1988',\n        certificationType: 'Abatement Specialist (Supervisor)',\n        certificationStatus: 'Active',\n        certificationIssuedDate: '12/01/2018',\n        certificationExpirationDate: '12/01/2019' \n      },\n      {\n        smvsPriority: true,\n        certificationNumber: '0002',\n        applicantName: 'Fred Gory',\n        applicantLast4ssn: '1113',\n        applicantDateOfBirth: '10/25/1964',\n        certificationType: 'Evaluation Specialist (Building Inspector/Management Planner)',\n        certificationStatus: 'No Status',\n        certificationIssuedDate: '',\n        certificationExpirationDate: '' \n      },\n      {\n        smvsPriority: true,\n        certificationNumber: '0003',\n        applicantName: 'Mark Vince',\n        applicantLast4ssn: '9784',\n        applicantDateOfBirth: '12/12/1987',\n        certificationType: 'Abatement Project Designer',\n        certificationStatus: 'Expired',\n        certificationIssuedDate: '11/01/2016',\n        certificationExpirationDate: '11/01/2016'\n      },\n      {\n        smvsPriority: false,\n        certificationNumber: '0004',\n        applicantName: 'Sara Wang',\n        applicantLast4ssn: '3258',\n        applicantDateOfBirth: '09/11/1987',\n        certificationType: 'Air Monitoring Technician',\n        certificationStatus: 'Extended',\n        certificationIssuedDate: '06/01/2018',\n        certificationExpirationDate: '06/01/2019'\n      },\n      {\n        smvsPriority: true,\n        certificationNumber: '0005',\n        applicantName: 'Frank Matre',\n        applicantLast4ssn: '9766',\n        applicantDateOfBirth: '12/12/1966',\n        certificationType: 'Abatement Worker',\n        certificationStatus: 'Suspended',\n        certificationIssuedDate: '06/01/2018',\n        certificationExpirationDate: '06/01/2019'\n      },\n    ];\n    \n \n  this.dummyApplicationItems = [\n      {\n        applicationID: 'A0001',\n        applicationStatus: 'Issued',\n        applicationType: 'Initial',\n        applicationDateReceived: '10/25/2017',\n        revenueID: '12345',\n        applicantAddress: '50 West Town St.',\n        applicantCity: 'Columbus' ,  \n        applicantState: 'OH',\n        applicantPostCode: '43215',\n        applicantPhoneNumber: '614-728-1342',\n        applicantEmailAddress: 'aa@ss.com',\n        approveDate: '12/01/2018',\n        issueDate: '12/01/2018'  \n      },\n      {\n        applicationID: 'A0002',\n        applicationStatus: 'Pending',\n        applicationType: 'Initial',\n        applicationDateReceived: '10/25/2018',\n        revenueID: '12348',\n        applicantAddress: '55 West Town St.',\n        applicantCity: 'Columbus' ,  \n        applicantState: 'OH',\n        applicantPostCode: '43215',\n        applicantPhoneNumber: '614-728-1343',\n        applicantEmailAddress: 'aaww@ss.com',\n        approveDate: '',\n        issueDate: ''\n      },\n      {\n        applicationID: 'A0003',\n        applicationStatus: 'Ready for Review',\n        applicationType: 'Renewal',\n        applicationDateReceived: '10/25/2018',\n        revenueID: '12349',\n        applicantAddress: '55 West Town St.',\n        applicantCity: 'Columbus' ,  \n        applicantState: 'OH',\n        applicantPostCode: '43215',\n        applicantPhoneNumber: '614-728-1343',\n        applicantEmailAddress: 'aaww@ss.com',\n        approveDate: '',\n        issueDate: ''\n      },\n      {\n        applicationID: 'A0004',\n        applicationStatus: 'Submitted',\n        applicationType: 'Replace',\n        applicationDateReceived: '10/25/2018',\n        revenueID: '12350',\n        applicantAddress: '55 West Town St.',\n        applicantCity: 'Columbus' ,  \n        applicantState: 'OH',\n        applicantPostCode: '43215',\n        applicantPhoneNumber: '614-728-1343',\n        applicantEmailAddress: 'aaww@ss.com',\n        approveDate: '',\n        issueDate: ''\n      },\n      {\n        applicationID: 'A0005',\n        applicationStatus: 'Denied',\n        applicationType: 'Initial',\n        applicationDateReceived: '10/25/2018',\n        revenueID: '12348',\n        applicantAddress: '55 West Town St.',\n        applicantCity: 'Columbus' ,  \n        applicantState: 'OH',\n        applicantPostCode: '43215',\n        applicantPhoneNumber: '614-728-1343',\n        applicantEmailAddress: 'aaww@ss.com',\n        approveDate: '10/26/2018',\n        issueDate: ''\n      },\n    ];\n \n  }\n  public getCertificationTableData(): Observable<Array<CertificationSummaryTestData>> {\n    return of(this.dummyCertificationItems);\n  }\n  \n    public getApplicationTableData(): Observable<Array<CertificationApplicationSummaryTestData>> {\n    return of(this.dummyApplicationItems);\n  }\n  \n}\n\n","/**\n * Equivalent to us.oh.state.epa.portal.asbestos.opscert.certification.CertificationApplicationDocumentNames\n */\nexport class CertificationApplicationDocumentNames {  \n    public static convictionDocumentName: string = 'Conviction_Document';\n    public static usafDocumentName: string = 'usaf_Document';\n    public static certificationApplicationAttachmentName: string = 'Certification_Application_Attachment';\n}","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'oepa-certification-official-use',\n  templateUrl: './certification-official-use.component.html',\n  styleUrls: ['./certification-official-use.component.css']\n})\nexport class CertificationOfficialUseComponent implements OnInit {\n  @Input() showValidation: boolean = false;\n  @Input('group') group!: FormGroup;\n\n  @Output('reviseSection') reviseSection: EventEmitter<any> = new EventEmitter<any>();\n\n  constructor() {\n  }\n\n  ngOnInit() {\n    if (this.group.controls['source'].value != 'Mail') {\n      this.group.controls['receivedDate'].disable();\n    }\n  }\n\n}\n","<div class=\"card\">\n  <div class=\"card-header\">\n    <div class=\"row\">\n      <div class=\"col-sm-8\">\n        <div class=\"card-title\"><i>For Ohio-EPA Use Only</i></div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"card-body\">\n    <form [formGroup]=\"group\" novalidate>\n      <div class=\"form-group row text-start\">\n        <div class=\"col-sm-2\">\n          <label>Application Type</label>\n          <div>\n            <input class=\"form-control\" formControlName=\"applicationType\" id=\"applicationType\" readonly=\"true\">\n          </div>\n        </div>\n        <div class=\"col-sm-2\">\n          <label>Source</label>\n          <div>\n            <input class=\"form-control\" formControlName=\"source\" id=\"source\" readonly=\"true\">\n          </div>\n        </div>\n        <div class=\"col-sm-3\">\n          <label>Received Date</label>\n          <div>\n            <oepa-datepicker [group]=\"group\" field=\"receivedDate\" id=\"receivedDate\" [showValidation]=\"showValidation\"></oepa-datepicker>\n          </div>\n        </div>\n        \n      </div>\n\n    </form>\n  </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ApplicantInformation } from '../applicant-information/applicant-information';\nimport { OepaMessageType } from 'oepa-ui-lib';\nimport { CertificationMappingService } from '../../common-service/certification-mapping.service';\nimport { CertificationService } from '../../common-service/certification.service';\nimport { AsbestosCertifiedPerson } from '../../../server/asbestos-certified-person';\n\n@Component({\n  selector: 'oepa-applicant-info-modal',\n  templateUrl: './applicant-info-modal.component.html',\n  styleUrls: ['./applicant-info-modal.component.css']\n})\nexport class ApplicantInfoModalComponent implements OnInit {\n  public imageRoot = '/AngularWebApp/assets/images';\n  public inProgressMsg: string = '';\n  public errorMsg: string = '';\n\n  @Input() showValidation: boolean = false;\n  @Input() applicantInfoGroup!: FormGroup;\n  @Input() appID: string = '';\n  \n  @Output() modalSave: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() modalCancel: EventEmitter<boolean> = new EventEmitter<boolean>();\n  \n  constructor(\n    private fb: FormBuilder,\n    public bsModalRef: BsModalRef,\n    public certificationMappingService: CertificationMappingService,\n    public certificationService: CertificationService) {\n  }\n\n  ngOnInit() {}\n  \n  save() {\n    const applicantInfo: ApplicantInformation = this.getInfoFromForm();\n    this.updateApplicant(applicantInfo);\n  }\n\n  cancel() {\n    this.modalCancel.emit(true);\n    this.bsModalRef.hide();\n  }\n\n  private updateApplicant(applicantInfo: ApplicantInformation) {\n    this.inProgressMsg = \"Applicant information saving...\";\n    const applicantInfoObj: AsbestosCertifiedPerson = this.certificationMappingService.mapFormApplicantInfoToApplicantInfoObj(applicantInfo);\n    this.certificationService.updateApplicantInformation(this.appID, applicantInfoObj).subscribe(\n    { next : result => {\n      if (result && result.success) {\n        this.inProgressMsg = 'Applicant Info has been updated', OepaMessageType.INFO, 'saved Applicant Info for app id: ' + this.appID;\n        this.modalSave.emit(true);\n        this.bsModalRef.hide();\n      } else {\n        this.inProgressMsg = '';\n        this.errorMsg = 'Applicant Info could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n      }\n    }, error : err => {\n      this.inProgressMsg = '';\n      this.errorMsg = 'An error occurred while updating the Applicant Info: ' + err;\n    }});\n  }\n\n  private getInfoFromForm(): ApplicantInformation {\n    let applicant: ApplicantInformation = {\n      certificationNumber: this.applicantInfoGroup.controls['certificationNumber']?.value,\n      contactInfo:this.applicantInfoGroup.controls['contactInfo']?.value,\n      streetAddress: { id: this.applicantInfoGroup.controls['streetAddress'].get('id')?.value,\n                       line1: this.applicantInfoGroup.controls['streetAddress'].get('line1')?.value,\n                       line2: this.applicantInfoGroup.controls['streetAddress'].get('line2')?.value,\n                       city: this.applicantInfoGroup.controls['streetAddress'].get('city')?.value,\n                       state: this.applicantInfoGroup.controls['streetAddress'].get('state')?.value,\n                       postalCode: this.applicantInfoGroup.controls['streetAddress'].get('postalCode')?.value\n      }\n    };\n    //console.log(\"getInfoFromForm:\",JSON.stringify(applicant));\n    return applicant;\n  }\n}\n","<div class=\"modal-header\">\n    <h4 class=\"modal-title\">Applicant Information</h4>\n    <button type=\"button\" class=\"btn-close\" (click)=\"cancel()\">\n    </button>\n</div>\n\n<div class=\"modal-body\">\n  <form [formGroup]=\"applicantInfoGroup\" novalidate>\n    <input [hidden]=\"true\" formControlName=\"certificationNumber\">\n    <div class=\"card\">\n      <div class=\"card-header\">\n        <div class=\"row\">\n          <div class=\"col-sm-12\">\n            <div class=\"card-title\">\n              <div class=\"row\">\n                <div class=\"col-md-4\">\n                  <div class=\"form-group\">\n                    <label>Certification #</label>\n                    <input class=\"form-control\" type=\"text\" placeholder=\"Certification Number\" formControlName=\"certificationNumber\" readonly=\"true\">\n                  </div>\n                </div>\n                <div class=\"col-sm-4\">\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"card-body\">\n        <div class=\"row\">\n          <div class=\"col-md-12\">\n              <oepa-contact [group]=\"applicantInfoGroup.controls['contactInfo'] | formControl\" firstNameLabel=\"First Name\" phoneLabel=\"Phone\"\n              [showMiddleName]=\"true\" emailLabel=\"E-mail\" [noFax]=\"true\" [noEmail]=\"true\" [noPhone]=\"true\" ></oepa-contact>\n          </div>\n        </div>\n        <div class=\"row\">\n          <div class=\"col-md-12\">\n            <oepa-address [group]=\"applicantInfoGroup.controls['streetAddress'] | formControl\" addressOneLabel=\"Street Address\" zipCodeLabel=\"Zip\"></oepa-address>\n          </div>\n        </div>\n      </div>\n\n    </div>\n  </form>\n</div>\n\n<div class=\"modal-footer d-block\">    \n  <div *ngIf=\"inProgressMsg\" class=\"alert alert-info\">\n    <h5>{{inProgressMsg}} <span class=\"spinner-border text-primary\" role=\"status\"></span></h5>\n  </div>\n  <div *ngIf=\"errorMsg\" class=\"alert alert-danger\">\n    <h5>{{errorMsg}}</h5>\n  </div>\n    <div *ngIf=\"!inProgressMsg\" class=\"text-center\">\n      <button type=\"button\" class=\"btn btn-primary me-2\" [disabled]=\"!applicantInfoGroup.valid\" id=\"SaveApplicantInfoBtn\" (click)=\"save()\">Save</button>\n      <button id=\"CancelApplicantInfoBtn\" type=\"button\" class=\"btn btn-primary\" (click)=\"cancel()\">Cancel</button>\n    </div>\n</div>","import { Component, Input, OnInit, Output, EventEmitter } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { BsModalRef, BsModalService } from \"ngx-bootstrap/modal\";\n\nimport { ApplicantInfoModalComponent } from \"../applicant-info-modal/applicant-info-modal.component\";\n\n@Component({\n  selector: 'oepa-applicant-information',\n  templateUrl: './applicant-information.component.html',\n  styleUrls: ['./applicant-information.component.css']\n})\nexport class ApplicantInformationComponent implements OnInit {\n  @Input() showValidation: boolean = true;\n  @Input() appID: string = '';\n  @Input() mode: string = '';\n  @Input('helpText') helpText: string = '';\n  @Input() allowEdit: boolean = true;\n  @Input() isExternalUser:boolean = false;\n  @Input()  applicantInfoGroup!: FormGroup;  \n  @Output() applicantInfoGroupChange: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n  public modal!: BsModalRef;\n\n  constructor(private modalService: BsModalService\n              ) {}\n\n  ngOnInit() {\n    this.applicantInfoGroup.controls['dateOfBirth']?.disable();\n  }\n\n  public editApplicantInfo() {\n    if (this.mode == 'edit') {\n      this.enableApplicantInfo();\n    }\n    \n    const initialState = {\n      showValidation: this.showValidation,\n      applicantInfoGroup: this.applicantInfoGroup,\n      appID: this.appID\n    }\n    this.modal = this.modalService.show(ApplicantInfoModalComponent, { initialState, class: 'modal-xl', ignoreBackdropClick: true });\n     (<ApplicantInfoModalComponent>this.modal.content).applicantInfoGroup = this.applicantInfoGroup;\n    (<ApplicantInfoModalComponent>this.modal.content).modalSave.subscribe(\n    { next : () => {\n      // this.updateContractor(result);\n      this.applicantInfoGroupChange.emit(this.applicantInfoGroup);\n      this.disableApplicantInfo();\n    }});\n    (<ApplicantInfoModalComponent>this.modal.content).modalCancel.subscribe(\n    { next : () => {\n      this.disableApplicantInfo();\n    }});\n  }\n\n  private enableApplicantInfo() {\n      this.applicantInfoGroup.controls['contactInfo'].enable();\n      this.applicantInfoGroup.controls['last4ssn'].enable();\n      this.applicantInfoGroup.controls['dateOfBirth'].enable();\n      this.applicantInfoGroup.controls['streetAddress'].enable();\n  }\n  \n  private disableApplicantInfo() {\n      this.applicantInfoGroup.controls['contactInfo'].get('firstName')?.disable();\n      this.applicantInfoGroup.controls['contactInfo'].get('middleName')?.disable();\n      this.applicantInfoGroup.controls['contactInfo'].get('lastName')?.disable();\n      this.applicantInfoGroup.controls['last4ssn'].disable();\n      this.applicantInfoGroup.controls['dateOfBirth'].disable();\n      this.applicantInfoGroup.controls['streetAddress'].disable();\n  }\n\n\n}","<form [formGroup]=\"applicantInfoGroup\">\n  <div class=\"card\">\n    <div class=\"card-header alert-info mb-3\">\n      <div class=\"row\">\n        <div class=\"col-sm-12\">\n          <div class=\"card-title\">\n            <div class=\"row\">\n              <div class=\"col-md-3\">\n                <div class=\"form-group\">\n                  <label>Certification #</label>\n                  <input class=\"form-control\" type=\"text\" placeholder=\"Certification Number\" formControlName=\"certificationNumber\"\n                    readonly=\"true\" [ngClass]=\"{'is-invalid':showValidation && applicantInfoGroup.controls['certificationNumber'].status === 'INVALID'}\">\n                    <small class=\"invalid-feedback\" *ngIf=\"applicantInfoGroup.controls['certificationNumber'].hasError('required')\">Certification Number is required</small>\n                  </div>\n              </div>\n              <div class=\"col-md-4\">\n                <div class=\"form-group\">\n                  <label>Certification Type</label>\n                  <input class=\"form-control\" type=\"text\" placeholder=\"Certification Type\" formControlName=\"certificationType\"\n                    readonly=\"true\" [ngClass]=\"{'is-invalid':showValidation && applicantInfoGroup.controls['certificationType'].status === 'INVALID'}\">\n                    <small class=\"invalid-feedback\" *ngIf=\"applicantInfoGroup.controls['certificationType'].hasError('required')\">Certification Type is required</small>\n                  </div>\n              </div>\n              <div class=\"col-sm-2\">\n                <div class=\"form-group\">\n                  <label>Last 4 Digits Of SSN</label>\n                  <input class=\"form-control\"  type=\"text\" placeholder=\"Last 4 SSN\" formControlName=\"last4ssn\"\n                    readonly=\"true\" [ngClass]=\"{'is-invalid':showValidation && applicantInfoGroup.controls['last4ssn'].status === 'INVALID'}\">\n                    <small class=\"invalid-feedback\" *ngIf=\"applicantInfoGroup.controls['last4ssn'].hasError('required')\">Last 4 ssn is required</small>\n                    <small class=\"invalid-feedback\" *ngIf=\"applicantInfoGroup.controls['last4ssn'].hasError('maxlength')\">Last 4 ssn has to be 4 digits</small>\n                    <small class=\"invalid-feedback\" *ngIf=\"applicantInfoGroup.controls['last4ssn'].hasError('minlength')\">Last 4 ssn has to be 4 digits</small>\n                  </div>\n              </div>\n              <div class=\"col-md-3\">\n                <div class=\"form-group\">\n                    <label>Date of Birth</label>\n                    <div>\n                      <oepa-datepicker [group]=\"applicantInfoGroup\" field=\"dateOfBirth\" id=\"dateOfBirth\" [showValidation]=\"showValidation\"></oepa-datepicker>\n                    </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    \n\n    <div class=\"card-body\">\n      <div class=\"row\" *ngIf=\"allowEdit\">\n        <div class=\"col-sm-12 text-end\">\n          <button *ngIf=\"mode != 'view'\" class=\"navbar-form pull-right\" type=\"button\" class=\"btn btn-primary\" (click)=\"editApplicantInfo()\"\n            id=\"EditApplicantBtn\">Edit Applicant Information</button>\n        </div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-md-12\">\n          <oepa-contact [group]=\"applicantInfoGroup.controls['contactInfo'] | formControl\" firstNameLabel=\"1. First Name\" phoneLabel=\"Phone\"\n          [showMiddleName]=\"true\" emailLabel=\"E-mail\" [noFax]=\"true\" [showValidation]=\"showValidation\"></oepa-contact>\n        </div>\n      </div>\n      \n      <div class=\"row\">\n        <div class=\"col-md-12\">\n          <oepa-address [group]=\"applicantInfoGroup.controls['streetAddress'] | formControl\" addressOneLabel=\"Home Address\"\n            zipCodeLabel=\"Zip\" [showValidation]=\"showValidation\"></oepa-address>\n        </div>\n      </div>\n   \n    </div>\n   \n  </div>\n</form>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormBuilder, FormGroup,  ValidationErrors } from '@angular/forms';\nimport { OepaAddressService } from 'oepa-ui-lib';\nimport { OepaComponentIdService } from 'oepa-common-lib';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\nimport { CertificationMappingService } from '../../common-service/certification-mapping.service';\n\nimport { OutOfStateCertification } from '../../server/out-of-state-certification';\nimport { NotificationMappingService } from '../../../../notification-common/notification-service/notification-mapping.service';\n\n@Component({\n  selector: 'oepa-out-of-state-certification-modal',\n  templateUrl: './out-of-state-certification-modal.component.html',\n  styleUrls: ['./out-of-state-certification-modal.component.css']\n})\nexport class OutOfStateCertificationModalComponent implements OnInit {\n  public mode:string = '';\n  \n  private _outOfStateCertification: OutOfStateCertification = {};\n  public group!: FormGroup;\n  \n  public usStates: string[] | undefined;\n  \n  @Input() isExternalUser: boolean = false;\n  @Input() showValidation: boolean = false;\n  @Input()\n   public set outOfStateCertificationInfo(outOfStateCertification: OutOfStateCertification) {\n    this._outOfStateCertification = outOfStateCertification;\n    this.populateForm();\n   }\n   public get outOfStateCertificationInfo(): OutOfStateCertification {\n     return this._outOfStateCertification;\n   }\n\n  @Output() modalSave: EventEmitter<OutOfStateCertification> = new EventEmitter<OutOfStateCertification>();\n \n  constructor(private idService: OepaComponentIdService,\n              private fb: FormBuilder,\n              public bsModalRef: BsModalRef,\n              private addressService: OepaAddressService,\n              private certificationMappingService: CertificationMappingService,\n              private mappingService: NotificationMappingService\n  ) {\n      this.addressService.getStates().subscribe(\n      { next : (states) => {\n        this.usStates = states;\n      }, error : err => {\n        console.log('ERROR retrieving states for address: ' + err);\n      }});\n    }\n\n  ngOnInit() {\n    this.group = this.certificationMappingService.buildOutOfStateCertificationForm(this._outOfStateCertification,this.isExternalUser);\n  }\n\n  public isFormEntityEmpty(outOfStateCertification: OutOfStateCertification): boolean {\n    let empty = false;\n    if (!outOfStateCertification) {\n      empty = true;\n    } else if (this.mappingService.isEmptyString(outOfStateCertification.id) &&\n               this.mappingService.isEmptyString(outOfStateCertification.applicationID) &&\n               this.mappingService.isEmptyString(outOfStateCertification.certificationNumber) &&\n               this.mappingService.isEmptyString(outOfStateCertification.state)) {\n        empty = true;\n    }\n    return empty;\n  }\n  \n  private populateForm() {\n    if (!this.isFormEntityEmpty(this._outOfStateCertification)) {\n      this.group.patchValue({\n        id: this._outOfStateCertification.id,\n        applicationID: this._outOfStateCertification.applicationID,\n        certificationNumber: this._outOfStateCertification.certificationNumber,\n        state: this._outOfStateCertification.state\n      });\n      // this.group = this.fb.group(this.asbestosFormsService.buildEntityInfoSearchForm(this.outOfStateLicenseInfo, false));\n    }\n  }\n\n  public save() {\n    this._outOfStateCertification = this.getInfoFromForm();\n    this.modalSave.emit(this._outOfStateCertification);\n    this.bsModalRef.hide();\n  }\n\n  private getInfoFromForm(): OutOfStateCertification {\n    let outOfStateCertification: OutOfStateCertification = Object.assign({}, this._outOfStateCertification);\n\n    outOfStateCertification = {\n      id: this.group.controls['id'].value,\n      applicationID: this.group.controls['applicationID'].value,\n      certificationNumber: this.group.controls['certificationNumber'].value,\n      state:  this.group.controls['state'].value,\n  };\n  \n    return outOfStateCertification;\n  }\n\n  updateOutOfStateCertification(outOfStateCertification: OutOfStateCertification) {\n    this._outOfStateCertification = outOfStateCertification;\n  }\n\n}\n","<div class=\"modal-header\">\n  <h4 class=\"modal-title\">State Certification(s) (if applicable)</h4>\n  <button type=\"button\" class=\"btn-close\" (click)=\"bsModalRef.hide()\"></button>\n</div>\n\n<div class=\"modal-body\">\n  <form [formGroup]=\"group\">\n\n    <input [hidden]=\"true\" formControlName=\"applicationID\">\n    <input [hidden]=\"true\" formControlName=\"id\">\n    <div class=\"row\">\n      <div class=\"col-md-2\">\n        <div class=\"form-group\">\n          <label>State</label>\n          <select class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\"\n            name=\"AddressState\" formControlName=\"state\" id=\"OutOfStateCertificationModalComponent_StateSelect\">\n            <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n          </select>\n          <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['state'].errors && group.controls['state'].errors['required']\">State\n            is required</small>\n        </div>\n      </div>\n\n      <div class=\"col-md-6\">\n        <div class=\"form-group\">\n          <label>Certification Number</label>\n          <input class=\"form-control\" type=\"text\" [ngClass]=\"{'is-invalid':showValidation && group.controls['certificationNumber'].status === 'INVALID'}\"\n            formControlName=\"certificationNumber\" id=\"OutOfStateCertificationModalComponent_CertificationNumberInput\"\n            maxlength=\"40\">\n          <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['certificationNumber'].errors && group.controls['certificationNumber'].errors['required']\">\n            Certification Number is required\n          </small>\n        </div>\n      </div>\n\n    </div>\n\n  </form>\n</div>\n\n<div class=\"modal-footer\">\n  <button *ngIf=\"mode != 'VIEW'\" type=\"button\" class=\"btn btn-primary\" [disabled]=\"!group.valid\" id=\"SaveOutOfStateCertificationBtn\"\n    (click)=\"save()\">Save</button>\n  <button id=\"CancelOutOfStateCertificationBtn\" type=\"button\" class=\"btn btn-primary\" (click)=\"bsModalRef.hide()\">Cancel</button>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { OepaTableHeader, OepaTableRow, OepaTableConfig, OepaActionEvent, ConfirmationModalComponent } from 'oepa-ui-lib';\n\nimport { OutOfStateCertification } from '../../server/out-of-state-certification';\n\nimport { OutOfStateCertificationModalComponent } from '../out-of-state-certification-modal/out-of-state-certification-modal.component';\nimport { CertificationService } from '../../common-service/certification.service';\nimport { CertificationMappingService } from '../../common-service/certification-mapping.service';\n\n@Component({\n  selector: 'oepa-out-of-state-certification-table',\n  templateUrl: './out-of-state-certification-table.component.html',\n  styleUrls: ['./out-of-state-certification-table.component.css']\n})\nexport class OutOfStateCertificationTableComponent implements OnInit {\n  private buttonDisabled = false;\n\n  errorMessage: string = '';\n\n  private currentId: number = 0;\n  private mOutOfStateCertificationList: Array<OutOfStateCertification> = [];\n\n  public headers: Array<OepaTableHeader> = [];\n  public data: Array<OepaTableRow> = [];\n\n  public config: OepaTableConfig = {\n    classNames: ['table-striped', 'table-bordered'],\n    exportToExcel: false,\n    exportToHTML: false\n  };\n\n  @Input() appID: string = \"\";\n  @Input() isExternalUser: boolean = false;\n  @Input() showValidation: boolean = false;\n  @Input('disabled') disabled: boolean = false;\n\n  @Input('disableButtons')\n  set isButtonDisabled(disabled: boolean) {\n    this.buttonDisabled = disabled;\n    this.updateTableHeader();\n  }\n  get isButtonDisabled(): boolean {\n    return this.buttonDisabled;\n  }\n\n  @Input()\n  public set outOfStateCertificationList(oosll) {\n    this.mOutOfStateCertificationList = oosll;\n  }\n\n  public get outOfStateCertificationList() {\n    return this.mOutOfStateCertificationList;\n  }\n\n  @Output('list') list: EventEmitter<any> = new EventEmitter<any>();\n\n  private modalMode: string = 'NEW';\n\n  public message: string = '';\n  public header: OepaTableHeader =\n    {\n      columns:\n        [\n          { title: 'State', id: 'state', sort: 'none' },\n          { title: 'Certification Number', id: 'certificationNumber', sort: 'none' },\n\n          { title: 'Actions', id: 'actions', rowspan: 1, actionColumn: true }\n        ]\n    };\n\n  private updateTableHeader() {\n    this.header = {\n      columns:\n        [\n          { title: 'State', id: 'state', sort: 'none' },\n          { title: 'Certification Number', id: 'certificationNumber', sort: 'none' },\n        ]\n    };\n    if (!this.isButtonDisabled) {\n      this.header.columns.push({ title: 'Actions', id: 'actions', rowspan: 1, actionColumn: true });\n    }\n  }\n\n  public onActionClick(event: OepaActionEvent): void {\n    if (!this.isButtonDisabled) {\n      if (event.action.title === 'edit') {\n        this.editTableRow(event);\n      }\n      if (event.action.title === 'delete') {\n        this.deleteTableRow(event.data.applicationID,event.data.id);\n      }\n    }\n  }\n\n  constructor(private modalService: BsModalService,\n              private certificationService: CertificationService,\n              private certificationMappingService: CertificationMappingService\n  ) {}\n\n  public addOutOfStateCertificationTableRow() {\n    const info: OutOfStateCertification = {\n      applicationID: this.appID,\n      id: '',\n      certificationNumber: '',\n      state: '',\n    };\n\n    this.createOutOfStateCertificationModal(info, 'NEW');\n  }\n\n  public editTableRow(event: OepaActionEvent) {\n    const info: OutOfStateCertification = event.data;\n\n    this.createOutOfStateCertificationModal(info, 'EDIT');\n  }\n\n  private createOutOfStateCertificationModal(info: OutOfStateCertification, mode: string) {\n    this.modalMode = mode;\n    const initialState = {\n      isExternalUser: this.isExternalUser,\n    }\n    const modal: BsModalRef = this.modalService.show(OutOfStateCertificationModalComponent, {initialState, class: 'modal-xl',ignoreBackdropClick: true });\n    (<OutOfStateCertificationModalComponent>modal.content).showValidation = true;\n    (<OutOfStateCertificationModalComponent>modal.content).outOfStateCertificationInfo = info;\n    (<OutOfStateCertificationModalComponent>modal.content).modalSave.subscribe(\n    { next : (savedInfo : OutOfStateCertification) => {\n      //console.log('createOutOfStateCertificationModal: ' + JSON.stringify(savedInfo));\n      this.onOutOfStateCertificationSave(savedInfo);\n    }});\n  }\n\n  private onOutOfStateCertificationSave(info: OutOfStateCertification) {\n    if (this.modalMode === 'NEW') {\n      this.addOutOfStateCertification(info);\n    } else if (this.modalMode === 'EDIT') {\n      this.updateOutOfStateCertification(info);\n    }\n  }\n\n\n  private addOutOfStateCertification(info: OutOfStateCertification) {\n    console.log('addOutOfStateCertification: ' + JSON.stringify(info));\n    this.certificationService.createOutOfStateCertification(info).subscribe(\n    { next : (result) => {\n      if (result?.success && result?.outOfStateCertification?.id) {\n        info.id = result.outOfStateCertification.id;\n        this.updateOutOfStateCertificationTable(info);\n      } else {\n        this.errorMessage = 'Failed adding new Out Of State Certification';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed adding new Out Of State Certification: ' + err;\n    }});\n  }\n  \n  private updateOutOfStateCertification(info: OutOfStateCertification) {\n    this.certificationService.updateOutOfStateCertification(info).subscribe(\n    { next : (result) => {\n      if (result && result.success) {\n        this.updateOutOfStateCertificationTable(info);\n      } else {\n        this.errorMessage = 'Failed updating Out Of State Certification';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed updating Out Of State Certification: ' + err;\n    }});\n  }\n\n  private updateOutOfStateCertificationTable(info: OutOfStateCertification) {\n    const row: OepaTableRow = this.convertOutOfStateCertificationToTableRow(info);\n    const tmp: Array<OepaTableRow> = [];\n    let foundMatch: boolean = false;\n\n    this.data.forEach((r) => {\n      if (r.dataSource.id === info.id) {\n        foundMatch = true;\n        tmp.push(row);\n      } else {\n        tmp.push(r);\n      }\n    });\n    \n    if(!foundMatch) {\n      tmp.push(row);\n      this.outOfStateCertificationList.push(info);\n    } else {\n      this.outOfStateCertificationList = this.updateOutOfStateCertificationList(info);\n    }\n\n    this.data = tmp;\n    this.list.emit(this.outOfStateCertificationList);\n  }\n\n  private updateOutOfStateCertificationList(info: OutOfStateCertification) {\n    const tmp: Array<OutOfStateCertification> = [];\n    for (let i = 0; i < this.outOfStateCertificationList.length; i++) {\n      if (this.outOfStateCertificationList[i].id === info.id) {\n        tmp.push(info);\n      } else {\n        tmp.push(this.outOfStateCertificationList[i]);\n      }\n    }\n\n    return tmp;\n  }\n\n  deleteTableRow(applicationID:string, id: any): void {\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Confirm action';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Once an out of state Certification is deleted it cannot be undone!   Do you really want to do this?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      this.deleteOutOfStateCertification(applicationID, id);\n    }});\n  }\n\n  deleteOutOfStateCertification(applicationID:string, id: any) {\n    this.certificationService.deleteOutOfStateCertification(applicationID, id).subscribe(\n    { next : (result) => {\n      if (result && result.success) {\n        this.deleteFromOutOfStateCertificationTable(id);\n      } else {\n        this.errorMessage = 'Failed deleting Out Of State Certification';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed deleting Out Of State Certification: ' + err;\n    }});\n  }\n\n  deleteFromOutOfStateCertificationTable(id: any) {\n    const index: number = this.data.findIndex(building => building.dataSource.id === id);\n    this.data.splice(index, 1);\n\n    const dummyData: Array<OepaTableRow> = [];\n    this.data.forEach((item) => {\n      dummyData.push(item);\n    });\n    this.data = dummyData;\n    this.deleteOutOfStateCertificationFromList(id);\n  }\n\n  deleteOutOfStateCertificationFromList(id: any): void {\n    const tmp: Array<OutOfStateCertification> = [];\n    for (let i = 0; i < this.outOfStateCertificationList.length; i++) {\n      if (!(this.outOfStateCertificationList[i].id === id)) {\n        tmp.push(this.outOfStateCertificationList[i]);\n      }\n    }\n\n    this.outOfStateCertificationList = tmp;\n    this.list.emit(this.outOfStateCertificationList);\n  }\n\n  private convertOutOfStateCertificationToTableRow(info: OutOfStateCertification): OepaTableRow {\n    const row: OepaTableRow = { cells: [{ id: 'sel', value: 'edit' }], dataSource: info };\n    if (info.certificationNumber) { row.cells.push({ id: 'certificationNumber', value: info.certificationNumber }); }\n    if (info.state) { row.cells.push({ id: 'state', value: info.state }); }\n    row.actions = [\n      { title: 'edit', className: 'bi bi-pencil-fill' },\n      { title: 'delete', className: 'bi bi-x-lg' }\n    ];\n\n    if (this.disabled) {\n      row.actions = [ { title: 'view', className: 'bi bi-eye'} ];\n    }\n\n    return row;\n  }\n\n  ngOnInit() {\n    if(this.outOfStateCertificationList && this.outOfStateCertificationList.length) {\n      for (let i = 0; i < this.outOfStateCertificationList.length; i++) {\n        const row: OepaTableRow = this.convertOutOfStateCertificationToTableRow(this.outOfStateCertificationList[i]);\n        const tmp: Array<OepaTableRow> = [];\n        this.data.forEach((r) => {\n          tmp.push(r);\n        });\n        tmp.push(row);\n        this.data = tmp;\n      }\n    }\n  }\n\n  onCellClick(event: any) {\n    console.log('onCellClick: ' + JSON.stringify(event));\n  }\n\n}\n","<oepa-table id=\"outOfStateCentificationTable\" name=\"outOfStateCertificationTable\" [config]=\"config\" [data]=\"data\" [header]=\"header\" (cellClicked)=\"onCellClick($event)\" \n(actionClicked)=\"onActionClick($event)\">\n</oepa-table> \n\n<div class=\"row\">\n    <div class=\"col-sm-12 text-end\">\n        <button *ngIf=\"!isButtonDisabled\" class=\"navbar-form pull-right\" type=\"button\" class=\"btn btn-primary\" \n        (click)=\"addOutOfStateCertificationTableRow();\" id=\"AddOutOfStateCentificationBtn\">Add State Certification</button>\n    </div>\n</div>\n<div *ngIf=\"errorMessage\" class=\"row alert alert-danger\">\n    <div class=\"col-sm-12\">\n        <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage=''\">\n              </button>\n        <div>{{errorMessage}}</div>\n    </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\nimport { FormGroup} from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { EMPTY, empty, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\n\nimport { ConfirmationModalComponent, TemplateConfirmationModalComponent, NotesModalComponent, OepaMessage, OepaMessageType,  MessageListComponent, ValidationService, Note, FormValidator } from 'oepa-ui-lib';\nimport { OepaUserAccountService, OepaFileUtilService, OepaUserAccount, OepaTemplateInfo } from 'oepa-common-lib';\nimport { ShoppingCart } from 'oepa-ebiz-lib';\n\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\nimport { CertificationService } from '../common-service/certification.service';\nimport { CertificationApplication } from '../certification-application/certification-application';\nimport { CertificationMappingService } from '../common-service/certification-mapping.service';\nimport { NotificationRoutingService } from '../../../notification-common/notification-service/notification-routing.service';\nimport { CertificationPrivilegeTypes } from '../../certification-privilege-types';\nimport { RFI } from '../../rfi/rfi';\nimport { RfiModalComponent } from '../../rfi/rfi-modal/rfi-modal.component';\nimport { RfiService } from '../../rfi/rfi.service';\n\n@Component({\n  selector: 'oepa-certification-button-bar',\n  templateUrl: './certification-button-bar.component.html',\n  styleUrls: ['./certification-button-bar.component.css']\n})\nexport class CertificationButtonBarComponent implements OnInit {\n  public imageRoot = '/AngularWebApp/assets/images';\n  public validationErrorList: string[] = [];\n  public actionPending: string = '';\n  public formIsValid = false;\n  public applicationInCart = false;\n  public createNoteAllowed = false;\n  public reviewAllowed = false;\n  public externalUser = false;\n  public applicationStatusName = '';\n\n  @Output() validationErrorListUpdate:EventEmitter<Array<string>> = new EventEmitter<Array<string>>();\n  \n  private shoppingCart: ShoppingCart | undefined;\n\n  @Input() message: OepaMessage = new OepaMessage('', undefined);\n  @Input() certificationApplication: CertificationApplication | undefined;\n  @Input() mode: string = '';\n  @Input() userAccount: OepaUserAccount | undefined;\n  @Input() certificationApplicationFormGroup!: FormGroup;\n  @Input() showValidation:boolean = false;\n  @Output() showValidationChange = new EventEmitter<boolean>();\n\n  constructor(private modalService: BsModalService,\n    private router: Router,\n    private activatedRoute: ActivatedRoute,\n    private userAccountService: OepaUserAccountService,\n    private certificationService: CertificationService,\n    private certificationMappingService: CertificationMappingService,\n    private fileUtil: OepaFileUtilService,\n    private notificationRouting: NotificationRoutingService,\n    private validationService: ValidationService,\n    private rfiService: RfiService) { \n    \n    this.certificationService.retrieveShoppingCart().subscribe(\n    { next : cart => {\n      this.shoppingCart = cart;\n      this.updateAddToCartStatus();\n    }, error : err => {\n      console.log('retrieveShoppingCart failed: ' + err);\n    }});\n\n    this.userAccountService.retrieveAccountForCurrentUser().subscribe(\n    { next : (user) => {\n      this.userAccount = user;\n      this.externalUser = this.userAccount.type === 'E_BUSINESS_CENTER';\n      this.createNoteAllowed = this.userAccountService.accountHasPrivilege(this.userAccount, CertificationPrivilegeTypes.createNoteAllowed);\n      this.reviewAllowed = this.userAccountService.accountHasPrivilege(this.userAccount, CertificationPrivilegeTypes.reviewAllowed);\n      //console.log('reviewAllowed: ' + JSON.stringify(this.reviewAllowed));\n    }, error : err => {\n      console.log('Cannot retrieve user: ' + (err));\n    }});\n  }\n\n  private updateAddToCartStatus() {\n    this.applicationInCart = false;\n    if (this.certificationApplication && this.shoppingCart && this.shoppingCart.cartItems) {\n      this.shoppingCart.cartItems.forEach(cartItem => {\n        if (cartItem.typeID === this.certificationApplication?.id) {\n          this.applicationInCart = true;\n        }\n      });\n    }\n  }\n\n  ngOnInit() {\n    this.certificationService.retrieveCertificationApplicationStatuses().subscribe(\n    { next : statuses => {\n      this.applicationStatusName = this.certificationService.getCertificationApplicationStatusName(this.certificationApplication?.applicationStatus || '');\n    }, error : err => {\n      console.log('Cannot retrieve application statuses: ' + (err));\n    }});\n  }\n\n  public showMessage(msg: string, msgType: OepaMessageType, logMsg?: string) {\n    this.message = new OepaMessage(msg, msgType, logMsg);\n  }\n\n  public viewNotes() {\n    if (this.certificationApplication?.id) {\n      this.certificationService.retrieveCertificationApplicationNotes(this.certificationApplication.id).subscribe(\n      { next : results => {\n        if (results && results.success) {\n          const initialState = {\n            loginName: this.userAccount?.loginName,\n            external: this.externalUser,\n            notes: results.noteList,\n            defaultNoteType: { code: 'CertificationReview', name: 'Certification Application Review' },\n          }\n          this.modalService.show(NotesModalComponent, { initialState, class: 'modal-lg' ,ignoreBackdropClick: true});\n        } else {\n          this.showMessage('Failed viewing notes: ' + (results.log ? ': ' + results.log.join(', ') + '.' : '.'), OepaMessageType.ERROR);\n        }\n      }, error : err => {\n        this.showMessage('Failed viewing notes: ' + err, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  public editNotes() {\n    if (this.certificationApplication?.id) {\n      this.certificationService.retrieveCertificationApplicationNotes(this.certificationApplication.id).subscribe(\n      { next : results => {\n        if (results && results.success) {\n          const initialState = {\n            loginName: this.userAccount?.loginName,\n            external: this.externalUser,\n            createNoteAllowed: this.createNoteAllowed,\n            deleteAnyNoteAllowed: this.userAccountService.accountHasPrivilege(this.userAccount || {}, CertificationPrivilegeTypes.deleteAnyNoteAllowed),\n            deleteOwnNoteAllowed: this.userAccountService.accountHasPrivilege(this.userAccount || {}, CertificationPrivilegeTypes.deleteOwnNoteAllowed),\n            notes: results.noteList,\n            defaultNoteType: { code: 'CertificationReview', name: 'Certification Application Review' },\n          }\n          let modal = this.modalService.show(NotesModalComponent, { initialState, class: 'modal-lg',ignoreBackdropClick: true });\n          (<NotesModalComponent>modal.content).onAddNote.subscribe(\n          { next : (note : Note) => {\n            this.addNote(note, modal);\n          }});\n          (<NotesModalComponent>modal.content).onDeleteNote.subscribe(\n          { next : (note : Note) => {\n            this.deleteNote(note, modal);\n          }});\n        } else {\n          this.showMessage('Failed editing notes: ' + (results.log ? ': ' + results.log.join(', ') + '.' : '.'), OepaMessageType.ERROR);\n        }\n      }, error : err => {\n        this.showMessage('Failed retrieving notes: ' + err, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  private addNote(note: Note, modal: any) {\n    note.targetID = this.certificationApplication?.id;\n    note.targetType = { code: 'certificationAppl' };\n    this.certificationService.createCertificationApplicationNote(note).subscribe(\n    { next : result => {\n      if (result && result.success) {\n        this.refreshNotesModal(modal);\n      } else {\n        const message = 'Note could not be added' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        (<NotesModalComponent>modal.content).errorMessage = message;\n      }\n    }, error : err => {\n      (<NotesModalComponent>modal.content).errorMessage = 'Note could not be added: ' + err;\n    }});\n  }\n\n  private deleteNote(note: Note, modal: any) {\n    if (note.id) {\n      this.certificationService.deleteNote(note.id).subscribe(\n      { next : result => {\n        if (result && result.success) {\n          this.refreshNotesModal(modal);\n        } else {\n          const message = 'Note could not be deleted' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          (<NotesModalComponent>modal.content).errorMessage = message;\n        }\n      }, error : err => {\n        (<NotesModalComponent>modal.content).errorMessage = 'Note could not be deleted: ' + err;\n      }});\n    }\n  }\n\n  private refreshNotesModal(modal: any) {\n    if (this.certificationApplication?.id) {\n      this.certificationService.retrieveCertificationApplicationNotes(this.certificationApplication.id).subscribe(\n      { next : result => {\n        if (result && result.success) {\n          (<NotesModalComponent>modal.content).notes = result.noteList || [];\n        } else {\n          const message = 'Failed retrieving notes' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          (<NotesModalComponent>modal.content).errorMessage = message;\n        }\n      }, error : err => {\n        (<NotesModalComponent>modal.content).errorMessage = 'Failed retrieving notes: ' + err;\n      }});\n    }\n  }\n\n  public getCertificationApplicationObj(): AsbestosCertificationApplication {\n    let objCertificationApplication: AsbestosCertificationApplication = {};\n    objCertificationApplication = this.certificationMappingService.mapFormCertificationApplicationToCertificationApplicationObj(this.certificationApplication || {});\n\n    return objCertificationApplication;\n  }\n\n  public save() {\n    const newObjCertificationApplication = this.getCertificationApplicationObj();\n    this.actionPending = 'SAVE_APPLICATION';\n\n    this.certificationService.updateCertificationApplication(newObjCertificationApplication).subscribe(\n    { next : result => {\n      if (result && result.success) {        \n        this.showMessage('Certification Application has been saved', OepaMessageType.INFO, 'saved certificationApplication with id: ' + this.certificationApplication?.id);\n        this.certificationApplicationFormGroup.markAsPristine();\n      } else {\n        const message = 'Certification could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        this.showMessage(message, OepaMessageType.ERROR);\n      }\n      this.actionPending = '';\n    }, error : err => {\n      this.showMessage('An error occurred while saving the certificationApplication: ' + err, OepaMessageType.ERROR, err);\n      this.actionPending = '';\n    }});\n  }\n\n  public approve() {\n    this.actionPending = 'APPROVE_APPLICATION';\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Approve certification application?';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Are you sure you want to approve this application?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      const app = this.getCertificationApplicationObj();\n      this.approveApplication(app);\n    }});\n    (<ConfirmationModalComponent>modal.content).cancelClicked.subscribe(\n    { next : () => {\n      this.actionPending = '';\n    }});\n  }\n\n  private approveApplication(app: AsbestosCertificationApplication) {\n    this.certificationService.approveCertificationApplication(app).subscribe(\n    { next : result => {\n      if (result && result.success) {        \n        this.showMessage('Certification has been approved', OepaMessageType.INFO, 'approved certificationApplication with id: ' + this.certificationApplication?.id);\n        this.certificationApplicationFormGroup.markAsPristine();\n      } else {\n        const message = 'Certification application could not be approved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        this.showMessage(message, OepaMessageType.ERROR);\n      }\n      this.actionPending = '';\n      this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n    }, error : err => {\n      this.showMessage('An error occurred while approving the certification application: ' + err, OepaMessageType.ERROR, err);\n      this.actionPending = '';\n    }});\n  }\n\n  public markDenialPending() {\n    this.actionPending = 'MARK_DENIAL_PENDING';\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Mark application as Denial Pending?';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Are you sure you want to mark this application as Denial Pending?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      const app = this.getCertificationApplicationObj();\n      this.markApplicationDenialPending(app);\n    }});\n    (<ConfirmationModalComponent>modal.content).cancelClicked.subscribe(\n    { next : () => {\n      this.actionPending = '';\n    }});\n  }\n\n  private markApplicationDenialPending(app: AsbestosCertificationApplication) {\n    this.certificationService.updateCertificationApplicationToDenialPending(app).subscribe(\n    { next : result => {\n      if (result && result.success) {        \n        this.showMessage('Application has been marked Denial Pending', OepaMessageType.INFO);\n        this.actionPending = '';\n      } else {\n        const message = 'Application could not be marked Denial Pending' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        this.showMessage(message, OepaMessageType.ERROR);\n      }\n      this.actionPending = '';\n      this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n    }, error : err => {\n      this.showMessage('An error occurred while marking the application Denial Pending: ' + err, OepaMessageType.ERROR, err);\n      this.actionPending = '';\n    }});\n  }\n\n  public deny() {\n    this.actionPending = 'DENY_APPLICATION';\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Deny certification application?';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Are you sure you want to deny this application?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      const app = this.getCertificationApplicationObj();\n      this.denyApplication(app);\n    }});\n    (<ConfirmationModalComponent>modal.content).cancelClicked.subscribe(\n    { next : () => {\n      this.actionPending = '';\n    }});\n  }\n\n  private denyApplication(app: AsbestosCertificationApplication) {\n    this.certificationService.denyCertificationApplication(app).subscribe(\n    { next : result => {\n      if (result && result.success) {        \n        this.showMessage('certification has been denied', OepaMessageType.INFO, 'denied certificationApplication with id: ' + this.certificationApplication?.id);\n        this.actionPending = '';\n      } else {\n        const message = 'certification could not be denied' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        this.showMessage(message, OepaMessageType.ERROR);\n      }\n      this.actionPending = '';\n      this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n    }, error : err => {\n      this.showMessage('An error occurred while denying the certificationApplication: ' + err, OepaMessageType.ERROR, err);\n      this.actionPending = '';\n    }});\n  }\n\n  private mapCertificationTypeToRFIType(type:string):string {\n    let rfiType:string = '';\n    switch (type) {\n      case \"AbateSpec\":\n      rfiType = \"CertAS\";\n        break;\n      case \"EvalSpec\":\n      rfiType = \"CertES\";\n        break;\n      case \"AbateProjDesign\":\n      rfiType = \"CertPD\";\n        break;\n      case \"AirMonitorTech\":\n      rfiType = \"CertAM\";\n        break;\n      case \"AbateWorker\":\n      rfiType = \"CertWK\";\n        break;\n      default:\n        break;\n      }\n    return rfiType;\n  }\n\n  public requestInformation() {\n    this.actionPending = 'REQUEST_INFORMATION';\n    const app = this.getCertificationApplicationObj();\n    let rfiType:string = this.mapCertificationTypeToRFIType(app.certification?.certificationType || '');\n    if (app.id) {\n      this.rfiService.retrievePendingRFIForApplication(rfiType, app.id).subscribe(\n      { next : result => {\n        if (result && result.success && result.obj) {\n          const initialState = {\n            rfi: result.obj\n          }\n          const modal: BsModalRef = this.modalService.show(RfiModalComponent, { initialState, class: 'modal-xl',ignoreBackdropClick: true });\n          (<RfiModalComponent>modal.content).onReviewLetter.subscribe(\n          { next : (rfi : RFI) => {\n            this.certificationService.downloadRFILetter(app.id!, rfi).subscribe(\n            { next : (doc) => {\n              let mimeType = this.fileUtil.mimeTypeForExtension('PDF');\n              let fileName = 'RFILetter.pdf';\n              this.fileUtil.downloadFile(doc, mimeType, fileName);\n              (<RfiModalComponent>modal.content).actionPending = '';\n            }, error : err => {\n              (<RfiModalComponent>modal.content).errorMessage = 'Download RFI Preview failed: ' + err;\n            }});\n          }});\n          (<RfiModalComponent>modal.content).onSubmit.subscribe(\n          { next : (rfi : RFI) => {\n              this.markApplicationDeficient(modal, app, rfi);   \n          }});\n          (<RfiModalComponent>modal.content).onClose.subscribe(\n          { next : () => {\n            this.actionPending = '';\n          }});\n        } else {\n          const message = 'An error occurred while retrieving RFI data' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          this.showMessage(message, OepaMessageType.ERROR);\n          this.actionPending = '';\n        }\n      }, error : err => {\n        this.showMessage('An error occurred while retrieving RFI data: ' + err, OepaMessageType.ERROR, err);\n        this.actionPending = '';\n      }});\n    }\n  }\n\n  private markApplicationDeficient(modal: BsModalRef, app: AsbestosCertificationApplication, rfi: RFI) {\n    if (app.id) {\n      this.certificationService.markCertificationApplicationDeficient(app.id, rfi).subscribe(\n      { next : result => {\n        if (result && result.success) {\n          modal.hide(); \n          this.showMessage('Certification has been marked deficient', OepaMessageType.INFO, 'marked certificationApplication with id deficient: ' + this.certificationApplication?.id);\n          let sendEmailWarning: string | undefined = undefined;\n          if (app.mailToEmployer) {\n            if (app.employerEmail == null || app.employerEmail.length == 0) {\n              sendEmailWarning = 'No employer email address to send,';\n            } \n          } else if (app.applicantEmail == null || app.applicantEmail.length == 0) {\n            sendEmailWarning = 'No applicant email address to send,';\n          }\n          if (sendEmailWarning) {\n            const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n            (<ConfirmationModalComponent>modal.content).headerText = 'No email address to send';\n            (<ConfirmationModalComponent>modal.content).bodyText = sendEmailWarning +  ' but can proceed to the next step in the process to print off letter.';\n            (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'OK';\n            (<ConfirmationModalComponent>modal.content).cancelBtnLabel = '';\n            (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n            { next : () => {}});\n          } \n          this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n          this.actionPending = '';\n        } else {\n          (<RfiModalComponent>modal.content).errorMessage = 'Certification could not be marked deficient' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n        }\n      }, error : err => {\n        (<RfiModalComponent>modal.content).errorMessage = 'An error occurred while marking the Certification application deficient: ' + err;\n      }});\n    }\n  }\n\n  \n  public validate() {\n    const newObjCertificationApplication = this.getCertificationApplicationObj();\n    this.showValidationChange.emit(true);\n    this.message = new OepaMessage('', undefined);;\n    this.validationErrorList = [];\n    this.certificationService.validateCertificationApplication(newObjCertificationApplication).subscribe(\n    { next : formValidators => {\n      this.handleValidation(formValidators);\n    }, error : err => {\n      this.showMessage('An error occurred while validating: ' + err, OepaMessageType.ERROR);\n    }});\n\n  }\n\n  private handleValidation(formValidators : FormValidator[]) {\n    if (formValidators) {\n      let fieldValidators : {[key: string] : FormValidator[]} =  this.validationService.processValidators(this.certificationApplicationFormGroup, formValidators)\n      if (fieldValidators && fieldValidators['form']) {\n        this.certificationApplicationFormGroup.setErrors({'invalid': true});\n        fieldValidators['form'].forEach(error => {\n          this.validationErrorList.push(error.message!);\n        });\n      } else {\n        if (this.certificationApplicationFormGroup.valid) {\n          this.message = new OepaMessage('Form is valid', OepaMessageType.INFO);\n        } else {\n          this.message = new OepaMessage('Form Contains Validation Errors', OepaMessageType.ERROR);\n        }\n      }\n    }\n  }\n\n  displayValidationModal(errors: Array<string>) {\n    const modal: BsModalRef = this.modalService.show(TemplateConfirmationModalComponent, { ignoreBackdropClick: true });\n    const content: OepaTemplateInfo = this.createValidationErrorsForModal(errors);\n    (<TemplateConfirmationModalComponent>modal.content).headerText = 'Validation Errors';\n    (<TemplateConfirmationModalComponent>modal.content).content = content;\n    (<TemplateConfirmationModalComponent>modal.content).confirmBtnLabel = ''; // don't need confirmation\n    (<TemplateConfirmationModalComponent>modal.content).cancelBtnLabel = 'Close';\n  }\n\n  createValidationErrorsForModal(errors: Array<string>): OepaTemplateInfo {\n    return {\n      component: MessageListComponent,\n      inputs: [\n        { name: 'messageList', value: errors },\n        { name: 'messageLabel', value: 'Validation Errors' },\n      ],\n      object: this\n    };\n  }\n\n  public addToCart() {\n    const newObjCertificationApplication = this.getCertificationApplicationObj();\n    this.message = new OepaMessage('', undefined);\n    this.validationErrorList = [];\n\n\n    this.actionPending = 'ADD_APPLICATION_TO_CART';\n    \n    this.certificationService.updateCertificationApplication(newObjCertificationApplication).pipe(\n      mergeMap(result => {\n        if (result && result.success) {\n          // this.showMessage('Certification application has been saved', OepaMessageType.INFO, 'saved certificationApplication with id: ' + this.certificationApplication.id);\n          this.certificationApplicationFormGroup.markAsPristine();\n          return this.certificationService.validateCertificationApplication(newObjCertificationApplication).pipe(map( formValidators => {return formValidators}))\n        } else {\n          const message = 'certification application could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          this.showMessage(message, OepaMessageType.ERROR);\n          return EMPTY;\n        }\n        this.actionPending = '';\n      })\n      )\n      .subscribe(\n      { next : formValidators => {\n        this.handleValidation(formValidators);\n        if (this.certificationApplicationFormGroup.valid) {\n          const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n          (<ConfirmationModalComponent>modal.content).headerText = 'Add certification application to cart?';\n          (<ConfirmationModalComponent>modal.content).bodyText = 'Are you sure you want to add certification application to cart?';\n          (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n          (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n          (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n          { next : () => {\n            if (this.userAccount?.loginName) {\n              this.certificationService.addCertificationApplicationToShoppingCart(this.userAccount.loginName, this.certificationApplication || {}, this.shoppingCart || {}).subscribe(\n              { next : updatedCart => {\n                this.shoppingCart = updatedCart;\n                this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n              }, error : err => {\n                this.showMessage('Add to cart failed: ' + err, OepaMessageType.ERROR);\n                this.actionPending = '';\n              }});\n            }\n          }});\n          (<ConfirmationModalComponent>modal.content).cancelClicked.subscribe(\n          { next : () => {\n            this.actionPending = '';\n          }});\n        } else {\n          this.actionPending = '';\n        }\n      }, error : err => {\n          this.showMessage('An error occurred while adding the application to the cart: ' + err, OepaMessageType.ERROR);\n          this.actionPending = '';\n      }});\n  }\n\n  public submit() {\n    this.actionPending = 'SUBMIT_APPLICATION';\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Submit Application?';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Are you sure you want to submit the application?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      const application = this.getCertificationApplicationObj();\n      this.submitApplication(application);\n    }});\n    (<ConfirmationModalComponent>modal.content).cancelClicked.subscribe(\n    { next : () => {\n      this.actionPending = '';\n    }});\n  }\n\n  private submitApplication(app: AsbestosCertificationApplication) {\n    this.message = new OepaMessage('', undefined);;\n    this.validationErrorList = [];\n\n    this.certificationService.updateCertificationApplication(app).pipe(\n      mergeMap(result => {\n        if (result && result.success) {\n          this.certificationApplicationFormGroup.markAsPristine();\n          if (this.externalUser) {\n            return this.certificationService.validateCertificationApplication(app).pipe(map( formValidators => {return formValidators}))\n          } else {\n            return of([]);\n          }\n        } else {\n          const message = 'Certification application could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          this.showMessage(message, OepaMessageType.ERROR);\n          return EMPTY;\n        }\n        this.actionPending = '';\n      })\n      ).subscribe(\n      { next : formValidators => {\n        this.handleValidation(formValidators);\n        if (this.certificationApplicationFormGroup.valid) {\n          this.certificationService.submitCertificationApplication(app).subscribe(\n          { next : result => {\n            if (result.success) {\n               if (result?.obj?.revenue?.id) {\n                this.displayRevenueIDModal(result.obj.revenue.id);\n              this.actionPending = '';\n              }\n            } else {\n              const message = 'Certification application could not be submitted' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n              this.showMessage(message, OepaMessageType.ERROR);\n              this.actionPending = '';\n            }\n          }, error : err => {\n            this.showMessage('An error occurred while submitting the application: ' + err, OepaMessageType.ERROR);\n            this.actionPending = '';\n          }});\n         } else {          \n           this.actionPending = '';\n         }\n      }, error : err => {\n          this.showMessage('An error occurred while submitting the application: ' + err, OepaMessageType.ERROR);\n          this.actionPending = '';\n      }});\n  }\n\n  private displayRevenueIDModal(revenueID: string) {\n      if (revenueID != null) {\n        const modalDel: BsModalRef = this.modalService.show(ConfirmationModalComponent, { backdrop: 'static',ignoreBackdropClick: true });\n        (<ConfirmationModalComponent>modalDel.content).headerText = 'Revenue ID';\n        (<ConfirmationModalComponent>modalDel.content).bodyText = revenueID;\n        (<ConfirmationModalComponent>modalDel.content).confirmBtnLabel = 'OK';\n        (<ConfirmationModalComponent>modalDel.content).cancelBtnLabel = '';\n        (<ConfirmationModalComponent>modalDel.content).confirmClicked.subscribe(\n        { next : () => {\n          this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n        }});\n      } else {\n        this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n      }\n  }\n\n  public resubmit() {\n    const newObjCertificationApplication = this.getCertificationApplicationObj();\n    this.message = new OepaMessage('', undefined);;\n    this.validationErrorList = [];\n\n    this.actionPending = 'RESUBMIT_APPLICATION';\n\n    this.certificationService.updateCertificationApplication(newObjCertificationApplication).pipe(\n      mergeMap(result => {\n        if (result && result.success) {\n          // this.showMessage('Certification application has been saved', OepaMessageType.INFO, 'saved CertificationApplication with id: ' + this.CertificationApplication.id);\n          this.certificationApplicationFormGroup.markAsPristine();\n          return this.certificationService.validateCertificationApplication(newObjCertificationApplication).pipe(map( formValidators => {return formValidators}))\n        } else {\n          const message = 'Certification application could not be saved' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n          this.showMessage(message, OepaMessageType.ERROR);\n          return EMPTY;\n        }\n        this.actionPending = '';\n      })\n      )\n      .subscribe(\n      { next : formValidators => {\n        this.handleValidation(formValidators);\n        if (this.certificationApplicationFormGroup.valid) {\n          this.certificationService.resubmitCertificationApplication(newObjCertificationApplication).subscribe(\n          { next : result => {\n            if (result.success) {\n              this.actionPending = '';\n              if (this.externalUser) {\n                this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n              } else {\n                // allow internal user to review app immediately after resubmitting\n                this.router.navigate(['certification-application', newObjCertificationApplication.id, 'review'], { relativeTo: this.activatedRoute.parent });\n              }\n            } else {\n              const message = 'Certification application could not be resubmitted' + (result.log ? ': ' + result.log.join(', ') + '.' : '.');\n              this.showMessage(message, OepaMessageType.ERROR);\n              this.actionPending = '';\n            }\n          }, error : err => {\n            this.showMessage('An error occurred while submitting the application: ' + err, OepaMessageType.ERROR);\n            this.actionPending = '';\n          }});\n        } else {\n          this.actionPending = '';\n        }\n      }, error : err => {\n          this.showMessage('An error occurred while submitting the application: ' + err, OepaMessageType.ERROR);\n          this.actionPending = '';\n      }});\n  }\n\n  public close() {\n    if (!this.certificationApplicationFormGroup.pristine) {\n      const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n      (<ConfirmationModalComponent>modal.content).headerText = 'Close without saving?';\n      (<ConfirmationModalComponent>modal.content).bodyText = 'There are unsaved changes. Are you sure you want to close this page?';\n      (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Close';\n      (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'Cancel';\n      (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n      { next : () => {\n        // this.router.navigate(['contractor-certification'], { relativeTo: this.route.parent });\n        this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n      }});\n    } else {\n      // this.router.navigate(['contractor-certification'], { relativeTo: this.route.parent });\n      this.router.navigate([this.notificationRouting.getPreviousRoute()], { relativeTo: this.activatedRoute.parent });\n    }\n  }\n\n  public downloadCertificationApplicationPDF() {\n    const appID: string = this.certificationApplication?.id || '';\n    console.log('Application ID = ' + appID);\n    this.certificationService.downloadCertificationApplication(appID).subscribe(\n    { next : (doc) => {\n        let mimeType = this.fileUtil.mimeTypeForFile('.PDF');\n        console.log('mimeType = ' + mimeType);\n        let fileName = 'certificationApplication-' + appID + '.pdf';\n        console.log('fileName = ' + fileName);\n        this.fileUtil.downloadFile(doc, mimeType, fileName);\n     }, error : err => {\n          this.showMessage('Download pdf for  application ID ' + appID + ' failed: ' + err, OepaMessageType.ERROR);\n     }});\n  }\n\n}\n","<div class=\"footer fixed-bottom\">\n    <oepa-message [message]=\"message\"></oepa-message>\n    <oepa-message-list *ngIf=\"validationErrorList && validationErrorList.length > 0\" messageLabel=\"Form Contains Validation Errors\" [messageList]=\"validationErrorList\" messageClass=\"alert alert-danger\"></oepa-message-list>\n  </div>\n<nav class=\"navbar navbar-expand-lg navbar-dark bg-dark fixed-bottom\">\n    <a *ngIf=\"mode === 'edit'\" class=\"navbar-brand\" (click)=\"downloadCertificationApplicationPDF()\" target=\"_blank\" tooltip=\"Click Application Certification # to Download Application PDF (save application first if application is updated)\">\n        <span class=\"navbar-text\"> Certification: {{certificationApplication?.certification?.certificationNumber}} </span>\n    </a>\n    <a *ngIf=\"mode !== 'edit'\" class=\"navbar-brand\" (click)=\"downloadCertificationApplicationPDF()\" target=\"_blank\" tooltip=\"Click Application Certification # to Download Application PDF\">\n        <span class=\"navbar-text navbar-brand\"> Certification: {{certificationApplication?.certification?.certificationNumber}} </span>\n    </a>\n        &nbsp;\n        <span class=\"navbar-text navbar-brand\"> | Application: {{certificationApplication?.id}} </span>\n        &nbsp;\n        <span class=\"navbar-text navbar-brand\"> <em>{{applicationStatusName}} </em> </span>\n        &nbsp;\n              <span class=\"navbar-text navbar-brand\"> | Revenue: {{certificationApplication?.revenue?.id}} </span>\n      &nbsp;\n      <span class=\"navbar-text navbar-brand\">\n          <em>{{certificationApplication?.revenue?.originalAmount?.formattedString}}</em>\n      </span>\n  <form class=\"navbar-form ms-auto\">\n\n    <div class=\"btn-toolbar\" role=\"toolbar\">\n      <div *ngIf=\"!externalUser\" class=\"btn-group me-2\" role=\"group\">\n        <button *ngIf=\"!createNoteAllowed\" type=\"button\" id=\"ViewNotesBtn\" class=\"btn btn-light\" (click)=\"viewNotes()\" [disabled]=\"actionPending\">View Notes</button>\n        <button *ngIf=\"createNoteAllowed\" type=\"button\" id=\"EditNotesBtn\" class=\"btn btn-light\" (click)=\"editNotes()\" [disabled]=\"actionPending\">Edit Notes</button>\n      </div>\n\n      <div *ngIf=\"mode === 'edit'\" class=\"btn-group me-2\" role=\"group\">\n        <span *ngIf=\"actionPending === 'VALIDATE_APPLICATION'\" id=\"waitForValidate\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'VALIDATE_APPLICATION'\" id=\"ValidateApplicationBtn\" type=\"button\" class=\"btn btn-light\" (click)=\"validate()\" [disabled]=\"actionPending\">Validate</button>\n      </div>\n\n      <div *ngIf=\"mode === 'edit'\" class=\"btn-group me-2\" role=\"group\">\n        <span *ngIf=\"actionPending === 'SAVE_APPLICATION'\" id=\"waitForSave\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'SAVE_APPLICATION'\"\n          id=\"SaveApplicationBtn\" type=\"button\" class=\"btn btn-light\" (click)=\"save()\" [disabled]=\"actionPending\">Save</button>\n      </div>\n\n      <span *ngIf=\"!externalUser && actionPending === 'MARK_DENIAL_PENDING'\" id=\"waitForDenialPending\">\n        <span class=\"spinner-border text-primary\" role=\"status\"></span>\n      </span>\n      <button *ngIf=\"!externalUser && reviewAllowed && actionPending !== 'MARK_DENIAL_PENDING' && certificationApplication?.applicationType !== 'Replace'\n             && ((certificationApplication?.applicationStatus === 'ReadyForReview' && mode === 'review')  || certificationApplication?.applicationStatus === 'Deficient')\"\n        id=\"DenyApplicationBtn\" type=\"button\" class=\"btn btn-light me-2\" (click)=\"markDenialPending()\" [disabled]=\"actionPending\">Mark Denial Pending</button>\n\n      <span *ngIf=\"actionPending === 'DENY_APPLICATION'\" id=\"waitForDeny\">\n        <span class=\"spinner-border text-primary\" role=\"status\"></span>\n      </span>\n      <button *ngIf=\"actionPending !== 'DENY_APPLICATION' && certificationApplication?.applicationType !== 'Replace'\n                     && certificationApplication?.applicationStatus === 'DenialPending' && mode === 'review' && reviewAllowed\"\n        id=\"DenyApplicationBtn\" type=\"button\" class=\"btn btn-light me-2\" (click)=\"deny()\" [disabled]=\"actionPending\">Deny</button>\n\n      <div *ngIf=\"certificationApplication?.applicationStatus === 'ReadyForReview' && mode === 'review' && certificationApplication?.applicationType !== 'Replace'\" class=\"btn-group\" role=\"group\">\n        <span *ngIf=\"actionPending === 'APPROVE_APPLICATION'\" id=\"waitForApprove\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'APPROVE_APPLICATION' && reviewAllowed\" \n          id=\"ApproveApplicationBtn\" type=\"button\" class=\"btn btn-light me-2\" (click)=\"approve()\" [disabled]=\"actionPending\">Approve</button>\n\n\n        <span *ngIf=\"actionPending === 'REQUEST_INFORMATION'\" id=\"waitForRFI\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'REQUEST_INFORMATION' && reviewAllowed\"\n          id=\"RequestInformationBtn\" type=\"button\" class=\"btn btn-light me-2\" (click)=\"requestInformation()\" [disabled]=\"actionPending\">Request Information</button>\n      </div>\n\n      <div *ngIf=\"certificationApplication?.source == 'eBusinessCenter' && !applicationInCart && (certificationApplication?.applicationStatus === 'Pending' && mode === 'edit')\" class=\"btn-group me-2\" role=\"group\">\n        <span *ngIf=\"actionPending === 'ADD_APPLICATION_TO_CART'\" id=\"waitForAddToCart\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'ADD_APPLICATION_TO_CART'\" id=\"addToCartBtn\"\n          type=\"button\" class=\"btn btn-light\" (click)=\"addToCart()\" [disabled]=\"actionPending\">Add to cart</button>\n      </div>\n\n      <div *ngIf=\"certificationApplication?.source === 'Mail' && certificationApplication?.applicationStatus === 'Pending' && mode === 'edit'\" class=\"btn-group me-2\" role=\"group\">\n        <span *ngIf=\"actionPending === 'SUBMIT_APPLICATION'\" id=\"waitForSubmit\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'SUBMIT_APPLICATION'\" id=\"submitBtn\"\n          type=\"button\" class=\"btn btn-light\" (click)=\"submit()\" [disabled]=\"actionPending\">Submit</button>\n      </div>\n\n      <div *ngIf=\"mode === 'edit' && (certificationApplication?.applicationStatus === 'Deficient' || certificationApplication?.applicationStatus === 'DenialPending')\" class=\"btn-group me-2\" role=\"group\">\n        <span *ngIf=\"actionPending === 'RESUBMIT_APPLICATION'\" id=\"waitForResubmit\">\n          <span class=\"spinner-border text-primary\" role=\"status\"></span>\n        </span>\n        <button *ngIf=\"actionPending !== 'RESUBMIT_APPLICATION'\" id=\"resubmitBtn\"\n          type=\"button\" class=\"btn btn-light\" (click)=\"resubmit()\" [disabled]=\"actionPending\">Submit</button>\n      </div>\n\n\n      <div class=\"btn-group me-2\" role=\"group\">\n        <button id=\"CloseApplicationBtn\" type=\"button\" class=\"btn btn-light\" (click)=\"close()\" [disabled]=\"actionPending\">Close</button>\n      </div>\n    </div>\n  </form>\n</nav>\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { CertificationService } from '../../common-service/certification.service';\nimport { TrainingCourse } from '../../server/training-course';\nimport { OepaAttachment, OepaFileUtilService, OepaMappingService } from 'oepa-common-lib';\nimport { OepaTableConfig, OepaTableHeader, OepaTableRow } from 'oepa-ui-lib';\nimport { TrainingRoster } from '../../../course-management/server/training-roster';\nimport { NotificationService } from '../../../../notification-common/notification-service/notification.service';\nimport { NotificationMappingService } from '../../../../notification-common/notification-service/notification-mapping.service';\n\n@Component({\n  selector: 'oepa-training-course-modal',\n  templateUrl: './training-course-modal.component.html',\n  styleUrls: ['./training-course-modal.component.css']\n})\nexport class TrainingCourseModalComponent implements OnInit {\n  public trainingCourseFormGroup!: FormGroup;\n  public errorMessage: string = '';\n  public showTable = false;\n  public showFileUpload = true;\n  public busy!: boolean;\n  public inProgressMsg: string = '';\n  public certTblConfig: OepaTableConfig = {\n    hideFooter: true\n  };\n  public certTblHeader: OepaTableHeader = {\n    columns: [\n      { title: '', id: 'select', sort: 'none', singleSelectColumn: true, className: 'select-col' },\n      { title: 'Course Type', id: 'courseType', sort: 'none' },\n      { title: 'Certificate Number', id: 'certificateNumber', sort: 'none' },\n      { title: 'First Name', id: 'firstName', sort: 'none' },\n      { title: 'Last Name', id: 'lastName', sort: 'none' },\n      { title: 'Passed', id: 'passed', sort: 'none' },\n      { title: 'Certificate Expiration', id: 'expirationDate', sort: 'none' }\n    ]\n  };\n  public certTblData: Array<OepaTableRow> = [];\n  private selectedRoster: TrainingRoster | undefined;\n\n  @Input() showValidation: boolean = false;\n  @Input() lastName: string = '';\n  @Input() last4ssn: string = '';\n  @Input() certificationType: string = '';\n  @Input() trainingCourse: TrainingCourse | undefined;\n  @Input() usedCertificateNumbers: string[] = [];\n\n  @Output() modalSave: EventEmitter<TrainingCourse> = new EventEmitter<TrainingCourse>();\n  \n  constructor(private fb: FormBuilder, public bsModalRef: BsModalRef,\n              private fileUtilService: OepaFileUtilService,\n              private notificationService: NotificationService,\n              private mappingService: NotificationMappingService,\n              private oepaMappingService: OepaMappingService,\n              public certificationService:CertificationService) { \n              }\n  \n  ngOnInit() {\n    this.refreshTable();\n    this.createTrainingCourseForm();\n  }\n\n  private refreshTable() {\n    this.showTable = false;\n    this.certTblData = [];\n    this.inProgressMsg = 'Searching for training certificates...';\n    this.certificationService.retrieveRostersForIndividualAndCertificationType(this.lastName, this.last4ssn, this.certificationType).subscribe(\n    { next : rosters => {\n      if (rosters && rosters.length > 0) {\n        rosters.forEach(roster => {\n          if (this.usedCertificateNumbers && roster.certificateNumber && this.usedCertificateNumbers.indexOf(roster.certificateNumber) < 0) {\n            this.certTblData.push(this.convertRosterToTableRow(roster));\n          }\n        });\n        this.certTblData = this.certTblData.slice();\n        this.showTable = this.certTblData.length > 0 && (!this.trainingCourse?.otherTrainingDocument || !this.trainingCourse.otherTrainingDocument.userFilename);\n      }\n      this.inProgressMsg = '';\n    }, error : err => {\n      this.errorMessage = 'Failed retrieving course certificates: ' + err;\n      this.inProgressMsg = '';\n    }});\n  }\n\n  private convertRosterToTableRow(roster: TrainingRoster): OepaTableRow {\n    const row: OepaTableRow = {\n      cells: [\n        { id: 'courseType', value: roster.courseTypeName },\n        { id: 'certificateNumber', value: roster.certificateNumber },\n        { id: 'firstName', value: roster.firstName },\n        { id: 'lastName', value: roster.lastName },\n        { id: 'passed', value: roster.pass ? 'Yes' : 'No' },\n        { id: 'expirationDate', value: roster.certificateExpirationDate ? this.oepaMappingService.mapDateToDateDateString(roster.certificateExpirationDate) : '', \n          sortValue: roster.certificateExpirationDate ? new Date(roster.certificateExpirationDate) : null, \n          className: (roster.certificateExpirationDate && roster.certificateExpirationDate < new Date() ? 'alert alert-danger' : undefined) }\n      ],\n      dataSource: roster,\n      selectable: true\n    };\n    return row;\n  }\n\n  public onRowSelect(selectedRows: Array<OepaTableRow>) {\n    if (selectedRows && selectedRows.length === 1 && this.trainingCourse) {\n      this.selectedRoster = selectedRows[0].dataSource;\n      this.trainingCourse.rosterID = this.selectedRoster?.id;\n      this.trainingCourse.oepaTrainingCertificationNumber = this.selectedRoster?.certificateNumber;\n      this.trainingCourse.courseTypeName = this.selectedRoster?.courseTypeName;\n      this.trainingCourse.certificateExpirationDate = this.selectedRoster?.certificateExpirationDate;\n      this.showFileUpload = false;\n    }\n  }\n\n  private createTrainingCourseForm() {\n    const formObj = {\n      otherTrainingDocument: [ this.trainingCourse && this.trainingCourse.otherTrainingDocument ? this.trainingCourse.otherTrainingDocument.userFilename : '' ]        \n    };\n    this.trainingCourseFormGroup = this.fb.group(formObj);\n  }\n  \n  public isFormTrainingCourseEmpty(trainingCourse: TrainingCourse): boolean {\n    let empty = false;\n    if (!trainingCourse) {\n      empty = true;\n    } else if (this.mappingService.isEmptyString(trainingCourse.id) &&\n      this.mappingService.isEmptyString(trainingCourse.oepaTrainingCertificationNumber)) {\n      empty = true;\n    }\n    return empty;\n  }\n\n  save() {\n    this.busy = true;\n    this.modalSave.emit(this.trainingCourse);\n    this.bsModalRef.hide();\n  }  \n\n  onFileOtherTrainingDocumentChange(attachment: OepaAttachment) {\n    this.busy = true;\n    if (!this.trainingCourse?.id || this.trainingCourse.id == '') {\n      this.certificationService.createTrainingCourse(this.trainingCourse || {}).subscribe(\n      { next : result => {\n        if (result?.success && result?.trainingCourse?.applicationID && result?.trainingCourse?.id) {\n          this.trainingCourse = result.trainingCourse;\n          this.createOtherTrainingDocument(result.trainingCourse.applicationID, result.trainingCourse.id, attachment);\n        } else {\n          this.errorMessage = 'Failed creating training course' + (result.log ? ': ' + result.log.join(', ') : '.');\n          this.busy = false;\n        }\n      }, error : err => {\n        this.errorMessage = 'Failed creating training course: ' + err.message;\n        this.busy = false;\n      }});\n    } else {\n      if (this.trainingCourse?.applicationID) {\n        this.createOtherTrainingDocument(this.trainingCourse.applicationID, this.trainingCourse.id, attachment);\n      }\n    }\n  }\n\n  private createOtherTrainingDocument(applicationID: string, trainingCourseID: string, attachment: OepaAttachment) {\n    this.certificationService.createNamedTrainingCourseAttachment(applicationID, trainingCourseID, 'Other_Training_Document', attachment).subscribe(\n    { next : (id) => {\n      if (id) {\n        attachment.id = id;\n        if (this.trainingCourse) {\n          this.trainingCourse.otherTrainingDocument = attachment;\n        }\n        this.trainingCourseFormGroup.disable();\n        this.refreshTable();\n      } else {\n        this.errorMessage = 'File upload failed';\n      }\n      this.busy = false;\n    }, error : err => {\n      this.errorMessage = 'File upload failed: ' + err.message;\n      this.busy = false;\n    }});\n  }\n\n  onFileOtherTrainingDocumentRemoved(attachment: OepaAttachment) {\n    this.busy = true;\n    if (this.trainingCourse?.applicationID && this.trainingCourse?.id && attachment?.id) {\n      this.certificationService.deleteNamedTrainigCourseAttachment(this.trainingCourse.applicationID, this.trainingCourse.id, 'Other_Training_Document', attachment.id).subscribe(\n      { next : () => {\n        if (this.trainingCourse) {\n          this.trainingCourse.otherTrainingDocument = undefined;\n        }\n        this.busy = false;\n        this.refreshTable();\n      }, error : err => {\n        this.errorMessage ='Delete file failed' + (err.error.message ? ': ' + err.error.message : '');\n        this.busy = false;\n      }});\n    }\n  }\n  \n  onFileDownloaded(attachment: OepaAttachment) {\n    if (attachment.id && attachment.userFilename) {\n      this.notificationService.getAttachmentContent(attachment.id).subscribe(\n      { next : (content) => {\n        const mimeType:string = this.fileUtilService.mimeTypeForFile(attachment.userFilename!);\n        if (mimeType) {\n          this.fileUtilService.downloadFile(content, mimeType, attachment.userFilename);\n        } else {\n          this.errorMessage = 'Unable to download file: ' + attachment.userFilename + '. Cannot determine mime type';\n        }\n      }, error : err => {\n        this.errorMessage ='File download failed' + (err.error.message ? ': ' + err.error.message : '');\n      }});\n    }\n  }\n}\n","<div class=\"modal-header\">\n    <h4 class=\"modal-title\">Training Course(s)</h4>\n    <button type=\"button\" class=\"btn-close\" (click)=\"bsModalRef.hide()\">\n    </button>\n</div>\n    \n<div class=\"modal-body\">\n    <form>\n        <div class=\"row\">\n            <div *ngIf=\"inProgressMsg\" class=\"col-md-12\">\n                <div class=\"alert alert-info text-center\">\n                  <span class=\"spinner-border text-primary\" role=\"status\"></span> \n                  {{inProgressMsg}}\n                </div>\n            </div>\n          <div *ngIf=\"showTable\" class=\"col-md-12\">\n            <div class=\"alert alert-info\">\n              Select a certificate from the table below if applicable.\n            </div>\n            <oepa-table [config]=\"certTblConfig\" [data]=\"certTblData\" [header]=\"certTblHeader\" tableId=\"certificateTable\" (rowSelected)=\"onRowSelect($event)\"></oepa-table>\n          </div>\n          <div *ngIf=\"!showTable\" class=\"col-md-12\">\n              <div class=\"alert alert-warning\">\n                No training course certificates were found for this applicant and certification type.\n              </div>\n          </div>\n          <div *ngIf=\"showFileUpload\" class=\"col-md-12\">\n            <div class=\"alert alert-info\">\n              If training was not taken through an Ohio EPA approved training course provider, attach a copy of the applicant’s training \n              course certificate(s) to this application.\n            </div>\n          </div>\n          <div *ngIf=\"showFileUpload\" class=\"col-md-12\">\n            <oepa-file-upload [group]=\"trainingCourseFormGroup\" field=\"otherTrainingDocument\" errorLabel=\"Other Training Document\"\n              [showValidation]=\"showValidation\" [attachment]=\"trainingCourse?.otherTrainingDocument\"\n              (fileUploaded)=\"onFileOtherTrainingDocumentChange($event)\" \n              (fileRemoved)=\"onFileOtherTrainingDocumentRemoved($event)\"\n              (download)=\"onFileDownloaded($event)\">\n            </oepa-file-upload>\n          </div>  \n        </div> \n    </form>\n</div>\n<div class=\"modal-footer d-block\">\n  <div *ngIf=\"errorMessage\">\n    <div class=\"alert alert-danger\">\n      {{errorMessage}}\n    </div>\n  </div>\n  <div class=\"row\">  \n    <div *ngIf=\"busy\" class=\"col-sm-12 text-center\">\n      <div class=\"alert alert-info text-center\">\n        <span class=\"spinner-border text-primary\" role=\"status\"></span> \n      </div>\n    </div>\n    <div *ngIf=\"!busy\" class=\"col-sm-12 text-center\">\n        <button type=\"button\" class=\"btn btn-primary me-2\"  id=\"SaveTrainingCourseBtn\" \n        [disabled]=\"!trainingCourse?.otherTrainingDocument && !trainingCourse?.oepaTrainingCertificationNumber\" \n        (click)=\"save()\">Save</button>\n      <button id=\"CancelTrainingCourseBtn\" type=\"button\" class=\"btn btn-primary\" \n        [disabled]=\"trainingCourse?.otherTrainingDocument\" \n        (click)=\"bsModalRef.hide()\">Cancel</button>\n    </div>\n  </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\n\nimport { OepaTableHeader, OepaTableRow, OepaTableConfig, OepaActionEvent, ConfirmationModalComponent, OepaTableCellClickEvent } from 'oepa-ui-lib';\nimport { OepaFileUtilService, OepaMappingService } from 'oepa-common-lib';\n\nimport { CertificationService } from '../../common-service/certification.service';\nimport { TrainingCourse } from '../../server/training-course';\nimport { TrainingCourseModalComponent } from '../training-course-modal/training-course-modal.component';\nimport { NotificationService } from '../../../../notification-common/notification-service/notification.service';\n\n@Component({\n  selector: 'oepa-training-course-table',\n  templateUrl: './training-course-table.component.html',\n  styleUrls: ['./training-course-table.component.css']\n})\nexport class TrainingCourseTableComponent implements OnInit {\n  private buttonDisabled = false;\n  readonly trainingDocumentName: string = 'Other_Training_Document';\n  errorMessage: string = '';\n  private mTrainingCourseList: Array<TrainingCourse> = [];\n  \n  public headers: Array<OepaTableHeader> = [];\n  public data: Array<OepaTableRow> = [];\n\n  public config: OepaTableConfig = {\n    classNames: ['table-striped', 'table-bordered'],\n    exportToExcel: false,\n    exportToHTML: false\n  };\n\n  @Input() lastName: string = '';\n  @Input() last4ssn: string = '';\n  @Input() certificationType: string = '';\n  @Input() appID: string = \"\";\n  @Input() showValidation: boolean = false;\n  @Input() disabled!: boolean;\n  \n  @Input('disableButtons')\n  set isButtonDisabled(disabled: boolean) {\n    this.buttonDisabled = disabled;\n    this.updateTableHeader();\n  }\n  get isButtonDisabled(): boolean {\n    return this.buttonDisabled;\n  }\n  \n  @Input() \n  public set trainingCourseList(bel) {\n    this.mTrainingCourseList = bel;\n  }\n  \n  public get trainingCourseList() {\n    return this.mTrainingCourseList;\n  }\n  \n  @Output('list') list: EventEmitter<any> = new EventEmitter<any>();\n  \n  private modalMode: string = 'NEW';\n  \n  public message: string = '';\n  public header: OepaTableHeader =\n  {\n    columns:\n    [\n      { title: 'Oepa Training Certificate Number', id: 'oepaTrainingCertificateNumber', sort: 'none' },\n      { title: 'Course Type', id: 'courseType', sort: 'none' },\n      { title: 'Certificate Expiration Date', id: 'certificateExpirationDate', sort: 'none' },\n      { title: 'Other Training Document',            id: 'otherTrainingDocument', sort: 'none' ,hyperlink: true},\n      { title: 'Actions',                            id: 'actions', rowspan: 1, actionColumn: true }\n    ]\n  };\n  \n  private updateTableHeader() {\n    this.header = {\n      columns:\n      [\n        { title: 'Oepa Training Certification Number', id: 'oepaTrainingCertificateNumber', sort: 'none' },\n        { title: 'Course Type', id: 'courseType', sort: 'none' },\n        { title: 'Certificate Expiration Date', id: 'certificateExpirationDate', sort: 'none' },\n        { title: 'Other Training Document', id: 'otherTrainingDocument', sort: 'none',hyperlink: true }\n      ]\n    };\n    if (!this.isButtonDisabled) {\n      this.header.columns.push({ title: 'Actions', id: 'actions', rowspan: 1, actionColumn: true });\n    }\n  }\n  \n  public onActionClick(event: OepaActionEvent): void {\n    if (!this.isButtonDisabled) {\n      if (event.action.title === 'edit') {\n        this.editTableRow(event);\n      }\n      if (event.action.title === 'delete') {\n        this.deleteTableRow(event.data.applicationID, event.data.id);\n      }\n    }\n  }\n  \n  constructor(private modalService: BsModalService,\n    private mappingService: OepaMappingService,\n    private certificationService: CertificationService,\n    private fileUtilService: OepaFileUtilService,\n    private notificationService: NotificationService\n  ) {}\n  \n  public addTrainingCourseTableRow() {\n    const trainingCourse: TrainingCourse = {\n      id:'',\n      applicationID: this.appID,\n      oepaTrainingCertificationNumber: '',\n      otherTrainingDocument:undefined,\n    };\n  \n    this.createTrainingCourseModal(trainingCourse, 'NEW');\n  };\n  \n  public editTableRow(event: OepaActionEvent) {\n    const trainingCourse: TrainingCourse = event.data;\n    console.log('editTableRow: ' + JSON.stringify(trainingCourse));\n    this.createTrainingCourseModal(trainingCourse, 'EDIT');\n  };\n  \n  private createTrainingCourseModal(trainingCourse: TrainingCourse, mode: string) {\n    this.errorMessage = '';\n    this.modalMode = mode;\n    let usedCertificateNumbers: any[] = [];\n    this.mTrainingCourseList.forEach(course => {\n      usedCertificateNumbers.push(course.oepaTrainingCertificationNumber);\n    });\n    const initialState = {\n      lastName: this.lastName,\n      last4ssn: this.last4ssn,\n      certificationType: this.certificationType,\n      showValidation: this.showValidation,\n      trainingCourse: trainingCourse,\n      mode:this.modalMode,\n      usedCertificateNumbers: usedCertificateNumbers\n    }\n    const modal: BsModalRef = this.modalService.show(TrainingCourseModalComponent, { initialState, class: 'modal-lg',ignoreBackdropClick: true });\n     (<TrainingCourseModalComponent>modal.content).modalSave.subscribe(\n    { next : (savedTrainingCourse: TrainingCourse) => {\n      this.onTrainingCourseSave(savedTrainingCourse);\n    }});\n  }\n  \n  private onTrainingCourseSave(trainingCourse: TrainingCourse) {\n    if (!trainingCourse.id || trainingCourse.id === '') {\n      this.addNewTrainingCourse(trainingCourse);\n    } else {\n      this.updateTrainingCourse(trainingCourse);\n    }\n  }\n  \n  private addNewTrainingCourse(trainingCourse: TrainingCourse) {\n    this.certificationService.createTrainingCourse(trainingCourse).subscribe(\n    { next : (result) => {\n      //console.log('addNewTrainingCourse: ' + JSON.stringify(result));\n      if (result && result.success) {\n        if (result.trainingCourse?.id) {\n          trainingCourse.id = result.trainingCourse.id;\n          this.updateTrainingCourseTable(trainingCourse);\n        } else {\n          this.errorMessage = 'That Training Course already exists on this certification';  \n        }\n      } else {\n        this.errorMessage = 'Failed adding new Training Course';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed adding new Training Course: ' + err;\n    }});\n  }\n  \n  private updateTrainingCourse(trainingCourse: TrainingCourse) {\n    console.log('updateTrainingCourse-trainingCourse: ' + JSON.stringify(trainingCourse));\n    this.certificationService.updateTrainingCourse(trainingCourse).subscribe(\n    { next : (result) => {\n      console.log('updateTrainingCourse: ' + JSON.stringify(result));\n      if (result && result.success) {\n        this.updateTrainingCourseTable(trainingCourse);\n      } else {\n        this.errorMessage = 'Failed updating Training Course';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed updating Training Course: ' + err;\n    }});\n  }\n\n  private updateTrainingCourseTable(trainingCourse: TrainingCourse) {\n    const row: OepaTableRow = this.convertTrainingCourseToTableRow(trainingCourse);\n    const tmp: Array<OepaTableRow> = [];\n    let foundMatch: boolean = false;\n    \n    this.data.forEach((r) => {\n      //if (r.dataSource.oepaTrainingCertificateNumber === info.oepaTrainingCertificateNumber) {\n      if (r.dataSource.id === trainingCourse.id) {\n        foundMatch = true;\n        tmp.push(row);\n      } else {\n        tmp.push(r);\n      }\n    });\n    \n    if(!foundMatch) {\n      tmp.push(row);\n      this.trainingCourseList.push(trainingCourse);\n    } else {\n      this.trainingCourseList = this.updateTrainingCourseList(trainingCourse);\n    }\n    this.data = tmp;\n    this.list.emit(this.trainingCourseList);\n  }\n\n  private updateTrainingCourseList(trainingCourse: TrainingCourse) {\n    const tmp: Array<TrainingCourse> = [];\n    for (let i = 0; i < this.trainingCourseList.length; i++) {\n      if (this.trainingCourseList[i].id === trainingCourse.id) {\n        tmp.push(trainingCourse);\n      } else {\n        tmp.push(this.trainingCourseList[i]);\n      }\n    }\n\n    return tmp;\n  }\n\n  deleteTableRow(applicationID:string, id: any): void {\n    const modal: BsModalRef = this.modalService.show(ConfirmationModalComponent, { ignoreBackdropClick: true });\n    (<ConfirmationModalComponent>modal.content).headerText = 'Confirm action';\n    (<ConfirmationModalComponent>modal.content).bodyText = 'Once a Training Course is deleted it cannot be undone!   Do you really want to do this?';\n    (<ConfirmationModalComponent>modal.content).confirmBtnLabel = 'Yes';\n    (<ConfirmationModalComponent>modal.content).cancelBtnLabel = 'No';\n    (<ConfirmationModalComponent>modal.content).confirmClicked.subscribe(\n    { next : () => {\n      this.deleteTrainingCourse(applicationID,id);\n    }});\n  }\n\n  deleteTrainingCourse(applicationID:string, id: any): void {\n    this.certificationService.deleteTrainingCourse(applicationID, id).subscribe(\n    { next : (result) => {\n      if (result && result.success) {\n        this.deleteFromTrainingCourseTable(id);\n      } else {\n        this.errorMessage = 'Failed deleting Training Course';\n        if (result && result.log && result.log.length) {\n          this.errorMessage += ': ' + result.log.join(', ');\n        }\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed deleting Training Course ' + err;\n    }});\n  }\n\n  deleteFromTrainingCourseTable(id: any) {\n    const index: number = this.data.findIndex(building => building.dataSource.id === id);\n    this.data.splice(index, 1);\n\n    const dummyData: Array<OepaTableRow> = [];\n    this.data.forEach((item) => {\n      dummyData.push(item);\n    });\n    this.data = dummyData;\n    this.deleteTrainingCourseFromList(id);\n  }\n\n  deleteTrainingCourseFromList(id: any): void {\n    const tmp: Array<TrainingCourse> = [];\n    for (let i = 0; i < this.trainingCourseList.length; i++) {\n      if (!(this.trainingCourseList[i].id === id)) {\n        tmp.push(this.trainingCourseList[i]);\n      }\n    }\n\n    this.trainingCourseList = tmp;\n    this.list.emit(this.trainingCourseList);\n  }\n\n  private convertTrainingCourseToTableRow(trainingCourse: TrainingCourse): OepaTableRow {\n    let expirationDate = trainingCourse.certificateExpirationDate ? new Date(trainingCourse.certificateExpirationDate) : null;\n    const row: OepaTableRow = { \n      cells: [\n        { id: 'oepaTrainingCertificateNumber', value: trainingCourse.oepaTrainingCertificationNumber || '' },\n        { id: 'courseType', value: trainingCourse.courseTypeName || ''},\n        { id: 'certificateExpirationDate', value: expirationDate ? this.mappingService.mapDateToDateDateString(expirationDate) : '', sortValue: expirationDate ? new Date(expirationDate) : null,\n        className: (expirationDate && expirationDate < new Date() ? 'alert alert-danger' : undefined) },\n        { id: 'otherTrainingDocument', value: trainingCourse.otherTrainingDocument ? trainingCourse.otherTrainingDocument.userFilename : '' }\n      ], \n      dataSource: trainingCourse \n    };\n    row.actions = [];\n\n    if (this.disabled) {\n      row.actions.push({ title: 'view', className: 'bi bi-eye'});\n    } else {\n      // don't allow edit - user should delete and add another\n      // row.actions.push({ title: 'edit', className: 'bi bi-pencil-fill' });\n      row.actions.push({ title: 'delete', className: 'bi bi-x-lg' });\n    }\n\n    return row;\n  }\n\n  ngOnInit() {\n    console.log('this.trainingCourseList: ' + JSON.stringify(this.trainingCourseList));\n    this.mTrainingCourseList \n    if(this.trainingCourseList && this.trainingCourseList.length){\n        for (let i = 0; i < this.trainingCourseList.length; i++) {\n          const row: OepaTableRow = this.convertTrainingCourseToTableRow(this.trainingCourseList[i]);\n          const tmp: Array<OepaTableRow> = [];\n          this.data.forEach((r) => {\n            tmp.push(r);\n          });\n          tmp.push(row);\n          this.data = tmp;\n         // this.data = this.data.slice();\n        }\n    }\n  }\n\n  onCellClick(event: OepaTableCellClickEvent) {\n    console.log('onCellClick: ' + JSON.stringify(event));\n    let attachment = event.row.dataSource.otherTrainingDocument;\n    this.notificationService.getAttachmentContent(attachment.id).subscribe(\n    { next : (content) => {\n      const mimeType: string = this.fileUtilService.mimeTypeForFile(attachment.userFilename);\n      if (mimeType) {\n        this.fileUtilService.downloadFile(content, mimeType, attachment.userFilename);\n      } else {\n        this.errorMessage = 'Unable to download file: ' + attachment.userFilename + '. Cannot determine mime type';\n      }\n    }, error : err => {\n      this.errorMessage = 'File download failed' + err;\n    }});\n  }\n\n}\n","<oepa-table id=\"trainingCourseTable\" name=\"trainingCourseTable\" [config]=\"config\" [data]=\"data\" [header]=\"header\" (cellClicked)=\"onCellClick($event)\"\n (actionClicked)=\"onActionClick($event)\">\n</oepa-table> \n\n<div class=\"row\">\n    <div class=\"col-sm-12 text-end\">\n        <button *ngIf=\"!isButtonDisabled\" class=\"navbar-form pull-right\" type=\"button\" class=\"btn btn-primary\" (click)=\"addTrainingCourseTableRow()\"\n            id=\"AddTrainingCourseBtn\">Add Training Course</button>\n    </div>\n</div>\n<div *ngIf=\"errorMessage\" class=\"row alert alert-danger\">\n    <div class=\"col-sm-12\">\n        <button type=\"button\" class=\"btn-close\" (click)=\"errorMessage=''\">\n              </button>\n        <div>{{errorMessage}}</div>\n    </div>\n</div>\n","import { Component, OnInit, Input, Output,EventEmitter } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n  selector: 'oepa-certification-submitter',\n  templateUrl: './certification-submitter.component.html',\n  styleUrls: ['./certification-submitter.component.css']\n})\nexport class CertificationSubmitterComponent implements OnInit {\n  @Input() showValidation: boolean = false;\n  @Input() submitterGroup!: FormGroup;\n\n  @Output() submitterGroupChange: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n  constructor() {}\n  \n\n  ngOnInit() {}\n  \n}\n","\n\n<div class=\"card\">\n    \t\n    <form [formGroup]=\"submitterGroup\">\n    \t<div class=\"card-body\">\n      \t  <div class=\"row\">\n        \t<div class=\"col-md-4\">\n         \t  <div class=\"form-group\">\n\t\t\t\t<label>Submitter Name</label>\n\t\t\t\t<input [ngClass]=\"{'is-invalid':showValidation && submitterGroup.controls['submitterName'].status === 'INVALID'}\" \n\t\t\t\t\ttype=\"text\" class=\"form-control\" placeholder=\"Submitter Name\" formControlName=\"submitterName\" id=\"submitterName\"  maxlength=\"50\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"true\">Submitter Name is required</small>\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"submitterGroup.controls['submitterName'].errors && submitterGroup.controls['submitterName'].errors['maxlength']\">\n\t\t\t\t\tSubmitter Name length exceeded 50\n\t\t\t\t</small>\n\t\t\t  </div>\n            </div>\n          </div>\n        </div>\n    </form>\n\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { OepaAddressService } from 'oepa-ui-lib';\nimport { OepaComponentIdService } from 'oepa-common-lib';\n\n\n@Component({\n    selector: 'oepa-employer-info',\n    styleUrls: ['./employer-info.component.scss'],\n    templateUrl: './employer-info.component.html'\n})\nexport class EmployerInfoComponent implements OnInit {\n    public componentId:string = 'OepaDatepickerComponent';\n    public employerEmailLabel: string = 'Employer Email';\n    public employerPhoneLabel: string = 'Employer Phone';\n    /**\n     * The form group for which this address is a member.\n     */\n    @Input('group') public group!: FormGroup;\n    /**\n     * Label for entity name (default is 'Name')\n     */\n    @Input('employerNameLabel') public employerNameLabel: string = '';\n    @Input('showValidation') public showValidation: boolean = false;\n\n    constructor(private idService: OepaComponentIdService,\n        private addressService:OepaAddressService, private fb: FormBuilder) {\n        // console.log('OepaEntityInfoComponent...');\n    }\n\n    ngOnInit() {\n            //this.componentId = this.idService.getComponentId(this.group);\n            //console.log('Employer Info: ' + JSON.stringify(this.group.controls['employerAddress'].value));\n    }\n}\n","<div [formGroup]=\"group\">\n    <input [hidden]=\"true\" formControlName=\"id\">\n    <div  class=\"row\">\n        <div class=\"col-md-4\">\n            <div class=\"form-group\">\n                <label>{{employerNameLabel}}</label>\n                <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['employerName'].status === 'INVALID'}\"\n                    type=\"text\" placeholder=\"\" formControlName=\"employerName\" [id]=\"componentId+'_employerNameLabelInput'\" maxlength=\"100\">\n                <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerName'].errors && group.controls['employerName'].errors['required']\">\n                    {{employerNameLabel}} is required\n                </small>\n                <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerName'].errors && group.controls['employerName'].errors['maxlength']\">\n                     Name Maximum length (100) exceeded\n                </small>\n            </div>\n        </div>\n    \n        <div class=\"col-md-4\">\n            <div class=\"form-group\">\n                <label>{{employerEmailLabel}}</label>\n                <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['employerEmail'].status === 'INVALID'}\"\n                    type=\"text\" placeholder=\"\" formControlName=\"employerEmail\" [id]=\"componentId+'_employerEmailLabelInput'\" maxlength=\"80\">\n                <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerEmail'].errors && group.controls['employerEmail'].errors['required']\">\n                    {{employerEmailLabel}} is required\n                </small>\n                <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerEmail'].errors && group.controls['employerEmail'].errors['maxlength']\">\n                    Email Maximum length (80) exceeded\n                </small>\n            </div>\n        </div>\n        \n        \n            <div class=\"col-md-4\">\n                <div class=\"form-group\">\n                    <label>{{employerPhoneLabel}}</label>\n                    <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['employerPhone'].status === 'INVALID'}\" mask=\"(000) 000-0000\" minlength=\"10\"\n                        type=\"text\" placeholder=\"(xxx) xxx-xxxx\" formControlName=\"employerPhone\" [id]=\"componentId+'_employerPhoneLabelInput'\">\n                    <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerPhone'].errors && group.controls['employerPhone'].errors['required']\">\n                        {{employerPhoneLabel}} is required\n                    </small>\n                    <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls['employerPhone'].errors && group.controls['employerPhone'].errors['minlength']\">\n                    Less Than Phone Minimum length\n                    </small>\n                </div>\n            </div>\n            \n            \n        </div>\n   \n    <oepa-address [group]=\"group.controls['employerAddress'] | formControl\" addressOneLabel=\"Employer Address\" zipCodeLabel=\"Zip\" [showValidation]=\"showValidation\"></oepa-address>\n    \n</div>","import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\nimport { TypeaheadMatch } from 'ngx-bootstrap/typeahead';\n\nimport { OEPAOrganization } from 'oepa-ebiz-lib';\nimport { OepaComponentIdService } from 'oepa-common-lib';\n\nimport { EmployerInfo} from '../employer-info'\nimport { CertificationService} from '../../../common-service/certification.service'\n\n@Component({\n  selector: 'oepa-employer-search',\n  templateUrl: './employer-search.component.html',\n  styleUrls: ['./employer-search.component.css']\n})\nexport class EmployerSearchComponent implements OnInit {\n  public componentId:string = 'EmployerSearchComponent';\n\n  @Input('group') group!: FormGroup;\n  @Input('title') title: string = 'No title set';\n  \n  matchFoundValue = false;\n\n  @Input('allowAddNew') allowAddNew: boolean = false;\n  @Input('helpText') helpText: string = '';\n  @Input('matchFound')\n  set matchFound(found) {\n    this.matchFoundValue = found;\n    this.matchFoundChange.emit(this.matchFoundValue);\n  }\n  get matchFound() {\n    return this.matchFoundValue;\n  }\n  @Output('matchFoundChange') matchFoundChange = new EventEmitter();\n\n\n  private _employerInfo: EmployerInfo = {\n    id:'',\n    employerName: '',\n    employerEmail: '',\n    employerPhone: '',\n    employerAddress: {}\n  };\n\n  @Input('employerInfo') \n  set employerInfo(info: EmployerInfo) {\n    this.setSearchFields(info);\n    this. _employerInfo = info;\n  }\n\n  get employerInfo() {\n    return this. _employerInfo;\n  }\n\n  @Output() employerSelectEmitter: EventEmitter<EmployerInfo> = new EventEmitter<EmployerInfo>();\n  @Output() searchFieldsCleared: EventEmitter<EmployerInfo> = new EventEmitter<EmployerInfo>();\n\n  employerNameSearch = '';\n  employerNameInfoSource:Array<OEPAOrganization> | undefined;\n  employerInfoSource: Observable<Array<OEPAOrganization>>;\n \n  errorMessage: string = '';\n  searching: boolean = false;\n  imageRoot: string = '/AngularWebApp/assets/images';\n\n  constructor(private idService: OepaComponentIdService, \n    private certificationService: CertificationService) {\n\n    this.employerInfoSource = new Observable((observer: any) => {\n      observer.next(this.employerNameSearch);\n    }).pipe(mergeMap((token: any) => this.searchEmployerContractors(token)));\n\n  }\n\n  public onEmployerSelect(e: TypeaheadMatch) {\n    if (e.item) {\n      this.employerInfo.id = e.item.id;\n      this.employerInfo.employerName = e.item.name;\n      this.employerInfo.employerAddress = e.item.addressList[0];\n\n      this.employerSelectEmitter.emit(e.item);\n      this.setSearchFields(this.employerInfo);\n      this.matchFound = true;\n      console.log('onEmployerSelect: ' + JSON.stringify(e.item));\n    }\n  }\n\n  ngOnInit() {\n    this.createForm();\n    this.componentId = this.idService.getComponentId(this.group);\n    if (this.group.controls['search'].get('employerName')?.value) {\n      this.matchFound = true;\n    }\n    this.setSearchFields(this.employerInfo);\n  }\n\n  private createForm() {\n    this.group.controls['search'].get('employerName')?.valueChanges.subscribe(\n    { next : (employerName) => {\n      this.employerNameSearch = employerName;\n    }});\n  }\n\n  private checkSearchStringLength(token: string): boolean {\n    let ok = true;\n    if (!token || token.length < 3) {\n      this.errorMessage = 'Please enter at least 3 characters in the search field';\n      ok = false;\n      // console.log('Bad search string: ['+token+']');\n    }\n    return ok;\n  }\n\n  private retrieveEmployerContractors(name: string): Observable<Array<OEPAOrganization>> {\n    return this.certificationService.retrieveEmployerContractors(name).pipe(\n    map((organizations) => {\n      const organizationList: Array<OEPAOrganization> = [];\n      if (organizations && organizations.length > 0) {\n        \n        organizations.forEach((organization) => {\n          organizationList.push(organization);\n           //console.log('organization = ' + JSON.stringify(organization));\n        });\n      } else {\n        this.errorMessage = 'No match found';\n      }\n      this.searching = false;\n      return organizationList;\n    }), catchError(err => {\n      this.searching = false;\n      this.errorMessage = 'Search failed due to system error';\n      console.log('Organization search failed: ' + err);\n      return [];\n    }));\n  }\n\n  private searchEmployerContractors(token: string): Observable<Array<OEPAOrganization>> {\n    this.errorMessage = '';\n    if (!this.checkSearchStringLength(token)) {\n      return of([]);\n    }\n    this.searching = true;\n    return this.retrieveEmployerContractors(token);\n  }\n\n  private resetSearchFields() {\n    this.matchFound = false;\n    this.group.controls['search'].get('id')?.setValue('');\n    this.group.controls['search'].get('employerName')?.setValue('');\n    this.group.controls['search'].get('employerAddress')?.setValue('');\n    \n    this.searchFieldsCleared.emit({});\n  }\n\n  public clearData() {\n    this.resetSearchFields();\n    this.employerInfo = {};\n    this.employerSelectEmitter.emit(this.employerInfo);\n  }\n\n  private setSearchFields(employer: EmployerInfo) {\n    //console.log('setSearchFields: ' + JSON.stringify(employer));\n    if (this.group && this.group.controls['search'] ) {\n        this.group.controls['search'].get('id')?.setValue(employer.id);\n        this.group.controls['search'].get('employerName')?.setValue(employer.employerName);\n        if (employer.employerAddress && employer.employerAddress.line1) {\n          this.group.controls['employerInfo'].get('employerAddress')?.setValue(employer.employerAddress.line1);\n        }\n        if (employer.employerAddress && employer.employerAddress.state) {\n          this.group.controls['employerInfo'].get('employerAddress')?.setValue(employer.employerAddress.state);\n        }\n        if (employer.employerAddress && employer.employerAddress.city) {\n          this.group.controls['employerInfo'].get('employerAddress')?.setValue(employer.employerAddress.city);\n        }\n        if (employer.employerAddress && employer.employerAddress.postalCode) {\n          this.group.controls['employerInfo'].get('employerAddress')?.setValue(employer.employerAddress.postalCode);\n        }\n        if (employer.employerAddress && employer.employerAddress.line2) {\n          this.group.controls['employerInfo'].get('employerAddress')?.setValue(employer.employerAddress.line2);\n        }\n        \n    }\n  }\n\n}\n","\n<form [formGroup]=\"group.controls['search'] | formControl\">\n  <div  class=\"row\">\n    <div  class=\"col-sm-4\">\n      <div class=\"form-group\">\n        <label>\n          <span *ngIf=\"helpText\" class=\"oepa-help\"><span [tooltip]=\"helpText\" placement=\"right\"><i class=\"bi bi-question-circle-fill\"></i></span>&nbsp;</span>{{title}}\n          <span *ngIf=\"searching\" class=\"spinner-border text-primary\" role=\"status\"></span>\n        </label>\n        <ng-template #nonlicensedCompanyTemplate let-model=\"item\" let-index=\"index\">\n          <h5>{{ model.name + ((model.addressList[0]) ? \n            (' - ' + model.addressList[0].address.addressLine1 + ', ' + model.addressList[0].address.city) : '')}}</h5>\n        </ng-template>\n        <input class=\"form-control\" formControlName=\"employerName\" [typeahead]=\"employerInfoSource\" [typeaheadScrollable]=\"true\"\n        (typeaheadOnSelect)=\"onEmployerSelect($event)\" [id]=\"componentId + '_UnlicensedEntityNameSearch'\"\n          name=\"employerSearchInput\"  \n          [typeaheadItemTemplate]=\"nonlicensedCompanyTemplate\" [typeaheadMinLength]=\"3\" \n          placeholder=\"Search Abatement or Demolition Contractor\">\n      </div>\n    </div>\n  </div>\n  <div  class=\"row\">\n    <div  class=\"col-sm-4\">\n        <div class=\"form-group\">\n            <label>Employer Name</label>\n            <input class=\"form-control\" type=\"text\" placeholder=\"\" formControlName=\"employerName\"\n              readonly=\"true\">\n          </div>\n    </div>  \n  </div>\n  <div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n    {{errorMessage}}\n  </div>\n</form>","import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\nimport { OepaComponentIdService } from 'oepa-common-lib';\nimport { EmployerInfo} from '../employer-info'\nimport { OEPAOrganization } from 'oepa-ebiz-lib';\n\n@Component({\n  selector: 'oepa-employer-info-search',\n  templateUrl: './employer-info-search.component.html',\n  styleUrls: ['./employer-info-search.component.css']\n})\nexport class EmployerInfoSearchComponent implements OnInit {\n  public componentId:string = 'EmployerInfoSearchComponent';\n  public matchFound: boolean = false;\n  \n  @Input('title') title: string = 'No title set';\n  @Input('group') group!: FormGroup;\n  @Input('allowAddNew') allowAddNew: boolean = false;\n  @Input('helpText') helpText: string = '';\n  @Input('clearDisabled') clearDisabled: boolean = false;\n  @Input('showValidation') showValidation: boolean = true;\n  @Output() employerSelectEmitter: EventEmitter<EmployerInfo> = new EventEmitter<EmployerInfo>();\n\n  constructor(\n    private idService: OepaComponentIdService\n  ) {}\n\n  ngOnInit() {\n    if (this.group) {\n      this.componentId = this.idService.getComponentId(this.group);\n    }\n  }\n\n  public updateEmployerContractor(employerInfo: OEPAOrganization) {\n    \n    const employer:EmployerInfo={\n      id:employerInfo.id,\n      employerName: employerInfo.name || '',\n      employerAddress:{\n        id: employerInfo.addressList ? employerInfo.addressList[0].id || '' : '',\n        line1: employerInfo.addressList ? employerInfo.addressList[0].address?.addressLine1 || '' : '',\n        line2: employerInfo.addressList ? employerInfo.addressList[0].address?.addressLine2 || '' : '',\n        state: employerInfo.addressList ? employerInfo.addressList[0].address?.state || '' : '',\n        city: employerInfo.addressList ? employerInfo.addressList[0].address?.city || '' : '',\n        postalCode: employerInfo.addressList ? employerInfo.addressList[0].address?.zip || '' : '',\n        \n        }\n    };\n    \n    this.group.patchValue(\n    {\n      id: employerInfo.id || '',\n      employerName: employerInfo.name || '',\n      employerAddress:{\n        id: employerInfo.addressList ? employerInfo.addressList[0].id || '' : '',\n        line1: employerInfo.addressList ? employerInfo.addressList[0].address?.addressLine1 || '' : '',\n        line2: employerInfo.addressList ? employerInfo.addressList[0].address?.addressLine2 || '' : '',\n        state: employerInfo.addressList ? employerInfo.addressList[0].address?.state || '' : '',\n        city: employerInfo.addressList ? employerInfo.addressList[0].address?.city || '' : '',\n        postalCode: employerInfo.addressList ? employerInfo.addressList[0].address?.zip || '' : '',\n      \n      }\n    });\n    this.employerSelectEmitter.emit(employer);\n  }\n\n  \n\n  public clearData() {\n    \n    this.group.patchValue(\n      {\n        id: 0,\n        employerName: '',\n        employerEmail: '',\n        employerPhone: '',\n        employerAddress: {\n          id:'',\n          line1: '',\n          line2: '',\n          city: '',\n          state: '',\n          postalCode: ''\n        }, \n      search: {\n        employerName: '',\n        \n      }\n    });\n    this.matchFound = false;\n    this.employerSelectEmitter.emit({});\n  }\n\n}\n","<div class=\"card\">\n  <div class=\"card-header\">\n    <div class=\"card-title\">\n      <oepa-employer-search [group]=\"group\" [title]=\"title\" [allowAddNew]=\"allowAddNew\"\n           [(matchFound)]=\"matchFound\"\n        (employerSelectEmitter)=\"updateEmployerContractor($event)\" [helpText]=\"helpText\"></oepa-employer-search>\n    </div>\n  </div>\n  <div class=\"card-body\">\n      <div class=\"text-end\">\n        <button *ngIf=\"!clearDisabled && group.enabled && group.controls['id'].value \" [id]=\"componentId+'_ClearBtn'\"\n          type=\"button\" class=\"btn btn-light\" (click)=\"clearData()\">Clear Employer Data</button>\n      </div>\n    <oepa-employer-info [group]=\"group\" [showValidation]=\"showValidation\"  [employerNameLabel]=\"title\" ></oepa-employer-info>\n  </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder,Validators } from '@angular/forms';\nimport { ActivatedRoute, Router, NavigationEnd } from '@angular/router';\n\nimport { OepaMessage, OepaMessageType } from 'oepa-ui-lib';\nimport { OepaUserAccountService, OepaUserAccount, OepaAttachment, OepaFileUtilService, OEPAReference } from 'oepa-common-lib';\nimport { LynxProject, LynxAttachment } from 'oepa-ebiz-lib';\n\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\nimport { CertificationApplication } from './certification-application';\nimport { CertificationMappingService } from '../common-service/certification-mapping.service';\nimport { CertificationService } from '../common-service/certification.service';\nimport { IMultiSelectOption } from 'ngx-bootstrap-multiselect';\nimport { OutOfStateCertification } from '../server/out-of-state-certification';\nimport { TrainingCourse } from '../server/training-course';\nimport { TrainingCourseMultiselectDropdown } from '../../multiselect-dropdown';\nimport { AllowedUserActions } from '../../allowed-user-actions/allowed-user-actions';\nimport { NotificationEntityType } from '../../../notification-common/oepa-entity-info/notification-entity-type';\nimport { CertificationApplicationDocumentNames } from '../server/certification-application-doc-names';\nimport { AllowedUserActionsService } from '../../allowed-user-actions/allowed-user-actions.service';\nimport { NotificationService } from '../../../notification-common/notification-service/notification.service';\n\n@Component({\n  selector: 'oepa-certification-application',\n  templateUrl: './certification-application.component.html',\n  styleUrls: ['./certification-application.component.css']\n})\nexport class CertificationApplicationComponent implements OnInit {\n  public mode: string = '';\n  public errorMessage: string = '';\n  public inProgressMsg: string = '';\n  public photoExpiredMsg: string = '';\n  public certificationApplication: CertificationApplication | undefined;\n  public certificationTypes: Array<OEPAReference> | undefined;\n  public certificationApplicationFormGroup!: FormGroup;\n  public imageRoot = '/AngularWebApp/assets/images';\n  public showValidation: boolean = false;\n  public actionPending: string = '';\n  public message = new OepaMessage('', undefined);\n  public userAccount: OepaUserAccount | undefined;\n  public allowedActions: AllowedUserActions = new AllowedUserActions();\n  public isExternalUser: boolean = false;\n  public disableApplicantTable = false;\n  public disableEmployerTable = false;\n  public disableTrainingCourseTable = false;\n  private navigationSubscription;\n  public outOfStateCertificationList: Array<OutOfStateCertification> = [];\n  public trainingCourseList: Array<TrainingCourse> = [];\n  public trainingCourses: TrainingCourseMultiselectDropdown = new TrainingCourseMultiselectDropdown();\n  public imageBlobUrl: string | ArrayBuffer = '';\n\n  public allProjects: Array<LynxProject> = [];\n  public ABATEMENT_CONTRACTOR: NotificationEntityType = NotificationEntityType.ABATEMENT_CONTRACTOR;\n  public employerHelpText = 'An employer of the certification address(es) must be provided.  A company as identified on this \\\n  form means any organization, business, corporation, establishment, agency, office, institution, etc.   \\\n  This is used by Ohio EPA in order to establish the type of entity that is being regulated.  Please search for the employer first \\\n  and if not found, a new employer must be created.';\n\n  public unitedStatesArmedForcesQuestionHelpText:string = 'Individuals that submit with their applications, \\\n                                                    proof that they are a service member or veteran, or the spouse or surviving spouse of a service member or \\\n                                                    veteran will receive priority expedited certification processing and their applications will be reviewed within \\\n                                                    5 business days of receipt and before all other applications for certification.' +\n                                                    'The acceptable proof of service member/veteran status documents are:' +\n  '1.\t Department of defense identification card (active, retired, temporary disability retirement list (TDRL)); \\\n  2.\t DD214 military discharge certificate indicating disposition of discharge; \\\n  3.\t Report of separation from the national archives national personnel records center in St. Louis, Missouri; or \\\n  4.\t Veterans identification card from the department of veterans affairs. \\\n  All acceptable proof documents, except veterans identification card, must show the veteran status as honorable, general, general under honorable conditions, \\\n  or discharged or released under conditions other than dishonorable. ' +   \n  'If the applicant is qualified and desires priority expedited processing, be prepared to upload a .pdf document of the acceptable proof.' \n  ;\n  public showMessage(msg: string, msgType: OepaMessageType, logMsg?: string) {\n    this.message = new OepaMessage(msg, msgType, logMsg);\n  }\n  public loadMessage(message: OepaMessage) {\n    this.message = message;\n  }\n\n    // Map application document property name to the file name used to identify it in the database\n  // this is used in the onFileUploaded and onFileRemoved methods\n  attachmentNameMap = {\n    'convictedDocument': CertificationApplicationDocumentNames.convictionDocumentName,\n    'usafDocument': CertificationApplicationDocumentNames.usafDocumentName,\n    'documents': CertificationApplicationDocumentNames.certificationApplicationAttachmentName\n  }\n\n  //@Input() contractorInfo = {};\n  // @Output() contractorInfoChange: EventEmitter<ContractorInformation> = new EventEmitter();\n\n  constructor(private fb: FormBuilder,\n    private router: Router,\n    private route: ActivatedRoute,\n    private userAccountService: OepaUserAccountService,\n    private allowedActionsService: AllowedUserActionsService,\n    private certificationService: CertificationService,\n    private certificationMappingService: CertificationMappingService,\n    private fileUtilService: OepaFileUtilService,\n    private notificationService: NotificationService) {\n      this.navigationSubscription = this.router.events.subscribe(\n      { next : (e: any) => {\n        if (e instanceof NavigationEnd) {\n          this.initializePage();\n        }\n      }});\n    this.userAccountService.retrieveAccountForCurrentUser().subscribe(\n    { next : (user) => {\n      if (user) {\n        this.userAccount = user;\n        this.isExternalUser = this.userAccount.type === 'E_BUSINESS_CENTER';\n        this.allowedActions = this.allowedActionsService.getAllowedActionsForUser(this.userAccount);\n      } else {\n        this.showMessage('', OepaMessageType.ERROR, 'No UserAccount for current user');\n      }\n    }, error : err => {\n      this.showMessage('', OepaMessageType.ERROR, 'Cannot retrieve user: ' + err)\n    }});\n  }\n\n  ngOnInit() {\n  }\n\n  ngOnDestroy() {\n    // avoid memory leaks here by cleaning up after ourselves. If we  \n    // don't then we will continue to run our initialiseInvites()   \n    // method on every navigationEnd event.\n    if (this.navigationSubscription) {  \n       this.navigationSubscription.unsubscribe();\n    }\n  }\n\nprivate initializePage() {\n    this.inProgressMsg = 'Loading certification application...';\n    const parms = this.route.snapshot.params;\n    this.mode = parms['mode'];\n    this.certificationService.retrieveCertificationApplication(parms['id']).subscribe(\n    { next : result => {\n      if (result?.success && result.obj) {\n        this.loadCertificationApplication(result.obj);\n      } else {\n        this.createForm();\n        const errMessage = 'Failed retrieving certification application' + (result.log && result.log.length > 0 ? ': ' + result.log.join(', ') + '.' : '.');\n        this.showMessage(errMessage, OepaMessageType.ERROR);\n        this.inProgressMsg = '';\n      }\n    }, error : err => {\n      this.createForm();\n      this.showMessage('Failed retrieving certification application: ' + err, OepaMessageType.ERROR)\n      this.inProgressMsg = '';\n    }});\n  }\n\n  private loadCertificationApplication(asbestosCertificationApplication: AsbestosCertificationApplication) {\n    this.certificationApplication = this.certificationMappingService.mapCertificationApplicationObjToFormCertificationApplication(asbestosCertificationApplication);\n    if (this.certificationApplication) {\n      this.outOfStateCertificationList = (this.certificationApplication.outOfStateCertificationList) ? this.certificationApplication.outOfStateCertificationList : [];\n      this.trainingCourseList = (this.certificationApplication.trainingCourseList) ? this.certificationApplication.trainingCourseList : [];\n      this.inProgressMsg = '';\n      this.photoExpiredMsg = '';\n      if (asbestosCertificationApplication.photoDocument && asbestosCertificationApplication.photoDocument.expirationDate) {\n        const expirationDate = new Date(asbestosCertificationApplication.photoDocument.expirationDate);\n        if (expirationDate < new Date()) {\n          this.photoExpiredMsg = 'This photo was uploaded several years ago. Please upload a recent photo.';\n        }\n      }\n      //this.getTrainingCourses();\n      this.createForm();\n  \n    } else {\n      console.log('ERROR: No certificationApplication!');\n    }\n  }\n\n  private createForm() {\n    if (!this.certificationApplication) {\n      this.certificationApplication = {};\n    }\n    this.certificationApplicationFormGroup = this.fb.group({\n\n      applicationID: this.certificationApplication ? this.certificationApplication.id : '',\n      certification: this.certificationApplication ? this.certificationApplication.certification : {},\n      revenue: (this.certificationApplication && this.certificationApplication.revenue) ? this.certificationApplication.revenue : {},\n      applicationType: this.certificationApplication ? this.certificationApplication.applicationType : '',\n      applicationStatus: this.certificationApplication ? this.certificationApplication.applicationStatus : '',\n\n      certificationType: this.certificationApplication.certification ? this.certificationApplication.certification.certificationType : '',\n      applicantFirstName: (this.certificationApplication && this.certificationApplication.applicantFirstName) ? this.certificationApplication.applicantFirstName : \"\",\n      applicantMiddleName: (this.certificationApplication && this.certificationApplication.applicantMiddleName) ? this.certificationApplication.applicantMiddleName : \"\",\n      applicantLastName: (this.certificationApplication && this.certificationApplication.applicantLastName) ? this.certificationApplication.applicantLastName : '',\n      applicantMailingAddress: this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.applicantMailingAddress),\n      applicantEmail: (this.certificationApplication && this.certificationApplication.applicantEmail) ? this.certificationApplication.applicantEmail : '',\n      applicantPhone: (this.certificationApplication && this.certificationApplication.applicantPhone ) ? this.certificationApplication.applicantPhone:'',\n      applicantInfo: this.certificationMappingService.buildApplicantInformationForm(this.certificationApplication.applicantInfo),  \n\n      employerInfo: this.certificationMappingService.buildEmployerInformationForm(this.certificationApplication.employerInfo),\n      employerEntityID: (this.certificationApplication && this.certificationApplication.employerEntityID) ? this.certificationApplication.employerEntityID : '',\n      \n      employerName: (this.certificationApplication && this.certificationApplication.employerName) ? this.certificationApplication.employerName : '',\n      employerMailingAddress: this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.employerMailingAddress) ,\n      employerPhone: (this.certificationApplication && this.certificationApplication.employerPhone) ? this.certificationApplication.employerPhone : '',\n      employerEmail: (this.certificationApplication && this.certificationApplication.employerEmail) ? this.certificationApplication.employerEmail : '',\n\n      mailToType: (this.certificationApplication && this.certificationApplication.mailToType) ? this.certificationApplication.mailToType : '',\n      mailToApplicant: (this.certificationApplication && this.certificationApplication.mailToApplicant) ? this.certificationApplication.mailToApplicant : '',\n      mailToEmployer: (this.certificationApplication && this.certificationApplication.mailToEmployer) ? this.certificationApplication.mailToEmployer : '',\n\n      mailToOther: (this.certificationApplication && this.certificationApplication.mailToOther ) ? this.certificationApplication.mailToOther:'',\n      otherMailingAddress: this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.otherMailingAddress) ,\n      \n      convicted: this.certificationApplication.convicted,\n      convictedDocument: [this.certificationApplication.convictedDocument ? this.certificationApplication.convictedDocument : null],\n\n      usaf: this.certificationApplication.usaf,\n      usafType: this.certificationApplication.usafType,\n      usafDocument: [this.certificationApplication.usafDocument ? this.certificationApplication.usafDocument : null],\n\n      photoDocument: [(this.certificationApplication.photoDocument && this.certificationApplication.photoDocument.userFilename) ? this.certificationApplication.photoDocument.userFilename : undefined, [Validators.required]],\n\n      //outOfStateCertificationList: this.certificationApplication.outOfStateCertificationList,\n\n      trainingCourseMultiselect: this.certificationApplication.trainingCourseMultiselect,\n      //trainingCourseList: this.certificationApplication.trainingCourseList,\n\n      documents: [this.certificationApplication.documents && this.certificationApplication.documents.length > 0 ? this.certificationApplication.documents : []],\n\n      receivedDate: this.certificationApplication.receivedDate, // only use for internal users\n      submitDate: this.certificationApplication.submitDate,\n      denyDate: this.certificationApplication.denyDate,\n      approveDate: this.certificationApplication.approveDate,\n      issueDate: this.certificationApplication.issueDate,\n      expirationDate: this.certificationApplication.expirationDate,\n      reviewDate: this.certificationApplication.reviewDate,\n      source: this.certificationApplication.source,\n      ebizSubmitAccount: this.certificationApplication.ebizSubmitAccount,\n      lynxPhotoID: this.certificationApplication.lynxPhotoID,\n      replacementReason: this.certificationApplication.replacementReason,\n\n      submitterName: this.certificationApplication.submitterName,\n      attested: this.certificationApplication.attested\n    });\n\n    if (!this.isExternalUser) {\n      if (this.certificationApplication.source != 'Mail') {\n        this.certificationApplicationFormGroup.controls['receivedDate'].disable();\n        this.certificationApplicationFormGroup.controls['submitterName'].disable();\n      }\n    } else {\n      this.certificationApplicationFormGroup.controls['receivedDate'].disable();\n      this.certificationApplicationFormGroup.controls['submitterName'].disable();\n    }\n    this.certificationApplicationFormGroup.controls['submitterName'].valueChanges.subscribe(\n    { next : submitterName => {\n      if (this.certificationApplication) {\n        this.certificationApplication.submitterName = submitterName;\n      }\n    }});\n    this.certificationApplicationFormGroup.controls['receivedDate'].valueChanges.subscribe(\n    { next : receivedDate => {\n      if (this.certificationApplication) {\n        this.certificationApplication.receivedDate = receivedDate;\n      }\n    }});\n    this.certificationApplicationFormGroup.valueChanges.subscribe(\n    { next : certificationApplicationForm => {\n      if (this.certificationApplication && certificationApplicationForm.applicationType) {\n        this.certificationApplication.applicationType = certificationApplicationForm.applicationType;\n      }\n      if (this.certificationApplication && certificationApplicationForm.applicationStatus) {\n        this.certificationApplication.applicationStatus = certificationApplicationForm.applicationStatus;\n      }\n    }});\n\n    this.certificationApplicationFormGroup.controls['convicted'].valueChanges.subscribe(\n    { next : convicted => {\n      if (this.certificationApplication) {\n        this.certificationApplication.convicted = convicted;\n      }\n    }});\n\n    this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('firstName')?.valueChanges.subscribe(\n    { next : (firstName) => {\n      if (firstName) {\n        if(this.certificationApplication && !this.certificationApplication.applicantInfo) {\n          this.certificationApplication.applicantInfo = {contactInfo:{firstName:''}};\n        } else if (this.certificationApplication?.applicantInfo && !this.certificationApplication.applicantInfo?.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo = {firstName:''};\n        }\n      }\n        //console.log(\"applicantInfo-valueChanges-applicantInformation.firstName:\",JSON.stringify(firstName));\n        if (this.certificationApplication?.applicantInfo && this.certificationApplication.applicantInfo.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo.firstName = firstName;\n        }\n      \n    }});\n    this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('middleName')?.valueChanges.subscribe(\n    { next : (middleName) => {\n      if (middleName) {\n        if(this.certificationApplication && !this.certificationApplication.applicantInfo) {\n          this.certificationApplication.applicantInfo = {contactInfo:{middleName:''}};\n        } else if (this.certificationApplication?.applicantInfo && !this.certificationApplication.applicantInfo.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo = {middleName:''};\n        }\n      }\n        //console.log(\"applicantInfo-valueChanges-applicantInformation.middleName:\",JSON.stringify(middleName));\n        if (this.certificationApplication?.applicantInfo?.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo.middleName = middleName;\n        }\n      \n    }});\n    this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('lastName')?.valueChanges.subscribe(\n    { next : (lastName) => {\n      if (lastName) {\n        if(this.certificationApplication && !this.certificationApplication.applicantInfo) {\n          this.certificationApplication.applicantInfo = {contactInfo:{lastName:''}};\n        } else if (this.certificationApplication?.applicantInfo && !this.certificationApplication.applicantInfo.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo = {lastName:''};\n        }\n      }\n        //console.log(\"applicantInfo-valueChanges-applicantInformation.middleName:\",JSON.stringify(lastName));\n        if (this.certificationApplication?.applicantInfo?.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo.lastName = lastName;\n        }\n      \n    }});\n    this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.valueChanges.subscribe(\n    { next : (contactInfo) => {\n      if (contactInfo) {\n        if(this.certificationApplication && !this.certificationApplication.applicantInfo) {\n          this.certificationApplication.applicantInfo = {contactInfo:{}};\n        } else if (this.certificationApplication?.applicantInfo && !this.certificationApplication.applicantInfo.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo = {};\n        }\n      }\n        //console.log(\"applicantInfo-valueChanges-applicantInformation.contactInfo:\",JSON.stringify(contactInfo)); \n        if (this.certificationApplication?.applicantInfo?.contactInfo) {\n          this.certificationApplication.applicantInfo.contactInfo.emailAddress = contactInfo.emailAddress;\n          this.certificationApplication.applicantInfo.contactInfo.phoneNumber = contactInfo.phoneNumber; \n        }\n      \n    }});\n    this.certificationApplicationFormGroup.controls['applicantInfo'].get('streetAddress')?.valueChanges.subscribe(\n    { next : (streetAddress) => {\n      if (streetAddress) {\n        if(this.certificationApplication && !this.certificationApplication.applicantInfo) {\n          this.certificationApplication.applicantInfo = {streetAddress:{}};\n        } else if (this.certificationApplication?.applicantInfo && !this.certificationApplication.applicantInfo.streetAddress) {\n          this.certificationApplication.applicantInfo.streetAddress = {};\n        }\n      }\n        //console.log(\"applicantInfo-valueChanges-applicantInformation.contactInfo:\",JSON.stringify(streetAddress));\n        if (this.certificationApplication?.applicantInfo?.streetAddress) {\n          this.certificationApplication.applicantInfo.streetAddress.line1 = streetAddress.line1;\n          this.certificationApplication.applicantInfo.streetAddress.line2 = streetAddress.line2; \n          this.certificationApplication.applicantInfo.streetAddress.city = streetAddress.city; \n          this.certificationApplication.applicantInfo.streetAddress.state = streetAddress.state;\n          this.certificationApplication.applicantInfo.streetAddress.postalCode = streetAddress.postalCode; \n        }\n    }});\n    this.certificationApplicationFormGroup.controls['employerInfo'].valueChanges.subscribe(\n    { next : (employerInfo) => {\n      if (this.certificationApplication && !employerInfo) {\n        this.certificationApplication.employerInfo = {};\n      }\n      if (this.certificationApplication?.employerInfo) {\n        this.certificationApplication.employerInfo.id = employerInfo.id;\n        this.certificationApplication.employerInfo.employerName = employerInfo.employerName;\n        this.certificationApplication.employerInfo.employerEmail = employerInfo.employerEmail;\n        this.certificationApplication.employerInfo.employerPhone = employerInfo.employerPhone;\n        this.certificationApplication.employerInfo.employerAddress = employerInfo.employerAddress;\n      }\n    }});\n    this.certificationApplicationFormGroup.controls['mailToType'].valueChanges.subscribe(\n    { next : (mailToType) => {\n      if (this.certificationApplication && !this.certificationApplication.mailToType) {\n        this.certificationApplication.mailToType = '';\n      }\n\n      if (this.certificationApplication) {\n        this.certificationApplication.mailToType = mailToType;\n        this.certificationApplication.mailToApplicant = (mailToType === 'Home');\n        this.certificationApplication.mailToEmployer = (mailToType === 'Employer');\n        this.certificationApplication.mailToOther = (mailToType === 'Other');\n      }\n    }});\n    \n    this.certificationApplicationFormGroup.controls['usaf'].valueChanges.subscribe(\n    { next : usaf => {\n      if (this.certificationApplication) {\n        this.certificationApplication.usaf = usaf;\n      }\n      if (this.certificationApplication && usaf !== 'yes') {\n        this.certificationApplicationFormGroup.controls['usafType'].reset();\n        this.certificationApplication.usafDocument = {};\n      }\n    }});\n    this.certificationApplicationFormGroup.controls['usafType'].valueChanges.subscribe(\n    { next : usafTypetmp => {\n      if (this.certificationApplication) {\n        this.certificationApplication.usafType = usafTypetmp;\n      }\n    }});\n    this.certificationApplicationFormGroup.controls['attested'].valueChanges.subscribe(\n    { next : attested => {\n      if (this.certificationApplication) {\n        this.certificationApplication.attested = attested;\n      }\n    }});\n\n    if (this.mode !== 'edit') {\n      this.certificationApplicationFormGroup.disable();\n      this.disableApplicantTable = true;\n      this.disableEmployerTable = true;\n      this.disableTrainingCourseTable = true;\n    } else {\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('firstName')?.disable();\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('middleName')?.disable();\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.get('lastName')?.disable();\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('streetAddress')?.disable();\n      \n      if (this.certificationApplication.convictedDocument && this.certificationApplication.convictedDocument.id) {\n        this.certificationApplicationFormGroup.controls['convicted'].disable();\n      }\n      if (this.certificationApplication.usafDocument && this.certificationApplication.usafDocument.id) {\n        this.certificationApplicationFormGroup.controls['usafDocument'].disable();\n      }\n      //if (this.certificationApplication.photoDocument && this.certificationApplication.photoDocument.id) {\n      //  this.certificationApplicationFormGroup.controls['photoDocument').disable();\n      //}\n    }\n  }\n\n  private getTrainingCourses() {\n    //this.trainingCourseList = oosll;\n    //this.certificationApplication.trainingCourseList = this.trainingCourseList;\n    if (this.certificationApplication && this.certificationApplication.id) {\n      const courses: Array<IMultiSelectOption> = [];\n      this.certificationService.retrieveTrainingCourses(this.certificationApplication.id).subscribe(\n      { next : (results) => {\n        console.log('retrieveTrainingCourses: ' + JSON.stringify(results));\n        if (results) {\n          results.forEach((result) => {\n            if (result.oepaTrainingCertificationNumber && result.oepaTrainingCertificationNumber != \"\") {\n              courses.push({ id:result.oepaTrainingCertificationNumber, name: result.oepaTrainingCertificationNumber });\n            } else if (result.otherTrainingDocument && result.otherTrainingDocument.id !=\"\" ){\n              courses.push({ id: result.otherTrainingDocument.id, name: result.otherTrainingDocument.id || '' });\n            } else {\n              courses.push({ id: result.id, name: result.id || '' });\n            }\n          });\n          //this.trainingCourses.names = courses;\n          this.trainingCourseList = results;\n          console.log('retrieveTrainingCourses-this.trainingCourseList : ' + JSON.stringify(this.trainingCourseList ));\n        }\n        \n      }, error : error => {\n        console.log(\"retrieveTrainingCourses:\", JSON.stringify(error));\n      }});\n    }\n\n  }\n  getOutOfStateCertificationList(oosll: Array<OutOfStateCertification>) {\n    this.outOfStateCertificationList = oosll;\n    if (this.certificationApplication) { \n      this.certificationApplication.outOfStateCertificationList = this.outOfStateCertificationList;\n    }\n  }\n\n  getTrainingCourseList(oosll: Array<TrainingCourse>) {\n    //this.trainingCourseList = oosll;\n    if (this.certificationApplication) {\n      this.certificationApplication.trainingCourseList = this.trainingCourseList;\n    }\n  }\n\n  onFileUploaded(attachment: OepaAttachment, fieldName: string, yesNoFieldName?: string) {\n    this.message = new OepaMessage('', undefined);\n    // let notification = this.notificationProfileService.getNotification();\n    if (this.certificationApplication?.id) {\n      this.certificationService.createNamedAttachment(this.certificationApplication.id, (this.attachmentNameMap as any)[fieldName], attachment).subscribe(\n      { next : (id) => {\n        if (id) {\n          attachment.id = id;\n          (this.certificationApplication as any)[fieldName] = attachment;\n          if (yesNoFieldName) {\n            this.certificationApplicationFormGroup.get(yesNoFieldName)?.disable();\n          }\n        } else {\n          this.showMessage('File upload failed', OepaMessageType.ERROR);\n        }\n      }, error : err => {\n        this.showMessage('File upload failed: ' + err.message, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onFileRemoved(attachment: OepaAttachment, fieldName: string, yesNoFieldName?: string) {\n    if (this.certificationApplication?.id && attachment.id) {\n      this.certificationService.deleteNamedAttachment(this.certificationApplication.id, (this.attachmentNameMap as any)[fieldName], attachment.id).subscribe(\n      { next : () => {\n        (this.certificationApplication as any)[fieldName] = {};\n        if (yesNoFieldName) {\n          this.certificationApplicationFormGroup.get(yesNoFieldName)?.enable();\n        }\n        this.showMessage('Attachment deleted', OepaMessageType.INFO);\n      }, error : err => {\n        const errMessage ='Delete file failed' + err;\n        this.showMessage(errMessage, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onMultiFileUploaded(attachment: OepaAttachment, fieldName: string, yesNoFieldName?: string) {\n    this.message = new OepaMessage('', undefined);\n    // let notification = this.notificationProfileService.getNotification();\n    if (this.certificationApplication?.id) {\n      this.certificationService.createNamedAttachment(this.certificationApplication.id, (this.attachmentNameMap as any)[fieldName], attachment).subscribe(\n      { next : (id) => {\n        if (id) {\n          attachment.id = id;\n          if ((this.certificationApplication as any)[fieldName]) {\n            (this.certificationApplication as any)[fieldName].push(attachment);\n          } else {\n            (this.certificationApplication as any)[fieldName] = [ attachment ];\n          }\n          if (yesNoFieldName) {\n            this.certificationApplicationFormGroup.get(yesNoFieldName)?.disable();\n          }\n        } else {\n          this.showMessage('File upload failed', OepaMessageType.ERROR);\n        }\n      }, error : err => {\n        this.showMessage('File upload failed: ' + err.message, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onMultiFileRemoved(attachment: OepaAttachment, fieldName: string) {\n    if (this.certificationApplication?.id && attachment.id) {\n      this.certificationService.deleteNamedAttachment(this.certificationApplication.id, (this.attachmentNameMap as any)[fieldName], attachment.id).subscribe(\n      { next : () => {\n        (this.certificationApplication as any)[fieldName] = (this.certificationApplication as any)[fieldName].filter((doc : OepaAttachment) => {\n          return doc.id !== attachment.id;\n        });\n        this.showMessage('Attachment deleted', OepaMessageType.INFO);\n      }, error : err => {\n        const errMessage ='Delete file failed' + err;\n        this.showMessage(errMessage, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onFilePhotoDocumentUpload(attachment: LynxAttachment) {\n    attachment.fileType = 'JPG';\n    if (this.certificationApplication?.id) {\n      this.certificationService.storePhotoMetadata(this.certificationApplication.id, attachment).subscribe(\n      { next : photo => {\n        if (this.certificationApplication) {\n          this.certificationApplication.photoDocument = photo;\n          this.certificationApplication.lynxPhotoID   = photo.id;\n        }\n        // need to download file to display it on the screen\n        this.onPhotoDocumentDownload(photo);\n      }, error : err => {\n        if (this.certificationApplication) {\n          this.certificationApplication.photoDocument = {};\n        }\n        this.showMessage('An error occurred storing the uploaded image: ' + err, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onPhotoDocumentDownload(attachment: LynxAttachment) {\n    this.message = new OepaMessage('', undefined);\n    if (attachment.id && attachment.userFilename) {\n      this.certificationService.getPhotoContent(attachment.id).subscribe(\n      { next : (content) => {\n        const mimeType = this.fileUtilService.mimeTypeForFile(attachment.userFilename!);\n        const blob = new Blob([content], { type: mimeType });\n        this.createImageFromBlob(blob);\n      }, error : err => {\n        const msg = 'File download failed' + err;\n        this.showMessage(msg, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onFilePhotoDocumentRemoved(attachment: LynxAttachment) {\n    if (this.certificationApplication?.id) {\n      this.certificationService.deletePhoto(this.certificationApplication.id).subscribe(\n      { next : () => {\n        this.imageBlobUrl = '';\n        if (this.certificationApplication) {\n          this.certificationApplication.photoDocument = {};\n          this.certificationApplication.lynxPhotoID = '';\n        }\n        this.certificationApplicationFormGroup.controls['photoDocument'].setValue('');\n      }, error : err => {\n        const msg = 'An error occured deleting the photo:' + err;\n        this.showMessage(msg, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  onFileDownloaded(attachment: LynxAttachment) {\n    console.log('onFilePlannedDemolitionAttachmentDownload');\n    this.message = new OepaMessage('', undefined);\n    if (attachment.id && attachment.userFilename) {\n      this.notificationService.getAttachmentContent(attachment.id).subscribe(\n      { next : (content) => {\n        const mimeType: string = this.fileUtilService.mimeTypeForFile(attachment.userFilename!);\n        if (mimeType) {\n          this.fileUtilService.downloadFile(content, mimeType, attachment.userFilename);\n        } else {\n          const msg = 'Unable to download file: ' + attachment.userFilename + '. Cannot determine mime type';\n          this.showMessage(msg, OepaMessageType.ERROR);\n        }\n      }, error : err => {\n        const msg = 'File download failed' + err;\n        this.showMessage(msg, OepaMessageType.ERROR);\n      }});\n    }\n  }\n\n  private createImageFromBlob(image: Blob) {\n    let reader = new FileReader();\n    reader.addEventListener(\"load\", () => {\n      this.imageBlobUrl = reader.result || '';\n    }, false);\n    if (image) {\n      reader.readAsDataURL(image);\n    }\n  }\n\n  updateEmployer(event: any) {\n    if (this.certificationApplication) {\n      this.certificationApplication.employerInfo = event;\n    }\n  }\n\n  onApplicantInfoGroupChanged(applicantInfoGroup: FormGroup) {\n    //console.log(\"onApplicantInfoGroupChanged:\",JSON.stringify(applicantInfoGroup.value()));\n    this.certificationApplicationFormGroup.controls['applicantInfo'].patchValue({\n      contactInfo: applicantInfoGroup.controls['contactInfo'].value,\n      streetAddress: {\n        id: applicantInfoGroup.controls['streetAddress'].get('id')?.value,\n        line1: applicantInfoGroup.controls['streetAddress'].get('line1')?.value,\n        line2: applicantInfoGroup.controls['streetAddress'].get('line2')?.value,\n        city: applicantInfoGroup.controls['streetAddress'].get('city')?.value,\n        state: applicantInfoGroup.controls['streetAddress'].get('state')?.value,\n        postalCode: applicantInfoGroup.controls['streetAddress'].get('postalCode')?.value\n      }\n    })\n    //console.log(\"certificationApplicationFormGroup:\",JSON.stringify(this.certificationApplicationFormGroup.get('applicantInfo').value()));\n  }\n}\n","<div class=\"oepa-form\">\n  <div *ngIf=\"inProgressMsg\">\n    <div class=\"alert alert-info text-center\">\n      <h3>{{inProgressMsg}}</h3>\n      <span class=\"spinner-border text-primary\" role=\"status\"></span>\n    </div>\n  </div>\n\n<div *ngIf=\"!inProgressMsg && certificationApplicationFormGroup\" class=\"container-fluid\" [formGroup]=\"certificationApplicationFormGroup\">\n    <div class=\"card-body\">\n    <div *ngIf=\"certificationApplicationFormGroup.controls['source'].value === 'Mail' || !isExternalUser\">\n      <oepa-certification-official-use [group]=\"certificationApplicationFormGroup\" [showValidation]=\"showValidation\"></oepa-certification-official-use>\n    </div>\n    <div class=\"card\"> \n      <div class=\"card-body \">\n          <p>As part of the completion of this application, upload all required documents. You may click the \"Validate\"\n            button at\n            the bottom of the screen to see a list of required elements. If this is a renewal application, please\n            review\n            what\n            is in this application AND the uploaded documents to confirm they are updated prior to submission.</p>\n          <p>Provision of your Social Security Number (SSN) is mandated by Ohio Revised Code section 3123.50 and \n            Ohio Administrative Code Chapter 3745-22.  Your SSN may be used for purposes including, but not limited to, \n          identification of obligators under child support orders and verification of identity. </p>\n          <p>Knowingly making a false statement or knowingly swearing or affirming the truth to a false statement previously made to \n\t\t        gain approval is a criminal offense.  See Ohio Revised Code section 2921.13. </p>\n          \n      </div>\n    </div>\n\n    <oepa-applicant-information [applicantInfoGroup]=\"certificationApplicationFormGroup.controls['applicantInfo'] | formControl\"\n    [mode]=\"mode\" [showValidation]=\"showValidation\"  [isExternalUser]=\"isExternalUser\" [appID]=\"certificationApplication?.id || ''\"\n    (applicantInfoGroupChange)=\"onApplicantInfoGroupChanged($event)\"></oepa-applicant-information>\n   \n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-3\">\n            <div class=\"card-title\">\n                2. Mail my certification letter and card to     \n            </div>\n          </div>\n          <div class=\"col-md-2\">\n              <label class=\"md-check\"\n              [ngStyle]=\"{ 'font-weight': certificationApplicationFormGroup.get('mailToType')?.value === 'Home' && certificationApplicationFormGroup.disabled ? 'bold' : '' }\">\n              <input type=\"radio\" value=\"Home\" name=\"mailToType\" formControlName=\"mailToType\"> Home Address&nbsp;&nbsp;\n              </label>\n          </div>\n          <div class=\"col-md-2\">\n              <label class=\"md-check\"\n              [ngStyle]=\"{ 'font-weight': certificationApplicationFormGroup.get('mailToType')?.value === 'Employer' && certificationApplicationFormGroup.disabled ? 'bold' : '' }\">\n                <input type=\"radio\" value=\"Employer\" name=\"mailToType\" formControlName=\"mailToType\"> Employer Address&nbsp;&nbsp;\n              </label>\n          </div>\n          <div class=\"col-md-7\"></div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-8\">\n            <div class=\"card-title\">3. Employer</div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-body\">\n        <oepa-employer-info-search title=\"Employer Name\" (entitySelectEmitter)=\"updateEmployer($event)\" \n                [group]=\"certificationApplicationFormGroup.controls['employerInfo'] | formControl\" [showValidation]=\"showValidation\"\n                 [allowAddNew]=\"(true) \"\n                [helpText]=\"employerHelpText\" [clearDisabled]=\"false\">\n        </oepa-employer-info-search>\n      </div>\n    </div>\n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-12\">\n            <div class=\"card-title\">\n              <div class=\"row\">\n                <div class=\"col-md-4\">\n                    <label>4. Training Course Certificate Number (if Ohio EPA approved course)</label>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n          \n      <div class=\"card-body\">\n            <oepa-training-course-table id=\"trainingCourseTable\" name=\"trainingCourseTable\" [trainingCourseList]=\"trainingCourseList\"\n            [appID]=\"certificationApplication?.id || ''\" [lastName]=\"certificationApplication?.applicantLastName || ''\"\n            [last4ssn]=\"certificationApplication?.applicantInfo?.last4ssn || ''\" [certificationType]=\"certificationApplication?.certification?.certificationType || ''\"\n            [disableButtons]=\"disableTrainingCourseTable\" [showValidation]=\"showValidation\"\n            (list)=\"getTrainingCourseList($event)\">\n          </oepa-training-course-table>     \n      </div>\n    </div>\n\n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-12\">\n            <div class=\"card-title\">\n                5. List other state asbestos licenses or certifications you currently hold or have held\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-body\">\n          <oepa-out-of-state-certification-table id=\"outOfStateCertificationTable\" name=\"outOfStateCertificationTable\"\n            [outOfStateCertificationList]=\"outOfStateCertificationList\" [appID]=\"certificationApplication?.id || ''\"\n            [showValidation]=\"showValidation\" [isExternalUser]=\"isExternalUser\" (list)=\"getOutOfStateCertificationList($event)\">\n          </oepa-out-of-state-certification-table>\n      </div>\n    </div>\n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-12\">\n            <div class=\"card-title\">\n                6. Has the applicant ever been convicted of a Federal or State felony related to <b> protecting the environment</b> \n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-body\">\n        <div class=\"form-group row\">\n          <div class=\"col-sm-1\">\n              <oepa-yes-no [group]=\"certificationApplicationFormGroup\" field=\"convicted\" id=\"convicted\" [showValidation]=\"showValidation\"></oepa-yes-no>\n          </div>\n          <div class=\"col-md-11\"> (If yes, attach a detailed explanation)</div>\n          <div [hidden]=\"certificationApplicationFormGroup.controls['convicted'].value !== 'yes'\" class=\"col-md-12\">\n              <oepa-file-upload [group]=\"certificationApplicationFormGroup\" field=\"convictedDocument\" errorLabel=\"A file\"\n                [showValidation]=\"showValidation\" [attachment]=\"certificationApplication?.convictedDocument\"\n                (fileUploaded)=\"onFileUploaded($event, 'convictedDocument', 'convicted')\" \n                (fileRemoved)=\"onFileRemoved($event, 'convictedDocument', 'convicted')\"\n                (download)=\"onFileDownloaded($event)\">\n              </oepa-file-upload>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"card\">\n        <div class=\"card-header alert-info mb-3\">\n          <div class=\"row\">\n            <div class=\"col-sm-12\">\n              <div class=\"card-title\">\n                    7. Veteran Status  \n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"card-body\">\n          <div class=\"form-group row\">\n                <div class=\"col-sm-12\">  \n                    If applicant is a United States armed forces service member or veteran, or the spouse or surviving spouse of a service member \n                    or veteran and would like to receive priority expedited certification processing, check this box  &nbsp;&nbsp;&nbsp;&nbsp;                \n                  <oepa-yes-no [group]=\"certificationApplicationFormGroup\" field=\"usaf\" id=\"usaf\" [showValidation]=\"showValidation\"></oepa-yes-no>\n                </div> \n                <div class=\"col-sm-12\"> </div>\n                <div class=\"col-sm-12\">  \n                <div [hidden]=\"certificationApplicationFormGroup.controls['usaf'].value !== 'yes'\" class=\"form-group row\">\n               \n                    <div class=\"col-sm-12\">\n                        <span *ngIf=\"unitedStatesArmedForcesQuestionHelpText\" class=\"oepa-help\">\n                            <span [tooltip]=\"unitedStatesArmedForcesQuestionHelpText\" placement=\"right\">\n                              <i class=\"bi bi-question-circle-fill\"></i>\n                        </span>&nbsp;</span> \n                        <label>If Yes, mark the appropriate box below and submit acceptable proof of service member or veteran status as required by Ohio \n                            Administrative Code rule 3745-22-03(B)&nbsp;&nbsp;</label>\n                    </div>\n                    <div class=\"col-sm-12\"> </div>\n                      <div class=\"col-md-12\" [ngClass]=\"{'is-invalid':showValidation  && certificationApplicationFormGroup.controls['usafType'].status === 'INVALID'}\">\n                        <label>&nbsp;&nbsp;&nbsp;&nbsp;</label>\n                        <label class=\"md-check\">\n                        <input type=\"radio\" value=\"ServiceMember\" name=\"usafType\" formControlName=\"usafType\"> Service Member&nbsp;&nbsp;\n                        </label>\n                        <label class=\"md-check\">\n                          <input type=\"radio\" value=\"Veteran\" name=\"usafType\" formControlName=\"usafType\"> Veteran&nbsp;&nbsp;\n                        </label>\n                        <label class=\"md-check\">\n                          <input type=\"radio\" value=\"Spouse\" name=\"usafType\" formControlName=\"usafType\"> Spouse&nbsp;&nbsp;&nbsp;&nbsp;\n                        </label>\n    \n                    </div>\n                    <div [hidden]=\"certificationApplicationFormGroup.controls['usaf'].value !== 'yes'\" class=\"col-md-12\">\n                        <oepa-file-upload [group]=\"certificationApplicationFormGroup\" field=\"usafDocument\" errorLabel=\"A file\"\n                          [showValidation]=\"showValidation\" [attachment]=\"certificationApplication?.usafDocument\"                \n                          (fileUploaded)=\"onFileUploaded($event, 'usafDocument', 'usaf')\" \n                          (fileRemoved)=\"onFileRemoved($event, 'usafDocument','usaf')\"\n                          (download)=\"onFileDownloaded($event)\">\n                        </oepa-file-upload>\n                      </div>\n                  </div>\n                </div>\n            </div>\n          </div>\n        </div>\n        \n        <div class=\"card\">\n            <div class=\"card-header alert-info mb-3\">\n              <div class=\"row\">\n                <div class=\"col-sm-12\">\n                  <div class=\"card-title\">\n                        8. Photo  \n                  </div>\n                </div>\n              </div>\n              <div class=\"form-group row\">\n                  <div class=\"col-sm-12\">  \n                      Provide one current, clear, color photo of the applicant \n                  </div> \n                </div>\n            </div>\n            <div class=\"card-body\">\n              <div class=\"form-group row\">\n                <div  class=\"col-md-12\">\n                    <oepa-lynx-image-upload label=\"Upload a photo\" errorLabel=\"A photo\" [showValidation]=\"showValidation\"\n                    [group]=\"certificationApplicationFormGroup\" field=\"photoDocument\"\n                    projectID=\"39\" [image]=\"certificationApplication?.photoDocument || {}\" accept=\"image/jpeg\"\n                    [imageBlobUrl]=\"imageBlobUrl\"\n                    (onImageUpload)=\"onFilePhotoDocumentUpload($event)\" (onImageRemove)=\"onFilePhotoDocumentRemoved($event)\"\n                    (onImageDownload)=\"onPhotoDocumentDownload($event)\">\n                  </oepa-lynx-image-upload>\n                  <div *ngIf=\"photoExpiredMsg\">\n                    <div class=\"alert alert-warning\">{{photoExpiredMsg}}</div>\n                  </div>\n                </div>\n              </div>\n              </div>\n            </div>\n        <div class=\"card\">\n              <div class=\"card-header alert-info mb-3\">\n                <div class=\"row\">\n                  <div class=\"col-sm-12\">\n                    <div class=\"card-title\">\n                      9. Other attachments\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"card-body\">\n                <oepa-multi-file-upload [group]=\"certificationApplicationFormGroup\" field=\"documents\" label=\"Upload a file\"\n                  errorLabel=\"A file\" [showValidation]=\"showValidation\" [attachments]=\"certificationApplication?.documents || []\"\n                  (fileUploaded)=\"onMultiFileUploaded($event, 'documents')\" \n                  (fileRemoved)=\"onMultiFileRemoved($event, 'documents')\" (download)=\"onFileDownloaded($event)\">\n                </oepa-multi-file-upload>\n              </div>\n        </div>\n        <div *ngIf=\"!isExternalUser || mode === 'view'\" class=\"card\">\n          <div class=\"card-header alert-info mb-3\">\n            <div class=\"row\">\n              <div class=\"col-sm-12\">\n                <div class=\"card-title\">\n                  10. Submitter\n                </div>\n              </div>\n            </div>\n          </div>\n            <oepa-certification-submitter  [submitterGroup]=\"certificationApplicationFormGroup\"  [showValidation]=\"showValidation\"></oepa-certification-submitter>\n        </div>\n            \n        <div *ngIf=\"certificationApplication?.expReminderSentDate && certificationApplication?.expReminderDocument\" class=\"card\">\n        \t<div class=\"card-header alert-info mb-3\">\n          \t\t<div class=\"row\">\n            \t\t<div class=\"col-sm-12\">\n              \t\t\t<div class=\"card-title\">\n                \t\t\t11. Reminder Letter\n              \t\t\t</div>\n            \t\t</div>\n          \t\t</div>\n        \t</div>\n          <div *ngIf=\"certificationApplication?.expReminderDocument\">\n            <oepa-reminder-letter-info [expReminderDocument]=\"certificationApplication!.expReminderDocument!\" \n                                       [expReminderSentDate]=\"certificationApplication!.expReminderSentDate!\"></oepa-reminder-letter-info>\n          </div>\n      \t</div>\n        <div *ngIf=\"isExternalUser\" class=\"card\">\n            <div class=\"card-header alert-info mb-3\">\n              <div class=\"row\">\n                <div class=\"col-sm-12\">\n                  <div class=\"card-title\">\n                      Attestation\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div class=\"card-body\">\n                <div class=\"form-group row\">\n                  <div  class=\"col-md-12\" [ngClass]=\"{'is-invalid':showValidation  && certificationApplicationFormGroup.controls['attested'].status === 'INVALID'}\" > \n                      <div>\n                          <label [ngStyle]=\"{ 'font-weight': certificationApplicationFormGroup.get('attested')?.value && certificationApplicationFormGroup.disabled ? 'bold' : '' }\">\n                              <input type=\"checkbox\" formControlName=\"attested\" id=\"attested\">\n                              I solemnly swear that the answers I have given on this application and all other information submitted, \n                              are accurate, complete and true to the best of my knowledge\n                          </label>\n                          <small class=\"invalid-feedback\" *ngIf=\"certificationApplicationFormGroup.controls['attested'].hasError('required')\">Attestation is required</small>\n                      </div>\n                      <div>\n                        <small class=\"text-danger\" *ngIf=\"showValidation &&  !(certificationApplicationFormGroup.controls['attested'].value === true )\" >\n                          Attestation is required\n                        </small>\n                      </div> \n                  </div> \n                </div> \n            </div> \n          </div>\n        \n      <div class=\"asbestos-footer\">\n          <oepa-certification-button-bar [certificationApplication]=\"certificationApplication\" [mode]=\"mode\" [userAccount]=\"userAccount\"\n            [message]=\"message\"\n            [certificationApplicationFormGroup]=\"certificationApplicationFormGroup\" [(showValidation)]=\"showValidation\"></oepa-certification-button-bar>\n        </div>\n  </div> \n</div>\n","import { Component, Input, OnInit, Output, EventEmitter } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\n\n@Component({\n  selector: 'oepa-replacement-reason',\n  templateUrl: './replacement-reason.component.html',\n  styleUrls: ['./replacement-reason.component.css']\n})\nexport class ReplacementReasonComponent implements OnInit {\n  @Input() showValidation: boolean = false;\n  @Input()  reasonGroup!: FormGroup;\n  @Output() reasonGroupChange: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n  constructor() {}\n\n  ngOnInit() {}\n\n}","<div class=\"card\">\n\n    <form [formGroup]=\"reasonGroup\">\n    \t<div class=\"card-body\">\n      \t  <div class=\"row\">\n        \t<div class=\"col-md-12\">\n         \t  <div class=\"form-group\">\n\t\t\t\t<label>Reason</label>\n\t\t\t\t<input [ngClass]=\"{'is-invalid':showValidation && reasonGroup.controls['replacementReason'].status === 'INVALID'}\" \n\t\t\t\t\ttype=\"text\" class=\"form-control\" placeholder=\"Reason\" formControlName=\"replacementReason\" id=\"replacementReason\">\n\t\t\t\t<small class=\"invalid-feedback\" *ngIf=\"true\">Replacement Reason is required</small>\n\t\t\t  </div>\n            </div>\n          </div>\n        </div>\n    </form>\n\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { OepaMessage, OepaMessageType } from 'oepa-ui-lib';\nimport { OepaUserAccountService, OepaUserAccount, OepaAttachment, OepaFileUtilService, OEPAReference} from 'oepa-common-lib';\n\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\n\nimport { CertificationService } from '../common-service/certification.service';\nimport { CertificationMappingService } from '../common-service/certification-mapping.service';\n\nimport { CertificationApplication } from '../certification-application/certification-application';\nimport { AllowedUserActions } from '../../allowed-user-actions/allowed-user-actions';\nimport { AllowedUserActionsService } from '../../allowed-user-actions/allowed-user-actions.service';\nimport { NotificationService } from '../../../notification-common/notification-service/notification.service';\nimport { CertificationApplicationDocumentNames } from '../server/certification-application-doc-names';\n@Component({\n  selector: 'oepa-certification-replace-application',\n  templateUrl: './certification-replace-application.component.html',\n  styleUrls: ['./certification-replace-application.component.css']\n})\nexport class CertificationReplaceApplicationComponent implements OnInit {\n  public mode: string = '';\n  public errorMessage: string = '';\n  public inProgressMsg: string = '';\n  public isInProgress = false;\n  public certificationApplication: CertificationApplication | undefined;\n  public certificationTypes:Array<OEPAReference> | undefined;\n  public certificationApplicationFormGroup!: FormGroup;\n  public imageRoot = '/AngularWebApp/assets/images';\n  public showValidation: boolean = true;\n  public actionPending: string = '';\n  public message = new OepaMessage('', undefined);\n  public userAccount: OepaUserAccount | undefined;\n  public allowedActions: AllowedUserActions = new AllowedUserActions();\n  public isExternalUser: boolean = false;\n  public disableApplicantTable = false;\n  uploadErrorMessage: string = ''; \n\n  public employerHelpText = 'An employer of the certification address(es) must be provided.  A company as identified on this \\\n  form means any organization, business, corporation, establishment, agency, office, institution, etc.   \\\n  This is used by Ohio EPA in order to establish the type of entity that is being regulated.  Please search for the employer first \\\n  and if not found, a new employer must be created.';\n  \npublic showMessage(msg: string, msgType: OepaMessageType, logMsg?: string) {\n    this.message = new OepaMessage(msg, msgType, logMsg);\n  }\n public loadMessage(message: OepaMessage) {\n    this.message = message;\n  }\n  \n  //@Input() contractorInfo = {};\n // @Output() contractorInfoChange: EventEmitter<ContractorInformation> = new EventEmitter();\n \n  constructor(\n    private fb: FormBuilder,\n    private route: ActivatedRoute,\n    private userAccountService: OepaUserAccountService,\n    private allowedActionsService: AllowedUserActionsService,\n    private certificationService: CertificationService,\n    private certificationMappingService: CertificationMappingService,\n    private fileUtilService: OepaFileUtilService,\n    private notificationService: NotificationService\n  ) {\n\n    this.userAccountService.retrieveAccountForCurrentUser().subscribe(\n    { next : (user) => {\n      if (user) {\n        this.userAccount = user;\n        this.isExternalUser = this.userAccount.type === 'E_BUSINESS_CENTER';\n        this.allowedActions = this.allowedActionsService.getAllowedActionsForUser(this.userAccount);\n      } else {\n        this.showMessage('', OepaMessageType.ERROR, 'No UserAccount for current user');\n      }\n    }, error : err => {\n      this.showMessage('', OepaMessageType.ERROR, 'Cannot retrieve user: ' + err)\n    }});\n  }\n\n  ngOnInit() {\n    this.inProgressMsg = 'Loading certification application...';\n    const parms = this.route.snapshot.params;\n    this.mode = parms['mode'];\n    this.certificationService.retrieveCertificationApplication(parms['id']).subscribe(\n    { next : result => {\n      //console.log(\"retrieveCertificationApplication:\",JSON.stringify(result.obj));\n      if (result?.success && result.obj) {\n        this.loadCertificationApplication(result.obj);\n      }\n    }, error : error => {\n      console.log(\"retrieveCertificationApplication:\",JSON.stringify(error));\n    }});\n  }\n\n  private loadCertificationApplication(asbestosCertificationApplication: AsbestosCertificationApplication) {\n    //console.log('asbestosCertificationApplication: ' + JSON.stringify(asbestosCertificationApplication));\n    this.certificationApplication = this.certificationMappingService.mapCertificationApplicationObjToFormCertificationApplication(asbestosCertificationApplication);\n    //console.log('Form certificationApplication: ' + JSON.stringify(this.certificationApplication));\n    if (this.certificationApplication) {\n      this.isInProgress = false;\n      this.createForm();\n    } else {\n      console.log('ERROR: No certificationApplication!');\n    }\n  }\n\n  private createForm() {  \n    this.certificationApplicationFormGroup = this.fb.group({\n    \n      applicationID: this.certificationApplication ? this.certificationApplication.id:'',\n      certification: this.certificationApplication ? this.certificationApplication.certification:{},\n      revenue: (this.certificationApplication && this.certificationApplication.revenue) ? this.certificationApplication.revenue:{},\n      applicationType: this.certificationApplication ? this.certificationApplication.applicationType:'',\n      applicationStatus: this.certificationApplication ? this.certificationApplication.applicationStatus:'',\n\n      certificationType: this.certificationApplication?.certificationType,\n      applicantFirstName: (this.certificationApplication && this.certificationApplication.applicantFirstName) ? this.certificationApplication.applicantFirstName:\"tester\",\n      applicantMiddleName: (this.certificationApplication&& this.certificationApplication.applicantMiddleName) ? this.certificationApplication.applicantMiddleName:\"F\",\n      applicantLastName: (this.certificationApplication && this.certificationApplication.applicantLastName) ? this.certificationApplication.applicantLastName:'EPA',\n      applicantMailingAddress:(this.certificationApplication && this.certificationApplication.applicantMailingAddress) ?this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.applicantMailingAddress):this.certificationMappingService.buildAsbestosStreetAddressForm(undefined),\n      applicantEmail:  (this.certificationApplication && this.certificationApplication.applicantEmail) ? this.certificationApplication.applicantEmail : '',\n      applicantInfo: this.certificationMappingService.buildApplicantInformationForm(this.certificationApplication?.applicantInfo),\n\n      employerInfo: this.certificationMappingService.buildEmployerInformationForm(this.certificationApplication?.employerInfo),\n      employerEntityID: (this.certificationApplication && this.certificationApplication.employerEntityID ) ? this.certificationApplication.employerEntityID:'',\n      \n      employerName: (this.certificationApplication && this.certificationApplication.employerName ) ? this.certificationApplication.employerName:'',\n      employerMailingAddress: (this.certificationApplication && this.certificationApplication.employerMailingAddress) ?this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.employerMailingAddress):this.certificationMappingService.buildAsbestosStreetAddressForm(undefined), \n      employerPhone: (this.certificationApplication && this.certificationApplication.employerPhone ) ? this.certificationApplication.employerPhone:'',\n      employerEmail: (this.certificationApplication && this.certificationApplication.employerEmail ) ? this.certificationApplication.employerEmail:'',\n\n      //mailToType: (this.certificationApplication && this.certificationApplication.mailToType ) ? this.certificationApplication.mailToType:'',\n      mailToType: this.certificationApplication?.mailToOther ? 'Other' : this.certificationApplication?.mailToApplicant ? 'Home' : this.certificationApplication?.mailToEmployer ? 'Employer' : '',\n      mailToApplicant: (this.certificationApplication && this.certificationApplication.mailToApplicant ) ? this.certificationApplication.mailToApplicant:'',\n      mailToEmployer: (this.certificationApplication && this.certificationApplication.mailToEmployer ) ? this.certificationApplication.mailToEmployer:'',\n\n      mailToOther: (this.certificationApplication && this.certificationApplication.mailToOther ) ? this.certificationApplication.mailToOther:'',\n      otherMailingAddress: (this.certificationApplication && this.certificationApplication.otherMailingAddress) ?this.certificationMappingService.buildAsbestosStreetAddressForm(this.certificationApplication.otherMailingAddress):this.certificationMappingService.buildAsbestosStreetAddressForm(undefined), \n      \n      receivedDate: this.certificationApplication?.receivedDate, // only use for internal users\n      submitDate: this.certificationApplication?.submitDate,\n      denyDate: this.certificationApplication?.denyDate,\n      approveDate: this.certificationApplication?.approveDate,\n      issueDate: this.certificationApplication?.issueDate,\n      expirationDate: this.certificationApplication?.expirationDate,\n      reviewDate: this.certificationApplication?.reviewDate,\n      source: this.certificationApplication?.source,\n      ebizSubmitAccount: this.certificationApplication?.ebizSubmitAccount,\n      replacementReason: this.certificationApplication?.replacementReason,\n      \n      documents: [this.certificationApplication?.documents && this.certificationApplication?.documents.length > 0 ? this.certificationApplication?.documents : []],\n\n      submitterName: this.certificationApplication?.submitterName,\n      attested: this.certificationApplication?.attested\n      \n    });\n    if (!this.isExternalUser) {\n      if (this.certificationApplication?.source != 'Mail') {\n        this.certificationApplicationFormGroup.controls['receivedDate'].disable();\n        this.certificationApplicationFormGroup.controls['submitterName'].disable();\n      }\n    } else {\n      this.certificationApplicationFormGroup.controls['receivedDate'].disable();\n      this.certificationApplicationFormGroup.controls['submitterName'].disable();\n    }\n    this.certificationApplicationFormGroup.controls['submitterName'].valueChanges.subscribe(\n    { next : submitterName => {\n      if (this.certificationApplication) {\n        this.certificationApplication.submitterName = submitterName;\n      }\n    }});\n    this.certificationApplicationFormGroup.controls['receivedDate'].valueChanges.subscribe(\n    { next : receivedDate => {\n      if (this.certificationApplication) {\n        this.certificationApplication.receivedDate = receivedDate;\n      }\n    }});\n    \n /*   \n    alert (this.certificationApplication.mailToOther);\n    this.certificationApplicationFormGroup.patchValue({\n      mailToType: this.certificationApplication.mailToOther ? 'Other' : this.certificationApplication.mailToApplicant ? 'Home' : this.certificationApplication.mailToEmployer ? 'Employer' : ''\n    });\n*/    \n    this.certificationApplicationFormGroup.controls['replacementReason'].valueChanges.subscribe(\n    { next : replacementReason => {\n      if (this.certificationApplication) {\n        this.certificationApplication.replacementReason = replacementReason;\n      }\n    }});\n\n     this.certificationApplicationFormGroup.valueChanges.subscribe(\n     { next : certificationApplicationForm => {\n       if (this.certificationApplication && certificationApplicationForm.applicationType) {\n         this.certificationApplication.applicationType = certificationApplicationForm.applicationType;\n       }\n       if (this.certificationApplication && certificationApplicationForm.applicationStatus) {\n        this.certificationApplication.applicationStatus = certificationApplicationForm.applicationStatus;\n      }\n     }});\n     \n    this.certificationApplicationFormGroup.get('applicantInfo')?.valueChanges.subscribe(\n    { next : (applicantInformation) => {\n      if (applicantInformation) {\n        if (this.certificationApplication && !this.certificationApplication.applicantMailingAddress) {\n          this.certificationApplication.applicantMailingAddress = { };\n        } else if (this.certificationApplication && !this.certificationApplication.applicantMailingAddress) {\n          this.certificationApplication.applicantMailingAddress = { };\n        } else if (this.certificationApplication && !this.certificationApplication.applicantMailingAddress) {\n          this.certificationApplication.applicantMailingAddress = {};\n        }\n        \n        if (this.certificationApplication) {\n          this.certificationApplication.applicantMailingAddress = applicantInformation.applicantMailingAddress;\n  \n          this.certificationApplication.applicantEmail = applicantInformation.applicantEmail;\n          this.certificationApplication.applicationStatus = applicantInformation.applicationStatus;\n          this.certificationApplication.applicationType = applicantInformation.applicationType;\n        }\n      }\n    }});\n    \n    this.certificationApplicationFormGroup.get('mailToType')?.valueChanges.subscribe(\n    { next : (mailToType) => {\n      if (this.certificationApplication && !this.certificationApplication.mailToType) {\n        this.certificationApplication.mailToType = '';\n      }\n\n      if (this.certificationApplication) {\n        this.certificationApplication.mailToType = mailToType;\n        this.certificationApplication.mailToApplicant = (mailToType === 'Home'); \n        this.certificationApplication.mailToEmployer = (mailToType === 'Employer');\n        this.certificationApplication.mailToOther = (mailToType === 'Other');  \n      }\n      \n    }});\n    \n    this.certificationApplicationFormGroup.get('otherMailingAddress')?.valueChanges.subscribe(\n    { next : (otherMailingAddress) => {\n      if (this.certificationApplication && !this.certificationApplication.otherMailingAddress) {\n        this.certificationApplication.otherMailingAddress = { };\n      }\n      \n      if (this.certificationApplication) {\n        this.certificationApplication.otherMailingAddress = otherMailingAddress;\n      }\n    }});\n    \n    this.certificationApplicationFormGroup.get('attested')?.valueChanges.subscribe(\n    { next : attested => {\n      if (this.certificationApplication) {\n        this.certificationApplication.attested = attested;\n      }\n    }});\n    \n    if (this.mode !== 'edit') {\n      this.certificationApplicationFormGroup.disable();\n      this.disableApplicantTable      = true;\n      this.certificationApplicationFormGroup.controls['documents'].disable();\n    } else {\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('contactInfo')?.disable();\n      this.certificationApplicationFormGroup.controls['applicantInfo'].get('streetAddress')?.disable();\n      this.certificationApplicationFormGroup.controls['employerInfo'].disable();    \n    }\n  }\n \n  onFileDownloaded(attachment: OepaAttachment) {\n    console.log('onFilePlannedDemolitionAttachmentDownload');\n    this.message = new OepaMessage('', undefined);\n    if (attachment.id && attachment.userFilename) {\n      this.notificationService.getAttachmentContent(attachment.id).subscribe(\n      { next : (content) => {\n        const mimeType: string = this.fileUtilService.mimeTypeForFile(attachment.userFilename!);\n        if (mimeType) {\n          this.fileUtilService.downloadFile(content, mimeType, attachment.userFilename);\n        } else {\n          this.uploadErrorMessage = 'Unable to download file: ' + attachment.userFilename + '. Cannot determine mime type';\n          this.showMessage('', OepaMessageType.ERROR, this.uploadErrorMessage);\n        }\n      }, error : err => {\n        this.uploadErrorMessage = 'File download failed' + (err.error.message ? ': ' + err.error.message : '');\n        this.showMessage('', OepaMessageType.ERROR, this.uploadErrorMessage);\n        console.log(this.uploadErrorMessage);\n      }});\n    }\n  }\n  \n  onFilesChange(attachment: OepaAttachment) {\n    this.message = new OepaMessage('', undefined);\n    // const notification = this.notificationProfileService.getNotification();\n    if (this.certificationApplication?.id) {\n      this.certificationService.createNamedAttachment(this.certificationApplication.id, CertificationApplicationDocumentNames.certificationApplicationAttachmentName, attachment).subscribe(\n      { next : (id) => {\n        if (id) {\n          attachment.id = id;\n          if (this.certificationApplication) {\n            this.certificationApplication.documents?.push(attachment);\n            this.certificationApplication.documents = this.certificationApplication.documents?.slice();\n          }\n        } else {\n          const errMessage = 'File upload failed.';\n          this.showMessage(errMessage, OepaMessageType.ERROR, this.uploadErrorMessage);\n          console.log(this.uploadErrorMessage);\n        }\n      }, error : err => {\n        this.uploadErrorMessage = 'File upload failed: ' + err;\n        this.showMessage('', OepaMessageType.ERROR, this.uploadErrorMessage);\n        console.log(this.uploadErrorMessage);\n      }});\n    }\n  }\n\n  onFilesRemoved(attachment: OepaAttachment) {\n    this.message = new OepaMessage('', undefined);\n    // const notification = this.notificationProfileService.getNotification();\n    if (this.certificationApplication?.id && attachment.id) {\n      this.certificationService.deleteNamedAttachment(this.certificationApplication.id, CertificationApplicationDocumentNames.certificationApplicationAttachmentName, attachment.id).subscribe(\n      { next : () => {\n        if (this.certificationApplication) {\n          this.certificationApplication.documents = this.certificationApplication.documents?.filter((file) => {\n            return file.userFilename !== attachment.userFilename;\n          });\n        }\n      }, error : err => {\n        this.uploadErrorMessage = 'Delete file failed: ' + err;\n        this.showMessage('', OepaMessageType.ERROR, this.uploadErrorMessage);\n        console.log(this.uploadErrorMessage);\n      }});\n    }\n  }\n  \n}\n","<div class=\"oepa-form\">\n  <div *ngIf=\"isInProgress\">\n    <div class=\"alert alert-info text-center\">\n      <h3>{{inProgressMsg}}</h3>\n      <span class=\"spinner-border text-primary\" role=\"status\"></span>\n    </div>\n  </div>\n<!--<div *ngIf=\"errorMessage && !isInProgress\" class=\"alert alert-danger\">\n  {{errorMessage}}\n</div>-->\n<div *ngIf=\"!isInProgress && certificationApplicationFormGroup\" class=\"container-fluid\" [formGroup]=\"certificationApplicationFormGroup\">\n    <div class=\"card-body\">\n    <div *ngIf=\"certificationApplicationFormGroup.controls['source'].value === 'Mail'\">\n      <oepa-certification-official-use [group]=\"certificationApplicationFormGroup\" [showValidation]=\"showValidation\"></oepa-certification-official-use>\n    </div>\n    <div class=\"card\"> \n      <div class=\"card-body \">\n          <p>You may click the \"Validate\" button at\n            the bottom of the screen to see a list of required elements.</p>\n          <p>Provision of your Social Security Number (SSN) is mandated by Ohio Revised Code section 3123.50 and \n            Ohio Administrative Code Chapter 3745-22.  Your SSN may be used for purposes including, but not limited to, \n          identification of obligators under child support orders and verification of identity. </p>\n          <p>By signing below, I solemnly swear that the answers I have given on this application and all other information submitted, \n          are accurate, complete and true to the best of my knowledge. </p>\n          <p>Knowingly making a false statement or knowingly swearing or affirming the truth to a false statement previously made to \n\t\t        gain approval is a criminal offense.  See Ohio Revised Code section 2921.13. </p>\n          \n      </div>\n    </div>\n\n    <oepa-applicant-information [applicantInfoGroup]=\"certificationApplicationFormGroup.controls['applicantInfo'] | formControl\"\n    [mode]=\"mode\"  [allowEdit]=\"false\" [showValidation]=\"showValidation\"  [isExternalUser]=\"isExternalUser\" [appID]=\"certificationApplication?.id || ''\"></oepa-applicant-information>\n    <!-- (applicantInfoGroupChange)=\"onApplicantInfoGroupChanged($event)\" -->\n   \n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-8\">\n            <div class=\"card-title\">2. Employer</div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-body\">\n        <oepa-employer-info [group]=\"certificationApplicationFormGroup.controls['employerInfo'] | formControl\" [showValidation]=\"showValidation\"  [employerNameLabel]=\"'Employer Name'\" ></oepa-employer-info>\n      </div>\n    </div>\n    \n    <div class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-3\">\n            <div class=\"card-title\">\n                3. Mail my certification letter and card to     \n            </div>\n          </div>\n          <div class=\"col-md-2\">\n              <label class=\"md-check\">\n              <input type=\"radio\" value=\"Home\" name=\"mailToType\" formControlName=\"mailToType\"> Home Address&nbsp;&nbsp;\n              </label>\n          </div>\n          <div class=\"col-md-2\">\n              <label class=\"md-check\">\n                <input type=\"radio\" value=\"Employer\" name=\"mailToType\" formControlName=\"mailToType\"> Employer Address&nbsp;&nbsp;\n              </label>\n          </div>\n          <div class=\"col-md-2\">\n              <label class=\"md-check\">\n                <input type=\"radio\" value=\"Other\" name=\"mailToType\" formControlName=\"mailToType\"> Other Address&nbsp;&nbsp;\n              </label>\n          </div>\n          <div class=\"col-md-5\"></div>\n        </div>\n      </div>\n    </div>\n    \n\t<div *ngIf=\"certificationApplication?.mailToOther\" class=\"card\">\n      <div class=\"card-header alert-info mb-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-3\">\n            <div class=\"card-title\">\n                4. OtherAddress:     \n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"card-body\" >\n      \t<oepa-address [group]=\"certificationApplicationFormGroup.controls['otherMailingAddress'] | formControl\" addressOneLabel=\"Other Mailing Address\" zipCodeLabel=\"Zip\" [showValidation]=\"showValidation\"></oepa-address>\n      </div>\n    </div>\n    \n    <div class=\"card\">\n        <div class=\"card-header alert-info mb-3\">\n          <div class=\"row\">\n            <div class=\"col-sm-12\">\n              <div *ngIf=\"!certificationApplication?.mailToOther\" class=\"card-title\">\n                4. Replacement\n              </div>\n              <div *ngIf=\"certificationApplication?.mailToOther\" class=\"card-title\">\n                5. Replacement\n              </div>\n            </div>\n          </div>\n        </div>\n          <oepa-replacement-reason [reasonGroup]=\"certificationApplicationFormGroup\" [showValidation]=\"showValidation\"></oepa-replacement-reason>\n          <!-- <div *ngIf=\"uploadErrorMessage\" class=\"alert alert-danger\">{{uploadErrorMessage}}</div> -->\n      </div>\n      \n      <div class=\"card\">\n              <div class=\"card-header alert-info mb-3\">\n                <div class=\"row\">\n                  <div class=\"col-sm-12\">\n                  \t<div *ngIf=\"!certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t5. Other attachments\n                \t</div>\n                \t<div *ngIf=\"certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t6. Other attachments\n                \t</div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"card-body\">\n                <oepa-multi-file-upload [group]=\"certificationApplicationFormGroup\" field=\"documents\" label=\"Upload a file\"\n                  errorLabel=\"A file\" [showValidation]=\"showValidation\" [attachments]=\"certificationApplication?.documents || []\"\n                  (fileUploaded)=\"onFilesChange($event)\" (fileRemoved)=\"onFilesRemoved($event)\" (download)=\"onFileDownloaded($event)\">\n                </oepa-multi-file-upload>\n                <!-- <div *ngIf=\"uploadErrorMessage\" class=\"alert alert-danger\">{{uploadErrorMessage}}</div> -->\n              </div>\n        </div>\n\n    <div *ngIf=\"!isExternalUser || mode === 'view'\" class=\"card\">\n\t\t<div class=\"card-header alert-info mb-3\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-sm-12\">\n\t\t\t\t\t<div *ngIf=\"!certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t6. Submitter\n                \t</div>\n                \t<div *ngIf=\"certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t7. Submitter\n                \t</div>\n              \t</div>\n            </div>\n\t\t</div>\n        <oepa-certification-submitter  [submitterGroup]=\"certificationApplicationFormGroup\"  [showValidation]=\"showValidation\"></oepa-certification-submitter>\n\t</div>\n\n\t<div *ngIf=\"certificationApplication?.expReminderSentDate && certificationApplication?.expReminderDocument\" class=\"card\">\n        <div class=\"card-header alert-info mb-3\">\n          \t<div class=\"row\">\n          \t\t<div class=\"col-sm-12\">\n\t\t\t\t\t<div *ngIf=\"!certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t7. Reminder Letter\n                \t</div>\n                \t<div *ngIf=\"certificationApplication?.mailToOther\" class=\"card-title\">\n                  \t\t8. Reminder Letter\n                \t</div>\n        \t\t</div>\n        \t</div>\n        \t<oepa-reminder-letter-info [expReminderDocument]=\"certificationApplication!.expReminderDocument!\" \n                                     [expReminderSentDate]=\"certificationApplication!.expReminderSentDate!\"></oepa-reminder-letter-info>\n    \t</div>\n    </div>\n\t\n\t<div *ngIf=\"isExternalUser\" class=\"card\">\n\t\t<div class=\"card-header alert-info mb-3\">\n\t\t\t<div class=\"row\">\n                <div class=\"col-sm-12\">\n                  <div class=\"card-title\">\n                      Attestation\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div class=\"card-body\">\n                <div class=\"form-group row\">\n                  <div  class=\"col-md-12\" [ngClass]=\"{'is-invalid':showValidation  && certificationApplicationFormGroup.controls['attested'].status === 'INVALID'}\" > \n                      <div>\n                          <label>\n                              <input type=\"checkbox\" formControlName=\"attested\" id=\"attested\">\n                              I solemnly swear that the answers I have given on this application and all other information submitted, \n                              are accurate, complete and true to the best of my knowledge.\n                          </label>\n                          <small class=\"invalid-feedback\" *ngIf=\"certificationApplicationFormGroup.controls['attested'].hasError('required')\">Attestation is required</small>\n                      </div>\n                      <div>\n                        <small class=\"text-danger\" *ngIf=\"showValidation &&  !(certificationApplicationFormGroup.controls['attested'].value === true )\" >\n                          Attestation is required\n                        </small>\n                      </div> \n\t\t\t\t</div> \n\t\t\t</div> \n\t\t</div>\n    </div>      \n\t<div class=\"asbestos-footer\">\n    \t<oepa-certification-button-bar [certificationApplication]=\"certificationApplication\" [mode]=\"mode\" [userAccount]=\"userAccount\"\n            [certificationApplicationFormGroup]=\"certificationApplicationFormGroup\"></oepa-certification-button-bar>\n    </div>\n  </div> \n</div>\n\n","import { Component, OnInit, Input } from '@angular/core';\nimport { EventEmitter, } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { OepaTableHeader, OepaTableRow, OepaTableConfig } from 'oepa-ui-lib';\nimport { OepaUserAccountService, OepaUserAccount, OepaMappingService } from 'oepa-common-lib';\nimport { NewCertificationContractorModalComponent } from '../../../shared/certification/new-certification-contractor-modal/new-certification-contractor-modal.component';\nimport { CertificationSearchComponentService } from '../../../internal/certification/certification-search/certification-search-component.service';\nimport { AllowedUserActions } from '../../allowed-user-actions/allowed-user-actions';\nimport { AsbestosCertificationApplication } from '../server/asbestos-certification-application';\nimport { CertificationPrivilegeTypes } from '../../certification-privilege-types';\nimport { AsbestosCertifiedPerson } from '../../server/asbestos-certified-person';\nimport { AsbestosCertifiedPersonFilter } from '../../server/certified-person-filter';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n  selector: 'oepa-new-certification-modal',\n  templateUrl: './new-certification-modal.component.html',\n  styleUrls: ['./new-certification-modal.component.css']\n})\n\nexport class NewCertificationModalComponent implements OnInit {\n  public imageRoot: string = '/AngularWebApp/assets/images';\n  public isInProgress: boolean = false;\n  public inProgressMsg: string = '';\n  public searchFormGroup!: FormGroup;\n  public searchComplete: boolean = false;\n  public searchPerformed: boolean = false;\n  public openSearchCriteria: boolean = true;\n  public userAccount: OepaUserAccount | undefined;\n  public allowedUserActions: AllowedUserActions | null = null;\n  public errorMessage: string = '';\n  public contractorTableData: Array<OepaTableRow> = [];\n  public selectedPerson: AsbestosCertifiedPerson | undefined;\n  public info: EventEmitter<any> = new EventEmitter(true);\n  public tableConfig: OepaTableConfig = {\n    rowsPerPage: 10,\n    classNames: ['table-striped', 'table-bordered', 'table-sm'],\n    hideFooter: true\n  };\n  public createCertificationAllowed = false;\n  public tableHeader!: OepaTableHeader;\n  public allowedActions: AllowedUserActions = new AllowedUserActions();\n  public existing: boolean = false;\n  public selectedContractor: AsbestosCertificationApplication = {};\n  public certificationApplication: AsbestosCertificationApplication = {};\n  \n  @Input() sourceType: string = '';\n\n  constructor(private fb: FormBuilder,\n    private certificationSearchComponentService: CertificationSearchComponentService,\n    private modalService: BsModalService,\n    private toastr: ToastrService,\n    public bsModalRef: BsModalRef,\n    private userAccountService: OepaUserAccountService,\n    private oepaMappingService: OepaMappingService) {\n  }\n\n  ngOnInit() {\n    this.retrieveCurrentUserAccount();\n    this.isInProgress = true;\n    this.createForm(undefined);\n  }\n\n  private retrieveCurrentUserAccount() {\n    console.log('getting user account...');\n    this.userAccountService.retrieveAccountForCurrentUser().subscribe(\n    { next : (account: OepaUserAccount) => {\n      if (account) {\n        this.userAccount = account;\n        this.createCertificationAllowed = this.userAccountService.accountHasPrivilege(this.userAccount, CertificationPrivilegeTypes.createAllowed);\n        this.getCertificationColumns();\n      } else {\n        this.userAccountService.getWebappsRootURL().subscribe((webappsRootURL: string) => {\n          if (webappsRootURL) {\n            window.location.href = webappsRootURL;\n          } else {\n            const message = 'Connection with server was lost. Please return to login screen.';\n            this.toastr.error(message, 'ERROR');\n          }\n        });\n      }\n    }, error : err => {\n      this.errorMessage = 'Failed retrieving current user account: ' + err;\n    }});\n  }\n\n  private getCertificationColumns() {\n    return this.tableHeader = {\n      columns: [\n      //  { title: '', id: 'select', sort: 'none', selectColumn: true, className: 'select-col' },\n        { title: 'First Name', id: 'firstName', sort: 'none', filterable: true },\n        { title: 'Last Name', id: 'lastName', sort: 'none', filterable: true },\n        { title: 'DOB', id: 'applicantDateOfBirth', sort: 'none', filterable: true },\n        { title: 'Last 4 SSN', id: 'applicantLast4ssn', sort: 'none', filterable: true },\n        { title: 'Certification #', id: 'certificationNumber', sort: 'none', filterable: true },\n      ]\n    }\n  }\n\n  private convertDataTocontractorTableRow(person: AsbestosCertifiedPerson): OepaTableRow {\n    let certificationNumbers = '';\n    let prefix = '';\n    if (person.certifications) {\n      person.certifications.forEach(certification => {\n        certificationNumbers += prefix + certification.certificationNumber;\n        prefix = ', ';\n      });\n    }\n    const row: OepaTableRow = {\n      cells: [\n        { id: 'firstName', value: person ? person.firstName:'' },\n        { id: 'lastName', value: person ? person.lastName : '' },\n        { id: 'applicantLast4ssn', value: person ? person.last4ssn : '' },\n        { id: 'applicantDateOfBirth', value: person && person.dateOfBirth ? this.oepaMappingService.mapDateToDateDateString(new Date(person.dateOfBirth)) : '', sortValue: person.dateOfBirth ? new Date(person.dateOfBirth) : null },\n        { id: 'certificationNumber', value: certificationNumbers },\n      ],\n      dataSource: person,\n      actions: undefined,\n      selectable: true,\n    };\n    return row;\n  }\n\n  public reset() {\n    this.searchFormGroup.reset();\n    this.openSearchCriteria = true;\n    this.contractorTableData = [];\n    this.searchPerformed = false;\n    this.errorMessage = '';\n    this.searchComplete = false;\n  }\n\n  private createForm(searchFilter: AsbestosCertifiedPersonFilter | undefined) {\n    if (searchFilter) {\n      this.searchFormGroup = this.fb.group({\n        applicantLast4ssn: searchFilter ? searchFilter.applicantLast4ssn : '',\n        applicantDateOfBirth: searchFilter ? searchFilter.applicantDateOfBirth : '',\n        applicantFirstname: searchFilter ? searchFilter.applicantFirstname : '',\n        applicantLastname: searchFilter ? searchFilter.applicantLastname : ''\n      });\n    }\n  }\n\n  private getSearchformValues(): AsbestosCertifiedPersonFilter {\n    const search: AsbestosCertifiedPersonFilter = {\n      applicantLast4ssn: this.searchFormGroup.controls['applicantLast4ssn'].value || undefined,\n      applicantDateOfBirth: this.searchFormGroup.controls['applicantDateOfBirth'].value || null,\n      applicantFirstname: this.searchFormGroup.controls['applicantFirstname'].value || undefined,\n      applicantLastname: this.searchFormGroup.controls['applicantLastname'].value || undefined\n    };\n    return search;\n  }\n\n  public submitSearch() {\n    this.searchComplete = false;\n    this.searchPerformed = true;\n    this.isInProgress = true;\n    this.inProgressMsg = \"Searching ...\";\n    const search = this.getSearchformValues();\n    this.selectedPerson = undefined;\n    this.contractorTableData = [];\n    this.errorMessage = '';\n\n    this.certificationSearchComponentService.searchPersons(search).subscribe(\n    { next : (persons: AsbestosCertifiedPerson[]) => {\n      this.isInProgress = false;\n      this.searchComplete = true;\n\n      if (persons && persons.length == 1) {\n        this.selectedPerson = persons[0];\n        this.refreshTable(this.selectedPerson);\n      } else if (persons && persons.length > 1) {\n        this.errorMessage = 'Multiple records matching the search criteria were found. ';\n        this.contractorTableData = [];\n      } else {\n        this.errorMessage = 'No records matching the search criteria were found. Please verify the information entered is correct and contact Ohio EPA staff at 614-644-0226 if you held a certification in the past that was not found during the search. ';\n        this.contractorTableData = [];\n      }\n    }, error : err => {\n          this.errorMessage = 'Search failed: ' + err;\n          this.isInProgress = false;\n          this.searchComplete = true\n    }});\n  }\n\n  public refreshTable(person: AsbestosCertifiedPerson) {\n    this.contractorTableData = [];\n    if (person) {\n      let row: OepaTableRow = this.convertDataTocontractorTableRow(person);\n      this.contractorTableData.push(row);\n      this.contractorTableData = this.contractorTableData.slice();\n    }\n  }\n\n  public createNewContractor() {\n    this.info.emit(true);\n    const initialState = {\n      person: this.selectedPerson,\n      sourceType: this.sourceType\n    }\n\n    const newContractorCompl = this.modalService.show(NewCertificationContractorModalComponent, { initialState, class: 'modal-lg' ,ignoreBackdropClick: true});\n    (<NewCertificationContractorModalComponent>newContractorCompl.content).info.subscribe(\n    { next : () => {\n      newContractorCompl.hide();\n    }});\n  }\n\n  public cancel() {\n    this.info.emit(true);\n  }\n\n}\n","<div class=\"modal-header\">\n  <h4 class=\"modal-title\">\n    <b>Enter Last 4 SSN, Date of Birth, and Name</b>\n  </h4>\n  <button type=\"button\" class=\"btn-close\" (click)=\"bsModalRef.hide()\"></button>\n</div>\n\n<!-- <div *ngIf=\"isInProgress\">\n  <br>\n  <br>\n  <div class=\"alert alert-info text-center\">\n    <h3>{{inProgressMsg}}</h3>\n    <span class=\"spinner-border text-primary\" role=\"status\"></span>\n  </div>\n  <br>\n  <br>\n</div> \n<div *ngIf=\"errorMessage && !isInProgress\" class=\"alert alert-danger\">\n  {{errorMessage}}\n</div> -->\n\n<div class=\"modal-body\">\n  <!-- <div *ngIf=\"!isInProgress\" class=\"container-fluid\"> -->\n    <div  class=\"container-fluid\">\n\n    <form [formGroup]=\"searchFormGroup\" id=\"searchFormGroup\">\n      <div class=\"row\">\n\n        <div class=\"col-sm-6\">\n          <div class=\"form-group row text-start\">\n            <label class=\"col-sm-5\">Last 4 SSN</label>\n            <div class=\"col-sm-7\">\n              <input type=\"text\" class=\"form-control\"  formControlName=\"applicantLast4ssn\" id=\"applicantLast4ssn\" name=\"applicantLast4ssn\" mask=\"0000\" minlength=\"4\">    \n                <small class=\"alert text-danger\" *ngIf=\"searchFormGroup.controls['applicantLast4ssn'].value === '' || searchFormGroup.controls['applicantLast4ssn'].value === null\">required</small>\n            </div>\n          </div>\n        </div> \n        <div class=\"col-sm-6\">\n          <div class=\"form-group row text-start\">\n            <label class=\"col-sm-5\">Date of Birth</label>\n            <div class=\"col-sm-7\">\n                <oepa-datepicker id=\"dateofbirth\" name=\"dateofbirth\" [group]=\"searchFormGroup\" field=\"applicantDateOfBirth\"  ></oepa-datepicker>\n                <small class=\"alert text-danger\" *ngIf=\"searchFormGroup.controls['applicantDateOfBirth'].value === '' || searchFormGroup.controls['applicantDateOfBirth'].value === null\">required</small>                \n            </div>\n          </div>\n        </div> \n      </div>\n\n      <div class=\"row\">\n          <div class=\"col-sm-6\">\n              <div class=\"form-group row text-start\">\n                <label class=\"col-sm-5\">First Name</label>\n                <div class=\"col-sm-7\">\n                  <input type=\"text\" class=\"form-control\"  formControlName=\"applicantFirstname\" id=\"applicantFirstname\" name=\"applicantFirstname\" maxlength=\"50\">    \n                    <small class=\"alert text-danger\" *ngIf=\"searchFormGroup.controls['applicantFirstname'].value === '' || searchFormGroup.controls['applicantFirstname'].value === null\">required</small>\n                </div>\n              </div>\n          </div>      \n        <div class=\"col-sm-6\">\n            <div class=\"form-group row text-start\">\n              <label class=\"col-sm-5\">Last Name</label>\n              <div class=\"col-sm-7\">\n                <input type=\"text\" class=\"form-control\"  formControlName=\"applicantLastname\" id=\"applicantLastname\" name=\"applicantLastname\" maxlength=\"50\">    \n                  <small class=\"alert text-danger\" *ngIf=\"searchFormGroup.controls['applicantLastname'].value === '' || searchFormGroup.controls['applicantLastname'].value === null\">required</small>\n              </div>\n            </div>\n          </div>   \n      </div> \n\n      <div class=\"row\">       \n\n          <div class=\"col-sm-12 text-center\">\n              <button [disabled]=\"searchFormGroup.controls['applicantLast4ssn'].hasError('minlength') \n              || searchFormGroup.controls['applicantLastname'].value === '' || searchFormGroup.controls['applicantLastname'].value === null\n              || searchFormGroup.controls['applicantFirstname'].value === '' || searchFormGroup.controls['applicantFirstname'].value === null\n              || searchFormGroup.controls['applicantDateOfBirth'].value === '' || searchFormGroup.controls['applicantDateOfBirth'].value === null\" class=\"btn btn-primary\" \n              type=\"button\" id=\"applicantLast4ssn\" name=\"applicantLast4ssn\" (click)=\"submitSearch()\">Search</button>&nbsp;&nbsp;&nbsp;\n              <button class=\"btn btn-primary me-1\" type=\"button\" id = \"resetBtn\" name = \"resetBtn\" (click)=\"reset()\">Reset</button>    \n          </div>\n        \n          \n        <!-- <div class=\"col-sm-12 text-center\">\n          <button *ngIf=\"!isInProgress \n          && (searchFormGroup.controls['applicantLast4ssn'].value != null && searchFormGroup.controls['applicantDateOfBirth'].value != null && searchFormGroup.controls['applicantFirstName'].value != null && searchFormGroup.controls['applicantLastName'].value != null) \n          && (searchFormGroup.controls['applicantLast4ssn'].value != ''   && searchFormGroup.controls['applicantDateOfBirth'].value != ''   && searchFormGroup.controls['applicantFirstName'].value != ''   && searchFormGroup.controls['applicantLastName'].value != ''  )\" \n          class=\"btn btn-primary me-1\" type=\"submit\" id = \"searchBtn\" name = \"searchBtn\" (click)=\"submitSearch()\">Search</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n          <button class=\"btn btn-primary me-1\" type=\"button\" id = \"resetBtn\" name = \"resetBtn\" (click)=\"reset()\">Reset</button>         \n        </div> -->\n      </div>\n    </form> \n \n  </div>\n  <br>\n\n\n  <!-- <div *ngIf=\"!isInProgress && contractorTableData && contractorTableData.length > 0 && !certificationFound\" class=\"container-fluid\"> -->\n   <div *ngIf=\"!isInProgress && contractorTableData && contractorTableData.length > 0\"  class=\"container-fluid\">\n    <accordion>\n      <accordion-group panelClass=\"panel-info\" #searchGroup [isOpen]=\"contractorTableData && contractorTableData.length > 0\">\n        <div accordion-heading id=\"contractorCertificationTable\">\n          <div class=\"row\">\n            <div class=\"col-sm-12\">\n              <i class=\"float-xs-right fas\" id=\"contractorCertificationCount\" [ngClass]=\"{'bi-chevron-down': searchGroup?.isOpen, 'bi-chevron-right': !searchGroup?.isOpen}\"></i>\n              Contractor &nbsp;\n              <span class=\"badge\">{{contractorTableData.length}}</span>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"col-sm-12\" class=\"row\">\n          <oepa-table tableId=\"contractorCertificationTable\" [config]=\"tableConfig\" [data]=\"contractorTableData\" [header]=\"tableHeader\"> </oepa-table>\n        </div>\n\n      </accordion-group>\n    </accordion>\n  </div>\n\n</div>\n<div class=\"modal-footer\">\n  <div *ngIf=\"errorMessage\">\n    <div class=\"row\">\n      <div class=\"col-sm-12 text-center\">\n        <div class=\"alert alert-danger\">\n          {{errorMessage}}\n        </div>\n      </div>\n    </div>\n  </div>\n  <div *ngIf=\"selectedPerson\"\n    class=\"container-fluid\">\n    <div class=\"row\">\n      <div class=\"col-sm-12 text-center\">\n        <div class=\"alert alert-info\">\n          One or more certifications exist for this person. Would you like to create a new certification for this person?\n        </div>\n      </div>\n      <div class=\"col-sm-12 text-center\">\n        <button class=\"btn btn-primary\" type=\"button\" id=\"certificationCancelBtn\" name=\"certificationCancelBtn\"\n          (click)=\"cancel()\">Cancel</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n        <button class=\"btn btn-primary\" type=\"button\" id=\"createNewCertificationBtn\" name=\"createNewCertificationBtn\"\n          (click)=\"createNewContractor()\">Create New Certification For This Person</button>\n      </div>\n    </div>\n  </div>\n\n  <div *ngIf=\"!isInProgress && searchPerformed && (!contractorTableData || contractorTableData.length == 0)\"\n    class=\"container-fluid\">\n    <div class=\"row\">\n      <div class=\"col-sm-12 text-center\">\n        <div class=\"alert alert-info\">\n          No existing contractor found with this Last 4 SSN, and Date of Birth.\n        </div>\n      </div>\n      <div class=\"col-sm-12 text-center\">\n        <button class=\"btn btn-primary\" type=\"button\" id=\"certificationCancelBtn\" name=\"certificationCancelBtn\"\n          (click)=\"cancel()\">Cancel</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n        <button class=\"btn btn-primary\" type=\"button\" id=\"createNewContractorBtn\" name=\"createNewContractorBtn\"\n          (click)=\"createNewContractor()\">Create New Person </button>\n      </div>\n    </div>\n  </div>\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { TrainingCourse } from '../../server/training-course';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TrainingCourseSearchService {\n  public trainingCourseUrl: string = '/ebiz/api/v1/asbestos/certification';\n\n  constructor(private http: HttpClient) { }\n\n  public retrieveTrainingCourses(applicationID:string): Observable<Array<TrainingCourse>> {\n    const headers = new HttpHeaders({ 'Content-Type': 'application/json; odata=verbose' });\n    const url = this.trainingCourseUrl + '/applications/' + applicationID + '/trainingCourses';\n    return this.http.get<Array<TrainingCourse>>(url, { headers: headers, responseType: 'json' });\n  }\n}\n","import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\nimport { TypeaheadMatch } from 'ngx-bootstrap/typeahead';\nimport { OepaComponentIdService } from 'oepa-common-lib';\nimport { TrainingCourse} from '../../server/training-course';\nimport { TrainingCourseSearchService} from './training-course-search.service';\n\n@Component({\n  selector: 'oepa-training-course-search',\n  templateUrl: './training-course-search.component.html',\n  styleUrls: ['./training-course-search.component.css']\n})\nexport class TrainingCourseSearchComponent implements OnInit {\n  public componentId:string = 'TrainingCourseSearchComponent';\n  \n  group!: FormGroup;\n  \n  matchFoundValue = false;\n\n  @Input('matchFound')\n  set matchFound(found) {\n    this.matchFoundValue = found;\n    this.matchFoundChange.emit(this.matchFoundValue);\n  }\n  get matchFound() {\n    return this.matchFoundValue;\n  }\n  @Output('matchFoundChange') matchFoundChange = new EventEmitter();\n  private _trainingCourseInfo: TrainingCourse = {\n     id:'',\n    applicationID:'',\n    oepaTrainingCertificationNumber: '',\n    otherTrainingDocument:undefined,\n  };\n\n  @Input('trainingCourseInfo') \n  set trainingCourseInfo(info: TrainingCourse) {\n    this.setSearchFields(info);\n    this._trainingCourseInfo = info;\n  }\n\n  get trainingCourseInfo() {\n    return this._trainingCourseInfo;\n  }\n\n  @Output() trainingCourseSelectEmitter: EventEmitter<TrainingCourse> = new EventEmitter<TrainingCourse>();\n  @Output() searchFieldsCleared: EventEmitter<TrainingCourse> = new EventEmitter<TrainingCourse>();\n\n  trainingCourseSearch = '';\n  trainingCourseNumberInfoSource:Array<TrainingCourse> | undefined;\n  trainingCourseInfoSource: Observable<Array<TrainingCourse>>;\n  \n  \n  errorMessage: string = '';\n  searching: boolean = false;\n  imageRoot: string = '/AngularWebApp/assets/images';\n\n  constructor(\n    private idService: OepaComponentIdService,\n    private searchService: TrainingCourseSearchService, \n    private fb: FormBuilder\n    ) {\n      this.trainingCourseInfoSource = new Observable((observer: any) => {\n        observer.next(this.trainingCourseSearch);\n      }).pipe(mergeMap((token: any) => this.searchTrainingCourses(token)));\n    }\n\n  public onTrainingCourseSelect(e: TypeaheadMatch) {\n     console.log('onTrainingCourseSelect' + JSON.stringify(e));\n    if (e.item) {\n      this.trainingCourseInfo = e.item;\n\n      // console.log('onTrainingCourseSelect' + JSON.stringify(e.item));\n      this.trainingCourseSelectEmitter.emit(e.item);\n      this.setSearchFields(this.trainingCourseInfo);\n      this.matchFound = true;\n    }\n  }\n\n  ngOnInit() {\n    this.createForm();\n    this.componentId = this.idService.getComponentId(this.group);\n    if (this.group.controls['oepaTrainingCertificationNumber'].value) {\n      this.matchFound = true;\n    }\n    this.setSearchFields(this.trainingCourseInfo);\n  }\n\n  \n\n  private createForm() {\n    this.group = this.fb.group({\n      oepaTrainingCertificationNumber: [this.trainingCourseInfo ? this.trainingCourseInfo.oepaTrainingCertificationNumber : '']\n    });\n    \n  }\n\n  private checkSearchStringLength(token: string): boolean {\n    let ok = true;\n    if (!token || token.length < 3) {\n      this.errorMessage = 'Please enter at least 3 characters in the search field';\n      ok = false;\n      // console.log('Bad search string: ['+token+']');\n    }\n    return ok;\n  }\n\n  private retrieveTrainingCourses(name: string): Observable<Array<TrainingCourse>> {\n    return this.searchService.retrieveTrainingCourses(name).pipe(\n    map((trainingCourses) => {\n      const trainingCourseList: Array<TrainingCourse> = [];\n      if (trainingCourses && trainingCourses.length > 0) {\n        \n       trainingCourses.forEach((trainingCourse) => {\n          trainingCourseList.push(trainingCourse);\n           //console.log('organization = ' + JSON.stringify(organization));\n        });\n      } else {\n        this.errorMessage = 'No match found';\n      }\n      this.searching = false;\n      return trainingCourseList;\n    }), catchError(err => {\n      this.searching = false;\n      this.errorMessage = 'Search failed due to system error';\n      console.log('TrainingCourse search failed: ' + err);\n      return [];\n    }));\n  }\n\n  private searchTrainingCourses(token: string): Observable<Array<TrainingCourse>> {\n     this.errorMessage = '';\n    if (!this.checkSearchStringLength(token)) {\n      return of([]);\n    }\n    this.searching = true;\n    return of([]);\n    //return this.retrieveTrainingCourses(token);\n  }\n\n  public resetSearchFields() {\n    this.matchFound = false;\n    this.group.controls['search'].get('id')?.setValue('');\n    this.group.controls['search'].get('oepaTrainingCertificationNumber')?.setValue('');\n    \n    this.searchFieldsCleared.emit({});\n  }\n\n  public clearData() {\n    this.resetSearchFields();\n    this.trainingCourseInfo = {};\n    this.trainingCourseSelectEmitter.emit(this.trainingCourseInfo);\n  }\n\n  private setSearchFields(trainingCourse: TrainingCourse) {\n    console.log('setSearchFields: ' + JSON.stringify(trainingCourse));\n    if (this.group && this.group.controls['search'] ) {\n        //this.group.controls['search'].get('id').setValue(trainingCourse.id);\n        this.group.controls['search'].get('oepaTrainingCertificationNumber')?.setValue(trainingCourse.oepaTrainingCertificationNumber);\n\n      \n    }\n  }\n\n}\n","\n<form [formGroup]=\"group\">\n  <div  class=\"row\">\n      <div class=\"col-sm-4\">\n        <div class=\"form-group\">\n          <label>\n              Training Certification Number\n            <span *ngIf=\"searching\" class=\"spinner-border text-primary\" role=\"status\"></span>\n          </label>\n          <ng-template #trainingCertificationNumberTemplate let-model=\"item\" let-index=\"index\">\n              <h5>{{ model.oepaTrainingCertificationNumber}}</h5>\n          </ng-template>\n          <input class=\"form-control\" formControlName=\"oepaTrainingCertificationNumber\" [typeahead]=\"trainingCourseNumberInfoSource\" \n            [typeaheadScrollable]=\"true\"\n            (typeaheadOnSelect)=\"onTrainingCourseSelect($event)\" [id]=\"componentId + '_trainingCertificationNumberSearch'\"\n            name=\"trainingCertificationNumberInput\"  [typeaheadMinLength]=\"3\"\n            [typeaheadItemTemplate]=\"trainingCertificationNumberTemplate\" \n            placeholder=\"Search Training Certification #\">\n        </div>\n        \n      </div>\n      <div  class=\"col-sm-4\">\n          <div class=\"form-group\">\n              <label>Training Certification Number Selected</label>\n              <input class=\"form-control\" type=\"text\" placeholder=\"\" formControlName=\"oepaTrainingCertificationNumber\"\n                readonly=\"true\">\n            </div>\n      </div>  \n    <div class=\"col-sm-12 text-end\">\n        <button *ngIf=\"group.enabled && matchFound\" type=\"button\" class=\"btn btn-primary\" (click)=\"resetSearchFields()\">Clear Search</button>\n    </div>\n  </div>\n  <div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n    {{errorMessage}}\n  </div>\n</form>","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { NgxBootstrapMultiselectModule } from 'ngx-bootstrap-multiselect';\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\n\nimport { CommonLibModule } from 'oepa-common-lib';\nimport { CommonFormsModule } from 'oepa-ui-lib';\n\nimport { RFIModule } from '../rfi/rfi.module';\nimport { CertificationApplicationComponent } from './certification-application/certification-application.component';\nimport { SearchCertificationModalComponent } from './search-certification-modal/search-certification-modal.component';\nimport { CertificationReplaceApplicationComponent } from './certification-replace-application/certification-replace-application.component';\nimport { NewCertificationModalComponent } from './new-certification-modal/new-certification-modal.component';\nimport { NewCertificationContractorModalComponent } from './new-certification-contractor-modal/new-certification-contractor-modal.component'; \n\nimport { CertificationMappingService } from './common-service/certification-mapping.service';\nimport { ApplicantInformationComponent } from './certification-application/applicant-information/applicant-information.component';\nimport { CertificationButtonBarComponent } from './certification-button-bar/certification-button-bar.component';\nimport { TrainingCourseTableComponent } from '../certification/certification-application/training-course-table/training-course-table.component';\nimport { TrainingCourseModalComponent } from '../certification/certification-application/training-course-modal/training-course-modal.component';\nimport { OutOfStateCertificationTableComponent } from './certification-application/out-of-state-certification-table/out-of-state-certification-table.component';\nimport { OutOfStateCertificationModalComponent } from './certification-application/out-of-state-certification-modal/out-of-state-certification-modal.component';\nimport { ApplicantInfoModalComponent } from './certification-application/applicant-info-modal/applicant-info-modal.component';\nimport { CertificationOfficialUseComponent } from './certification-application/certification-official-use/certification-official-use.component';\nimport { CertificationSubmitterComponent} from './certification-application/certification-submitter/certification-submitter.component';\nimport { TrainingCourseSearchComponent } from './certification-application/training-course-search/training-course-search.component';\nimport { TrainingCourseSearchService } from './certification-application/training-course-search/training-course-search.service';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { EmployerInfoComponent } from './certification-application/employer-info/employer-info.component';\nimport { EmployerSearchComponent } from './certification-application/employer-info/employer-search/employer-search.component';\nimport { EmployerInfoSearchComponent } from './certification-application/employer-info/employer-info-search/employer-info-search.component';\nimport { ReplacementReasonComponent } from './replacement-reason/replacement-reason.component';\nimport { CertificationService } from './common-service/certification.service';\nimport { NotificationCommonModule } from '../../notification-common/notification-common.module';\nimport { NotificationsSharedModule } from '../notifications-shared.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    RouterModule,\n    ReactiveFormsModule,\n    HttpClientModule,\n    CollapseModule.forRoot(),\n    NgxBootstrapMultiselectModule,\n    AccordionModule.forRoot(),\n    NgxMaskDirective,\n    NgxMaskPipe,\n    CommonLibModule,\n    CommonFormsModule,\n    NotificationCommonModule,\n    TooltipModule.forRoot(),\n    RFIModule,\n     TypeaheadModule.forRoot(),\n    ModalModule.forRoot(),\n    NotificationsSharedModule\n  ],\n  declarations: [CertificationApplicationComponent,\n                 SearchCertificationModalComponent,\n                 CertificationReplaceApplicationComponent,\n                 NewCertificationModalComponent,\n                 NewCertificationContractorModalComponent,\n                 NewCertificationModalComponent,\n                 CertificationOfficialUseComponent,\n                 ApplicantInformationComponent,\n                 OutOfStateCertificationTableComponent,\n                 OutOfStateCertificationModalComponent,\n                 CertificationOfficialUseComponent,\n                 ApplicantInfoModalComponent,\n                 CertificationButtonBarComponent,\n                 TrainingCourseTableComponent,\n                 TrainingCourseModalComponent,\n                 CertificationSubmitterComponent,\n                 TrainingCourseSearchComponent,\n                 EmployerInfoComponent,\n                 EmployerInfoSearchComponent,\n                 \n                 EmployerSearchComponent,\n                 ReplacementReasonComponent ],\n  exports: [ CertificationApplicationComponent,\n             CertificationReplaceApplicationComponent,\n             ApplicantInformationComponent,\n             ApplicantInfoModalComponent,\n             OutOfStateCertificationTableComponent,\n             OutOfStateCertificationModalComponent, \n             CertificationOfficialUseComponent,\n             CertificationButtonBarComponent,\n             TrainingCourseTableComponent,\n             TrainingCourseModalComponent,\n             CertificationSubmitterComponent,\n             TrainingCourseSearchComponent,\n             EmployerInfoComponent,\n             EmployerInfoSearchComponent,\n             \n             EmployerSearchComponent,\n             ReplacementReasonComponent   ],\n  providers: [\n            provideNgxMask()\n  ]\n})\n\nexport class CertificationSharedModule  {\n  static forRoot(): ModuleWithProviders<CertificationSharedModule> {\n    return {\n      ngModule: CertificationSharedModule,\n      providers: [ CertificationService, CertificationMappingService,TrainingCourseSearchService]\n    };\n  }\n}\n\n// export { CertificationApplicationComponent } from './certification-application/certification-application.component';\n// export { CertificationReplaceApplicationComponent } from './certification-replace-application/certification-replace-application.component';\n\n"],"names":["i1.CertificationService","i3","i4.CertificationMappingService","i6","i7","i8.FormControlPipe","i1","i2","i2.CertificationService","i3.CertificationSearchComponentService","i4","i5","i8","i9","i3.CertificationMappingService","i4.CertificationService","i7.FormControlPipe","i5.FormControlPipe","i5.CertificationMappingService","i6.NotificationMappingService","i6.NotificationRoutingService","i8.RfiService","i10","i4.NotificationService","i5.NotificationMappingService","i6.CertificationService","i3.CertificationService","i6.FormControlPipe","i3.EmployerInfoComponent","i4.EmployerSearchComponent","i4.AllowedUserActionsService","i5.CertificationService","i6.CertificationMappingService","i7.NotificationService","i10.ReminderLetterInfoComponent","i12.CertificationOfficialUseComponent","i13.ApplicantInformationComponent","i14.OutOfStateCertificationTableComponent","i15.CertificationButtonBarComponent","i16.TrainingCourseTableComponent","i17.CertificationSubmitterComponent","i18.EmployerInfoSearchComponent","i19.FormControlPipe","i11.CertificationOfficialUseComponent","i12.ApplicantInformationComponent","i13.CertificationButtonBarComponent","i14.CertificationSubmitterComponent","i15.EmployerInfoComponent","i16.ReplacementReasonComponent","i17.FormControlPipe","i2.CertificationSearchComponentService","i2.TrainingCourseSearchService"],"mappings":"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"}