{"version":3,"file":"main.1f70c4e3330f12d5.js","mappings":"8JAoBO,IAAMA,EAAb,MAAM,MAAOA,6GAFA,GAAEC,SANXC,KACAC,QAOSH,GAAb,0ECbO,IAAMI,EAAb,MAAM,MAAOA,EAGXC,YAAoBC,EACAC,EACAC,GAFAC,yBACAA,mBACAA,qBAEpBC,WACE,IAAIC,GAAgB,EAEjBF,KAAKG,iBACND,EAAgBF,KAAKH,kBAAkBO,gBAAgBJ,KAAKG,iBAE5DE,EACEL,KAAKD,cAAcO,mBAAmBN,KAAKF,aAE3CE,KAAKD,cAAcQ,SAGrBP,KAAKD,cAAcO,mBAAmBN,KAAKF,2DAnBpCH,GAAwBa,+DAAxBb,EAAwBc,+GAAxBd,GAAb,0DCPO,IAAKe,EAWX,MAXD,OAAYA,QAAkB,KAC5BA,mCACAA,6BACAA,mCACAA,6BACAA,uCACAA,yCACAA,gDACAA,gDACAA,wCACAA,0CAVUA,EAAZ,IAAYA,GAWX,GAEWC,EAQX,MARD,OAAYA,QAAsB,KAChCA,mBACAA,iBACAA,mBACAA,iBACAA,0BACAA,uBACAA,0BAPUA,EAAZ,IAAYA,GAQX,kDCrBM,IAAKC,EAGX,MAHD,OAAYA,QAAS,KACnBA,oBACAA,YAFUA,EAAZ,IAAYA,GAGX,oECHM,IAAKC,EAGX,MAHD,OAAYA,QAAQ,KAChBA,gBACAA,cAFQA,EAAZ,IAAYA,GAGX,GAEWC,EAMX,MAND,OAAYA,QAAS,KACjBA,iBACAA,uBACAA,mBACAA,uCACAA,2CALQA,EAAZ,IAAYA,GAMX,GAEWC,EAGX,MAHD,OAAYA,QAAU,KAClBA,gBACAA,YAFQA,EAAZ,IAAYA,GAGX,0DChBM,IAAKC,EAKX,MALD,OAAYA,QAAgB,KAC1BA,+BACAA,2BACAA,uBACAA,6BAJUA,EAAZ,IAAYA,GAKX,GAEWC,EAKX,MALD,OAAYA,QAAoB,KAC9BA,0BACAA,sBACAA,mBACAA,wBAJUA,EAAZ,IAAYA,GAKX,0DCZM,IAAKC,EAQX,MARD,OAAYA,QAAK,KACbA,kBACAA,kBACAA,UACAA,gBACAA,2BACAA,4BACAA,cAPQA,EAAZ,IAAYA,GAQX,GAEWC,EAEX,OAFWA,MAAS,KACjBA,gBADQA,GAEX,iDCZM,IAAKC,EA0MX,MA1MD,OAAYA,QAAU,KACpBA,mDACAA,qCACAA,mDACAA,mCACAA,mDACAA,qDACAA,uCACAA,yCACAA,6CACAA,8DACAA,6CACAA,wCACAA,yCACAA,yCACAA,kDACAA,8CACAA,sCACAA,qCACAA,mDACAA,kCACAA,mCACAA,qCACAA,uCACAA,iDACAA,yCACAA,mCACAA,oCACAA,yCACAA,6CACAA,8DACAA,+CACAA,wCACAA,kDACAA,8CACAA,sCACAA,uCACAA,6CACAA,kCACAA,mCACAA,oCACAA,yCACAA,qDACAA,2EACAA,6FACAA,yEACAA,yEACAA,sEACAA,+DACAA,mCACAA,8CACAA,oDACAA,oCACAA,wCACAA,0DACAA,sCACAA,4CACAA,yCACAA,oCACAA,iDACAA,8CACAA,0CACAA,kCACAA,+CACAA,8BACAA,8BACAA,iCACAA,qCACAA,oCACAA,+BACAA,gCACAA,qCACAA,iDACAA,mCACAA,+CACAA,mCACAA,iDACAA,qDACAA,6CACAA,8CACAA,gDACAA,2CACAA,sDACAA,8CACAA,uCACAA,yCACAA,kDACAA,sCACAA,mCACAA,uCACAA,yCACAA,2DACAA,uGACAA,+CACAA,yDACAA,uCACAA,iCACAA,2DACAA,kDACAA,wDACAA,qCACAA,wCACAA,iDACAA,yCACAA,iDACAA,0DACAA,+CACAA,yCACAA,oCACAA,0CACAA,2CACAA,yCACAA,yCACAA,uCACAA,qCACAA,8CACAA,yDACAA,0CACAA,kCACAA,qDACAA,+CACAA,mCACAA,mCACAA,8BACAA,6CACAA,+BACAA,6CACAA,iCACAA,mCACAA,gCACAA,gDACAA,gDACAA,8CACAA,8CACAA,kDACAA,qCACAA,+BACAA,gCACAA,uCACAA,+CACAA,+CACAA,2CACAA,2CACAA,2DACAA,uCACAA,6CACAA,qDACAA,6CACAA,6DACAA,qDACAA,qDACAA,2DACAA,+CACAA,+CACAA,mEACAA,mDACAA,yCACAA,yDACAA,uDACAA,qDACAA,mDACAA,iEACAA,uDACAA,6DACAA,qDACAA,uDACAA,uDACAA,2CACAA,6CACAA,2CACAA,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","names":["CoreModule","imports","CommonModule","MatSnackBarModule","CheckPermissionDirective","constructor","permissionService","templateRef","viewContainer","this","ngOnInit","hasPermission","CheckPermission","checkPermission","I","createEmbeddedView","clear","i0","selectors","AgeGradeInstrument","AgeGradeInstrumentCode","ChartType","DataType","FieldType","RegionType","MeasureCondition","MeasureConditionName","Modal","ModalType","Permission","PortfolioEvidenceType","PortfolioMeasureType","InputRatingSelectedLevel","AddEvidenceFormStep","PortfolioEvidenceTypeString","Role","RoleGroup","RoleGroupAccessLevel","SelectType","States","StudentDemographic","StudentDemographicEthnicity","TableColumnType","FeatureTable","ViewChildTabs","ComponentTypeTable","TableInputAction","SearchStudentAction","LocalDatePipe","transform","utcDate","endsWith","Date","toLocaleString","undefined","year","month","day","hour","minute","second","hour12","pure","PipesModule","static","ngModule","providers","AgencyService","dataService","getAgency","id","get","getAgenciesByPage","payload","message","url","getSearchUrl","getCurrentAgenciesByUser","user","JSON","parse","localStorage","getItem","userId","getCurrentAgenciesByUserId","getLinkedAgencies","addNewAgency","post","updateAgency","put","getAllAgencies","getAgenciesByState","stateIds","isPilot","getAgenciesByUser","getGranteeAgencies","getGranteeAgenciesByState","stateId","unlockAgency","getContractorAgenciesByState","factory","AuthService","router","chatbox","environment","JwtHelperService","login","pipe","logout","currentUser","getCurrentUser","loginAuditId","tap","res","hideChatboxWidget","navigateByUrl","checkLogin","result","token","authToken","jwtHelper","isTokenExpired","forgotPassword","email","changePassword","newPassword","guid","updatePassword","adminResetPassword","getActiveSession","userInfo","deleteOtherSession","delete","captureUserInfo","loginRes","setItem","stringify","getUserStateId","getUserStateCode","stateCode","getUserPermissions","permissions","isSuperUser","roleAssignments","some","x","roleId","isSuperAdmin","isCustomerService","isAdmin","isLeadAgencyAdmin","isAgencyAdmin","isSiteAdmin","isTeacher","isWestEdPilot","isValidIdentifier","getAccessLevel","accessLevel","recaptchaVerify","ChatboxService","injectChatBox","zendeskIframe","document","getElementById","zendeskWidgetId","zendeskScript","zendeskSnippetId","showChatboxWidget","script","createElement","src","zendeskSnippetSrc","async","onload","isZendeskLoaded","body","appendChild","window","zE","executeChatboxCommand","openChat","args","push","console","error","showChatboxIframe","showChatboxkAdditionalElements","style","display","Array","from","querySelectorAll","forEach","el","zendeskElements","hideChatboxIframe","hideChatboxAdditionalElements","ClassService","getClassesByAgency","agencyId","search","params","saveAll","deleteAll","classId","getClassesBySitesAndRatingPeriod","getClassesBySitesAndGlobalRatingPeriods","getRatingPeriodsByClassroomId","classroomId","getClassStudents","getActiveClassStudentsByPermissions","getStudentsByClass","getClassesByClassroom","getAllClassStudentsByPermissions","ClassroomService","getClassroomById","checkClassroomHasEnolledStudents","getClassroomsByAgency","getClassroomsBySite","siteId","getClassroomByUserAccess","deleteClassroom","saveClassroom","getClassroomsBySites","httpOptions","headers","HttpHeaders","downloadOptions","Accept","responseType","DataService","http","toast","spinner","path","show","handleSuccess","catchError","err","handleError","finalize","hide","getWithOptions","options","downloadFile","postWithOptions","patch","success","ErrorMessage","of","EncryptionService","encryptPassword","password","key","CryptoJS","encryptionKey","iv","encrypted","padding","mode","encryptedPassword","concat","ciphertext","date","dateFormat","formatDate","toLocaleDateString","value","split","map","Number","isArray","every","item","tableColumns","data","displayIcons","tableColumn","columnDef","type","baseUrl","Object","entries","val","filter","Boolean","join","getClassroomId","showPilot","classroomName","name","str","length","charCode","startDate","endDate","checkDate","startsWith","slice","replace","trim","fileName","LookupService","getCountyList","getCountyById","getCountyByStateId","getSiteTypes","getSiteCodeTypes","getVendors","getNewsItemTypes","getAccountStatusTypes","getAgeGradeInstruments","getLanguages","getDistrictsOfLiability","getAdaptationTypes","getEnrollmentProgramTypes","getEthnicities","getDisabilities","getGenders","getTuitionFees","getAgeGradeEnrollmentFilters","getDemographicInformation","getBasicSelects","getOutcomes","getInitialAssessmentToolTypeOptions","getIepPlans","getCurrentSchoolYear","getFieldTypes","getClassExitReasons","getClassReleaseReasons","getClassDeclineReleaseReasons","getSuffix","getAllSchoolYears","getSchoolYearFromStartingYear","getHeadStart","getRegionGroups","getRegionTypes","pageIndex","itemsPerpage","getNHRegionTypes","getCarReasons","getSelpas","getCompanionDocument","getRequestReasons","getRequestStatusType","getReportTypes","getReportActions","getStatePreschool","getMasterDomains","getMasterMeasures","getBaseMasterMeasures","getDualEnrollModalData","getPilotAgeGrade","getExtensiveSupports","getDifficultyLevels","getStateDashboardTiles","NewsItemService","getAllItems","getRecentItems","itemCount","getUserActiveNewsItem","getNewsItemById","addNewsItem","updateNewsItem","deleteNewsItem","PermissionService","authService","getPermission","getUncategorizedPermission","getCurrentPermission","groupId","getSuperPermissionGroups","getPermissionAssignments","addPermission","permission","addPermissionGroup","group","addPermissionGroupAssignment","assignment","updatePermission","updatePermissionGroupAssignment","deletePermissionGroupAssignment","updatePermissionAssignment","deletePermission","permissionId","userPermissions","Set","has","PortfolioService","setPortfolioAddEvidenceParams","addEvidenceParams","portfolioAddEvidenceParams","getPortfolioAddEvidenceParams","getPortfolioStudent","controllerName","searchClasses","getPortfolioClassStudents","getPortfolioClass","ageGradeInstrumentId","getBaseMeasures","saveEvidence","portfolioAddModel","saveFutureEvidence","getFutureEvidenceByStudent","studentId","getFutureEvidencesById","futureEvidenceId","getBlobSasToken","containerName","getRatingMeasures","measureId","getDomainEvidences","studentClassEnrollmentId","getMeasureEvidences","assignEvidence","portfolioAssignModel","copyEvidence","evidence","updateEvidence","portfolioUpdateModel","deleteEvidence","measureEvidenceId","generateDomainPdf","ageGradeId","generateMeasurePdf","attachFutureEvidence","request","getAvailableEvidenceToReq","ratingPeriodId","toEnrollmentId","processEvidenceRequest","updateEvidenceRequests","getClassPortfolio","RatingPeriodService","getRatingPeriod","startIndex","itemsPerPage","getRatingPeriodWithParam","addRatingPeriod","updateRatingPeriod","getRecentSchoolYears","getActiveSchoolYear","addSchoolYear","setActiveSchoolYear","getBySchoolYearAndAgency","schoolYearId","getByAgency","getRecentGlobalRatingPeriods","amount","addGlobalRatingPeriod","period","applyGlobalRatingPeriodsExisting","globalRatingsApplied","getBySchoolYear","getMinGlobalRatingPeriod","getFutureGlobalRatingPeriods","getAllGlobalRatingPeriods","RoleService","getAllByOrder","getAllRoles","getRolesByUserAccess","getRoles","searchRoles","getRoleGroups","deleteRole","updateRole","addRole","filterRoles","ids","buildQuery","downloadRolesReport","roles","observe","SiteService","Subject","getSites","getSitesWithParam","addSite","updateSite","deleteSite","getSitesByAgencyId","getSitesByAccess","getSitesByPermission","agencyIds","validateUserSite","SpinnerService","BehaviorSubject","num","counter","next","getSpinnerCounter","asObservable","StateService","getAllStates","getStatesById","index","getStateConfigurations","getCustomStateConfigurations","getLinkedStates","updateStateConfigurations","editStates","changedState","getStateSchoolYearTargets","saveStateSchoolYearTarget","updateStateSchoolYearTarget","deleteStateSchoolYearTarget","getDashboardConfigurations","updateDashboardConfigurations","stateDashboardEnabled","getGenderDemographicsCounts","getChildEnrollmentsCounts","getChildAgeCounts","getChildRaceCounts","getStateDashboardData","getChildAgeGroupCounts","getProgramsByAgeGroupCounts","searchProgramsByAgeGroup","getStudentCountsByLangTypes","getHomeLanguageCounts","searchChildLanguages","getChildrenInSpedCounts","getRatingsCounts","getChildrenWithIepCounts","searchSpecialEducation","searchChildRatings","getDisabilityChildCounts","searchDisability","StudentService","getStudents","getStudentById","getStudentCustomFields","addStudent","updateStudent","updateStudentGeneric","deleteStudent","addAndEnrollStudent","addSearch","getStudentDetails","childId","getStudentAssessments","getClassroomEnrollmentDetails","searchDroppedChildren","validateStudent","getDuplicateOrDroppedChildren","getStudentSharedProviders","getStudentSharedProviderUsers","addStudentSharedProvider","deleteStudentSharedProvider","updateStudentPilotRole","checkDuplicateStringSSID","ssid","checkDuplicateLongSSID","getStudentBatch","saveDualEnrollment","updateStudentSpedDates","ToastService","_snackBar","responseMessage","duration","verticalPosition","horizontalPosition","$responseMessage","snackConfig","panelClass","openFromComponent","ToastComponent","warn","info","UserDropMenuService","includes","label","routeLink","accessStateDashboard","icon","UserService","getUserById","createUser","updateUser","updateUserDemographics","globalSearch","getAdminUserDetails","adminUpdateUser","getUserHighestAccessLevel","getUsersByClassEnrollment","getPortfolioMessageUsers","sceId","getSignUpStatus","updateSignUpStatus","isSignedUp","confirmPassword","resetPwForm","confirmedPassword","controls","setErrors","passwordMismatch","AudioComponent","BtnComponent","EventEmitter","outline","outlineRed","red","cancel","disabled","default","update","defaultNoMargins","pillblue","pillgreen","black","white","btnClass","getColor","color","ngOnChanges","changes","classes","buttonClick","link","routerLink","ctx","CarouselComponent","sanitizer","loop","mouseDrag","touchDrag","pullDrag","dots","center","items","evidenceTypes","sasToken","generatedUrl","generateUrlWithSasToken","blobUrl","urlWithSasToken","addHTTPS","bypassSecurityTrustResourceUrl","ChartComponent","inject","ngAfterViewInit","createChart","canvas","nativeElement","width","height","chartElement","chartId","getContext","existingChartIndex","chartInstances","findIndex","chart","destroy","splice","chartData","isOneSegment","chartType","createDoughnutChart","createBarChart","toastService","labels","datasets","total","count","getChartStyles","refChart","Chart","getDoughnutChartOptions","plugins","getCenterPlugin","backgroundColor","borderWidth","cutout","responsive","maintainAspectRatio","animation","tooltip","enabled","legend","onClick","displayColorLegend","position","align","boxWidth","font","size","weight","beforeDraw","y","getDatasetMeta","save","fontFamily","textAlign","textBaseline","fillText","restore","isHorizontalBarChart","toLowerCase","indexOf","labelsSplitAt","percent","getBarChartOptions","getBarChartCountPlugin","axis","indexAxis","layout","top","scales","grid","ticks","lineHeight","family","crossAlign","beginAtZero","min","max","stepSize","callback","bar","barPercentage","afterDatasetsDraw","isHorizontal","displayText","isFutureRatingPeriod","LegendComponent","rowCount","Math","ceil","ClassPortfolioEvidenceComponent","portfolioService","dialogData","initializeEvidences","getSasToken","evidenceType","studentName","firstName","lastName","evidenceTypeId","evidenceTypeMap","evidences","take","subscribe","MAT_DIALOG_DATA","ConfirmationModalComponent","dialogRef","disableClose","getInfo","title","modalInfo","buttonColor","primaryBtnClass","buttonLabel","primaryBtnText","showCancel","cancelText","wideContent","onSubmit","ContainerComponent","lightBlue","whiteDash","DatePickerComponent","fb","initializeForm","initialDate","_initialDate","setValue","k","inputValue","dateForm","resetDate","validator","dateLessThan","markAsPristine","setValidators","isRequired","Validators","updateValueAndValidity","dateControl","minDate","dateValue","getTime","minDateValue","formControl","invalidDates","handleDate","event","emitDate","emit","formattedDate","getMonth","getDate","getFullYear","reset","padNumber","toString","padStart","AddEditComponent","modal","_","tableData","setTableDataSource","Table","labelId","getMilliseconds","displayedColumns","columns","reRender","dataSource","addEmitter","addActionItem","editEmitter","action","editActionItem","selectEmitter","selectActionItem","checkEmitter","property","toggleSwitchActionItem","toggleSwitchEmitter","emitObj","readOnly","source","checked","toggleMsg","modalRef","open","afterClosed","deleteEmitter","deleteActionItem","viewEmitter","header","viewActionItem","iconEmitter","iconActionItem","actionIconSelected","actionIconClicked","dateChangeEmitter","row","MatTableDataSource","sortingDataAccessor","sortHeaderId","toLocaleLowerCase","sort","matSort","sortTable","sortParameters","active","find","column","MatSort","UploadTableComponent","subscription","input","focusTaskInput","first","focus","setEditableCell","cellValues","isEditable","onDataChange","ngOnDestroy","unsubscribe","DropMenuComponent","dropMenuToggle","selectedItemEvent","indexValue","menuIndex","showValue","closeMenu","close","ClassroomRatingPeriodParamsComponent","auth","ratingPeriodService","classService","ratingPeriod","site","classroom","selectForm","ratingPeriodMinDate","ratingPeriodMaxDate","handleState","state","formValues","handleChosenAgency","agency","handleChosenSite","handleChosenClassroom","handleChosenRatingPeriod","maxDate","sitesSelect","classroomSelect","ratingPeriodSelect","clearSite","agencySelect","stateSelect","clearState","clearAgency","submit","invalid","searchValues","FilterSelectComponent","multiSelect","selectedOptionControl","selectFormGroup","selectLabel","newLabel","pluralSuffix","initialValues","overrideLabel","eventsSubscription","clearSearch","clearSelected","selected","filterText","filterOptions","onSelected","clearAll","clearFilter","toSelectable","totalData","selectable","obj","goToDefaultItemPage","s","itemId","itemPosition","pageNumber","pageSize","selectName","selectType","onFilterChange","target","keyword","toUpperCase","filteredOptions","itemsInPage","paginate","toggleOption","compareWith","a","b","selectables","reduce","arr","i","page","paginator","handleOption","selectedOption","itemIndex","onClose","ElementRef","MatPaginator","$event","GroupSelectComponent","lookupService","optionControl","groupForm","regionTypes","nhOptions","paginateData","canFilter","option","regionGroup","isFilter","onNewPage","totalPages","paginatedData","paged","pageData","paginatedFilteredOptions","SelectAgeGradeComponent","select","getAgeGradeOptions","ageGradeSelect","ageGrades$","switchMap","takeUntil","destroy$","ageGradeOptions","onAgeGradeSelect","ageGrade","complete","SelectAgencyComponent","agencyService","stateId$","hasAccessToAssigned","isEditDropdown","agencies","agencyOptions","selectedAgency","handleStateChange","hasAccessToAll","getAgencyByState","getAgencyOptions","refreshList","initialAgencyId","initialAgencyIds","onAgencySelect","SelectClassComponent","siteIds","globalRatingPeriodId","getClasses","classroomOptions","sites","createClassSearchPayload","self","t","includePilotClasses","showPilotClasses","c","mapClassResToDRDPSelect","useClassroomId","globalRatingPeriod","requestPayload","onClassroomSelect","SelectClassroomComponent","classroomService","initialClassroomIds","SelectContractorComponent","contractorSelect","contractorOptions","intialAgencyId","SelectCountyComponent","getCounties","countySelect","countyOptions","initCounties","onCountySelect","county","SelectDisabilityComponent","disabilitySelect","initDisability","disabilityOptions","onDisabiltySelect","disability","SelectGenderComponent","genderSelect","reloadGender","genderOptions","initialGenderId","initialGenderIds","genders","gender","onGenderSelect","SelectGlobalRatingComponent","setDropdown","showAll","showPilotRps","isPilotEnabled","ratingPeriodOptions","currentSchoolYear","globalRatingPeriodSelect","g","hideFromStateDash","onRatingPeriodSelect","rp","sc","matchingOptions","SelectGranteeComponent","granteeSelect","granteeOptions","SelectHeadStartComponent","headStart","headStartOptions","onHeadStartSelect","SelectIepPlanComponent","selectOptions","onSelect","optionSelected","SelectInitialAssessmentToolTypeComponent","SelectLanguageComponent","getLanguage","languageSelect","languages","languageOptions","initialLanguageIds","language","onLanguageSelect","SelectOutcomeComponent","getOutcomeOptions","SelectPortfolioUsersComponent","userService","portfolioUsersSelect","users","portfolioUsersOptions","initialPortfolioUserId","portfolioUsers","onPortfolioUserSelect","SelectProgramTypeComponent","programTypeSelect","reloadProgramType","getProgramType","programTypeOptions","programTypes","programType","enrollmentProgramName","enrollmentProgramType","onProgramTypesSelect","SelectProvidersComponent","studentService","providerSelect","providerOptions","emailAddress","teacherName","onProviderSelect","provider","p","SelectRaceComponent","raceSelect","reloadRace","getRace","raceOptions","initialRaceId","initialRaceIds","race","onRaceSelect","GlobalRatings","SelectRatingPeriodComponent","schoolYear","RatingPeriods","GlobalRatingPeriods","getRatingPeriodsBySchoolYear","cancelPreviousRequest$","processRatingPeriods","ratingPeriods","displayFutureRps","futureRps","isCurrentDateBelowMinStartDate","initialRatingPeriodId","displayCurrentRps","isCurrentRatingPeriod","displayCurrentRpsByStartEnd","omitFutureRps","default2025","isActive","minStartDate","currentDate","dateWithoutTime","current","currentWithoutTime","SelectRegionComponent","stateService","getRegions","initPageindex","initPageSize","getStateConfigs","regionTypeOptions","stateConfig","config","columnName","onRegionSelect","region","SelectReportActionComponent","reportActionOptions","emitSelectedReportAction","selectedAction","SelectReportTypeComponent","isReportTracking","report","reportTypeOptions","emitSelectedReportType","selectedReport","SelectRequestReasonComponent","requestReasonService","getRequestReason","requestResponseSelect","studentRequestOptions","emitSelectedRequestReason","selectedReason","SelectRequestStatusTypeComponent","requestStatusType","requestStatusTypeOptions","emitSelectedRequestStatusType","SelectRoleComponent","roleService","roleSelect","roleOptions","role","SelectSchoolYearComponent","_ratingPeriods","getActiveStates","schoolYearSelect","schoolYearOptions","editConfigs","initialYearId","startingSchoolYear","years","onYearSelect","SelectSelpaComponent","selpas","selpaOptions","onSelpaSelect","selpa","SelectSiteCodeComponent","getCode","code","codeOptions","onCodeSelect","SelectSiteComponent","siteService","siteSelect","reloadSites","siteOptions","initialSiteId","initialSiteIds","isDualEnrollments","isDualEnrollment","onSiteSelect","SelectStatePreschoolComponent","statePreschool","statePreschoolOptions","onStatePreschoolSelect","SelectStateComponent","getStateOptions","states","stateOptions","isSelectable","onStateSelect","SelectStatusComponent","getStatus","statusSelect","status","statusOptions","onStatusSelect","SelectSuffixComponent","initialSuffix","suffix","suffixOptions","findId","suffixName","suffixId","DropdownService","getSitesRatingPeriodTeachersData","getTeachersDataBySiteId","getSchoolYearsRatingPeriodTeacherData","getSiteRatingPeriodsByState","getTeachers","SelectTeacherComponent","dropdownService","Teacher","teacherType","TeacherOfRecord","UserRoleNames","isTooltipActive","teacherSelect","requireSite","teacherOptions","dropdown","allTeachers","teachers","teachersOfRecord","onTeacherSelect","teacher","teacherOfRecord","SelectTypeComponent","lookup","getSiteType","typeSelect","types","typeOptions","onTypeSelect","SelectVendorComponent","vendor","vendorOptions","isVisible","onVendorSelect","SelectYesNoComponent","getYesNoOptions","FooterComponent","loggedIn","checkAgencyFooter","agencyFooter","footer","HeaderDropmenuComponent","HeaderLogoAndImageComponent","HeaderComponent","userDropmenu","headerBtns","userName","labelTwo","agencyName","MenuLinkComponent","NewsItemComponent","newsItemService","WestEd","Agency","UndefinedType","r","Subscription","subscriptions","add","newsItems","toggleModal","NewsDescriptionComponent","editNewsItem","news","closeAll","navigate","isBeforeEndDate","PillComponent","setClass","pillClasses","newsItemTypeClasses","pillClass","genericPillClass","EvidenceAudioComponent","route","audio","evidenceTypeID","domainId","edit","isAssign","handleCheckbox","measureIds","currentAssignment","portfolioId","evidenceId","selectedLevel","video","refreshEvidences","onDomainSelectChange","domain","measures","m","isSelected","onMeasureSelectChange","isAllSelected","domainGrouping","domainIds","measure","measureLevelName","levelName","snapshot","paramMap","isSaved","ratingCopied","emitUpdates","evidenceAction","ratingUpdates","ratingAction","toggleAssign","openAssignModal","toggleAssignModal","toggleCopy","isCopy","evidenceLabel","assignmentLabel","EvidenceNotesComponent","note","EvidencePhotosComponent","photo","EvidenceStructuredPromptComponent","prompt","isStructuredPrompt","isImageFile","pattern","test","EvidenceVideoComponent","toggleVideo","EvidenceTab","AssignEnrollmentComponent","availableOptions","availableClasses","selectedEnrollmentId","domains","PortfolioEvidenceManagementComponent","rating","structuredPrompt","structurePrompt","evidenceTab","isPortfolio","isEvidenceEmpty","handleTab","tab","handleEdit","isEdit","handleSave","evidenceUpdateList","handleEvidenceUpdateList","updatedEvidence","notes","measureValue","selectedLevelName","openInputRatingModal","PortfolioInputRatingModalComponent","levels","selectedMeasureValue","measureCode","selectedId","selectedName","prelimRatingChange","updateRatingSheet","ratingSheet","emitSave","measureConditionId","selectedValue","ageGradeInstrumentCode","reasonId","measureConditionName","childAssessmentRatingReasonId","comment","measureRatingLevel","l","conditionLevels","measureRevisionId","toggleAssignmentModal","assignmentPayload","RatingSheetComponent","measureCondition","isPilotEnrollment","scrollToRadioButton","selectCondition","level","canEmerging","selectLevel","isDisabled","maxLevel","selectReason","reason","showComment","reasonComment","levelCode","getLevelCode","setTimeout","scrollToElementById","ageGradeMap","PTK","instrumentCode","age","levelRadioButtons","radioButton","radio","parentElement","scrollIntoView","behavior","block","SearchComponent","SearchName","searchForm","Type","SchoolYearId","StateId","AgencyId","SiteIds","RatingPeriodId","TeacherId","TeacherOfRecordId","initStateId","initAgencyId","searchMultiSite","searchInput","initializeForms","requiredFields","siteType","patchValue","searchEmitter","currentSchoolYearId","onClear","clearDropdowns","clearAllDropdowns","searchState","searchAgency","searchSite","searchSiteType","searchYear","searchRatingPeriod","searchTeacher","searchTeacherOfRecord","teacherOfRecordSelect","onDropDownSelect","Agencies","Sites","handleChosenSites","SiteType","SchoolYear","SideMenuService","getAll","getById","getFormatted","create","SideMenuComponent","sideMenuService","userDropMenuService","chatboxService","menuItems","checkSelectedItem","eventValues","selectedItem","showDrop","toggle","showMenu","showSideMenu","SpinnerComponent","cdRef","ngAfterViewChecked","isLoading","detectChanges","TitleComponent","msg","VideoComponent","Modules","ReactiveFormsModule","MatInputModule","MatSelectModule","MatTableModule","MatSortModule","MatPaginatorModule","MatFormFieldModule","MatDialogModule","MatButtonModule","MatProgressBarModule","MatProgressSpinnerModule","MatAutocompleteModule","MatDatepickerModule","MatNativeDateModule","MatTooltipModule","MatCheckboxModule","MatSlideToggleModule","MatRadioModule","MatIconModule","MatCardModule","MatButtonToggleModule","MatTabsModule","MatBadgeModule","MatMenuModule","CarouselModule","SharedModule","RouterModule","FormsModule","i77","newsData","canEdit","createdBy","cdr","onOptionClick","isMultiLevel","selectedIcon","toggleSelectedLevel","production","apiUrl","storageName","storageUrl","recaptcha","chatboxKey","routes","redirectTo","pathMatch","component","HomeComponent","loadChildren","d","then","PublicModule","AppRoutingModule","AppComponent","PathInterceptorService","intercept","handle","clone","AuthInterceptorService","setHeaders","Authorization","HttpResponse","requestAuthHeader","responseAuthHeader","substring","UserProfileComponent","UserSessionComponent","removeOtherSession","sessionCount","onDestroy","StudentRequestReason","ClassReleaseReason","ClassDeclineReleaseReason","RequestStatusType","StudentStatus","RatingService","saveChildRatings","unlockRating","setStudentNextIndex","nextStudent","setStudentPreviousIndex","previousStudent","setStudentResultIds","studentSearchIds","getStudentResultIds","getNextStudentIndex","getPreviousStudentIndex","getStudentMeasuresAndRatings","templateId","carId","getStudentMeasuresAndRatingsScantron","parentTemplateId","getMeasureLevels","lockClass","unlockClass","getClassRatings","generatePdf","getRatingDownloadUrl","getLockCount","getClassroomRatings","saveTeacherSurvey","getTeacherSurvey","cardId","StudentRequestService","addStudentRequest","addBatchStudentRequests","checkDuplicateBatch","getByReason","requestReasonId","getByReasonAndAgency","getApprovedOrPendingByReasonAndClass","pendingTransfersAndDropsExist","requests","updateStudentRequest","processBulkUpdates","processBulkReleaseUpdates","processReEnrollmentRequests","processTransfers","processBatchRequest","processReEnrollmentBatch","getHasPendingRequest","getStudentRequests","getStudentEvidenceRequests","PortfolioMessageService","getPortfolioMessagesByUserId","searchPortfolioMessages","addNewMessage","getPortfolioConversation","archivePortfolioMessage","updateReadPortfolioMessages","DashboardComponent","ratingService","studentRequestService","portfolioMessageService","access","hasPendingRequest","hasPendingTransfers","hasPendingUnEnrollments","hasPendingReEnrollments","hasPendingChildReEnrollments","hasPendingReleaseRequest","isDashboardLoaded","openSessionModel","getRatingCount","isPendingIndicatorHidden","getPendingRequest","canViewPortfolioMessages","checkNewMessages","hasNewMessages","newMessagesIcon","toggleSwitchAction","canViewLockedChildren","ratingCount","dashboardItem","myDashboard","onCheckboxChange","DrdpLayoutComponent","ReEnrollClassroomComponent","reEnrollmentForm","submitBtnText","flatMap","currentRatingPeriod","ratingOptions","existingClasses","displayResult","reEnrollClass","ec","fromClassId","toClassId","isProcessing","MyClassesService","getUserClasses","StudentClassEnrollmentService","getStudentClassEnrollment","classEnrollmentId","deleteStudentClassEnrollment","addStudentEnrollment","updateClassEnrollmentsTable","enrollDroppedChild","checkStudentEnrollment","getRatingPeriodTemplateOptions","getStudentClassInfo","updateClassEnrollment","getAgencyCurrentStudentEnrollments","getStudentActiveActiveEnrollments","areEnrollmentsActive","MyClassesComponent","myClasses","enrollmentService","colorClass","cursorClass","isSortable","accessToClassReenroll","classroomsForm","loadClasses","resetPage","accessToClassroomSearch","getMyClasses","_intl","itemsPerPageLabel","initializeTableData","accessToAllAgencies","setIconDisplayObject","teachersNames","formatStringToStringArr","paginateTable","keys","firstPage","onIconClick","openReEnrollModal","handleAgency","handleSites","handleRatingPeriod","handleClassroom","activeStudentCount","childMovementErrorMessage","DropChildComponent","editData","getExitReasons","dropForm","classExitReasonId","exitDate","isBatch","child","students","exitReasons$","getSelectedExitReason","selectedExitReason","processBatchUnEnrollment","studentBatchRequestPayload","studentRequestDtos","successMessage","duplicates","addBatchStudentRequest","TransferChildComponent","transferChildForm","classEnrollmentDate","calculateYesterdayDate","studentBatch","isBatchTransfer","Comment","yesterday","setDate","setHours","handleSite","ratingStartDate","ratingEndDate","student","showModal","studentRequest","classExitDate","getStudentExitDate","displayMessage","enrollmentDate","dateRange","checkExitDate","invalidEnrollmentDate","currentRatingPeriodEndDate","ratingPeriodEndDate","SpedExitDateComponent","spedExitDateForm","spedEntryDate","spedExitDate","handleExitDate","checkDates","handleEntryDate","entryDate","gpMinStartDate","gpMaxEndDate","startOnlyDate","endOnlyDate","validDate","G","isDateBetween","studentIds","isSuccess","incompleteCOSStudents","missingScoresStudents","ConfirmationSpedExitDateComponent","batchResults","BatchSpedExitDateComponent","minSpedEntryDate","selectedDate","successfulStudents","IepPlan","IepPlanValues","StudentsComponent","activatedRoute","canWithdraw","unshift","canTransfer","getClassIdFromUrl","createInitialPayload","setClassroomAndRatingPeriodName","ratingPeriodName","canBatchUpdateSped","hasBatchUpdateSpedPermission","truthyClass","truthyIconUrl","falsyClass","falsyIconUrl","showTable","transferChildModal","dropChildModal","enrollmentEndDate","enrollmentIds","beginBatchUnEnrollment","batchSpedExit","eligibleStudents","isLocked","osepQueueId","iepPlanId","districtOfLiabilityId","onActionItemClicked","setSpedExitDateModal","openConfirmationModal","AuthGuard","canActivateChild","isValid","isUserLoggedIn","logoutCurrentUser","loggedInUser","LatestNewsComponent","getRecentNewsItems","newsItemTitle","EditUserProfileComponent","updateUserService","emailName","editUserForm","middleName","jobTitle","getUserData","control","valid","touched","untouched","submitAttempt","validateAllFormFields","formGroup","field","FormControl","markAsTouched","onlySelf","FormGroup","handleSuffix","updateUserInfo","UserId","FirstName","EmailName","LastName","MiddleName","JobTitle","Suffix","UpdatePasswordComponent","encryptionService","passwordForm","oldPassword","passwordValidator","compareValidator","String","match","otherControlName","parent","otherControl","thisControl","Error","valueChanges","OldPassword","NewPassword","AssignChildComponent","studentClassEnrollment","addChildFormData","assignStudentForm","addStudentPayload","canViewMultipleAgencies","handleDropdownSelection","selectedRpMinDate","selectedRpMaxDate","validateDate","classEnrollmentDateValue","enrollmentStartDate","agencyDate","isSubmitting","drdpId","agencyStartDate","studentClassEnrollments","EnrollmentProgram","DemographicSections","OptionPipe","optionText","by","GroupDemographicSectionPipe","collection","sectionId","AddNewChildComponent","isPrimaryDisabilityEnabled","isDistrictLiabilityEnabled","isSpecialEdEntryEnabled","isSpecialEdExitEnabled","isAnticipatedDateEnabled","isSelpaEnabled","isInitialAssessmentToolEnabled","isOutcome1Enabled","isOutcome2Enabled","isOutcome3Enabled","Map","getCurrentNavigation","extras","addChildForm","middleInitial","SSID","dob","genderID","eld","localID","enrollmentPrograms","seEntryDate","seAnticipateExitDate","seExitDate","ethnicity","latino","other","selpaId","initialAssessmentToolId","outcome1Id","outcome2Id","outcome3Id","countyId","countyOfResidenceId","tuitionFeeId","districtId","districtsOfLiability","dol","sauId","studentDemographics","demographicSections","fieldType","dataType","ethnicityvalues","userStateId","isNewHampshire","onFormChanges","getFormSelects$","combineLatest","ethnicities","languagesList","counties","iepPlans","adaptations","ageGradeInstruments","disabilities","yesOrNo","enrollmentProgramTypes","customConfigs","tuitionFee","customStateConfig","checkSpecialEdInfo","buildCustomConfigFormControl","ssidLabel","localId","AgencySID","agencySidLabel","ssidErrorMsg","ssidmaxLength","maxLength","ssidPatternErrorMsg","ssidLocalIdReqErrorMsg","RegExp","validators","updateOn","socialEconomic","primaryDisabilityId","currentSSID","validateSSID","countyOfProgramId","initialCountyId","validateFormData","eventData","currentField","required","markAsDirty","isDuplicate","duplicateSSID","isDifferentChild","prepareForAssigment","duplicateStudentValidationPayload","buildCustomConfigCollection","replaceWhitespace","CustomFields","customFieldAnsCollection","enrollmentProgramPlaceholder","enrollmentProgramTypesFiltered","ept","otherRequired","ssidPattern","currentLocalID","resetAddChildForm","PrimaryDisability","specialEdInfo","DistrictLiability","SpecialEdEntryDate","AnticipatedDateExit","DateExit","Selpa","isTextField","customFieldTypeId","addControl","buildCustomConfigObj","colName","configId","ans","customField","stateDemographicConfigurationId","intValue","smCharValue","lgCharValue","customFieldMap","set","handleChosenCountyOfProgram","chosenCountyOfProgram","countyName","handleChosenCountyOfResidence","handleChosenSelpa","handleChosenEthnicity","Intentionally_left_blank","isEthnicityDisabled","controlName","formatDatesToString","handleEld","handleAgeGrade","handleHispanic","handleIep","iepPlan","Yes","addValidators","clearValidators","handleOutcome","handleInitAssessment","deselectCheck","currentTuitionFeeId","AddViewEditChildComponent","history","isView","genderId","languageIds","dualIepPlanId","enrollmentProgramIds","dualEnrollmentProgramIds","dualEnrollmentStartDate","dualEnrollmentEndDate","dualSelpaId","dualPrimaryDisabilityId","dualSeEntryDate","dualSeAnticipateExitDate","dualInitialAssessmentToolId","dualOutcome1Id","dualOutcome2Id","dualOutcome3Id","dualDistrictOfLiabilityId","dualExtensiveSupportId","districtOfLiabilityName","dualDistrictId","dualSauId","componentType","View","Edit","isAdd","Add","inputType","studentCustomFields","childData","extensiveSupports","customFieldCollection","loadFormValues","ethnicityIds","adaptationIds","dualAdaptationIds","chosenCountyOfResidence","residenceCountyName","ageGradeInstrumentName","genderName","returnYesOrNo","formatStringsToNumberArr","enrollmentProgramNames","dualEnrollmentProgramNames","otherPrograms","tuitionFeeName","iepPlanName","dualEnrollmentIepPlanName","dualEnrollmentIepPlanId","primaryDisabilityName","dualAdaptations","dualEnrollmentSelpaId","dualPrimaryDisabilityName","dualInitialAssessmentToolName","dualOutcome1Name","dualOutcome2Name","dualOutcome3Name","dualDistrictOfLiabilityName","dualExtensiveSupportName","getEnrollmentDetails","selectedDisability","hasFollowUp","isPrimaryAgency","enrollment","canViewDualSped","bypassDualEnrollment","primaryDisabilityReq","handleSubmit","customUpdatedValues","customFields","returnToView","openEnrollDroppedChildModal","location","reload","isIepPlanYes","isDistrictLiabilityRequired","setSpecialEdEntryDateValidation","formControlExist","customValue","findCustomValue","customValueExist","isPrimary","primary","handlePrimaryDisability","previousValue","currentValue","EditClassEnrollmentDate","studentClassEnrollmentService","dialog","editForm","initForm","studentEnrollmentInfo","originalAgeGradeId","isAgencyDateError","globalRatingPeriodMinDate","globalRatingPeriodMaxDate","agencyEnrollDate","agencyDateError","defaultDateError","hasInputRatings","pristine","ViewClassEnrollmentsComponent","canDelete","deleteModal","isActiveEnrollment","isLastActive","confirmationMessage","openUnenrollModal","deleteEnrollment","openModel","response","AddChildSharedProviderComponent","teacherId","childSharedProviderForm","handleTeacher","DeleteChildSharedProviderComponent","onDelete","childSharedProviderId","ViewChildSharedProvidersComponent","openModal","ViewChildAssessmentsComponent","falsyIcon","downloadUrl","href","click","ViewChildTabsComponent","toggleTabs","canEditChild","enrollments","primaryEnrollments","activeTab","editChild","buttonText","backToView","goBack","ViewChildComponent","getChildIdFromUrl","setChildDataInView","DropdownType","PendingTransfersComponent","requestService","sitesService","Router","selectSites","optionKey","initialSelectId","selectClass","selectRatingPeriods","canViewSensitiveTransferInfo","checkClass","stateSearchId","searchPayload","agencySearchId","viewOnlyOwnAgency","setTableData","getRatingPeriods","isSelect","approve","decline","classOptions","handleIconOnClick","edited","siteName","updateClassroomDropdowns","adminComment","initializeRowDropdowns","isCurrentlyEditing","doneEditing","getSelectData$","concatMap","dropdownType","mappedRes","includesChosenClass","fromClassroomList","toClassroomList","handleRequest","prop","acceptOrDeclineChecked","accept","resetBools","fromRatingPeriodList","toRatingPeriodList","selectComponents","selectComponent","handleFromSites","fromSiteId","fromRatingPeriodId","getSelectedSite","handleFromClassroom","handleFromRatingPeriod","handleToSites","toSiteId","toRatingPeriodId","handleToClassroom","handleToRatingPeriod","selectedSiteId","isSubmitBtnEnabled","handleCancel","PendingWithdrawsComponent","studentRequestsService","exitRequestSearchForm","setDefaultPayload","initializeSearchForm","getPendingExits","existingData","originalData","record","classExitReasonName","exitReasons","toISOString","exitReason","checkChanges","setByStatus","onCancel","studentRequestPayload","requestUpdate","requestStatusUpdateHandler","clearDropdownOptions","searchDropdownOptions$","classrooms","CustomValidators","isNumbers","cannotContainSpace","startDateProp","endDateProp","startDateValue","endDateValue","dateMismatch","sameDate","invalidDecimal","EnrollDroppedChildrenComponent","enrollForm","SearchDroppedChildrenComponent","openEnrollModal","clearTable","PermissionGuard","canActivate","EventAction","ReEnrollmentRequestsComponent","getPendingRequests","getRequestData$","getRatingPeriods$","forkJoin","requestData","ratings","isEditing","reEnrollRequests","handleSearch","handleEditRequest","handleChangeRequest","handleApprovalRequest","getClassesByClassroom$","getApprovedOrPendingReq$","approvedOrPendingReq","req","updatedView","AddNewsComponent","newsItemDate","newsItemForm","newsItemEndDate","newsItem","newsItemTypeId","roleIds","isGlobal","isStateLevel","getNewsItemsTypes","getUserRoles","getNewItems","stateInitialValues","agencyInitialValues","newsItemBody","newsItemRoles","newsItemRole","newsItemSites","newsItemSite","newsItemTypeInitialValue","siteInitialValues","handleGlobal","handleStateLevel","agencyIdObjectArr","newsItemTypes","newItemsList","handleType","e","clearAgencySiteValidators","addAgencySiteValidators","clearAgencySiteValues","submitForm","checkDuplicateDate","formattedStartDate","formatToDate","formattedEndDate","values","resetForm","replaceUrl","newsTypeSelect","SelectRatingModalComponent","levelCount","MatDialog","getMeasureEvidence","ratingValue","preRatingValue","reasons","results","isCondition","developmentalLevels","EM","notYet","conditional","UR","measureEvidence","enrollmentId","saveRating","evidenceManagement","AssessmentDateModalComponent","assessmentDate","InputRatingAction","TeacherSurveyModalComponent","difficultyForm","difficultyLevelId","difficultyAnswer","extentLevelId","difficultyLevels","teacherSurveyReq","viewOnly","disable","isPTKMathAndNotDefault","isDefault","MeasureReason","ScantronComponent","studentDomains","_studentDomains","processDomains","domainConditions","displayLevels","domainLevels","domainLevel","measureLevels","measureConditions","isUR","isEM","isNotYet","studentInfo","emitMeasureChange","condition","toggleMeasureUR","toggleMeasureNotYet","toggleMeasureEM","measureUpdated","StudentInfoComponent","onActionClick","actionClicked","previousPage","RatingCardComponent","selectRating","editTeacherSurvey","editClicked","viewTeacherSurvey","viewClicked","InputRatingComponent","canDeactivate","isFormDirty","initializeData","checkFormDisabled","isEnabled","overrideRatings","isWithdrawn","isReferenced","hasSameRatingPeriod","hasCopiedRating","isRatingDisabled","calculateStudentAge","templateUrl","templateLink","bypassSecurityTrustUrl","isCustom","isKinder","getReasons","setPreviousAndNext","hasMeasures","canLockRatings","getStudentResults","currentIndex","previousIndex","nextIndex","allItemIds","carReasons","selectRatingModal","teacherSurvey","openTeacherSurvey","calculateDomainTotal","processMeasureUpdate","touchedMeasures","openLockModal","minRatingPeriodDate","maxRatingPeriodDate","measureRatingCount","domainTotal","measureTotalCount","canLock","lockingDate","isValidRatings","errorEmerging","isSaving","shapedMeasures","toggleView","isScantron","lockRating","goToNextStudent","goToPreviousStudent","confirmPdfPrint","isRatingViewLocked","file","Blob","fileUrl","URL","createObjectURL","download","prevStudent","SearchRatingComponent","instrumentId","handleAgeGroupInstrument","ratingPeriodList","selectedAgencyId","classroomList","updateClassroomDropdown","previousIsPilot","ageGroupInstrumentSelect","ageGroupInstrument","useClassId","paginateRatings","checkLockAndUnlock","pageSizeOptions","firstRecord","totalDomainCount","totalDomainRatings","canUnlock","isAgencyLocked","maxEndDate","withAssessmentDate","classAssessmentDate","initializeTableColumns","domainRows","displayDomains","clearDropdown","PortfolioComponent","schoolyearService","ageGroupInstrumentId","viewStudents","viewClass","ageGradeInstrumentSelect","cleardropDown","classRoomId","FutureEvidenceStudentComponent","studentList","redirectToEvidence","goToNextPage","RequestEvidenceComponent","fromStudentClassEnrollmentID","toStudentClassEnrollmentID","PortfolioClassComponent","permissionSerive","canAddEvidence","initPage","studentsInformation","handleSelectedChild","indexToRemove","fullName","reviewEvidence","queryParams","reviewCurrentEvidence","reviewFutureEvidence","modalEvent","domainEvidences","measureEvidences","onNextButton","canProceed","checkFutureEvidence","goToAddEvidence","selectedStudents","showFutureEvidenceModal","returnUrl","futureEvidenceStudents","ReleaseStudentComponent","classReleaseReasonId","releaseStudentForm","getReleaseReasons","releaseReasons$","getSelectedReleaseReason","isOther","DualEnrollChildComponent","isPilotEnroll","programTypeValues","enrollmentForm","iep","extensiveSupportId","adaptationsIds","userAgencyId","handleDropdown","AgeInstrument","Class","InitialAssessment","Outcome1","Outcome2","Outcome3","AdditionalFilters","AddSearchChildComponent","additionalFilter","subFilter","canDualEnroll","userSites","getSsidLabel","ssidPlaceholder","ssidColumnIndex","col","numberOnly","isNumber","which","keyCode","modifiedItems","iconName","tooltipText","actionId","hideIcon","isAddChild","isReleaseRequest","actionIcon","openNoResultsModal","showCheckbox","dualEnrollmentExists","handleChosenCounty","handleAddChildBtn","disableAddChildBtn","openEnrollmentModal","isPilotEnrolled","isPilotTest","actionItem","openRequestReleaseModal","DeclineReleaseStudentComponent","declineReleaseStudentForm","getDeclineReleaseReasons","classDeclineReleaseReasonId","declineReleaseReasons$","getSelectedDeclineReleaseReason","declineReleaseReasonName","declineReleaseReason","PendingReleasesComponent","releaseRequestSearchForm","getPendingReleases","onDeclineChange","openDeclineReleaseRequestModal","onAcceptChange","dataToUpdate","BlobStorageService","uploadFile","container","onProgress","blockBlobClient","containerClient","getBlockBlobClient","uploadData","blobHTTPHeaders","blobContentType","displayUrl","accountName","uploadMultipleFiles","files","studentEnrollementId","uploadObservables","deleteFile","deleteBlob","BlobServiceClient","getContainerClient","FilterPipe","searchTerm","ctx_r90","PortfolioAddEvidence","blobStorageService","uploadText","uploadIcon","allowedType","addEventListener","preventDefault","addPortfolioParams","studentNames","studentEnrollmentId","getDomainAndMeasureName","masterDomains","onlyPilot","masterMeasures","templateDomains","originalTemplateDomains","hasMath","ratingPeriodForm","onTilesClick","isTilesDisabled","selectedIndex","uploadSettings","acceptedFiles","selectedEvidenceType","allowMultiple","selectedPhotoEvidence","checkAndSetUploadRequirements","fileValid","isFileValid","isFileSizeValid","uniqueId","random","now","blobFileName","isFileUploading","selectedTypes","allowedTypes","checkPhotoLimitMax","blobFiles","openDuplicateFileModal","processPhotos","selectedFile","reader","FileReader","selectedFileUrl","readAsDataURL","fileDropHandler","dataTransfer","uploadFileProcess","onSelectFile","onFileClick","uploadToBlobStorage","updateFilesArr","ev","progress","loadedBytes","blobResults","processMultipleFiles","displayFileName","cleanFileName","deleteFileProcess","deleteFileFromBlobStorage","deleteFromBlobFiles","f","updateAddPortfolioModels","addPortfolioModels","addPortfolioModel","onFileRemove","photoEvidence","onFutureDomainSelectChange","masterDomainId","today","collectedOn","formOneValidation","Note","hasSelectedDomainOrMeasure","formTwoValidation","hasSelectedMeasure","hasMeasureValue","isAddformHasSelectedDomain","isAddFormHasSelectedFutureDomain","isAddFormHasSelectedMeasure","isAddFormHasSelectedFutureMeasure","resetSelectedDomainAndMeasure","toggleFutureRatingPeriod","processFile","processEvidences","updateAddPortfolioModel","trimHTTPS","processFutureEvidences","checkSelectedDomainMeasure","j","selectedMeasures","onSaveEvidence","formStep","step","StepOne","formTwoSave","StepTwo","futureEvidenceSave","disableSave","confirmFutureEvidenceSave","back","confirmLeavingWithoutSavingStepTwo","selectedLevelIcon","PortfolioMessageBoxComponent","recipients","messageForm","recipientId","onSend","messageRecipients","handleRecipientSelection","recipient","PortfolioReviewEvidenceComponent","classEnrollmentService","measureType","loadFutureEvidenceData","classDetails","ageGroupInstrumentName","getDomainEvidence","isFutureEvidence","studentDetails","activeEnrollments","domainEvidence","studentActiveEnrollments","getMeasurePrelimRating","updateFutureEvidence","updatePortfolioEvidence","getEvidenceCount","domainMeasure","evidenceItems","handleDomain","showDomain","domainBg","measuresBg","handleMeasures","changeDomainShow","domainCode","selectedDomain","changeMeasureShow","selectedMeasure","classEnrollmentDetails","getInstrumentName","getDescription","isDomain","currTab","description","measurePrelimRatings","measureEvidenceGroup","createdOn","updatedOn","latestEvidence","aDate","bDate","updateEvidencePrelimRating","onDownloadPdf","addToMessageBoard","StudentBulkUnEnrollmentComponent","onlyActive","selectAll","onSave","PilotTestChildrenComponent","disabledWhen","hasRatings","childSearch","DOB","classroomIds","classIds","assignRole","pilotChildrenList","submitPilotChildren","currentRatingPeriodId","previousAgencyId","previousRatingPeriodId","children","openViewChild","viewData","ChildrenComponent","CanDeactivateGuard","confirmNoSave","BatchReEnrollChildComponent","filterRatingOptions","checkEnrollmentDate","rpStartDate","rpEndDate","dateNotWithinRatingPeriod","SearchManageChildComponent","initialAgencySetupComplete","initialSiteSetupComplete","selectAllPagesSet","isSelectAll","accessToAll","currentAgencyId","selectedBatchIds","batch","selectAllStudents","tb","handleActiveCheckAndOpenModal","modalComponent","modalData","batchTransfer","showDuplicateModal","batchReEnroll","batchClassroom","className","batchWithdraw","PendingChildReEnrollmentComponent","PortfolioMessagesComponent","MessageStatus","MessageTileComponent","emitSelectedMessage","selectedMessage","createdById","isArchived","MessageViewComponent","canSearchPortfolioMessages","setData","portfolioMessages","handleSelectedMessage","messageSelected","MessageBoardTileComponent","emitArchiveMessage","archiveMessage","MessageBoardComponent","sceService","blackBg","whiteBg","initializeInfo","initializePayload","updateMessageStatus","updateMessages","routeParams","senderId","student$","defer","user$","sce$","studentRes","userRes","sce","sender","senderName","getConversation","handleTabChange","messageBg","archiveBg","viewStudentEvidence","messageRecipient","ChildRequestComponent","childRequestForm","searchString","requestReason","releaseReason","requestStatusTypeId","handleRequestReason","selectedRequestReason","handleRequestStatusType","selectedRequestStatusType","handleFormSubmit","getStudentRequest","toClassroom","clearOptions","TotalLockedChildrenComponent","accessAssignedStateAgencies","lockedForm","createSearchPayload","_items","InvalidRequestModalComponent","invalidRequests","PendingPortfolioEvidencesComponent","createRequestPayload","evidenceRequests","fromStudentClassEnrollmentId","toStudentClassEnrollmentId","isApproved","isDeclined","openInvalidRequestModal","StudentEvidenceComponent","infoIconColumnConfig","onReviewEvidence","ClassBasedPortfolioComponent","portfolioSerive","getClassEvidence","classPortfolio","showMeasure","navigateToClassList","handleReviewEvidence","StateDashboardTiles","StateDashboardComponent","genderDemographic","ageBasedOnDob","childByRace","ageGroup","programByAgeGroup","homeLanguage","childInSped","childByIep","dashboardEnabled","dashboardResponse","configurations","getActiveTiles","initializeCharts","activeTiles","genderDemographics","childEnrollments","ageCounts","raceCounts","ageGroupCounts","programAgeGroupCounts","homeLanguageTotal","childrenInSped","ratingsCounts","childrenWithIep","disabilityCounts","onViewLanguageClick","isViewLanguage","homeLanguages","DashboardSearchComponent","FormBuilder","enrollmentProgram","globalRatingPeriods","isGlobalAgencies","ageGroupId","enrollmentProgramFilterIds","homeLanguageIds","globalRatingPeriodIds","disabilityIds","program","grp","handleExport","exportClicked","homeLanguageSelect","globalRatingsSelect","SearchProgramsComponent","searchValue","blob","SearchHomeLanguagesComponent","SearchSpecialEducationComponent","SearchDisabilitiesComponent","UserRoutingModule","ReportService","generateParentProgressReport","_dataService","locale","generateParentProgressReportPdf","generateChildProgressReport","generateChildProgressReportPdf","generateClassPlanningReport","generateClassPlanningReportPdf","generateGroupDetailReport","generateGroupDetailReportPdf","generateGroupReport","generateGroupReportPdf","generateCohortProgressReport","generateCohortProgressReportPdf","generateRatingCompletionReport","getRatingCompletionChildren","getReportUsage","getAgencyRatingViews","getChildRatings","generateDistrictOsepReport","generateDistrictOsepReportPdf","generateStateOsepReport","generateStateOsepReportPdf","generateStateOsepReportDetail","getTeacherSurveyResults","saveStateGroupDetailRequest","saveStateCohortRequest","generateOSEPExceptionReport","ViewStudentByClassModalComponent","onlyLocked","canSelectAll","preparePayload","isStudentSelected","onToggleSwitchActionItem","studentIndex","cs","selectStudents","selectedStudentIds","clearSelectedStudents","getLinkedAgencyIds","daysEnrolledTicks","class","daysEnrolled","round","ReportSearchComponent","classroomParamsSubject","requireMultipleRatingPeriods","requireRpInSameSchoolYear","ChangeDetectorRef","dobStart","dobEnd","reducedLunch","displayClassroom","initializeClassroom","classroomParams$","classroomAssignments","multiSelectRatingPeriods","includePilot","selectedAgencyIds","selectedClassroomAssignments","selectedRatingPeriods","selectedRatingPeriodIds","ca","selectedSiteIds","handleClassroomAssignment","selectedClassrooms","selectedClassIds","isPilotClassroom","handleDobStart","handleDobEnd","handleGender","handleRace","handleReducedLunch","handleProgramType","programs","handleLanguage","term","showReportClicked","downloadReport","showStudentSelect","downloadReportClicked","printPdf","clearClicked","multiSelectAgencies","updateClassroomAssignmentDropdown","ratingPeriodIds","SafeHtmlPipe","DomSanitizer","bypassSecurityTrustHtml","ParentProgressComponent","hasAccessToAssignedChildren","showReport","loading","reportService","reportData","handleClear","ClassPlanningComponent","GroupDetailComponent","CohortProgressComponent","ChildProgressComponent","GroupComponent","ViewChildrenModalComponent","RatingCompletionComponent","ratingCompletionSearch","isAllPilot","autoFocus","resetFieldsAndValidators","setRequiredValidators","updateFieldValidity","ReportUsageComponent","reportTypeIds","ageGradeInstrumentIds","reportActionIds","handleDownload","reportType","ageInstrument","reportAction","allAgencies","AgencyRatingViewsComponent","agencyRatingViewsSearch","isCustomView","ChildRatingsComponent","childRatingsSearch","ReportTrackingComponent","DistrictOsepComponent","handleSchoolYear","outcomes","outcome","categoryChartName","barCount","outcomeCategoryTotal","barContainers","element","maxCount","suggestedMax","StateOsepComponent","downloadDetailReport","TeacherSurveyComponent","handleAll","StateGroupDetailComponent","displaySuccessMessage","StateCohortComponent","OsepExceptionComponent","ReportsRoutingModule","ReportsModule","UserModule","HeadStart","StatePreschool","AddEditAgencyComponent","agencyForm","cdsCode","codeType","typeId","agencyAddress","agencyCity","agencyZipCode","headStartId","granteeAgencyId","vendorIds","regionIds","statePreschoolId","contractorAgencyId","isTestAgency","countyID","siteTypeId","isAgencyDelegate","selectedState","selectedCodeType","siteCodeType","selectedType","selectedCounty","selectedVendor","vendors","selectedRegion","isHeadStartGrantee","updateTableView","assign","vendorNames","ctx_r3","AgenciesComponent","loadTableData","paginateAgency","getAgencyList","getInitialAgencyId","table","previousPageSize","AddEditClassesComponent","classroomForm","teacherOfRecordId","hasAccessToAgencies","getClassroomNames","canEditRatingPeriods","canEditRatingPeriod","selectedRatingPeriodId","selectedTeachers","teacherIds","selectedTeacherOfRecordId","selectedClassrooomId","selectedClassroomName","maxTeachersPerClass","ClassesComponent","searchName","classSearch","searchTable","initializeTable","selectedClassId","removeClass","getTeacherNames","StatesComponent","canEditState","getStates","originalStateList","stateName","changeActiveStatus","stateInfo","editConfiguration","AddEditSitesComponent","updateSize","siteForm","siteCode","adminStateDropdown","adminAgencyDropdown","siteAddress","siteCity","siteZipCode","siteCounty","siteZip","siteCodeTypeId","handleView","viewCountyDropdown","CodeType","RegionId","SitesComponent","isToggleActive","isDeletable","loadInitialList","removeSite","siteInfo","regionId","isNaN","siteSearchName","AddEditRatingPeriodComponent","minStart","maxEnd","StartDate","EndDate","dateChange","targetElement","ratingPeriodDescription","formValid","decls","RatingPeriodsComponent","hasFullSearchOptions","saveNewRatingPeriod","toggleStatus","searchSchoolYearId","searchStateId","searchAgencyId","RatingPeriod","SchoolYearID","PageIndex","ItemsPerPage","AddSchoolyearComponent","schoolYearName","schoolYearForm","schoolYearDescription","isCurrent","latestSchoolYear","parseInt","inputYear","beginRange","endRange","SchoolyearsComponent","getSchoolYears","ratingAmount","periods","schoolYears","canAddSchoolYear","preModalData","saveNewSchoolYear","chooseActiveYear","currActiveIndex","temp","newActiveYearIndex","newActive","yearToUpdate","yearToUpdateDesc","updateActiveSchoolYear","currentDateYear","AddGlobalRatingPeriodComponent","currentYear","isNewSchoolYear","forms","globalFall","generateFormGroup","globalWinter","globalSpring","globalSummer1","globalSummer2","generateTableData","season","isFirstSummer","globalRatingPeriodName","periodName","defaultStartDate","defaultEndDate","currentPeriods","noSubmit","formTableColumns","per","populateFormValues","agenciesApplied","form","change","validForm$","saveGlobalRatingPeriods","mappedPeriods","applyGlobalRatingPeriods","isValidDateOrder","confirmSave","getValue","confirmSubmit","PastGlobalRatingPeriodsComponent","pastYears","processRatingPeriodsData","n","pastPeriods","processedPeriods","sortOrder","getSortOrder","getSchoolYear","processedPerList","getTableDataSource","getTableData","GlobalRatingPeriodsComponent","AddEditLockingStatusComponent","lockingStatusForm","lockType","lockDate","LockSettingService","getAllLockSettings","updateLockSetting","lockSetting","LockingStatusComponent","AddClassModalComponent","superUser","currentName","errors","invalidPilotName","ClassroomComponent","removeClassroomName","CustomConfigurationComponent","customConfigForm","iscustom","sectionID","stateID","orderBy","dataTypeConst","fieldTypeConst","sectionOptions$","fieldTypeOptions$","customOptionValidator","onfieldTypeChange","isOptionRequired","isMaxRequired","splitOptions","hasTwoOrMoreOptions","isOptionsValid","o","StateConfigList","SchoolYearTargetComponent","targetForm","observeFormChanges","indicator7a1","indicator7a2","indicator7b1","indicator7b2","indicator7c1","indicator7c2","roundNumericFields","indicatorKeys","toFixed","StudentDemographicsComponent","regionTypeConst","studentDemograpic","demographicForm","initializeValues","configs","updateConfigurations","addConfiguration","Id","StateID","ColumnName","SectionID","getSection","Label","getLabel","IsActive","checkIsActive","MaxLength","getMaxLength","RegionLabel","backToStatePage","UploadTypes","CompanionDocuments","DownloadTemplateService","downloadTemplate","uploadType","uploadTemplate","upload","ChildUploadComponent","downloadTemplateService","uploadTypes","onFileSelected","formData","FormData","append","tiles","dashboardTiles","dashboardForm","stateDashboardTileId","StateConfigurationComponent","applyDecimalPipe","getState","currentState","getCustomConfigs","getTargets","isActiveLabel","targets","targetTableData","openTargetModal","deleteTargetModal","removeTarget","AgeGradeTemplateService","getBaseTemplates","getAvailBaseTemplates","ageGradeTemplateId","getBaseMeasuresByInstrument","getCustomTemplateById","getCustomTemplatesByAgencyId","saveCustomTemplate","saveBaseTemplate","deleteAgeGradeTemplate","AgeGradeTemplateEnrollmentService","getBaseTemplateEnrollmentByAgency","getCustomTemplateEnrollmentById","saveBaseTemplateEnrollment","saveTemplateAssignments","RatingViewSetupComponent","formBuilder","templateService","templateEnrollmentService","selectedStateId","itTemplateId","defaultViewForm","psTemplateId","tkTemplateId","kTemplateId","saTemplateId","canSearch","canViewResults","canEditRatingViews","canUnlockRatingViews","initData","customTableColumns","pilotViewForm","pilotItTemplateId","ptkTemplateId","ptk3TemplateId","getAgencyTemplates","psOptions","itOptions","kOptions","saOptions","tkOptions","pilotItOptions","ptkOptions","ptk3Options","getAgencyInfo","getEnrollmentsByAgencyId","ageGradeInstrument","pilotAgeGradeInstrument","pilotAgeGradeInstruments","updateAgeGradeInstruments","hasIT","agi","hasSA","hasPS","hasTK","hasK","updateFormValue","customTemplates","agencyBaseEnrollments","psOption","itOption","kOption","saOption","tkOption","pilotItOption","ptkOption","ptk3Option","formValue","templateIds","addCustomRatingModal","goToCustomForm","gotToBaseForm","viewCustomForm","clearForm","customTemplateId","hasOwnProperty","ReassignModalComponent","reassignData","reassignForm","CustomRatingViewFormComponent","customViewForm","displayMeasures","pageTitle","nextLabel","ageGradeBaseTemplates","baseTemplates","lookups$","customTemplate","customAssignments","hasAssignments","siteAssignments","classAssignments","studentAssignments","reassign","componentInstance","fromNext","extraMeasures","checkDomainSelected","checkDomainAllSelected","CustomRatingViewAssignmentComponent","initializeDropdowns","toggleSite","classroomDetails","toggleClassroom","checkIfSiteSelected","checkIsClassroomSelected","pilotStudents","openErrorModal","lockedStudents","iepStudents","errorMsg","BaseTemplateComponent","IntegrationsComponent","hasFullAccess","getVendorList","addVendor","editVendor","VendorService","saveVendor","getVendor","vendorId","generateKey","AddEditIntegrationComponent","vendorService","clipboard","vendorForm","phoneNumber","permissions_hasSingleScore","permissions_hasAgencyExtract","currentId","getVendorById","currentVendor","generateAPIKey","rawKey","API_Key","copy","ConfigurationRoutingModule","ConfigurationModule","NgxMaskModule","AddEditRolesComponent","RoleName","roleForm","RoleDescription","RoleGroupId","roleGroup$","roleName","roleDescription","roleGroupId","UserRolesComponent","roleGroup","FeaturesAddEditComponent","permissionName","featureForm","permissionDescription","headerName","SuperFeaturesAddComponent","superPermissionId","featureGroupForm","subPermissionIds","getUncategorizedFeatures","initializeNewSubTableData","newSubFeatures","newSubDataSource","initializeUncategorizedSubTableData","uncategorizedFeatures","uncategorizedDataSource","uncategorizedTableData","addSuperFeature","modalTitle","hasChosenSuperFeature","addSubFeature","newSubTableData","sortTableData","removeSubFeature","localeCompare","SuperFeaturesEditComponent","getCurentFeatures","addSubTableData","initializeAddSubTableData","currentSubTableData","initializeCurrentSubTableData","currentSub","currentSubDataSource","addSub","addSubDataSource","subPermissionId","closeModal","FeaturesTabsComponent","getFeatureList","featureTableData","getFeatureGroup","supFeatureTableData","filterFeatures","featureAction","addFeature","updateFeature","editSupFeatures","nonGroupFeatures","uncategorized","groupName","featureList","featuresService","feature","deleteFeature","deleteSupFeature","permissionGroup","superPermission","subPermissions","FeaturesComponent","PermissionsFilterComponent","buildRoleSet","originalRolesList","orignalRolesList","roleSet","toggleRoles","updateRoleSet","PermissionsManagmentComponent","checkAssignment","assignmentList","emitPermissionAssignment","isDeleted","permissionAssignment","changeShow","PermissionsComponent","getPermissionGroup","getPermissionAssignment","getUncategorized","permissionGroup$","uncategorizedList","openFilterDialog","downloadRoleReport","setAttribute","LoginAuditService","LoginAuditsComponent","service","fromDate","toDate","getRoleOptions","dateWithinRange","diffInYears","abs","oneYearInMs","dateRangeNotWithinOneYear","handleRoles","submitSearch","timeZone","Intl","DateTimeFormat","resolvedOptions","timeZoneId","rerunSearchFormValidation","resetEndDate","ViewUserComponent","parseViewData","AccountStatusTable","AccountStatusNameTable","AddEditUserAccountsComponent","statusType","statusTypeName","roleGroupAccessLevel","roleType","workEmail","userForm","checkEmail","statusTypeId","statusReason","excludedAgeGradeIds","userRoleOptions","loggedInUserAccessLevel","editSelf","loggedUserId","userDetails","activeUser","initializeDropdownValues","selectedRoleFlags","roleGroupFlags","currentUserAccessLevel","hasStatusEditAccess","matchEmail","confirmEmail","confirmedEmail","emailMismatch","selectedGranteeAgencyId","selectedContractorAgencyId","transformStringToNumArray","selectedRoleIds","selectedCountyIds","selectedRegionIds","regions","selectedStatus","selectedSuffix","originalAgency","orginalSites","isDropdownValid","County","Grantee","StatePreschoolContractorRef","Status","Active","RegionRef","roleIndex","entry","isStandAlone","roleGroupStandAlone","initializeCheckbox","createUserPayload","standaloneFlags","flag","newUserId","UserAccountComponent","editor","searchStr","userSearch","userStatusIds","canCreateAccount","canEditSameLevel","canEditSameLevelNotPromote","handleStatus","handleroles","openModalAdd","openViewModal","canEditUser","sameAccessLevel","isSameUser","openEditModal","searchAccounts","EditUserComponent","roleIdsToAdd","roleIdsToDelete","siteIdsToAdd","siteIdsToDelete","countyIdsToAdd","countyIdsToDelete","countyIds","getUserDetails$","mergeMap","granteeAgencies","statusTypes","selectData","selectedAccountStatus","userAgencyList","userGranteeAgencyList","userSiteList","userCountyList","agencyList","granteeAgencyList","siteList","stateList","roleList","statusTypeList","countyList","processUserDetail","originalRoles","handleChosenAccountStatus","emitData","handleChosenState","arrayDiff","handleChosenCounties","handleChosenGranteeAgency","handleChosenContractorAgency","handleChosenRoles","removeId","addId","resetRoleCheckboxes","roleCheckboxes","roleCheckbox","roleValue","isChecked","undoChanges","processFormData","processEmitData","roleNames","arr1","arr2","arrayIncludes","ResetPasswordComponent","hidden","confirmInputType","confirmHidden","patternValidator","hasNumber","hasCapitalCase","hasSmallCase","hasSpecialCharacters","matchPassword","regex","resetConfirm","resetCreate","createPassword","modalHeader","isAdminUpdate","GlobalAdminComponent","searchObj","getUsers","chosenState","chosenAgency","chosenSites","clearSharedDropdowns","pageChange","openPreviewModal","openResetPasswordModal","AccountsRoutingModule","AccountsModule","PermissionAndRolesComponent","fetchAndDownloadFile","fetch","ok","revokeObjectURL","catch","finally","removeChild","UploadTemplatesComponent","getFileName","CompanionDocumentsComponent","companionTypes","downloadDocument","companionType","documentLink","ResourceRoutingModule","ResourceModule","UploadService","parseExcelToJson","allXlsxData","xlsxDataArray","tempXlsxDataArray","rowvalue","headerValue","replaceAll","xlsxDataObj","errorMessages","warningMessages","rowValueObj","setUploadFile","fileToUpload","getUploadFile","checkFile","rows","createFileFromJson","checkFileClass","checkFileUser","validateHeaders","validateClassHeaders","validateUserHeaders","jsonFile","saveMoreChild","saveUploadClass","saveUploadUser","jsonObject","jsonString","File","UploadCenterAllInstrumentChildComponent","uploadService","checkFileMessage","readData","showCheckFileCard","showErrorCard","isFormHasError","isFormValid","isFormValidated","cardText","cardColor","showSubmitCard","showSuccessCard","getMatCardClass","hasError","checkFileHasErrorMessage","submitFileMessage","isValidUpload","processData","xlsxData","missingColumns","invalidColumns","ws","XLSX","cellDates","dateNF","Sheets","ratingSheetName","headerNames","raw","allowupload","readAsBinaryString","tArr","headerData","errorMessage","openSuccessModal","uploadNewFile","UploadCenterComponent","onFileChange","isFileAllowed","onFileChangeClass","onFileChangeUser","onFileChangeMoreChildren","isUploading","openFailModal","handleUploadResult","genericModal","uploadMoreChildDropHandler","classList","remove","uploadChildDropHandler","uploadClassDropHandler","uploadUserDropHandler","pop","moreChildFileInputRef","UploadCenterClassComponent","wb","sheetNames","SheetNames","UploadCenterUserComponent","UploadRoutingModule","UploadModule","DownloadRequestService","downloadDemographics","saveRequestForRatings","saveRequestForRatings2025","saveRequestForScores","saveRequestForRatingsAndScore","saveRequestForSPHDRatingsAndScore","DownloadSearchComponent","disableDropdown","_disableDropdown","updateFormValidation","updateValidators","handleChosenAgencies","searchClicked","DownloadDemographicsComponent","downloadService","DownloadDemographicsRatingsComponent","DownloadDemographicsScoresComponent","DownloadDemographicsAllComponent","DownloadDemographicsAllSPHSComponent","DownloadDemographicsRatings2025Component","DownloadsRoutingModule","DownloadsModule","recaptchaSettings","siteKey","AppModule","bootstrap","provide","HTTP_INTERCEPTORS","useClass","multi","RECAPTCHA_V3_SITE_KEY","useValue","BrowserModule","BrowserAnimationsModule","HttpClientModule","RecaptchaV3Module","enableProdMode","__NgCli_bootstrap_1","bootstrapModule"],"sourceRoot":"webpack:///","sources":["./src/app/core/core.module.ts","./src/app/core/directives/check-permission.directive.ts","./src/app/core/enums/age-grade-instruments.ts","./src/app/core/enums/chart-type.ts","./src/app/core/enums/data-type.ts","./src/app/core/enums/measure-condition.ts","./src/app/core/enums/modal.ts","./src/app/core/enums/permissions.ts","./src/app/core/enums/portfolio.ts","./src/app/core/enums/roles.ts","./src/app/core/enums/select.ts","./src/app/core/enums/states.ts","./src/app/core/enums/student-demographic-form.ts","./src/app/core/enums/table.ts","./src/app/core/pipes/local-date.pipe.ts","./src/app/core/pipes/pipes.module.ts","./src/app/core/services/agency.service.ts","./src/app/core/services/auth.service.ts","./src/app/core/services/chatbox.service.ts","./src/app/core/services/class.service.ts","./src/app/core/services/classroom.service.ts","./src/app/core/services/data.service.ts","./src/app/core/services/encryption.service.ts","./src/app/core/services/helper.service.ts","./src/app/core/services/lookup.service.ts","./src/app/core/services/news-item.service.ts","./src/app/core/services/permission.service.ts","./src/app/core/services/portfolio.service.ts","./src/app/core/services/rating-period.service.ts","./src/app/core/services/role.service.ts","./src/app/core/services/site.service.ts","./src/app/core/services/spinner.service.ts","./src/app/core/services/state.service.ts","./src/app/core/services/student.service.ts","./src/app/core/services/toast.service.ts","./src/app/core/services/user-dropmenu.service.ts","./src/app/core/services/user.service.ts","./src/app/core/validators/auth.validator.ts","./src/app/shared/components/audio/audio.component.html","./src/app/shared/components/audio/audio.component.ts","./src/app/shared/components/btn/btn.component.ts","./src/app/shared/components/btn/btn.component.html","./src/app/shared/components/carousel/carousel.component.html","./src/app/shared/components/carousel/carousel.component.ts","./src/app/shared/components/chart/chart.component.html","./src/app/shared/components/chart/chart.component.ts","./src/app/shared/components/chart/legend/legend.component.html","./src/app/shared/components/chart/legend/legend.component.ts","./src/app/shared/components/class-portfolio-evidence/class-portfolio-evidence.component.ts","./src/app/shared/components/class-portfolio-evidence/class-portfolio-evidence.component.html","./src/app/shared/components/confirmation-modal/confirmation-modal.component.html","./src/app/shared/components/confirmation-modal/confirmation-modal.component.ts","./src/app/shared/components/container/container.component.ts","./src/app/shared/components/container/container.component.html","./src/app/shared/components/date-picker/date-picker.component.html","./src/app/shared/components/date-picker/date-picker.component.ts","./src/app/shared/components/drdp-tables/add-edit/add-edit.component.html","./src/app/shared/components/drdp-tables/add-edit/add-edit.component.ts","./src/app/shared/components/drdp-tables/upload-table/upload-table.component.html","./src/app/shared/components/drdp-tables/upload-table/upload-table.component.ts","./src/app/shared/components/drop-menu/drop-menu.component.html","./src/app/shared/components/drop-menu/drop-menu.component.ts","./src/app/shared/components/dropdowns/classroom-rating-period-params/classroom-rating-period-params.component.html","./src/app/shared/components/dropdowns/classroom-rating-period-params/classroom-rating-period-params.component.ts","./src/app/shared/components/dropdowns/filter-select/filter-select.component.html","./src/app/shared/components/dropdowns/filter-select/filter-select.component.ts","./src/app/shared/components/dropdowns/group-select/group-select.component.html","./src/app/shared/components/dropdowns/group-select/group-select.component.ts","./src/app/shared/components/dropdowns/select-age-grade/select-age-grade.component.ts","./src/app/shared/components/dropdowns/select-age-grade/select-age-grade.component.html","./src/app/shared/components/dropdowns/select-agency/select-agency.component.ts","./src/app/shared/components/dropdowns/select-agency/select-agency.component.html","./src/app/shared/components/dropdowns/select-class/select-class.component.ts","./src/app/shared/components/dropdowns/select-class/select-class.component.html","./src/app/shared/components/dropdowns/select-classroom/select-classroom.component.ts","./src/app/shared/components/dropdowns/select-classroom/select-classroom.component.html","./src/app/shared/components/dropdowns/select-contractor/select-contractor.component.ts","./src/app/shared/components/dropdowns/select-contractor/select-contractor.component.html","./src/app/shared/components/dropdowns/select-county/select-county.component.ts","./src/app/shared/components/dropdowns/select-county/select-county.component.html","./src/app/shared/components/dropdowns/select-disability/select-disability.component.ts","./src/app/shared/components/dropdowns/select-disability/select-disability.component.html","./src/app/shared/components/dropdowns/select-gender/select-gender.component.ts","./src/app/shared/components/dropdowns/select-gender/select-gender.component.html","./src/app/shared/components/dropdowns/select-global-rating/select-global-rating.component.ts","./src/app/shared/components/dropdowns/select-global-rating/select-global-rating.component.html","./src/app/shared/components/dropdowns/select-grantee/select-grantee.component.ts","./src/app/shared/components/dropdowns/select-grantee/select-grantee.component.html","./src/app/shared/components/dropdowns/select-head-start/select-head-start.component.ts","./src/app/shared/components/dropdowns/select-head-start/select-head-start.component.html","./src/app/shared/components/dropdowns/select-iep-plan/select-iep-plan.component.ts","./src/app/shared/components/dropdowns/select-iep-plan/select-iep-plan.component.html","./src/app/shared/components/dropdowns/select-initial-assessment-tool-type/select-initial-assessment-tool-type.component.ts","./src/app/shared/components/dropdowns/select-initial-assessment-tool-type/select-initial-assessment-tool-type.component.html","./src/app/shared/components/dropdowns/select-language/select-language.component.ts","./src/app/shared/components/dropdowns/select-language/select-language.component.html","./src/app/shared/components/dropdowns/select-outcome/select-outcome.component.ts","./src/app/shared/components/dropdowns/select-outcome/select-outcome.component.html","./src/app/shared/components/dropdowns/select-portfolio-users/select-portfolio-users.component.ts","./src/app/shared/components/dropdowns/select-portfolio-users/select-portfolio-users.component.html","./src/app/shared/components/dropdowns/select-program-type/select-program-type.component.ts","./src/app/shared/components/dropdowns/select-program-type/select-program-type.component.html","./src/app/shared/components/dropdowns/select-providers/select-providers.component.ts","./src/app/shared/components/dropdowns/select-providers/select-providers.component.html","./src/app/shared/components/dropdowns/select-race/select-race.component.ts","./src/app/shared/components/dropdowns/select-race/select-race.component.html","./src/app/core/enums/global-ratings.ts","./src/app/shared/components/dropdowns/select-rating-period/select-rating-period.component.ts","./src/app/shared/components/dropdowns/select-rating-period/select-rating-period.component.html","./src/app/shared/components/dropdowns/select-region/select-region.component.ts","./src/app/shared/components/dropdowns/select-region/select-region.component.html","./src/app/shared/components/dropdowns/select-report-action/select-report-action.component.ts","./src/app/shared/components/dropdowns/select-report-action/select-report-action.component.html","./src/app/shared/components/dropdowns/select-report-type/select-report-type.component.ts","./src/app/shared/components/dropdowns/select-report-type/select-report-type.component.html","./src/app/shared/components/dropdowns/select-request-reason/select-request-reason.component.ts","./src/app/shared/components/dropdowns/select-request-reason/select-request-reason.component.html","./src/app/shared/components/dropdowns/select-request-status-type/select-request-status-type.component.ts","./src/app/shared/components/dropdowns/select-request-status-type/select-request-status-type.component.html","./src/app/shared/components/dropdowns/select-role/select-role.component.ts","./src/app/shared/components/dropdowns/select-role/select-role.component.html","./src/app/shared/components/dropdowns/select-school-year/select-school-year.component.ts","./src/app/shared/components/dropdowns/select-school-year/select-school-year.component.html","./src/app/shared/components/dropdowns/select-selpa/select-selpa.component.ts","./src/app/shared/components/dropdowns/select-selpa/select-selpa.component.html","./src/app/shared/components/dropdowns/select-site-code/select-site-code.component.ts","./src/app/shared/components/dropdowns/select-site-code/select-site-code.component.html","./src/app/shared/components/dropdowns/select-site/select-site.component.ts","./src/app/shared/components/dropdowns/select-site/select-site.component.html","./src/app/shared/components/dropdowns/select-state-preschool/select-state-preschool.component.ts","./src/app/shared/components/dropdowns/select-state-preschool/select-state-preschool.component.html","./src/app/shared/components/dropdowns/select-state/select-state.component.ts","./src/app/shared/components/dropdowns/select-state/select-state.component.html","./src/app/shared/components/dropdowns/select-status/select-status.component.ts","./src/app/shared/components/dropdowns/select-status/select-status.component.html","./src/app/shared/components/dropdowns/select-suffix/select-suffix.component.ts","./src/app/shared/components/dropdowns/select-suffix/select-suffix.component.html","./src/app/core/services/dropdown.service.ts","./src/app/shared/components/dropdowns/select-teacher/select-teacher.component.ts","./src/app/shared/components/dropdowns/select-teacher/select-teacher.component.html","./src/app/shared/components/dropdowns/select-type/select-type.component.ts","./src/app/shared/components/dropdowns/select-type/select-type.component.html","./src/app/shared/components/dropdowns/select-vendor/select-vendor.component.ts","./src/app/shared/components/dropdowns/select-vendor/select-vendor.component.html","./src/app/shared/components/dropdowns/select-yes-no/select-yes-no.component.ts","./src/app/shared/components/dropdowns/select-yes-no/select-yes-no.component.html","./src/app/shared/components/footer/footer.component.html","./src/app/shared/components/footer/footer.component.ts","./src/app/shared/components/header-dropmenu/header-dropmenu.component.html","./src/app/shared/components/header-dropmenu/header-dropmenu.component.ts","./src/app/shared/components/header-logo-and-image/header-logo-and-image.component.html","./src/app/shared/components/header-logo-and-image/header-logo-and-image.component.ts","./src/app/shared/components/header/header.component.html","./src/app/shared/components/header/header.component.ts","./src/app/shared/components/menu-link/menu-link.component.ts","./src/app/shared/components/menu-link/menu-link.component.html","./src/app/shared/components/news-item/news-item.component.html","./src/app/shared/components/news-item/news-item.component.ts","./src/app/shared/components/pill/pill.component.ts","./src/app/shared/components/pill/pill.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-audio/evidence-audio.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-audio/evidence-audio.component.ts","./src/app/shared/components/portfolio-evidence-management/evidence-notes/evidence-notes.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-notes/evidence-notes.component.ts","./src/app/shared/components/portfolio-evidence-management/evidence-photos/evidence-photos.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-photos/evidence-photos.component.ts","./src/app/shared/components/portfolio-evidence-management/evidence-structured-prompt/evidence-structured-prompt.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-structured-prompt/evidence-structured-prompt.component.ts","./src/app/shared/components/portfolio-evidence-management/evidence-video/evidence-video.component.html","./src/app/shared/components/portfolio-evidence-management/evidence-video/evidence-video.component.ts","./src/app/core/enums/evidence-tab.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/modals/assign-enrollment/assign-enrollment.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/modals/assign-enrollment/assign-enrollment.component.html","./src/app/shared/components/portfolio-evidence-management/portfolio-evidence-management.component.html","./src/app/shared/components/portfolio-evidence-management/portfolio-evidence-management.component.ts","./src/app/shared/components/portfolio-evidence-management/rating-sheet/rating-sheet.component.html","./src/app/shared/components/portfolio-evidence-management/rating-sheet/rating-sheet.component.ts","./src/app/shared/components/search/search.component.html","./src/app/shared/components/search/search.component.ts","./src/app/core/services/sidemenu.service.ts","./src/app/shared/components/side-menu/side-menu.component.html","./src/app/shared/components/side-menu/side-menu.component.ts","./src/app/shared/components/spinner/spinner.component.html","./src/app/shared/components/spinner/spinner.component.ts","./src/app/shared/components/title/title.component.ts","./src/app/shared/components/title/title.component.html","./src/app/shared/components/toast/toast.component.ts","./src/app/shared/components/toast/toast.component.html","./src/app/shared/components/video/video.component.ts","./src/app/shared/components/video/video.component.html","./src/app/shared/module-helper.ts","./src/app/shared/shared.module.ts","./src/app/views/user/dashboard/latest-news/news-description/news-description.component.html","./src/app/views/user/dashboard/latest-news/news-description/news-description.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-input-rating-modal/portfolio-input-rating-modal.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-input-rating-modal/portfolio-input-rating-modal.component.ts","./src/environments/environment.prod.ts","./src/app/app-routing.module.ts","./src/app/views/public/home/home.component.ts","./src/app/views/public/home/home.component.html","./src/app/app.component.ts","./src/app/app.component.html","./src/app/core/interceptors/path-interceptor.service.ts","./src/app/core/interceptors/auth-interceptor.service.ts","./src/app/views/user/user-profile/user-profile.component.html","./src/app/views/user/user-profile/user-profile.component.ts","./src/app/views/user/dashboard/user-session/user-session.component.ts","./src/app/views/user/dashboard/user-session/user-session.component.html","./src/app/core/enums/student-request-reason.ts","./src/app/core/services/rating.service.ts","./src/app/core/services/student-request.service.ts","./src/app/core/services/portfolio-message.service.ts","./src/app/views/user/dashboard/dashboard/dashboard.component.html","./src/app/views/user/dashboard/dashboard/dashboard.component.ts","./src/app/views/user/drdp-layout/drdp-layout.component.ts","./src/app/views/user/drdp-layout/drdp-layout.component.html","./src/app/views/user/manage-enrollment/my-classes/re-enroll-classroom/re-enroll-classroom.component.html","./src/app/views/user/manage-enrollment/my-classes/re-enroll-classroom/re-enroll-classroom.component.ts","./src/app/core/services/my-classes.service.ts","./src/app/core/services/student-class-enrollment.service.ts","./src/app/views/user/manage-enrollment/my-classes/my-classes.component.html","./src/app/views/user/manage-enrollment/my-classes/my-classes.component.ts","./src/app/views/user/manage-enrollment/drop-child/drop-child.component.html","./src/app/views/user/manage-enrollment/drop-child/drop-child.component.ts","./src/app/views/user/manage-enrollment/transfer-child/transfer-child.component.html","./src/app/views/user/manage-enrollment/transfer-child/transfer-child.component.ts","./src/app/views/user/manage-enrollment/my-classes/students/sped-exit-date/sped-exit-date.component.ts","./src/app/views/user/manage-enrollment/my-classes/students/sped-exit-date/sped-exit-date.component.html","./src/app/views/user/manage-enrollment/my-classes/students/confirmation-sped-exit-date/confirmation-sped-exit-date.component.html","./src/app/views/user/manage-enrollment/my-classes/students/confirmation-sped-exit-date/confirmation-sped-exit-date.component.ts","./src/app/views/user/manage-enrollment/my-classes/students/batch-sped-exit-date/batch-sped-exit-date.component.html","./src/app/views/user/manage-enrollment/my-classes/students/batch-sped-exit-date/batch-sped-exit-date.component.ts","./src/app/core/enums/iep-plan.ts","./src/app/views/user/manage-enrollment/my-classes/students/students.component.html","./src/app/views/user/manage-enrollment/my-classes/students/students.component.ts","./src/app/core/guards/auth.guard.ts","./src/app/views/user/dashboard/latest-news/latest-news.component.html","./src/app/views/user/dashboard/latest-news/latest-news.component.ts","./src/app/views/user/user-profile/edit-user-profile/edit-user-profile.component.html","./src/app/views/user/user-profile/edit-user-profile/edit-user-profile.component.ts","./src/app/views/user/user-profile/update-password/update-password.component.html","./src/app/views/user/user-profile/update-password/update-password.component.ts","./src/app/views/user/add-new-child/assign-child/assign-child.component.html","./src/app/views/user/add-new-child/assign-child/assign-child.component.ts","./src/app/core/enums/enrollment-programs.ts","./src/app/core/enums/demographic-sections.ts","./src/app/core/pipes/option.pipe.ts","./src/app/core/pipes/group-demographic-section.pipe.ts","./src/app/views/user/add-new-child/add-new-child.component.html","./src/app/views/user/add-new-child/add-new-child.component.ts","./src/app/views/user/manage-enrollment/add-view-edit-child/add-view-edit-child.component.html","./src/app/views/user/manage-enrollment/add-view-edit-child/add-view-edit-child.component.ts","./src/app/views/user/manage-enrollment/view-child/view-class-enrollments/edit-class-enrollment/edit-class-enrollment-date.component.html","./src/app/views/user/manage-enrollment/view-child/view-class-enrollments/edit-class-enrollment/edit-class-enrollment-date.component.ts","./src/app/views/user/manage-enrollment/view-child/view-class-enrollments/view-class-enrollments.component.ts","./src/app/views/user/manage-enrollment/view-child/view-class-enrollments/view-class-enrollments.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/add-child-shared-provider/add-child-shared-provider.component.ts","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/add-child-shared-provider/add-child-shared-provider.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/delete-child-shared-provider/delete-child-shared-provider.component.ts","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/delete-child-shared-provider/delete-child-shared-provider.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/view-child-shared-providers.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-shared-providers/view-child-shared-providers.component.ts","./src/app/views/user/manage-enrollment/view-child/view-child-assessments/view-child-assessments.component.ts","./src/app/views/user/manage-enrollment/view-child/view-child-assessments/view-child-assessments.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-tabs/view-child-tabs.component.html","./src/app/views/user/manage-enrollment/view-child/view-child-tabs/view-child-tabs.component.ts","./src/app/views/user/manage-enrollment/view-child/view-child.component.html","./src/app/views/user/manage-enrollment/view-child/view-child.component.ts","./src/app/core/enums/pending-requests.ts","./src/app/views/user/dashboard/pending-requests/pending-transfers/pending-transfers.component.ts","./src/app/views/user/dashboard/pending-requests/pending-transfers/pending-transfers.component.html","./src/app/views/user/dashboard/pending-requests/pending-withdraws/pending-withdraws.component.ts","./src/app/views/user/dashboard/pending-requests/pending-withdraws/pending-withdraws.component.html","./src/app/core/validators/custom.validator.ts","./src/app/views/user/search-dropped-children/enroll-dropped-children/enroll-dropped-children.component.html","./src/app/views/user/search-dropped-children/enroll-dropped-children/enroll-dropped-children.component.ts","./src/app/views/user/search-dropped-children/search-dropped-children.component.html","./src/app/views/user/search-dropped-children/search-dropped-children.component.ts","./src/app/core/guards/permission.guard.ts","./src/app/core/enums/event-action.ts","./src/app/views/user/dashboard/pending-requests/re-enrollment-requests/re-enrollment-requests.component.ts","./src/app/views/user/dashboard/pending-requests/re-enrollment-requests/re-enrollment-requests.component.html","./src/app/views/user/configuration/news/news.component.html","./src/app/views/user/configuration/news/news.component.ts","./src/app/views/user/input-rating/components/select-rating-modal/select-rating-modal.component.html","./src/app/views/user/input-rating/components/select-rating-modal/select-rating-modal.component.ts","./src/app/views/user/input-rating/components/assessment-date-modal/assessment-date-modal.component.ts","./src/app/views/user/input-rating/components/assessment-date-modal/assessment-date-modal.component.html","./src/app/core/enums/input-rating-action.ts","./src/app/views/user/input-rating/components/teacher-survey-modal/teacher-survey-modal.component.html","./src/app/views/user/input-rating/components/teacher-survey-modal/teacher-survey-modal.component.ts","./src/app/core/enums/measure-reason.ts","./src/app/views/user/input-rating/components/scantron/scantron.component.html","./src/app/views/user/input-rating/components/scantron/scantron.component.ts","./src/app/views/user/input-rating/components/student-info/student-info.component.html","./src/app/views/user/input-rating/components/student-info/student-info.component.ts","./src/app/views/user/input-rating/components/rating-card/rating-card.component.html","./src/app/views/user/input-rating/components/rating-card/rating-card.component.ts","./src/app/views/user/input-rating/input-rating.component.html","./src/app/views/user/input-rating/input-rating.component.ts","./src/app/views/user/input-rating/search-rating/search-rating.component.html","./src/app/views/user/input-rating/search-rating/search-rating.component.ts","./src/app/views/user/dashboard/portfolio/portfolio.component.ts","./src/app/views/user/dashboard/portfolio/portfolio.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/modals/future-evidence-student/future-evidence-student.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/modals/future-evidence-student/future-evidence-student.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/request-evidence/request-evidence.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/request-evidence/request-evidence.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-class.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-class.component.ts","./src/app/views/user/add-new-child/add-search-child/request-release-student/request-release-student.component.html","./src/app/views/user/add-new-child/add-search-child/request-release-student/request-release-student.component.ts","./src/app/views/user/add-new-child/dual-enroll-child/dual-enroll-child.component.html","./src/app/views/user/add-new-child/dual-enroll-child/dual-enroll-child.component.ts","./src/app/core/enums/additional-filters.ts","./src/app/views/user/add-new-child/add-search-child/add-search-child.component.html","./src/app/views/user/add-new-child/add-search-child/add-search-child.component.ts","./src/app/views/user/dashboard/pending-requests/pending-releases/decline-release-student/decline-release-student.component.html","./src/app/views/user/dashboard/pending-requests/pending-releases/decline-release-student/decline-release-student.component.ts","./src/app/views/user/dashboard/pending-requests/pending-releases/pending-releases.component.html","./src/app/views/user/dashboard/pending-requests/pending-releases/pending-releases.component.ts","./src/app/core/services/blob-storage.service.ts","./src/app/core/pipes/filter.pipe.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-add-evidence/portfolio-add-evidence.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-add-evidence/portfolio-add-evidence.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-message-box/portfolio-message-box.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-message-box/portfolio-message-box.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-review-evidence/portfolio-review-evidence.component.html","./src/app/views/user/dashboard/portfolio/portfolio-class/portfolio-review-evidence/portfolio-review-evidence.component.ts","./src/app/views/user/manage-enrollment/my-classes/students/students-bulk-un-enrollment/students-bulk-un-enrollment.component.ts","./src/app/views/user/manage-enrollment/my-classes/students/students-bulk-un-enrollment/students-bulk-un-enrollment.component.html","./src/app/views/user/pilot-test-children/pilot-test-children.component.ts","./src/app/views/user/pilot-test-children/pilot-test-children.component.html","./src/app/views/user/children/children.component.ts","./src/app/views/user/children/children.component.html","./src/app/core/guards/can-deactivate.guard.ts","./src/app/views/user/manage-enrollment/batch-re-enroll-child/batch-re-enroll-child.component.html","./src/app/views/user/manage-enrollment/batch-re-enroll-child/batch-re-enroll-child.component.ts","./src/app/views/user/manage-enrollment/search-manage-child/search-manage-child.component.html","./src/app/views/user/manage-enrollment/search-manage-child/search-manage-child.component.ts","./src/app/views/user/dashboard/pending-requests/pending-child-re-enrollment/pending-child-re-enrollment.component.ts","./src/app/views/user/dashboard/pending-requests/pending-child-re-enrollment/pending-child-re-enrollment.component.html","./src/app/views/user/dashboard/portfolio/portfolio-messages/portfolio-messages.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-messages/portfolio-messages.component.html","./src/app/core/enums/message-status.ts","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-tile/message-tile.component.html","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-tile/message-tile.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-view/message-view.component.html","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-view/message-view.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-board-tile/message-board-tile.component.html","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-board-tile/message-board-tile.component.ts","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-board/message-board.component.html","./src/app/views/user/dashboard/portfolio/portfolio-messages/message-board/message-board.component.ts","./src/app/views/user/manage-enrollment/child-request/child-request.component.ts","./src/app/views/user/manage-enrollment/child-request/child-request.component.html","./src/app/views/user/dashboard/total-locked-children/total-locked-children.component.ts","./src/app/views/user/dashboard/total-locked-children/total-locked-children.component.html","./src/app/views/user/dashboard/pending-requests/pending-portfolio-evidences/invalid-request-modal/invalid-request-modal.component.html","./src/app/views/user/dashboard/pending-requests/pending-portfolio-evidences/invalid-request-modal/invalid-request-modal.component.ts","./src/app/views/user/dashboard/pending-requests/pending-portfolio-evidences/pending-portfolio-evidences.component.ts","./src/app/views/user/dashboard/pending-requests/pending-portfolio-evidences/pending-portfolio-evidences.component.html","./src/app/views/user/dashboard/portfolio/class-based-portfolio/student-evidence/student-evidence.component.ts","./src/app/views/user/dashboard/portfolio/class-based-portfolio/student-evidence/student-evidence.component.html","./src/app/views/user/dashboard/portfolio/class-based-portfolio/class-based-portfolio.component.html","./src/app/views/user/dashboard/portfolio/class-based-portfolio/class-based-portfolio.component.ts","./src/app/core/enums/state-dashboard.ts","./src/app/views/user/state-dashboard/state-dashboard.component.html","./src/app/views/user/state-dashboard/state-dashboard.component.ts","./src/app/views/user/state-dashboard/dashboard-search/dashboard-search.component.html","./src/app/views/user/state-dashboard/dashboard-search/dashboard-search.component.ts","./src/app/views/user/user-routing.module.ts","./src/app/views/user/state-dashboard/dashboard-search/search-programs/search-programs.component.ts","./src/app/views/user/state-dashboard/dashboard-search/search-programs/search-programs.component.html","./src/app/views/user/state-dashboard/dashboard-search/search-home-languages/search-home-languages.component.ts","./src/app/views/user/state-dashboard/dashboard-search/search-home-languages/search-home-languages.component.html","./src/app/views/user/state-dashboard/dashboard-search/search-special-education/search-special-education.component.ts","./src/app/views/user/state-dashboard/dashboard-search/search-special-education/search-special-education.component.html","./src/app/views/user/state-dashboard/dashboard-search/search-disabilities/search-disabilities.component.ts","./src/app/views/user/state-dashboard/dashboard-search/search-disabilities/search-disabilities.component.html","./src/app/core/services/report.service.ts","./src/app/views/user/reports/view-student-by-class-modal/view-student-by-class-modal.component.html","./src/app/views/user/reports/view-student-by-class-modal/view-student-by-class-modal.component.ts","./src/app/views/user/reports/report-search/report-search.component.html","./src/app/views/user/reports/report-search/report-search.component.ts","./src/app/core/pipes/safe-html.pipe.ts","./src/app/views/user/reports/parent-progress/parent-progress.component.html","./src/app/views/user/reports/parent-progress/parent-progress.component.ts","./src/app/views/user/reports/class-planning/class-planning.component.html","./src/app/views/user/reports/class-planning/class-planning.component.ts","./src/app/views/user/reports/group-detail/group-detail.component.html","./src/app/views/user/reports/group-detail/group-detail.component.ts","./src/app/views/user/reports/cohort-progress/cohort-progress.component.html","./src/app/views/user/reports/cohort-progress/cohort-progress.component.ts","./src/app/views/user/reports/child-progress/child-progress.component.html","./src/app/views/user/reports/child-progress/child-progress.component.ts","./src/app/views/user/reports/group/group.component.html","./src/app/views/user/reports/group/group.component.ts","./src/app/views/user/reports/view-children-modal/view-children-modal.component.ts","./src/app/views/user/reports/view-children-modal/view-children-modal.component.html","./src/app/views/user/reports/rating-completion/rating-completion.component.html","./src/app/views/user/reports/rating-completion/rating-completion.component.ts","./src/app/views/user/reports/report-tracking/report-usage/report-usage.component.ts","./src/app/views/user/reports/report-tracking/report-usage/report-usage.component.html","./src/app/views/user/reports/report-tracking/agency-rating-views/agency-rating-views.component.ts","./src/app/views/user/reports/report-tracking/agency-rating-views/agency-rating-views.component.html","./src/app/views/user/reports/report-tracking/child-ratings/child-ratings.component.ts","./src/app/views/user/reports/report-tracking/child-ratings/child-ratings.component.html","./src/app/views/user/reports/report-tracking/report-tracking.component.ts","./src/app/views/user/reports/report-tracking/report-tracking.component.html","./src/app/views/user/reports/district-osep/district-osep.component.html","./src/app/views/user/reports/district-osep/district-osep.component.ts","./src/app/views/user/reports/state-osep/state-osep.component.html","./src/app/views/user/reports/state-osep/state-osep.component.ts","./src/app/views/user/reports/teacher-survey/teacher-survey.component.ts","./src/app/views/user/reports/teacher-survey/teacher-survey.component.html","./src/app/views/user/reports/reports-routing.module.ts","./src/app/views/user/reports/state-group-detail/state-group-detail.component.ts","./src/app/views/user/reports/state-group-detail/state-group-detail.component.html","./src/app/views/user/reports/state-cohort/state-cohort.component.ts","./src/app/views/user/reports/state-cohort/state-cohort.component.html","./src/app/views/user/reports/osep-exception/osep-exception.component.ts","./src/app/views/user/reports/osep-exception/osep-exception.component.html","./src/app/views/user/reports/reports.module.ts","./src/app/views/user/user.module.ts","./src/app/core/enums/head-start.ts","./src/app/core/enums/state-preschool.ts","./src/app/views/user/configuration/agencies/add-edit-agency/add-edit-agency.component.html","./src/app/views/user/configuration/agencies/add-edit-agency/add-edit-agency.component.ts","./src/app/views/user/configuration/agencies/agencies.component.html","./src/app/views/user/configuration/agencies/agencies.component.ts","./src/app/views/user/configuration/classes/add-edit-classes/add-edit-classes.component.html","./src/app/views/user/configuration/classes/add-edit-classes/add-edit-classes.component.ts","./src/app/views/user/configuration/classes/classes.component.html","./src/app/views/user/configuration/classes/classes.component.ts","./src/app/views/user/configuration/states/states.component.ts","./src/app/views/user/configuration/states/states.component.html","./src/app/views/user/configuration/sites/add-edit-sites/add-edit-sites.component.html","./src/app/views/user/configuration/sites/add-edit-sites/add-edit-sites.component.ts","./src/app/views/user/configuration/sites/sites.component.html","./src/app/views/user/configuration/sites/sites.component.ts","./src/app/views/user/configuration/rating-periods/add-edit-rating-period/add-edit-rating-period.component.html","./src/app/views/user/configuration/rating-periods/add-edit-rating-period/add-edit-rating-period.component.ts","./src/app/views/user/configuration/rating-periods/rating-periods.component.html","./src/app/views/user/configuration/rating-periods/rating-periods.component.ts","./src/app/views/user/configuration/schoolyears/add-schoolyear/add-schoolyear.component.html","./src/app/views/user/configuration/schoolyears/add-schoolyear/add-schoolyear.component.ts","./src/app/views/user/configuration/schoolyears/schoolyears.component.ts","./src/app/views/user/configuration/schoolyears/schoolyears.component.html","./src/app/core/enums/school-year.ts","./src/app/views/user/configuration/global-rating-periods/add-global-rating-period/add-global-rating-period.component.html","./src/app/views/user/configuration/global-rating-periods/add-global-rating-period/add-global-rating-period.component.ts","./src/app/views/user/configuration/global-rating-periods/past-global-rating-periods/past-global-rating-periods.component.html","./src/app/views/user/configuration/global-rating-periods/past-global-rating-periods/past-global-rating-periods.component.ts","./src/app/views/user/configuration/global-rating-periods/global-rating-periods.component.ts","./src/app/views/user/configuration/global-rating-periods/global-rating-periods.component.html","./src/app/views/user/configuration/locking-status/add-edit-locking-status/add-edit-locking-status.component.html","./src/app/views/user/configuration/locking-status/add-edit-locking-status/add-edit-locking-status.component.ts","./src/app/core/services/lock-setting.service.ts","./src/app/views/user/configuration/locking-status/locking-status.component.ts","./src/app/views/user/configuration/locking-status/locking-status.component.html","./src/app/views/user/configuration/classroom/add-class-modal/add-class-modal.component.html","./src/app/views/user/configuration/classroom/add-class-modal/add-class-modal.component.ts","./src/app/views/user/configuration/classroom/classroom.component.html","./src/app/views/user/configuration/classroom/classroom.component.ts","./src/app/views/user/configuration/state-configuration/custom-configuration/custom-configuration.component.html","./src/app/views/user/configuration/state-configuration/custom-configuration/custom-configuration.component.ts","./src/app/views/user/configuration/state-configuration/school-year-target/school-year-target.component.html","./src/app/views/user/configuration/state-configuration/school-year-target/school-year-target.component.ts","./src/app/views/user/configuration/state-configuration/student-demographics/student-demographics.component.ts","./src/app/views/user/configuration/state-configuration/student-demographics/student-demographics.component.html","./src/app/core/enums/upload-types.ts","./src/app/core/services/downloadTemplate.service.ts","./src/app/views/user/configuration/state-configuration/child-upload/child-upload.component.ts","./src/app/views/user/configuration/state-configuration/child-upload/child-upload.component.html","./src/app/views/user/configuration/state-configuration/state-dashboard/state-dashboard.component.html","./src/app/views/user/configuration/state-configuration/state-dashboard/state-dashboard.component.ts","./src/app/views/user/configuration/state-configuration/state-configuration.component.ts","./src/app/views/user/configuration/state-configuration/state-configuration.component.html","./src/app/core/services/age-grade-template.service.ts","./src/app/core/services/age-grade-template-enrollment.service.ts.ts","./src/app/views/user/configuration/rating-view-setup/rating-view-setup.component.html","./src/app/views/user/configuration/rating-view-setup/rating-view-setup.component.ts","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-form/reassign-modal/reassign-modal.component.ts","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-form/reassign-modal/reassign-modal.component.html","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-form/custom-rating-view-form.component.html","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-form/custom-rating-view-form.component.ts","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-assignment/custom-rating-view-assignment.component.html","./src/app/views/user/configuration/rating-view-setup/custom-rating-view/custom-rating-view-assignment/custom-rating-view-assignment.component.ts","./src/app/views/user/configuration/rating-view-setup/base-template/base-template.component.html","./src/app/views/user/configuration/rating-view-setup/base-template/base-template.component.ts","./src/app/views/user/configuration/integrations/integrations.component.html","./src/app/views/user/configuration/integrations/integrations.component.ts","./src/app/core/services/vendor.service.ts","./src/app/views/user/configuration/integrations/add-edit-integration/add-edit-integration.component.html","./src/app/views/user/configuration/integrations/add-edit-integration/add-edit-integration.component.ts","./src/app/views/user/configuration/configuration-routing.module.ts","./src/app/views/user/configuration/configuration.module.ts","./src/app/views/user/accounts/user-roles/add-edit-roles/add-edit-roles.component.html","./src/app/views/user/accounts/user-roles/add-edit-roles/add-edit-roles.component.ts","./src/app/views/user/accounts/user-roles/user-roles.component.html","./src/app/views/user/accounts/user-roles/user-roles.component.ts","./src/app/views/user/accounts/features/features-add-edit/features-add-edit.component.html","./src/app/views/user/accounts/features/features-add-edit/features-add-edit.component.ts","./src/app/views/user/accounts/features/super-features-add/super-features-add.component.html","./src/app/views/user/accounts/features/super-features-add/super-features-add.component.ts","./src/app/views/user/accounts/features/super-features-edit/super-features-edit.component.ts","./src/app/views/user/accounts/features/super-features-edit/super-features-edit.component.html","./src/app/views/user/accounts/features/features-tabs-add-edit/features-tabs.component.html","./src/app/views/user/accounts/features/features-tabs-add-edit/features-tabs.component.ts","./src/app/views/user/accounts/features/features.component.ts","./src/app/views/user/accounts/features/features.component.html","./src/app/views/user/accounts/permissions/permissions-filter/permissions-filter.component.html","./src/app/views/user/accounts/permissions/permissions-filter/permissions-filter.component.ts","./src/app/views/user/accounts/permissions/permissions-management/permissions-management.component.html","./src/app/views/user/accounts/permissions/permissions-management/permissions-management.component.ts","./src/app/views/user/accounts/permissions/permissions.component.html","./src/app/views/user/accounts/permissions/permissions.component.ts","./src/app/core/services/login-audit.service.ts","./src/app/views/user/accounts/login-audits/login-audits.component.html","./src/app/views/user/accounts/login-audits/login-audits.component.ts","./src/app/views/user/accounts/user-account/view-user/view-user.component.html","./src/app/views/user/accounts/user-account/view-user/view-user.component.ts","./src/app/core/enums/statusTypes.ts","./src/app/views/user/accounts/user-account/add-edit-user-accounts/add-edit-user-accounts.component.html","./src/app/views/user/accounts/user-account/add-edit-user-accounts/add-edit-user-accounts.component.ts","./src/app/views/user/accounts/user-account/user-account.component.html","./src/app/views/user/accounts/user-account/user-account.component.ts","./src/app/views/user/accounts/global-admin/edit-user/edit-user.component.html","./src/app/views/user/accounts/global-admin/edit-user/edit-user.component.ts","./src/app/views/user/accounts/global-admin/reset-password/reset-password.component.html","./src/app/views/user/accounts/global-admin/reset-password/reset-password.component.ts","./src/app/views/user/accounts/accounts-routing.module.ts","./src/app/views/user/accounts/global-admin/global-admin.component.ts","./src/app/views/user/accounts/global-admin/global-admin.component.html","./src/app/views/user/accounts/accounts.module.ts","./src/app/views/resource/permission-and-roles/permission-and-roles.component.html","./src/app/views/resource/resource-routing.module.ts","./src/app/views/resource/permission-and-roles/permission-and-roles.component.ts","./src/app/views/resource/upload-templates/upload-templates.component.ts","./src/app/views/resource/upload-templates/upload-templates.component.html","./src/app/views/resource/companion-documents/companion-documents.component.ts","./src/app/views/resource/companion-documents/companion-documents.component.html","./src/app/views/resource/resource.module.ts","./src/app/core/services/upload.service.ts","./src/app/views/user/upload/upload-center/upload-center-all-instrument-child/upload-center-all-instrument-child.component.html","./src/app/views/user/upload/upload-center/upload-center-all-instrument-child/upload-center-all-instrument-child.component.ts","./src/app/views/user/upload/upload-center/upload-center-class/upload-center-class.component.html","./src/app/views/user/upload/upload-center/upload-center-user/upload-center-user.component.html","./src/app/views/user/upload/upload-routing.module.ts","./src/app/views/user/upload/upload-center/upload-center.component.ts","./src/app/views/user/upload/upload-center/upload-center.component.html","./src/app/views/user/upload/upload-center/upload-center-class/upload-center-class.component.ts","./src/app/views/user/upload/upload-center/upload-center-user/upload-center-user.component.ts","./src/app/views/user/upload/upload.module.ts","./src/app/core/services/download-request.service.ts","./src/app/views/user/downloads/download-search/download-search.component.html","./src/app/views/user/downloads/download-search/download-search.component.ts","./src/app/views/user/downloads/download-demographics/download-demographics.component.ts","./src/app/views/user/downloads/download-demographics/download-demographics.component.html","./src/app/views/user/downloads/download-demographics-ratings/download-demographics-ratings.component.ts","./src/app/views/user/downloads/download-demographics-ratings/download-demographics-ratings.component.html","./src/app/views/user/downloads/download-demographics-scores/download-demographics-scores.component.ts","./src/app/views/user/downloads/download-demographics-scores/download-demographics-scores.component.html","./src/app/views/user/downloads/download-demographics-all/download-demographics-all.component.ts","./src/app/views/user/downloads/download-demographics-all/download-demographics-all.component.html","./src/app/views/user/downloads/download-demographics-all-sp-hs/download-demographics-all-sp-hs.component.ts","./src/app/views/user/downloads/download-demographics-all-sp-hs/download-demographics-all-sp-hs.component.html","./src/app/views/user/downloads/downloads-routing.module.ts","./src/app/views/user/downloads/download-demographics-ratings2025/download-demographics-ratings2025.component.ts","./src/app/views/user/downloads/download-demographics-ratings2025/download-demographics-ratings2025.component.html","./src/app/views/user/downloads/downloads.module.ts","./src/app/app.module.ts","./src/main.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { CheckPermissionDirective } from './directives/check-permission.directive';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CheckPermissionDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MatSnackBarModule\r\n  ],\r\n  exports: [\r\n    CheckPermissionDirective\r\n  ],\r\n  providers: []\r\n})\r\nexport class CoreModule { }\r\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { tap } from 'rxjs';\r\n\r\n@Directive({\r\n  selector: '[drdpCheckPermission]'\r\n})\r\nexport class CheckPermissionDirective implements OnInit {\r\n  @Input('drdpCheckPermission') CheckPermission?: number;\r\n\r\n  constructor(private permissionService: PermissionService,\r\n              private templateRef: TemplateRef<any>,\r\n              private viewContainer: ViewContainerRef) {}\r\n\r\n  ngOnInit() {\r\n    let hasPermission = false;\r\n\r\n    if(this.CheckPermission){\r\n      hasPermission = this.permissionService.checkPermission(this.CheckPermission);\r\n\r\n      if(hasPermission) {\r\n        this.viewContainer.createEmbeddedView(this.templateRef);\r\n      } else {\r\n        this.viewContainer.clear();\r\n      }\r\n    } else {\r\n      this.viewContainer.createEmbeddedView(this.templateRef);\r\n    }\r\n\r\n  }\r\n}\r\n","export enum AgeGradeInstrument {\r\n  infantToddler = 1,\r\n  preschool = 2,\r\n  kindergarten = 4,\r\n  schoolAge = 5,\r\n  tnKindergarten = 6,\r\n  nhInfantToddler = 7,\r\n  transitionalKinder = 10,\r\n  pilotInfantToddler = 11,\r\n  pilotPreschool = 12,\r\n  pilotPreschool3 = 13,\r\n}\r\n\r\nexport enum AgeGradeInstrumentCode {\r\n  infantToddler = 'IT',\r\n  preschool = 'PS',\r\n  kindergarten = 'K',\r\n  schoolAge = 'SA',\r\n  transitionalKinder = 'TK',\r\n  pilotPreschool = 'PTK',\r\n  pilotPreschool3 = 'PTK-3',\r\n}\r\n","export enum ChartType {\r\n  Doughnut = 'doughnut',\r\n  Bar = 'bar',\r\n}\r\n","export enum DataType {\r\n    number = 'Number',\r\n    text = 'Text'\r\n}\r\n\r\nexport enum FieldType {\r\n    text = 2,\r\n    number = 3,\r\n    date = 4,\r\n    dropdownSingle = 5,\r\n    dropdownMultiple = 6\r\n}\r\n\r\nexport enum RegionType {\r\n    Region = 'Region',\r\n    SAU = 'SAU'\r\n}","export enum MeasureCondition {\r\n  Conditional = 1,\r\n  Emerging = 2,\r\n  NotYet = 3,\r\n  Unratable = 4,\r\n}\r\n\r\nexport enum MeasureConditionName {\r\n  Conditional = 'Conditional',\r\n  Emerging = 'Emerging',\r\n  NotYet = 'Not Yet',\r\n  Unratable = 'Unratable',\r\n}\r\n","export enum Modal {\r\n    Confirm = 'Confirm',\r\n    Delete = 'Delete',\r\n    OK = 'OK',\r\n    Close = 'Close',\r\n    Copy = 'Copy to Clipboard',\r\n    Archive = 'Archive Message',\r\n    Next = 'Next',\r\n}\r\n\r\nexport enum ModalType {\r\n    Agency = 'agency',\r\n}","export enum Permission {\r\n  AdministrativeReport = 187,\r\n  CheckFeature = 118,\r\n  ChildProgressReport = 164,\r\n  ChildReport = 156,\r\n  ClassPlanningReport = 166,\r\n  CohortProgressReport = 163,\r\n  CreateAccounts = 2,\r\n  CreateAgencies = 105,\r\n  CreateClassrooms = 101,\r\n  CreateContactInformations = 20,\r\n  CreateEnrollment = 124,\r\n  CreateFeatures = 26,\r\n  CreateNewsItem = 190,\r\n  DeleteNewsItem = 191,\r\n  CreateOrganizations = 73,\r\n  CreatePermissions = 39,\r\n  CreatePersons = 79,\r\n  CreateRating = 144,\r\n  CreateRatingPeriods = 128,\r\n  CreateRoles = 45,\r\n  CreateSites = 110,\r\n  CreateStates = 108,\r\n  CreateStudent = 116,\r\n  CreateStudentNotes = 114,\r\n  CreateTeachers = 130,\r\n  CreateTerms = 111,\r\n  CreateTitles = 55,\r\n  CreateUserRoles = 8,\r\n  DeleteClassrooms = 153,\r\n  DeleteContactInformations = 19,\r\n  DeleteEnrollments = 152,\r\n  DeleteFeatures = 27,\r\n  DeleteOrganizations = 35,\r\n  DeletePermissions = 38,\r\n  DeletePersons = 42,\r\n  DeleteRatings = 148,\r\n  DeleteRatingView = 318,\r\n  DeleteRoles = 46,\r\n  DeleteSites = 161,\r\n  DeleteTitles = 57,\r\n  DeleteUserRoles = 9,\r\n  DownloadDemographics = 167,\r\n  DownloadDemographicsInclRatings = 175,\r\n  DownloadDemographicsInclRatingsandScores = 177,\r\n  DownloadDemographicsInclScores = 176,\r\n  EditAccountAdministrativeRoles = 142,\r\n  EditAccountContactInformation = 11,\r\n  EditAccountPowerUserRoles = 150,\r\n  EditAccounts = 3,\r\n  EditAccountStatus = 13,\r\n  EditAccountUserRoles = 12,\r\n  EditAgencies = 98,\r\n  EditClassrooms = 99,\r\n  EditContactInformations = 18,\r\n  EditDashboard = 21,\r\n  EditEmailDomains = 34,\r\n  EditEnrollment = 131,\r\n  EditFeatures = 24,\r\n  EditLeadAdminRoles = 160,\r\n  EditOrganizations = 75,\r\n  EditPermissions = 37,\r\n  EditPersons = 78,\r\n  EditRatingPeriods = 126,\r\n  EditRoles = 47,\r\n  EditSites = 97,\r\n  EditStates = 106,\r\n  EditStudents = 132,\r\n  EditTeachers = 96,\r\n  EditTerms = 112,\r\n  EditTitles = 56,\r\n  EditUserName = 151,\r\n  GroupDetailsReport = 174,\r\n  GroupReport = 162,\r\n  GroupReportTNOnly = 157,\r\n  LockRatings = 146,\r\n  ManageStateReports = 179,\r\n  ParentProgressReport = 165,\r\n  RatingCompletion = 158,\r\n  RemoveAllSessions = 31,\r\n  RemoveUserSessions = 29,\r\n  ReportbyTeacher = 159,\r\n  ResetAllUserPasswords = 30,\r\n  ResetUserPassword = 28,\r\n  SearchAccounts = 5,\r\n  SearchAgencies = 137,\r\n  SearchOrganizations = 36,\r\n  SearchPersons = 43,\r\n  SearchSites = 139,\r\n  SearchStudent = 117,\r\n  SearchTeachers = 141,\r\n  SearchUnassignedStudent = 120,\r\n  ShowCompanionDocumentsForDownloadDemographics = 183,\r\n  StateCohortReport = 180,\r\n  StateGroupDetailReport = 184,\r\n  UnlockRatings = 147,\r\n  UploadFile = 134,\r\n  VendorAPIChildLogReport = 188,\r\n  ViewAccountRequests = 15,\r\n  ViewAccountStatusTypes = 10,\r\n  ViewAgencies = 104,\r\n  ViewAllRegions = 14,\r\n  ViewChildTemplates = 168,\r\n  ViewClassrooms = 100,\r\n  ViewClassTemplates = 171,\r\n  ViewContactInformations = 17,\r\n  ViewDRDPResources = 173,\r\n  ViewEnrollment = 125,\r\n  ViewFeatures = 25,\r\n  ViewGlobalAdmin = 32,\r\n  ViewInputRating = 135,\r\n  ViewLockStatus = 178,\r\n  ViewLoginAudits = 6,\r\n  ViewMyClasses = 121,\r\n  ViewNewsItem = 193,\r\n  ViewOrganizations = 74,\r\n  ViewPermissionandRoles = 172,\r\n  ViewPermissions = 40,\r\n  ViewPersons = 77,\r\n  ViewRatingPeriodMenu = 149,\r\n  ViewRatingPeriods = 127,\r\n  ViewRatings = 145,\r\n  ViewReports = 155,\r\n  ViewRoles = 44,\r\n  ViewShoppingCart = 122,\r\n  ViewSites = 109,\r\n  ViewStateReports = 181,\r\n  ViewStates = 107,\r\n  ViewStudent = 119,\r\n  ViewSystem = 84,\r\n  ViewSystemAccounts = 51,\r\n  ViewSystemEntities = 93,\r\n  ViewSystemPersons = 50,\r\n  ViewSystemSurveys = 90,\r\n  ViewSystemWorkflows = 49,\r\n  ViewTeachers = 103,\r\n  ViewTerms = 113,\r\n  ViewTitles = 54,\r\n  ViewUserRoles = 197,\r\n  ViewUserTemplates = 170,\r\n  CreateRatingViews = 198,\r\n  EditRatingViews = 199,\r\n  ViewRatingViews = 200,\r\n  ViewTotalLockedChildren = 203,\r\n  ViewMyRatings = 204,\r\n  ViewObservations = 205,\r\n  ViewPendingTransfers = 206,\r\n  ViewPendingExits = 207,\r\n  ViewPendingReEnrollments = 208,\r\n  ViewLanguageSettings = 209,\r\n  EditLanguageSettings = 210,\r\n  ViewDashboardClassrooms = 211,\r\n  UnlockRatingViews = 258,\r\n  AccessAllAgencies = 262,\r\n  AccessAssignedStateAgencies = 263,\r\n  CreateRatingSpanish = 264,\r\n  AccessAllSites = 266,\r\n  ViewGlobalRatingPeriod = 267,\r\n  AdminEnrollmentByPass = 274,\r\n  HidePendingIndicator = 278,\r\n  CreateBaseTemplates = 283,\r\n  ViewPendingReleaseRequests = 284,\r\n  IntegrationManagement = 277,\r\n  PilotProgramChildrenPage = 290,\r\n  AccessToChildrenPAge = 287,\r\n  SpecialEdChildrenPage = 288,\r\n  HeadStartChildrenPage = 289,\r\n  ViewSharedChild = 269,\r\n  EditObservations = 292,\r\n  DeactivateSites = 294,\r\n  ViewLegacyReports = 295,\r\n  DeactivateRatingPeriod = 297,\r\n  TransferEnrollment = 301,\r\n  EditSameLevelAccounts = 305,\r\n  CreateAllAgencyNewsItem = 306,\r\n  ViewCurrentEnrollment = 307,\r\n  ViewSensitiveStudentTransferInfo = 309,\r\n  EditTOREnrollment = 308,\r\n  EditSameLevelNotPromoteSameLevel = 310,\r\n  AccessToPortfolioMessages = 311,\r\n  AccessToAllPortfolioMessageBoards = 312,\r\n  AccessToReportTracking = 313,\r\n  AccessChildRequestsPage = 314,\r\n  AccessToAssignedChildrenReporting = 319,\r\n  ClassroomSearch = 320,\r\n  ClassReenroll = 321,\r\n  WithdrawEnrollment = 322,\r\n  ManageDualEnrollment = 285,\r\n  PowerUserViewDualEnrollments = 324,\r\n  ViewDualEnrollments = 325,\r\n  DistrictOSEPReport = 327,\r\n  StateOSEPReport = 328,\r\n  SpecialEdExitDateBatch = 329,\r\n  SharedChildAccessDemographicsReport = 335,\r\n  Create2025Classroom = 330,\r\n  Access2025StudentOptions = 331,\r\n  PilotIncludeRatings = 334,\r\n  All2025Pilot = 333,\r\n  PendingPortfolioRequests = 336,\r\n  OSEPException = 337,\r\n  AccessStateDashboard = 338,\r\n  OverrideLockedRatings = 339\r\n}\r\n","export enum PortfolioEvidenceType {\r\n    Photo = 1,\r\n    Video = 2,\r\n    Audio = 3,\r\n    Note = 4,\r\n    StructuredPrompt = 5\r\n}\r\n\r\nexport enum PortfolioMeasureType {\r\n    Domain = 1,\r\n    Measure = 2,\r\n}\r\n\r\nexport enum PortfolioPreRating {\r\n    Domain = 1,\r\n    Measure = 2,\r\n}\r\n\r\nexport enum InputRatingSelectedLevel {\r\n    Unshaded = 1,\r\n    FullShadedOrHalfShaded = 2,\r\n    FullShaded = 3\r\n}\r\n\r\nexport enum AddEvidenceFormStep {\r\n    StepOne = 1,\r\n    StepTwo = 2\r\n}\r\n\r\nexport enum PortfolioEvidenceTypeString {\r\n    Photo = 'photo',\r\n    Video = 'video',\r\n    Audio = 'audio',\r\n    Note = 'note'\r\n}","export enum Role {\r\n    SystemAdministrator = 1,\r\n    StateAdministrator = 2,\r\n    AgencyAdministrator = 3,\r\n    SiteAdministrator= 4,\r\n    Teacher = 5,\r\n    TeacherOfRecord = 7,\r\n    Coach = 8,\r\n    DataEntry_Analyst = 9,\r\n    AffiliateAgency = 10,\r\n    Researcher = 12,\r\n    CustomerService = 13,\r\n    LeadAgencyAdministrator = 14,\r\n    StateReportAdministrator = 15,\r\n    NewHampshireOrganizationsAdminReadOnly = 17,\r\n    TeacherOfRecordEnrollment = 176,\r\n    WestEdPilot = 175\r\n}\r\n\r\nexport enum RoleGroup {\r\n    UserRoles = 1,\r\n    EnrollmentUser = 2,\r\n    AdministratorRoles = 3,\r\n    LeadAdminRoles = 4,\r\n    PowerUserRoles = 5,\r\n    SystemPowerUser = 6,\r\n    StateUsers = 7\r\n}\r\n\r\nexport enum RoleGroupAccessLevel {\r\n  UserRoles = 1,\r\n  EnrollmentUser = 2,\r\n  AdministratorRoles = 3,\r\n  StateUsers = 4,\r\n  LeadAdminRoles = 5,\r\n  PowerUserRoles = 6,\r\n  SystemPowerUser = 7\r\n}\r\n","export enum SelectType {\r\n  States = 'stateName',\r\n  Agencies = 'agencyName',\r\n  Grantee = 'granteeName',\r\n  Sites = 'siteName',\r\n  RatingPeriods = 'ratingPeriodName',\r\n  GlobalRatingPeriods = 'globalRatingPeriodName',\r\n  AgeInstrument = 'ageGradeInstrumentName',\r\n  Class = 'classroomName',\r\n  Roles = 'roleName',\r\n  NewsItemTypes = 'newsItemTypeName',\r\n  Boolean = 'boolean',\r\n  Ethnicities = 'ethnicityName',\r\n  SchoolYear = 'schoolYearName',\r\n  Teacher = 'fullName',\r\n  TeacherOfRecord = 'teacherOfRecord',\r\n  County = 'countyName',\r\n  Default = 'name',\r\n  Suffix = 'suffixName',\r\n  Status = 'statusTypeName',\r\n  SiteType = 'siteTypeName',\r\n  CodeType = 'siteCodeTypeName',\r\n  Vendor = 'name',\r\n  Region = 'name',\r\n  HeadStart = 'name',\r\n  VendorRef = 'vendorName',\r\n  RegionRef = 'regionName',\r\n  HeadStartRef = 'headStartName',\r\n  HeadStartGranteeRef = 'headStartGranteeName',\r\n  Selpa = 'selpaName',\r\n  UserRoleNames = 'userRoleNames',\r\n  YesNo = 'name',\r\n  IepPlan = 'iepPlanName',\r\n  Gender = 'genderName',\r\n  EnrollmentProgram = 'enrollmentProgramName',\r\n  Language = 'languageName',\r\n  PortfolioUser = 'userName',\r\n  StudentRequest = 'name',\r\n  RequestStatusType = 'statusTypeName',\r\n  ReportType = 'reportTypeName',\r\n  ReportAction = 'reportActionName',\r\n  StatePreschool = 'statePreschool',\r\n  StatePreschoolContractorRef = 'statePreschoolContractorName',\r\n  ActiveEnrollmentClass = 'classInfo',\r\n  Adaptation = 'adaptationName',\r\n  Outcome = 'outcome',\r\n  InitialAssessment = 'initialAssessmentToolType',\r\n  Outcome1 = 'outcome1',\r\n  Outcome2 = 'outcome2',\r\n  Outcome3 = 'outcome3',\r\n  PrimaryDisability = 'primaryDisabilityName',\r\n}\r\n","export enum States {\r\n  california = 5,\r\n  newHampshire = 30\r\n}\r\n","export enum StudentDemographic {\r\n    SSID = 'Statewide Student Identifier',\r\n    DataType = 'DataType',\r\n    DataTypeAgency = 'DataTypeAgency',\r\n    AgencySID = 'Agency/District Student Identifier',\r\n    PrimaryDisability = 'Primary Disability',\r\n    SpecialEdEntryDate = 'Special Education Entry Date',\r\n    RegionLabel = 'Region Label',\r\n    DistrictLiability = 'District of Liability',\r\n    AnticipatedDateExit = 'Anticipated Date of Exit from Preschool Education to Kindergarten',\r\n    DateExit = 'Date of Exit from Preschool Special Education to Kindergarten',\r\n    customFieldTypeSSID = 'customFieldTypeSSID',\r\n    customFieldTypeAgency = 'customFieldTypeAgency',\r\n    maxLength = 'maxLength',\r\n    Selpa = 'Selpa',\r\n    initialAssessmentToolId = 'initialAssessmentToolId',\r\n    outcome1Id = 'outcome1Id',\r\n    outcome2Id = 'outcome2Id',\r\n    outcome3Id = 'outcome3Id',\r\n}\r\n\r\nexport enum StudentDemographicEthnicity {\r\n    Intentionally_left_blank = 19,\r\n}","export enum TableColumnType {\r\n  view = 'view',\r\n  icon = 'icon',\r\n  actionIcon = 'actionIcon',\r\n  infoIcon = 'infoIcon',\r\n  text = 'text',\r\n  date = 'date',\r\n  fullDate = 'fullDate',\r\n  bulletList = 'bulletList',\r\n  checkBox = 'checkBox',\r\n  select = 'select',\r\n  datepicker = 'datepicker',\r\n  add = 'add',\r\n  edit = 'edit',\r\n  toggleSwitch = 'toggleSwitch',\r\n  delete = 'delete',\r\n  textToSelect = 'textToSelect',\r\n  textToInput = 'textToInput',\r\n  textInput = 'textInput',\r\n  textToDrdpSelect = 'textToDrdpSelect',\r\n  action = 'action',\r\n  boolIcon = 'boolIcon',\r\n}\r\n\r\nexport enum FeatureTable {\r\n  Feature = 1,\r\n  FeatureHierarchy = 2,\r\n}\r\n\r\nexport enum ViewChildTabs {\r\n  Demographics = 1,\r\n  ClassEnrollment = 2,\r\n  CompletedAssessments = 3,\r\n  ShareChild = 4,\r\n  Evidence = 5\r\n}\r\n\r\nexport enum ComponentTypeTable {\r\n  Add = 1,\r\n  Edit = 2,\r\n  View = 3,\r\n}\r\n\r\nexport enum TableInputAction {\r\n  toggleEdit = 'toggleEdit',\r\n  dateSelect = 'dateSelect',\r\n  optionSelect = 'optionSelect',\r\n  inputChange = 'inputChange',\r\n  drdpDropdown = 'drdpDropdown',\r\n}\r\n\r\nexport enum SearchStudentAction {\r\n  AddChild = 1,\r\n  RequestRelease = 2,\r\n  ViewStudent = 3\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'localDate',\r\n})\r\nexport class LocalDatePipe implements PipeTransform {\r\n  transform(utcDate: string | Date | undefined | null): string {\r\n    if (!utcDate) return '';\r\n\r\n    if (typeof utcDate === 'string' && !utcDate.endsWith('Z')) {\r\n      utcDate += 'Z';\r\n    }\r\n\r\n    const date = new Date(utcDate);\r\n    \r\n    const options: Intl.DateTimeFormatOptions = {\r\n      year: 'numeric',\r\n      month: 'short',\r\n      day: 'numeric',\r\n      hour: 'numeric',\r\n      minute: '2-digit',\r\n      second: '2-digit',\r\n      hour12: true\r\n    };\r\n\r\n    return date.toLocaleString(undefined, options);\r\n  }\r\n}","import { NgModule } from '@angular/core';\r\nimport { ContainsIdPipe } from './containsId.pipe';\r\nimport { OptionPipe } from './option.pipe';\r\nimport { GroupDemographicSectionPipe } from './group-demographic-section.pipe';\r\nimport { LocalDatePipe } from './local-date.pipe';\r\nimport { SafeHtmlPipe } from './safe-html.pipe';\r\nimport { FilterPipe } from './filter.pipe';\r\n\r\n@NgModule({\r\n  imports: [],\r\n  declarations: [\r\n    ContainsIdPipe,\r\n    OptionPipe,\r\n    GroupDemographicSectionPipe,\r\n    LocalDatePipe,\r\n    SafeHtmlPipe,\r\n    FilterPipe,\r\n  ],\r\n  exports: [\r\n    ContainsIdPipe,\r\n    OptionPipe,\r\n    GroupDemographicSectionPipe,\r\n    LocalDatePipe,\r\n    SafeHtmlPipe,\r\n    FilterPipe\r\n  ],\r\n})\r\nexport class PipesModule {\r\n  static forRoot() {\r\n    return {\r\n      ngModule: PipesModule,\r\n      providers: [],\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AgencyService {\r\n  constructor(private dataService: DataService) { }\r\n\r\n  getAgency(id?: number): Observable<IAgency> {\r\n    return this.dataService.get(`agency/${id}`);\r\n  }\r\n\r\n  getAgenciesByPage(payload?: any, message?: string): Observable<any> {\r\n    const url = getSearchUrl('agency/search?', payload);\r\n    return this.dataService.get(url, message);\r\n  }\r\n\r\n  getCurrentAgenciesByUser(): Observable<IAgency[]> {\r\n    const user = JSON.parse(localStorage.getItem('drdp-user') ?? '{}');\r\n    return this.dataService.get(`agency/user/${user.userId}`);\r\n  }\r\n\r\n  getCurrentAgenciesByUserId(userId: number): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/user/${userId}`);\r\n  }\r\n\r\n  getLinkedAgencies(userId: number): Observable<any> {\r\n    return this.dataService.get(`agency/linked-agencies/${userId}`);\r\n  }\r\n\r\n  addNewAgency(payload: IAgency, message?: string): Observable<boolean> {\r\n    return this.dataService.post('agency', payload, message);\r\n  }\r\n\r\n  updateAgency(payload: IAgency, message?: string): Observable<boolean> {\r\n    return this.dataService.put('agency', payload, message);\r\n  }\r\n\r\n  getAllAgencies(): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/all`);\r\n  }\r\n\r\n  getAgenciesByState(stateIds: number[], isPilot: boolean = false): Observable<IAgency[]> {\r\n    let url = 'agency/state';\r\n    if (isPilot != undefined) url += `?isPilot=${isPilot}`;\r\n    return this.dataService.post(url, stateIds);\r\n  }\r\n\r\n  getAgenciesByUser(userId: number, message?: string): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/user/${userId}`);\r\n  }\r\n\r\n  getGranteeAgencies(): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/grantee/all`);\r\n  }\r\n\r\n  getGranteeAgenciesByState(stateId: number): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/${stateId}/grantees`);\r\n  }\r\n\r\n  unlockAgency(id: number): Observable<boolean> {\r\n    return this.dataService.put(\r\n      `agency/unlock/${id}`,\r\n      null,\r\n      'Agency Rating View Unlocked.'\r\n    );\r\n  }\r\n\r\n  getContractorAgenciesByState(stateId: number): Observable<IAgency[]> {\r\n    return this.dataService.get(`agency/${stateId}/contractors`);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { Role } from '@core/enums/roles';\r\nimport { ILoginRequest } from '@core/interfaces/ilogin-request';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { ILoginSession } from '@core/interfaces/ilogin-session';\r\nimport { IRoleAssignment } from '@core/interfaces/iroles';\r\nimport { environment } from '@env/environment';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { ChatboxService } from './chatbox.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n  private readonly authToken = environment.authToken;\r\n  private readonly userInfo = 'drdp-user';\r\n  private jwtHelper = new JwtHelperService();\r\n\r\n  constructor(private dataService: DataService, private router: Router, private chatbox: ChatboxService) {}\r\n\r\n  login(user: ILoginRequest, message?: string): Observable<any> {\r\n    return this.dataService.post('auth/login', user, message).pipe();\r\n  }\r\n\r\n  logout(): Observable<any> {\r\n    const currentUser = this.getCurrentUser();\r\n    return this.dataService\r\n      .post(\r\n        `auth/logout?userId=${currentUser.userId}&loginAuditId=${currentUser.loginAuditId}`,\r\n        {},\r\n        'Logout Successful'\r\n      )\r\n      .pipe(\r\n        tap((res: boolean) => {\r\n          this.chatbox.hideChatboxWidget();\r\n          localStorage.clear();\r\n          this.router.navigateByUrl('login');\r\n        })\r\n      );\r\n  }\r\n\r\n  checkLogin(): boolean {\r\n    let result = false;\r\n    const token = localStorage.getItem(this.authToken);\r\n    if (token) {\r\n      result = !this.jwtHelper.isTokenExpired(token);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  forgotPassword(email: string, message?: string): Observable<any> {\r\n    return this.dataService.post(\r\n      `Auth/Forgot-Password`,\r\n      { email: email},\r\n      message\r\n    );\r\n  }\r\n\r\n  changePassword(payload: any, message?: string): Observable<any> {\r\n    return this.dataService.put(\r\n      `Auth/Password?password=${payload.newPassword}&guid=${payload.guid}`,\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  updatePassword(payload: any, message?: string): Observable<any> {\r\n    return this.dataService\r\n      .post('auth/update-password', payload, message);\r\n  }\r\n\r\n  adminResetPassword(userId: number, message?: string): Observable<boolean> {\r\n    return this.dataService.put(\r\n      `auth/admin-reset-password/user/${userId}`,\r\n      message\r\n    );\r\n  }\r\n\r\n  getActiveSession(message?: string): Observable<ILoginSession> {\r\n    const user = JSON.parse(localStorage.getItem(this.userInfo) ?? '{}');\r\n    return this.dataService.get(\r\n      `auth/session/loginAudit/${user.loginAuditId}`,\r\n      message\r\n    );\r\n  }\r\n\r\n  deleteOtherSession(payload: any): Observable<boolean> {\r\n    return this.dataService.delete(\r\n      `auth/session?userId=${payload.userId}&loginAuditId=${payload.loginAuditId}`\r\n    );\r\n  }\r\n\r\n  captureUserInfo(loginRes: ILoginResponse): void {\r\n    localStorage.setItem(this.authToken, JSON.stringify(loginRes.token));\r\n    localStorage.setItem(this.userInfo, JSON.stringify(loginRes));\r\n  }\r\n\r\n  getCurrentUser(): ILoginResponse {\r\n    return JSON.parse(localStorage.getItem(this.userInfo) ?? '{}');\r\n  }\r\n\r\n  getUserStateId(): number {\r\n    const { stateId } = this.getCurrentUser();\r\n    return stateId;\r\n  }\r\n\r\n  getUserStateCode(): string {\r\n    const { stateCode } = this.getCurrentUser();\r\n    return stateCode;\r\n  }\r\n\r\n  getUserPermissions(): number[] {\r\n    const user: ILoginResponse = JSON.parse(\r\n      localStorage.getItem(this.userInfo) ?? '{}'\r\n    );\r\n\r\n    return user.permissions ?? [];\r\n  }\r\n\r\n  isSuperUser(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) =>\r\n        x.roleId === Role.SystemAdministrator ||\r\n        x.roleId === Role.CustomerService\r\n    );\r\n  }\r\n\r\n  isSuperAdmin(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.SystemAdministrator\r\n    );\r\n  }\r\n\r\n  isCustomerService(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.CustomerService\r\n    );\r\n  }\r\n\r\n  isAdmin(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) =>\r\n        x.roleId === Role.AgencyAdministrator ||\r\n        x.roleId === Role.LeadAgencyAdministrator ||\r\n        x.roleId === Role.SiteAdministrator\r\n    );\r\n  }\r\n\r\n  isLeadAgencyAdmin(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.LeadAgencyAdministrator\r\n    );\r\n  }\r\n\r\n  isAgencyAdmin(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.AgencyAdministrator\r\n    );\r\n  }\r\n\r\n  isSiteAdmin(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.SiteAdministrator\r\n    );\r\n  }\r\n\r\n  isTeacher(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) =>\r\n        x.roleId == Role.Teacher || x.roleId == Role.TeacherOfRecord\r\n    );\r\n  }\r\n\r\n  isWestEdPilot(): boolean {\r\n    let userInfo = this.getCurrentUser();\r\n    return userInfo.roleAssignments.some(\r\n      (x: IRoleAssignment) => x.roleId === Role.WestEdPilot\r\n    );\r\n  }\r\n\r\n  isValidIdentifier(guid: string) {\r\n    return this.dataService.get(`auth/is-valid-identifier/${guid}`);\r\n  }\r\n\r\n  getAccessLevel() {\r\n    var accessLevel = 0;\r\n\r\n    if (this.getCurrentUser()) accessLevel = this.getCurrentUser().accessLevel;\r\n\r\n    return accessLevel;\r\n  }\r\n\r\n  recaptchaVerify(token: string): Observable<any> {\r\n    return this.dataService.post('auth/recaptcha', { token: token});\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from '@env/environment';\r\n\r\ndeclare global {\r\n  interface Window {\r\n    zE: any;\r\n    zESettings?: any;\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ChatboxService {\r\n  private zendeskSnippetId = 'ze-snippet';\r\n  private zendeskWidgetId = 'launcher';\r\n  private zendeskSnippetSrc = `https://static.zdassets.com/ekr/snippet.js?key=${environment.chatboxKey}`;\r\n  private isZendeskLoaded = false;\r\n\r\n  injectChatBox() {\r\n    const zendeskIframe = document.getElementById(this.zendeskWidgetId);\r\n    const zendeskScript = document.getElementById(this.zendeskSnippetId);\r\n  \r\n    if (zendeskIframe || zendeskScript) {\r\n      this.showChatboxWidget();\r\n    } else {\r\n      const script = document.createElement('script');\r\n      script.id = this.zendeskSnippetId;\r\n      script.src = this.zendeskSnippetSrc;\r\n      script.async = true;\r\n      script.onload = () => {\r\n        this.isZendeskLoaded = true;\r\n      };\r\n      document.body.appendChild(script);\r\n  \r\n      window.zE = window.zE || [];\r\n      this.executeChatboxCommand('webWidget', 'open');\r\n    }\r\n  }\r\n\r\n  openChat() {\r\n    this.injectChatBox();\r\n  }\r\n\r\n  private executeChatboxCommand(...args: any[]) {\r\n    if (window.zE) {\r\n      window.zE.push(args);\r\n    } else {\r\n      console.error('Zendesk widget is not available');\r\n    }\r\n  }\r\n\r\n  showChatboxWidget() {\r\n    this.showChatboxIframe();\r\n    this.showChatboxkAdditionalElements();\r\n  }\r\n  \r\n  private showChatboxIframe() {\r\n    const zendeskIframe = document.getElementById(this.zendeskWidgetId);\r\n    if (zendeskIframe) {\r\n      zendeskIframe.style.display = 'block';\r\n    }\r\n  }\r\n  \r\n  private showChatboxkAdditionalElements() {\r\n    const elements: HTMLElement[] = Array.from(document.querySelectorAll('div[style*=\"z-index: 999999\"][style*=\"position: fixed\"][style*=\"right: 16px\"]'));\r\n    elements.forEach((el: HTMLElement) => el.style.display = 'block');\r\n  \r\n    const zendeskElements = document.querySelectorAll('[id^=\"ze-snippet\"], [id^=\"zendesk\"], [id^=\"zd-\"]');\r\n    zendeskElements.forEach((el: Element) => (el as HTMLElement).style.display = 'block'); \r\n  }\r\n  \r\n\r\n  hideChatboxWidget() {\r\n    this.hideChatboxIframe();\r\n    this.hideChatboxAdditionalElements();\r\n  }\r\n  \r\n  private hideChatboxIframe() {\r\n    const zendeskIframe = document.getElementById(this.zendeskWidgetId);\r\n    if (zendeskIframe) {\r\n      zendeskIframe.style.display = 'none';\r\n    }\r\n  }\r\n  \r\n  private hideChatboxAdditionalElements() {\r\n    const elements: HTMLElement[] = Array.from(document.querySelectorAll('div[style*=\"z-index: 999999\"][style*=\"position: fixed\"][style*=\"right: 16px\"]'));\r\n    elements.forEach((el: HTMLElement) => el.style.display = 'none');\r\n  \r\n    const zendeskElements = document.querySelectorAll('[id^=\"ze-snippet\"], [id^=\"zendesk\"], [id^=\"zd-\"]');\r\n    zendeskElements.forEach((el: Element) => (el as HTMLElement).style.display = 'none');\r\n  }\r\n  \r\n}","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n  IAllStudentsByPermissionRequest,\r\n  IClass,\r\n  IClassSearchRequest,\r\n  IClassroomAssignment,\r\n  IUpdateClass,\r\n  IViewClassStudentsRequest,\r\n} from '@core/interfaces/iclasses';\r\nimport { getSearchUrl } from './helper.service';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClassService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  getClassesByAgency(agencyId: number, message?: string): Observable<any> {\r\n    return this.dataService.get(`class/agency/${agencyId}`);\r\n  }\r\n\r\n  search(params: IClassSearchRequest, message?: string): Observable<any> {\r\n    const url = getSearchUrl('class/search?', params);\r\n    return this.dataService.get(url, message);\r\n  }\r\n\r\n  saveAll(payload: IUpdateClass, message?: string) {\r\n    return this.dataService.post(`class/saveAll`, payload, message);\r\n  }\r\n\r\n  deleteAll(classId: number, message?: string) {\r\n    return this.dataService.delete(\r\n      `class/deleteAll?classroomId=${classId}`,\r\n      message\r\n    );\r\n  }\r\n\r\n  getClassesBySitesAndRatingPeriod(\r\n    payload: IClassSearchRequest,\r\n    message?: string\r\n  ): Observable<IClassroomAssignment[]> {\r\n    return this.dataService.post('class/search/sites-rating-period', payload, message);\r\n  }\r\n\r\n  getClassesBySitesAndGlobalRatingPeriods(\r\n    payload: IClassSearchRequest,\r\n    message?: string\r\n  ): Observable<IClassroomAssignment[]> {\r\n    return this.dataService.post('class/search/sites-global-rating-period', payload, message);\r\n  }\r\n\r\n  getRatingPeriodsByClassroomId(\r\n    classroomId: number\r\n  ): Observable<IRatingPeriod[]> {\r\n    return this.dataService.get(`class/rating-period/classroom/${classroomId}`);\r\n  }\r\n\r\n  getClassStudents(params: IViewClassStudentsRequest): Observable<any> {\r\n    const url = getSearchUrl('class/students?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getActiveClassStudentsByPermissions(\r\n    params: IViewClassStudentsRequest\r\n  ): Observable<any> {\r\n    const url = getSearchUrl('class/active-students/permissions?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getStudentsByClass(classId: number): Observable<any> {\r\n    return this.dataService.get(`class/details/${classId}`);\r\n  }\r\n\r\n  getClassesByClassroom(classroomId: number): Observable<IClass[]> {\r\n    return this.dataService.get(`class/classroomId/${classroomId}`);\r\n  }\r\n\r\n  getAllClassStudentsByPermissions(payload: IAllStudentsByPermissionRequest): Observable<any> {\r\n    return this.dataService.post('class/all-students/permissions', payload);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  IClassroom,\r\n  IClassroomAssignment,\r\n  IClassroomSearchRequest,\r\n  IClassSearchRequest,\r\n} from '@core/interfaces/iclasses';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClassroomService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  getClassroomById(classroomId?: number, message?: string): Observable<any> {\r\n    return this.dataService.get(`classroom/${classroomId}`, message);\r\n  }\r\n\r\n  checkClassroomHasEnolledStudents(classroomId: number): Observable<boolean> {\r\n    return this.dataService.get(`classroom/check-classroom-has-enrolled-students/${classroomId}`);\r\n  }\r\n\r\n  getClassroomsByAgency(\r\n    agencyId: number,\r\n    message?: string\r\n  ): Observable<IClassroom[]> {\r\n    return this.dataService.get(`classroom/agency/${agencyId}`, message);\r\n  }\r\n\r\n  getClassroomsBySite(siteId: number, message?: string): Observable<any> {\r\n    return this.dataService.get(`classroom/site/${siteId}`);\r\n  }\r\n\r\n  search(params: IClassroomSearchRequest, message?: string): Observable<any> {\r\n    return this.dataService.post('classroom/search', params, message);\r\n  }\r\n\r\n  getClassroomByUserAccess(params: IClassroomSearchRequest, message?: string): Observable<any> {\r\n    return this.dataService.post('classroom/user-access', params, message);\r\n  }\r\n\r\n  deleteClassroom(id: number, message?: string | any) {\r\n    return this.dataService.delete(`classroom?id=${id}`, message);\r\n  }\r\n\r\n  saveClassroom(payload: IClassroom, message?: string) {\r\n    return this.dataService.post(`classroom`, payload, message);\r\n  }\r\n\r\n  getClassroomsBySites(payload: IClassSearchRequest, message?: string): Observable<IClassroomAssignment[]> {\r\n    return this.dataService.post(`classroom/search/sites`, payload, message);\r\n  }\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, finalize, Observable, of, tap } from 'rxjs';\r\nimport { SpinnerService } from './spinner.service';\r\nimport { ToastService } from './toast.service';\r\n\r\nconst httpOptions = {\r\n  headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\r\n};\r\nconst downloadOptions = {\r\n  headers: new HttpHeaders({ 'Accept': 'text/plain', 'Content-Type': 'text/csv' }),\r\n  responseType: 'text' as 'text',\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DataService {\r\n\r\n  constructor(private http: HttpClient, private toast: ToastService, private spinner:SpinnerService) { }\r\n\r\n  get(path: string, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.get(path, httpOptions)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    )\r\n  }\r\n\r\n  getWithOptions(path: string, options: any, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.get(path, options)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    )\r\n  }\r\n\r\n  downloadFile(path: string, message?: string) {\r\n      this.spinner.show()\r\n      return this.http.get(path, downloadOptions)\r\n        .pipe(\r\n          tap(() => this.handleSuccess(message)),\r\n          catchError((err: any) => this.handleError(err)),\r\n          finalize(()=>   this.spinner.hide())\r\n      )\r\n  }\r\n\r\n  post(path: string, payload: any, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.post(path, payload)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    );\r\n  }\r\n\r\n  postWithOptions(path: string, payload: any, options: any, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.post(path, payload, options)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    );\r\n  }\r\n\r\n  delete(path: string, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.delete(path, httpOptions)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    );\r\n  }\r\n\r\n  patch(path: string, payload: any, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.patch(path, payload)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    );\r\n  }\r\n\r\n  put(path: string, payload: unknown, message?: string): Observable<any> {\r\n    this.spinner.show()\r\n    return this.http.put(path, payload)\r\n      .pipe(\r\n        tap(() => this.handleSuccess(message)),\r\n        catchError((err: any) => this.handleError(err)),\r\n        finalize(()=>   this.spinner.hide())\r\n    );\r\n  }\r\n\r\n  private handleSuccess(message?: string) {\r\n    if (message) {\r\n      this.toast.success(message)\r\n    }\r\n  }\r\n\r\n  private handleError(err: HttpErrorResponse) {\r\n    let message = 'Error, something went Wrong.';\r\n    if (err.error) {\r\n      message = (err.error && typeof err.error === 'string') ? err.error : err.error.ErrorMessage ? err.error.ErrorMessage : err.message;\r\n    }\r\n    this.toast.error(message)\r\n    return of(false);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { environment } from \"src/environments/environment\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class EncryptionService {\r\n    private encryptionKey: string = environment.encryptionKey; // Replace with your encryption key\r\n\r\n    encryptPassword(password: string): string {\r\n        const key = CryptoJS.enc.Utf8.parse(this.encryptionKey);\r\n        const iv = CryptoJS.lib.WordArray.random(16);\r\n        \r\n        const encrypted = CryptoJS.AES.encrypt(password, key, {\r\n            iv: iv,\r\n            padding: CryptoJS.pad.Pkcs7,\r\n            mode: CryptoJS.mode.CBC // Set the mode explicitly\r\n        });\r\n\r\n        const encryptedPassword = iv.concat(encrypted.ciphertext);\r\n        const encryptedPasswordBase64 = CryptoJS.enc.Base64.stringify(encryptedPassword);\r\n        return encryptedPasswordBase64;\r\n    }\r\n}","import { TableColumnType } from '@core/enums/table';\r\nimport { formatDate } from '@angular/common';\r\n\r\nexport function formatDatesToString(date: any, dateFormat?: string): string {\r\n  if (!date) return '';\r\n  return formatDate(date, dateFormat ? dateFormat : 'MM/dd/yyyy', 'en');\r\n}\r\n\r\nexport function formatToDate(date: any): string | null {\r\n  if (!date) return null;\r\n  return new Date(date).toLocaleDateString('sv');\r\n}\r\n\r\nexport function formatStringsToNumberArr(value: string): Number[] {\r\n  if (value === '') return [];\r\n  return value?.split(', ').map(Number);\r\n}\r\n\r\nexport function formatStringToStringArr(value: string | string[]): string[] {\r\n  if (Array.isArray(value) && value.every((item) => typeof item === 'string')) {\r\n    return value;\r\n  } else if (typeof value === 'string') {\r\n    return value.split(', ');\r\n  } else {\r\n    return [];\r\n  }\r\n}\r\n\r\nexport function setIconDisplayObject(tableColumns: any[], data: any): Object {\r\n  var displayIcons: Record<string, any> = {};\r\n  tableColumns.forEach((tableColumn: any) => {\r\n    var key = tableColumn.columnDef;\r\n    if (tableColumn.type == TableColumnType.icon || tableColumn.type == TableColumnType.infoIcon) {\r\n      displayIcons[key] = data[key] == true || data[key] == null;\r\n    }\r\n  });\r\n\r\n  return displayIcons;\r\n}\r\n\r\nexport function getSearchUrl(baseUrl: string, params: any): string {\r\n  // Build search params only if value exists\r\n  return baseUrl.concat(\r\n    Object.entries(params)\r\n      .map(([key, val]) => {\r\n        if (val) {\r\n          return `${key}=${val}`;\r\n        }\r\n        return;\r\n      })\r\n      .filter(Boolean)\r\n      .join('&')\r\n  );\r\n}\r\n\r\nexport function mapClassResToDRDPSelect(\r\n  res: any,\r\n  getClassroomId: boolean = false,\r\n  showPilot: boolean = false\r\n): any {\r\n  if (!res) return null;\r\n  return res.map((data: any) => ({\r\n    id: getClassroomId ? data.id : data.classId,\r\n    classroomName: data.classroomName ?? data.name,\r\n    siteId: data.siteId,\r\n    ...(showPilot && { isPilot: data.isPilot ?? null })\r\n  }));\r\n}\r\n\r\nexport function transformStringToNumArray(str: string): number[] {\r\n  if (str && str.length > 1) return str.split(',').map(Number);\r\n  else if (str && str.length == 1) return [+str];\r\n  else return [];\r\n}\r\n\r\nexport function isNumber(charCode: number): boolean {\r\n  if (charCode > 31 && (charCode < 48 || charCode > 57)) {\r\n    return false;\r\n  }\r\n  return true;\r\n}\r\n\r\nexport function isDateBetween(startDate: Date, endDate: Date, checkDate: Date) {\r\n  return checkDate >= startDate && checkDate <= endDate;\r\n}\r\n\r\nexport function trimHTTPS(url: string | any) {\r\n  if (url.startsWith('http://')) {\r\n    return url.slice(7);\r\n  } else if (url.startsWith('https://')) {\r\n    return url.slice(8);\r\n  }\r\n  return url;\r\n}\r\n\r\nexport function addHTTPS(url: string | any) {\r\n  if (!url.startsWith('http://') && !url.startsWith('https://')) {\r\n    return 'https://' + url;\r\n  }\r\n  return url;\r\n}\r\n\r\nexport function replaceWhitespace(value: string) {\r\n  return (value.replace(/[\\s\\t\\n\\r]+/g, ' ')).trim();\r\n}\r\n\r\nexport function cleanFileName(fileName: string): string {\r\n  // Regular expression to match ISO 8601 date format at the end of the string\r\n  const dateRegex = /-\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/;\r\n  \r\n  // Remove the date if it exists\r\n  return fileName.replace(dateRegex, '');\r\n}","import { Injectable } from '@angular/core';\r\nimport { IAdaptationType } from '@core/interfaces/iadaptation-type';\r\nimport {\r\n  IAgeGradeEnrollmentProgramFilter,\r\n  IAgeGradeInstrument,\r\n} from '@core/interfaces/iage-grade-instrument';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { IDemographicInformation } from '@core/interfaces/idemographic-information';\r\nimport { IDisability } from '@core/interfaces/idisability';\r\nimport { IDistrictOfLiability } from '@core/interfaces/idistrict-of-liability';\r\nimport { IEnrollmentProgramType } from '@core/interfaces/ienrollment-program-type';\r\nimport { IEthnicity } from '@core/interfaces/iethnicity';\r\nimport { IGender } from '@core/interfaces/igender';\r\nimport { IIepPlan } from '@core/interfaces/iiep-plan';\r\nimport { ILanguage } from '@core/interfaces/ilanguage';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IInitialAssessmentToolType, IOutcome, ISelectBoolean } from '@core/interfaces/iselectable';\r\nimport { ITuitionFee } from '@core/interfaces/ituition-fee';\r\nimport { IStatusType } from '@core/interfaces/iuser';\r\nimport { IVendor } from '@core/interfaces/ivendor';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IClassExitReason } from '@core/interfaces/iclasses';\r\nimport { IHeadStart, IStatePreschool } from '@core/interfaces/ihead-start';\r\nimport { IRegionGroup } from '@core/interfaces/iregion-group';\r\nimport { ISelpa } from '@core/interfaces/iselpa';\r\nimport { ICompanionDocument } from '@core/interfaces/icompanion-document';\r\nimport { RequestAction, StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { IReportAction, IReportType } from '@core/interfaces/ireport-type';\r\nimport { IRegionType } from '@core/interfaces/iregion-type';\r\nimport { IMasterDomain, IMasterMeasure } from '@core/interfaces/imaster-domain';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { IDualEnrollModalData } from '@core/interfaces/idual-enroll-modal-data';\r\nimport { IExtensiveSupport } from '@core/interfaces/iextensive-support';\r\nimport { IDifficultyLevels } from '@core/interfaces/idifficulty-levels';\r\nimport { IStateDashboardTile } from '@core/interfaces/istate-dashboard';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LookupService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  getCountyList(): Observable<ICounty[]> {\r\n    return this.dataService.get(`lookup/county`);\r\n  }\r\n\r\n  getCountyById(id: number): Observable<ICounty> {\r\n    return this.dataService.get(`lookup/county/${id}`);\r\n  }\r\n\r\n  getCountyByStateId(stateId: number): Observable<ICounty[]> {\r\n    return this.dataService.get(`lookup/county/state/${stateId}`);\r\n  }\r\n\r\n  getSiteTypes(): Observable<any> {\r\n    return this.dataService.get('lookup/site-type');\r\n  }\r\n\r\n  getSiteCodeTypes(): Observable<any> {\r\n    return this.dataService.get('lookup/site-code-type');\r\n  }\r\n\r\n  getVendors(): Observable<IVendor[]> {\r\n    return this.dataService.get('lookup/vendor');\r\n  }\r\n\r\n  getNewsItemTypes(): Observable<any[]> {\r\n    return this.dataService.get('lookup/news-item-types');\r\n  }\r\n\r\n  getAccountStatusTypes(): Observable<IStatusType[]> {\r\n    return this.dataService.get('lookup/account-status-types');\r\n  }\r\n\r\n  getAgeGradeInstruments(stateId: number): Observable<IAgeGradeInstrument[]> {\r\n    return this.dataService.get(`lookup/age-grade-instruments/${stateId}`);\r\n  }\r\n\r\n  getLanguages(): Observable<ILanguage[]> {\r\n    return this.dataService.get('lookup/languages');\r\n  }\r\n\r\n  getDistrictsOfLiability(): Observable<IDistrictOfLiability[]> {\r\n    return this.dataService.get('lookup/district-of-liability');\r\n  }\r\n\r\n  getAdaptationTypes(): Observable<IAdaptationType[]> {\r\n    return this.dataService.get('lookup/adaptation-types');\r\n  }\r\n\r\n  getEnrollmentProgramTypes(): Observable<IEnrollmentProgramType[]> {\r\n    return this.dataService.get('lookup/enrollment-program-types');\r\n  }\r\n\r\n  getEthnicities(stateId: number): Observable<IEthnicity[]> {\r\n    return this.dataService.get(`lookup/ethnicities/${stateId}`);\r\n  }\r\n\r\n  getDisabilities(): Observable<IDisability[]> {\r\n    return this.dataService.get('lookup/disabilities');\r\n  }\r\n\r\n  getGenders(stateId: number): Observable<IGender[]> {\r\n    return this.dataService.get(`lookup/genders/${stateId}`);\r\n  }\r\n\r\n  getTuitionFees(): Observable<ITuitionFee[]> {\r\n    return this.dataService.get('lookup/tuition-fees');\r\n  }\r\n\r\n  getAgeGradeEnrollmentFilters(): Observable<\r\n    IAgeGradeEnrollmentProgramFilter[]\r\n  > {\r\n    return this.dataService.get('lookup/age-grade-enrollment-filters');\r\n  }\r\n\r\n  getDemographicInformation(): Observable<IDemographicInformation[]> {\r\n    return this.dataService.get('lookup/demographic-information');\r\n  }\r\n\r\n  getBasicSelects(): Observable<ISelectBoolean[]> {\r\n    return this.dataService.get('lookup/yes-no-options');\r\n  }\r\n\r\n  getOutcomes(): Observable<IOutcome[]> {\r\n    return this.dataService.get('lookup/outcomes');\r\n  }\r\n\r\n  getInitialAssessmentToolTypeOptions(): Observable<IInitialAssessmentToolType[]> {\r\n    return this.dataService.get('lookup/initial-assessment-tool-types');\r\n  }\r\n\r\n  getIepPlans(): Observable<IIepPlan[]> {\r\n    return this.dataService.get('lookup/iep-plans');\r\n  }\r\n\r\n  getCurrentSchoolYear(): Observable<ISchoolYear> {\r\n    return this.dataService.get('lookup/current-schoolyear');\r\n  }\r\n\r\n  getFieldTypes(): Observable<any> {\r\n    return this.dataService.get('lookup/field-types');\r\n  }\r\n\r\n  getClassExitReasons(): Observable<IClassExitReason> {\r\n    return this.dataService.get('lookup/class-exit-reasons');\r\n  }\r\n\r\n  getClassReleaseReasons(): Observable<IClassExitReason> {\r\n    return this.dataService.get('lookup/class-release-reasons');\r\n  }\r\n\r\n  getClassDeclineReleaseReasons(): Observable<any> {\r\n    return this.dataService.get('lookup/class-decline-release-reasons');\r\n  }\r\n\r\n  getSuffix(): Observable<any> {\r\n    return this.dataService.get('lookup/suffix');\r\n  }\r\n\r\n  getAllSchoolYears(): Observable<any> {\r\n    return this.dataService.get(`schoolyear/all/desc`);\r\n  }\r\n\r\n  getSchoolYearFromStartingYear(year: string): Observable<ISchoolYear[]> {\r\n    return this.dataService.get(`schoolyear/starting-year/${year}`);\r\n  }\r\n\r\n  getHeadStart(): Observable<IHeadStart[]> {\r\n    return this.dataService.get(`lookup/head-start`);\r\n  }\r\n\r\n  getRegionGroups(): Observable<IRegionGroup[]> {\r\n    return this.dataService.get(`lookup/region-groups`);\r\n  }\r\n\r\n  getRegionTypes(\r\n    stateId: number,\r\n    pageIndex: number,\r\n    itemsPerpage: number\r\n  ): Observable<any> {\r\n    return this.dataService.get(\r\n      `lookup/region-types?StateId=${stateId}&PageIndex=${pageIndex}&ItemsPerPage=${itemsPerpage}`\r\n    );\r\n  }\r\n\r\n  getNHRegionTypes(): Observable<IRegionType[]> {\r\n    return this.dataService.get(`lookup/nh-region-types`);\r\n  }\r\n\r\n  getCarReasons(): Observable<any[]> {\r\n    return this.dataService.get(`lookup/car-reasons`);\r\n  }\r\n\r\n  getSelpas(): Observable<ISelpa[]> {\r\n    return this.dataService.get(`lookup/selpas`);\r\n  }\r\n\r\n  getCompanionDocument(id: number): Observable<ICompanionDocument> {\r\n    return this.dataService.get(`lookup/companion-document/${id}`);\r\n  }\r\n\r\n  getRequestReasons(): Observable<StudentRequestReason[]> {\r\n    return this.dataService.get(`lookup/request-reasons`);\r\n  }\r\n\r\n  getRequestStatusType(): Observable<RequestAction[]> {\r\n    return this.dataService.get(`lookup/request-status-types`);\r\n  }\r\n\r\n  getReportTypes(): Observable<IReportType[]> {\r\n    return this.dataService.get(`lookup/report-types`);\r\n  }\r\n\r\n  getReportActions(): Observable<IReportAction[]> {\r\n    return this.dataService.get(`lookup/report-actions`);\r\n  }\r\n\r\n  getStatePreschool(): Observable<IStatePreschool[]> {\r\n    return this.dataService.get(`lookup/state-preschool`);\r\n  }\r\n  getMasterDomains(): Observable<IMasterDomain[]> {\r\n    return this.dataService.get(`lookup/master-domains`);\r\n  }\r\n\r\n  getMasterMeasures(): Observable<IMasterMeasure[]> {\r\n    return this.dataService.get(`lookup/master-measures`);\r\n  }\r\n\r\n  getBaseMasterMeasures(): Observable<IBaseTemplateDomain[]> {\r\n    return this.dataService.get(`lookup/base-master-measures`);\r\n  }\r\n\r\n  getDualEnrollModalData(): Observable<IDualEnrollModalData> {\r\n    return this.dataService.get(`lookup/dual-enroll-modal-data`);\r\n  }\r\n\r\n  getPilotAgeGrade(): Observable<IAgeGradeInstrument[]> {\r\n    return this.dataService.get('lookup/pilot-age-grade');\r\n  }\r\n\r\n  getExtensiveSupports(): Observable<IExtensiveSupport[]> {\r\n    return this.dataService.get('lookup/extensive-support')\r\n  }\r\n\r\n  getDifficultyLevels(): Observable<IDifficultyLevels[]> {\r\n    return this.dataService.get('lookup/difficulty-levels');\r\n  }\r\n\r\n  getStateDashboardTiles(): Observable<IStateDashboardTile[]> {\r\n    return this.dataService.get('lookup/state-dashboard-tiles');\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { INewsItem, INewsItemRequest } from '@core/interfaces/inews-items';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NewsItemService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getAllItems(): Observable<any> {\r\n    return this.data.get('newsitem/all');\r\n  }\r\n\r\n  getRecentItems(itemCount: number): Observable<boolean> {\r\n    return this.data.get(`newsitem/recent/${itemCount}`);\r\n  }\r\n\r\n  getUserActiveNewsItem(itemCount: number): Observable<boolean> {\r\n    return this.data.get(`newsitem/user/active/${itemCount}`);\r\n  }\r\n\r\n  getNewsItemById(id: number): Observable<INewsItemRequest> {\r\n    return this.data.get(`newsitem/${id}`);\r\n  }\r\n\r\n  addNewsItem(payload: INewsItem): Observable<boolean> {\r\n    return this.data.post('newsitem', payload);\r\n  }\r\n\r\n  updateNewsItem(payload: INewsItem): Observable<boolean> {\r\n    return this.data.put('newsitem', payload);\r\n  }\r\n\r\n  deleteNewsItem(id: number, message?: string): Observable<boolean> {\r\n    return this.data.delete(`newsitem/${id}`, message);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IPermission, IPermissionGroupAssignmentRequest } from '@core/interfaces/ipermission';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthService } from './auth.service';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PermissionService {\r\n\r\n  constructor(private dataService: DataService, private authService: AuthService) { }\r\n\r\n  getPermission(): Observable<any> {\r\n    return this.dataService.get(`feature/permission/all`);\r\n  }\r\n\r\n  getUncategorizedPermission(): Observable<any> {\r\n    return this.dataService.get(`feature/permission/all-uncategorized`);\r\n  }\r\n\r\n  getCurrentPermission(groupId: number): Observable<any> {\r\n    return this.dataService.get(`feature/permission/get-current-features/${groupId}`);\r\n  }\r\n\r\n  getSuperPermissionGroups(): Observable<any> {\r\n    return this.dataService.get(`feature/permission/get-super-feature-group`);\r\n  }\r\n\r\n  getPermissionAssignments(): Observable<any> {\r\n    return this.dataService.get(`feature/role-permission-assignment/all`);\r\n  }\r\n\r\n  addPermission(permission: any, message?: string): Observable<any> {\r\n    return this.dataService.post(`feature/permission`, permission, message);\r\n  }\r\n\r\n  addPermissionGroup(group: any, message?: string): Observable<any> {\r\n    return this.dataService.post(`feature/permission-group`, group, message);\r\n  }\r\n\r\n  addPermissionGroupAssignment(assignment: IPermissionGroupAssignmentRequest, message?: string): Observable<any> {\r\n    return this.dataService.post(`feature/permission-group-assignment`, assignment, message);\r\n  }\r\n\r\n  updatePermission(permission: IPermission, message?: string): Observable<any> {\r\n    return this.dataService.put(`feature/permission`, permission, message);\r\n  }\r\n\r\n  updatePermissionGroupAssignment(assignment: any, message?: string): Observable<any> {\r\n    return this.dataService.put(`feature/permission-group-assignment`, assignment, message);\r\n  }\r\n\r\n  deletePermissionGroupAssignment(assignment: any, message?: string): Observable<any> {\r\n    return this.dataService.put(`feature/permission-group-assignment/delete`, assignment, message);\r\n  }\r\n\r\n  updatePermissionAssignment(assignment: any, message?: string): Observable<any> {\r\n    return this.dataService.put(`feature/role-permission-assignment`, assignment, message);\r\n  }\r\n\r\n  deletePermission(permissionId: number, message?: string): Observable<any> {\r\n    return this.dataService.delete(`feature/permission?id=${permissionId}`, message);\r\n  }\r\n\r\n  checkPermission(permissionId: number): boolean {\r\n    const userPermissions = new Set(this.authService.getUserPermissions());\r\n\r\n    return userPermissions.has(permissionId);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IPortfolioAddEvidenceParams, \r\n        IPortfolioAddModel, \r\n        IPortfolioClassesRequest, \r\n        IPortfolioClassResponse, \r\n        IPortfolioClassStudentsRequest, \r\n        IPortfolioEvidenceResponse, \r\n        IPortfolioAssignMeasureEvidence, \r\n        IPortfolioUpdateEvidence, \r\n        IPortfolioStudentInformation, \r\n        IAvailableEvidence, \r\n        IEvidenceRequest, \r\n        IBatchEvidenceRequest, \r\n        IPrevPortfolioEvidenceResponse, \r\n        IBatchEvidenceResult} from '@core/interfaces/iportfolio';\r\nimport { IStudent } from '@core/interfaces/istudent';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { IMeasureRatingLevel } from '@views/user/input-rating/interfaces/imeasure-rating-level';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IFutureEvidence } from '@core/interfaces/ifuture-evidence';\r\nimport { IFutureEvidenceResponse } from '@core/interfaces/ifuture-evidence-response';\r\nimport { IClassDomainEvidence } from '@core/interfaces/iclass-portfolio';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class PortfolioService {\r\n    controllerName: string = 'portfolio';\r\n    portfolioAddEvidenceParams: IPortfolioAddEvidenceParams | null = null;\r\n\r\n    constructor(private dataService: DataService) { }\r\n\r\n    setPortfolioAddEvidenceParams(addEvidenceParams: IPortfolioAddEvidenceParams) {\r\n        this.portfolioAddEvidenceParams = addEvidenceParams;\r\n    }\r\n\r\n    getPortfolioAddEvidenceParams(): IPortfolioAddEvidenceParams | null {\r\n        return this.portfolioAddEvidenceParams;\r\n    }\r\n\r\n    getPortfolioStudent(id: number): Observable<IStudent> {\r\n        return this.dataService.get(`${this.controllerName}/student/${id}`);\r\n    }\r\n\r\n    searchClasses(payload: IPortfolioClassesRequest): Observable<any> {\r\n        return this.dataService.post(`${this.controllerName}/classes`, payload);\r\n    }\r\n\r\n    getPortfolioClassStudents(payload: IPortfolioClassStudentsRequest): Observable<any> {\r\n        return this.dataService.post(`${this.controllerName}/class-students`, payload);\r\n    }\r\n\r\n    getPortfolioClass(id: number, ageGradeInstrumentId: number): Observable<IPortfolioClassResponse> {\r\n        return this.dataService.get(`${this.controllerName}/class/${id}/ageGradeInstrument/${ageGradeInstrumentId}`);\r\n    }\r\n\r\n    getBaseMeasures(ageGradeInstrumentId: number): Observable<IBaseTemplateDomain[]> {\r\n        return this.dataService.get(`${this.controllerName}/base-measures/${ageGradeInstrumentId}`);\r\n    }\r\n\r\n    saveEvidence(portfolioAddModel: IPortfolioAddModel[]): Observable<boolean> {\r\n        return this.dataService.post(`${this.controllerName}/save-evidence`, portfolioAddModel);\r\n    }\r\n\r\n    saveFutureEvidence(portfolioAddModel: IPortfolioAddModel[]): Observable<boolean> {\r\n        return this.dataService.post(`${this.controllerName}/future-evidence`, portfolioAddModel);\r\n    }\r\n\r\n    getFutureEvidenceByStudent(studentId: number): Observable<IFutureEvidence[]> {\r\n        return this.dataService.get(`${this.controllerName}/student-future-evidence/${studentId}`);\r\n    }\r\n\r\n    getFutureEvidencesById(futureEvidenceId: number): Observable<IFutureEvidenceResponse> {\r\n        return this.dataService.get(`${this.controllerName}/future-evidences/${futureEvidenceId}`);\r\n    }\r\n\r\n\r\n    getBlobSasToken(containerName: string): Observable<string> {\r\n        return this.dataService.get(`${this.controllerName}/blobstorage-sastoken/${containerName}`);\r\n    }\r\n\r\n    getRatingMeasures(ageGradeInstrumentId: number, measureId: number): Observable<IMeasureRatingLevel> {\r\n        return this.dataService.get(`${this.controllerName}/rating-measures/ageGradeInstrument/${ageGradeInstrumentId}/measure/${measureId}`);\r\n    }\r\n\r\n    getDomainEvidences(studentClassEnrollmentId: number, ageGradeInstrumentId: number): Observable<IPortfolioEvidenceResponse[]> {\r\n        return this.dataService.get(`${this.controllerName}/review-domain-evidence/studentenrollment/${studentClassEnrollmentId}/agegradeinstrument/${ageGradeInstrumentId}`);\r\n    }\r\n\r\n    getMeasureEvidences(studentClassEnrollmentId: number, ageGradeInstrumentId: number): Observable<IPortfolioEvidenceResponse[]> {\r\n        return this.dataService.get(`${this.controllerName}/review-measure-evidence/studentenrollment/${studentClassEnrollmentId}/agegradeinstrument/${ageGradeInstrumentId}`);\r\n    }\r\n\r\n    assignEvidence(portfolioAssignModel: IPortfolioAssignMeasureEvidence, message?: string): Observable<boolean> {\r\n        return this.dataService.post(`${this.controllerName}/assign-evidence`, portfolioAssignModel, message);\r\n    }\r\n\r\n    copyEvidence(evidence: IPortfolioAssignMeasureEvidence, message?: string): Observable<any> {\r\n        return this.dataService.post(`${this.controllerName}/copy-evidence`, evidence, message);\r\n    }\r\n\r\n    updateEvidence(portfolioUpdateModel: IPortfolioUpdateEvidence[], message?: string): Observable<boolean> {\r\n        return this.dataService.put(`${this.controllerName}/update-evidence`, portfolioUpdateModel, message);\r\n    }\r\n\r\n    deleteEvidence(measureEvidenceId: number, message?: string): Observable<boolean> {\r\n        return this.dataService.delete(`${this.controllerName}/delete-measure-evidence/${measureEvidenceId}`, message);\r\n    }\r\n\r\n    generateDomainPdf(id: number, ageGradeId: number) {\r\n        return this.dataService.postWithOptions(`${this.controllerName}/download-domain/${id}/ageGrade/${ageGradeId}`, null, {\r\n            responseType: 'blob',\r\n        });\r\n    }\r\n\r\n    generateMeasurePdf(id: number, ageGradeId: number) {\r\n        return this.dataService.postWithOptions(`${this.controllerName}/download-measure/${id}/ageGrade/${ageGradeId}`, null, {\r\n            responseType: 'blob',\r\n        });\r\n    }\r\n\r\n    attachFutureEvidence(request: IPortfolioStudentInformation): Observable<boolean> {\r\n      return this.dataService.post(`${this.controllerName}/attach-future-evidence`, request);\r\n    }\r\n\r\n    getAvailableEvidenceToReq(studentId: number, ratingPeriodId: number, toEnrollmentId: number): Observable<IAvailableEvidence> {\r\n        return this.dataService.get(`${this.controllerName}/available-evidence/student/${studentId}/rating/${ratingPeriodId}/toEnrollment/${toEnrollmentId}`);\r\n    }\r\n\r\n    processEvidenceRequest(request: IEvidenceRequest, message?: string): Observable<boolean> {\r\n        return this.dataService.post(`${this.controllerName}/evidence-request`, request, message);\r\n    }\r\n\r\n    updateEvidenceRequests(request: IBatchEvidenceRequest, message?: string): Observable<IBatchEvidenceResult> {\r\n        return this.dataService.put(`${this.controllerName}/update-evidence-request`, request, message);\r\n    }\r\n\r\n    getClassPortfolio(classId: number): Observable<IClassDomainEvidence[]> {\r\n        return this.dataService.get(`${this.controllerName}/class-portfolio/${classId}`);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IGlobalRatingPeriod, IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class RatingPeriodService {\r\n  schoolYearOptions: any[] = []\r\n\r\n  constructor(private data: DataService) { }\r\n\r\n  getRatingPeriod(startIndex: number, itemsPerPage: number): Observable<any> {\r\n    return this.data.get(`ratingperiod/search?pageIndex=${startIndex}&itemsPerPage=${itemsPerPage}`)\r\n  }\r\n\r\n  getRatingPeriodWithParam (params:any) {\r\n    const url = getSearchUrl('ratingperiod/search?', params);\r\n    return this.data.get(url)\r\n  };\r\n\r\n  addRatingPeriod(payload: IRatingPeriod, message? :string):Observable<boolean>{\r\n    return this.data.post('ratingperiod', payload, message)\r\n  }\r\n\r\n  updateRatingPeriod(payload: IRatingPeriod, message?: string): Observable<boolean> {\r\n    return this.data.put('ratingperiod', payload, message)\r\n  }\r\n\r\n  getAllSchoolYears(): Observable<any>{\r\n    return this.data.get(`schoolyear/all`)\r\n  }\r\n\r\n  getRecentSchoolYears(): Observable<any> {\r\n    return this.data.get(`schoolyear/recent`);\r\n  }\r\n\r\n  getActiveSchoolYear(): Observable<any> {\r\n    return this.data.get('schoolyear/active');\r\n  }\r\n\r\n  addSchoolYear(payload: ISchoolYear, message?: string): Observable<boolean> {\r\n    return this.data.post(`schoolyear`, payload, message)\r\n  }\r\n\r\n  setActiveSchoolYear(year: string, message?: string): Observable<boolean> {\r\n    return this.data.put(`schoolyear/active?year=${year}`, message)\r\n  }\r\n\r\n  getBySchoolYearAndAgency(schoolYearId: number, agencyId: number, message?: string): Observable<any> {\r\n    return this.data.get(`ratingperiod/schoolyear/${schoolYearId}/agency/${agencyId}`, message)\r\n  }\r\n\r\n  getByAgency(agencyId: number, message?: string): Observable<any> {\r\n    return this.data.get(`ratingperiod/agency/${agencyId}`, message)\r\n  }\r\n\r\n  getRecentGlobalRatingPeriods(amount: number): Observable<any> {\r\n    return this.data.get(`globalratingperiod/recent/${amount}`);\r\n  }\r\n\r\n  addGlobalRatingPeriod(period: IGlobalRatingPeriod[], message?: string): Observable<boolean> {\r\n    return this.data.post(`globalratingperiod`, period, message);\r\n  }\r\n\r\n  applyGlobalRatingPeriodsExisting(payload: any, message?: string): Observable<boolean> {\r\n    return this.data.post(`globalratingperiod/apply-existing`, payload, message);\r\n  }\r\n\r\n  globalRatingsApplied(schoolYearId: number, message?: string): Observable<boolean> {\r\n    return this.data.get(`globalratingperiod/is-applied/${schoolYearId}`, message)\r\n  }\r\n\r\n  getBySchoolYear(schoolYearId?: number, message?: string): Observable<any> {\r\n    return this.data.get(`globalratingperiod/school-year/${schoolYearId}`, message)\r\n  }\r\n\r\n  getMinGlobalRatingPeriod(): Observable<IGlobalRatingPeriod> {\r\n    return this.data.get('globalratingperiod/min-rating-period');\r\n  }\r\n\r\n  getFutureGlobalRatingPeriods(): Observable<any> {\r\n    return this.data.get(`globalratingperiod/future-global-ratings`);\r\n  }\r\n\r\n  getAllGlobalRatingPeriods(): Observable<any> {\r\n    return this.data.get(`globalratingperiod/all`);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RoleService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getAllByOrder(): Observable<any> {\r\n    return this.data.get('role/allbyorder');\r\n  }\r\n\r\n  getAllRoles(): Observable<any> {\r\n    return this.data.get('role/all');\r\n  }\r\n\r\n  getRolesByUserAccess(): Observable<any> {\r\n    return this.data.get('role/user-access');\r\n  }\r\n\r\n  getRoles(pageIndex: number, itemsPerPage: number): Observable<any> {\r\n    return this.data.get(\r\n      `role/search?PageIndex=${pageIndex}&ItemsPerPage=${itemsPerPage}`\r\n    );\r\n  }\r\n\r\n  searchRoles(payload: any): Observable<any> {\r\n    const url = getSearchUrl('role/search?', payload);\r\n    return this.data.get(url);\r\n  }\r\n\r\n  getRoleGroups(): Observable<any> {\r\n    return this.data.get(`role/all-role-groups`);\r\n  }\r\n\r\n  deleteRole(id: number, message?: string | any) {\r\n    return this.data.delete(`role?id=${id}`, message);\r\n  }\r\n  updateRole(payload: IRoles, message?: string): Observable<boolean> {\r\n    return this.data.put('role', payload, message);\r\n  }\r\n  addRole(payload: IRoles, message?: string): Observable<boolean> {\r\n    return this.data.post('role', payload, message);\r\n  }\r\n\r\n  filterRoles(ids: number[], message?: string): Observable<IRoles[]> {\r\n    let buildQuery: string = '';\r\n\r\n    for (let id of ids) {\r\n      if (buildQuery) {\r\n        buildQuery += `&ids=${id}`;\r\n      } else {\r\n        buildQuery += `ids=${id}`;\r\n      }\r\n    }\r\n\r\n    return this.data.get(`role/filter?${buildQuery}`);\r\n  }\r\n\r\n  downloadRolesReport(roles: IRoles[]): Observable<any> {\r\n    return this.data.postWithOptions('role/download', roles, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: {\r\n        Accept:\r\n          'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n      },\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SiteService {\r\n  $Sites = new Subject<any>();\r\n\r\n  constructor(public data: DataService) {}\r\n\r\n  getSites(message?: string): Observable<boolean> {\r\n    return this.data.get(`site/all`, message);\r\n  }\r\n\r\n  getSitesWithParam(params: any) {\r\n    return this.data.post('site/search', params);\r\n  }\r\n\r\n  addSite(payload: ISites, message?: string): Observable<boolean> {\r\n    return this.data.post('site', payload, message);\r\n  }\r\n\r\n  updateSite(payload: ISites, message?: string): Observable<boolean> {\r\n    return this.data.put('site', payload, message);\r\n  }\r\n\r\n  deleteSite(id: number, message?: string | any) {\r\n    return this.data.delete(`site?id=${id}`, message);\r\n  }\r\n\r\n  getSitesByAgencyId(agencyId: number, message?: string) {\r\n    return this.data.get(`site/agency/${agencyId}`, message);\r\n  }\r\n\r\n  getSitesByAccess(agencyId: number, message?: string) {\r\n    return this.data.get(`site/user-access/${agencyId}`, message);\r\n  }\r\n\r\n  getSitesByPermission(agencyIds: number[], isPilot: boolean, message?: string) {\r\n    return this.data.post(`site/user-permissions?isPilot=${isPilot}`, agencyIds, message);\r\n  }\r\n\r\n  validateUserSite(): Observable<boolean> {\r\n    return this.data.get(`site/validate-user-site`);\r\n  }\r\n}\r\n","import { Injectable} from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class SpinnerService {\r\n\r\n  counter = new BehaviorSubject<number>(0)\r\n  num=0\r\n\r\n  public show() {\r\n    this.num++\r\n    this.counter.next(this.num)\r\n  }\r\n\r\n  public hide() {\r\n    this.num--\r\n    this.counter.next(this.num)\r\n  }\r\n\r\n  getSpinnerCounter():Observable<number>{\r\n    return this.counter.asObservable()\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IStateSchoolYearTarget } from '@core/interfaces/istateSchoolYearTarget';\r\nimport { IStateDashboardTileResponse, IStateDashboardConfiguration, IStateDashboardResponse, IStateDashboardSearchRequest, IChildrenInSpedResponse } from '@core/interfaces/istate-dashboard';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class StateService {\r\n  constructor(private data: DataService) { }\r\n\r\n  getAllStates():Observable<IState[]>{\r\n    return this.data.get('state/all')\r\n  }\r\n\r\n  getStatesById(index: number):Observable<any>{\r\n    return this.data.get(`state/${index}`)\r\n  }\r\n\r\n  getStateConfigurations(stateId: number): Observable<any> {\r\n    return this.data.get(`state/demographic/${stateId}`);\r\n  }\r\n\r\n  getCustomStateConfigurations(stateId: number): Observable<any> {\r\n    return this.data.get(`state/demographic-custom/${stateId}`);\r\n  }\r\n\r\n  getLinkedStates(userId: number): Observable<any> {\r\n    return this.data.get(`state/linked-states/${userId}`);\r\n  }\r\n\r\n  updateStateConfigurations(payload: any): Observable<any> {\r\n    return this.data.post(`state/demographic`, payload, 'Updated State Configurations');\r\n  }\r\n\r\n  editStates(changedState:IState):Observable<any>{\r\n    return this.data.put('state', changedState, 'Updated State')\r\n  }\r\n\r\n  getStateSchoolYearTargets(stateId: number): Observable<IStateSchoolYearTarget[]> {\r\n    return this.data.get(`state/targets/${stateId}`);\r\n  }\r\n\r\n  saveStateSchoolYearTarget(payload: IStateSchoolYearTarget): Observable<boolean> {\r\n    return this.data.post('state/target', payload, 'School Year OSEP Target added successfully.');\r\n  }\r\n\r\n  updateStateSchoolYearTarget(payload: IStateSchoolYearTarget, message?: string): Observable<boolean> {\r\n    return this.data.put('state/target', payload, message);\r\n  }\r\n\r\n  deleteStateSchoolYearTarget(id: number, message?: string): Observable<boolean> {\r\n    return this.data.delete(`state/target/${id}`, message);\r\n  }\r\n\r\n  getDashboardConfigurations(stateId: number): Observable<IStateDashboardConfiguration[]> {\r\n    return this.data.get(`state/${stateId}/dashboard-configuration`);\r\n  }\r\n\r\n  updateDashboardConfigurations(payload: IStateDashboardConfiguration[], stateId: number, stateDashboardEnabled: boolean ): Observable<boolean> {\r\n    return this.data.post(\r\n      `state/${stateId}/dashboard-configuration?stateDashboardEnabled=${stateDashboardEnabled}`, \r\n      payload, \r\n      'Dashboard configurations updated.');\r\n  }\r\n\r\n  getGenderDemographicsCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/gender-demographics-counts');\r\n  }\r\n\r\n  stateDashboardEnabled(stateId: number): Observable<boolean> {\r\n    return this.data.get(`state/${stateId}/dashboard-enabled`);\r\n  }\r\n  \r\n  getChildEnrollmentsCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/child-enrollments-counts');\r\n  }\r\n\r\n  getChildAgeCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/child-age-counts');\r\n  }\r\n\r\n  getChildRaceCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/child-race-counts');\r\n  }\r\n\r\n  getStateDashboardData(): Observable<IStateDashboardResponse> {\r\n    return this.data.get('state/dashboard');\r\n  }\r\n\r\n  getChildAgeGroupCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/child-age-group-counts');\r\n  }\r\n\r\n  getProgramsByAgeGroupCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/program-age-group-counts');\r\n  }\r\n\r\n  searchProgramsByAgeGroup(payload: IStateDashboardSearchRequest) {\r\n    return this.data.postWithOptions(`state/program-search`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  getStudentCountsByLangTypes(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/home-language');\r\n  }\r\n\r\n  getHomeLanguageCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/home-language-counts');\r\n  }\r\n\r\n  searchChildLanguages(payload: IStateDashboardSearchRequest) {\r\n    return this.data.postWithOptions(`state/home-language-search`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  getChildrenInSpedCounts(): Observable<IChildrenInSpedResponse> {\r\n    return this.data.get('state/sped-child-counts');\r\n  }\r\n\r\n  getRatingsCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/ratings-counts');\r\n  }\r\n\r\n  getChildrenWithIepCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/iep-child-counts');\r\n  }\r\n\r\n  searchSpecialEducation(payload: IStateDashboardSearchRequest) {\r\n    return this.data.postWithOptions(`state/special-education-search`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  searchChildRatings(payload: IStateDashboardSearchRequest) {\r\n    return this.data.postWithOptions(`state/child-ratings-search`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  getDisabilityChildCounts(): Observable<IStateDashboardTileResponse[]> {\r\n    return this.data.get('state/disability-counts');\r\n  }\r\n\r\n  searchDisability(payload: IStateDashboardSearchRequest) {\r\n    return this.data.postWithOptions(`state/disability-search`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n  IStudent,\r\n  IStudentClassEnrollmentDetails,\r\n  IStudentDetails,\r\n  IStudentDuplicateValidationDto,\r\n  IStudentSearchRequestDto,\r\n  IStudentUpdateDto,\r\n  IStudentSharedProviderDto,\r\n  IUserSpecialEdPowerDto,\r\n  IAddStudentSharedProviderDto,\r\n  IStudentSearchResponseDto,\r\n  IStudentDualEnrollment,\r\n  IUpdateSpedDatesRequest,\r\n} from './../interfaces/istudent';\r\nimport { ICustomFieldValue } from '@core/interfaces/icustom-field-value';\r\nimport { getSearchUrl } from './helper.service';\r\nimport { NumberLiteralType } from 'typescript';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StudentService {\r\n  path: string = 'student';\r\n\r\n  constructor(private dataService: DataService) {}\r\n\r\n  getStudents(): Observable<IStudent[]> {\r\n    return this.dataService.get(`${this.path}/recent`);\r\n  }\r\n\r\n  getStudentById(studentId: number): Observable<IStudent> {\r\n    return this.dataService.get(`${this.path}/${studentId}`);\r\n  }\r\n\r\n  getStudentCustomFields(studentId: number): Observable<ICustomFieldValue[]> {\r\n    return this.dataService.get(`${this.path}/custom-fields/${studentId}`);\r\n  }\r\n\r\n  addStudent(payload: IStudent): Observable<boolean> {\r\n    return this.dataService.post(`${this.path}`, payload);\r\n  }\r\n\r\n  updateStudent(\r\n    payload: IStudentUpdateDto,\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.put(`${this.path}`, payload, message);\r\n  }\r\n\r\n  updateStudentGeneric(\r\n    payload: IStudent,\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.put(`${this.path}/update`, payload, message);\r\n  }\r\n\r\n  deleteStudent(studentId: string): Observable<boolean> {\r\n    return this.dataService.delete(`${this.path}`, studentId);\r\n  }\r\n\r\n  addAndEnrollStudent(payload: IStudent): Observable<boolean> {\r\n    return this.dataService.post(`${this.path}`, payload);\r\n  }\r\n\r\n  search(payload: IStudentSearchRequestDto): Observable<any> {\r\n    return this.dataService.post(`student/search?`, payload);\r\n  }\r\n\r\n  addSearch(payload: any): Observable<any> {\r\n    return this.dataService.post(`student/add-search?`, payload);\r\n  }\r\n\r\n  getStudentDetails(childId: number): Observable<IStudentDetails> {\r\n    return this.dataService.get(`student/view-details/${childId}`);\r\n  }\r\n\r\n  getStudentAssessments(childId: number): Observable<any> {\r\n    return this.dataService.get(`student/assessments/${childId}`);\r\n  }\r\n\r\n  getClassroomEnrollmentDetails(\r\n    childId: number,\r\n    message?: string\r\n  ): Observable<IStudentClassEnrollmentDetails> {\r\n    return this.dataService.get(\r\n      `student/view-class-enrollments/${childId}`,\r\n      message\r\n    );\r\n  }\r\n\r\n  searchDroppedChildren(params: any): Observable<any> {\r\n    const url = getSearchUrl('student/dropped-children?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  validateStudent(\r\n    payload: IStudentDuplicateValidationDto\r\n  ): Observable<boolean> {\r\n    return this.dataService.post('student/validate', payload);\r\n  }\r\n\r\n  getDuplicateOrDroppedChildren(params: any): Observable<any> {\r\n    const url = getSearchUrl('student/duplicate-or-dropped?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getStudentSharedProviders(\r\n    studentId: number\r\n  ): Observable<IStudentSharedProviderDto[]> {\r\n    return this.dataService.get(`${this.path}/shared-provider/${studentId}`);\r\n  }\r\n\r\n  getStudentSharedProviderUsers(): Observable<IUserSpecialEdPowerDto[]> {\r\n    return this.dataService.get(`${this.path}/shared-provider/user`);\r\n  }\r\n\r\n  addStudentSharedProvider(\r\n    payload: IAddStudentSharedProviderDto\r\n  ): Observable<boolean> {\r\n    return this.dataService.post(`${this.path}/shared-provider`, payload);\r\n  }\r\n\r\n  deleteStudentSharedProvider(id: number): Observable<boolean> {\r\n    return this.dataService.delete(`${this.path}/shared-provider?id=${id}`);\r\n  }\r\n\r\n  updateStudentPilotRole(payload: any): Observable<boolean> {\r\n    return this.dataService.put(\r\n      `${this.path}/assign-pilot-test`,\r\n      payload,\r\n      'Student Pilot Test Role Updated.'\r\n    );\r\n  }\r\n\r\n  checkDuplicateStringSSID(ssid: string, stateId: number): Observable<boolean> {\r\n    return this.dataService.get(\r\n      `${this.path}/check-string-ssid/${ssid}/stateId/${stateId}`\r\n    );\r\n  }\r\n\r\n  checkDuplicateLongSSID(ssid: number): Observable<boolean> {\r\n    return this.dataService.get(`${this.path}/check-long-ssid/${ssid}`);\r\n  }\r\n\r\n  getStudentBatch(\r\n    payload: IStudentSearchRequestDto\r\n  ): Observable<IStudentSearchResponseDto[]> {\r\n    return this.dataService.post(`${this.path}/student-batch`, payload);\r\n  }\r\n\r\n  saveDualEnrollment(\r\n    payload: IStudentDualEnrollment\r\n  ): Observable<boolean> {\r\n    return this.dataService.post(`${this.path}/dual-enroll`, payload);\r\n  }\r\n\r\n  updateStudentSpedDates(\r\n    payload: IUpdateSpedDatesRequest\r\n  ): Observable<boolean> {\r\n    return this.dataService.post(`${this.path}/sped-dates`, payload);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\r\nimport { ToastComponent } from '@shared/components/toast/toast.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ToastService {\r\n  responseMessage: string = '';\r\n  $responseMessage = new BehaviorSubject<any>(this.responseMessage);\r\n  snackConfig: MatSnackBarConfig<any> = {\r\n      duration: 4000,\r\n      verticalPosition: 'bottom',\r\n      horizontalPosition: 'right'\r\n  }\r\n  \r\n  constructor(private _snackBar: MatSnackBar) { }\r\n\r\n  success(message: string) {\r\n    this.$responseMessage.next(message);\r\n    this.snackConfig.panelClass = ['toast-success'];\r\n    this._snackBar.openFromComponent(ToastComponent, this.snackConfig);\r\n  }\r\n\r\n  warn(message: string) {\r\n    this.$responseMessage.next(message);\r\n    this.snackConfig.panelClass = ['toast-warning'];\r\n    this._snackBar.openFromComponent(ToastComponent, this.snackConfig);\r\n  }\r\n\r\n  error(message: string) {\r\n    this.$responseMessage.next(message);\r\n    this.snackConfig.panelClass = ['toast-error'];\r\n    this._snackBar.openFromComponent(ToastComponent, this.snackConfig);\r\n  }\r\n\r\n  info(message: string) {\r\n    this.$responseMessage.next(message);\r\n    this.snackConfig.panelClass = ['toast-info'];\r\n    this._snackBar.openFromComponent(ToastComponent, this.snackConfig);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IMenuLinks } from '@core/interfaces/side-menu';\r\nimport { AuthService } from './auth.service';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UserDropMenuService {\r\n  constructor(private authService: AuthService) {}\r\n\r\n  user: ILoginResponse = this.authService.getCurrentUser();\r\n  accessStateDashboard: boolean = this.user.permissions.includes(Permission.AccessStateDashboard);\r\n\r\n  headerBtns: IMenuLinks[] = [\r\n    {\r\n      label: 'Dashboard',\r\n      routeLink: this.accessStateDashboard ? '/state-dashboard' : '/dashboard',\r\n      icon: 'uil uil-dashboard',\r\n    },\r\n    {\r\n      label: 'User Profile',\r\n      routeLink: '/user-profile',\r\n      icon: 'uil uil-user-circle',\r\n    },\r\n  ];\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IAdminSearchUsersRequest, IUser } from '@core/interfaces/iuser';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UserService {\r\n  constructor(public data: DataService) {}\r\n\r\n  getUserById(id: number): Observable<IUser> {\r\n    return this.data.get(`user/${id}`);\r\n  }\r\n\r\n  search(params: any) {\r\n    const url = getSearchUrl('user/search?', params);\r\n    return this.data.get(url);\r\n  }\r\n\r\n  createUser(payload: any, message?: string): Observable<number> {\r\n    return this.data.post('user', payload, message);\r\n  }\r\n\r\n  updateUser(payload: any, message?: string): Observable<boolean> {\r\n    return this.data.put('user', payload, message);\r\n  }\r\n\r\n  updateUserDemographics(payload: any, message?: string): Observable<boolean> {\r\n    return this.data.put('user/user-update', payload, message);\r\n  }\r\n\r\n  globalSearch(request: IAdminSearchUsersRequest) {\r\n    return this.data.post('user/search/admin-search-users', request);\r\n  }\r\n\r\n  getAdminUserDetails(userId: number): Observable<any> {\r\n    return this.data.get(`user/search/admin-user-details/${userId}`);\r\n  }\r\n\r\n  adminUpdateUser(payload: any, message?: string): Observable<boolean> {\r\n    return this.data.put('user/admin-update', payload, message);\r\n  }\r\n\r\n  getUserHighestAccessLevel(id: number): Observable<number> {\r\n    return this.data.get(`user/highest-access-level/${id}`);\r\n  }\r\n\r\n  getUsersByClassEnrollment(id: number): Observable<any> {\r\n    return this.data.get(`user/portfolio-message-users/${id}`);\r\n  }\r\n\r\n  getPortfolioMessageUsers(sceId: number): Observable<any> {\r\n    return this.data.get(`user/portfolio-message-users/${sceId}`);\r\n  }\r\n\r\n  getSignUpStatus(): Observable<boolean> {\r\n    return this.data.get('user/is-signed-up');\r\n  }\r\n\r\n  updateSignUpStatus(isSignedUp: boolean): Observable<boolean> {\r\n    return this.data.put('user/sign-up-status', isSignedUp);\r\n  }\r\n}\r\n","import { FormGroup } from \"@angular/forms\";\r\n\r\nexport function matchPassword(newPassword: string, confirmPassword: string) {\r\n    return (resetPwForm: FormGroup) => {\r\n        const password = resetPwForm.controls[newPassword];\r\n        const confirmedPassword = resetPwForm.controls[confirmPassword];\r\n        if (password.value !== confirmedPassword.value) {\r\n        return confirmedPassword.setErrors({ passwordMismatch: true });\r\n        } else {\r\n          return confirmedPassword.setErrors(null);\r\n        }\r\n      }\r\n}","<div *ngIf=\"url\" class=\"video\">\r\n\t<audio controls>\r\n\t\t<source [src]=\"url\"/>\r\n\t\tYour browser does not support the audio element.\r\n\t</audio>\r\n</div>","import { Component, OnInit, Input } from '@angular/core';\r\nimport { SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n  selector: 'drdp-audio',\r\n  templateUrl: './audio.component.html',\r\n  styleUrls: ['./audio.component.scss']\r\n})\r\nexport class AudioComponent implements OnInit {\r\n    @Input() url!: string | ArrayBuffer | SafeResourceUrl;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit() {\r\n  }\r\n}\r\n","import { Component, OnInit, Input, EventEmitter, Output, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-btn',\r\n  templateUrl: './btn.component.html',\r\n  styleUrls: ['./btn.component.scss']\r\n})\r\nexport class BtnComponent implements OnInit, OnChanges {\r\n  @Input() outside?: boolean = false;\r\n  @Input() link?: any;\r\n  @Input() disabled?: boolean = false;\r\n  @Input() color?: string;\r\n  @Input() additionalClasses?:string;\r\n  @Output() eventListener = new EventEmitter<string>();\r\n  @Input() type = \"submit\";\r\n  routerLink?: any;\r\n  btnClass: string = '';\r\n\r\n  // add your specific styles here to be able to use getColor()\r\n  classes: any = {\r\n    outline: 'px-3 text-drdpblue-300 hover:bg-gray-300 hover:border-drdpblue-300 font-semibold cursor-pointer border-[0.1em] border-drdpblue-300',\r\n    outlineRed: 'px-3 border-drdpred-100 text-drdpred-100 font-semibold cursor-not-allowed border-[0.1em]',\r\n    red: 'px-3 bg-drdpred-100 border-drdpred-100 text-white hover:text-drdpred-100 hover:border-drdpred-100 hover:bg-transparent font-semibold cursor-pointer border-[0.1em]',\r\n    cancel: 'px-3 bg-gray-200 text-black hover:bg-gray-300 font-semibold cursor-pointer border-[0.1em] border-gray-200',\r\n    disabled: 'px-3 bg-gray-400 text-white border-0 pointer-events-none',\r\n    default: 'px-3 bg-drdpblue-300 hover:text-drdpblue-300 hover:bg-transparent hover:border-drdpblue-300 text-white cursor-pointer border-[0.1em] border-drdpblue-300',\r\n    update: 'mt-4 pl-5 text-xs text-drdpblue-400 hover:underline',\r\n    defaultNoMargins: 'px-4 bg-drdpblue-300 hover:text-drdpblue-300 hover:bg-transparent hover:border-drdpblue-300 text-white cursor-pointer border-[0.1em] border-drdpblue-300',\r\n    pillblue: 'py-1 px-2 rounded-full cursor-pointer transition duration-300 ease',\r\n    pillgreen: 'py-1 px-2 rounded-full cursor-pointer transition duration-300 ease',\r\n    black: 'px-3 bg-black border-black text-white font-semibold cursor-pointer border-[0.1em]',\r\n    white: 'px-3 bg-white border-black text-black font-semibold cursor-pointer border-[0.1em]',\r\n  }\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    this.btnClass = this.getColor(this.color);\r\n   }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    this.btnClass = this.disabled ? this.classes.disabled : this.getColor(this.color);\r\n  }\r\n\r\n  buttonClick() {\r\n    if (this.link) {\r\n      this.routerLink = this.link;\r\n    }\r\n  }\r\n\r\n  // add your color in the color input, will check if it's in the classes obj\r\n  getColor(type?: any) {\r\n    if (this.disabled) {\r\n      return this.classes['disabled'];\r\n    }\r\n    return this.classes[type] ? this.classes[type] : this.classes['default'];\r\n  }\r\n\r\n}\r\n","<button [routerLink]=\"routerLink\"\r\n        [ngClass]=\"btnClass\"\r\n        class=\"py-1 rounded-lg {{additionalClasses}}\"\r\n        (click)=\"buttonClick()\"\r\n        [type]=\"type\"\r\n        [disabled]=\"disabled\">\r\n        <ng-content></ng-content>\r\n</button>\r\n","<div class=\"max-w-sm relative\">\r\n  <owl-carousel-o [options]=\"customOptions\">\r\n    <ng-container *ngFor=\"let item of items\">\r\n      <ng-template carouselSlide>\r\n        <div class=\"pl-8 pr-6\">\r\n          <div *ngIf=\"item.url\">\r\n            <div *ngIf=\"evidenceType === evidenceTypes.Photo\">\r\n              <img [src]=\"item.generatedUrl\" alt=\"Evidence image\">\r\n            </div>\r\n\r\n            <div *ngIf=\"evidenceType === evidenceTypes.Video\">\r\n              <div class=\"mt-4 cursor-pointer\" (click)=\"showVideo = !showVideo\">\r\n                <div>\r\n                  <label [for]=\"item.fileName\">Name:</label>\r\n                  <span class=\"break-words\">{{ item.fileName }}</span>\r\n                </div>\r\n                <div class=\"flex justify-between\">\r\n                  <div>\r\n                    <label for=\"createdDate\">Upload Date:</label>\r\n                    <span>{{ item.createdOn | localDate | date: \"MM/dd/yy\" }}</span>\r\n                  </div>\r\n                  <div class=\"mt-1\">\r\n                    <i class=\"uil text-xl\" [ngClass]=\"{'uil-angle-down': showVideo, 'uil-angle-right': !showVideo}\"></i>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n              <div *ngIf=\"showVideo\" class=\"mt-2\">\r\n                <drdp-video [url]=\"item.generatedUrl\"></drdp-video>\r\n              </div>\r\n            </div>\r\n\r\n            <div *ngIf=\"evidenceType === evidenceTypes.Audio\">\r\n              <label>{{ item.fileName }}</label>\r\n              <drdp-audio [url]=\"item.generatedUrl\"></drdp-audio>\r\n            </div>\r\n          </div>\r\n\r\n          <div *ngIf=\"item.notes\">\r\n            <label for=\"notes\" class=\"mt-4 mb-2\">Notes</label>\r\n            <p>{{ item.notes }}</p>\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n    </ng-container>\r\n  </owl-carousel-o>\r\n</div>\r\n","import { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { PortfolioEvidenceTypeString } from '@core/enums/portfolio';\r\nimport { IEvidenceDetails } from '@core/interfaces/iclass-portfolio';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { OwlOptions } from 'ngx-owl-carousel-o';\r\n\r\n@Component({\r\n  selector: 'drdp-carousel',\r\n  templateUrl: './carousel.component.html',\r\n  styleUrls: ['./carousel.component.scss'],\r\n})\r\nexport class CarouselComponent {\r\n  @Input() items: IEvidenceDetails[] = [];\r\n  @Input() sasToken?: any;\r\n  @Input() evidenceType: string = '';\r\n  showVideo: boolean = false;\r\n\r\n  public get evidenceTypes() { return PortfolioEvidenceTypeString; }\r\n\r\n  customOptions: OwlOptions = {\r\n    loop: false,\r\n    mouseDrag: true,\r\n    touchDrag: true,\r\n    pullDrag: true,\r\n    dots: true,\r\n    center: true,\r\n    items: 1\r\n  }\r\n  \r\n  constructor(private sanitizer: DomSanitizer) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['sasToken']) \r\n      this.items.forEach((item: IEvidenceDetails) => item.generatedUrl = this.generateUrlWithSasToken(item.url));\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string): SafeResourceUrl | string {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${addHTTPS(blobUrl)}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n}\r\n","<div class=\"overflow-y-auto\" [class]=\"additionalClasses\">\r\n  <div class=\"flex justify-center items-center\">\r\n    <canvas [id]=\"chartId\" #chartCanvas></canvas>\r\n  </div>\r\n  <drdp-legend *ngIf=\"displayColorLegend\" [data]=\"chartData\" [additionalClasses]=\"legendAdditionalClasses\"></drdp-legend>\r\n</div>\r\n","import { Component, ElementRef, Input, ViewChild, inject } from '@angular/core';\r\nimport { ChartType } from '@core/enums/chart-type';\r\nimport { IStateDashboardTileResponse } from '@core/interfaces/istate-dashboard';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Chart, ChartOptions, Plugin } from 'chart.js';\r\n\r\n@Component({\r\n  selector: 'drdp-chart',\r\n  templateUrl: './chart.component.html',\r\n  styleUrls: ['./chart.component.scss']\r\n})\r\nexport class ChartComponent {\r\n  @Input() chartData: IStateDashboardTileResponse[] = [];\r\n  @Input() chartType: string = '';\r\n  @Input() chartId: string = '';\r\n  @Input() width: number = 100;\r\n  @Input() height: number = 100;\r\n  @Input() displayColorLegend: boolean = false;\r\n  @Input() additionalClasses?: string;\r\n  @Input() legendAdditionalClasses?: string;\r\n  @Input() isHorizontalBarChart: boolean = false;\r\n  @Input() labelsSplitAt: string = '';\r\n  chartInstances:any[]= [];\r\n  isOneSegment: boolean = false;\r\n  fontFamily: string = 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"';\r\n  @ViewChild('chartCanvas', { static: true }) canvas!: ElementRef<HTMLCanvasElement>;\r\n\r\n  private toastService = inject(ToastService);\r\n\r\n  ngAfterViewInit(): void {\r\n    this.createChart();\r\n  }\r\n\r\n  createChart(): void {\r\n    const canvas = this.canvas.nativeElement;\r\n    canvas.width = this.width; \r\n    canvas.height = this.height;\r\n\r\n    const chartElement = document.getElementById(this.chartId) as HTMLCanvasElement;\r\n    if (chartElement === null) return;\r\n  \r\n    const ctx = chartElement.getContext('2d');\r\n    if (ctx === null) return;\r\n  \r\n    const existingChartIndex = this.chartInstances?.findIndex(chart => chart.canvas === chartElement);\r\n    if (existingChartIndex !== -1) {\r\n      this.chartInstances[existingChartIndex].destroy();\r\n      this.chartInstances.splice(existingChartIndex, 1);\r\n    }\r\n\r\n    if (this.chartData.length === 1) this.isOneSegment = true;\r\n\r\n    switch (this.chartType) {\r\n      case ChartType.Doughnut:\r\n        this.createDoughnutChart(ctx);\r\n        break;\r\n      case ChartType.Bar:\r\n        this.createBarChart(ctx);\r\n        break;\r\n      default:\r\n        this.toastService.error('Error creating chart.');\r\n        return;\r\n    }\r\n  }\r\n\r\n  createDoughnutChart(ctx: CanvasRenderingContext2D): void {\r\n    const data = {\r\n      labels: this.chartData.map(item => item.name),\r\n      datasets: [\r\n        {\r\n          data: this.isOneSegment\r\n            ? [\r\n              this.chartData[0].total === 0 ? 1 : this.chartData[0].total - this.chartData[0].count,\r\n              this.chartData[0].count\r\n            ]\r\n            : this.chartData.map(item => item.count),\r\n          ...this.getChartStyles()\r\n        }\r\n      ]\r\n    };\r\n\r\n    const refChart = new Chart(ctx, {\r\n      type: ChartType.Doughnut,\r\n      data,\r\n      options: this.getDoughnutChartOptions(),\r\n      plugins: this.isOneSegment ? [this.getCenterPlugin(this.chartData[0].count)] : []\r\n    });\r\n  \r\n    if (!this.chartInstances) {\r\n      this.chartInstances = [];\r\n    }\r\n    this.chartInstances.push(refChart);\r\n  }\r\n  \r\n  getChartStyles(): any{\r\n    return {\r\n      backgroundColor: this.isOneSegment\r\n        ? ['#00000029', '#7A349D'] \r\n        : this.chartData.map(item => item.color),\r\n      borderWidth: 0\r\n    };\r\n  }\r\n\r\n  getDoughnutChartOptions(): ChartOptions<ChartType.Doughnut> {\r\n    return {\r\n      cutout: '80%',\r\n      responsive: false,\r\n      maintainAspectRatio: false,\r\n      animation: {\r\n        duration: 0\r\n      },\r\n      plugins: {\r\n        tooltip: {\r\n          enabled: false\r\n        },\r\n        legend: {\r\n          onClick: () => {},\r\n          display: this.displayColorLegend ? false : true,\r\n          position: 'bottom',\r\n          align: 'center',\r\n          labels: {\r\n            boxWidth: 0,\r\n            color: 'black',\r\n            font: {\r\n              size: 14,\r\n              weight: 'bold'\r\n            }\r\n          }\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  getCenterPlugin(count: number): Plugin<ChartType.Doughnut> {\r\n    // Display count in the center of the doughnut chart\r\n    return {\r\n      id: 'centerText',\r\n      beforeDraw:(chart) => {\r\n        const ctx = chart.ctx;\r\n        const { x, y } = chart.getDatasetMeta(0).data[0];\r\n        ctx.save();\r\n        ctx.font = `normal 14px ${this.fontFamily}`;\r\n        ctx.textAlign = 'center';\r\n        ctx.textBaseline = 'middle';\r\n        ctx.fillText(`${count.toLocaleString()}`, x, y);\r\n        ctx.restore();\r\n      }\r\n    };\r\n  }\r\n\r\n  createBarChart(ctx: CanvasRenderingContext2D): void {\r\n    const labels = this.chartData.map(item => {\r\n      const label = item.name;\r\n      // Split labels into two lines for horizontal bar chart for better layout\r\n      if (this.isHorizontalBarChart) {\r\n        const index = label.toLowerCase().indexOf(this.labelsSplitAt.toLowerCase());\r\n        if (index !== -1) {\r\n          const first = label.slice(0, index).trim();\r\n          const second = label.slice(index).trim();\r\n          return [first, second]; \r\n        }\r\n      }\r\n      return label; \r\n    });\r\n\r\n    const data = {\r\n      labels,\r\n      datasets: [{\r\n        data: this.chartData.map(item => item.percent),\r\n        ...this.getChartStyles()\r\n      }]\r\n    };\r\n\r\n    const refChart = new Chart(ctx, {\r\n      type: ChartType.Bar,\r\n      data,\r\n      options: this.getBarChartOptions(),\r\n      plugins: [this.getBarChartCountPlugin()]\r\n    });\r\n\r\n    if (!this.chartInstances) this.chartInstances = [];\r\n    this.chartInstances.push(refChart);\r\n  }\r\n\r\n  getBarChartOptions(): ChartOptions<ChartType.Bar> {\r\n    const axis = this.isHorizontalBarChart ? 'y' : 'x';\r\n    const oppositeAxis = this.isHorizontalBarChart ? 'x' : 'y';\r\n  \r\n    return {\r\n      maintainAspectRatio: false,\r\n      responsive: true,\r\n      indexAxis: axis, \r\n      layout: { padding: { top: 25 } },\r\n      plugins: {\r\n        legend: { display: false },\r\n        tooltip: { enabled: false },\r\n      },\r\n      scales: {\r\n        [axis]: {\r\n          grid: { display: false },\r\n          ticks: {\r\n            color: 'black', \r\n            font: { lineHeight: 1.5, size: 16, family: this.fontFamily },\r\n            crossAlign: this.isHorizontalBarChart ? 'far' : undefined,\r\n          }\r\n        },\r\n        [oppositeAxis]: {\r\n          beginAtZero: true,\r\n          min: 0,\r\n          max: 100,\r\n          ticks: {\r\n            stepSize: 25,\r\n            callback: (value) => `${value}%`,\r\n          }\r\n        }\r\n      },\r\n      datasets: {\r\n        bar: { barPercentage: this.isHorizontalBarChart ? 0.6 : 0.3 } \r\n      }\r\n    };\r\n  }\r\n  \r\n  getBarChartCountPlugin(): Plugin<ChartType.Bar> {\r\n    return {\r\n      id: 'barText',\r\n      afterDatasetsDraw:(chart) => {\r\n        const ctx = chart.ctx;\r\n        const isHorizontal = chart.options.indexAxis === 'y';\r\n        chart.getDatasetMeta(0).data.forEach((bar, index) => {\r\n          ctx.save();\r\n          ctx.font = 'bold 16px sans-serif';\r\n          const item = this.chartData[index];\r\n          const displayText = item.isFutureRatingPeriod ? 'N/A' : item.count.toLocaleString();\r\n          if (isHorizontal) {\r\n            // Display count on the right side of each bar in bar chart\r\n            ctx.textBaseline = 'middle';\r\n            ctx.fillText(displayText,  bar.x + 6, bar.y);\r\n          } else {\r\n            // Display count on top of each bar in bar chart\r\n            ctx.textAlign = 'center'; \r\n            ctx.fillText(displayText, bar.x, bar.y - 10);  \r\n          }\r\n          ctx.restore();\r\n        });\r\n      }\r\n    };\r\n  }\r\n}\r\n","<div class=\"grid grid-flow-row sm:grid-flow-col text-sm mt-4 mx-auto gap-y-3 justify-center\"\r\n  [class]=\"additionalClasses\" [style.gridTemplateRows]=\"'repeat(' + rowCount + ', min-content)'\">\r\n  <div *ngFor=\"let item of data\" class=\"flex items-center space-x-2\">\r\n    <div *ngIf=\"item.color\" [style.background-color]=\"item.color\" class=\"w-4 h-4 rounded-full flex-shrink-0\"></div>\r\n    <span class=\"font-bold\">{{ item.count | number }}</span>\r\n    <span class=\"text-left\">{{ item.name }}</span>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { IStateDashboardTileResponse } from '@core/interfaces/istate-dashboard';\r\n\r\n@Component({\r\n  selector: 'drdp-legend',\r\n  templateUrl: './legend.component.html',\r\n  styleUrls: ['./legend.component.scss']\r\n})\r\nexport class LegendComponent {\r\n  @Input() data: IStateDashboardTileResponse[] = [];\r\n  @Input() additionalClasses?: string;\r\n\r\n  get rowCount(): number { return Math.ceil(this.data.length / 2); }\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { PortfolioEvidenceType, PortfolioEvidenceTypeString } from '@core/enums/portfolio';\r\nimport { IEvidenceDetails } from '@core/interfaces/iclass-portfolio';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-class-portfolio-evidence',\r\n  templateUrl: './class-portfolio-evidence.component.html',\r\n  styleUrls: ['./class-portfolio-evidence.component.scss']\r\n})\r\nexport class ClassPortfolioEvidenceComponent implements OnInit {\r\n  evidences: IEvidenceDetails[] = [];\r\n  studentName: string = '';\r\n  containerName: string = 'portfolio-evidences';\r\n  sasToken?: any;\r\n  evidenceType: string = '';\r\n\r\n  evidenceTypeMap = {\r\n    [PortfolioEvidenceTypeString.Note]: PortfolioEvidenceType.Note,\r\n    [PortfolioEvidenceTypeString.Photo]: PortfolioEvidenceType.Photo,\r\n    [PortfolioEvidenceTypeString.Video]: PortfolioEvidenceType.Video,\r\n    [PortfolioEvidenceTypeString.Audio]: PortfolioEvidenceType.Audio,\r\n  };\r\n\r\n  constructor(\r\n    private portfolioService: PortfolioService,\r\n    @Inject(MAT_DIALOG_DATA) public dialogData: any\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeEvidences();\r\n    this.getSasToken();\r\n  }\r\n\r\n  initializeEvidences(): void {\r\n    if (!this.dialogData || !this.dialogData.data) return;\r\n    \r\n    const data = this.dialogData.data;\r\n    this.evidenceType = this.dialogData.type;\r\n    this.studentName = `${data.firstName} ${data.lastName}`;\r\n\r\n    const evidenceTypeId = this.evidenceTypeMap[this.evidenceType as PortfolioEvidenceTypeString];\r\n    \r\n    if (evidenceTypeId)\r\n      this.evidences = data.evidences.filter((evidence: IEvidenceDetails) => evidence.evidenceTypeId === evidenceTypeId);\r\n  }\r\n\r\n  getSasToken(): void {\r\n    if (this.containerName) {\r\n      this.portfolioService.getBlobSasToken(this.containerName)\r\n        .pipe(take(1)).subscribe((res: string) => this.sasToken = res);\r\n    } \r\n  }\r\n}\r\n","<div class=\"min-w-[24rem] min-h-[16rem]\" [class.mb-6]=\"evidences.length && evidences.length === 1\">\r\n  <div class=\"flex justify-between pb-2\">\r\n    <h1 class=\"text-[25px] font-bold\">{{ studentName }} {{ evidenceType | titlecase }} Evidence</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <drdp-carousel [items]=\"evidences\" [sasToken]=\"sasToken\" [evidenceType]=\"evidenceType\"></drdp-carousel>\r\n  </div>\r\n</div>\r\n","<div class=\"w-max\">\r\n    <div class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[25px] font-bold\">{{title}}</h1>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"content\" [ngClass]=\"{'wide-content': wideContent}\">\r\n            <p [innerHTML]=\"message\" class=\"pt-5 w-full\"></p>\r\n        </div>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end\">\r\n        <drdp-btn type=\"button\" *ngIf=\"showCancel\" class=\"mr-2\" color=\"cancel\" mat-button mat-dialog-close>{{cancelText}}</drdp-btn>\r\n        <drdp-btn type=\"submit\" [color]=\"buttonColor\" mat-button [mat-dialog-close]=\"onSubmit(true)\" cdkFocusInitial>{{buttonLabel}}</drdp-btn>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Modal } from '@core/enums/modal';\r\n\r\n@Component({\r\n  selector: 'drdp-confirmation-modal',\r\n  templateUrl: './confirmation-modal.component.html',\r\n  styleUrls: ['./confirmation-modal.component.scss']\r\n})\r\nexport class ConfirmationModalComponent implements OnInit {\r\n  buttonColor?: string;\r\n  buttonLabel?: string;\r\n  showCancel: boolean = false;\r\n  title: any;\r\n  name?: any;\r\n  message: any;\r\n  cancelText: string = 'Cancel';\r\n  wideContent: boolean = false;\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<ConfirmationModalComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public info: any) {\r\n      dialogRef.disableClose = true\r\n    }\r\n\r\n  ngOnInit(): void {\r\n    this.getInfo();\r\n  }\r\n\r\n  getInfo(){\r\n    this.title = this.info.data.modalInfo.title\r\n    this.message = this.info.data.modalInfo.message\r\n    this.name = this.info.data.modalInfo.name || ''\r\n    this.buttonColor = this.info.data.modalInfo.primaryBtnClass;\r\n    this.buttonLabel = this.info.data.modalInfo.primaryBtnText;\r\n    this.showCancel = this.info.data.modalInfo.showCancel;\r\n    this.cancelText = this.info.data.modalInfo.cancelText || 'Cancel';\r\n    this.wideContent = this.info.data.modalInfo.wideContent;\r\n  }\r\n\r\n  onSubmit(value: any){\r\n    if (this.buttonLabel == Modal.Delete) {\r\n      let payload = {\r\n        index: this.info.index,\r\n        id: this.info.data.id\r\n      }\r\n      return payload;\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-container',\r\n  templateUrl: './container.component.html',\r\n  styleUrls: ['./container.component.scss']\r\n})\r\nexport class ContainerComponent implements OnInit {\r\n\r\n  @Input() texts:string[] =[]\r\n  @Input() image?:string\r\n  @Input() additionClasses?:string;\r\n  @Input() color?: string;\r\n\r\n  classes: any = {\r\n    white: 'bg-white shadow-lg shadow-drdpblue-100 rounded-[20px] p-5',\r\n    lightBlue: 'bg-drdpblue-200 rounded-[10px] p-2',\r\n    whiteDash: 'bg-white rounded-[30px] drop-shadow-md flex items-start shadow-inner shadow-drdpblue-200',\r\n  }\r\n\r\n  constructor() {  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  getColor(type?: any){\r\n    return this.classes[type] ? this.classes[type] : this.classes['white'];\r\n  }\r\n\r\n}\r\n","<div [ngClass]=\"getColor(color)\" class='{{additionClasses}}'>\r\n\r\n    <ng-content></ng-content>\r\n   \r\n</div>\r\n","<div [formGroup]=\"dateForm\">\r\n    <mat-form-field id=\"dob\" class=\"basis-1/2\" [ngClass]=\"{'removeLine': isReadOnly, ' border-b border-black' : !isReadOnly}\" appearance=\"fill\">\r\n      <label class=\"global-font-bold pb-2\" [class]=\"labelClasses\" [ngClass]=\"{'required': isRequired}\" [for]=\"label\">{{ label }}</label>\r\n      <input matInput autocomplete=\"off\" [name]=\"label\" [matDatepicker]=\"datePicker\" formControlName=\"date\" [min]=\"minDate\" [max]=\"maxDate\" aria-label=\"date picker\"\r\n        (dateChange)=\"handleDate($event.value)\" [readonly]=\"isReadOnly\" [required]=\"isRequired\" maxlength=\"10\" [placeholder]=\"placeholder\">\r\n        <mat-error *ngIf=\"date.hasError('required')\">Field required.</mat-error>\r\n        <mat-error *ngIf=\"date.hasError('invalidDates')\">Date cannot be before minimum date provided.</mat-error>\r\n      <mat-datepicker-toggle matSuffix [for]=\"datePicker\" [disabled]=\"isReadOnly\"></mat-datepicker-toggle>\r\n      <mat-datepicker #datePicker></mat-datepicker>\r\n    </mat-form-field>\r\n  </div>\r\n  ","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges\r\n} from '@angular/core';\r\nimport { AbstractControlOptions, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-date-picker',\r\n  templateUrl: './date-picker.component.html',\r\n  styleUrls: ['./date-picker.component.scss'],\r\n})\r\nexport class DatePickerComponent implements OnInit {\r\n  @Output() emitDate = new EventEmitter<any>();\r\n  @Input() label: string = 'datePicker';\r\n  @Input() placeholder: string = 'mm/dd/yyyy';\r\n  @Input() isReadOnly?: boolean = false;\r\n  @Input() isRequired: boolean = false;\r\n  @Input() labelClasses: string = '';\r\n  @Input() show = true;\r\n  @Input() minDate?: Date;\r\n  @Input() maxDate?: Date;\r\n  @Input() resetDate?: boolean = false;\r\n  dateForm: FormGroup | any;\r\n\r\n  private _initialDate: string | number | Date = '';\r\n\r\n  @Input()\r\n  set initialDate(value: string | number | Date) {\r\n    this._initialDate = value;\r\n    if (value) {\r\n      this.date?.setValue(new Date(value));\r\n    } else {\r\n      this.date?.setValue(null);\r\n    }\r\n  }\r\n  get inputValue(): string | number | Date {\r\n    return this._initialDate;\r\n  }\r\n\r\n  get date() {\r\n    return this.dateForm?.get('date');\r\n  }\r\n  constructor(private fb: FormBuilder, private toastService: ToastService) {\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['resetDate']) {\r\n      this.initializeForm();\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.dateForm = this.fb.group({\r\n      date: [this.initialDate],\r\n    }, { validator: [this.dateLessThan('date')]} as AbstractControlOptions);\r\n    this.dateForm.markAsPristine();\r\n    const dateValidators = this.isRequired ? [Validators.required] : [];\r\n    this.date.setValidators(dateValidators);\r\n    this.date.updateValueAndValidity();\r\n  }\r\n\r\n  dateLessThan(dateControl: string) {\r\n    return (group: FormGroup) => {\r\n      if (this.minDate && this.isRequired) {\r\n        const dateValue = new Date(this.date.value).getTime();\r\n        const minDateValue = new Date(this.minDate).getTime();\r\n        const formControl = group.controls[dateControl];\r\n        if ( minDateValue > dateValue) {\r\n          return formControl.setErrors({invalidDates: true});\r\n        }\r\n      }\r\n      return {}\r\n     }\r\n  }\r\n\r\n  handleDate(event: MatDatepickerInputEvent<Date>) {\r\n    if (!event) {\r\n      this.date.setValue(null);\r\n      this.emitDate.emit(null);\r\n      return;\r\n    }\r\n\r\n    this.date.setValue(event);\r\n    const formattedDate = this.formatDate(new Date(this.date.value));\r\n    this.emitDate.emit(formattedDate);\r\n  }\r\n\r\n  private formatDate(date: Date): string {\r\n    const month = date.getMonth() + 1;\r\n    const day = date.getDate();\r\n    const year = date.getFullYear();\r\n    if (year.toLocaleString().length !== 2 && year.toLocaleString().length !== 5) {\r\n      this.toastService.error(`Enter a valid year. Ex: 'YY' or 'YYYY`);\r\n      this.date.reset();\r\n      return '';\r\n    }\r\n    return `${this.padNumber(month)}/${this.padNumber(day)}/${year}`;\r\n  }\r\n\r\n  private padNumber(value: number): string {\r\n    return value.toString().padStart(2, '0');\r\n  }\r\n}\r\n","<div class=\"table-responsive pt-5\">\r\n  <mat-table [id]=\"tableId\" [dataSource]=\"dataSource\" class=\"w-[100%]\" matSort (matSortChange)=\"sortTable($event)\">\r\n\r\n    <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.columnDef\">\r\n      <ng-container [ngSwitch]=\"column.type\">\r\n\r\n        <ng-container *ngSwitchCase=\"Table.view\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <a [ngClass]=\"viewIcon ? viewIcon : 'uil uil-file'\" class=\"text-xl cursor-pointer\"\r\n                (click)=\"viewEmitter(row, i, column.header)\"></a>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header }} <span *ngIf=\"column?.tooltip\"\r\n              class=\"uil uil-info-circle\" [matTooltip]=\"column?.tooltip\"></span></th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <a [ngClass]=\"viewIcon ? viewIcon : 'uil uil-file'\" class=\"text-xl cursor-pointer\"\r\n                (click)=\"viewEmitter(row, i, column.header)\"></a>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.icon\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"row.displayIcons[column.columnDef]\"\r\n                [ngClass]=\"['uil uil-' + column?.icon, column?.colorClass, column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"iconEmitter(row, i, column.columnDef)\"></p>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }} <span *ngIf=\"column?.tooltip\"\r\n                class=\"uil uil-info-circle\" [matTooltip]=\"column?.tooltip\"></span></th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"row.displayIcons[column.columnDef]\"\r\n                [ngClass]=\"['uil uil-' + column.icon, column?.colorClass, column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"iconEmitter(row, i, column.columnDef)\"></p>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.infoIcon\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"row.displayIcons[column.columnDef] && row[column.columnDef]\"\r\n                [ngClass]=\"['uil uil-' + column?.icon, column?.colorClass, column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"iconEmitter(row, i, column.columnDef)\"></p>\r\n              <span *ngIf=\"row[column.columnDef]\" class=\"inline ml-1\">{{ row[column.columnDef] }}</span>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }} <span *ngIf=\"column?.tooltip\"\r\n                class=\"uil uil-info-circle\" [matTooltip]=\"column?.tooltip\"></span></th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"row.displayIcons[column.columnDef] && row[column.columnDef]\"\r\n                [ngClass]=\"['uil uil-' + column.icon, column?.colorClass, column?.cursorClass]\" class=\"text-xl inline\"\r\n                (click)=\"iconEmitter(row, i, column.columnDef)\"></p>\r\n              <span *ngIf=\"row[column.columnDef]\" class=\"inline ml-1\">{{ row[column.columnDef] }}</span>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.boolIcon\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"lodash.get(row, column.columnDef)\"\r\n                [ngClass]=\"['uil uil-' + column.truthyClass + ' ' + column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\">\r\n                <img *ngIf=\"column.truthyIconUrl\" [src]=\"column.truthyIconUrl\" alt=\"truthy icon\">\r\n              </p>\r\n              <p *ngIf=\"!lodash.get(row, column.columnDef)\"\r\n                [ngClass]=\"['uil uil-' + column.falsyClass + ' ' + column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\">\r\n                <img *ngIf=\"column.falsyIconUrl\" [src]=\"column.falsyIconUrl\" alt=\"falsy icon\">\r\n              </p>\r\n            </td>\r\n          </div>\r\n\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p *ngIf=\"lodash.get(row, column.columnDef)\"\r\n                [ngClass]=\"['uil uil-' + column.truthyClass + ' ' + column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\">\r\n                <img *ngIf=\"column.truthyIconUrl\" [src]=\"column.truthyIconUrl\" alt=\"truthy icon\">\r\n              </p>\r\n              <p *ngIf=\"!lodash.get(row, column.columnDef)\"\r\n                [ngClass]=\"['uil uil-' + column.falsyClass + ' ' + column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\">\r\n                <img *ngIf=\"column.falsyIconUrl\" [src]=\"column.falsyIconUrl\" alt=\"falsy icon\">\r\n              </p>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.actionIcon\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p [ngClass]=\"['uil uil-' + column.icon, column?.colorClass, column?.cursorClass]\" class=\"text-xl\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\"></p>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header ? column.header : '' }}<span *ngIf=\"column?.info\"\r\n              class=\"uil uil-info-circle\" [matTooltip]=\"column?.info\"></span></th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n              <p [ngClass]=\"['uil uil-' + column.icon, column?.colorClass, column?.cursorClass, lodash.get(row, column.columnDef) == true ? 'invisible' : '']\"\r\n              class=\"text-xl text-center\"\r\n                [matTooltip]=\"column?.tooltip\"\r\n                (click)=\"actionIconSelected(row, i, column.action)\"></p>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n\r\n        <ng-container *ngSwitchCase=\"Table.text\">\r\n          <div *ngIf=\"column.isSortable\" class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\" class=\"text-start w-2 truncate\">\r\n              <ng-container *ngIf=\"!column.applyDecimalPipe; else applyPipe\">{{ lodash.get(row, column.columnDef) }}</ng-container> \r\n              <ng-template #applyPipe>{{ lodash.get(row, column.columnDef) | number:'1.2-2'}}</ng-template>\r\n            </td>\r\n          </div>\r\n          <div #notSortable class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\" class=\"w-2 align-top truncate\">\r\n              <ng-container *ngIf=\"!column.applyDecimalPipe; else applyPipe\">{{ lodash.get(row, column.columnDef) }}</ng-container> \r\n              <ng-template #applyPipe>{{ lodash.get(row, column.columnDef) | number:'1.2-2'}}</ng-template>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.textToInput\">\r\n          <div *ngIf=\"column.isSortable\" class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"text-start w-2 truncate\">\r\n              <span *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </span>\r\n              <span *ngIf=\"row.isSelect\">\r\n                <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                  <input placeholder=\"Comment\" matInput type=\"text\" [maxLength]=\"column.maxLength ?? 1000\"\r\n                    [value]=\"lodash.get(row, column.columnDef)\" (change)=\"editEmitter($event, i, column?.action)\">\r\n                </mat-form-field>\r\n              </span>\r\n            </td>\r\n          </div>\r\n          <div #notSortable class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"w-2 align-top truncate\">\r\n              <span *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </span>\r\n              <span *ngIf=\"row.isSelect\">\r\n                <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                  <input placeholder=\"Comment\" matInput type=\"text\" [value]=\"lodash.get(row, column.columnDef)\"\r\n                    (change)=\"editEmitter($event, i, column?.action)\" [maxLength]=\"column.maxLength ?? 1000\">\r\n                </mat-form-field>\r\n              </span>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.textInput\">\r\n          <div *ngIf=\"column.isSortable\" class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"text-start w-2 truncate\">\r\n              <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                <input placeholder=\"Add Comment\" matInput type=\"text\" maxlength=\"150\"\r\n                  [value]=\"lodash.get(row, column.columnDef) ?? ''\" (change)=\"editEmitter($event, i, column?.action)\">\r\n              </mat-form-field>\r\n            </td>\r\n          </div>\r\n          <div #notSortable class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"w-2 align-top truncate\">\r\n              <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                <input placeholder=\"Add Comment\" matInput type=\"text\" maxlength=\"150\"\r\n                  [value]=\"lodash.get(row, column.columnDef) ?? ''\" (change)=\"editEmitter($event, i, column?.action)\">\r\n              </mat-form-field>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.fullDate\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\">{{ lodash.get(row, column.columnDef) | localDate }} </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\">{{ lodash.get(row, column.columnDef) | localDate }} </td>\r\n          </div>\r\n        </ng-container>\r\n        \r\n        <ng-container *ngSwitchCase=\"Table.date\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"break\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\" class=\"break\">{{ lodash.get(row, column.columnDef) | date:\r\n              column.dateFormat ? column.dateFormat : 'MM/dd/yy' }}</td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef class=\"break\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\">{{ lodash.get(row, column.columnDef) | date: column.dateFormat ?\r\n              column.dateFormat : 'MM/dd/yy' }}</td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.bulletList\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\">\r\n              <ul class=\"list-disc\">\r\n                <ng-container *ngFor=\"let items of lodash.get(row, column.columnDef) \">\r\n                  <li>{{items}}</li>\r\n                </ng-container>\r\n              </ul>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef>{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row\">\r\n              <ul class=\"list-disc\">\r\n                <ng-container *ngFor=\"let items of lodash.get(row, column.columnDef)\">\r\n                  <li>{{items}}</li>\r\n                </ng-container>\r\n              </ul>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.checkBox\">\r\n          <th mat-header-cell *matHeaderCellDef [ngClass]=\"{'center-header' : column?.centerHeader}\">\r\n            {{ column.header }}\r\n          </th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <label [for]=\"labelId\" [attr.aria-label]=\"label ? label : 'label'\"\r\n              [ngClass]=\"{ 'mb-4' : labelSpace, 'required' : requiredLabel }\">\r\n              {{ label }}\r\n            </label>\r\n            <input class=\"accent-drdpgrey-200\" [id]=\"labelId\" [attr.aria-label]=\"label ? label : 'input'\"\r\n              [ngClass]=\"column?.checkClass ?? 'checkbox-round'\" type=\"checkbox\"\r\n              [checked]=\"lodash.get(row, column.columnDef)\" (change)=\"checkEmitter(row, i, column.columnDef, $event)\"\r\n              [disabled]=\"column.disabledWhen || column.readOnly ? column.disabledWhen(row) : false\">\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.select\">\r\n          <th mat-header-cell *matHeaderCellDef>{{column.header}}</th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <a *ngIf=\"lodash.get(row, column.columnDef)\" (click)=\"editEmitter(row, i)\"\r\n              [ngClass]=\"column.readOnly ? 'disabled-link' : '' \" class=\"text-xl uil uil-pen cursor-pointer\"></a>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.datepicker\">\r\n          <th mat-header-cell *matHeaderCellDef>{{ column.header }}</th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <span *ngIf=\"row.isSelect\">\r\n              <drdp-date-picker label=\"\" [initialDate]=\"lodash.get(row, column.columnDef)\"\r\n                (emitDate)=\"dateChangeEmitter($event, i, column.columnDef, column?.action, row)\">\r\n              </drdp-date-picker>\r\n            </span>\r\n            <span *ngIf=\"!row.isSelect\" [innerText]=\"lodash.get(row, column.columnDef) | date:'MM/dd/yy'\">\r\n            </span>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.textToSelect\">\r\n          <div *ngIf=\"column.isSortable\" class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"text-start w-2 truncate\">\r\n              <div *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </div>\r\n              <div *ngIf=\"row.isSelect\">\r\n                <mat-select [placeholder]=\"lodash.get(row, column.columnDef)\">\r\n                  <mat-option *ngFor=\"let item of row.items\" [value]=\"item.id\"\r\n                    (click)=\"editEmitter(item, i, column?.action)\">\r\n                    {{ item.name }}\r\n                  </mat-option>\r\n                </mat-select>\r\n              </div>\r\n            </td>\r\n          </div>\r\n          <div #notSortable class=\"w-10\">\r\n            <th mat-header-cell *matHeaderCellDef class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"w-2 align-top truncate\">\r\n              <div *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </div>\r\n              <div *ngIf=\"row.isSelect\">\r\n                <mat-select [placeholder]=\"lodash.get(row, column.columnDef)\">\r\n                  <mat-option *ngFor=\"let item of row.items\" [value]=\"item.id\"\r\n                    (click)=\"editEmitter(item, i, column?.action)\">\r\n                    {{ item.name }}\r\n                  </mat-option>\r\n                </mat-select>\r\n              </div>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.textToDrdpSelect\">\r\n          <div *ngIf=\"column.isSortable\">\r\n            <th id=\"selectColHeader\" mat-header-cell *matHeaderCellDef mat-sort-header class=\"w-2\">{{ column.header }}\r\n            </th>\r\n            <td id=\"selectColCell\" mat-cell *matCellDef=\"let row; let i = index\" class=\"text-start dropdown-width\">\r\n              <div *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </div>\r\n              <div *ngIf=\"row.isSelect\">\r\n                {{column.optionKey}}\r\n                <drdp-filter-select [options]=\"row[column.optionKey]\" [selectType]=\"column.selectType\"\r\n                  (onSelected)=\"editEmitter($event, i, column?.action)\" [initialValues]=\"row[column.initialSelectId]\">\r\n                </drdp-filter-select>\r\n              </div>\r\n            </td>\r\n          </div>\r\n          <div #notSortable>\r\n            <th mat-header-cell *matHeaderCellDef class=\"w-2\">{{ column.header }}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\" class=\"text-start dropdown-width\">\r\n              <div *ngIf=\"!row.isSelect\">\r\n                {{ lodash.get(row, column.columnDef) }}\r\n              </div>\r\n              <div *ngIf=\"row.isSelect\">\r\n                <drdp-filter-select [options]=\"row[column.optionKey]\" [selectType]=\"column.selectType\"\r\n                  (onSelected)=\"editEmitter($event, i, column?.action)\" [initialValues]=\"row[column.initialSelectId]\">\r\n                </drdp-filter-select>\r\n              </div>\r\n            </td>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <!-- table action buttons -->\r\n        <ng-container *ngSwitchCase=\"Table.toggleSwitch\">\r\n          <th mat-header-cell *matHeaderCellDef>{{ column.header }}</th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <mat-slide-toggle color=\"primary\" [disabled]=\"column.readOnly\" [ngModel]=\"lodash.get(row, column.columnDef)\"\r\n              [ngModelOptions]=\"{ standalone: true }\" aria-label=\"Slider Toggle\"\r\n              (change)=\"toggleSwitchEmitter($event, row, i, column.columnDef)\"></mat-slide-toggle>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.add\">\r\n          <th mat-header-cell *matHeaderCellDef></th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <a (click)=\"addEmitter(row, i)\" class=\"text-drdpblue-300 pl-4 text-xl uil uil-plus cursor-pointer\"></a>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.edit\">\r\n          <th mat-header-cell *matHeaderCellDef>Edit</th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <a (click)=\"editEmitter(row, i)\" class=\"text-xl uil cursor-pointer\"\r\n              [ngClass]=\"row.colorClass + ' ' + (row.isSelect ? 'uil-save' : 'uil-pen')\"></a>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container *ngSwitchCase=\"Table.delete\">\r\n          <th mat-header-cell *matHeaderCellDef>Delete</th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <a (click)=\"deleteEmitter(row, i)\" class=\"text-red-700 pl-4 text-xl uil uil-trash-alt cursor-pointer\"></a>\r\n          </td>\r\n        </ng-container>\r\n\r\n        <ng-container>\r\n          <th mat-header-cell *matHeaderCellDef></th>\r\n          <td mat-cell *matCellDef=\"let row; let i = index\">\r\n            <a *ngIf=\"!row.hideIcon\" title=\"{{row.tooltipText}}\" (click)=\"iconEmitter(row, i, column.columnDef)\"\r\n              class=\"text-drdpblue-300 pl-4 text-xl uil {{row.actionIcon}} cursor-pointer\"></a>\r\n          </td>\r\n        </ng-container>\r\n\r\n      </ng-container>\r\n    </ng-container>\r\n\r\n    <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n    <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n\r\n  </mat-table>\r\n\r\n  <div *ngIf=\"dataSource.data?.length == 0\" class=\"w-full p-5 flex justify-center\">\r\n    <h1>\r\n      {{noDataMessage ? noDataMessage : \"There are no records to display\"}}\r\n    </h1>\r\n  </div>\r\n\r\n\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-table',\r\n  templateUrl: './add-edit.component.html',\r\n  styleUrls: ['./add-edit.component.scss'],\r\n})\r\nexport class AddEditComponent implements OnChanges, OnInit {\r\n  lodash = _;\r\n\r\n  @ViewChild(MatSort, { static: true }) matSort!: MatSort;\r\n  @Input() dataSource!: MatTableDataSource<any>;\r\n  @Input() set tableData(data: any[]) {\r\n    this.setTableDataSource(data);\r\n  }\r\n  @Input() label: string = '';\r\n  @Input() labelSpace: boolean = false;\r\n  @Input() columns?: any;\r\n  @Input() applyPipes?: any[];\r\n  @Input() noDataMessage?: string;\r\n  @Input() viewIcon?: string;\r\n  @Input() selectType?: SelectType;\r\n  @Input() selectOptions?: any;\r\n  @Input() tableId: string = 'drdp-table';\r\n  @Input() toggleMsg: string = 'Are you sure you want to switch toggle?';\r\n  @Input() info: string = '';\r\n  @Output() addActionItem = new EventEmitter();\r\n  @Output() editActionItem = new EventEmitter();\r\n  @Output() selectActionItem = new EventEmitter();\r\n  @Output() toggleSwitchActionItem = new EventEmitter();\r\n  @Output() deleteActionItem = new EventEmitter();\r\n  @Output() viewActionItem = new EventEmitter();\r\n  @Output() iconActionItem = new EventEmitter();\r\n  @Output() actionIconClicked = new EventEmitter();\r\n  @Output() dateChange: EventEmitter<MatDatepickerInputEvent<any>> =\r\n    new EventEmitter();\r\n  @Output() editDateItem = new EventEmitter();\r\n  @Output() sort = new EventEmitter();\r\n  displayedColumns: string[] = [];\r\n  requiredLabel: boolean = false;\r\n  labelId: string = '';\r\n\r\n  public get Table() {\r\n    return TableColumnType;\r\n  }\r\n\r\n  constructor(public modal: MatDialog) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.label != '') {\r\n      this.labelId = this.label.replace(/\\s/g, \"\") + new Date().getMilliseconds();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.displayedColumns = this.columns.map(\r\n      (x: { columnDef: string }) => x.columnDef\r\n    );\r\n  }\r\n\r\n  public reRender(data?: any): void {\r\n    if (data) {\r\n      this.dataSource.data = data;\r\n    } else {\r\n      this.dataSource.data = this.tableData;\r\n    }\r\n  }\r\n\r\n  addEmitter(value: any, index: number): void {\r\n    let emitObj = {\r\n      data: value,\r\n      index: index,\r\n    };\r\n    this.addActionItem.emit(emitObj);\r\n  }\r\n\r\n  editEmitter(value: any, index: number, action?: string): void {\r\n    let emitObj = {\r\n      data: value,\r\n      index: index,\r\n      action: action,\r\n    };\r\n    this.editActionItem.emit(emitObj);\r\n  }\r\n\r\n  selectEmitter(item: any, index: number): void {\r\n    let emitObj = {\r\n      data: item,\r\n      index: index,\r\n    };\r\n    this.selectActionItem.emit(emitObj);\r\n  }\r\n\r\n  checkEmitter(value: any, index: number, property: any, event: any): void {\r\n    let emitObj = {\r\n      data: value,\r\n      property: property,\r\n      index: index,\r\n      event: event,\r\n    };\r\n    this.toggleSwitchActionItem.emit(emitObj);\r\n  }\r\n\r\n  toggleSwitchEmitter(event: MatSlideToggleChange, value: any, index: number, property: any): void {\r\n    let emitObj = {\r\n      data: value,\r\n      property: property,\r\n      index: index,\r\n    };\r\n\r\n    if (!property.readOnly && value && !event.source.checked) {\r\n      emitObj.data.modalInfo = {\r\n        title: `Deactivate`,\r\n        message: this.toggleMsg,\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: Modal.Confirm,\r\n        showCancel: true,\r\n      };\r\n\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: emitObj,\r\n      });\r\n\r\n      modalRef.afterClosed().subscribe((res) => {\r\n        if (res) {\r\n          // If the user confirms, emit the event\r\n          event.source.checked = event.checked;\r\n          this.toggleSwitchActionItem.emit(emitObj);\r\n        } else {\r\n          // If the user cancels, revert the toggle state\r\n          event.source.checked = !event.checked;\r\n        }\r\n      });\r\n    } else {\r\n      this.toggleSwitchActionItem.emit(emitObj);\r\n    }\r\n  }\r\n\r\n  deleteEmitter(value: any, index: number): void {\r\n    let emitObj = {\r\n      data: value,\r\n      index: index,\r\n    };\r\n    this.deleteActionItem.emit(emitObj);\r\n  }\r\n\r\n  viewEmitter(value: any, index: number, header: string): void {\r\n    // Emits action/data to parent component ex: MyClassesComponent\r\n    let emitObj = {\r\n      data: value,\r\n      index: index,\r\n      header: header\r\n    };\r\n    this.viewActionItem.emit(emitObj);\r\n  }\r\n\r\n  iconEmitter(data: any, index: number, type: string): void {\r\n    let emitObj = {\r\n      data: data,\r\n      type: type,\r\n      index: index,\r\n    };\r\n    this.iconActionItem.emit(emitObj);\r\n  }\r\n\r\n  actionIconSelected(data: any, index: number, action: string): void {\r\n    if (action) {\r\n      const emitObj = {\r\n        data: data,\r\n        action: action,\r\n        index: index,\r\n      };\r\n      this.actionIconClicked.emit(emitObj);\r\n    }\r\n  }\r\n\r\n  dateChangeEmitter(\r\n    value: any,\r\n    index: number,\r\n    property: string,\r\n    action?: string,\r\n    row?: any\r\n  ) {\r\n    let dateChange = {\r\n      value: value,\r\n      property: property,\r\n      index: index,\r\n      action: action,\r\n      row: row,\r\n    };\r\n\r\n    this.editActionItem.emit(dateChange);\r\n  }\r\n\r\n  setTableDataSource(data: any) {\r\n    this.dataSource = new MatTableDataSource<any>(data);\r\n    this.dataSource.sortingDataAccessor = (\r\n      data: any,\r\n      sortHeaderId: string\r\n    ): string => {\r\n      if (typeof data[sortHeaderId] === 'string') {\r\n        return data[sortHeaderId].toLocaleLowerCase();\r\n      }\r\n      return data[sortHeaderId];\r\n    };\r\n    this.dataSource.sort = this.matSort;\r\n  }\r\n\r\n  sortTable(sortParameters: Sort) {\r\n    // defining name of data property, to sort by, instead of column name\r\n    sortParameters.active = this.columns.find(\r\n      (column: any) => column.header === sortParameters.active\r\n    );\r\n    this.sort.emit(sortParameters);\r\n  }\r\n}\r\n","<div class=\"upload-table-responsive pt-5\">\r\n    <mat-table [dataSource]=\"dataSource\" class=\"w-[100%]\" >\r\n        <ng-container *ngFor=\"let col of columns; let counter = index\" [matColumnDef]=\"col.columnDef\">\r\n            <th mat-header-cell *matHeaderCellDef class=\"text-center\">{{col.data}}</th>\r\n            <td mat-cell *matCellDef=\"let row; let i = index\">\r\n                    <div class=\"w-full inline-block\" (click)=\"setEditableCell(counter,row)\" *ngIf=\"!row.cellValues[counter].isEditable\">{{ row.cellValues[counter].data || '&nbsp;'}} </div>\r\n                    <input \r\n                    [ngClass]=\"{'danger': row.hasError}\"\r\n                    #input \r\n                    *ngIf=\"row.cellValues[counter].isEditable\"\r\n                    (blur)=\"setEditableCell(counter,row)\" \r\n                    class=\"w-full inline-block border-b-2 border-black focus:outline-none focus:border-drdpblue-300\" \r\n                    type=\"text\" \r\n                    name=\"position-{{i}}\" \r\n                    [(ngModel)]=\"row.cellValues[counter].data\"/>\r\n                    \r\n                    \r\n                    <mat-icon \r\n                    matTooltip=\"{{ '&bullet; ' + row.cellValues[counter].errorMessages.join('\\n&bullet; ') }}\"\r\n                    matTooltipPosition = \"right\"\r\n                    *ngIf=\"row.cellValues[counter].errorMessages.length > 0\" \r\n                    class=\"w-full inline-block errorIcon\">error</mat-icon>\r\n\r\n                    <mat-icon \r\n                    matTooltip=\"{{ '&bullet; ' + row.cellValues[counter].warningMessages.join('\\n&bullet; ') }}\"\r\n                    matTooltipPosition = \"right\"\r\n                    *ngIf=\"row.cellValues[counter].warningMessages.length > 0\" \r\n                    class=\"w-full inline-block warningIcon\">warning</mat-icon>\r\n            </td>\r\n        </ng-container>   \r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n        <tr mat-row [ngClass]=\"{'danger': row.hasError}\" *matRowDef=\"let row;let i = index; columns: displayedColumns;\"></tr>\r\n    </mat-table>\r\n</div>","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, QueryList, ViewChildren } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Component({\r\n    selector: 'drdp-upload-table',\r\n    templateUrl: './upload-table.component.html',\r\n    styleUrls: ['./upload-table.component.scss']\r\n  })\r\n  export class UploadTableComponent implements OnChanges, OnInit, AfterViewInit {\r\n    @ViewChildren(\"input\") private input!: QueryList<ElementRef>;\r\n    @Input() dataSource!: MatTableDataSource<any>;\r\n    @Input() columns?: any;\r\n    @Output() onDataChange = new EventEmitter();\r\n    displayedColumns: string[] = []\r\n    subscription!: Subscription \r\n    constructor() { }\r\n  \r\n    ngOnInit(): void {\r\n\r\n    } \r\n\r\n    ngAfterViewInit(): void {\r\n        // Subscribe to the changes of the input elements and focus them\r\n        this.subscription = this.input.changes.subscribe(_ => this.focusTaskInput());\r\n    }\r\n    \r\n    focusTaskInput() {\r\n      if (this.input.length > 0) {\r\n        this.input.first.nativeElement.focus();\r\n      }\r\n    }\r\n\r\n    ngOnChanges(): void {\r\n        if (this.columns)\r\n            this.displayedColumns = this.columns.map((x: { columnDef: string; }) => x.columnDef);       \r\n    }\r\n\r\n    setEditableCell(index: number,row: any): void {\r\n        row.cellValues[index].isEditable = !row.cellValues[index].isEditable;\r\n        this.onDataChange.emit(null);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n      this.subscription.unsubscribe();\r\n    }\r\n}\r\n","<div *ngIf=\"agencyItems\">\r\n  <div\r\n    class=\"flex justify-between items-center py-1.5\"\r\n    role=\"button\"\r\n    (click)=\"dropMenuToggle()\"\r\n  >\r\n    <div class=\"pl-1.5\">\r\n      <p class=\"text-m\">{{ agencyItems.label }}</p>\r\n      <p\r\n        *ngIf=\"agencyItems.labelTwo != undefined\"\r\n        class=\"text-xs text-drdpgrey-200\"\r\n      >\r\n        {{ agencyItems.labelTwo }}\r\n      </p>\r\n    </div>\r\n    <i *ngIf=\"!show\" class=\"uil uil-angle-down text-xl\"></i>\r\n    <i *ngIf=\"show\" class=\"uil uil-angle-up text-xl\"></i>\r\n  </div>\r\n\r\n  <div *ngIf=\"show\" class=\"dropdown-item-holder\">\r\n    <ul>\r\n      <li *ngFor=\"let sublink of sites; let i = index\">\r\n        <div>\r\n          <a class=\"text-xs pl-2\" (click)=\"closeMenu()\">\r\n            <span>{{ sublink.site.siteName }}</span>\r\n          </a>\r\n        </div>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"dropdownItems\">\r\n  <div\r\n    class=\"flex justify-between items-center py-1.5 border-t\"\r\n    role=\"button\"\r\n    (click)=\"dropMenuToggle()\"\r\n    *drdpCheckPermission=\"dropdownItems.permissionId\"\r\n  >\r\n    <div class=\"pl-1.5\">\r\n      <p class=\"text-m\">{{ dropdownItems.item }}</p>\r\n    </div>\r\n    <i\r\n      class=\"uil text-xl\"\r\n      [ngClass]=\"!show ? 'uil-angle-down' : 'uil-angle-up'\"\r\n    ></i>\r\n  </div>\r\n  <div *ngIf=\"show\" class=\"dropdown-item-holder\">\r\n    <ul>\r\n      <li *ngFor=\"let sublink of dropdownItems.childItems; let i = index\">\r\n        <div *drdpCheckPermission=\"sublink.permissionId\">\r\n          <a\r\n            *ngIf=\"sublink.linkRoute\"\r\n            class=\"text-xs text-drdpblue-300 pl-2\"\r\n            [routerLink]=\"sublink.linkRoute\"\r\n            (click)=\"closeMenu()\"\r\n          >\r\n            <span>{{ sublink.item }}</span>\r\n          </a>\r\n          <a\r\n            *ngIf=\"sublink.linkUrl\"\r\n            target=\"_blank\"\r\n            class=\"text-xs text-drdpblue-300 pl-2\"\r\n            [href]=\"sublink.linkUrl\"\r\n            (click)=\"closeMenu()\"\r\n          >\r\n            <span>{{ sublink.item }}</span>\r\n          </a>\r\n        </div>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IDropMenu, IEvent, IMenuItem } from '@core/interfaces/side-menu';\r\n\r\n@Component({\r\n  selector: 'drdp-drop-menu',\r\n  templateUrl: './drop-menu.component.html',\r\n  styleUrls: ['./drop-menu.component.scss'],\r\n})\r\nexport class DropMenuComponent implements OnInit {\r\n  @Input() dropdownItems: IMenuItem | undefined;\r\n  @Input() agencyItems: IDropMenu | undefined;\r\n  @Input() sites: any;\r\n\r\n  @Input() show: boolean = false;\r\n  @Input() menuIndex?: number;\r\n  @Output() selectedItemEvent = new EventEmitter<IEvent>();\r\n  @Output() close = new EventEmitter<boolean>(false);\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  dropMenuToggle() {\r\n    const event: IEvent = {\r\n      indexValue: this.menuIndex,\r\n      showValue: this.show,\r\n    };\r\n    this.selectedItemEvent.emit(event);\r\n  }\r\n\r\n  closeMenu() {\r\n    this.close.emit(true);\r\n  }\r\n}\r\n","<ng-container class=\"contents\">\r\n  <div class=\"col-span-1 z-50\">\r\n    <drdp-select-state [initialStateId]=\"initStateId\" (state)=\"handleState($event)\" [required]=\"true\"\r\n      [clear]=\"clearState\" [disabled]=\"!isSuperUser\">\r\n    </drdp-select-state>\r\n  </div>\r\n  <div class=\"col-span-1 z-50\">\r\n    <drdp-select-agency (agency)=\"handleChosenAgency($event)\" [stateId]=\"stateId.value\" [initialAgencyId]=\"initAgencyId\"\r\n      [required]=\"true\" [clear]=\"clearAgency\" [disabled]=\"!isSuperUser\">\r\n    </drdp-select-agency>\r\n  </div>\r\n  <div class=\"col-span-1 z-50\">\r\n    <drdp-select-rating-period [initialRatingPeriodId]=\"ratingPeriodId.value\" (ratingPeriod)=\"handleChosenRatingPeriod($event)\" [agencyId]=\"agencyId.value\"\r\n                               [required]=\"isDropdownRequired.ratingPeriod\" [omitFutureRps]=\"omitFutureRps\">\r\n    </drdp-select-rating-period>\r\n  </div>\r\n  <div class=\"col-span-1 z-50\">\r\n    <drdp-select-site (site)=\"handleChosenSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"false\" [required]=\"isDropdownRequired.site\"\r\n      [multiSelectInitVals]=\"false\" [clear]=\"clearSite\">\r\n    </drdp-select-site>\r\n  </div>\r\n\r\n  <div class=\"col-span-1 z-40\">\r\n    <drdp-select-class (classroom)=\"handleChosenClassroom($event)\" [siteIds]=\"siteId.value\" [required]=\"isDropdownRequired.classroom\"\r\n              [ratingPeriodId]=\"ratingPeriodId.value\" [multiSelect]=\"false\">\r\n    </drdp-select-class>\r\n  </div>\r\n  <div *ngIf=\"search\" class=\"col-span-1 mt-10 flex items-center\">\r\n    <drdp-btn type=\"submit\" (click)=\"submit()\" class=\"mr-2\">Search</drdp-btn>\r\n    <drdp-btn type=\"button\" (click)=\"clear()\" color=\"outline\">Clear</drdp-btn>\r\n  </div>\r\n</ng-container>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { take } from 'rxjs';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-classroom-rating-period-params',\r\n  templateUrl: './classroom-rating-period-params.component.html',\r\n  styleUrls: ['./classroom-rating-period-params.component.scss'],\r\n})\r\nexport class ClassroomRatingPeriodParamsComponent implements OnInit {\r\n  @Input() search: boolean = false;\r\n  @Input() omitFutureRps: boolean = false;\r\n  @Input() isDropdownRequired = {\r\n    ratingPeriod: false,\r\n    site: false,\r\n    classroom: false\r\n  };\r\n  @Output() formValues = new EventEmitter();\r\n  @Output() searchValues = new EventEmitter();\r\n\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  selectForm: FormGroup | any;\r\n  classroomList: IClassroomAssignment[] = [];\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  select = SelectType;\r\n  clearState = false;\r\n  clearAgency = false;\r\n  clearSite = false;\r\n  isSuperUser: boolean = this.auth.isSuperUser();\r\n\r\n  get stateId() {\r\n    return this.selectForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.selectForm.get('agencyId');\r\n  }\r\n  get siteId() {\r\n    return this.selectForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.selectForm.get('ratingPeriodId');\r\n  }\r\n  get classroomId() {\r\n    return this.selectForm.get('classroomId');\r\n  }\r\n  get ratingPeriodMinDate() {\r\n    return this.selectForm.get('ratingPeriodMinDate');\r\n  }\r\n  get ratingPeriodMaxDate() {\r\n     return this.selectForm.get('ratingPeriodMaxDate');\r\n  }\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private classService: ClassService,\r\n    private toastService: ToastService,\r\n    private fb: FormBuilder\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.selectForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null, [Validators.required]],\r\n      ratingPeriodId: [null],\r\n      siteId: [null],\r\n      classroomId: [null],\r\n      ratingPeriodMinDate: [null],\r\n      ratingPeriodMaxDate: [null]\r\n    });\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state.id);\r\n    this.agencyId.setValue(null);\r\n    this.formValues.emit(this.selectForm.value);\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.formValues.emit(this.selectForm.value);\r\n  }\r\n\r\n  handleChosenSite(site: any): void {\r\n    this.siteId.setValue(site?.id);\r\n    if (this.classroomId.value) this.classroomId.setValue(null);\r\n    this.formValues.emit(this.selectForm.value);\r\n  }\r\n\r\n  handleChosenClassroom(classroom: any): void {\r\n    this.classroomId.setValue(classroom?.id);\r\n    this.formValues.emit(this.selectForm.value);\r\n  }\r\n\r\n  handleChosenRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n    this.ratingPeriodMinDate.setValue(new Date(ratingPeriod.minDate));\r\n    this.ratingPeriodMaxDate.setValue(new Date(ratingPeriod.maxDate));\r\n    if (this.classroomId.value) this.classroomId.setValue(null);\r\n    this.formValues.emit(this.selectForm.value);\r\n  }\r\n\r\n\r\n  clear(): void {\r\n    this.sitesSelect?.clear();\r\n    this.classroomSelect?.clear();\r\n    this.ratingPeriodSelect?.clear();\r\n    this.clearSite = true;\r\n\r\n    if (this.isSuperUser) {\r\n      this.agencySelect?.clear();\r\n      this.stateSelect?.clear();\r\n      this.clearState = true;\r\n      this.clearAgency = true;\r\n    }\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.selectForm.invalid) {\r\n      this.toastService.error('Please enter all required fields. ');\r\n      return;\r\n    }\r\n    this.searchValues.emit(this.selectForm.value);\r\n  }\r\n}\r\n","<div>\r\n  <label *ngIf=\"label.length > 0\" class=\"font-bold\" [class]=\"additionalClasses\" [ngClass]=\"{'required': required}\">\r\n    {{ label }} <span *ngIf=\"tooltip\" class=\"uil uil-info-circle\" [matTooltip]=\"tooltip\"></span>\r\n  </label>\r\n\r\n  <mat-form-field appearance=\"fill\" class=\"drdp-input filter\">\r\n    <mat-select panelClass=\"filter-select\" [compareWith]=\"compareWith\" [formControl]=\"selectedOptionControl\"\r\n      [ngClass]=\"{'border-drdpblue-300': isValid, 'invalid': !isValid}\" [multiple]=\"multiSelect\"\r\n      [placeholder]=\"selectLabel\" [value]=\"selected\" [disabled]=\"disabled\" (closed)=\"onClose()\">\r\n\r\n      <div class=\"flex flex-row m-3 mb-5 px-2 rounded-lg border-drdpblue-300 border\">\r\n        <label for=\"filterInput\">Filter: </label>\r\n        <input matInput type=\"text\" [(ngModel)]=\"filterText\" (keydown)=\"$event.stopPropagation()\" (keyup)=\"onFilterChange($event)\">\r\n      </div>\r\n\r\n      <div *ngIf=\"multiSelect\" class=\"m-3 mb-5 flex flex-row justify-between\">\r\n        <drdp-btn color=\"defaultNoMargins\" (click)=\"toggleOption(true)\" type=\"button\">Check All</drdp-btn>\r\n        <drdp-btn color=\"defaultNoMargins\" (click)=\"toggleOption(false)\" type=\"button\">Clear All</drdp-btn>\r\n      </div>\r\n\r\n      <mat-select-trigger *ngIf=\"multiSelect\">\r\n        Selected {{overrideLabel ? overrideLabel : label}}: {{selected.length}}\r\n      </mat-select-trigger>\r\n\r\n      <mat-option *ngFor=\"let item of itemsInPage[pageIndex]\" [value]=\"item\" (click)=\"handleOption(item)\"\r\n        class=\"smaller\">\r\n        <span [matTooltip]=\"tooltipActive ? item.name : ''\">\r\n          {{ item.name }}</span>\r\n      </mat-option>\r\n\r\n      <div class=\"w-60\">\r\n        <mat-paginator [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\" [hidePageSize]=\"true\"\r\n          (page)=\"page()\">\r\n        </mat-paginator>\r\n      </div>\r\n\r\n    </mat-select>\r\n  </mat-form-field>\r\n</div>\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-filter-select',\r\n  templateUrl: './filter-select.component.html',\r\n  styleUrls: ['./filter-select.component.scss'],\r\n})\r\nexport class FilterSelectComponent implements OnInit {\r\n  private eventsSubscription?: Subscription;\r\n  @ViewChild('select', { read: ElementRef }) selectElement:\r\n    | ElementRef\r\n    | undefined;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @Input() label = '';\r\n  @Input() tooltip: string | undefined;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() options: any;\r\n  @Input() selectType: SelectType | undefined;\r\n  @Input() search?: Observable<boolean>;\r\n  @Input() initialValues?: any = this.multiSelect ? [] : null; //should be used for both single and multi\r\n  @Input() required = false;\r\n  @Input() disabled = false;\r\n  @Input() isValid = true;\r\n  @Input() additionalClasses = '';\r\n  @Input() tooltipActive = false;\r\n  @Output() onSelected = new EventEmitter();\r\n  @Input() overrideLabel: string | null = null;\r\n  @Input() showPilot?: boolean = false;\r\n\r\n  selected: any = [];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData: number = 0;\r\n  itemsInPage: any[] = [];\r\n  selectable: ISelectable[] = [];\r\n  filterText: string = '';\r\n  selectFormGroup: FormGroup | any;\r\n\r\n  get selectedOptionControl() {\r\n    return this.selectFormGroup.get('selectedOptionControl');\r\n  }\r\n\r\n  public get selectLabel() {\r\n    if (this.options?.length < 1) {\r\n      let newLabel = this.label;\r\n      let pluralSuffix = this.label.endsWith('s') ? '' : 's';\r\n      if (this.label.endsWith('y')) {\r\n        pluralSuffix = 'ies';\r\n        newLabel = this.label.slice(0, -1);\r\n      }\r\n      return `No ${newLabel}${pluralSuffix} available`;\r\n    } else if (this.multiSelect && this.initialValues?.length > 0) {\r\n      return `Selected ${ this.label }: ${this.initialValues?.length}`;\r\n    } else {\r\n      return this.overrideLabel ? `Select ${this.overrideLabel}` : `Select ${this.label}`;\r\n    }\r\n  }\r\n\r\n  constructor(private fb: FormBuilder) {}\r\n\r\n  ngOnInit(): void {\r\n    this.eventsSubscription = this.search?.subscribe((clear) =>\r\n      this.clearSearch(clear)\r\n    );\r\n    this.selectFormGroup = this.fb.group({\r\n      selectedOptionControl: [this.initialValues],\r\n    });\r\n  }\r\n\r\n  clearSelected() {\r\n    this.selected = this.multiSelect ? [] : null;\r\n    this.filterText = '';\r\n    this.filterOptions(this.filterText);\r\n    this.selectedOptionControl.setValue(this.selected);\r\n    this.onSelected.emit(this.selected);\r\n  }\r\n\r\n  clear(): void {\r\n    this.selected = [];\r\n    this.filterText = '';\r\n    this.filterOptions(this.filterText);\r\n  }\r\n\r\n  clearAll(): void {\r\n    this.selected = this.multiSelect ? [] : null;\r\n    this.filterText = '';\r\n    this.filterOptions(this.filterText);\r\n  }\r\n\r\n  clearSearch(clearSearch: boolean): void {\r\n    if (clearSearch) {\r\n      this.clear();\r\n      this.clearAll();\r\n    }\r\n  }\r\n\r\n  clearFilter(): void {\r\n    this.filterText = '';\r\n    this.filterOptions(this.filterText);\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    if (this.options) {\r\n      this.toSelectable();\r\n      this.totalData = this.selectable.length;\r\n      this.filterOptions(this.filterText);\r\n\r\n      if ((this.initialValues === 0 || this.initialValues) && this.selectable.length > 0) {\r\n        if (this.multiSelect) {\r\n          if (Array.isArray(this.initialValues) && this.selected.length > 0) {\r\n            const idsExistInObjects = this.initialValues.some((id) =>\r\n              this.selectable.some((obj) => obj.id === id)\r\n            );\r\n            if (idsExistInObjects)\r\n              this.goToDefaultItemPage(this.initialValues[0]);\r\n          }\r\n\r\n          this.selected = this.selectable.filter((x) =>\r\n            this.initialValues.includes(x.id)\r\n          );\r\n          this.selectedOptionControl.setValue(this.selected);\r\n        } else {\r\n          let index = this.selectable.findIndex(\r\n            (s) => s.id === this.initialValues\r\n          );\r\n          if (index > 0) this.goToDefaultItemPage(this.initialValues);\r\n          this.selected = this.selectable.filter(\r\n            (x) => x.id == this.initialValues\r\n          )[0];\r\n          this.selectedOptionControl.setValue(this.selected);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  goToDefaultItemPage(itemId: number): void {\r\n    var itemPosition = this.selectable.findIndex((s) => s.id === itemId) + 1;\r\n    var pageNumber = Math.ceil(itemPosition / this.pageSize);\r\n    this.pageIndex = pageNumber - 1;\r\n  }\r\n\r\n  toSelectable(): void {\r\n    let selectName = '';\r\n\r\n    if (this.selectType) {\r\n      selectName = this.selectType;\r\n\r\n      this.selectable = this.options.map((item: any) => {\r\n        return <ISelectable>{\r\n          id: item.id,\r\n          name: item[selectName],\r\n          type: this.selectType,\r\n          ...(this.showPilot && { isPilot: item.isPilot ?? null })\r\n        };\r\n      });\r\n    }\r\n  }\r\n\r\n  onFilterChange(event: KeyboardEvent) {\r\n    const input = event.target as HTMLInputElement;\r\n    const inputValue = input.value;\r\n    this.filterOptions(inputValue);\r\n  }\r\n\r\n  filterOptions(value: string) {\r\n    const keyword = value.toUpperCase();\r\n    const filteredOptions = this.selectable.filter((x: any) =>\r\n        x.name && x.name.toUpperCase().includes(keyword)\r\n    );\r\n\r\n    this.pageIndex = 0;\r\n    this.totalData = filteredOptions.length;\r\n    this.itemsInPage = this.paginate(filteredOptions);\r\n\r\n    // if (this.selected && this.selected.length > 0) {}\r\n    //   this.selected = this.selectable.filter((x) =>\r\n    //     this.selected.map((x: { id: number }) => x.id).includes(x.id)\r\n    //   );\r\n  }\r\n\r\n  toggleOption(selected: boolean) {\r\n    if (selected) {\r\n      this.selected = [...this.selectable];\r\n      this.selectedOptionControl.setValue(this.selected);\r\n    } else {\r\n      this.selected = [];\r\n      this.selectedOptionControl.setValue(this.selected);\r\n    }\r\n    this.onSelected.emit(this.selected);\r\n  }\r\n\r\n  compareWith(a: unknown, b: unknown): boolean {\r\n    if (!a || !b) return false;\r\n    return JSON.stringify(a) === JSON.stringify(b);\r\n  }\r\n\r\n  paginate(selectables: ISelectable[]) {\r\n    return selectables.reduce(\r\n      (arr: any, items: any, i: number) =>\r\n        (i % this.pageSize\r\n          ? arr[arr.length - 1].push(items)\r\n          : arr.push([items])) && arr,\r\n      []\r\n    );\r\n  }\r\n\r\n  page(): void {\r\n    this.pageIndex = this.paginator.pageIndex;\r\n\r\n    // if (this.selected && this.selected.length > 0)\r\n    //   this.selected = this.selectable.filter((x) =>\r\n    //     this.selected.map((x: { id: number }) => x.id).includes(x.id)\r\n    //   );\r\n  }\r\n\r\n  handleOption(item: any) {\r\n    let selectedOption = this.selectable.find((s) => s.id == item.id);\r\n    if (this.multiSelect) {\r\n      const itemIndex = this.selected.indexOf(selectedOption);\r\n      if (itemIndex !== -1) {\r\n        this.selected.splice(itemIndex, 1);\r\n      } else {\r\n        this.selected.push(selectedOption);\r\n      }\r\n      this.selectedOptionControl.setValue(this.selected);\r\n    } else {\r\n      if (this.selected && item.id === this.selected.id) {\r\n        this.selected = null;\r\n        this.selectedOptionControl.setValue(this.selected);\r\n        this.clearFilter();\r\n      } else {\r\n        this.selected = selectedOption;\r\n        this.selectedOptionControl.setValue(this.selected);\r\n      }\r\n    }\r\n\r\n    this.onSelected.emit(this.selected);\r\n  }\r\n\r\n  onClose() {\r\n    this.filterText = '';\r\n    this.filterOptions(this.filterText);\r\n    if (this.multiSelect) {\r\n      if (\r\n        this.selected &&\r\n        Array.isArray(this.selected) &&\r\n        this.selected.length > 0\r\n      ) {\r\n        this.goToDefaultItemPage(this.selected[0].id);\r\n      }\r\n    } else {\r\n      if (this.selected) {\r\n        let id =\r\n          Array.isArray(this.selected) && this.selected.length > 0\r\n            ? this.selected[0].id\r\n            : this.selected.id;\r\n\r\n        if (id) {\r\n          this.goToDefaultItemPage(id);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.eventsSubscription?.unsubscribe();\r\n  }\r\n}\r\n","<div>\r\n    <label *ngIf=\"label.length > 0\" class=\"font-bold\" [ngClass]=\"{'required': required}\">\r\n      {{ label }}\r\n    </label>\r\n\r\n    <mat-form-field appearance=\"fill\" class=\"drdp-input filter\">\r\n      <mat-select panelClass=\"group-select\"\r\n                 [ngClass]=\"{'border-drdpblue-300': isValid, 'invalid': !isValid}\"\r\n                 [multiple]=\"multiSelect\"\r\n                 [placeholder]=\"selectLabel\"\r\n                 [value]=\"selected\"\r\n                 [disabled]=\"disabled\"\r\n                 [compareWith]=\"compareWith\"\r\n                 [formControl]=\"optionControl\">\r\n\r\n        <div *ngIf=\"isFilter\" class=\"flex flex-row m-3 mb-5 px-2 rounded-lg border-drdpblue-300 border\">\r\n          <label for=\"filterInput\">Filter: </label>\r\n          <input matInput type=\"text\" [(ngModel)]=\"filterText\" (keydown)=\"$event.stopPropagation()\" (keyup)=\"onFilterChange($event)\">\r\n        </div>\r\n\r\n        <mat-select-trigger *ngIf=\"multiSelect\">\r\n          Selected {{label}}: {{selected.length}}\r\n        </mat-select-trigger>\r\n\r\n        <ng-container *ngIf=\"!isFilter\">\r\n          <ng-container *ngFor=\"let group of options?.data\">\r\n            <ng-container *ngIf=\"group.options.length > 0\">\r\n              <mat-optgroup [label]=\"group.name\">\r\n                <mat-option *ngFor=\"let item of group.options\"\r\n                [value]=\"item.id\" class=\"smaller\"\r\n                (click)=\"handleOption(item)\"\r\n                >\r\n                  {{ item.name }}\r\n                </mat-option>\r\n              </mat-optgroup>\r\n            </ng-container>\r\n          </ng-container>\r\n        </ng-container>\r\n\r\n        <ng-container *ngIf=\"isFilter\">\r\n          <ng-container >\r\n            <ng-container *ngIf=\"paginatedFilteredOptions?.data[pageIndex].options?.length > 0\">\r\n              <mat-optgroup [label]=\"paginatedFilteredOptions?.data[pageIndex].name\">\r\n                <mat-option *ngFor=\"let item of paginatedFilteredOptions?.data[pageIndex].options\"\r\n                  [value]=\"item.id\" class=\"smaller\"\r\n                  (click)=\"handleOption(item)\">\r\n                {{ item.name }}\r\n              </mat-option>\r\n            </mat-optgroup>\r\n          </ng-container>\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n        <div class=\"w-60\">\r\n          <mat-paginator [pageSize]=\"pageSize\" [length]=\"totalData\" [hidePageSize]=\"true\"\r\n          (page)=\"page($event)\">\r\n          </mat-paginator>\r\n        </div>\r\n\r\n      </mat-select>\r\n    </mat-form-field>\r\n</div>\r\n","import { Component, ViewChild, OnInit, ElementRef, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { IRegionType } from '@core/interfaces/iregion-type';\r\nimport { States } from '@core/enums/states';\r\nimport { RegionType } from '@core/enums/data-type';\r\nimport { ISelectableGroups } from '@core/interfaces/iselectable';\r\n\r\n@Component({\r\n  selector: 'drdp-group-select',\r\n  templateUrl: './group-select.component.html',\r\n  styleUrls: ['./group-select.component.scss']\r\n})\r\n\r\nexport class GroupSelectComponent implements OnInit {\r\n  private eventsSubscription?: Subscription;\r\n  @ViewChild('select', { read: ElementRef }) selectElement: ElementRef | undefined;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @Input() label = 'Entity';\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() options?: ISelectableGroups;\r\n  @Input() initialValues?: any = this.multiSelect ? [] : null;\r\n  @Input() required = false;\r\n  @Input() disabled = false;\r\n  @Input() isValid = true;\r\n  @Output() onSelected = new EventEmitter();\r\n  @Output() onNewPage = new EventEmitter();\r\n  selected: number[] = [];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData: number = 0;\r\n  groupForm: FormGroup | any;\r\n  filterText: string = '';\r\n  isFilter: boolean = false;\r\n  nhOptions: IRegionType[] = [];\r\n  paginatedFilteredOptions: any;\r\n  public get selectLabel() {\r\n    if (this.multiSelect) {\r\n      if (this.initialValues && this.initialValues.length > 0) {\r\n        return `Selected ${this.label}: ${this.initialValues.length}`;\r\n      }\r\n      return `Select ${this.label}`;\r\n    }\r\n    return `Select a ${this.label}`\r\n  }\r\n  get optionControl() { return this.groupForm.get('optionControl') }\r\n  constructor(private fb: FormBuilder, private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.groupForm = this.fb.group({\r\n      optionControl: [this.initialValues]\r\n    });\r\n  }\r\n\r\n  getNHRegionTypes(): void {\r\n    this.lookupService.getNHRegionTypes().subscribe((regionTypes: IRegionType[]) => {\r\n        this.nhOptions = regionTypes;\r\n      this.paginateData(this.nhOptions);\r\n    });\r\n  }\r\n\r\n  canFilter(data: any) {\r\n    return data.some((item: any) => {\r\n      return item.options && item.options.some((option: any) => {\r\n        return option.regionGroup && option.regionGroup.stateId === States.newHampshire;\r\n      });\r\n    });\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    if (this.options) {\r\n        this.isFilter = this.canFilter(this.options.data);\r\n        if (this.isFilter) this.getNHRegionTypes();\r\n        this.totalData = this.options.totalData;\r\n      if (this.initialValues) {\r\n        this.selected = this.initialValues;\r\n        this.optionControl.setValue(this.selected);\r\n      }\r\n    }\r\n  }\r\n\r\n  compareWith(a: unknown, b: unknown): boolean {\r\n    if (!a || !b) return false;\r\n    return JSON.stringify(a) === JSON.stringify(b);\r\n  }\r\n\r\n  page(event: any): void {\r\n    if (this.isFilter) {\r\n        this.pageIndex = this.paginator.pageIndex;\r\n    } else {\r\n        this.pageIndex = event.pageIndex + 1;\r\n        this.onNewPage.emit({pageIndex: this.pageIndex, pageSize: this.pageSize});\r\n    }\r\n  }\r\n\r\n  handleOption(item: any) {\r\n    if (this.options) {\r\n      if (this.multiSelect) {\r\n        const itemIndex = this.selected.indexOf(item.id);\r\n        if (itemIndex !== -1) {\r\n          this.selected.splice(itemIndex, 1);\r\n        } else {\r\n          this.selected.push(item.id);\r\n        }\r\n      } else {\r\n        this.selected = item;\r\n      }\r\n      this.optionControl.setValue(this.selected);\r\n      this.onSelected.emit(this.selected);\r\n    }\r\n  }\r\n\r\n  onFilterChange(event: KeyboardEvent) {\r\n    const input = event.target as HTMLInputElement;\r\n    const inputValue = input.value;\r\n    this.filterOptions(inputValue);\r\n  }\r\n\r\n  filterOptions(value: string): void {\r\n    this.pageIndex = 0;\r\n    const keyword = value.toUpperCase();\r\n    const filteredOptions = this.nhOptions.filter((x: any) =>\r\n      x.name && x.name.toUpperCase().includes(keyword.toUpperCase())\r\n    );\r\n    this.totalData = filteredOptions.length;\r\n    this.paginateData(filteredOptions);\r\n  }\r\n\r\n  paginateData(data: IRegionType[]): any {\r\n    const totalData = data.length;\r\n    const totalPages = Math.ceil(totalData / this.pageSize);\r\n    const paginatedData: any = [];\r\n    let paged: any = [];\r\n\r\n    for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) {\r\n      const startIdx = (pageIndex)  * this.pageSize;\r\n      const endIdx = (pageIndex + 1) * this.pageSize;\r\n      const pageData = data.slice(startIdx, endIdx);\r\n\r\n      const paginationResult = {\r\n        name: RegionType.SAU,\r\n        options: pageData,\r\n        pageIndex,\r\n        totalData,\r\n        totalPages,\r\n      };\r\n      paged.push(paginationResult);\r\n    }\r\n    paginatedData.data = paged;\r\n\r\n    this.paginatedFilteredOptions = paginatedData;\r\n    return paginatedData;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.eventsSubscription?.unsubscribe();\r\n  }\r\n}\r\n\r\n\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { Subject, switchMap, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-age-grade',\r\n  templateUrl: './select-age-grade.component.html',\r\n  styleUrls: ['./select-age-grade.component.scss'],\r\n})\r\nexport class SelectAgeGradeComponent implements OnInit {\r\n  @ViewChild('ageGradeSelect') ageGradeSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() ageGrade = new EventEmitter<any>();\r\n  @Input() initialageGradeId?: number | null;\r\n  @Input() stateId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() multiSelectInitVals: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Age Group/ Instrument';\r\n  @Input() isPilot: boolean = false;\r\n  @Input() tooltip: string = '';\r\n\r\n  private ageGrades$ = new Subject<void>();\r\n  private destroy$ = new Subject<void>();\r\n\r\n  ageGradeOptions: IAgeGradeInstrument[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getAgeGradeOptions();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.ageGradeSelect?.clearSearch(true);\r\n    }\r\n\r\n    if (changes['stateId'] || changes['isPilot']) this.getAgeGradeOptions();\r\n  }\r\n\r\n  getAgeGradeOptions(): void {\r\n    this.ageGrades$.next();\r\n    this.ageGrades$\r\n      .pipe(\r\n        switchMap(() => {\r\n          if (this.isPilot) return this.lookupService.getPilotAgeGrade();\r\n          else return this.lookupService.getAgeGradeInstruments(this.stateId || 0);\r\n        }),\r\n        takeUntil(this.destroy$)\r\n      ).subscribe((res: IAgeGradeInstrument[]) => {\r\n        this.ageGradeOptions = res;\r\n      });\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.ageGradeSelect?.clearSelected();\r\n  }\r\n\r\n  onAgeGradeSelect(event: number[]): void {\r\n    this.ageGrade.emit(event);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #ageGradeSelect [label]=\"label\" [multiSelect]=\"multiSelect\" [options]=\"ageGradeOptions\"\r\n    [selectType]=\"select.AgeInstrument\" [required]=\"required\" [disabled]=\"disabled\" [isValid]=\"isValid\"\r\n    (onSelected)=\"onAgeGradeSelect($event)\" [initialValues]=\"initialageGradeId\" [tooltip]=\"tooltip\">\r\n  </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { BehaviorSubject, Subject, filter, switchMap, take, takeUntil, tap } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-agency',\r\n  templateUrl: './select-agency.component.html',\r\n  styleUrls: ['./select-agency.component.scss'],\r\n})\r\nexport class SelectAgencyComponent implements OnInit, OnChanges {\r\n  private destroy$ = new Subject<void>();\r\n  private stateId$ = new BehaviorSubject<number>(this.stateId!);\r\n\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @Output() agency = new EventEmitter<any>();\r\n  @Input() initialAgencyId?: number | null;\r\n  @Input() initialAgencyIds?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() stateId?: number | null; // Used for both single or multi select\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() isEditDropdown: boolean = false;\r\n  @Input() isPilot: boolean = false;\r\n  agencyOptions?: IAgency[] = [];\r\n  selectedState?: number;\r\n  selectedAgency?: number;\r\n  hasAccessToAll = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  hasAccessToAssigned = this.permissionService.checkPermission(\r\n    Permission.AccessAssignedStateAgencies\r\n  );\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(\r\n    private agencyService: AgencyService,\r\n    private permissionService: PermissionService,\r\n    private authService: AuthService\r\n  ) {\r\n    this.stateId$\r\n    .pipe(\r\n      filter((stateId) => !!stateId),\r\n      switchMap((stateId) => {\r\n        let stateIds = Array.isArray(stateId) ? stateId : [stateId];\r\n        return this.agencyService.getAgenciesByState(stateIds, this.isPilot);\r\n      }),\r\n      tap((_) => {\r\n        if (this.hasAccessToAssigned) {\r\n          if (this.isEditDropdown) this.disabled = false;\r\n        }\r\n      }),\r\n      takeUntil(this.destroy$)\r\n    )\r\n    .subscribe((agencies: IAgency[]) => {\r\n      this.agencyOptions = agencies;\r\n      this.disabled = (this.agencyOptions.length <= 1 && !this.selectedAgency && this.hasAccessToAssigned) && !this.multiSelect; //disable if there's no option or only one option\r\n      this.handleStateChange();\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.hasAccessToAll && !this.hasAccessToAssigned) {\r\n      const user = this.authService.getCurrentUser();\r\n      this.getLinkedAgencies(user.userId);\r\n    }\r\n  }\r\n\r\n  getAgencyByState(stateId: number) {\r\n    this.stateId$.next(stateId);\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.agencySelect?.clearSelected();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear && !this.disabled) {\r\n      this.agencySelect?.clearSearch(true);\r\n    }\r\n\r\n    // if (this.hasAccessToAll || this.hasAccessToAssigned) {\r\n    if (changes['stateId']) {\r\n      this.getAgencyOptions(changes);\r\n    }\r\n  }\r\n\r\n  refreshList() {\r\n    if (this.stateId) this.getAgencyByState(this.stateId);\r\n  }\r\n\r\n  getAllAgencies() {\r\n    this.agencyService\r\n      .getAllAgencies()\r\n      .pipe(\r\n        take(1),\r\n        tap((_) => {\r\n          if (this.hasAccessToAssigned) {\r\n            if (this.isEditDropdown) this.disabled = false;\r\n          }\r\n        })\r\n      )\r\n      .subscribe((agencies: IAgency[]) => {\r\n        this.agencyOptions = agencies;\r\n        this.disabled = (this.agencyOptions.length <= 1 && !this.selectedAgency && this.hasAccessToAssigned) && !this.multiSelect; //disable if there's no option or only one option\r\n      });\r\n  }\r\n\r\n  getLinkedAgencies(userId: number): void {\r\n    this.agencyService\r\n      .getLinkedAgencies(userId)\r\n      .pipe(take(1))\r\n      .subscribe((agencies: IAgency[]) => {\r\n        this.agencyOptions = agencies;\r\n        this.disabled = (this.agencyOptions.length <= 1 && !this.selectedAgency) && !this.multiSelect; //disable if there's no option or only one option\r\n      });\r\n  }\r\n\r\n  getAgencyOptions(changes: SimpleChanges): void {\r\n    if (\r\n      (changes['stateId'] ||\r\n        changes['initialAgencyId'] ||\r\n        changes['initialAgencyIds']) &&\r\n      this.stateId &&\r\n      (this.hasAccessToAssigned || this.hasAccessToAll)\r\n    ) {\r\n      this.getAgencyByState(this.stateId);\r\n    } else if (this.stateId == 0 && this.hasAccessToAll) {\r\n      this.getAllAgencies();\r\n    } else {\r\n      this.agencyOptions = [];\r\n      this.disabled = true;\r\n    }\r\n  }\r\n\r\n  handleStateChange(): void {\r\n    const agency = this.agencyOptions?.find(\r\n      (a: IAgency) => a.id == this.initialAgencyId\r\n    );\r\n    if (agency !== null) {\r\n      this.agency.emit(agency);\r\n    }\r\n  }\r\n\r\n  onAgencySelect(event: IAgency): void {\r\n    this.agency.emit(event);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #agencySelect label=\"Agency\" [multiSelect]=\"multiSelect\" [options]=\"agencyOptions\"\r\n    [selectType]=\"select.Agencies\" [required]=\"required\" [disabled]=\"disabled\" (onSelected)=\"onAgencySelect($event)\"\r\n    [isValid]=\"isValid\" [initialValues]=\"initialAgencyId || initialAgencyIds\">\r\n  </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { take } from 'rxjs';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\nimport { IClassSearchRequest, IClassroomAssignment } from '@core/interfaces/iclasses';\r\n\r\n@Component({\r\n  selector: 'drdp-select-class',\r\n  templateUrl: './select-class.component.html',\r\n  styleUrls: ['./select-class.component.scss'],\r\n})\r\nexport class SelectClassComponent implements OnInit {\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() classroom = new EventEmitter<any>();\r\n  @Input() initialClassroomIds?: number[] | null;\r\n  @Input() siteIds?: number[] | null;\r\n  @Input() ratingPeriodId?: number | null;\r\n  @Input() globalRatingPeriodId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() multiSelectInitVals: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Classroom';\r\n  @Input() useClassroomId?: boolean = false;\r\n  @Input() showPilotClasses?: boolean =  false;\r\n  @Input() showPilot: boolean = false;\r\n  @Input() includePilotClasses: boolean = true;\r\n  classroomOptions: any[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private classService: ClassService) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.siteIds && this.siteIds.length > 0 && (this.ratingPeriodId || this.globalRatingPeriodId)) \r\n      this.getClasses(this.siteIds);\r\n  }\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.classroomSelect?.clearAll();\r\n      } else {\r\n        this.classroomSelect?.clearSelected();\r\n      }\r\n    }\r\n\r\n    if (changes['siteIds'] && this.siteIds) {\r\n      this.siteIds = Array.isArray(this.siteIds)\r\n        ? this.siteIds\r\n        : [Number(this.siteIds)];\r\n    }\r\n\r\n    if (this.siteIds && this.siteIds.length > 0 && (this.ratingPeriodId || this.globalRatingPeriodId)) {\r\n      this.getClasses(this.siteIds);\r\n    } else {\r\n      this.classroomOptions = [];\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.classroomSelect?.clearSelected();\r\n  }\r\n\r\n  getClasses(sites: number[]): void {\r\n  const classesObservable = this.globalRatingPeriodId \r\n    ? this.classService.getClassesBySitesAndGlobalRatingPeriods(this.createClassSearchPayload(true)) \r\n    : this.classService.getClassesBySitesAndRatingPeriod(this.createClassSearchPayload());\r\n\r\n  classesObservable.pipe(take(1)).subscribe((res: any) => {\r\n    if (this.globalRatingPeriodId) {\r\n      res = res.filter(\r\n        (value: any, index: any, self: any) =>\r\n          index === self.findIndex((t: any) => t.classroomId === value.classroomId) \r\n          && (this.includePilotClasses || !value.isPilot)\r\n      );\r\n    };\r\n    res = this.showPilotClasses \r\n      ? res.filter((c: IClassroomAssignment) => c.isPilot) \r\n      : res.filter((c: IClassroomAssignment) => this.includePilotClasses || !c.isPilot);\r\n    this.classroomOptions = mapClassResToDRDPSelect(res, this.useClassroomId, this.showPilot ?? false);\r\n  });\r\n  }\r\n\r\n  createClassSearchPayload(globalRatingPeriod: boolean = false): IClassSearchRequest {\r\n    const requestPayload: IClassSearchRequest = {\r\n      siteIds: this.siteIds ?? null,\r\n      itemsPerPage: 10,\r\n    };\r\n    if (globalRatingPeriod) requestPayload.globalRatingPeriodId = this.globalRatingPeriodId ?? null;\r\n    else requestPayload.ratingPeriodId = this.ratingPeriodId ?? null;\r\n    return requestPayload;\r\n  }\r\n\r\n  onClassroomSelect(event: number[]): void {\r\n    this.classroom.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select \r\n      #classroomSelect\r\n      [label]=\"label\"\r\n      [multiSelect]=\"multiSelect\" \r\n      [options]=\"classroomOptions\" \r\n      [selectType]=\"select.Class\"\r\n      [required]=\"required\" \r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"onClassroomSelect($event)\"\r\n      [initialValues]=\"initialClassroomIds\"\r\n      [showPilot]=\"showPilot\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { take } from 'rxjs';\r\nimport { IClassSearchRequest } from '@core/interfaces/iclasses';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\n\r\n@Component({\r\n  selector: 'drdp-select-classroom',\r\n  templateUrl: './select-classroom.component.html',\r\n  styleUrls: ['./select-classroom.component.scss'],\r\n})\r\nexport class SelectClassroomComponent implements OnInit {\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() classroom = new EventEmitter<any>();\r\n  @Input() initialClassroomIds?: number[] | null;\r\n  @Input() ratingPeriodId?: number | null;\r\n  @Input() siteIds?: number[] | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() multiSelectInitVals: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Classroom';\r\n  @Input() useClassroomId?: boolean = false;\r\n  @Input() isPilot?: boolean = false;\r\n  classroomOptions: any[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private classroomService: ClassroomService) {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear || this.initialClassroomIds === null) {\r\n      if (this.multiSelect) {\r\n        this.classroomSelect?.clearAll();\r\n      } else {\r\n        this.classroomSelect?.clearSelected();\r\n      }\r\n    }\r\n\r\n    if (changes['siteIds'] && this.siteIds) {\r\n      this.siteIds = Array.isArray(this.siteIds)\r\n        ? this.siteIds\r\n        : [Number(this.siteIds)];\r\n    }\r\n\r\n    if (this.siteIds && this.siteIds.length > 0) {\r\n      this.getClasses();\r\n    } else {\r\n      this.classroomOptions = [];\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.classroomSelect?.clearSelected();\r\n  }\r\n\r\n  getClasses(): void {\r\n    this.classroomService\r\n      .getClassroomsBySites(this.createClassSearchPayload())\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.classroomOptions = mapClassResToDRDPSelect(\r\n          res,\r\n          this.useClassroomId,\r\n          this.isPilot\r\n        );\r\n      });\r\n  }\r\n\r\n  createClassSearchPayload(): IClassSearchRequest {\r\n    return {\r\n      siteIds: this.siteIds?.length ? this.siteIds : null,\r\n      ratingPeriodId: this.ratingPeriodId ? this.ratingPeriodId : null,\r\n      itemsPerPage: 10,\r\n    };\r\n  }\r\n\r\n  onClassroomSelect(event: number[]): void {\r\n    this.classroom.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #classroomSelect\r\n        [label]=\"label\"\r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"classroomOptions\" \r\n        [selectType]=\"select.Class\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onClassroomSelect($event)\"\r\n        [initialValues]=\"initialClassroomIds\">\r\n    </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-contractor',\r\n  templateUrl: './select-contractor.component.html',\r\n  styleUrls: ['./select-contractor.component.scss'],\r\n})\r\nexport class SelectContractorComponent implements OnInit {\r\n  @ViewChild('contractorSelect') contractorSelect: FilterSelectComponent | undefined;\r\n  @Output() agency = new EventEmitter<any>();\r\n  @Input() initialContractorId?: number | null;\r\n  @Input() intialAgencyId?: number | null;\r\n  @Input() stateId: number = 0;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'State Preschool Contractor Agency (if applicable)';\r\n  contractorOptions?: IAgency[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private agencyService: AgencyService) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.stateId) {\r\n      this.getGranteeAgenciesByState(this.stateId);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.contractorSelect?.clearSearch(true);\r\n    }\r\n\r\n    if (changes['stateId']) this.getGranteeAgenciesByState(this.stateId);\r\n  }\r\n\r\n  getGranteeAgenciesByState(stateId: number): void {\r\n    if (this.stateId && this.stateId > 0) {\r\n      this.agencyService\r\n        .getContractorAgenciesByState(stateId)\r\n        .pipe(take(1))\r\n        .subscribe((agencies: IAgency[]) => {\r\n          if (this.intialAgencyId !== undefined) {\r\n            this.contractorOptions = agencies.filter(agency => agency.id !== this.intialAgencyId);\r\n          } else {\r\n            this.contractorOptions = agencies;\r\n          }\r\n        });\r\n    } else {\r\n      this.contractorOptions = [];\r\n    }\r\n  }\r\n\r\n  onAgencySelect(event: IAgency): void {\r\n    this.agency.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #contractorSelect [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\" [options]=\"contractorOptions\" [selectType]=\"select.Agencies\" [required]=\"required\"\r\n    [disabled]=\"disabled\" [isValid]=\"isValid\" (onSelected)=\"onAgencySelect($event)\" [initialValues]=\"initialContractorId\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-county',\r\n  templateUrl: './select-county.component.html',\r\n  styleUrls: ['./select-county.component.scss']\r\n})\r\nexport class SelectCountyComponent implements OnInit {\r\n  @ViewChild('countySelect') countySelect: FilterSelectComponent | undefined;\r\n  @Output() county = new EventEmitter<any>();\r\n  @Output() initCounties = new EventEmitter<boolean>();\r\n  @Input() initialCountyIds?: number[] | null;\r\n  @Input() stateId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() multiSelectInitVals: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'County';\r\n  countyOptions: ICounty[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.stateId) this.getCounties(this.stateId);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.countySelect?.clearSearch(true);\r\n    };\r\n\r\n    if (this.stateId == 0) this.lookupService.getCountyList();\r\n    else if (this.stateId) this.getCounties(this.stateId);\r\n    else this.countyOptions = [];\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled)\r\n      this.countySelect?.clearSelected();\r\n  }\r\n\r\n  getCounties(stateId: number): void {\r\n    this.lookupService.getCountyByStateId(stateId).pipe(\r\n      take(1)\r\n    ).subscribe((res: any) => {\r\n      this.initCounties.emit(res.length > 0);\r\n      this.countyOptions = res;\r\n    });\r\n  }\r\n\r\n  onCountySelect(event: number[]): void {\r\n    this.county.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #countySelect\r\n        [label]=\"label\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"countyOptions\" \r\n        [selectType]=\"select.County\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onCountySelect($event)\"\r\n        [initialValues]=\"initialCountyIds\">\r\n    </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { IDisability } from '@core/interfaces/idisability';\r\n\r\n@Component({\r\n  selector: 'drdp-select-disability',\r\n  templateUrl: './select-disability.component.html',\r\n  styleUrls: ['./select-disability.component.scss'],\r\n})\r\nexport class SelectDisabilityComponent implements OnInit {\r\n  @ViewChild('disabilitySelect') disabilitySelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() disability = new EventEmitter<any>();\r\n  @Output() initDisability = new EventEmitter<boolean>();\r\n  @Input() initialDisabilityIds?: number[] | null;\r\n  @Input() stateId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Primary Disability';\r\n  disabilityOptions: IDisability[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getDisabilities();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.disabilitySelect?.clearSearch(true);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.disabilitySelect?.clearSelected();\r\n  }\r\n\r\n  getDisabilities(): void {\r\n    this.lookupService\r\n      .getDisabilities()\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.initDisability.emit(res.length > 0);\r\n        this.disabilityOptions = res;\r\n      });\r\n  }\r\n\r\n  onDisabiltySelect(event: number[]): void {\r\n    this.disability.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select \r\n      #disabilitySelect\r\n      [label]=\"label\"\r\n      [multiSelect]=\"multiSelect\"\r\n      [options]=\"disabilityOptions\" \r\n      [selectType]=\"select.PrimaryDisability\"\r\n      [required]=\"required\" \r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"onDisabiltySelect($event)\"\r\n      [initialValues]=\"initialDisabilityIds\"\r\n      >\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IGender } from '@core/interfaces/igender';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-gender',\r\n  templateUrl: './select-gender.component.html',\r\n  styleUrls: ['./select-gender.component.scss']\r\n})\r\nexport class SelectGenderComponent implements OnInit {\r\n  @ViewChild('genderSelect') genderSelect: FilterSelectComponent | undefined;\r\n  @Output() gender = new EventEmitter<any>();\r\n  @Input() initialGenderId?: number | null;\r\n  @Input() initialGenderIds?: number[] | null;\r\n  @Input() stateId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Gender';\r\n  @Input() reloadGender = false;\r\n  genderOptions?: IGender[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private lookupService: LookupService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.genderSelect?.clearAll();\r\n      } else {\r\n        this.genderSelect?.clearSearch(true);\r\n      }\r\n    }\r\n\r\n    if (this.reloadGender) {\r\n      if (this.stateId) {\r\n        this.getGenders(this.stateId);\r\n      }\r\n    }\r\n\r\n    if (changes['stateId']) {\r\n      if (this.stateId) {\r\n        this.genderSelect?.clearSearch(true);\r\n        this.getGenders(this.stateId);\r\n      }\r\n      else\r\n        this.genderOptions = [];\r\n\r\n    }\r\n\r\n    if (changes['initialGenderId'] && this.initialGenderId) {\r\n      this.initialGenderIds = [];\r\n      this.initialGenderIds.push(this.initialGenderId);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.genderSelect?.clearSearch(true);\r\n  }\r\n\r\n  getGenders(stateId: number): void {\r\n\r\n    this.lookupService.getGenders(stateId).pipe(take(1)).subscribe((genders: IGender[]) => {\r\n      this.genderOptions = genders\r\n      if (this.initialGenderIds) {\r\n        const selected = this.genderOptions!.filter((gender: IGender) =>\r\n          this.initialGenderIds?.includes(gender.id)\r\n        );\r\n        this.gender.emit(selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  onGenderSelect(event: IGender): void {\r\n    this.gender.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #genderSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"genderOptions\"\r\n    [selectType]=\"select.Gender\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onGenderSelect($event)\"\r\n    [initialValues]=\"initialGenderId || initialGenderIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IGlobalRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { take } from 'rxjs';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { isArray } from 'lodash';\r\nimport { LookupService } from '@core/services/lookup.service';\r\n\r\n@Component({\r\n  selector: 'drdp-select-global-rating',\r\n  templateUrl: './select-global-rating.component.html',\r\n  styleUrls: ['./select-global-rating.component.scss'],\r\n})\r\nexport class SelectGlobalRatingComponent implements OnInit {\r\n  @ViewChild('globalRatingPeriodSelect') globalRatingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() ratingPeriod = new EventEmitter<any>();\r\n  @Input() initialRatingPeriodId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Rating Period';\r\n  @Input() schoolYearId?: number | null;\r\n  @Input() showPilotRps?: boolean = false;\r\n  @Input() showAll = false;\r\n  @Input() hideFromStateDash: boolean = false;\r\n  ratingPeriodOptions?: IGlobalRatingPeriod[] = [];\r\n\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private ratingPeriodService: RatingPeriodService, private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.setDropdown();\r\n  }\r\n\r\n  setDropdown(): void {\r\n    if (this.showAll) {\r\n      this.ratingPeriodService\r\n        .getAllGlobalRatingPeriods()\r\n        .pipe(take(1))\r\n        .subscribe((ratingPeriod: IGlobalRatingPeriod[]) => {\r\n          if (this.showPilotRps) {\r\n            ratingPeriod = ratingPeriod.filter((option:any) => option.isPilotEnabled);\r\n          }\r\n          this.ratingPeriodOptions = ratingPeriod;\r\n        });\r\n    }\r\n    else if(!this.schoolYearId) {\r\n      let currentSchoolYear: number;\r\n      this.lookupService\r\n      .getCurrentSchoolYear()\r\n      .pipe(take(1))\r\n      .subscribe((year: any) => {\r\n        currentSchoolYear = year.id;\r\n        this.getBySchoolYear(currentSchoolYear);\r\n      });\r\n    }\r\n    else this.getFutureGlobalRatingPeriods();\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.globalRatingPeriodSelect?.clearSelected();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.globalRatingPeriodSelect?.clearSearch(true);\r\n    }\r\n    else if (changes['showPilotRps']) {\r\n      this.setDropdown();\r\n    }\r\n    else if (changes['schoolYearId'] && this.schoolYearId) {\r\n      this.getBySchoolYear(this.schoolYearId);\r\n    }\r\n  }\r\n\r\n  getBySchoolYear(currentSchoolYear: number): void {\r\n    this.ratingPeriodService.getBySchoolYear(currentSchoolYear).pipe(take(1)).subscribe((ratingPeriod: any) => {\r\n      if (this.showPilotRps) {\r\n        ratingPeriod = ratingPeriod.filter((option:any) => option.isPilotEnabled);\r\n      }\r\n      if (this.hideFromStateDash) {\r\n        ratingPeriod = ratingPeriod.filter((option:any) => !option.hideFromStateDash);\r\n      }\r\n      this.ratingPeriodOptions = ratingPeriod;\r\n    })\r\n  }\r\n\r\n  getFutureGlobalRatingPeriods(): void {\r\n    this.ratingPeriodService\r\n      .getFutureGlobalRatingPeriods()\r\n      .pipe(take(1))\r\n      .subscribe((ratingPeriod: IGlobalRatingPeriod[]) => {\r\n        if (this.showPilotRps) {\r\n          ratingPeriod = ratingPeriod.filter(option => option.isPilotEnabled);\r\n        }\r\n        this.ratingPeriodOptions = ratingPeriod;\r\n      });\r\n  }\r\n\r\n  onRatingPeriodSelect(event: ISelectable | ISelectable[] | null): void {\r\n    if (!!event && isArray(event)) {\r\n      this.ratingPeriod.emit(this.ratingPeriodOptions?.filter(rp => event?.find(sc => sc.id === rp.id)));\r\n    } else if (!!event) {\r\n      const matchingOptions = this.ratingPeriodOptions?.filter(rp => event.id === rp.id) ?? [];\r\n      this.ratingPeriod.emit(matchingOptions?.length > 0 ? matchingOptions[0] : null);\r\n    } else {\r\n      this.ratingPeriod.emit(null);\r\n    }\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select \r\n      #globalRatingPeriodSelect\r\n      [label]=\"label\" \r\n      [multiSelect]=\"multiSelect\" \r\n      [options]=\"ratingPeriodOptions\" \r\n      [selectType]=\"select.GlobalRatingPeriods\"\r\n      [required]=\"required\" \r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"onRatingPeriodSelect($event)\"\r\n      [initialValues]=\"initialRatingPeriodId\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-grantee',\r\n  templateUrl: './select-grantee.component.html',\r\n  styleUrls: ['./select-grantee.component.scss'],\r\n})\r\nexport class SelectGranteeComponent implements OnInit {\r\n  @ViewChild('granteeSelect') granteeSelect: FilterSelectComponent | undefined;\r\n  @Output() agency = new EventEmitter<any>();\r\n  @Input() initialGranteeId?: number | null;\r\n  @Input() intialAgencyId?: number | null;\r\n  @Input() stateId: number = 0;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string =\r\n    'Early Head Start/Head Start Grantee Agency(if applicable)';\r\n  granteeOptions?: IAgency[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private agencyService: AgencyService) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.stateId) {\r\n      this.getGranteeAgenciesByState(this.stateId);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.granteeSelect?.clearSearch(true);\r\n    }\r\n\r\n    if (changes['stateId']) this.getGranteeAgenciesByState(this.stateId);\r\n  }\r\n\r\n  getGranteeAgenciesByState(stateId: number): void {\r\n    if (this.stateId && this.stateId > 0) {\r\n      this.agencyService\r\n        .getGranteeAgenciesByState(stateId)\r\n        .pipe(take(1))\r\n        .subscribe((agencies: IAgency[]) => {\r\n          if (this.intialAgencyId !== undefined) {\r\n            this.granteeOptions = agencies.filter(agency => agency.id !== this.intialAgencyId);\r\n          } else {\r\n            this.granteeOptions = agencies;\r\n          }\r\n        });\r\n    } else {\r\n      this.granteeOptions = [];\r\n    }\r\n  }\r\n\r\n  onAgencySelect(event: IAgency): void {\r\n    this.agency.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #granteeSelect [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\" [options]=\"granteeOptions\" [selectType]=\"select.Agencies\" [required]=\"required\"\r\n    [disabled]=\"disabled\" [isValid]=\"isValid\" (onSelected)=\"onAgencySelect($event)\" [initialValues]=\"initialGranteeId\">\r\n  </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IHeadStart } from '@core/interfaces/ihead-start';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-head-start',\r\n  templateUrl: './select-head-start.component.html',\r\n  styleUrls: ['./select-head-start.component.scss']\r\n})\r\nexport class SelectHeadStartComponent implements OnInit {\r\n  @ViewChild('headStartSelect') headStartSelect: FilterSelectComponent | undefined;\r\n  @Output() headStart = new EventEmitter<any>();\r\n  @Input() initialheadStartId?: number | null;\r\n  @Input() initialheadStartIds?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  headStartOptions?: IHeadStart[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getHeadStart();\r\n  }\r\n\r\n  getHeadStart(): void {\r\n    this.lookupService.getHeadStart()\r\n      .pipe(take(1))\r\n      .subscribe((headStart: IHeadStart[]) => {\r\n        this.headStartOptions = headStart;\r\n      });\r\n  }\r\n\r\n  onHeadStartSelect(event: IHeadStart): void {\r\n    this.headStart.emit(event);\r\n  }\r\n\r\n}","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #headStartSelect label=\"Head Start Status\" [multiSelect]=\"multiSelect\"\r\n    [options]=\"headStartOptions\" [selectType]=\"select.Default\" [required]=\"required\" [disabled]=\"disabled\"\r\n    (onSelected)=\"onHeadStartSelect($event)\" [isValid]=\"isValid\" [initialValues]=\"initialheadStartId\">\r\n  </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { IIepPlan } from '@core/interfaces/iiep-plan';\r\n@Component({\r\n  selector: 'drdp-select-iep-plan',\r\n  templateUrl: './select-iep-plan.component.html',\r\n  styleUrls: ['./select-iep-plan.component.scss'],\r\n})\r\nexport class SelectIepPlanComponent implements OnInit {\r\n  @ViewChild('iepSelect') iepSelect: FilterSelectComponent | undefined;\r\n  @Output() optionSelected = new EventEmitter<any>();\r\n  @Input() initialId?: number | null;\r\n  @Input() initialIds?: number[] | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string =\r\n    'Does this child have an Individualized Education Plan (IEP) or an Individual Family Service Plan (IFSP)?';\r\n  selectOptions?: IIepPlan[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n  ngOnInit(): void {\r\n    this.getIepPlans();\r\n  }\r\n  getIepPlans() {\r\n    this.lookupService\r\n      .getIepPlans()\r\n      .pipe(take(1))\r\n      .subscribe((options: IIepPlan[]) => {\r\n        this.selectOptions = options;\r\n      });\r\n  }\r\n  onSelect(event: IIepPlan): void {\r\n    this.optionSelected.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #iepSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"selectOptions\"\r\n    [selectType]=\"select.IepPlan\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    (onSelected)=\"onSelect($event)\"\r\n    [isValid]=\"isValid\"\r\n    overrideLabel=\" an option\"\r\n    [initialValues]=\"initialId || initialIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IInitialAssessmentToolType } from '@core/interfaces/iselectable';\r\n\r\n@Component({\r\n  selector: 'drdp-select-initial-assessment-tool-type',\r\n  templateUrl: './select-initial-assessment-tool-type.component.html',\r\n  styleUrls: ['./select-initial-assessment-tool-type.component.scss'],\r\n})\r\nexport class SelectInitialAssessmentToolTypeComponent implements OnInit {\r\n  @ViewChild('initialAssessmentToolTypeSelect') initialAssessmentToolTypeSelect: FilterSelectComponent | undefined;\r\n  @Output() optionSelected = new EventEmitter<any>();\r\n  @Input() initialId?: number | null;\r\n  @Input() initialIds: number[] | null = null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Initial Assessment Tool';\r\n  @Input() additionalClasses: string = 'pb-12';\r\n  tooltip: string = 'What was the assessment system used before DRDP?';\r\n  selectOptions?: IInitialAssessmentToolType[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getInitialAssessmentToolTypeOptions();\r\n  }\r\n\r\n  getInitialAssessmentToolTypeOptions() {\r\n    this.lookupService\r\n      .getInitialAssessmentToolTypeOptions()\r\n      .pipe(take(1))\r\n      .subscribe((options: IInitialAssessmentToolType[]) => {\r\n        this.selectOptions = options;\r\n      });\r\n  }\r\n\r\n  onSelect(event: IInitialAssessmentToolType): void {\r\n    this.optionSelected.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #initialAssessmentToolTypeSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"selectOptions\"\r\n    [selectType]=\"select.InitialAssessment\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    (onSelected)=\"onSelect($event)\"\r\n    [isValid]=\"isValid\"\r\n    overrideLabel=\"initial assessment tool type\"\r\n    [initialValues]=\"initialId || initialIds\"\r\n    [additionalClasses]=\"additionalClasses\"\r\n    [tooltip]=\"tooltip\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { ILanguage } from '@core/interfaces/ilanguage';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-language',\r\n  templateUrl: './select-language.component.html',\r\n  styleUrls: ['./select-language.component.scss']\r\n})\r\nexport class SelectLanguageComponent implements OnInit {\r\n  @ViewChild('languageSelect') languageSelect: FilterSelectComponent | undefined;\r\n  @Output() language = new EventEmitter<any>();\r\n  @Input() initialLanguageId?: number | null;\r\n  @Input() initialLanguageIds?: number[] | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Language';\r\n  languageOptions?: ILanguage[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private lookupService: LookupService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getLanguage();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.languageSelect?.clearAll();\r\n      } else {\r\n        this.languageSelect?.clearSearch(true);\r\n      }\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.languageSelect?.clearSearch(true);\r\n  }\r\n\r\n  getLanguage(): void {\r\n\r\n    this.lookupService.getLanguages().pipe(take(1)).subscribe((languages: ILanguage[]) => {\r\n      this.languageOptions = languages\r\n      if (this.initialLanguageIds) {\r\n        const selected = this.languageOptions!.filter((language: ILanguage) =>\r\n          this.initialLanguageIds?.includes(language.id)\r\n        );\r\n        this.language.emit(selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  onLanguageSelect(event: ILanguage): void {\r\n    this.language.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #languageSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"languageOptions\"\r\n    [selectType]=\"select.Language\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onLanguageSelect($event)\"\r\n    overrideLabel= \"Language\"\r\n    [initialValues]=\"initialLanguageId || initialLanguageIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IOutcome } from '@core/interfaces/iselectable';\r\n\r\n@Component({\r\n  selector: 'drdp-select-outcome',\r\n  templateUrl: './select-outcome.component.html',\r\n  styleUrls: ['./select-outcome.component.scss'],\r\n})\r\nexport class SelectOutcomeComponent implements OnInit {\r\n  @ViewChild('outcomeSelect') outcomeSelect: FilterSelectComponent | undefined;\r\n  @Output() optionSelected = new EventEmitter<any>();\r\n  @Input() initialId?: number | null;\r\n  @Input() initialIds: number[] | null = null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Outcome';\r\n  @Input() additionalClasses: string = '';\r\n  selectOptions?: IOutcome[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getOutcomeOptions();\r\n  }\r\n\r\n  getOutcomeOptions() {\r\n    this.lookupService\r\n      .getOutcomes()\r\n      .pipe(take(1))\r\n      .subscribe((options: IOutcome[]) => {\r\n        this.selectOptions = options;\r\n      });\r\n  }\r\n\r\n  onSelect(event: IOutcome): void {\r\n    this.optionSelected.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #outcomeSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"selectOptions\"\r\n    [selectType]=\"select.Outcome\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    (onSelected)=\"onSelect($event)\"\r\n    [isValid]=\"isValid\"\r\n    overrideLabel=\"an option\"\r\n    [initialValues]=\"initialId || initialIds\"\r\n    [additionalClasses]=\"additionalClasses\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { take } from 'rxjs';\r\nimport { IPortfolioUser } from '@core/interfaces/iportfolio-user';\r\n\r\n@Component({\r\n  selector: 'drdp-select-portfolio-users',\r\n  templateUrl: './select-portfolio-users.component.html',\r\n  styleUrls: ['./select-portfolio-users.component.scss']\r\n})\r\nexport class SelectPortfolioUsersComponent implements OnInit {\r\n  @ViewChild('portfolioUsersSelect') portfolioUsersSelect: FilterSelectComponent | undefined;\r\n  @Output() portfolioUsers = new EventEmitter<any>();\r\n  @Input() sceId: number = 0;\r\n  @Input() initialPortfolioUserId?: number | null;\r\n  @Input() initialPortfolioUserIds?: number[] | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Recipient';\r\n  portfolioUsersOptions?: IPortfolioUser[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private userService: UserService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.sceId && this.sceId > 0)\r\n      this.getPortfolioMessageUsers(this.sceId);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.portfolioUsersSelect?.clearAll();\r\n      } else {\r\n        this.portfolioUsersSelect?.clearSearch(true);\r\n      }\r\n    }\r\n\r\n    if (this.sceId) {\r\n      this.getPortfolioMessageUsers(this.sceId);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.portfolioUsersSelect?.clearSearch(true);\r\n  }\r\n\r\n  getPortfolioMessageUsers(sceId: number): void {\r\n\r\n    this.userService.getPortfolioMessageUsers(sceId).pipe(take(1)).subscribe((users: IPortfolioUser[]) => {\r\n      this.portfolioUsersOptions = users;\r\n      if (this.initialPortfolioUserId) {\r\n        const selected = this.portfolioUsersOptions!.filter((user: IPortfolioUser) =>\r\n          this.initialPortfolioUserId === user.id\r\n        );\r\n        this.portfolioUsers.emit(selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  onPortfolioUserSelect(event: IPortfolioUser): void {\r\n    this.portfolioUsers.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #portfolioUsersSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"portfolioUsersOptions\"\r\n    [selectType]=\"select.PortfolioUser\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onPortfolioUserSelect($event)\"\r\n    overrideLabel= \"\"\r\n    [initialValues]=\"initialPortfolioUserId || initialPortfolioUserIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IAgeGradeEnrollmentProgramFilter } from '@core/interfaces/iage-grade-instrument';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-program-type',\r\n  templateUrl: './select-program-type.component.html',\r\n  styleUrls: ['./select-program-type.component.scss'],\r\n})\r\nexport class SelectProgramTypeComponent implements OnInit {\r\n  @ViewChild('programTypeSelect') programTypeSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() programType = new EventEmitter<any>();\r\n  @Input() initialProgramTypeId?: number | null;\r\n  @Input() initialProgramTypeIds?: number[] | null;\r\n  @Input() ageGradeId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Program Type (based on Age Group)';\r\n  @Input() altLabel = 'Program';\r\n  @Input() reloadProgramType = false;\r\n  programTypeOptions?: IAgeGradeEnrollmentProgramFilter[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private lookupService: LookupService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.programTypeSelect?.clearAll();\r\n      } else {\r\n        this.programTypeSelect?.clearSearch(true);\r\n      }\r\n    }\r\n\r\n    if (this.reloadProgramType) {\r\n      if (this.ageGradeId) {\r\n        this.getProgramType(this.ageGradeId);\r\n      }\r\n    }\r\n\r\n    if (changes['ageGradeId']) {\r\n      if (this.ageGradeId) {\r\n        this.programTypeSelect?.clearSearch(true);\r\n        this.getProgramType(this.ageGradeId);\r\n      } else this.programTypeOptions = [];\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.programTypeSelect?.clearSearch(true);\r\n  }\r\n\r\n  getProgramType(ageGradeId: number): void {\r\n    this.lookupService\r\n      .getAgeGradeEnrollmentFilters()\r\n      .pipe(take(1))\r\n      .subscribe((programTypes: IAgeGradeEnrollmentProgramFilter[]) => {\r\n        this.programTypeOptions = programTypes\r\n          .filter(\r\n            (programType: IAgeGradeEnrollmentProgramFilter) =>\r\n              programType.ageGradeInstrumentId === ageGradeId\r\n          )\r\n          .map((programType: IAgeGradeEnrollmentProgramFilter, index) => {\r\n            return {\r\n              ...programType,\r\n              id: programType.id,\r\n              enrollmentProgramName:\r\n                programType.enrollmentProgramType?.enrollmentProgramName,\r\n            };\r\n          });\r\n      });\r\n  }\r\n\r\n  onProgramTypesSelect(event: IAgeGradeEnrollmentProgramFilter): void {\r\n    this.programType.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #programTypeSelect\r\n    [label]=\"label\"\r\n    [overrideLabel]=\"altLabel\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"programTypeOptions\"\r\n    [selectType]=\"select.EnrollmentProgram\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onProgramTypesSelect($event)\"\r\n    [initialValues]=\"initialProgramTypeId || initialProgramTypeIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { take } from 'rxjs';\r\nimport { IUserSpecialEdPowerDto } from '@core/interfaces/istudent';\r\n\r\n@Component({\r\n  selector: 'drdp-select-providers',\r\n  templateUrl: './select-providers.component.html',\r\n  styleUrls: ['./select-providers.component.scss']\r\n})\r\nexport class SelectProvidersComponent implements OnInit {\r\n  @ViewChild('providerSelect') providerSelect: FilterSelectComponent | undefined;\r\n  @Output() provider = new EventEmitter<any>();\r\n  @Input() initialProviderId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  providerOptions?: any[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private studentService: StudentService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getStudentSharedProviderUsers();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.providerSelect?.clearSearch(true);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.providerSelect?.clearSelected();\r\n  }\r\n\r\n  getStudentSharedProviderUsers() {\r\n    this.studentService\r\n        .getStudentSharedProviderUsers()\r\n        .pipe(take(1))\r\n        .subscribe((res: IUserSpecialEdPowerDto[]) => {\r\n            if (res) {\r\n                this.providerOptions = res.map((user: IUserSpecialEdPowerDto) => {\r\n                    return { name: user.emailAddress, teacherName: user.teacherName, id: user.id }\r\n                });\r\n            }\r\n        });\r\n}\r\n\r\n  onProviderSelect(event: any): void {\r\n    const provider = this.providerOptions?.find((p) => p.id === event.id);\r\n    event.teacherName = provider.teacherName;\r\n    this.provider.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #providerSelect\r\n        label=\"Providers\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"providerOptions\" \r\n        [selectType]=\"select.Default\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onProviderSelect($event)\"\r\n        [initialValues]=\"initialProviderId\">\r\n    </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { IEthnicity } from '@core/interfaces/iethnicity';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-race',\r\n  templateUrl: './select-race.component.html',\r\n  styleUrls: ['./select-race.component.scss']\r\n})\r\nexport class SelectRaceComponent implements OnInit {\r\n  @ViewChild('raceSelect') raceSelect: FilterSelectComponent | undefined;\r\n  @Output() race = new EventEmitter<any>();\r\n  @Input() initialRaceId?: number | null;\r\n  @Input() initialRaceIds?: number[] | null;\r\n  @Input() stateId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Race';\r\n  @Input() reloadRace = false;\r\n  raceOptions?: IEthnicity[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private lookupService: LookupService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.raceSelect?.clearAll();\r\n      } else {\r\n        this.raceSelect?.clearSearch(true);\r\n      }\r\n    }\r\n\r\n    if (this.reloadRace) {\r\n      if (this.stateId) {\r\n        this.getRace(this.stateId);\r\n      }\r\n    }\r\n\r\n    if (changes['stateId']) {\r\n      if (this.stateId) {\r\n        this.raceSelect?.clearSearch(true);\r\n        this.getRace(this.stateId);\r\n      }\r\n      else\r\n        this.raceOptions = [];\r\n\r\n    }\r\n\r\n    if (changes['initialRaceId'] && this.initialRaceId) {\r\n      this.initialRaceIds = [];\r\n      this.initialRaceIds.push(this.initialRaceId);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.raceSelect?.clearSearch(true);\r\n  }\r\n\r\n  getRace(stateId: number): void {\r\n\r\n    this.lookupService.getEthnicities(stateId).pipe(take(1)).subscribe((race: IEthnicity[]) => {\r\n      this.raceOptions = race\r\n      if (this.initialRaceIds) {\r\n        const selected = this.raceOptions!.filter((race: IEthnicity) =>\r\n          this.initialRaceIds?.includes(race.id)\r\n        );\r\n        this.race.emit(selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  onRaceSelect(event: IEthnicity): void {\r\n    this.race.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #raceSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"raceOptions\"\r\n    [selectType]=\"select.Ethnicities\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onRaceSelect($event)\"\r\n    [initialValues]=\"initialRaceId || initialRaceIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n\r\n\r\n","export enum GlobalRatings {\r\n  Fall2024 = 42\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { Subject, take, takeUntil, tap } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { ISelectable } from \"@core/interfaces/iselectable\";\r\nimport { isArray } from \"lodash\";\r\nimport { GlobalRatings } from '@core/enums/global-ratings';\r\n\r\n@Component({\r\n  selector: 'drdp-select-rating-period',\r\n  templateUrl: './select-rating-period.component.html',\r\n  styleUrls: ['./select-rating-period.component.scss'],\r\n})\r\nexport class SelectRatingPeriodComponent implements OnInit {\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Output() ratingPeriod = new EventEmitter<any>();\r\n  @Input() initialRatingPeriodId?: number | null;\r\n  @Input() schoolYear?: number | null; //passing only school year will use global rating periods\r\n  @Input() agencyId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Rating Period';\r\n  @Input() displayFutureRps: boolean = false;\r\n  @Input() displayCurrentRps: boolean = false;\r\n  @Input() displayCurrentRpsByStartEnd: boolean = false;\r\n  @Input() omitFutureRps: boolean = false;\r\n  @Input() showPilotRps: boolean = false;\r\n  @Input() default2025: boolean = false;\r\n  userAgencyId?: number;\r\n  ratingPeriodOptions?: IRatingPeriod[] = [];\r\n  selectType: SelectType = SelectType.RatingPeriods;\r\n  private cancelPreviousRequest$ = new Subject<void>();\r\n\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private ratingPeriodService: RatingPeriodService) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.agencyId) this.getRatingPeriod(this.agencyId);\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled) this.ratingPeriodSelect?.clearSelected();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.ratingPeriodSelect?.clearSearch(true);\r\n    }\r\n\r\n    if (changes['agencyId'] || changes['schoolYear'] || changes['showPilotRps']) {\r\n      if (this.agencyId) {\r\n        this.selectType = this.select.RatingPeriods;\r\n        this.getRatingPeriod(this.agencyId, this.schoolYear);\r\n      }\r\n      else if (this.schoolYear) {\r\n        this.selectType = this.select.GlobalRatingPeriods;\r\n        this.getRatingPeriodsBySchoolYear(this.schoolYear);\r\n      }\r\n      else this.ratingPeriodOptions = [];\r\n    }\r\n  }\r\n\r\n  getRatingPeriodsBySchoolYear(schoolYear: any): void {\r\n    this.cancelPreviousRequest$.next();\r\n    this.ratingPeriodService\r\n      .getBySchoolYear(schoolYear)\r\n      .pipe(take(1), takeUntil(this.cancelPreviousRequest$))\r\n      .subscribe((ratingPeriod: IRatingPeriod[]) => {\r\n        this.ratingPeriodOptions = ratingPeriod;\r\n      });\r\n  }\r\n\r\n  getRatingPeriod(agencyId: number, schoolYear?: number | null): void {\r\n    this.cancelPreviousRequest$.next();\r\n    const ratingPeriodObservable = (\r\n      schoolYear\r\n        ? this.ratingPeriodService.getBySchoolYearAndAgency(schoolYear, agencyId)\r\n        : this.ratingPeriodService.getByAgency(agencyId)\r\n    ).pipe(take(1), takeUntil(this.cancelPreviousRequest$));\r\n\r\n    ratingPeriodObservable.pipe(\r\n      tap((ratingPeriod: IRatingPeriod[]) => \r\n        this.ratingPeriodOptions = this.processRatingPeriods(ratingPeriod))\r\n    ).subscribe();\r\n  }\r\n\r\n  processRatingPeriods(ratingPeriods: IRatingPeriod[]): IRatingPeriod[] {\r\n    if (this.displayFutureRps) {\r\n      const futureRps = ratingPeriods.filter(option => this.isCurrentDateBelowMinStartDate(option.startDate));\r\n      const initialRatingPeriod = futureRps.find(rp => rp.id === this.initialRatingPeriodId);\r\n      if (initialRatingPeriod) return futureRps;\r\n    }\r\n    if (this.displayCurrentRps)\r\n      ratingPeriods = ratingPeriods.filter(option => this.isCurrentRatingPeriod(option.minDate, option.maxDate));\r\n\r\n    if (this.displayCurrentRpsByStartEnd)\r\n      ratingPeriods = ratingPeriods.filter(option => this.isCurrentRatingPeriod(option.startDate, option.endDate));\r\n\r\n    if (this.omitFutureRps) {\r\n      ratingPeriods = ratingPeriods.filter(option => !this.isCurrentDateBelowMinStartDate(option.minDate.toString()));\r\n      const initialRatingPeriod = ratingPeriods.find(rp => rp.id === this.initialRatingPeriodId);\r\n      if (initialRatingPeriod) return ratingPeriods;\r\n    }\r\n    \r\n    if (this.showPilotRps) {\r\n      ratingPeriods = ratingPeriods.filter(option => option.globalRatingPeriod?.isPilotEnabled);\r\n      if (this.default2025) {\r\n        this.ratingPeriod.emit(ratingPeriods.find(rp => rp.globalRatingPeriodId == GlobalRatings.Fall2024));\r\n      }\r\n    }\r\n    return ratingPeriods.filter((rp: IRatingPeriod) => rp.isActive);\r\n  }\r\n\r\n  isCurrentDateBelowMinStartDate (minStartDate: string): boolean {\r\n    const currentDate = new Date();\r\n    const dateWithoutTime = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\r\n    return dateWithoutTime < new Date(minStartDate);\r\n  };\r\n\r\n  isCurrentRatingPeriod(minDate: Date | string, maxDate: Date | string): boolean {\r\n    const current = new Date();\r\n    const currentWithoutTime = new Date(current.getFullYear(), current.getMonth(), current.getDate());\r\n    return currentWithoutTime >= new Date(minDate) && currentWithoutTime <= new Date(maxDate);\r\n  }\r\n\r\n  onRatingPeriodSelect(event: ISelectable | ISelectable[] | null): void {\r\n    if (!!event && isArray(event)) {\r\n      this.ratingPeriod.emit(this.ratingPeriodOptions?.filter(rp => event?.find(sc => sc.id === rp.id)));\r\n    } else if (!!event) {\r\n      const matchingOptions = this.ratingPeriodOptions?.filter(rp => event.id === rp.id) ?? [];\r\n      this.ratingPeriod.emit(matchingOptions?.length > 0 ? matchingOptions[0] : null);\r\n    } else {\r\n      this.ratingPeriod.emit(null);\r\n    }\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #ratingPeriodSelect\r\n        [label]=\"label\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"ratingPeriodOptions\" \r\n        [selectType]=\"selectType\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onRatingPeriodSelect($event)\"\r\n        [initialValues]=\"initialRatingPeriodId\">\r\n    </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { IRegionType } from '@core/interfaces/iregion-type';\r\nimport { ISelectableGroups } from '@core/interfaces/iselectable';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take, tap } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-region',\r\n  templateUrl: './select-region.component.html',\r\n  styleUrls: ['./select-region.component.scss']\r\n})\r\nexport class SelectRegionComponent implements OnInit, OnChanges {\r\n  @ViewChild('regionSelect') regionSelect: FilterSelectComponent | undefined;\r\n  @Output() region = new EventEmitter<any>();\r\n  @Input() stateId?: number;\r\n  @Input() initialRegionId?: any | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Region';\r\n  regionTypeOptions?: ISelectableGroups;\r\n  initPageindex = 1;\r\n  initPageSize = 10;\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService, public stateService: StateService) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.stateId) {\r\n      this.getRegions(this.stateId, this.initPageindex, this.initPageSize);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.stateId) {\r\n      this.getRegions(this.stateId, this.initPageindex, this.initPageSize);\r\n      this.getStateConfigs(this.stateId);\r\n    }\r\n  }\r\n\r\n  getRegions(stateId: number, pageIndex: number, pageSize: number): void {\r\n    this.lookupService.getRegionTypes(stateId, pageIndex, pageSize)\r\n      .pipe(take(1))\r\n      .subscribe((regionTypes: any) => {\r\n        this.regionTypeOptions = regionTypes;\r\n      });\r\n  }\r\n\r\n  getStateConfigs(stateId?: number) {\r\n    if (stateId) {\r\n      this.stateService.getStateConfigurations(stateId).pipe(\r\n        take(1),\r\n        tap((stateConfig: IStateConfiguration[]) => {\r\n          if (stateConfig) {\r\n            const config =  stateConfig.find((config: IStateConfiguration) => config.columnName == StudentDemographic.RegionLabel)\r\n            if (config) this.label = config?.label ?? this.label;\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  onNewPage(event: any): void {\r\n    const {pageIndex, pageSize} = event;\r\n    this.initPageindex = pageIndex;\r\n    this.initPageSize = pageSize;\r\n    if (this.stateId) {\r\n      this.getRegions(this.stateId, pageIndex, pageSize);\r\n    }\r\n  }\r\n\r\n  onRegionSelect(event: IRegionType): void {\r\n    this.region.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-group-select \r\n        #regionSelect\r\n        [label]=\"label\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"regionTypeOptions\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        (onSelected)=\"onRegionSelect($event)\"\r\n        [isValid]=\"isValid\"\r\n        [initialValues]=\"initialRegionId\"\r\n        (onNewPage)=\"onNewPage($event)\">\r\n    </drdp-group-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IReportAction } from '@core/interfaces/ireport-type';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-report-action',\r\n  templateUrl: './select-report-action.component.html',\r\n  styleUrls: ['./select-report-action.component.scss']\r\n})\r\nexport class SelectReportActionComponent implements OnInit {\r\n  @Input() label: string = 'Report Type';\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() clear: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Output() onSelected = new EventEmitter<IReportAction | null>();\r\n\r\n  reportActionOptions: IReportAction[] = [];\r\n  public select = SelectType;\r\n\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getReportActions();\r\n  }\r\n\r\n  getReportActions(): void {\r\n    this.lookupService.getReportActions().pipe(take(1)).subscribe((res: IReportAction[]) => {\r\n      this.reportActionOptions = res;\r\n    });\r\n  }\r\n\r\n  emitSelectedReportAction(selectedAction: IReportAction): void {\r\n    this.onSelected.emit(selectedAction);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #reportActionSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"true\"\r\n    [options]=\"reportActionOptions\"\r\n    [selectType]=\"select.ReportAction\"\r\n    [required]=\"false\"\r\n    [disabled]=\"disabled\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"emitSelectedReportAction($event)\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IReportType } from '@core/interfaces/ireport-type';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-select-report-type',\r\n  templateUrl: './select-report-type.component.html',\r\n  styleUrls: ['./select-report-type.component.scss']\r\n})\r\nexport class SelectReportTypeComponent implements OnInit {\r\n  @Input() label: string = 'Report Name';\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() clear: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() isReportTracking?: boolean = false;\r\n  @Output() onSelected = new EventEmitter<IReportType | null>();\r\n\r\n  reportTypeOptions: IReportType[] = [];\r\n  public select = SelectType;\r\n\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getReportTypes();\r\n  }\r\n\r\n  getReportTypes(): void {\r\n    this.lookupService.getReportTypes().pipe(take(1)).subscribe((res: IReportType[]) => {\r\n      if (this.isReportTracking) res = res.filter((report) => report.isReportTracking);\r\n      this.reportTypeOptions = res;\r\n    });\r\n  }\r\n\r\n  emitSelectedReportType(selectedReport: IReportType): void {\r\n    this.onSelected.emit(selectedReport);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #reportType\r\n    [label]=\"label\"\r\n    [multiSelect]=\"true\"\r\n    [options]=\"reportTypeOptions\"\r\n    [selectType]=\"select.ReportType\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"emitSelectedReportType($event)\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-request-reason',\r\n  templateUrl: './select-request-reason.component.html',\r\n  styleUrls: ['./select-request-reason.component.scss']\r\n})\r\nexport class SelectRequestReasonComponent implements OnInit {\r\n  @ViewChild('requestResponseSelect') requestResponseSelect: FilterSelectComponent | undefined;\r\n  @Input() label: string = 'Reason';\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() clear: boolean = false;\r\n  @Input() initialResponseRequestId?: number | null;\r\n  @Output() onSelected = new EventEmitter<string | null>();\r\n\r\n  studentRequestOptions: any[] = [];\r\n  public select = SelectType;\r\n\r\n  constructor(private requestReasonService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getRequestReason();\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    if (this.clear && !this.disabled) this.requestResponseSelect?.clear();\r\n  }\r\n  \r\n  getRequestReason(): void {\r\n    this.requestReasonService.getRequestReasons().pipe(take(1)).subscribe((res) => {\r\n      this.studentRequestOptions = res;\r\n    });\r\n  }\r\n\r\n  emitSelectedRequestReason(selectedReason: any): void {\r\n    this.onSelected.emit(selectedReason);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select\r\n      #requestResponseSelect\r\n      [label]=\"label\"\r\n      [multiSelect]=\"false\"\r\n      [options]=\"studentRequestOptions\"\r\n      [selectType]=\"select.StudentRequest\"\r\n      [required]=\"false\"\r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"emitSelectedRequestReason($event)\"\r\n      [initialValues]=\"initialResponseRequestId\">\r\n    </drdp-filter-select>\r\n  </div>","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-request-status-type',\r\n  templateUrl: './select-request-status-type.component.html',\r\n  styleUrls: ['./select-request-status-type.component.scss']\r\n})\r\nexport class SelectRequestStatusTypeComponent implements OnInit {\r\n  @ViewChild('requestStatusType') requestStatusType: FilterSelectComponent | undefined;\r\n  @Input() label: string = 'Request Status Type';\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() clear: boolean = false;\r\n  @Input() initialRequestStatusTypeId?: number | null;\r\n  @Output() onSelected = new EventEmitter<string | null>();\r\n\r\n  requestStatusTypeOptions: any[] = [];\r\n  public select = SelectType;\r\n\r\n  constructor(private requestReasonService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getRequestStatusType();\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    if (this.clear && !this.disabled) this.requestStatusType?.clear();\r\n  }\r\n\r\n  getRequestStatusType(): void {\r\n    this.requestReasonService.getRequestStatusType().pipe(take(1)).subscribe((res) => {\r\n      this.requestStatusTypeOptions = res;\r\n    })\r\n  }\r\n\r\n  emitSelectedRequestStatusType(selectedReason: any): void {\r\n    this.onSelected.emit(selectedReason);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select\r\n      #requestStatusType\r\n      [label]=\"label\"\r\n      [multiSelect]=\"false\"\r\n      [options]=\"requestStatusTypeOptions\"\r\n      [selectType]=\"select.RequestStatusType\"\r\n      [required]=\"false\"\r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"emitSelectedRequestStatusType($event)\"\r\n      [initialValues]=\"initialRequestStatusTypeId\">\r\n    </drdp-filter-select>\r\n  </div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-role',\r\n  templateUrl: './select-role.component.html',\r\n  styleUrls: ['./select-role.component.scss']\r\n})\r\nexport class SelectRoleComponent implements OnInit {\r\n  @ViewChild('roleSelect') roleSelect: FilterSelectComponent | undefined;\r\n  @Output() role = new EventEmitter<any>();\r\n  @Input() label = 'User Role';\r\n  @Input() initialRolesIds?: number[] | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = true;\r\n  @Input() multiSelectInitVals: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  roleOptions?: IRoles[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private roleService: RoleService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getRoles();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.roleSelect?.clearSearch(true);\r\n    };\r\n  }\r\n\r\n  getRoles(): void {\r\n    this.roleService.getAllByOrder()\r\n      .pipe(\r\n        take(1)\r\n      )\r\n      .subscribe((roles: IRoles[]) => this.roleOptions = roles);\r\n  }\r\n\r\n  onAgencySelect(event: IRoles): void {\r\n    this.role.emit(event);\r\n  }\r\n}","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #roleSelect\r\n        [label]=\"label\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"roleOptions\" \r\n        [selectType]=\"select.Roles\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onAgencySelect($event)\"\r\n        [initialValues]=\"initialRolesIds\">\r\n    </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-school-year',\r\n  templateUrl: './select-school-year.component.html',\r\n  styleUrls: ['./select-school-year.component.scss']\r\n})\r\nexport class SelectSchoolYearComponent implements OnInit {\r\n  @ViewChild('schoolYearSelect') schoolYearSelect: FilterSelectComponent | undefined;\r\n  @Output() schoolYear = new EventEmitter<any>();\r\n  @Input() initialYearId?: number | null;\r\n  @Input() clear: any;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() required: boolean = false;\r\n  @Input() currentSchoolYear: boolean = false;\r\n  @Input() startingSchoolYear?: string | null;\r\n  @Input() editConfigs: boolean = false;\r\n  schoolYearOptions?: ISchoolYear[];\r\n\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService, private _ratingPeriods: RatingPeriodService,) { }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.currentSchoolYear) this.getActiveStates();\r\n    this.getCurrentSchoolYear();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.schoolYearSelect?.clear();\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled)\r\n      this.schoolYearSelect?.clearSelected();\r\n  }\r\n\r\n  getCurrentSchoolYear() {\r\n      this._ratingPeriods.getActiveSchoolYear().pipe(take(1)).subscribe((res) => {\r\n        if (this.currentSchoolYear) this.schoolYearOptions = [res];\r\n        if (!this.editConfigs) {\r\n          this.initialYearId = res.id;\r\n          this.schoolYear.emit(res);\r\n        } \r\n      })\r\n  }\r\n\r\n  getActiveStates(): void {\r\n    if (this.startingSchoolYear) {\r\n      this.lookupService.getSchoolYearFromStartingYear(this.startingSchoolYear)\r\n        .pipe(take(1))\r\n        .subscribe((years: ISchoolYear[]) => {\r\n          this.schoolYearOptions = years;\r\n        })\r\n    } else {\r\n      this.lookupService.getAllSchoolYears()\r\n        .pipe(take(1))\r\n        .subscribe((years: ISchoolYear[]) => {\r\n          this.schoolYearOptions = years;\r\n        });\r\n    }\r\n  }\r\n\r\n  onYearSelect(event: ISchoolYear): void {\r\n    this.schoolYear.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n      #schoolYearSelect\r\n      label=\"School Year\" \r\n      [options]=\"schoolYearOptions\" \r\n      [selectType]=\"select.SchoolYear\"\r\n      [required]=\"required\" \r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"onYearSelect($event)\"\r\n      [initialValues]=\"initialYearId\">\r\n    </drdp-filter-select>\r\n  </div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISelpa } from '@core/interfaces/iselpa';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-selpa',\r\n  templateUrl: './select-selpa.component.html',\r\n  styleUrls: ['./select-selpa.component.scss'],\r\n})\r\nexport class SelectSelpaComponent implements OnInit {\r\n  @ViewChild('selpaSelect') selpaSelect: FilterSelectComponent | undefined;\r\n  @Output() selpa = new EventEmitter<any>();\r\n  @Input() initialSelpaId?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() additionalClasses: string = 'pb-11';\r\n  selpaOptions?: ISelpa[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getSelpas();\r\n  }\r\n\r\n  getSelpas(): void {\r\n    this.lookupService\r\n      .getSelpas()\r\n      .pipe(take(1))\r\n      .subscribe((selpas: ISelpa[]) => {\r\n        this.selpaOptions = selpas;\r\n      });\r\n  }\r\n\r\n  onSelpaSelect(event: ISelpa): void {\r\n    this.selpa.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between al\">\r\n  <drdp-filter-select\r\n    #selpaSelect\r\n    label=\"SELPAS\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"selpaOptions\"\r\n    [selectType]=\"select.Selpa\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    (onSelected)=\"onSelpaSelect($event)\"\r\n    [isValid]=\"isValid\"\r\n    [initialValues]=\"initialSelpaId\"\r\n    [additionalClasses]=\"additionalClasses\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgencyCodeType } from '@core/interfaces/iagency';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-site-code',\r\n  templateUrl: './select-site-code.component.html',\r\n  styleUrls: ['./select-site-code.component.scss']\r\n})\r\nexport class SelectSiteCodeComponent implements OnInit {\r\n  @ViewChild('codeSelect') codeSelect: FilterSelectComponent | undefined;\r\n  @Output() code = new EventEmitter<any>();\r\n  @Input() initialCodeId?: number | null;\r\n  @Input() initialCodeIds?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = \"Agency Code Type\";\r\n  codeOptions?: IAgencyCodeType[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getCode();\r\n  }\r\n\r\n  getCode(): void {\r\n    this.lookupService.getSiteCodeTypes()\r\n      .pipe(take(1))\r\n      .subscribe((code: IAgencyCodeType[]) => {\r\n        this.codeOptions = code;\r\n      });\r\n  }\r\n\r\n  onCodeSelect(event: IAgencyCodeType): void {\r\n    this.code.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select\r\n        #codeSelect\r\n        [label]=\"label\"\r\n        [multiSelect]=\"multiSelect\"\r\n        [options]=\"codeOptions\"\r\n        [selectType]=\"select.CodeType\"\r\n        [required]=\"required\"\r\n        [disabled]=\"disabled\"\r\n        (onSelected)=\"onCodeSelect($event)\"\r\n        [isValid]=\"isValid\"\r\n        [initialValues]=\"initialCodeId\">\r\n    </drdp-filter-select>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { take } from 'rxjs';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-select-site',\r\n  templateUrl: './select-site.component.html',\r\n  styleUrls: ['./select-site.component.scss'],\r\n})\r\nexport class SelectSiteComponent implements OnInit {\r\n  @ViewChild('siteSelect') siteSelect: FilterSelectComponent | undefined;\r\n  @Output() site = new EventEmitter<any>();\r\n  @Input() initialSiteId?: number | null;\r\n  @Input() initialSiteIds?: number[] | null;\r\n  @Input() agencyId?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() isValid = true;\r\n  @Input() required = false;\r\n  @Input() label = 'Site';\r\n  @Input() reloadSites = false;\r\n  @Input() isDualEnrollments = false;\r\n  @Input() isPilot: boolean = false;\r\n  siteOptions?: ISites[] = [];\r\n  selectedState?: number;\r\n  selectedAgency?: number;\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private siteService: SiteService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    //commenting this out for now since this should have been done by the ngOnChanges\r\n    // if (this.agencyId) this.getSites(this.agencyId);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      if (this.multiSelect) {\r\n        this.siteSelect?.clearAll();\r\n      } else {\r\n        this.siteSelect?.clearSearch(true);\r\n      }\r\n    }\r\n\r\n    if (this.reloadSites) {\r\n      if (this.agencyId) {\r\n        this.getSites(this.agencyId);\r\n      }\r\n    }\r\n\r\n    if (changes['agencyId']) {\r\n      if (this.agencyId) {\r\n        this.siteSelect?.clearSearch(true);\r\n        this.getSites(this.agencyId);\r\n      }\r\n      else\r\n        this.siteOptions = [];\r\n\r\n    }\r\n\r\n    if (changes['initialSiteId'] && this.initialSiteId) {\r\n      this.initialSiteIds = [];\r\n      this.initialSiteIds.push(this.initialSiteId);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.siteSelect?.clearSearch(true);\r\n  }\r\n\r\n  getSites(agencyId: number | number[]): void {\r\n    if (!Array.isArray(agencyId)) agencyId = [agencyId];\r\n\r\n    this.siteService.getSitesByPermission(agencyId, this.isPilot).pipe(take(1)).subscribe((sites: ISites[]) => {\r\n      this.siteOptions = sites.filter((site: ISites) => site.isActive);\r\n      \r\n      if (this.isDualEnrollments) {\r\n        this.siteOptions = this.siteOptions.filter((site: ISites) => site.isDualEnrollment);\r\n      }\r\n\r\n      if (this.initialSiteIds) {\r\n        const selected = this.siteOptions!.filter((site: ISites) =>\r\n          this.initialSiteIds?.includes(site.id)\r\n        );\r\n        this.site.emit(selected);\r\n      }\r\n    });\r\n  }\r\n\r\n  onSiteSelect(event: ISites): void {\r\n    this.site.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #siteSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"siteOptions\"\r\n    [selectType]=\"select.Sites\"\r\n    [required]=\"required\"\r\n    [isValid]=\"isValid\"\r\n    (onSelected)=\"onSiteSelect($event)\"\r\n    [initialValues]=\"initialSiteId || initialSiteIds\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IStatePreschool } from '@core/interfaces/ihead-start';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-state-preschool',\r\n  templateUrl: './select-state-preschool.component.html',\r\n  styleUrls: ['./select-state-preschool.component.scss']\r\n})\r\nexport class SelectStatePreschoolComponent implements OnInit {\r\n  @ViewChild('statePreschoolSelect') statePreschoolSelect: FilterSelectComponent | undefined;\r\n  @Output() statePreschool = new EventEmitter<any>();\r\n  @Input() initialStatePreschoolId?: number | null;\r\n  @Input() initialStatePreschoolIds?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  statePreschoolOptions?: IStatePreschool[] = [];\r\n  public get select() { return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getStatePreschool();\r\n  }\r\n\r\n  getStatePreschool(): void {\r\n    this.lookupService.getStatePreschool()\r\n      .pipe(take(1))\r\n      .subscribe((statePreschool: IStatePreschool[]) => {\r\n        this.statePreschoolOptions = statePreschool;\r\n      });\r\n  }\r\n\r\n  onStatePreschoolSelect(event: IStatePreschool): void {\r\n    this.statePreschool.emit(event);\r\n  }\r\n\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #statePreschoolSelect label=\"State Preschool Status\" [multiSelect]=\"multiSelect\"\r\n    [options]=\"statePreschoolOptions\" [selectType]=\"select.Default\" [required]=\"required\" [disabled]=\"disabled\"\r\n    (onSelected)=\"onStatePreschoolSelect($event)\" [isValid]=\"isValid\" [initialValues]=\"initialStatePreschoolId\">\r\n  </drdp-filter-select>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-state',\r\n  templateUrl: './select-state.component.html',\r\n  styleUrls: ['./select-state.component.scss']\r\n})\r\nexport class SelectStateComponent implements OnInit, OnChanges {\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @Output() state = new EventEmitter<any>();\r\n  @Input() initialStateId?: number | null;\r\n  @Input() initialStateIds?: number[] | null;\r\n  @Input() multiSelect: boolean = false; \r\n  @Input() clear: any;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() required: boolean = false;\r\n  stateOptions?: IState[];\r\n  selectedState?: number;\r\n  hasAccessToAll = this.permissionService.checkPermission(Permission.AccessAllAgencies);\r\n  public get select() { return SelectType }\r\n  constructor(private stateService: StateService, private authService: AuthService, private permissionService: PermissionService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getStateOptions();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear && !this.disabled) {\r\n      this.stateSelect?.clear();\r\n    }\r\n    this.getStateOptions();\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled)\r\n      this.stateSelect?.clearSelected();\r\n  }\r\n\r\n  getActiveStates(): void {\r\n    this.stateService.getAllStates()\r\n    .pipe(take(1))\r\n    .subscribe((states: IState[]) => {\r\n      this.stateOptions = states.filter((s) => s.isSelectable);\r\n      this.disabled = this.stateOptions.length <= 1 || this.disabled;\r\n    });\r\n  }\r\n\r\n  getLinkedStates(userId: number): void {\r\n    this.stateService.getLinkedStates(userId)\r\n      .pipe(take(1))\r\n      .subscribe((states: IState[]) => {\r\n        this.stateOptions = states.filter((s) => s.isSelectable);\r\n        this.disabled = this.stateOptions.length <= 1 || this.disabled;\r\n      });\r\n  }\r\n\r\n  getStateOptions(): void {\r\n    if (!this.hasAccessToAll) {\r\n      const user = this.authService.getCurrentUser();\r\n      this.getLinkedStates(user.userId);\r\n    } else {\r\n      this.getActiveStates();\r\n    }\r\n  }\r\n\r\n  onStateSelect(event: IState): void {\r\n    this.state.emit(event);\r\n  }\r\n\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select #stateSelect label=\"State\" [multiSelect]=\"multiSelect\" [options]=\"stateOptions\"\r\n    [selectType]=\"select.States\" [required]=\"required\" [isValid]=\"isValid\" [disabled]=\"disabled\"\r\n    (onSelected)=\"onStateSelect($event)\" [initialValues]=\"initialStateId || initialStateIds\">\r\n  </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IStatusType } from '@core/interfaces/iuser';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-status',\r\n  templateUrl: './select-status.component.html',\r\n  styleUrls: ['./select-status.component.scss']\r\n})\r\nexport class SelectStatusComponent implements OnInit {\r\n  @ViewChild('statusSelect') statusSelect: FilterSelectComponent | undefined;\r\n  @Output() status = new EventEmitter<any>();\r\n  @Input() initialStatusId?: number | number[] | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  statusOptions?: IStatusType[] = [];\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.statusSelect?.clearSearch(true);\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    this.statusSelect?.clearSelected();\r\n  }\r\n\r\n  getStatus(): void {\r\n    this.lookupService.getAccountStatusTypes()\r\n      .pipe(\r\n        take(1)\r\n      )\r\n      .subscribe((status: IStatusType[]) => this.statusOptions = status);\r\n  }\r\n\r\n  onStatusSelect(event: IStatusType): void {\r\n    this.status.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #statusSelect\r\n        label=\"Status\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"statusOptions\" \r\n        [selectType]=\"select.Status\"\r\n        [required]=\"required\" \r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onStatusSelect($event)\"\r\n        [initialValues]=\"initialStatusId\">\r\n    </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISuffix } from '@core/interfaces/isuffix';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-suffix',\r\n  templateUrl: './select-suffix.component.html',\r\n  styleUrls: ['./select-suffix.component.scss']\r\n})\r\nexport class SelectSuffixComponent implements OnInit {\r\n  @ViewChild('suffixSelect') statusSelect: FilterSelectComponent | undefined;\r\n  @Output() suffix = new EventEmitter<any>();\r\n  @Input() initialSuffix?: string | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  suffixOptions?: ISuffix[] = [];\r\n  suffixId?: number;\r\n  public get select() {return SelectType }\r\n  constructor(private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getSuffix();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) this.statusSelect?.clearSearch(true);\r\n    if (this.initialSuffix) this.getSuffix();\r\n  }\r\n\r\n  getSuffix(): void {\r\n    this.lookupService.getSuffix()\r\n      .pipe(\r\n        take(1)\r\n      )\r\n      .subscribe((suffix: ISuffix[]) => {\r\n        this.suffixOptions = suffix;\r\n        if (this.initialSuffix) {\r\n          const findId = this.suffixOptions.find((suffix: ISuffix) => suffix.suffixName == this.initialSuffix);\r\n          this.suffixId = findId?.id;\r\n        }\r\n      });\r\n  }\r\n\r\n  onStatusSelect(event: ISuffix): void {\r\n    this.suffix.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #suffixSelect\r\n        label=\"Suffix\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"suffixOptions\" \r\n        [selectType]=\"select.Suffix\"\r\n        [required]=\"required\" \r\n        [isValid]=\"isValid\"\r\n        (onSelected)=\"onStatusSelect($event)\"\r\n        [initialValues]=\"suffixId\">\r\n    </drdp-filter-select>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DropdownService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  getSitesRatingPeriodTeachersData(params: any) {\r\n    const url = getSearchUrl('dropdown/sites-rating-period-teachers?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getTeachersDataBySiteId(siteId: number) {\r\n    return this.dataService.get(\r\n      `dropdown/rating-period-teachers/site/${siteId}`\r\n    );\r\n  }\r\n\r\n  getSchoolYearsRatingPeriodTeacherData(params: any) {\r\n    const url = getSearchUrl(\r\n      'dropdown/schoolyear-rating-periods-teachers?',\r\n      params\r\n    );\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getSiteRatingPeriodsByState(stateId: number) {\r\n    return this.dataService.get(\r\n      `dropdown/site-rating-periods/state/${stateId}`\r\n    );\r\n  }\r\n\r\n  getTeachers(agencyId: number, siteId: number = 0) {\r\n    return this.dataService.get(`dropdown/teachers/${agencyId}/${siteId}`);\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IClassTeacher } from '@core/interfaces/iclasses';\r\nimport { SelectComponent } from '../select/select.component';\r\nimport { DropdownService } from '@core/services/dropdown.service';\r\nimport { take } from 'rxjs';\r\nimport { IDropdownItemsDto } from '@core/interfaces/idropdown';\r\nimport { Role } from '@core/enums/roles';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-teacher',\r\n  templateUrl: './select-teacher.component.html',\r\n  styleUrls: ['./select-teacher.component.scss']\r\n})\r\nexport class SelectTeacherComponent implements OnInit {\r\n  @ViewChild('teacherSelect') teacherSelect: FilterSelectComponent | undefined;\r\n  @Output() teacher = new EventEmitter<any>();\r\n  @Output() teacherOfRecord = new EventEmitter<any>();\r\n  @Input() initialTeacherId?: number | null;\r\n  @Input() initialTeachersId?: number[] | null;\r\n  @Input() agencyId?: number | null;\r\n  @Input() siteId?: number | null;\r\n  @Input() allTeachers?: boolean = false;\r\n  @Input() teacherType?: number | null;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() requireSite: boolean = false;\r\n  teacherOptions?: IClassTeacher[] = [];\r\n  label: string = 'Teacher'\r\n  selectType = this.select.Teacher;\r\n  isTooltipActive = false;\r\n\r\n  public get select() {return SelectType }\r\n  public get role() {return Role }\r\n  constructor(private dropdownService: DropdownService) { }\r\n\r\n  ngOnInit(): void {\r\n    // if (this.agencyId && this.siteId) this.getTeachers(this.agencyId, this.siteId);\r\n    // if (this.agencyId) this.getTeachers(this.agencyId);\r\n    if (this.teacherType === this.role.TeacherOfRecord) {\r\n      this.label = 'Teacher of Record';\r\n      this.selectType = this.select.UserRoleNames;\r\n      this.isTooltipActive = true;\r\n    }\r\n  }\r\n\r\n  clearSelected() {\r\n    if (!this.disabled)\r\n      this.teacherSelect?.clearSelected();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.teacherSelect?.clearSearch(true);\r\n    };\r\n\r\n    if (this.requireSite && !this.siteId) {\r\n      this.teacherOptions = [];\r\n    } else if (this.agencyId) {\r\n      this.getTeachers(this.agencyId, this.siteId ?? 0);\r\n    } else {\r\n      this.teacherOptions = [];\r\n    }\r\n  }\r\n\r\n  getTeachers(agencyId: number, siteId?: number): void {\r\n    this.dropdownService.getTeachers(agencyId, siteId)\r\n      .pipe(take(1))\r\n      .subscribe((dropdown: IDropdownItemsDto) => {\r\n        if (this.allTeachers) this.teacherOptions = dropdown.allTeachers;\r\n        else if (this.teacherType === Role.Teacher) this.teacherOptions = dropdown.teachers;\r\n        else this.teacherOptions = dropdown.teachersOfRecord;\r\n      });\r\n  }\r\n\r\n  onTeacherSelect(event: any): void {\r\n    if (this.allTeachers || this.teacherType === Role.Teacher) {\r\n      this.teacher.emit(event);\r\n    } else {\r\n      this.teacherOfRecord.emit(event);\r\n    }\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #teacherSelect\r\n        [label]=\"label\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"teacherOptions\" \r\n        [selectType]=\"selectType\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        [isValid]=\"isValid\"\r\n        [tooltipActive]=\"isTooltipActive\"\r\n        (onSelected)=\"onTeacherSelect($event)\"\r\n        [initialValues]=\"initialTeacherId || initialTeachersId\">\r\n    </drdp-filter-select>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISiteType } from '@core/interfaces/isites';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { SelectComponent } from '../select/select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-type',\r\n  templateUrl: './select-type.component.html',\r\n  styleUrls: ['./select-type.component.scss']\r\n})\r\nexport class SelectTypeComponent implements OnInit {\r\n  @ViewChild('typeSelect') typeSelect: FilterSelectComponent | undefined;\r\n  @Output() type = new EventEmitter<any>();\r\n  @Input() initialTypeId?: number | null;\r\n  @Input() clear: any;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() required: boolean = false;\r\n  typeOptions?: ISiteType[];\r\n\r\n  public get select() {return SelectType }\r\n  constructor(private lookup: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getSiteType();\r\n  }\r\n\r\n  clearSelected() {\r\n    this.typeSelect?.clearSelected();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.clear) {\r\n      this.typeSelect?.clear();\r\n    }\r\n  }\r\n\r\n  getSiteType(): void {\r\n    this.lookup.getSiteTypes()\r\n      .pipe(take(1))\r\n      .subscribe((types: ISiteType[]) => this.typeOptions = types);\r\n  }\r\n\r\n  onTypeSelect(event: ISiteType): void {\r\n    this.type.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n      #typeSelect\r\n      label=\"Type\" \r\n      [options]=\"typeOptions\" \r\n      [selectType]=\"select.SiteType\"\r\n      [required]=\"required\" \r\n      [disabled]=\"disabled\"\r\n      [isValid]=\"isValid\"\r\n      (onSelected)=\"onTypeSelect($event)\"\r\n      [initialValues]=\"initialTypeId\">\r\n  </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IVendor } from '@core/interfaces/ivendor';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-select-vendor',\r\n  templateUrl: './select-vendor.component.html',\r\n  styleUrls: ['./select-vendor.component.scss'],\r\n})\r\nexport class SelectVendorComponent implements OnInit {\r\n  @ViewChild('vendorSelect') vendorSelect: FilterSelectComponent | undefined;\r\n  @Output() vendor = new EventEmitter<any>();\r\n  @Input() initialVendorId?: number | null;\r\n  @Input() initialVendorIds?: number | null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  vendorOptions?: IVendor[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getVendors();\r\n  }\r\n\r\n  getVendors(): void {\r\n    this.lookupService\r\n      .getVendors()\r\n      .pipe(take(1))\r\n      .subscribe((vendor: IVendor[]) => {\r\n        this.vendorOptions = vendor.filter(\r\n          (vendor: IVendor) => vendor.isVisible\r\n        );\r\n      });\r\n  }\r\n\r\n  onVendorSelect(event: IVendor): void {\r\n    this.vendor.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n    <drdp-filter-select \r\n        #vendorSelect\r\n        label=\"Vendors\" \r\n        [multiSelect]=\"multiSelect\" \r\n        [options]=\"vendorOptions\" \r\n        [selectType]=\"select.Vendor\"\r\n        [required]=\"required\" \r\n        [disabled]=\"disabled\"\r\n        (onSelected)=\"onVendorSelect($event)\"\r\n        [isValid]=\"isValid\"\r\n        [initialValues]=\"initialVendorId || initialVendorIds\">\r\n    </drdp-filter-select>\r\n</div>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select.component';\r\nimport { ISelectBoolean } from '@core/interfaces/iselectable';\r\n\r\n@Component({\r\n  selector: 'drdp-select-yes-no',\r\n  templateUrl: './select-yes-no.component.html',\r\n  styleUrls: ['./select-yes-no.component.scss'],\r\n})\r\nexport class SelectYesNoComponent implements OnInit {\r\n  @ViewChild('yesNoSelect') yesNoSelect: FilterSelectComponent | undefined;\r\n  @Output() optionSelected = new EventEmitter<any>();\r\n  @Input() initialId?: number | null;\r\n  @Input() initialIds: number[] | null = null;\r\n  @Input() multiSelectInitVals: boolean = false;\r\n  @Input() clear?: boolean;\r\n  @Input() multiSelect: boolean = false;\r\n  @Input() required: boolean = false;\r\n  @Input() disabled: boolean = false;\r\n  @Input() isValid: boolean = true;\r\n  @Input() label: string = 'Yes or No?';\r\n  @Input() additionalClasses: string = '';\r\n  selectOptions?: ISelectBoolean[] = [];\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n  constructor(private lookupService: LookupService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getYesNoOptions();\r\n  }\r\n\r\n  getYesNoOptions() {\r\n    this.lookupService\r\n      .getBasicSelects()\r\n      .pipe(take(1))\r\n      .subscribe((options: ISelectBoolean[]) => {\r\n        this.selectOptions = options;\r\n      });\r\n  }\r\n\r\n  onSelect(event: ISelectBoolean): void {\r\n    this.optionSelected.emit(event);\r\n  }\r\n}\r\n","<div class=\"h-full flex flex-col justify-between\">\r\n  <drdp-filter-select\r\n    #yesNoSelect\r\n    [label]=\"label\"\r\n    [multiSelect]=\"multiSelect\"\r\n    [options]=\"selectOptions\"\r\n    [selectType]=\"select.YesNo\"\r\n    [required]=\"required\"\r\n    [disabled]=\"disabled\"\r\n    (onSelected)=\"onSelect($event)\"\r\n    [isValid]=\"isValid\"\r\n    overrideLabel=\"an option\"\r\n    [initialValues]=\"initialId || initialIds\"\r\n    [additionalClasses]=\"additionalClasses\"\r\n  >\r\n  </drdp-filter-select>\r\n</div>\r\n","<footer class=\"text-center global-font-normal text-xs bg-drdpblue-200\">\r\n  <div class=\"flex flex-center justify-between pb-2 px-4\">\r\n    <div class=\"self-center\">\r\n      <p *ngIf=\"agencyFooter\" [innerHTML]='agencyFooter'></p>\r\n      <p [innerHTML]='defaultFooter'></p>\r\n    </div>\r\n    <img *ngIf=\"loggedIn\" class=\"cursor-pointer w-28 h-28\" src=\"assets/images/logo/CDSS_blue.jpg\" alt=\"CDSS Logo\">\r\n  </div>\r\n</footer>\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-footer',\r\n  templateUrl: './footer.component.html',\r\n  styleUrls: ['./footer.component.scss'],\r\n})\r\nexport class FooterComponent implements OnInit {\r\n  @Input() loggedIn?: boolean;\r\n  agencyFooter?: string;\r\n  footerText: string = '';\r\n  user = this.auth.getCurrentUser();\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  // Default footer pieces\r\n  defaultFooter: string = `<p>State of California Department of Social Services, Copyright 2024. Joint funding provided by \r\n  the California Department of Social Services, and the California Department of Education.</p><p>For assistance, please contact\r\n  <a class=\"text-drdpblue-300 hover:underline\" href=\"tel:1-800-770-6339\">1-800-770-6339</a> or email\r\n  <a class=\"text-drdpblue-300 hover:underline\" href=\"mailto:DRDPOnline@wested.org\">DRDPOnline@wested.org</a></p>`;\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private permission: PermissionService,\r\n    private agency: AgencyService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.loggedIn) {\r\n      this.checkAgencyFooter();\r\n    }\r\n  }\r\n\r\n  checkAgencyFooter() {\r\n    let agencyId = this.user.agencyId ? this.user.agencyId : 0;\r\n    let hasPermission = this.permission.checkPermission(\r\n      Permission.ViewAgencies\r\n    );\r\n\r\n    if (hasPermission && agencyId > 0) {\r\n      this.agency\r\n        .getAgency(agencyId)\r\n        .pipe(\r\n          take(1),\r\n          tap((agency: any) => {\r\n            this.agencyFooter = agency.footer;\r\n          })\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n}\r\n","<div class=\"dropdown\">\r\n  <div class=\"flex items-center relative\" role=\"button\">\r\n    <div class=\"flex-col\">\r\n      <p class=\"text-xl p-0 m-0 font-bold\">{{ vm?.label | uppercase }}</p>\r\n      <p class=\"text-drdpgrey-400 text-xs\">{{ vm?.labelTwo }}</p>\r\n    </div>\r\n\r\n    <i class=\"uil uil-angle-down text-2xl pr-1 down\"></i>\r\n    <i class=\"uil uil-angle-up text-2xl pr-1 hidden up\"></i>\r\n  </div>\r\n\r\n  <div\r\n    class=\"bg-white absolute place-content-center py-1 content-center drop-shadow-lg rounded-md shadow-inner p-1 z-10 hidden dropdown-content\">\r\n    <ul class=\"bg-white\">\r\n      <li *ngFor=\"let sublink of sites; let i = index\">\r\n        <a class=\"text-xs\">\r\n          <span>{{ sublink.site.siteName }}</span>\r\n        </a>\r\n      </li>\r\n      <li *ngIf=\"!sites || sites.length == 0\">\r\n        <a class=\"text-xs\">\r\n          <span>No assigned sites available</span>\r\n        </a>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { IDropMenu } from '@core/interfaces/side-menu';\r\n\r\n@Component({\r\n  selector: 'drdp-header-dropmenu',\r\n  templateUrl: './header-dropmenu.component.html',\r\n  styleUrls: ['./header-dropmenu.component.scss'],\r\n})\r\nexport class HeaderDropmenuComponent implements OnInit {\r\n  show = false;\r\n  @Input() sites: any;\r\n  \r\n  @Input() vm: IDropMenu | undefined\r\n  \r\n  constructor() {}\r\n\r\n\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  dropMenuToggle() {\r\n    this.show = !this.show;\r\n  }\r\n}\r\n","<div class=\"flex flex-row bg-drdpblue-300\">\r\n    <div *ngIf=\"logoSrc\" \r\n        class=\"basis-full md:basis-5/12 flex items-center justify-center md:justify-end\">\r\n        <img src={{logoSrc}} class=\"h-fit\" alt={{logoAlt}}>\r\n    </div>\r\n    <div *ngIf=\"imgSrc\" \r\n        class=\"basis-0 md:basis-1/2\">\r\n        <img src={{imgSrc}} class=\"h-fit\" alt={{imgAlt}}>\r\n    </div>\r\n    <div *ngIf=\"img2Src\" \r\n        class=\"basis-0 md:basis-2/12 flex items-center justify-center pr-4\">\r\n        <img src={{img2Src}}  alt={{img2Alt}} class=\"h-18 xxl:h-auto\">\r\n    </div>\r\n</div>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-header-logo-and-image',\r\n  templateUrl: './header-logo-and-image.component.html',\r\n  styleUrls: ['./header-logo-and-image.component.scss']\r\n})\r\nexport class HeaderLogoAndImageComponent implements OnInit {\r\n  @Input() logoSrc?: string;\r\n  @Input() imgSrc?: string;\r\n  @Input() logoAlt?: string;\r\n  @Input() imgAlt?: string;\r\n  @Input() img2Src?: string;\r\n  @Input() img2Alt?: string;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","<div\r\n  class=\"lg:flex place-content-between place-items-center border-b border-drdpgrey-100 self-center m-[1.5%] pb-[2.4%] hidden\"\r\n>\r\n  <div class=\"max-w-fit\">\r\n    <drdp-header-dropmenu\r\n      [vm]=\"userDropMenu\"\r\n      [sites]=\"dropMenuItems\"\r\n    ></drdp-header-dropmenu>\r\n  </div>\r\n  <div class=\"flex\">\r\n    <div class=\"px-2\" *ngFor=\"let links of headerBtns\">\r\n      <drdp-menu-link\r\n        [label]=\"links.label\"\r\n        [icon]=\"links.icon\"\r\n        [link]=\"links.routeLink\"\r\n        [blue]=\"true\"\r\n      ></drdp-menu-link>\r\n    </div>\r\n    <button class=\"px-2\" (click)=\"logout()\">\r\n      <span\r\n        ><i class=\"uil uil-signout text-drdpblue-300 text-xl\"></i>Logout</span\r\n      >\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"lg:hidden\">\r\n  <drdp-side-menu></drdp-side-menu>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { UserDropMenuService } from '@core/services/user-dropmenu.service';\r\nimport { take } from 'rxjs';\r\n\r\n\r\n@Component({\r\n  selector: 'drdp-header',\r\n  templateUrl: './header.component.html',\r\n  styleUrls: ['./header.component.scss'],\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  constructor(\r\n    private userDropmenu: UserDropMenuService,\r\n    public authService: AuthService,\r\n   \r\n  ) {}\r\n\r\n  headerBtns = this.userDropmenu.headerBtns;\r\n  dropMenuItems = this.user.sites;\r\n \r\n\r\n  userDropMenu: any = {\r\n    label: this.user.userName,\r\n    labelTwo: this.user.agencyName,\r\n  };\r\n\r\n  ngOnInit(): void {\r\n\r\n  }\r\n\r\n  logout(): void {\r\n    const currentUser = this.authService.getCurrentUser();\r\n    if (currentUser) this.authService.logout().pipe(take(1)).subscribe();\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'drdp-menu-link',\r\n  templateUrl: './menu-link.component.html',\r\n  styleUrls: ['./menu-link.component.scss']\r\n})\r\nexport class MenuLinkComponent {\r\n\r\n  @Input() label: string =''\r\n  @Input() link: string =''\r\n  @Input() icon!: string\r\n  @Input() blue!:boolean\r\n\r\n\r\n  constructor(private router:Router) { }\r\n\r\n  \r\n\r\n}\r\n","<a class=\"flex items-center border-t\" [routerLink]=\"[link]\" [ngClass]=\"blue? 'hover:text-drdpblue-300':'hover:text-white'\"  >\r\n    <i [ngClass]=\"[icon, blue?'text-drdpblue-300':'']\"></i>\r\n    <span>{{label}}</span>\r\n</a>\r\n","<div *ngIf=\"newsItems\" class=\"w-full flex flex-col\">\r\n  <div class=\"w-full bg-white rounded-[30px] shadow-md mt-5 flex flex-col relative\" *ngIf=\"canSeeNews && user.stateId != 30 && isBeforeEndDate()\">\r\n    <div class=\"p-6 flex-grow\">\r\n      <div class=\"relative\">\r\n        <p class=\"absolute right-0\">\r\n          <drdp-pill pillClass=\"WestEd\">\r\n            Agency\r\n          </drdp-pill>\r\n        </p>\r\n        <p class=\"md:shrink-0 text-lg-300 text-[20px] font-semibold\">\r\n          Winter Rating Period Available\r\n        </p>\r\n      </div>\r\n      <div class=\"overflow-x-auto scrollbar scrollbar-thumb-white scrollbar-track-gray-100 py-4\">\r\n        <div class=\"relative overflow-x-auto\">\r\n          <div class=\"w-[91rem]\">\r\n            <p class=\"break-words mb-3\">Winter Rating Period Now Open to Add Classes and Re-enroll Children.</p>\r\n            <br>\r\n            <p>The winter rating period is ideal for programs rating assessments 3-4 times per program year. </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div class=\"w-full bg-white rounded-[30px] shadow-md mt-5 flex flex-col relative\" *ngFor=\"let news of newsItems\">\r\n    <div class=\"p-6 flex-grow\">\r\n      <div class=\"relative\">\r\n        <p class=\"absolute right-0\">\r\n          <drdp-pill *ngIf=\"news.newsItemType.newsItemTypeName\" [pillClass]=\"news.newsItemType.newsItemTypeName\">\r\n            {{ news.newsItemType.newsItemTypeName }}\r\n          </drdp-pill>\r\n        </p>\r\n        <p class=\"md:shrink-0 text-lg-300 text-[20px] font-semibold\">\r\n          {{ news.newsItemTitle }}\r\n          <drdp-btn *ngIf=\"news.createdBy === user.userId\" class=\"mx-2 text-sm\" (click)=\"editNewsItem(news)\"\r\n            cdkFocusInitial>\r\n            <i class=\"uil uil-pen cursor-pointer\"></i> Edit News Item\r\n          </drdp-btn>\r\n        </p>\r\n      </div>\r\n      <div class=\"overflow-x-auto scrollbar scrollbar-thumb-white scrollbar-track-gray-100 py-4\">\r\n        <div class=\"relative overflow-x-auto\">\r\n          <div class=\"w-[91rem]\">\r\n            <p class=\" break-words mb-3\">{{ news.newsItemBody }}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div *ngIf=\"!newsItems\">\r\n  <div class=\"w-full bg-white rounded-[30px] shadow-md mt-5 flex flex-col relative\" *ngIf=\"canSeeNews && user.stateId != 30 && isBeforeEndDate()\">\r\n    <div class=\"p-6 flex-grow\">\r\n      <div class=\"relative\">\r\n        <p class=\"absolute right-0\">\r\n          <drdp-pill pillClass=\"WestEd\">\r\n            Agency\r\n          </drdp-pill>\r\n        </p>\r\n        <p class=\"md:shrink-0 text-lg-300 text-[20px] font-semibold\">\r\n          Winter Rating Period Available\r\n        </p>\r\n      </div>\r\n      <div class=\"overflow-x-auto scrollbar scrollbar-thumb-white scrollbar-track-gray-100 py-4\">\r\n        <div class=\"relative overflow-x-auto\">\r\n          <div class=\"w-[91rem]\">\r\n            <p class=\"break-words mb-3\">Winter Rating Period Now Open to Add Classes and Re-enroll Children.</p>\r\n            <br>\r\n            <p>The winter rating period is ideal for programs rating assessments 3-4 times per program year. </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  \r\n  <ng-template #noNewsMessage>\r\n    <p> Nothing new to see here!</p>\r\n  </ng-template>\r\n  \r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NewsItemService } from '@core/services/news-item.service';\r\nimport { NewsDescriptionComponent } from '@views/user/dashboard/latest-news/news-description/news-description.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Router } from '@angular/router';\r\nimport { Role } from '@core/enums/roles';\r\n\r\ndeclare interface RouteInfo {\r\n  agency: string;\r\n  title: string;\r\n  description: string;\r\n  btnColor: string;\r\n  name: string;\r\n  url: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'drdp-news-item',\r\n  templateUrl: './news-item.component.html',\r\n  styleUrls: ['./news-item.component.scss'],\r\n})\r\nexport class NewsItemComponent implements OnInit {\r\n  newsItems: any[] = [];\r\n  newsItemClass: any = {\r\n    WestEd: 'text-drdpblue-400 bg-drdpblue-500 hover:bg-drdpblue-200',\r\n    Agency: 'text-drdpGreen-300 bg-drdpGreen-200 hover:bg-drdpGreen-100',\r\n    UndefinedType: '',\r\n  };\r\n  canEdit: boolean = false;\r\n  user = this.authService.getCurrentUser();\r\n\r\n  //temporary data\r\n  canSeeNews = this.user?.roleAssignments?.some(r => r.roleId === Role.LeadAgencyAdministrator) || \r\n               this.user?.roleAssignments?.some(r => r.roleId === Role.DataEntry_Analyst) ||\r\n               this.user?.roleAssignments?.some(r => r.roleId === Role.AgencyAdministrator) ||\r\n               this.user?.roleAssignments?.some(r => r.roleId === Role.SiteAdministrator) ||\r\n               this.user?.roleAssignments?.some(r => r.roleId === Role.TeacherOfRecordEnrollment);\r\n  endDate: Date = new Date('2024-11-22'); \r\n\r\n  constructor(\r\n    public newsItemService: NewsItemService,\r\n    public modal: MatDialog,\r\n    public PermissionService: PermissionService,\r\n    public authService: AuthService,\r\n    private router: Router,\r\n  ) {}\r\n\r\n  private subscriptions = new Subscription();\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.add(\r\n      this.newsItemService.getRecentItems(2).subscribe((res: any) => {\r\n        if (res) {\r\n          this.newsItems = res;\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  toggleModal(data: any): void {\r\n    const modalRef = this.modal.open(NewsDescriptionComponent, {\r\n      data: data ? data : undefined,\r\n    });\r\n  }\r\n\r\n  editNewsItem(news: any): void {\r\n    this.modal.closeAll();\r\n    this.router.navigate([`/newsitems/${news.id}`])\r\n  }\r\n\r\n  isBeforeEndDate(): boolean {\r\n    const currentDate: Date = new Date();\r\n    return currentDate < this.endDate;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-pill',\r\n  templateUrl: './pill.component.html',\r\n  styleUrls: ['./pill.component.scss'],\r\n})\r\nexport class PillComponent implements OnInit {\r\n  @Input() pillClass: string = '';\r\n  pillClasses: string = '';\r\n  genericPillClass: string = 'text-drdpgrey-300 bg-drdpgrey-25';\r\n\r\n  newsItemTypeClasses: any = {\r\n    Agency: 'text-drdpbgrey-300 bg-drdpGreen-200',\r\n    WestEd: 'text-drdpblue-600 bg-drdpblue-500',\r\n  };\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {\r\n    this.setClass();\r\n  }\r\n\r\n  setClass(): void {\r\n    this.pillClasses =\r\n      this.newsItemTypeClasses[this.pillClass] ?? this.genericPillClass;\r\n  }\r\n}\r\n","<button\r\n    class=\"py-1 px-3 rounded-full text-[12px] transition duration-300 ease cursor-default\"\r\n    [ngClass]=\"pillClasses\">\r\n    <ng-content></ng-content>\r\n</button>\r\n","<div *ngIf=\"!isAssign && !isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n\r\n  <div *ngIf=\"evidences && evidences.length < 1\">\r\n    <label for=\"No evidence\">No Audio available.</label>\r\n  </div>\r\n\r\n  <div *ngFor=\"let audio of evidences; let i = index\" class=\"flex flex-col w-96 pt-4\">\r\n    <label>{{audio.fileName}}</label>\r\n    <drdp-audio [url]=\"generateUrlWithSasToken(audio.url)\"></drdp-audio>\r\n    <div *ngIf=\"!edit\">\r\n      <label>Notes</label>\r\n      <p class=\"break-words\">{{audio.notes}}</p>\r\n      <div *ngIf=\"audio.selectedLevel\"\r\n        class=\"flex items-center\">\r\n        <label class=\"font-normal text-sm\">{{audio.levelName}}</label>\r\n        <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n          src=\"assets/images/portfolio/{{audio.levelIcon}}-{{audio.selectedLevel ? audio.selectedLevel: 1}}.svg\" />\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"edit\">\r\n      <label>Edit Notes</label>\r\n      <textarea class=\" w-full h-64 border-2 border-black p-3\" [(ngModel)]=\"audio.notes\"\r\n        (keyup)=\"emitUpdates(audio)\">{{audio.notes}}</textarea>\r\n    </div>\r\n    <div class=\"my-2 text-sm\">\r\n      {{audio.collectedOn | date : \"MM/dd/yyyy\"}}\r\n    </div>\r\n    <div class=\"my-2\"> <strong>Uploaded By:</strong> {{audio.uploadedBy}}</div>\r\n\r\n    <div *ngIf=\"isFutureEvidence && canEdit\">\r\n      <drdp-btn color=\"outline\" (click)=\"openAssignModal(audio)\">\r\n        Assign Enrollment </drdp-btn>\r\n    </div>\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"isPortfolio && !isFutureEvidence\">\r\n        <drdp-btn *ngIf=\"!isDomain && !edit\" color=\"outline\" (click)=\"ratingUpdates(audio)\">\r\n          Rate {{audio.measureCode}} <i\r\n            class=\"text-drdpblue-300 text-xl uil uil-check-circle {{audio.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i>\r\n        </drdp-btn>\r\n        <drdp-btn *ngIf=\"!edit && isDomain\" class=\"text-sm pt-2\" color=\"outline\" (click)=\"toggleAssign(audio)\">Assign\r\n          Evidence</drdp-btn>\r\n        <div class=\"mb-6\" *ngIf=\"edit && !isFutureEvidence\">\r\n          <drdp-btn class=\"text-sm pt-2\" color=\"fill\" (click)=\"toggleCopy(audio)\">Copy Evidence</drdp-btn>\r\n        </div>\r\n        <button *ngIf=\"edit\" type=\"button\" class=\" text-red-600 pt-2 justify-start text-sm\"\r\n          (click)=\"deleteEvidence(audio, i)\"><i class=\"uil uil-times-circle mr-1\"></i>Remove Evidence</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div *ngIf=\"isAssign || isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n  <div class=\"flex flex-col w-full\">\r\n    <label>{{ evidenceLabel }}</label>\r\n    <drdp-audio [url]=\"generateUrlWithSasToken(currentAssignment?.url)\"></drdp-audio>\r\n    <label>Notes</label>\r\n    <p class=\"break-words\">{{currentAssignment?.notes}}</p>\r\n    <label>{{ assignmentLabel }}</label>\r\n    <span *ngIf=\"isCopy\">Make a copy of existing evidence to move to another domain/measure.</span>\r\n    <div class=\"flex flex-row gap-14\">\r\n      <div *ngFor=\"let domain of domainGrouping\">\r\n        <div class=\"flex flex-col\">\r\n          <label>{{domain.domainCode}}</label>\r\n          <ng-container *ngIf=\"isCopy; else isAssign\">\r\n            <mat-checkbox\r\n              *ngIf=\"isDomain\"\r\n              class=\"font-medium\"\r\n              [checked]=\"domain.isAllSelected\"\r\n              [(ngModel)]=\"domain.isAllSelected\"\r\n              (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n              [ngModelOptions]=\"{standalone: true}\">\r\n              {{domain.domainCode}}\r\n            </mat-checkbox>\r\n            <div class=\"ml-4\">\r\n              <div *ngFor=\"let measure of domain.measures\">\r\n                <mat-checkbox class=\"font-medium\"\r\n                  (change)=\"onMeasureSelectChange($event.checked, domain, measure.id)\"\r\n                  [(ngModel)]=\"measure.isSelected\"\r\n                  [ngModelOptions]=\"{standalone: true}\">\r\n                  {{measure.code}}\r\n                </mat-checkbox>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #isAssign>\r\n            <div *ngFor=\"let measure of domain.measures\">\r\n              <mat-checkbox color=\"primary\" (click)=\"handleCheckbox(measure.id)\">{{measure.code}}</mat-checkbox>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"isAssign\" class=\"self-end\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleAssign(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"assignEvidence()\">Assign Evidence</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"isCopy\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleCopy(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"copyEvidence()\">Copy Evidence</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IMasterDomain } from '@core/interfaces/imaster-domain';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPortfolioAssignMeasureEvidence, IPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { take, tap } from 'rxjs';\r\nimport { PermissionService } from '@core/services/permission.service';\r\n\r\n@Component({\r\n  selector: 'drdp-evidence-audio',\r\n  templateUrl: './evidence-audio.component.html',\r\n  styleUrls: ['./evidence-audio.component.scss']\r\n})\r\nexport class EvidenceAudioComponent implements OnInit {\r\n  @Output() evidenceAction = new EventEmitter();\r\n  @Output() toggleAssignModal = new EventEmitter<IPortfolioEvidenceResponse>();\r\n  @Output() ratingAction = new EventEmitter();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Input() edit = false;\r\n  @Input() domainGrouping?: any;\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() sasToken?: any;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = false;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  currentAssignment?: IPortfolioEvidenceResponse | null;\r\n  isAssign = false;\r\n  measureIds: number[] = [];\r\n  domainIds: number[] = [];\r\n  isCopy = false;\r\n  evidenceLabel: string = 'Assign Audio';\r\n  assignmentLabel: string = ''\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditObservations\r\n  );\r\n\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private sanitizer: DomSanitizer,\r\n    private portfolioService: PortfolioService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService) { }\r\n\r\n  ngOnChanges() {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((audio: IPortfolioEvidenceResponse) => audio.evidenceTypeID === PortfolioEvidenceType.Audio && audio.domainId === this.domainId && (this.measureId == null || audio.measureId === this.measureId));\r\n    }\r\n    if (this.edit) this.isAssign = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((audio: IPortfolioEvidenceResponse) => audio.evidenceTypeID === PortfolioEvidenceType.Audio && audio.domainId === this.domainId && (this.measureId == null || audio.measureId === this.measureId));\r\n    }\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string) {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${addHTTPS(blobUrl)}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n\r\n  handleCheckbox(id: number): void {\r\n    if (!this.measureIds.includes(id)) {\r\n      this.measureIds.push(id);\r\n    } else {\r\n      let index = this.measureIds.indexOf(id);\r\n      this.measureIds.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  assignEvidence(): void {\r\n    if (this.measureIds.length < 1) {\r\n      return this.toastService.warn('Choose measures to assign.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds\r\n      }\r\n\r\n      this.portfolioService.assignEvidence(payload, 'Evidence assigned to measures.').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((video: IPortfolioEvidenceResponse) => video?.id === this.currentAssignment?.id);\r\n              this.evidences?.splice(index, 1);\r\n              this.isAssign = false;\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  deleteEvidence(audio: IPortfolioEvidenceResponse, index: number): void {\r\n    let modal: IModalEmitData = {\r\n      data: audio,\r\n      index: index\r\n    }\r\n    modal.data.modalInfo = {\r\n    title: `Delete ${audio.fileName}`,\r\n    message: `Are you sure you want to want to delete <span class=\"font-bold\">${audio.fileName}</span>?`,\r\n    name: audio.fileName,\r\n    primaryBtnClass: 'red',\r\n    primaryBtnText: Modal.Delete\r\n  };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n    data: modal,\r\n  });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n    if (res) {\r\n      this.portfolioService.deleteEvidence(audio.id, 'Evidence Removed').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((evidence: IPortfolioEvidenceResponse) => evidence.id === audio.id);\r\n              this.evidences.splice(index, 1);\r\n              this.refreshEvidences.emit();\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  });\r\n}\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) domain.measures.forEach((m) => (m.isSelected = false));\r\n  }\r\n\r\n  onMeasureSelectChange(value: boolean, domain: IBaseTemplateDomain | IMasterDomain, id: number) {\r\n    if (value) domain.isAllSelected = false;\r\n  }\r\n\r\n  copyEvidence(): void {\r\n    this.domainGrouping.forEach((domain: IBaseTemplateDomain) => {\r\n      if (domain.isAllSelected) this.domainIds.push(domain.id);\r\n      domain.measures.forEach((measure: ITemplateMeasure) => {\r\n        if (measure.isSelected) this.measureIds.push(measure.id);\r\n      });\r\n    });\r\n\r\n    if (this.domainIds.length < 1 && this.measureIds.length < 1) {\r\n      return this.toastService.warn('No domains or measures to copy.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds,\r\n        domainIds: this.domainIds,\r\n        measureLevelName: this.currentAssignment.levelName\r\n      };\r\n\r\n      const ageGradeInstrumentId = this.route.snapshot.paramMap.get('ageGradeId');\r\n      if (ageGradeInstrumentId) payload.ageGradeInstrumentId = +ageGradeInstrumentId;\r\n\r\n      this.portfolioService.copyEvidence(payload).pipe(\r\n        take(1),\r\n        tap(res => {\r\n          if (res.isSaved && this.evidences) {\r\n            if (!res.ratingCopied) this.toastService.warn('Evidence copied. Could not copy rating.');\r\n            else this.toastService.success('Evidence copied.');\r\n          }\r\n          this.refreshEvidences.emit();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  emitUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.evidenceAction.emit(event);\r\n  }\r\n\r\n  ratingUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.ratingAction.emit(event);\r\n  }\r\n\r\n  toggleAssign(evidence: IPortfolioEvidenceResponse | null): void {\r\n    this.currentAssignment = evidence;\r\n    this.isAssign = !this.isAssign;\r\n  }\r\n\r\n  openAssignModal(evidence: IPortfolioEvidenceResponse) {\r\n    this.toggleAssignModal.emit(evidence);\r\n  }\r\n\r\n  toggleCopy(evidence: IPortfolioEvidenceResponse | null):void {\r\n    this.currentAssignment = evidence;\r\n    this.isCopy = !this.isCopy;\r\n    this.evidenceLabel = this.isCopy ? 'Copy Evidence' : this.currentAssignment?.fileName ?? 'Assign Audio';\r\n    this.assignmentLabel = this.isCopy ? 'Copy Evidence to Another Domain or Measure' : 'Assign Evidence'\r\n  }\r\n}\r\n","<div *ngIf=\"!isAssign && !isCopy\" class=\"flex flex-col gap-14 pb-5\">\r\n\r\n  <div *ngIf=\"evidences && evidences.length < 1\">\r\n    <label for=\"No evidence\">No Notes available.</label>\r\n  </div>\r\n\r\n  <div *ngFor=\"let evidence of evidences; let i = index\" class=\"flex flex-col w-full pt-4\">\r\n    <div *ngIf=\"!edit\">\r\n      <label>Notes</label>\r\n      <p class=\"break-words\">{{evidence.notes}}</p>\r\n      <div *ngIf=\"evidence.selectedLevel\"\r\n        class=\"flex items-center\">\r\n        <label class=\"font-normal text-sm\">{{evidence.levelName}}</label>\r\n        <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n          src=\"assets/images/portfolio/{{evidence.levelIcon}}-{{evidence.selectedLevel ? evidence.selectedLevel: 1}}.svg\" />\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"edit\">\r\n      <label>Edit Notes</label>\r\n      <textarea class=\" w-96 h-64 border-2 border-black p-3\" [(ngModel)]=\"evidence.notes\"\r\n        (keyup)=\"emitUpdates(evidence)\">{{evidence.notes}}</textarea>\r\n    </div>\r\n    <div class=\"my-2 text-sm\">\r\n      {{evidence.collectedOn | date : \"MM/dd/yyyy\"}}\r\n    </div>\r\n    <div class=\"my-2\"> <strong>Uploaded By:</strong> {{evidence.uploadedBy}}</div>\r\n    <div *ngIf=\"isFutureEvidence && canEdit\">\r\n      <drdp-btn color=\"outline\" (click)=\"openAssignModal(evidence)\">\r\n        Assign Enrollment </drdp-btn>\r\n    </div>\r\n\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"isPortfolio && !isFutureEvidence\">\r\n        <drdp-btn *ngIf=\"!isDomain && !edit\" color=\"outline\" (click)=\"ratingUpdates(evidence)\">\r\n          Rate {{evidence.measureCode}} <i\r\n            class=\"text-drdpblue-300 text-xl uil uil-check-circle {{evidence.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i>\r\n        </drdp-btn>\r\n        <drdp-btn *ngIf=\"!edit && isDomain\" class=\"text-sm pt-2\" color=\"outline\" (click)=\"toggleAssign(evidence)\">Assign\r\n          Evidence</drdp-btn>\r\n        <div class=\"mb-6\" *ngIf=\"edit && !isFutureEvidence\">\r\n          <drdp-btn class=\"text-sm pt-2\" color=\"fill\" (click)=\"toggleCopy(evidence)\">Copy Evidence</drdp-btn>\r\n        </div>\r\n        <button *ngIf=\"edit\" type=\"button\" class=\" text-red-600 pt-2 justify-start text-sm\"\r\n          (click)=\"deleteEvidence(evidence, i)\"><i class=\"uil uil-times-circle mr-1\"></i>Remove Evidence</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"isAssign || isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n  <div class=\"flex flex-col w-full\">\r\n    <label>{{ evidenceLabel }}</label>\r\n    <p class=\"break-words\">{{currentAssignment?.notes}}</p>\r\n    <label>{{ assignmentLabel }}</label>\r\n    <span *ngIf=\"isCopy\">Make a copy of existing evidence to move to another domain/measure.</span>\r\n    <div class=\"flex flex-row gap-14\">\r\n      <div *ngFor=\"let domain of domainGrouping\">\r\n        <div class=\"flex flex-col\">\r\n          <label>{{domain.domainCode}}</label>\r\n          <ng-container *ngIf=\"isCopy; else isAssign\">\r\n            <mat-checkbox\r\n              *ngIf=\"isDomain\"\r\n              class=\"font-medium\"\r\n              [checked]=\"domain.isAllSelected\"\r\n              [(ngModel)]=\"domain.isAllSelected\"\r\n              (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n              [ngModelOptions]=\"{standalone: true}\">\r\n              {{domain.domainCode}}\r\n            </mat-checkbox>\r\n            <div class=\"ml-4\">\r\n              <div *ngFor=\"let measure of domain.measures\">\r\n                <mat-checkbox class=\"font-medium\"\r\n                  (change)=\"onMeasureSelectChange($event.checked, domain, measure.id)\"\r\n                  [(ngModel)]=\"measure.isSelected\"\r\n                  [ngModelOptions]=\"{standalone: true}\">\r\n                  {{measure.code}}\r\n                </mat-checkbox>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #isAssign>\r\n            <div *ngFor=\"let measure of domain.measures\">\r\n              <mat-checkbox color=\"primary\" (click)=\"handleCheckbox(measure.id)\">{{measure.code}}</mat-checkbox>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"isAssign\" class=\"self-end\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleAssign(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"assignEvidence()\">Assign Evidence</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"isCopy\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleCopy(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"copyEvidence()\">Copy Evidence</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IMasterDomain } from '@core/interfaces/imaster-domain';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPortfolioAssignMeasureEvidence, IPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-evidence-notes',\r\n  templateUrl: './evidence-notes.component.html',\r\n  styleUrls: ['./evidence-notes.component.scss']\r\n})\r\nexport class EvidenceNotesComponent implements OnInit {\r\n  @Output() evidenceAction = new EventEmitter();\r\n  @Output() ratingAction = new EventEmitter();\r\n  @Output() toggleAssignModal = new EventEmitter<IPortfolioEvidenceResponse>();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Input() edit = false;\r\n  @Input() domainGrouping?: any;\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() sasToken?: any;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = false;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  currentAssignment?: IPortfolioEvidenceResponse | null;\r\n  isAssign = false;\r\n  measureIds: number[] = [];\r\n  domainIds: number[] = [];\r\n  isCopy = false;\r\n  evidenceLabel: string = 'Assign Notes';\r\n  assignmentLabel: string = ''\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditObservations\r\n  );\r\n\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private sanitizer: DomSanitizer,\r\n    private portfolioService: PortfolioService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService) { }\r\n\r\n  ngOnChanges()\r\n  {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((note: IPortfolioEvidenceResponse) => note.evidenceTypeID === PortfolioEvidenceType.Note && note.domainId === this.domainId && (this.measureId == null || note.measureId === this.measureId));\r\n    }\r\n    if (this.edit) this.isAssign = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((note: IPortfolioEvidenceResponse) => note.evidenceTypeID === PortfolioEvidenceType.Note && note.domainId === this.domainId && (this.measureId == null || note.measureId === this.measureId));\r\n    }\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string) {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${blobUrl}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n\r\n  handleCheckbox(id: number): void {\r\n    if (!this.measureIds.includes(id)) {\r\n      this.measureIds.push(id);\r\n    } else {\r\n      let index = this.measureIds.indexOf(id);\r\n      this.measureIds.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  assignEvidence(): void {\r\n    if (this.measureIds.length < 1) {\r\n      return this.toastService.warn('Choose measures to assign.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds\r\n      }\r\n\r\n      this.portfolioService.assignEvidence(payload, 'Evidence assigned to measures.').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((video: IPortfolioEvidenceResponse) => video?.id === this.currentAssignment?.id);\r\n              this.evidences?.splice(index, 1);\r\n              this.isAssign = false;\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  deleteEvidence(note: IPortfolioEvidenceResponse, index: number): void {\r\n    let modal: IModalEmitData = {\r\n      data: note,\r\n      index: index\r\n    }\r\n    modal.data.modalInfo = {\r\n    title: `Delete ${note.fileName}`,\r\n    message: `Are you sure you want to want to delete <span class=\"font-bold\">${note.fileName}</span>?`,\r\n    name: note.fileName,\r\n    primaryBtnClass: 'red',\r\n    primaryBtnText: Modal.Delete\r\n  };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n    data: modal,\r\n  });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n    if (res) {\r\n      this.portfolioService.deleteEvidence(note.id, 'Evidence Removed').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((evidence: IPortfolioEvidenceResponse) => evidence.id === note.id);\r\n              this.evidences.splice(index, 1);\r\n              this.refreshEvidences.emit();\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  });\r\n}\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) domain.measures.forEach((m) => (m.isSelected = false));\r\n  }\r\n\r\n  onMeasureSelectChange(value: boolean, domain: IBaseTemplateDomain | IMasterDomain, id: number) {\r\n    if (value) domain.isAllSelected = false;\r\n  }\r\n\r\n  copyEvidence(): void {\r\n    this.domainGrouping.forEach((domain: IBaseTemplateDomain) => {\r\n      if (domain.isAllSelected) this.domainIds.push(domain.id);\r\n      domain.measures.forEach((measure: ITemplateMeasure) => {\r\n        if (measure.isSelected) this.measureIds.push(measure.id);\r\n      });\r\n    });\r\n\r\n    if (this.domainIds.length < 1 && this.measureIds.length < 1) {\r\n      return this.toastService.warn('No domains or measures to copy.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds,\r\n        domainIds: this.domainIds,\r\n        measureLevelName: this.currentAssignment.levelName\r\n      };\r\n\r\n      const ageGradeInstrumentId = this.route.snapshot.paramMap.get('ageGradeId');\r\n      if (ageGradeInstrumentId) payload.ageGradeInstrumentId = +ageGradeInstrumentId;\r\n\r\n      this.portfolioService.copyEvidence(payload).pipe(\r\n        take(1),\r\n        tap(res => {\r\n          if (res.isSaved && this.evidences) {\r\n            if (!res.ratingCopied) this.toastService.warn('Evidence copied. Could not copy rating.');\r\n            else this.toastService.success('Evidence copied.');\r\n          }\r\n          this.refreshEvidences.emit();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  emitUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.evidenceAction.emit(event);\r\n  }\r\n\r\n  ratingUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.ratingAction.emit(event);\r\n  }\r\n\r\n  toggleAssign(evidence: IPortfolioEvidenceResponse | null): void {\r\n    this.currentAssignment = evidence;\r\n    this.isAssign = !this.isAssign;\r\n  }\r\n\r\n  openAssignModal(evidence: IPortfolioEvidenceResponse) {\r\n    this.toggleAssignModal.emit(evidence);\r\n  }\r\n\r\n  toggleCopy(evidence: IPortfolioEvidenceResponse | null):void {\r\n    this.currentAssignment = evidence;\r\n    this.isCopy = !this.isCopy;\r\n    this.evidenceLabel = this.isCopy ? 'Copy Evidence' : 'Assign Notes';\r\n    this.assignmentLabel = this.isCopy ? 'Copy Evidence to Another Domain or Measure' : 'Assign Evidence'\r\n  }\r\n}\r\n","<div *ngIf=\"!isAssign && !isCopy\" class=\"flex flex-row gap-14 pb-5 items-baseline\">\r\n\r\n  <div *ngIf=\"evidences && evidences.length < 1\">\r\n    <label for=\"No evidence\">No Photos available.</label>\r\n  </div>\r\n\r\n  <div *ngFor=\"let evidence of evidences; let i = index\" class=\"flex flex-col w-96 pt-4\">\r\n    <img [src]=\"generateUrlWithSasToken(evidence.url)\" alt=\"Image description\">\r\n    <div *ngIf=\"!edit\">\r\n      <label>Notes</label>\r\n      <p class=\"break-words\">{{evidence.notes}}</p>\r\n      <div *ngIf=\"evidence.selectedLevel\"\r\n        class=\"flex items-center\">\r\n        <label class=\"font-normal text-sm\">{{evidence.levelName}}</label>\r\n        <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n          src=\"assets/images/portfolio/{{evidence.levelIcon}}-{{evidence.selectedLevel ? evidence.selectedLevel: 1}}.svg\" />\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"edit\">\r\n      <label>Edit Notes</label>\r\n      <textarea class=\" w-full h-64 border-2 border-black p-3\" [(ngModel)]=\"evidence.notes\" (keyup)=\"emitUpdates(evidence)\">{{evidence.notes}}</textarea>\r\n    </div>\r\n    <div class=\"my-2 text-sm\">\r\n      {{evidence.collectedOn | date : \"MM/dd/yyyy\"}}\r\n    </div>\r\n    <div class=\"my-2\"> <strong>Uploaded By:</strong> {{evidence.uploadedBy}}</div>\r\n    <div *ngIf=\"isFutureEvidence && canEdit\">\r\n      <drdp-btn color=\"outline\" (click)=\"openAssignModal(evidence)\">\r\n        Assign Enrollment </drdp-btn>\r\n    </div>\r\n\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"isPortfolio\">\r\n        <drdp-btn *ngIf=\"!isDomain && !edit && !isFutureEvidence\" color=\"outline\" (click)=\"ratingUpdates(evidence)\">\r\n          Rate {{evidence.measureCode}} <i\r\n              class=\"text-drdpblue-300 text-xl uil uil-check-circle {{evidence.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i></drdp-btn>\r\n        <drdp-btn *ngIf=\"!edit && isDomain && !isFutureEvidence\" class=\"text-sm pt-2\" color=\"outline\" (click)=\"toggleAssign(evidence)\">Assign Evidence</drdp-btn>\r\n        <div class=\"mb-6\" *ngIf=\"edit && !isFutureEvidence\">\r\n          <drdp-btn class=\"text-sm pt-2\" color=\"fill\" (click)=\"toggleCopy(evidence)\">Copy Evidence</drdp-btn>\r\n        </div>\r\n        <button *ngIf=\"edit\" type=\"button\" class=\" text-red-600 pt-2 justify-start text-sm\" (click)=\"deleteEvidence(evidence, i)\"><i\r\n            class=\"uil uil-times-circle mr-1\"></i>Remove Evidence</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"isAssign || isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n  <div class=\"flex flex-col w-full\">\r\n    <label>{{ evidenceLabel }}</label>\r\n    <img class=\"w-1/2 h-56\" [src]=\"generateUrlWithSasToken(currentAssignment?.url)\" alt=\"Image description\">\r\n    <label>Notes</label>\r\n    <p class=\"break-words\">{{currentAssignment?.notes}}</p>\r\n    <label>{{ assignmentLabel }}</label>\r\n    <span *ngIf=\"isCopy\">Make a copy of existing evidence to move to another domain/measure.</span>\r\n    <div class=\"flex flex-row gap-14\">\r\n      <div *ngFor=\"let domain of domainGrouping\">\r\n        <div class=\"flex flex-col\">\r\n          <label>{{domain.domainCode}}</label>\r\n          <ng-container *ngIf=\"isCopy; else isAssign\">\r\n            <mat-checkbox\r\n              *ngIf=\"isDomain\"\r\n              class=\"font-medium\"\r\n              [checked]=\"domain.isAllSelected\"\r\n              [(ngModel)]=\"domain.isAllSelected\"\r\n              (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n              [ngModelOptions]=\"{standalone: true}\">\r\n              {{domain.domainCode}}\r\n            </mat-checkbox>\r\n            <div class=\"ml-4\">\r\n              <div *ngFor=\"let measure of domain.measures\">\r\n                <mat-checkbox class=\"font-medium\"\r\n                  (change)=\"onMeasureSelectChange($event.checked, domain, measure.id)\"\r\n                  [(ngModel)]=\"measure.isSelected\"\r\n                  [ngModelOptions]=\"{standalone: true}\">\r\n                  {{measure.code}}\r\n                </mat-checkbox>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #isAssign>\r\n            <div *ngFor=\"let measure of domain.measures\">\r\n              <mat-checkbox color=\"primary\" (click)=\"handleCheckbox(measure.id)\">{{measure.code}}</mat-checkbox>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"isAssign\" class=\"self-end\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleAssign(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"assignEvidence()\">Assign Evidence</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"isCopy\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleCopy(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"copyEvidence()\">Copy Evidence</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IMasterDomain } from '@core/interfaces/imaster-domain';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPortfolioAssignMeasureEvidence, IPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-evidence-photos',\r\n  templateUrl: './evidence-photos.component.html',\r\n  styleUrls: ['./evidence-photos.component.scss']\r\n})\r\nexport class EvidencePhotosComponent implements OnInit {\r\n  @Output() evidenceAction = new EventEmitter();\r\n  @Output() ratingAction = new EventEmitter();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Output() toggleAssignModal = new EventEmitter<IPortfolioEvidenceResponse>();\r\n  @Input() edit = false;\r\n  @Input() domainGrouping?: any;\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() sasToken?: any;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = false;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  currentAssignment?: IPortfolioEvidenceResponse | null;\r\n  isAssign = false;\r\n  measureIds: number[] = [];\r\n  domainIds: number[] = [];\r\n  isCopy = false;\r\n  evidenceLabel: string = 'Assign Image';\r\n  assignmentLabel: string = '';\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditObservations\r\n  );\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private sanitizer: DomSanitizer,\r\n    private portfolioService: PortfolioService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService) { }\r\n\r\n  ngOnChanges()\r\n  {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((photo: IPortfolioEvidenceResponse) => photo.evidenceTypeID === PortfolioEvidenceType.Photo && photo.domainId === this.domainId &&  (this.measureId == null || photo.measureId === this.measureId));\r\n    }\r\n    if (this.edit) this.isAssign = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((photo: IPortfolioEvidenceResponse) => photo.evidenceTypeID === PortfolioEvidenceType.Photo && photo.domainId === this.domainId &&  (this.measureId == null || photo.measureId === this.measureId));\r\n    }\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string) {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${addHTTPS(blobUrl)}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n\r\n  handleCheckbox(id: number): void {\r\n    if (!this.measureIds.includes(id)) {\r\n      this.measureIds.push(id);\r\n    } else {\r\n      let index = this.measureIds.indexOf(id);\r\n      this.measureIds.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  assignEvidence(): void {\r\n    if (this.measureIds.length < 1) {\r\n      return this.toastService.warn('Choose measures to assign.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds\r\n      }\r\n\r\n      this.portfolioService.assignEvidence(payload, 'Evidence assigned to measures.').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((video: IPortfolioEvidenceResponse) => video?.id === this.currentAssignment?.id);\r\n              this.evidences?.splice(index, 1);\r\n              this.isAssign = false;\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  deleteEvidence(photo: IPortfolioEvidenceResponse, index: number): void {\r\n    let modal: IModalEmitData = {\r\n      data: photo,\r\n      index: index\r\n    }\r\n    modal.data.modalInfo = {\r\n    title: `Delete ${photo.fileName}`,\r\n    message: `Are you sure you want to want to delete <span class=\"font-bold\">${photo.fileName}</span>?`,\r\n    name: photo.fileName,\r\n    primaryBtnClass: 'red',\r\n    primaryBtnText: Modal.Delete\r\n  };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n    data: modal,\r\n  });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n    if (res) {\r\n      this.portfolioService.deleteEvidence(photo.id, 'Evidence Removed').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((evidence: IPortfolioEvidenceResponse) => evidence.id === photo.id);\r\n              this.evidences.splice(index, 1);\r\n              this.refreshEvidences.emit();\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  });\r\n}\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) domain.measures.forEach((m) => (m.isSelected = false));\r\n  }\r\n\r\n  onMeasureSelectChange(value: boolean, domain: IBaseTemplateDomain | IMasterDomain, id: number) {\r\n    if (value) domain.isAllSelected = false;\r\n  }\r\n\r\n  copyEvidence(): void {\r\n    this.domainGrouping.forEach((domain: IBaseTemplateDomain) => {\r\n      if (domain.isAllSelected) this.domainIds.push(domain.id);\r\n      domain.measures.forEach((measure: ITemplateMeasure) => {\r\n        if (measure.isSelected) this.measureIds.push(measure.id);\r\n      });\r\n    });\r\n\r\n    if (this.domainIds.length < 1 && this.measureIds.length < 1) {\r\n      return this.toastService.warn('No domains or measures to copy.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds,\r\n        domainIds: this.domainIds,\r\n        measureLevelName: this.currentAssignment.levelName\r\n      };\r\n\r\n      const ageGradeInstrumentId = this.route.snapshot.paramMap.get('ageGradeId');\r\n      if (ageGradeInstrumentId) payload.ageGradeInstrumentId = +ageGradeInstrumentId;\r\n\r\n      this.portfolioService.copyEvidence(payload).pipe(\r\n        take(1),\r\n        tap(res => {\r\n          if (res.isSaved && this.evidences) {\r\n            if (!res.ratingCopied) this.toastService.warn('Evidence copied. Could not copy rating.');\r\n            else this.toastService.success('Evidence copied.');\r\n          }\r\n          this.refreshEvidences.emit();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  emitUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.evidenceAction.emit(event);\r\n  }\r\n\r\n  ratingUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.ratingAction.emit(event);\r\n  }\r\n\r\n  toggleAssign(evidence: IPortfolioEvidenceResponse | null): void {\r\n    this.currentAssignment = evidence;\r\n    this.isAssign = !this.isAssign;\r\n  }\r\n\r\n  openAssignModal(evidence: IPortfolioEvidenceResponse) {\r\n    this.toggleAssignModal.emit(evidence);\r\n  }\r\n\r\n  toggleCopy(evidence: IPortfolioEvidenceResponse | null):void {\r\n    this.currentAssignment = evidence;\r\n    this.isCopy = !this.isCopy;\r\n    this.evidenceLabel = this.isCopy ? 'Copy Evidence' : 'Assign Image';\r\n    this.assignmentLabel = this.isCopy ? 'Copy Evidence to Another Domain or Measure' : 'Assign Evidence'\r\n  }\r\n}\r\n","<div *ngIf=\"!isAssign && !isCopy\" class=\"flex flex-row gap-14 pb-5 items-baseline\">\r\n\r\n  <div *ngIf=\"evidences && evidences.length < 1\">\r\n    <label for=\"No evidence\">No Structured Prompts available.</label>\r\n  </div>\r\n\r\n  <div *ngFor=\"let evidence of evidences; let i = index\" class=\"flex flex-col w-96 pt-4\">\r\n    <ng-container *ngIf=\"isImageFile(evidence.url); else downloadLink\">\r\n      <img [src]=\"generateUrlWithSasToken(evidence.url)\" alt=\"Evidence image\">\r\n    </ng-container>\r\n    <ng-template #downloadLink>\r\n      <a [href]=\"generateUrlWithSasToken(evidence.url)\" download target=\"_blank\" class=\"m-4 border-2 border-solid border-drdpblue-300 text-center inline-block rounded-xl\">\r\n        View File\r\n      </a>\r\n    </ng-template>\r\n    <div *ngIf=\"!edit\">\r\n      <label>Notes</label>\r\n      <p class=\"break-words\">{{evidence.notes}}</p>\r\n      <div *ngIf=\"evidence.selectedLevel\"\r\n        class=\"flex items-center\">\r\n        <label class=\"font-normal text-sm\">{{evidence.levelName}}</label>\r\n        <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n          src=\"assets/images/portfolio/{{evidence.levelIcon}}-{{evidence.selectedLevel ? evidence.selectedLevel: 1}}.svg\" />\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"edit\">\r\n      <label>Edit Notes</label>\r\n      <textarea class=\" w-full h-64 border-2 border-black p-3\" [(ngModel)]=\"evidence.notes\" (keyup)=\"emitUpdates(evidence)\">{{evidence.notes}}</textarea>\r\n    </div>\r\n    <div class=\"my-2 text-sm\">\r\n      {{evidence.collectedOn | date : \"MM/dd/yyyy\"}}\r\n    </div>\r\n    <div class=\"my-2\"> <strong>Uploaded By:</strong> {{evidence.uploadedBy}}</div>\r\n    <div *ngIf=\"isFutureEvidence\">\r\n      <drdp-btn color=\"outline\" (click)=\"openAssignModal(evidence)\">\r\n        Assign Enrollment </drdp-btn>\r\n    </div>\r\n\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"isPortfolio\">\r\n        <drdp-btn *ngIf=\"!isDomain && !edit && !isFutureEvidence\" color=\"outline\" (click)=\"ratingUpdates(evidence)\">\r\n          Rate {{evidence.measureCode}} <i\r\n              class=\"text-drdpblue-300 text-xl uil uil-check-circle {{evidence.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i></drdp-btn>\r\n        <drdp-btn *ngIf=\"!edit && isDomain && !isFutureEvidence\" class=\"text-sm pt-2\" color=\"outline\" (click)=\"toggleAssign(evidence)\">Assign Evidence</drdp-btn>\r\n        <div class=\"mb-6\" *ngIf=\"edit && !isFutureEvidence\">\r\n          <drdp-btn class=\"text-sm pt-2\" color=\"fill\" (click)=\"toggleCopy(evidence)\">Copy Evidence</drdp-btn>\r\n        </div>\r\n        <button *ngIf=\"edit\" type=\"button\" class=\" text-red-600 pt-2 justify-start text-sm\" (click)=\"deleteEvidence(evidence, i)\"><i\r\n            class=\"uil uil-times-circle mr-1\"></i>Remove Evidence</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"isAssign || isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n  <div class=\"flex flex-col w-96\">\r\n    <label>{{ evidenceLabel }}</label>\r\n    <!-- <img class=\"w-1/2 h-56\" [src]=\"generateUrlWithSasToken(currentAssignment?.url)\" alt=\"Image description\"> -->\r\n    <ng-container *ngIf=\"isImageFile(currentAssignment!.url); else downloadLink\">\r\n      <img [src]=\"generateUrlWithSasToken(currentAssignment!.url)\" alt=\"Evidence image\">\r\n    </ng-container>\r\n    <ng-template #downloadLink>\r\n      <a [href]=\"generateUrlWithSasToken(currentAssignment!.url)\" download target=\"_blank\" class=\"m-4 border-2 border-solid border-drdpblue-300 text-center inline-block rounded-xl\">\r\n        View File\r\n      </a>\r\n    </ng-template>\r\n    <label>Notes</label>\r\n    <p class=\"break-words\">{{currentAssignment?.notes}}</p>\r\n    <label>{{ assignmentLabel }}</label>\r\n    <span *ngIf=\"isCopy\">Make a copy of existing evidence to move to another domain/measure.</span>\r\n    <div class=\"flex flex-row gap-14\">\r\n      <div *ngFor=\"let domain of domainGrouping\">\r\n        <div class=\"flex flex-col\">\r\n          <label>{{domain.domainCode}}</label>\r\n          <ng-container *ngIf=\"isCopy; else isAssign\">\r\n            <mat-checkbox\r\n              *ngIf=\"isDomain\"\r\n              class=\"font-medium\"\r\n              [checked]=\"domain.isAllSelected\"\r\n              [(ngModel)]=\"domain.isAllSelected\"\r\n              (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n              [ngModelOptions]=\"{standalone: true}\">\r\n              {{domain.domainCode}}\r\n            </mat-checkbox>\r\n            <div class=\"ml-4\">\r\n              <div *ngFor=\"let measure of domain.measures\">\r\n                <mat-checkbox class=\"font-medium\"\r\n                  (change)=\"onMeasureSelectChange($event.checked, domain, measure.id)\"\r\n                  [(ngModel)]=\"measure.isSelected\"\r\n                  [ngModelOptions]=\"{standalone: true}\">\r\n                  {{measure.code}}\r\n                </mat-checkbox>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #isAssign>\r\n            <div *ngFor=\"let measure of domain.measures\">\r\n              <mat-checkbox color=\"primary\" (click)=\"handleCheckbox(measure.id)\">{{measure.code}}</mat-checkbox>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"isAssign\" class=\"self-end\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleAssign(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"assignEvidence()\">Assign Evidence</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"isCopy\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleCopy(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"copyEvidence()\">Copy Evidence</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IMasterDomain } from '@core/interfaces/imaster-domain';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPortfolioAssignMeasureEvidence, IPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-evidence-structured-prompt',\r\n  templateUrl: './evidence-structured-prompt.component.html',\r\n  styleUrls: ['./evidence-structured-prompt.component.scss']\r\n})\r\nexport class EvidenceStructuredPromptComponent implements OnInit {\r\n  @Output() evidenceAction = new EventEmitter();\r\n  @Output() ratingAction = new EventEmitter();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Output() toggleAssignModal = new EventEmitter<IPortfolioEvidenceResponse>();\r\n  @Input() edit = false;\r\n  @Input() domainGrouping?: any;\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() sasToken?: any;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = false;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  currentAssignment?: IPortfolioEvidenceResponse | null;\r\n  isAssign = false;\r\n  measureIds: number[] = [];\r\n  domainIds: number[] = [];\r\n  isCopy = false;\r\n  evidenceLabel: string = 'Assign Structured Prompt';\r\n  assignmentLabel: string = '';\r\n\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private sanitizer: DomSanitizer, \r\n    private portfolioService: PortfolioService, \r\n    private toastService: ToastService, \r\n    public modal: MatDialog) { }\r\n\r\n  ngOnChanges()\r\n  {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((prompt: IPortfolioEvidenceResponse) => prompt.evidenceTypeID === PortfolioEvidenceType.StructuredPrompt && prompt.domainId === this.domainId &&  (this.measureId == null || prompt.measureId === this.measureId));\r\n      this.domainGrouping = this.domainGrouping?.filter((domain: any) => domain.isStructuredPrompt)\r\n      .map((domain: any) => ({\r\n        ...domain,\r\n        measures: domain.measures.filter((measure: any) => measure.isStructuredPrompt),\r\n      }));\r\n    }\r\n    if (this.edit) this.isAssign = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((prompt: IPortfolioEvidenceResponse) => prompt.evidenceTypeID === PortfolioEvidenceType.StructuredPrompt && prompt.domainId === this.domainId &&  (this.measureId == null || prompt.measureId === this.measureId));\r\n    }\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string) {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${addHTTPS(blobUrl)}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n\r\n  handleCheckbox(id: number): void {\r\n    if (!this.measureIds.includes(id)) {\r\n      this.measureIds.push(id);\r\n    } else {\r\n      let index = this.measureIds.indexOf(id);\r\n      this.measureIds.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  assignEvidence(): void {\r\n    if (this.measureIds.length < 1) {\r\n      return this.toastService.warn('Choose measures to assign.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds\r\n      }\r\n\r\n      this.portfolioService.assignEvidence(payload, 'Evidence assigned to measures.').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((video: IPortfolioEvidenceResponse) => video?.id === this.currentAssignment?.id);\r\n              this.evidences?.splice(index, 1);\r\n              this.isAssign = false;\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  deleteEvidence(prompt: IPortfolioEvidenceResponse, index: number): void {\r\n    let modal: IModalEmitData = {\r\n      data: prompt,\r\n      index: index\r\n    }\r\n    modal.data.modalInfo = {\r\n    title: `Delete ${prompt.fileName}`,\r\n    message: `Are you sure you want to want to delete <span class=\"font-bold\">${prompt.fileName}</span>?`,\r\n    name: prompt.fileName,\r\n    primaryBtnClass: 'red',\r\n    primaryBtnText: Modal.Delete\r\n  };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n    data: modal,\r\n  });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n    if (res) {\r\n      this.portfolioService.deleteEvidence(prompt.id, 'Evidence Removed').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((evidence: IPortfolioEvidenceResponse) => evidence.id === prompt.id);\r\n              this.evidences.splice(index, 1);\r\n              this.refreshEvidences.emit();\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  });\r\n}\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) domain.measures.forEach((m) => (m.isSelected = false));\r\n  }\r\n\r\n  onMeasureSelectChange(value: boolean, domain: IBaseTemplateDomain | IMasterDomain, id: number) {\r\n    if (value) domain.isAllSelected = false;\r\n  }\r\n\r\n  copyEvidence(): void {\r\n    this.domainGrouping.forEach((domain: IBaseTemplateDomain) => {\r\n      if (domain.isAllSelected) this.domainIds.push(domain.id);\r\n      domain.measures.forEach((measure: ITemplateMeasure) => {\r\n        if (measure.isSelected) this.measureIds.push(measure.id);\r\n      });\r\n    });\r\n\r\n    if (this.domainIds.length < 1 && this.measureIds.length < 1) {\r\n      return this.toastService.warn('No domains or measures to copy.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds,\r\n        domainIds: this.domainIds,\r\n        measureLevelName: this.currentAssignment.levelName\r\n      };\r\n\r\n      const ageGradeInstrumentId = this.route.snapshot.paramMap.get('ageGradeId');\r\n      if (ageGradeInstrumentId) payload.ageGradeInstrumentId = +ageGradeInstrumentId;\r\n\r\n      this.portfolioService.copyEvidence(payload).pipe(\r\n        take(1),\r\n        tap(res => {\r\n          if (res.isSaved && this.evidences) {\r\n            if (!res.ratingCopied) this.toastService.warn('Evidence copied. Could not copy rating.');\r\n            else this.toastService.success('Evidence copied.');\r\n          }\r\n          this.refreshEvidences.emit();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  emitUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.evidenceAction.emit(event);\r\n  }\r\n\r\n  ratingUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.ratingAction.emit(event);\r\n  }\r\n\r\n  toggleAssign(evidence: IPortfolioEvidenceResponse | null): void {\r\n    this.currentAssignment = evidence;\r\n    this.isAssign = !this.isAssign;\r\n  }\r\n\r\n  openAssignModal(evidence: IPortfolioEvidenceResponse) {\r\n    this.toggleAssignModal.emit(evidence);\r\n  }\r\n\r\n  toggleCopy(evidence: IPortfolioEvidenceResponse | null):void {\r\n    this.currentAssignment = evidence;\r\n    this.isCopy = !this.isCopy;\r\n    this.evidenceLabel = this.isCopy ? 'Copy Evidence' : 'Assign Structured Prompt';\r\n    this.assignmentLabel = this.isCopy ? 'Copy Evidence to Another Domain or Measure' : 'Assign Evidence'\r\n  }\r\n\r\n  isImageFile(url: string): boolean {\r\n    const pattern = /\\.(jpeg|jpg|png|gif)($|\\?|-)/i;\r\n    return pattern.test(url);\r\n  }\r\n}\r\n","<div *ngIf=\"!isAssign && !isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n\r\n  <div *ngIf=\"evidences && evidences.length < 1\">\r\n    <label for=\"No evidence\">No Videos available.</label>\r\n  </div>\r\n\r\n  <div *ngFor=\"let video of evidences;  let i = index\" class=\"flex flex-col w-7/12\">\r\n    <div class=\"grid grid-cols-3 cursor-pointer pt-4\" (click)=\"toggleVideo()\">\r\n      <div class=\" col-span-1\">\r\n        <label [for]=\"video.fileName\">Name:</label>\r\n        <p class=\"break-words\">{{video.fileName}}</p>\r\n      </div>\r\n      <div class=\" col-span-1\">\r\n        <label for=\"createdDate\" class=\" text-right\">Upload Date:</label>\r\n        <p class=\" text-right\">{{video.createdOn | localDate | date: \"MM/dd/yy\"}}</p>\r\n      </div>\r\n      <div class=\" flex col-span-1 justify-end align-middle\">\r\n        <i [ngClass]=\"{'uil uil-angle-down text-xl': show,\r\n                         'uil uil-angle-right text-xl': !show}\">\r\n        </i>\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"show && video.id == video.id\">\r\n      <drdp-video [edit]=\"edit\" [url]=\"generateUrlWithSasToken(video.url)\"></drdp-video>\r\n    </div>\r\n\r\n    <div *ngIf=\"!edit\">\r\n      <label>Notes</label>\r\n      <p class=\"break-words\">{{video.notes}}</p>\r\n      <div *ngIf=\"video.selectedLevel\"\r\n        class=\"flex items-center\">\r\n        <label class=\"font-normal text-sm\">{{video.levelName}}</label>\r\n        <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n          src=\"assets/images/portfolio/{{video.levelIcon}}-{{video.selectedLevel ? video.selectedLevel: 1}}.svg\" />\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"edit\">\r\n      <label>Edit Notes</label>\r\n      <textarea class=\" w-full h-64 border-2 border-black p-3\" [(ngModel)]=\"video.notes\"\r\n        (keyup)=\"emitUpdates(video)\"></textarea>\r\n    </div>\r\n    <div class=\"my-2 text-sm\">\r\n      {{video.collectedOn | date : \"MM/dd/yyyy\"}}\r\n    </div>\r\n    <div class=\"my-2\"> <strong>Uploaded By:</strong> {{video.uploadedBy}}</div>\r\n    <div *ngIf=\"isFutureEvidence && canEdit\">\r\n      <drdp-btn color=\"outline\" (click)=\"openAssignModal(video)\">\r\n        Assign Enrollment </drdp-btn>\r\n    </div>\r\n\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"isPortfolio && !isFutureEvidence\">\r\n        <drdp-btn *ngIf=\"!isDomain && !edit\" color=\"outline\" (click)=\"ratingUpdates(video)\">\r\n          Rate {{video.measureCode}} <i\r\n            class=\"text-drdpblue-300 text-xl uil uil-check-circle {{video.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i></drdp-btn>\r\n        <drdp-btn *ngIf=\"!edit && isDomain\" class=\"text-sm pt-2\" color=\"outline\" (click)=\"toggleAssign(video)\">Assign\r\n          Evidence</drdp-btn>\r\n        <div class=\"mb-6\" *ngIf=\"edit && !isFutureEvidence\">\r\n          <drdp-btn class=\"text-sm pt-2\" color=\"fill\" (click)=\"toggleCopy(video)\">Copy Evidence</drdp-btn>\r\n        </div>\r\n        <button *ngIf=\"edit\" type=\"button\" class=\" text-red-600 pt-2 justify-start text-sm\"\r\n          (click)=\"deleteEvidence(video, i)\"><i class=\"uil uil-times-circle mr-1\"></i>Remove Evidence</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"isAssign || isCopy\" class=\"flex flex-row gap-14 pb-5\">\r\n  <div class=\"flex flex-col w-full\">\r\n    <label>{{ evidenceLabel }}</label>\r\n    <drdp-video [edit]=\"isAssign\" [url]=\"generateUrlWithSasToken(currentAssignment?.url)\"></drdp-video>\r\n    <label>Notes</label>\r\n    <p class=\"break-words\">{{currentAssignment?.notes}}</p>\r\n    <label>{{ assignmentLabel }}</label>\r\n    <span *ngIf=\"isCopy\">Make a copy of existing evidence to move to another domain/measure.</span>\r\n    <div class=\"flex flex-row gap-14\">\r\n      <div *ngFor=\"let domain of domainGrouping\">\r\n        <div class=\"flex flex-col\">\r\n          <label>{{domain.domainCode}}</label>\r\n          <ng-container *ngIf=\"isCopy; else isAssign\">\r\n            <mat-checkbox\r\n              *ngIf=\"isDomain\"\r\n              class=\"font-medium\"\r\n              [checked]=\"domain.isAllSelected\"\r\n              [(ngModel)]=\"domain.isAllSelected\"\r\n              (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n              [ngModelOptions]=\"{standalone: true}\">\r\n              {{domain.domainCode}}\r\n            </mat-checkbox>\r\n            <div class=\"ml-4\">\r\n              <div *ngFor=\"let measure of domain.measures\">\r\n                <mat-checkbox class=\"font-medium\"\r\n                  (change)=\"onMeasureSelectChange($event.checked, domain, measure.id)\"\r\n                  [(ngModel)]=\"measure.isSelected\"\r\n                  [ngModelOptions]=\"{standalone: true}\">\r\n                  {{measure.code}}\r\n                </mat-checkbox>\r\n              </div>\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #isAssign>\r\n            <div *ngFor=\"let measure of domain.measures\">\r\n              <mat-checkbox color=\"primary\" (click)=\"handleCheckbox(measure.id)\">{{measure.code}}</mat-checkbox>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"isAssign\" class=\"self-end\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleAssign(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"assignEvidence()\">Assign Evidence</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"isCopy\">\r\n      <drdp-btn class=\"text-sm pt-2 mr-3\" color=\"cancel\" (click)=\"toggleCopy(null)\">Cancel</drdp-btn>\r\n      <drdp-btn class=\"text-sm pt-2\" color=\"outline\" (click)=\"copyEvidence()\">Copy Evidence</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IMasterDomain } from '@core/interfaces/imaster-domain';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPortfolioAssignMeasureEvidence, IPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-evidence-video',\r\n  templateUrl: './evidence-video.component.html',\r\n  styleUrls: ['./evidence-video.component.scss']\r\n})\r\nexport class EvidenceVideoComponent implements OnInit {\r\n  @Output() evidenceAction = new EventEmitter();\r\n  @Output() ratingAction = new EventEmitter();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Output() toggleAssignModal = new EventEmitter<IPortfolioEvidenceResponse>();\r\n  @Input() edit = false;\r\n  @Input() domainGrouping?: any;\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() sasToken?: any;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = false;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  currentAssignment?: IPortfolioEvidenceResponse | null;\r\n  isAssign = false;\r\n  show = false;\r\n  measureIds: number[] = [];\r\n  domainIds: number[] = [];\r\n  isCopy = false;\r\n  evidenceLabel: string = 'Assign Video';\r\n  assignmentLabel: string = '';\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditObservations\r\n  );\r\n\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private sanitizer: DomSanitizer,\r\n    private portfolioService: PortfolioService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService) { }\r\n\r\n  ngOnChanges() {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((video: IPortfolioEvidenceResponse) => video.evidenceTypeID === PortfolioEvidenceType.Video && video.domainId === this.domainId && (this.measureId == null || video.measureId === this.measureId));\r\n    }\r\n    if (this.edit) this.isAssign = false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.evidences) {\r\n      this.evidences = this.evidences.filter((video: IPortfolioEvidenceResponse) => video.evidenceTypeID === PortfolioEvidenceType.Video && video.domainId === this.domainId && (this.measureId == null || video.measureId === this.measureId));\r\n    }\r\n  }\r\n\r\n  generateUrlWithSasToken(blobUrl?: string) {\r\n    if (this.sasToken) {\r\n      const urlWithSasToken = `${addHTTPS(blobUrl)}${this.sasToken.value}`;\r\n      return this.sanitizer.bypassSecurityTrustResourceUrl(urlWithSasToken);\r\n    }\r\n    return '';\r\n  }\r\n\r\n  handleCheckbox(id: number): void {\r\n    if (!this.measureIds.includes(id)) {\r\n      this.measureIds.push(id);\r\n    } else {\r\n      let index = this.measureIds.indexOf(id);\r\n      this.measureIds.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  assignEvidence(): void {\r\n    if (this.measureIds.length < 1) {\r\n      return this.toastService.warn('Choose measures to assign.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds\r\n      }\r\n\r\n      this.portfolioService.assignEvidence(payload, 'Evidence assigned to measures.').pipe(\r\n        take(1),\r\n        tap((res: boolean) => {\r\n          if (res) {\r\n            if (this.evidences) {\r\n              const index = this.evidences?.findIndex((video: IPortfolioEvidenceResponse) => video?.id === this.currentAssignment?.id);\r\n              this.evidences?.splice(index, 1);\r\n              this.isAssign = false;\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  deleteEvidence(video: IPortfolioEvidenceResponse, index: number): void {\r\n      let modal: IModalEmitData = {\r\n        data: video,\r\n        index: index\r\n      }\r\n      modal.data.modalInfo = {\r\n      title: `Delete ${video.fileName}`,\r\n      message: `Are you sure you want to want to delete <span class=\"font-bold\">${video.fileName}</span>?`,\r\n      name: video.fileName,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: Modal.Delete\r\n    };\r\n\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n      modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.portfolioService.deleteEvidence(video.id, 'Evidence Removed').pipe(\r\n          take(1),\r\n          tap((res: boolean) => {\r\n            if (res) {\r\n              if (this.evidences) {\r\n                const index = this.evidences?.findIndex((evidence: IPortfolioEvidenceResponse) => evidence.id === video.id);\r\n                this.evidences.splice(index, 1);\r\n                this.refreshEvidences.emit();\r\n              }\r\n            }\r\n          })\r\n        ).subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) domain.measures.forEach((m) => (m.isSelected = false));\r\n  }\r\n\r\n  onMeasureSelectChange(value: boolean, domain: IBaseTemplateDomain | IMasterDomain, id: number) {\r\n    if (value) domain.isAllSelected = false;\r\n  }\r\n\r\n  copyEvidence(): void {\r\n    this.domainGrouping.forEach((domain: IBaseTemplateDomain) => {\r\n      if (domain.isAllSelected) this.domainIds.push(domain.id);\r\n      domain.measures.forEach((measure: ITemplateMeasure) => {\r\n        if (measure.isSelected) this.measureIds.push(measure.id);\r\n      });\r\n    });\r\n\r\n    if (this.domainIds.length < 1 && this.measureIds.length < 1) {\r\n      return this.toastService.warn('No domains or measures to copy.');\r\n    }\r\n\r\n    if (this.currentAssignment) {\r\n      let payload: IPortfolioAssignMeasureEvidence = {\r\n        id: this.currentAssignment.id,\r\n        portfolioId: this.currentAssignment.portfolioId,\r\n        evidenceId: this.currentAssignment.evidenceId,\r\n        selectedLevel: this.currentAssignment.selectedLevel,\r\n        measureIds: this.measureIds,\r\n        domainIds: this.domainIds,\r\n        measureLevelName: this.currentAssignment.levelName\r\n      };\r\n\r\n      const ageGradeInstrumentId = this.route.snapshot.paramMap.get('ageGradeId');\r\n      if (ageGradeInstrumentId) payload.ageGradeInstrumentId = +ageGradeInstrumentId;\r\n\r\n      this.portfolioService.copyEvidence(payload).pipe(\r\n        take(1),\r\n        tap(res => {\r\n          if (res.isSaved && this.evidences) {\r\n            if (!res.ratingCopied) this.toastService.warn('Evidence copied. Could not copy rating.');\r\n            else this.toastService.success('Evidence copied.');\r\n          }\r\n          this.refreshEvidences.emit();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  emitUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.evidenceAction.emit(event);\r\n  }\r\n\r\n  ratingUpdates(event: IPortfolioEvidenceResponse): void{\r\n    this.ratingAction.emit(event);\r\n  }\r\n\r\n  toggleAssign(evidence: IPortfolioEvidenceResponse | null): void {\r\n    this.currentAssignment = evidence;\r\n    this.isAssign = !this.isAssign;\r\n  }\r\n\r\n  toggleVideo(): void {\r\n    this.show = !this.show;\r\n  }\r\n\r\n  openAssignModal(evidence: IPortfolioEvidenceResponse) {\r\n    this.toggleAssignModal.emit(evidence);\r\n  }\r\n\r\n  toggleCopy(evidence: IPortfolioEvidenceResponse | null):void {\r\n    this.currentAssignment = evidence;\r\n    this.isCopy = !this.isCopy;\r\n    this.evidenceLabel = this.isCopy ? 'Copy Evidence' : 'Assign Video';\r\n    this.assignmentLabel = this.isCopy ? 'Copy Evidence to Another Domain or Measure' : 'Assign Evidence'\r\n  }\r\n}\r\n","export enum EvidenceTab {\r\n    Rating = 'rating',\r\n    Photo = 'photo',\r\n    Video = 'video',\r\n    Audio = 'audio',\r\n    Notes = 'note',\r\n    StructuredPrompt = 'structuredPrompt'\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IStudentActiveEnrollmentInfo } from '@views/user/input-rating/interfaces/istudent-enrollment-info';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { take } from 'rxjs';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport {  IPortfolioStudentInformation } from '@core/interfaces/iportfolio';\r\n\r\n@Component({\r\n  selector: 'app-assign-enrollment',\r\n  templateUrl: './assign-enrollment.component.html',\r\n  styleUrls: ['./assign-enrollment.component.css']\r\n})\r\nexport class AssignEnrollmentComponent implements OnInit {\r\n  availableOptions: IStudentActiveEnrollmentInfo[] = [];\r\n  evidenceId?: number;\r\n  selectedEnrollmentId?: number;\r\n  info: any;\r\n  constructor(@Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef<AssignEnrollmentComponent>, private portfolioService: PortfolioService) { }\r\n\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.availableOptions = this.data.availableClasses;\r\n    this.evidenceId = this.data.evidenceId;\r\n    this.info = this.data.info;\r\n  }\r\n\r\n  assignEvidence() {\r\n    let payload : IPortfolioStudentInformation= {\r\n      studentId: this.info.studentId,\r\n      studentClassEnrollmentId: this.selectedEnrollmentId || 0,\r\n      futureEvidenceId: this.info.futureEvidenceId,\r\n      ageGradeInstrumentId: this.info.ageGradeInstrumentId,\r\n      evidenceId: this.evidenceId || 0,\r\n      measures: [],\r\n      domains: []\r\n    };\r\n\r\n    this.portfolioService\r\n        .attachFutureEvidence(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          if (res) {\r\n            this.dialogRef.close(true);\r\n          }\r\n        });\r\n  }\r\n\r\n  onSelect(event: any) {\r\n    this.selectedEnrollmentId = event.id;\r\n  }\r\n\r\n}\r\n","<div class=\"w-max\">\r\n  <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">Assign Enrollment</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <div class=\"h-full flex flex-col justify-between\">\r\n      <drdp-filter-select #ageGradeSelect label=\"Active Enrollment\" [options]=\"availableOptions\"\r\n        [selectType]=\"select.ActiveEnrollmentClass\" [required]=\"true\"\r\n        [tooltipActive]=\"true\"\r\n        (onSelected)=\"onSelect($event)\">\r\n      </drdp-filter-select>\r\n    </div>\r\n\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n      <drdp-btn type=\"button\" mat-dialog-close class=\"mr-2\">Cancel</drdp-btn>\r\n      <drdp-btn type=\"submit\" (click)=\"assignEvidence()\">Assign</drdp-btn>\r\n  </div>\r\n</div>\r\n","<div class=\"pl-5\">\r\n  <div *ngIf=\"isPortfolio\" class=\"grid grid-cols-2 gap-3\">\r\n    <div class=\"col-span-1\">\r\n      <p *ngIf=\"measureId\" class=\"text-sm text-neutral-500\">{{description}}</p>\r\n    </div>\r\n    <div *drdpCheckPermission=\"permission.EditObservations\">\r\n      <div *ngIf=\"!isEvidenceEmpty && !isFutureEvidence\" class=\"col-span-1 flex justify-end\">\r\n        <drdp-btn *ngIf=\"!isEdit\" class=\"text-sm\" color=\"outline\" (click)=\"handleEdit()\"><i\r\n            class=\"uil uil-pen\"></i>Edit Evidence</drdp-btn>\r\n        <drdp-btn *ngIf=\"isEdit\" class=\"text-sm\" color=\"default\" (click)=\"handleSave()\"><i\r\n            class=\"uil uil-pen\"></i>Save Evidence</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div class=\"flex gap-3 py-2\">\r\n    <button *ngIf=\"!isPortfolio\" type=\"button\" class=\"flex justify-between p-2 w-32\"\r\n      [class.bg-drdpblue-500]=\"isActive.rating\" [class.bg-white]=\"!isActive.rating\" [class.rounded-lg]=\"true\"\r\n      (click)=\"handleTab(evidenceTab.Rating)\">\r\n      <i class=\"uil uil-comment-alt-notes text-drdpblue-300\"></i>Rating Sheet\r\n    </button>\r\n    <button type=\"button\" class=\"flex justify-between p-1 w-28\" [class.bg-drdpblue-500]=\"isActive.photo\"\r\n      [class.bg-white]=\"!isActive.photo\" [class.rounded-lg]=\"true\" (click)=\"handleTab(evidenceTab.Photo)\">\r\n      <i class=\"uil uil-images text-drdpblue-300\"></i>Photos<p\r\n        class=\"w-5 h-5 rounded-full self-center text-white text-sm bg-drdpblue-300\">{{count.photo}}</p>\r\n    </button>\r\n\r\n    <button type=\"button\" class=\"flex justify-between p-1 w-28\" [class.bg-drdpblue-500]=\"isActive.video\"\r\n      [class.bg-white]=\"!isActive.video\" [class.rounded-lg]=\"true\" (click)=\"handleTab(evidenceTab.Video)\">\r\n      <i class=\"uil uil-video text-drdpblue-300\"></i>Video<p\r\n        class=\"w-5 h-5 rounded-full self-center text-white text-sm bg-drdpblue-300\">{{count.video}}</p>\r\n    </button>\r\n\r\n    <button type=\"button\" class=\"flex justify-between p-1 w-28\" [class.bg-drdpblue-500]=\"isActive.audio\"\r\n      [class.bg-white]=\"!isActive.audio\" [class.rounded-lg]=\"true\" (click)=\"handleTab(evidenceTab.Audio)\">\r\n      <i class=\"uil uil-volume text-drdpblue-300\"></i>Audio<p\r\n        class=\"w-5 h-5 rounded-full self-center text-white text-sm bg-drdpblue-300\">{{count.audio}}</p>\r\n    </button>\r\n\r\n    <button type=\"button\" class=\"flex justify-between p-1 w-28\" [class.bg-drdpblue-500]=\"isActive.note\"\r\n      [class.bg-white]=\"!isActive.note\" [class.rounded-lg]=\"true\" (click)=\"handleTab(evidenceTab.Notes)\">\r\n      <i class=\"uil uil-notes text-drdpblue-300\"></i>Notes<p\r\n        class=\"w-5 h-5 rounded-full self-center text-white text-sm bg-drdpblue-300\">{{count.note}}</p>\r\n    </button>\r\n\r\n    <button *ngIf=\"hasStructuredPrompt\" type=\"button\" class=\"flex justify-between p-1 w-48\" [class.bg-drdpblue-500]=\"isActive.structuredPrompt\"\r\n      [class.bg-white]=\"!isActive.note\" [class.rounded-lg]=\"true\" (click)=\"handleTab(evidenceTab.StructuredPrompt)\">\r\n      <i class=\"uil uil-notes text-drdpblue-300\"></i>Structured Prompts<p\r\n        class=\"w-5 h-5 rounded-full self-center text-white text-sm bg-drdpblue-300\">{{count.structurePrompt}}</p>\r\n    </button>\r\n  </div>\r\n  <hr>\r\n  <div *ngIf=\"isActive.rating\">\r\n    <drdp-rating-sheet [ratingSheet]=\"ratingSheet\" [dialogData]=\"dialogData\" [isPortfolio]=\"isPortfolio\"\r\n      (rating)=\"updateRatingSheet($event)\">\r\n    </drdp-rating-sheet>\r\n  </div>\r\n  <div class=\"flex overflow-x-auto w-full scrollbar scrollbar-thumb-white scrollbar-track-gray-100\">\r\n    <div *ngIf=\"isActive.photo\">\r\n      <drdp-evidence-photos [edit]=\"isEdit\" [domainGrouping]=\"domainGroupings\" [evidences]=\"evidences\"\r\n        [sasToken]=\"sasToken\" [domainId]=\"domainId\" [measureId]=\"measureId\" [isDomain]=\"isDomain\" [isFutureEvidence]=\"isFutureEvidence\"\r\n        [isPortfolio]=\"isPortfolio\" (evidenceAction)=\"handleEvidenceUpdateList($event)\"\r\n        (ratingAction)=\"openInputRatingModal($event)\" (refreshEvidences)=\"updateEvidence()\" (toggleAssignModal)=\"toggleAssignmentModal($event)\" >\r\n      </drdp-evidence-photos>\r\n    </div>\r\n    <div *ngIf=\"isActive.video\">\r\n      <drdp-evidence-video [edit]=\"isEdit\" [domainGrouping]=\"domainGroupings\" [evidences]=\"evidences\"\r\n        [sasToken]=\"sasToken\" [domainId]=\"domainId\" [measureId]=\"measureId\" [isDomain]=\"isDomain\" [isFutureEvidence]=\"isFutureEvidence\"\r\n        [isPortfolio]=\"isPortfolio\" (evidenceAction)=\"handleEvidenceUpdateList($event)\" (refreshEvidences)=\"updateEvidence()\"\r\n        (ratingAction)=\"openInputRatingModal($event)\"\r\n        (toggleAssignModal)=\"toggleAssignmentModal($event)\">\r\n      </drdp-evidence-video>\r\n    </div>\r\n    <div *ngIf=\"isActive.audio\">\r\n      <drdp-evidence-audio [edit]=\"isEdit\" [domainGrouping]=\"domainGroupings\" [evidences]=\"evidences\"\r\n        [sasToken]=\"sasToken\" [domainId]=\"domainId\" [measureId]=\"measureId\" [isDomain]=\"isDomain\" [isFutureEvidence]=\"isFutureEvidence\"\r\n        [isPortfolio]=\"isPortfolio\" (evidenceAction)=\"handleEvidenceUpdateList($event)\" (refreshEvidences)=\"updateEvidence()\"\r\n        (ratingAction)=\"openInputRatingModal($event)\"\r\n        (toggleAssignModal)=\"toggleAssignmentModal($event)\">\r\n      </drdp-evidence-audio>\r\n    </div>\r\n  </div>\r\n  <div *ngIf=\"isActive.note\">\r\n    <drdp-evidence-notes [edit]=\"isEdit\" [domainGrouping]=\"domainGroupings\" [evidences]=\"evidences\"\r\n      [sasToken]=\"sasToken\" [domainId]=\"domainId\" [measureId]=\"measureId\" [isDomain]=\"isDomain\" [isFutureEvidence]=\"isFutureEvidence\"\r\n      [isPortfolio]=\"isPortfolio\" (evidenceAction)=\"handleEvidenceUpdateList($event)\" (refreshEvidences)=\"updateEvidence()\"\r\n      (ratingAction)=\"openInputRatingModal($event)\"\r\n      (toggleAssignModal)=\"toggleAssignmentModal($event)\">\r\n    </drdp-evidence-notes>\r\n  </div>\r\n  <div *ngIf=\"isActive.structuredPrompt\">\r\n    <drdp-evidence-structured-prompt [edit]=\"isEdit\" [domainGrouping]=\"domainGroupings\" [evidences]=\"evidences\"\r\n      [sasToken]=\"sasToken\" [domainId]=\"domainId\" [measureId]=\"measureId\" [isDomain]=\"isDomain\" [isFutureEvidence]=\"isFutureEvidence\"\r\n      [isPortfolio]=\"isPortfolio\" (evidenceAction)=\"handleEvidenceUpdateList($event)\" (refreshEvidences)=\"updateEvidence()\"\r\n      (ratingAction)=\"openInputRatingModal($event)\"\r\n      (toggleAssignModal)=\"toggleAssignmentModal($event)\">\r\n    </drdp-evidence-structured-prompt>\r\n  </div>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EvidenceTab } from '@core/enums/evidence-tab';\r\nimport { MeasureCondition } from '@core/enums/measure-condition';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IEvidenceTabState } from '@core/interfaces/ievidence-tab-state';\r\nimport {\r\n  IPortfolioEvidenceResponse,\r\n  IPortfolioRatingSheet,\r\n  IPortfolioUpdateEvidence,\r\n} from '@core/interfaces/iportfolio';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IRatingMeasureDto } from '@views/user/input-rating/interfaces/irating-measure';\r\nimport { of, switchMap, take, tap } from 'rxjs';\r\nimport { PortfolioInputRatingModalComponent } from '../../../views/user/dashboard/portfolio/portfolio-class/portfolio-input-rating-modal/portfolio-input-rating-modal.component';\r\nimport { AgeGradeInstrumentCode } from '@core/enums/age-grade-instruments';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { AssignEnrollmentComponent } from '@views/user/dashboard/portfolio/portfolio-class/modals/assign-enrollment/assign-enrollment.component';\r\nimport { IStudentActiveEnrollmentInfo } from '@views/user/input-rating/interfaces/istudent-enrollment-info';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-evidence-management',\r\n  templateUrl: './portfolio-evidence-management.component.html',\r\n  styleUrls: ['./portfolio-evidence-management.component.scss'],\r\n})\r\nexport class PortfolioEvidenceManagementComponent implements OnInit, OnChanges {\r\n  @Output() prelimRatingChange = new EventEmitter();\r\n  @Output() rating = new EventEmitter();\r\n  @Output() refreshEvidences = new EventEmitter();\r\n  @Input() evidences?: IPortfolioEvidenceResponse[];\r\n  @Input() domainGroupings?: any;\r\n  @Input() domainId?: number;\r\n  @Input() measureId?: number;\r\n  @Input() ageGradeId?: number;\r\n  @Input() ageGradeInstrumentCode?: string;\r\n  @Input() isPortfolio = false;\r\n  @Input() isDomain = true;\r\n  @Input() description = '';\r\n  @Input() ratingSheet!: IPortfolioRatingSheet;\r\n  @Input() dialogData!: IRatingMeasureDto;\r\n  @Input() isFutureEvidence: boolean = false;\r\n  @Input() ratingIcon: string = '';\r\n  @Input() availableClasses?: IStudentActiveEnrollmentInfo[];\r\n  @Input() assignmentPayload?: any;\r\n  @Input() hasStructuredPrompt?: boolean = false;\r\n  @Input() isPilot?: boolean = true;\r\n  containerName: string = 'portfolio-evidences';\r\n  sasToken?: any;\r\n  isActive: IEvidenceTabState = {\r\n    rating: true,\r\n    photo: false,\r\n    video: false,\r\n    audio: false,\r\n    note: false,\r\n    structuredPrompt: false,\r\n  };\r\n  count = {\r\n    photo: 0,\r\n    video: 0,\r\n    audio: 0,\r\n    note: 0,\r\n    structurePrompt: 0\r\n  };\r\n  isEdit = false;\r\n  isEvidenceEmpty = false;\r\n  evidenceUpdateList: IPortfolioUpdateEvidence[] = [];\r\n  get evidenceTab() {\r\n    return EvidenceTab;\r\n  }\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private portfolioService: PortfolioService,\r\n    public modal: MatDialog,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getSasToken();\r\n    if (this.isPortfolio) {\r\n      this.isActive.rating = false;\r\n      this.isActive.photo = true;\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (this.evidences?.length) {\r\n      this.count.photo = this.evidences?.filter(\r\n        (photo: IPortfolioEvidenceResponse) =>\r\n          photo.evidenceTypeID === PortfolioEvidenceType.Photo &&\r\n          (this.domainId == undefined || photo.domainId === this.domainId) &&\r\n          (this.measureId == undefined || photo.measureId === this.measureId)\r\n      ).length;\r\n      this.count.video = this.evidences?.filter(\r\n        (video: IPortfolioEvidenceResponse) =>\r\n          video.evidenceTypeID === PortfolioEvidenceType.Video &&\r\n          (this.domainId == undefined || video.domainId === this.domainId) &&\r\n          (this.measureId == undefined || video.measureId === this.measureId)\r\n      ).length;\r\n      this.count.audio = this.evidences?.filter(\r\n        (audio: IPortfolioEvidenceResponse) =>\r\n          audio.evidenceTypeID === PortfolioEvidenceType.Audio &&\r\n          (this.domainId == undefined || audio.domainId === this.domainId) &&\r\n          (this.measureId == undefined || audio.measureId === this.measureId)\r\n      ).length;\r\n      this.count.note = this.evidences?.filter(\r\n        (note: IPortfolioEvidenceResponse) =>\r\n          note.evidenceTypeID === PortfolioEvidenceType.Note &&\r\n          (this.domainId == undefined || note.domainId === this.domainId) &&\r\n          (this.measureId == undefined || note.measureId === this.measureId)\r\n      ).length;\r\n      this.count.structurePrompt = this.evidences?.filter(\r\n        (note: IPortfolioEvidenceResponse) =>\r\n          note.evidenceTypeID === PortfolioEvidenceType.StructuredPrompt &&\r\n          (this.domainId == undefined || note.domainId === this.domainId) &&\r\n          (this.measureId == undefined || note.measureId === this.measureId)\r\n      ).length;\r\n      this.evidences?.filter(\r\n        (evidence: IPortfolioEvidenceResponse) =>\r\n          evidence.domainId == this.domainId\r\n      ).length\r\n        ? (this.isEvidenceEmpty = false)\r\n        : (this.isEvidenceEmpty = true);\r\n    }\r\n  }\r\n\r\n  getSasToken(): void {\r\n    this.portfolioService\r\n      .getBlobSasToken(this.containerName)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: any) => (this.sasToken = res))\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  handleTab(tab: string): void {\r\n    for (let key in this.isActive) {\r\n      this.isActive[key] = false;\r\n    }\r\n    this.isActive[tab] = true;\r\n  }\r\n\r\n  handleEdit(): void {\r\n    this.isEdit = !this.isEdit;\r\n  }\r\n\r\n  handleSave(): void {\r\n    this.isEdit = !this.isEdit;\r\n    this.portfolioService\r\n      .updateEvidence(this.evidenceUpdateList, 'Evidence Updated')\r\n      .pipe(take(1))\r\n      .subscribe();\r\n  }\r\n\r\n  handleEvidenceUpdateList(event: IPortfolioEvidenceResponse): any {\r\n    let updatedEvidence: IPortfolioUpdateEvidence = {\r\n      measureEvidenceId: event.id,\r\n      evidenceId: event.evidenceId,\r\n      notes: event.notes,\r\n      selectedLevel: event.selectedLevel ?? null,\r\n      measureValue: event.measureValue ?? null,\r\n      selectedLevelName: event.selectedLevelName ?? null\r\n    };\r\n    if (\r\n      this.evidenceUpdateList.some(\r\n        (evidence) => evidence.measureEvidenceId === event.id\r\n      )\r\n    ) {\r\n      let index = this.evidenceUpdateList.findIndex(\r\n        (evidence: IPortfolioUpdateEvidence) =>\r\n          evidence.measureEvidenceId === event.id\r\n      );\r\n      this.evidenceUpdateList[index] = updatedEvidence;\r\n    } else {\r\n      this.evidenceUpdateList.push(updatedEvidence);\r\n    }\r\n  }\r\n\r\n  openInputRatingModal(evidence: IPortfolioEvidenceResponse) {\r\n    if (this.ageGradeId && evidence) {\r\n      this.portfolioService\r\n        .getRatingMeasures(this.ageGradeId, evidence.measureId ?? 0)\r\n        .pipe(take(1))\r\n        .subscribe((result) => {\r\n          if (result) {\r\n            let data = {\r\n              options: result.levels,\r\n              selectedLevel: evidence.selectedLevel,\r\n              selectedMeasureValue: evidence.measureValue,\r\n              measureCode: evidence.measureCode,\r\n            };\r\n\r\n            const modalRef = this.modal.open(\r\n              PortfolioInputRatingModalComponent,\r\n              {\r\n                data: data,\r\n              }\r\n            );\r\n\r\n            modalRef\r\n              .afterClosed()\r\n              .pipe(\r\n                take(1),\r\n                tap((result: any) => {\r\n                  if (result && result.success) {\r\n                    evidence.measureValue = result.data.selectedId;\r\n                    evidence.selectedLevel = result.data.selectedLevel;\r\n                    evidence.selectedLevelName = result.data.selectedName;\r\n                    this.handleEvidenceUpdateList(evidence);\r\n                  }\r\n                }),\r\n                switchMap((_) => {\r\n                  if (this.evidenceUpdateList.length > 0) {\r\n                    return this.portfolioService.updateEvidence(\r\n                      this.evidenceUpdateList,\r\n                      'Rating updated.'\r\n                    );\r\n                  } else {\r\n                    return of(false);\r\n                  }\r\n                }),\r\n                tap((result: boolean) => {\r\n                  if (result) {\r\n                    this.prelimRatingChange.emit(evidence);\r\n                  }\r\n                })\r\n              )\r\n              .subscribe();\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  updateEvidence() {\r\n    this.refreshEvidences.emit();\r\n  }\r\n\r\n  updateRatingSheet(event: any): void {\r\n    this.ratingSheet = event;\r\n  }\r\n\r\n  emitSave(): void {\r\n    if (\r\n      this.ratingSheet.measureConditionId == MeasureCondition.Emerging &&\r\n      !this.ratingSheet.selectedValue\r\n    ) {\r\n      this.toast.error('Level is required if emerging is selected.');\r\n      return;\r\n    } else if (\r\n      this.ageGradeInstrumentCode == AgeGradeInstrumentCode.kindergarten &&\r\n      this.ratingSheet.measureConditionId == MeasureCondition.Unratable &&\r\n      !this.ratingSheet.reasonId\r\n    ) {\r\n      this.toast.error('Reason is required if \"Unable to Rate\" is selected.');\r\n      return;\r\n    } else if (\r\n      !this.ratingSheet.measureConditionId &&\r\n      !this.ratingSheet.selectedValue\r\n    ) {\r\n      this.toast.error('Choose a valid option to save. ');\r\n      return;\r\n    }\r\n    this.dialogData.selectedValue = this.ratingSheet.selectedValue;\r\n    this.dialogData.measureConditionId = this.ratingSheet.measureConditionId;\r\n    this.dialogData.measureConditionName =\r\n      this.ratingSheet.measureConditionName;\r\n    this.dialogData.childAssessmentRatingReasonId = this.ratingSheet.reasonId;\r\n    this.dialogData.comment = this.ratingSheet.comment;\r\n\r\n    if (this.ratingSheet.selectedValue) {\r\n      this.dialogData.selectedLevelName =\r\n        this.ratingSheet.measureRatingLevel?.levels.find(\r\n          (l) => l.id == this.dialogData?.selectedValue\r\n        )?.name;\r\n    } else if (this.ratingSheet.measureConditionId) {\r\n      this.dialogData.selectedLevelName =\r\n        this.ratingSheet.measureRatingLevel?.conditionLevels.find(\r\n          (l) => l.id == this.dialogData.measureConditionId\r\n        )?.name;\r\n    }\r\n    this.dialogData.measureRevisionId = this.ratingSheet.measureRatingLevel?.measureRevisionId;\r\n    this.rating.emit(this.dialogData);\r\n  }\r\n\r\n  toggleAssignmentModal(evidence: IPortfolioEvidenceResponse): void {\r\n    const modalRef = this.modal.open(AssignEnrollmentComponent, {\r\n      data: { availableClasses: this.availableClasses, evidenceId: evidence.evidenceId,info: this.assignmentPayload},\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.toast.success(\"Evidence assigned successfully.\");\r\n        this.refreshEvidences.emit();\r\n      }\r\n    })\r\n  }\r\n}\r\n","<div *ngIf=\"!isPortfolio\">\r\n  <div class=\"mt-4\" *ngIf=\"!ratingSheet.measureRatingLevel || ratingSheet.levelCount == 0\">\r\n    No developmental levels available for this measure.\r\n  </div>\r\n  <div>\r\n\r\n    <div class=\"w-full\">\r\n      <div class=\"flex w-full\" *ngIf=\"dialogData.isPilotEnrollment\">\r\n        <!-- Not Yet -->\r\n        <div class=\"p-2\" *ngIf=\"ratingSheet.measureRatingLevel?.notYet\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.notYet)\">\r\n          <div class=\"flex items-center\">\r\n            <input type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"measureConditionName.NotYet\"\r\n              [(ngModel)]=\"ratingSheet.measureConditionName\" [ngModelOptions]=\"{standalone: true}\" />\r\n            <label class=\"pl-2\" for=\"notYet\"> {{ratingSheet.measureRatingLevel?.notYet?.pilotDescription}}</label>\r\n          </div>\r\n        </div>\r\n        <!-- Conditional  -->\r\n        <div class=\"p-2\" *ngIf=\"ratingSheet.measureRatingLevel?.conditional\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.conditional)\">\r\n          <div class=\"flex items-center\">\r\n            <input type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"measureConditionName.Conditional\"\r\n              [(ngModel)]=\"ratingSheet.measureConditionName\" [ngModelOptions]=\"{standalone: true}\" />\r\n            <label class=\"pl-2\" for=\"conditional\">\r\n              {{ratingSheet.measureRatingLevel?.conditional?.pilotDescription}}</label>\r\n          </div>\r\n        </div>\r\n        <!-- EM  -->\r\n        <div class=\"p-2\" *ngIf=\"ratingSheet.measureRatingLevel?.EM\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.EM)\">\r\n          <div class=\"flex items-center\">\r\n            <input type=\"radio\" name=\"filter2\" [disabled]=\"!ratingSheet.canEmerging\" class=\"radio-btn\"\r\n              [value]=\"measureConditionName.Emerging\" [(ngModel)]=\"ratingSheet.measureConditionName\"\r\n              [ngModelOptions]=\"{standalone: true}\" />\r\n            <label class=\"pl-2\" for=\"em\">{{ratingSheet.measureRatingLevel?.EM?.pilotDescription}}</label>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"flex flex-row w-full mt-2\" [ngClass]=\"{'overflow-x-auto': dialogData.isPilotEnrollment}\" *ngIf=\"ratingSheet?.measureRatingLevel && ratingSheet.levelCount > 0\">\r\n        <!-- Not Yet -->\r\n        <div class=\"p-2 pt-4 text-center\" *ngIf=\"!dialogData.isPilotEnrollment && ratingSheet.measureRatingLevel?.notYet\"\r\n          [class]=\"{'selected': ratingSheet.measureConditionId == measureCondition.NotYet}\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.notYet)\">\r\n          <input type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"measureConditionName.NotYet\"\r\n            [(ngModel)]=\"ratingSheet.measureConditionName\" [ngModelOptions]=\"{standalone: true}\" />\r\n          <label class=\"text-lg w-20\" for=\"notYet\">{{ratingSheet.measureRatingLevel?.notYet?.description}}</label>\r\n        </div>\r\n        <div *ngFor=\"let level of ratingSheet.measureRatingLevel?.developmentalLevels\"\r\n          class=\"p-2 min-w-[9rem] max-w-[14rem] pt-4\" (click)=\"selectLevel(level)\"\r\n          [ngClass]=\"{'selected': level.id == ratingSheet.selectedValue}\">\r\n          <div class=\"text-center\">\r\n            <input *ngIf=\"!level.isDisabled\" type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"level.id\" [id]=\"level.levelCode ?? level.id\"\r\n              [(ngModel)]=\"ratingSheet.selectedValue\" [ngModelOptions]=\"{standalone: true}\" #levelRadioButtons/>\r\n            <div class=\"text-lg font-bold\" *ngIf=\"level.isDisabled\" [id]=\"level.levelCode ?? level.id\" #levelRadioButtons> N/A </div>\r\n            <label class=\"text-lg\" [for]=\"level.id\">{{level.name}}</label>\r\n          </div>\r\n          <p class=\"text-xs\">{{level.description}}</p>\r\n          <div *ngIf=\"level.example\" class=\"text-sm font-medium cursor-pointer mt-2\"\r\n            (click)=\"level.showExample = !level.showExample\">\r\n            Possible Examples<i class=\"uil uil-angle-right\"></i>\r\n          </div>\r\n          <div class=\"example text-xs pl-3 whitespace-normal break-words\" *ngIf=\"level.showExample\"\r\n            [innerHtml]=\"level.example\">\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Conditional  -->\r\n        <div class=\"p-2 pt-4\" *ngIf=\"!dialogData.isPilotEnrollment && ratingSheet.measureRatingLevel?.conditional\"\r\n          [class]=\"{'selected': ratingSheet.measureConditionId == measureCondition.Conditional}\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.conditional)\">\r\n          <div class=\"text-center\">\r\n            <input type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"measureConditionName.Conditional\"\r\n              [(ngModel)]=\"ratingSheet.measureConditionName\" [ngModelOptions]=\"{standalone: true}\" />\r\n          </div>\r\n          <label class=\"text-lg\" for=\"conditional\">{{ratingSheet.measureRatingLevel?.conditional?.description}}</label>\r\n        </div>\r\n\r\n        <!-- EM  -->\r\n        <div class=\"p-2 pt-4\" *ngIf=\"!dialogData.isPilotEnrollment && ratingSheet.measureRatingLevel?.EM\"\r\n          [class]=\"{'selected': ratingSheet?.measureConditionId == measureCondition.Emerging}\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.EM)\">\r\n          <div class=\"text-center\">\r\n            <input type=\"radio\" name=\"filter2\" [disabled]=\"!ratingSheet.canEmerging\" class=\"radio-btn\"\r\n              [value]=\"measureConditionName.Emerging\" [(ngModel)]=\"ratingSheet.measureConditionName\"\r\n              [ngModelOptions]=\"{standalone: true}\" />\r\n          </div>\r\n          <label class=\"text-lg w-28\" for=\"em\">{{ratingSheet.measureRatingLevel?.EM?.description}}</label>\r\n        </div>\r\n\r\n        <!-- UR  -->\r\n        <div class=\"p-2 flex-shrink-0 w-full w-1/6 max-w-xs pt-4\"\r\n          *ngIf=\"!dialogData.isPilotEnrollment && ratingSheet.measureRatingLevel?.UR\"\r\n          [class]=\"{'selected': ratingSheet.measureConditionId == measureCondition.Unratable}\"\r\n          (click)=\"selectCondition(ratingSheet.measureRatingLevel?.UR)\">\r\n          <div class=\"text-center\">\r\n            <input type=\"radio\" name=\"filter\" class=\"radio-btn\" [value]=\"measureConditionName.Unratable\"\r\n              [(ngModel)]=\"ratingSheet.measureConditionName\" [ngModelOptions]=\"{standalone: true}\" />\r\n          </div>\r\n          <label class=\"text-base\" for=\"ur\">{{ratingSheet.measureRatingLevel?.UR?.description}}</label>\r\n\r\n          <ng-container\r\n            *ngIf=\"ratingSheet.measureConditionId == measureCondition.Unratable && dialogData.reasons && dialogData.reasons.length > 0\">\r\n            <p class=\"text-xs font-medium\">In the rare circumstance that you are unable to rate a measure:</p>\r\n            <label class=\"font-normal text-sm\" for=\"reason\">Reason</label>\r\n            <mat-select placeholder=\"Reason\" [(ngModel)]=\"ratingSheet.reasonId\" id=\"reason\">\r\n              <mat-option *ngFor=\"let reason of dialogData.reasons\" [value]=\"reason.id\" (click)=\"selectReason(reason)\">\r\n                {{ reason.reasonComment }}\r\n              </mat-option>\r\n            </mat-select>\r\n\r\n            <div *ngIf=\"ratingSheet.showComment\" class=\"mt-2\">\r\n              <label class=\"font-normal text-sm\" for=\"comment\">Comment</label>\r\n              <mat-form-field appearance=\"fill\">\r\n                <input matInput [(ngModel)]=\"ratingSheet.comment\" placeholder=\"Add your comment here\" maxlength=\"100\"\r\n                  id=\"comment\" autocomplete=\"off\" type=\"text\" />\r\n              </mat-form-field>\r\n            </div>\r\n          </ng-container>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, AfterViewInit, ElementRef, QueryList, ViewChildren } from '@angular/core';\r\nimport {\r\n  MeasureCondition,\r\n  MeasureConditionName,\r\n} from '@core/enums/measure-condition';\r\nimport { IPortfolioRatingSheet } from '@core/interfaces/iportfolio';\r\nimport { IMeasureLevel } from '@views/user/input-rating/interfaces/imeasure-level';\r\nimport { IRatingMeasureDto } from '@views/user/input-rating/interfaces/irating-measure';\r\n\r\n@Component({\r\n  selector: 'drdp-rating-sheet',\r\n  templateUrl: './rating-sheet.component.html',\r\n  styleUrls: ['./rating-sheet.component.scss'],\r\n})\r\nexport class RatingSheetComponent implements OnInit, AfterViewInit {\r\n  @ViewChildren('levelRadioButtons') levelRadioButtons?: QueryList<ElementRef>;\r\n  @Output() rating = new EventEmitter();\r\n  @Input() ratingSheet!: IPortfolioRatingSheet;\r\n  @Input() dialogData!: IRatingMeasureDto;\r\n  @Input() isPortfolio = false;\r\n\r\n  public get measureCondition() {\r\n    return MeasureCondition;\r\n  }\r\n\r\n  public get measureConditionName() {\r\n    return MeasureConditionName;\r\n  }\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngAfterViewInit() {\r\n    if (this.dialogData.isPilotEnrollment) {\r\n      this.scrollToRadioButton();\r\n    }\r\n  }\r\n\r\n  selectCondition(level: IMeasureLevel | any) {\r\n    if (level.id == MeasureCondition.Emerging) {\r\n      if (!this.ratingSheet.canEmerging) return;\r\n      else this.ratingSheet.measureConditionId = level.id;\r\n    } else {\r\n      this.ratingSheet.measureConditionId = level.id;\r\n      this.ratingSheet.canEmerging = false;\r\n      this.ratingSheet.selectedValue = null;\r\n    }\r\n    this.ratingSheet.measureConditionName = level.name;\r\n    this.rating.emit(this.ratingSheet);\r\n  }\r\n\r\n  selectLevel(level: IMeasureLevel) {\r\n    if (level.isDisabled) return;\r\n    this.ratingSheet.canEmerging =\r\n      level.id != (this.ratingSheet.measureRatingLevel?.maxLevel ?? 0);\r\n    this.ratingSheet.selectedValue = level.id;\r\n    if (\r\n      this.ratingSheet.canEmerging &&\r\n      this.ratingSheet.measureConditionId == MeasureCondition.Emerging\r\n    )\r\n      return;\r\n    this.ratingSheet.measureConditionId = null;\r\n    this.ratingSheet.measureConditionName = null;\r\n    this.rating.emit(this.ratingSheet);\r\n  }\r\n\r\n  selectReason(reason: any) {\r\n    this.ratingSheet.reasonId = reason.id;\r\n    this.ratingSheet.showComment = reason.reasonComment == 'Other';\r\n    if (!this.ratingSheet.showComment) this.ratingSheet.comment = null;\r\n    this.rating.emit(this.ratingSheet);\r\n  }\r\n\r\n  scrollToRadioButton() {\r\n    const levelCode = this.getLevelCode();\r\n\r\n    if (levelCode) {\r\n      setTimeout(() => this.scrollToElementById(levelCode), 1000);\r\n    }\r\n  }\r\n\r\n  private getLevelCode(): string {\r\n    const ageGradeMap: { [key: string]: { [age: number]: string } } = {\r\n      PTK: {\r\n        3: 'BL',\r\n        4: 'IM',\r\n        5: 'IL',\r\n        6: 'IL',\r\n      },\r\n      'PTK-3': {\r\n        6: 'IL',\r\n      },\r\n    };\r\n\r\n    const instrumentCode = this.dialogData.ageGradeInstrumentCode;\r\n    const age = this.dialogData.age ?? 0;\r\n    if (ageGradeMap[instrumentCode] && ageGradeMap[instrumentCode][age]) {\r\n      return ageGradeMap[instrumentCode][age];\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  private scrollToElementById(levelCode: string) {\r\n    if (this.levelRadioButtons == null) {\r\n      return;\r\n    }\r\n\r\n    const radioButton = this.levelRadioButtons.find((radio) => radio.nativeElement.id === levelCode);\r\n\r\n    if (radioButton) {\r\n      const parentElement = radioButton.nativeElement.parentElement?.parentElement;\r\n      const elementToScroll = parentElement || radioButton.nativeElement;\r\n      elementToScroll.scrollIntoView({\r\n        behavior: 'smooth',\r\n        block: 'center',\r\n      });\r\n    }\r\n  }\r\n}\r\n","<drdp-container color=\"lightBlue\" additionClasses=\"min-h-[6rem] w-full\">\r\n  <form\r\n    class=\"grid grid-cols-1 md:grid-cols-5 gap-3\"\r\n    [formGroup]=\"searchForm\"\r\n    (ngSubmit)=\"searchEmitter()\"\r\n  >\r\n    <div *ngIf=\"searchInput?.searchName\" class=\"col-span-1\">\r\n      <label\r\n        [ngClass]=\"{extraMargOnLabel:\r\n          searchInput?.searchYear || searchInput?.searchSite\r\n            , required: requiredFields?.name}\r\n        \"\r\n        for=\"searchBar\"\r\n        >Search by:</label\r\n      >\r\n      <div class=\"basis-1/2 border-b border-black\">\r\n        <input\r\n          matInput\r\n          [placeholder]=\"textInputPlaceholder\"\r\n          formControlName=\"SearchName\"\r\n          [required]=\"requiredFields?.name || false\"\r\n          class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n        />\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchState\" class=\"col-span-1\">\r\n      <drdp-select-state\r\n        #stateSelect\r\n        (state)=\"onDropDownSelect($event, select.States)\"\r\n        [clear]=\"clearDropdowns\"\r\n        [initialStateId]=\"StateId.value\"\r\n        [required]=\"requiredFields?.state || false\"\r\n      >\r\n      </drdp-select-state>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchAgency\" class=\"col-span-1\">\r\n      <drdp-select-agency\r\n        #agencySelect\r\n        (agency)=\"onDropDownSelect($event, select.Agencies)\"\r\n        [stateId]=\"StateId.value\"\r\n        [initialAgencyId]=\"AgencyId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [required]=\"requiredFields?.agency || false\"\r\n      >\r\n      </drdp-select-agency>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchSite\" class=\"col-span-1\">\r\n      <drdp-select-site\r\n        #siteSelect\r\n        (site)=\"onDropDownSelect($event, select.Sites)\"\r\n        [agencyId]=\"AgencyId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [multiSelect]=\"searchMultiSite\"\r\n        [multiSelectInitVals]=\"searchMultiSite\"\r\n        [reloadSites]=\"reload\"\r\n        [required]=\"requiredFields?.site || false\"\r\n      >\r\n      </drdp-select-site>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchSiteType\" class=\"col-span-1\">\r\n      <drdp-select-type\r\n        #typeSelect\r\n        (type)=\"onDropDownSelect($event, select.SiteType)\"\r\n        [initialTypeId]=\"Type.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [required]=\"requiredFields?.siteType || false\"\r\n      ></drdp-select-type>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchYear\" class=\"col-span-1\">\r\n      <drdp-select-school-year\r\n        #schoolYearSelect\r\n        (schoolYear)=\"onDropDownSelect($event, select.SchoolYear)\"\r\n        [initialYearId]=\"SchoolYearId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [required]=\"requiredFields?.year || false\"\r\n      ></drdp-select-school-year>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchRatingPeriod\" class=\"col-span-1\">\r\n      <drdp-select-rating-period\r\n        #ratingPeriodSelect\r\n        (ratingPeriod)=\"onDropDownSelect($event, select.RatingPeriods)\"\r\n        [initialRatingPeriodId]=\"RatingPeriodId.value\"\r\n        [agencyId]=\"AgencyId.value\"\r\n        [schoolYear]=\"SchoolYearId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [required]=\"requiredFields?.period || false\"\r\n      ></drdp-select-rating-period>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchTeacher\" class=\"col-span-1\">\r\n      <drdp-select-teacher\r\n        #teacherSelect\r\n        (teacher)=\"onDropDownSelect($event, select.Teacher)\"\r\n        [initialTeacherId]=\"TeacherId.value\"\r\n        [agencyId]=\"AgencyId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [allTeachers]=\"allTeachers\"\r\n        [teacherType]=\"teacherType\"\r\n        [required]=\"requiredFields?.teacher || false\"\r\n      ></drdp-select-teacher>\r\n    </div>\r\n\r\n    <div *ngIf=\"searchInput?.searchTeacherOfRecord\" class=\"col-span-1\">\r\n      <drdp-select-teacher\r\n        #teacherOfRecordSelect\r\n        (teacherOfRecord)=\"onDropDownSelect($event, select.TeacherOfRecord)\"\r\n        [initialTeacherId]=\"TeacherOfRecordId.value\"\r\n        [agencyId]=\"AgencyId.value\"\r\n        [clear]=\"clearDropdowns\"\r\n        [allTeachers]=\"false\" \r\n        [teacherType]=\"role.TeacherOfRecord\"\r\n        [required]=\"false\"\r\n      ></drdp-select-teacher>\r\n    </div>\r\n\r\n    <div\r\n      class=\"col-span-1 md:col-start-5 self-end justify-center md:justify-self-end\"\r\n    >\r\n      <span class=\"flex justify-center\">\r\n        <drdp-btn additionalClasses=\"mr-4\">Search</drdp-btn>\r\n        <drdp-btn color=\"outline\" (click)=\"onClear()\" type=\"button\"\r\n          >Clear</drdp-btn\r\n        >\r\n      </span>\r\n    </div>\r\n  </form>\r\n</drdp-container>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { SelectStateComponent } from '../dropdowns/select-state/select-state.component';\r\nimport { SelectAgencyComponent } from '../dropdowns/select-agency/select-agency.component';\r\nimport { SelectSiteComponent } from '../dropdowns/select-site/select-site.component';\r\nimport { SelectTypeComponent } from '../dropdowns/select-type/select-type.component';\r\nimport { SelectSchoolYearComponent } from '../dropdowns/select-school-year/select-school-year.component';\r\nimport { SelectRatingPeriodComponent } from '../dropdowns/select-rating-period/select-rating-period.component';\r\nimport { SelectTeacherComponent } from '../dropdowns/select-teacher/select-teacher.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IRequiredFields } from '@core/interfaces/irequired-fields';\r\nimport { Role } from '@core/enums/roles';\r\n\r\n@Component({\r\n  selector: 'drdp-search',\r\n  templateUrl: './search.component.html',\r\n  styleUrls: ['./search.component.scss'],\r\n})\r\nexport class SearchComponent implements OnInit {\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n  @ViewChild('siteSelect') siteSelect: SelectSiteComponent | undefined;\r\n  @ViewChild('typeSelect') typeSelect: SelectTypeComponent | undefined;\r\n  @ViewChild('schoolYearSelect') schoolYearSelect:\r\n    | SelectSchoolYearComponent\r\n    | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | SelectRatingPeriodComponent\r\n    | undefined;\r\n  @ViewChild('teacherSelect') teacherSelect: SelectTeacherComponent | undefined;\r\n  @ViewChild('teacherOfRecordSelect') teacherOfRecordSelect: SelectTeacherComponent | undefined;\r\n  @Output() search = new EventEmitter();\r\n  @Output() clear = new EventEmitter<any>();\r\n  @Input() textInputPlaceholder: string = 'Name';\r\n  @Input() searchInput?: ISearchInput;\r\n  @Input() requiredFields?: IRequiredFields;\r\n  @Input() allTeachers?: boolean;\r\n  @Input() teacherType?: number | null;\r\n  @Input() reload = false;\r\n\r\n  searchForm: FormGroup | any;\r\n  siteForm: FormGroup | any;\r\n  ratingForm: FormGroup | any;\r\n\r\n  clearDropdowns = false;\r\n  currentSchoolYearId: number = 0;\r\n\r\n  yearOptions$?: Observable<any>;\r\n  siteTypeOptions$?: Observable<any>;\r\n  chosenSites: number[] = [];\r\n  searchMultiSite: boolean = false;\r\n\r\n  user: any = this.authService.getCurrentUser();\r\n  initStateId: number = 0;\r\n  initAgencyId: number = 0;\r\n\r\n  get SearchName() {\r\n    return this.searchForm.get('SearchName');\r\n  }\r\n  get Type() {\r\n    return this.searchForm.get('Type');\r\n  }\r\n  get SchoolYearId() {\r\n    return this.searchForm.get('SchoolYearId');\r\n  }\r\n  get StateId() {\r\n    return this.searchForm.get('StateId');\r\n  }\r\n  get AgencyId() {\r\n    return this.searchForm.get('AgencyId');\r\n  }\r\n  get SiteIds() {\r\n    return this.searchForm.get('SiteIds');\r\n  }\r\n  get RatingPeriodId() {\r\n    return this.searchForm.get('RatingPeriodId');\r\n  }\r\n  get TeacherId() {\r\n    return this.searchForm.get('TeacherId');\r\n  }\r\n\r\n  get TeacherOfRecordId() {\r\n    return this.searchForm.get('TeacherOfRecordId');\r\n  }\r\n\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  get role() { return Role; }\r\n  private subscriptions = new Subscription();\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public lookup: LookupService,\r\n    private authService: AuthService,\r\n    private toastService: ToastService,\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initStateId = this.user.stateId ?? null;\r\n    this.initAgencyId = this.user.agencyId ?? null;\r\n    this.searchMultiSite = Boolean(this.searchInput?.searchMultiSite);\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.searchForm = this.fb.group({\r\n      SearchName: ['', this.requiredFields?.name? Validators.required : null],\r\n      Type: [0, this.requiredFields?.siteType ? Validators.required : null],\r\n      SchoolYearId: [0, this.requiredFields?.year ? Validators.required : null],\r\n      StateId: [null, this.requiredFields?.state ? Validators.required : null],\r\n      AgencyId: [null, this.requiredFields?.agency ? Validators.required : null],\r\n      SiteIds: [0, this.requiredFields?.site ? Validators.required : null],\r\n      RatingPeriodId: [null, this.requiredFields?.period ? Validators.required : null],\r\n      TeacherId: [null, this.requiredFields?.teacher ? Validators.required : null],\r\n      TeacherOfRecordId: [null, this.requiredFields?.teacherOfRecord ? Validators.required : null],\r\n    });\r\n\r\n    if (this.initStateId && this.initAgencyId) {\r\n      this.searchForm.patchValue({\r\n        StateId: this.initStateId,\r\n        AgencyId: this.initAgencyId,\r\n      });\r\n    }\r\n  }\r\n\r\n  searchEmitter(): void {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error(\"Please enter all required fields.\");\r\n      return;\r\n    }\r\n    let payload = {\r\n      SearchName: this.SearchName.value,\r\n      Type: this.Type.value ? +this.Type.value : 0,\r\n      SchoolYearId: this.SchoolYearId.value\r\n        ? +this.SchoolYearId.value\r\n        : this.currentSchoolYearId,\r\n      StateId: this.StateId.value ? +this.StateId.value : '',\r\n      AgencyId: this.AgencyId.value ? +this.AgencyId.value : '',\r\n      SiteIds: this.SiteIds.value ? this.SiteIds.value : '',\r\n      RatingPeriodId: this.RatingPeriodId.value\r\n        ? this.RatingPeriodId.value\r\n        : '',\r\n      TeacherId: this.TeacherId.value ? this.TeacherId.value : '',\r\n      TeacherOfRecordId: this.TeacherOfRecordId.value || ''\r\n    };\r\n    this.search.emit(payload);\r\n  }\r\n\r\n  onClear(): void {\r\n    this.clearDropdowns = true;\r\n    this.SearchName.setValue('');\r\n    let payload = {\r\n      SearchName: '',\r\n      Type: '',\r\n      SchoolYearId: '',\r\n      StateId: '',\r\n      AgencyId: '',\r\n      SiteIds: '',\r\n      RatingPeriodId: '',\r\n      TeacherId: '',\r\n      TeacherOfRecordId: ''\r\n    };\r\n    if (this.stateSelect?.disabled) {\r\n      payload.StateId = this.StateId.value;\r\n    }\r\n\r\n    if (this.agencySelect?.disabled) {\r\n      payload.AgencyId = this.AgencyId.value;\r\n    }\r\n    this.clearAllDropdowns();\r\n    this.clear.emit(payload);\r\n  }\r\n\r\n  clearAllDropdowns() {\r\n    if (this.searchInput?.searchState) this.stateSelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchAgency) this.agencySelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchSite) {\r\n      this.siteSelect?.clearSelected();\r\n      this.SiteIds.setValue(null);\r\n    }\r\n\r\n    if (this.searchInput?.searchSiteType) this.typeSelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchYear) this.schoolYearSelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchRatingPeriod)\r\n      this.ratingPeriodSelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchTeacher) this.teacherSelect?.clearSelected();\r\n\r\n    if (this.searchInput?.searchTeacherOfRecord) this.teacherOfRecordSelect?.clearSelected();\r\n  }\r\n\r\n  onDropDownSelect(event: any, selectType: string) {\r\n    this.clearDropdowns = false;\r\n    switch (selectType) {\r\n      case this.select.States:\r\n        this.StateId.setValue(event?.id);\r\n        break;\r\n      case this.select.Agencies:\r\n        this.AgencyId.setValue(event?.id);\r\n        if (this.searchInput?.searchSite) this.SiteIds.setValue(null);\r\n        if (this.searchInput?.searchRatingPeriod) this.RatingPeriodId.setValue(null);\r\n        if (this.searchInput?.searchTeacher) this.TeacherId.setValue(null);\r\n        if (this.searchInput?.searchTeacherOfRecord) this.TeacherOfRecordId.setValue(null);\r\n        break;\r\n      case this.select.Sites:\r\n        this.handleChosenSites(event);\r\n        break;\r\n      case this.select.SiteType:\r\n        this.Type.setValue(event?.id);\r\n        break;\r\n      case this.select.SchoolYear:\r\n        this.SchoolYearId.setValue(event?.id);\r\n        break;\r\n      case this.select.RatingPeriods:\r\n        this.RatingPeriodId.setValue(event?.id);\r\n        break;\r\n      case this.select.Teacher:\r\n        this.TeacherId.setValue(event?.id);\r\n        break;\r\n      case this.select.TeacherOfRecord:\r\n        this.TeacherOfRecordId.setValue(event?.id);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleChosenSites(event: any): void {\r\n    if (this.searchMultiSite) {\r\n      this.SiteIds.setValue(event.map((s: ISites) => s.id).join(', '));\r\n    } else {\r\n      this.SiteIds.setValue(event?.id);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IMenuItem } from '@core/interfaces/side-menu';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SideMenuService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getAll(): Observable<IMenuItem[]> {\r\n    return this.data.get('menuitem/all');\r\n  }\r\n\r\n  getById(id: number): Observable<IMenuItem> {\r\n    return this.data.get(`menuitem/${id}`);\r\n  }\r\n\r\n  getFormatted(): Observable<IMenuItem[]> {\r\n    return this.data.get('menuitem/formatted');\r\n  }\r\n\r\n  create(payload: IMenuItem): Observable<boolean> {\r\n    return this.data.post('menuitem', payload);\r\n  }\r\n\r\n  update(payload: IMenuItem): Observable<boolean> {\r\n    return this.data.put('menuitem', payload);\r\n  }\r\n\r\n  delete(id: number): Observable<boolean> {\r\n    return this.data.delete(`menuitem/${id}`);\r\n  }\r\n}\r\n","<div class=\"lg:hidden flex justify-between p-5 w-[100%]\">\r\n    <img class=\"header-image cursor-pointer\" src=\"assets/images/logo/newDrdpLogo.svg\" alt=\"DRDP Online Logo\"\r\n        [routerLink]=\"dashboardRoute\">\r\n    <i class=\"text-4xl uil uil-bars cursor-pointer\" (click)=\"showMenu()\"></i>\r\n</div>\r\n<div class=\"lg:block lg:static bg-white rounded-3xl lg:min-h-[96vh] p-4 justify-center items-center overflow-hidden drop-shadow-md sidenav\"\r\n    [ngClass]=\"showSideMenu?' z-[100] left-2 absolute w-[98%] min-h-fit':'-left-[100%] absolute w-[98%] z-[100] min-h-fit'\">\r\n    <div class=\"pb-3 border-drdpgrey-100 lg:block hidden\">\r\n        <img class=\"pt-3 header-image cursor-pointer\" src=\"assets/images/logo/newDrdpLogo.svg\" alt=\"DRDP Online Logo\"\r\n            [routerLink]=\"dashboardRoute\">\r\n    </div>\r\n    <div class=\"lg:hidden\">\r\n        <drdp-drop-menu class=\"font-semibold\" [agencyItems]=\"userDropMenu\" [sites]=\"dropMenuItems\" [show]=\"toggle(100)\"\r\n            [menuIndex]=\"100\" (selectedItemEvent)=\"checkSelectedItem($event)\"></drdp-drop-menu>\r\n    </div>\r\n    <div class=\"mt-3 border-b border-drdpgrey-100\">\r\n        <div class=\"lg:hidden border-t border-drdpgrey-100\" *ngFor=\"let link of headerBtns\">\r\n            <ul>\r\n                <li class=\"hover:bg-drdpblue-300 hover:rounded-xl\">\r\n                    <drdp-menu-link [icon]=\"link.icon\" [label]=\"link.label\" [link]=\"link.routeLink\"\r\n                        (click)=\"showMenu()\"></drdp-menu-link>\r\n                </li>\r\n            </ul>\r\n        </div>\r\n        <div *ngFor=\"let item of menuItems, let i = index\">\r\n            <div *drdpCheckPermission=\"item.permissionId\" class=\"border-t border-drdpgrey-100\">\r\n                <ul>\r\n                    <li [ngClass]=\"{'hover:bg-drdpblue-300 hover:rounded-xl' : item.childItems.length == 0 }\">\r\n                        <drdp-menu-link *ngIf=\"item.childItems.length == 0; else dropdown\" [icon]=\"item.icon ?? ''\"\r\n                            [label]=\"item.item\" [link]=\"item.linkRoute ?? ''\" (click)=\"showMenu()\">\r\n                        </drdp-menu-link>\r\n                    </li>\r\n                </ul>\r\n            </div>\r\n            <ng-template #dropdown>\r\n                <ul>\r\n                    <li>\r\n                        <drdp-drop-menu [dropdownItems]=\"item\" [show]=\"toggle(i)\" [menuIndex]=\"i\"\r\n                            (selectedItemEvent)=\"checkSelectedItem($event)\" (close)=\"showMenu()\"></drdp-drop-menu>\r\n                    </li>\r\n                </ul>\r\n            </ng-template>\r\n        </div>\r\n        <!-- Hide until ready -->\r\n        <!-- <div class=\"lg:hidden border-t border-drdpgrey-100\">\r\n            <ul>\r\n                <li class=\"hover:bg-drdpblue-300 hover:rounded-xl\">\r\n                    <drdp-menu-link icon=\"uil uil-comment\" label=\"Chatbot\" (click)=\"openChat()\">\r\n                    </drdp-menu-link>\r\n                </li>\r\n            </ul>\r\n        </div> -->\r\n        <div class=\"lg:hidden border-t border-drdpgrey-100\">\r\n            <ul>\r\n                <li class=\"hover:bg-drdpblue-300 hover:rounded-xl\">\r\n                    <drdp-menu-link icon=\"uil uil-signout\" label=\"Logout\" (click)=\"logout()\">\r\n                    </drdp-menu-link>\r\n                </li>\r\n            </ul>\r\n        </div>\r\n    </div>\r\n    <!-- Hide until ready -->\r\n    <!-- <ul>\r\n        <li class=\"hidden lg:block hover:bg-drdpblue-300 hover:rounded-xl\">\r\n            <drdp-menu-link icon=\"uil uil-comment\" label=\"Chatbot\" (click)=\"openChat()\">\r\n            </drdp-menu-link>\r\n        </li>\r\n    </ul> -->\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport {\r\n  IMenuLinks,\r\n  IDropMenu,\r\n  IEvent,\r\n  IMenuItem,\r\n} from '@core/interfaces/side-menu';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ChatboxService } from '@core/services/chatbox.service';\r\nimport { SideMenuService } from '@core/services/sidemenu.service';\r\nimport { UserDropMenuService } from '@core/services/user-dropmenu.service';\r\nimport { Subscription, take } from 'rxjs';\r\n\r\n\r\n@Component({\r\n  selector: 'drdp-side-menu',\r\n  templateUrl: './side-menu.component.html',\r\n  styleUrls: ['./side-menu.component.scss'],\r\n})\r\nexport class SideMenuComponent implements OnInit {\r\n\r\n  isAdmin = true;\r\n  showSideMenu = false;\r\n  menuItems: IMenuItem[] = [];\r\n  menuLinks: IMenuLinks[] = [\r\n    {\r\n      label: '',\r\n      routeLink: '',\r\n      icon: '',\r\n    },\r\n  ];\r\n\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n\r\n  user = this.authService.getCurrentUser();\r\n  dashboardRoute: string = this.user.permissions.includes(Permission.AccessStateDashboard) ? '/state-dashboard' : '/dashboard';\r\n\r\n  selectedItem?: number;\r\n  showDrop: boolean = false;\r\n  // @ViewChild('dropMenu') showValue!:DropMenuComponent\r\n\r\n  private subscriptions = new Subscription();\r\n\r\n  constructor(\r\n    public sideMenuService: SideMenuService,\r\n    private userDropMenuService: UserDropMenuService,\r\n    public authService: AuthService,\r\n    private chatboxService: ChatboxService\r\n  ) {}\r\n\r\n  headerBtns = this.userDropMenuService.headerBtns;\r\n  dropMenuItems = this.user.sites;\r\n\r\n\r\n  userDropMenu: IDropMenu = {\r\n    label: this.user.userName,\r\n    labelTwo: this.user.agencyName,\r\n\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.add(\r\n      this.sideMenuService.getFormatted().subscribe((res: IMenuItem[]) => {\r\n        if (res && res.length > 0) {\r\n          this.menuItems = res;\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  checkSelectedItem(eventValues: IEvent) {\r\n    this.selectedItem = eventValues.indexValue;\r\n    this.showDrop = eventValues.showValue;\r\n  }\r\n\r\n  toggle(i: number) {\r\n    if (i == this.selectedItem) {\r\n      if (this.showDrop) {\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  showMenu() {\r\n    this.showSideMenu = !this.showSideMenu;\r\n  }\r\n\r\n  logout(): void {\r\n    const currentUser = this.authService.getCurrentUser();\r\n    if (currentUser) this.authService.logout().pipe(take(1)).subscribe();\r\n  }\r\n\r\n  openChat(): void {\r\n    this.chatboxService.openChat();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div *ngIf=\"isLoading\" class=\"spinner-wrapper\">\r\n      <mat-spinner></mat-spinner>\r\n</div>\r\n  \r\n","import { AfterViewChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { SpinnerService } from '@core/services/spinner.service';\r\n\r\n@Component({\r\n  selector: 'drdp-spinner',\r\n  templateUrl: './spinner.component.html',\r\n  styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements AfterViewChecked {\r\n  isLoading: boolean = false\r\n\r\n  constructor(private spinner: SpinnerService, private cdRef: ChangeDetectorRef) { }\r\n\r\n  ngAfterViewChecked() {\r\n    this.spinner.getSpinnerCounter().subscribe((counter: number) => {\r\n      if (counter > 0) {\r\n        this.isLoading = true;\r\n        this.cdRef.detectChanges();\r\n      } else {\r\n        this.isLoading = false;\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-title',\r\n  templateUrl: './title.component.html',\r\n  styleUrls: ['./title.component.scss']\r\n})\r\nexport class TitleComponent implements OnInit {\r\n\r\n  constructor() { }\r\n  @Input() title?: string;\r\n  @Input() additionalClasses?: string = 'text-3xl'\r\n  ngOnInit(): void {}\r\n\r\n}\r\n","<h1 class=\"font-semibold mb-4 {{additionalClasses}}\">{{title}} \r\n    <ng-content></ng-content>\r\n</h1>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-toast',\r\n  templateUrl: './toast.component.html',\r\n  styleUrls: ['./toast.component.scss']\r\n})\r\nexport class ToastComponent implements OnInit {\r\n  subscription: Subscription | any;\r\n  message?: string;\r\n\r\n  constructor(private toastService: ToastService) { }\r\n\r\n  ngOnInit() {\r\n    this.subscription = this.toastService.$responseMessage.subscribe({\r\n      next: (msg: string) => {\r\n        if (msg) {\r\n          this.message = msg;\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n}\r\n","<span class=\"text-center global-font-italic-normal\"> {{message}}</span>\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n  selector: 'drdp-video',\r\n  templateUrl: './video.component.html',\r\n  styleUrls: ['./video.component.scss']\r\n})\r\nexport class VideoComponent implements OnInit {\r\n    @Input() url!: string | ArrayBuffer | SafeResourceUrl;\r\n    @Input() edit: boolean = false;\r\n  constructor() { }\r\n\r\n  ngOnInit() {\r\n  }\r\n}\r\n","<div class=\"video\">\r\n\t<video controls #videoPlayer [src]=\"url\" [class]=\"{'h-64':edit}\">\r\n\t\tYour browser does not support the audio element.\r\n\t</video>\r\n</div>\r\n","import { ReactiveFormsModule } from '@angular/forms';\r\nimport { BtnComponent } from './components/btn/btn.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { SideMenuComponent } from './components/side-menu/side-menu.component';\r\nimport { MenuLinkComponent } from './components/menu-link/menu-link.component';\r\nimport { DropMenuComponent } from './components/drop-menu/drop-menu.component';\r\nimport { HeaderDropmenuComponent } from './components/header-dropmenu/header-dropmenu.component';\r\nimport { HeaderLogoAndImageComponent } from './components/header-logo-and-image/header-logo-and-image.component';\r\nimport { TitleComponent } from './components/title/title.component';\r\nimport { ModalComponent } from './components/modal/modal.component';\r\nimport { AddEditComponent } from './components/drdp-tables/add-edit/add-edit.component';\r\nimport { SearchComponent } from './components/search/search.component';\r\n\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { ToastComponent } from './components/toast/toast.component';\r\nimport { PaginationComponent } from './components/pagination/pagination.component';\r\nimport { SpinnerComponent } from './components/spinner/spinner.component';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { NewsItemComponent } from './components/news-item/news-item.component';\r\nimport { ContainerComponent } from './components/container/container.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ConfirmationModalComponent } from './components/confirmation-modal/confirmation-modal.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { SelectComponent } from './components/dropdowns/select/select.component';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { PillComponent } from './components/pill/pill.component';\r\nimport { SelectStateComponent } from './components/dropdowns/select-state/select-state.component';\r\nimport { SelectAgencyComponent } from './components/dropdowns/select-agency/select-agency.component';\r\nimport { UploadTableComponent } from './components/drdp-tables/upload-table/upload-table.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { ClassroomRatingPeriodParamsComponent } from './components/dropdowns/classroom-rating-period-params/classroom-rating-period-params.component';\r\nimport { SelectSiteComponent } from './components/dropdowns/select-site/select-site.component';\r\nimport { FilterSelectComponent } from './components/dropdowns/filter-select/filter-select.component';\r\nimport { SelectRoleComponent } from './components/dropdowns/select-role/select-role.component';\r\nimport { SelectCountyComponent } from './components/dropdowns/select-county/select-county.component';\r\nimport { SelectGranteeComponent } from './components/dropdowns/select-grantee/select-grantee.component';\r\nimport { SelectStatusComponent } from './components/dropdowns/select-status/select-status.component';\r\nimport { SelectSuffixComponent } from './components/dropdowns/select-suffix/select-suffix.component';\r\nimport { SelectSchoolYearComponent } from './components/dropdowns/select-school-year/select-school-year.component';\r\nimport { SelectTypeComponent } from './components/dropdowns/select-type/select-type.component';\r\nimport { SelectRatingPeriodComponent } from './components/dropdowns/select-rating-period/select-rating-period.component';\r\nimport { SelectTeacherComponent } from './components/dropdowns/select-teacher/select-teacher.component';\r\nimport { SelectHeadStartComponent } from './components/dropdowns/select-head-start/select-head-start.component';\r\nimport { SelectVendorComponent } from './components/dropdowns/select-vendor/select-vendor.component';\r\nimport { SelectRegionComponent } from './components/dropdowns/select-region/select-region.component';\r\nimport { GroupSelectComponent } from './components/dropdowns/group-select/group-select.component';\r\nimport { SelectSiteCodeComponent } from './components/dropdowns/select-site-code/select-site-code.component';\r\nimport { VideoComponent } from './components/video/video.component';\r\nimport { AudioComponent } from './components/audio/audio.component';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { SelectSelpaComponent } from './components/dropdowns/select-selpa/select-selpa.component';\r\nimport { PortfolioEvidenceManagementComponent } from './components/portfolio-evidence-management/portfolio-evidence-management.component';\r\nimport { EvidencePhotosComponent } from './components/portfolio-evidence-management/evidence-photos/evidence-photos.component';\r\nimport { EvidenceVideoComponent } from './components/portfolio-evidence-management/evidence-video/evidence-video.component';\r\nimport { EvidenceAudioComponent } from './components/portfolio-evidence-management/evidence-audio/evidence-audio.component';\r\nimport { EvidenceNotesComponent } from './components/portfolio-evidence-management/evidence-notes/evidence-notes.component';\r\nimport { RatingSheetComponent } from './components/portfolio-evidence-management/rating-sheet/rating-sheet.component';\r\nimport { SelectClassroomComponent } from './components/dropdowns/select-classroom/select-classroom.component';\r\nimport { SelectAgeGradeComponent } from './components/dropdowns/select-age-grade/select-age-grade.component';\r\nimport { SelectProvidersComponent } from './components/dropdowns/select-providers/select-providers.component';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { DatePickerComponent } from './components/date-picker/date-picker.component';\r\nimport { SelectYesNoComponent } from './components/dropdowns/select-yes-no/select-yes-no.component';\r\nimport { SelectIepPlanComponent } from './components/dropdowns/select-iep-plan/select-iep-plan.component';\r\nimport { SelectGenderComponent } from './components/dropdowns/select-gender/select-gender.component';\r\nimport { SelectRaceComponent } from './components/dropdowns/select-race/select-race.component';\r\nimport { SelectProgramTypeComponent } from './components/dropdowns/select-program-type/select-program-type.component';\r\nimport { SelectLanguageComponent } from './components/dropdowns/select-language/select-language.component';\r\nimport { SelectPortfolioUsersComponent } from './components/dropdowns/select-portfolio-users/select-portfolio-users.component';\r\nimport { SelectRequestReasonComponent } from './components/dropdowns/select-request-reason/select-request-reason.component';\r\nimport { SelectRequestStatusTypeComponent } from './components/dropdowns/select-request-status-type/select-request-status-type.component';\r\nimport { SelectReportTypeComponent } from './components/dropdowns/select-report-type/select-report-type.component';\r\nimport { SelectReportActionComponent } from './components/dropdowns/select-report-action/select-report-action.component';\r\nimport { SelectStatePreschoolComponent } from './components/dropdowns/select-state-preschool/select-state-preschool.component';\r\nimport { SelectContractorComponent } from './components/dropdowns/select-contractor/select-contractor.component';\r\nimport { SelectGlobalRatingComponent } from './components/dropdowns/select-global-rating/select-global-rating.component';\r\nimport { SelectClassComponent } from './components/dropdowns/select-class/select-class.component';\r\nimport { SelectOutcomeComponent } from './components/dropdowns/select-outcome/select-outcome.component';\r\nimport { SelectInitialAssessmentToolTypeComponent } from './components/dropdowns/select-initial-assessment-tool-type/select-initial-assessment-tool-type.component';\r\nimport { EvidenceStructuredPromptComponent } from './components/portfolio-evidence-management/evidence-structured-prompt/evidence-structured-prompt.component';\r\nimport { ClassPortfolioEvidenceComponent } from './components/class-portfolio-evidence/class-portfolio-evidence.component';\r\nimport { CarouselComponent } from './components/carousel/carousel.component';\r\nimport { CarouselModule } from 'ngx-owl-carousel-o';\r\nimport { ChartComponent } from './components/chart/chart.component';\r\nimport { LegendComponent } from './components/chart/legend/legend.component';\r\nimport { SelectDisabilityComponent } from './components/dropdowns/select-disability/select-disability.component';\r\n\r\nexport const Components = [\r\n  SideMenuComponent,\r\n  HeaderComponent,\r\n  BtnComponent,\r\n  FooterComponent,\r\n  MenuLinkComponent,\r\n  DropMenuComponent,\r\n  HeaderDropmenuComponent,\r\n  HeaderLogoAndImageComponent,\r\n  TitleComponent,\r\n  ModalComponent,\r\n  AddEditComponent,\r\n  ToastComponent,\r\n  PaginationComponent,\r\n  SelectComponent,\r\n  SpinnerComponent,\r\n  SearchComponent,\r\n  NewsItemComponent,\r\n  ContainerComponent,\r\n  ConfirmationModalComponent,\r\n  PillComponent,\r\n  SelectStateComponent,\r\n  SelectAgencyComponent,\r\n  UploadTableComponent,\r\n  ClassroomRatingPeriodParamsComponent,\r\n  SelectSiteComponent,\r\n  FilterSelectComponent,\r\n  SelectRoleComponent,\r\n  SelectCountyComponent,\r\n  SelectStatusComponent,\r\n  SelectSuffixComponent,\r\n  SelectGranteeComponent,\r\n  SelectSchoolYearComponent,\r\n  SelectTypeComponent,\r\n  SelectRatingPeriodComponent,\r\n  SelectTeacherComponent,\r\n  SelectHeadStartComponent,\r\n  SelectSiteCodeComponent,\r\n  SelectVendorComponent,\r\n  SelectRegionComponent,\r\n  GroupSelectComponent,\r\n  VideoComponent,\r\n  AudioComponent,\r\n  SelectSelpaComponent,\r\n  PortfolioEvidenceManagementComponent,\r\n  EvidencePhotosComponent,\r\n  EvidenceVideoComponent,\r\n  EvidenceAudioComponent,\r\n  EvidenceNotesComponent,\r\n  RatingSheetComponent,\r\n  SelectClassroomComponent,\r\n  SelectAgeGradeComponent,\r\n  SelectProvidersComponent,\r\n  DatePickerComponent,\r\n  SelectYesNoComponent,\r\n  SelectOutcomeComponent,\r\n  SelectInitialAssessmentToolTypeComponent,\r\n  SelectIepPlanComponent,\r\n  SelectGenderComponent,\r\n  SelectRaceComponent,\r\n  SelectProgramTypeComponent,\r\n  SelectLanguageComponent,\r\n  SelectPortfolioUsersComponent,\r\n  SelectRequestReasonComponent,\r\n  SelectRequestStatusTypeComponent,\r\n  SelectReportTypeComponent,\r\n  SelectReportActionComponent,\r\n  SelectStatePreschoolComponent,\r\n  SelectContractorComponent,\r\n  SelectGlobalRatingComponent,\r\n  SelectClassComponent,\r\n  EvidenceStructuredPromptComponent,\r\n  ClassPortfolioEvidenceComponent,\r\n  CarouselComponent,\r\n  ChartComponent,\r\n  LegendComponent,\r\n  SelectDisabilityComponent\r\n];\r\n\r\nexport const Modules = [\r\n  ReactiveFormsModule,\r\n  MatInputModule,\r\n  MatSelectModule,\r\n  MatTableModule,\r\n  MatSortModule,\r\n  MatPaginatorModule,\r\n  MatFormFieldModule,\r\n  MatDialogModule,\r\n  MatButtonModule,\r\n  MatProgressBarModule,\r\n  MatProgressSpinnerModule,\r\n  MatAutocompleteModule,\r\n  MatSnackBarModule,\r\n  MatDatepickerModule,\r\n  MatNativeDateModule,\r\n  MatTooltipModule,\r\n  MatCheckboxModule,\r\n  MatSlideToggleModule,\r\n  MatRadioModule,\r\n  MatIconModule,\r\n  MatCardModule,\r\n  MatButtonToggleModule,\r\n  MatTabsModule,\r\n  MatBadgeModule,\r\n  MatMenuModule,\r\n  CarouselModule\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Components, Modules } from './module-helper';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PipesModule } from '@core/pipes/pipes.module';\r\nimport { CoreModule } from '@core/core.module';\r\n\r\n@NgModule({\r\n  declarations: [Components],\r\n  imports: [\r\n    CommonModule,\r\n    Modules,\r\n    RouterModule,\r\n    FormsModule,\r\n    PipesModule.forRoot(),\r\n    CoreModule,\r\n  ],\r\n  exports: [Components, Modules],\r\n})\r\nexport class SharedModule {}\r\n","<div class=\"mx-auto fix-action-row modal-body\">\r\n    <div class=\"flex items-center py-2\">\r\n        <drdp-pill\r\n            [pillClass]=\"newsData.newsItemType.newsItemTypeName\">\r\n            {{ newsData.newsItemType.newsItemTypeName ?? '' }}\r\n        </drdp-pill>\r\n        <drdp-btn *ngIf=\"canEdit\" class=\"mx-2\" (click)=\"editNewsItem()\" cdkFocusInitial><i class=\"uil uil-pen cursor-pointer\"></i> Edit News Item</drdp-btn>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 uil uil-times-circle ml-auto\"></i>\r\n    </div>\r\n    <div class=\"mb-2 border-b border-gray-100\">\r\n        <span class=\"text-[25px] font-bold\">\r\n            {{this.newsData.newsItemTitle}}\r\n        </span>\r\n        <span class=\"text-gray-500\">{{this.newsData.newsItemDate | date: 'longDate'}}</span>\r\n    </div>\r\n\r\n    <div id=\"news-body-div\" mat-dialog-content>\r\n        <p>{{ this.newsData.newsItemBody }}</p>\r\n    </div>\r\n\r\n</div>\r\n\r\n","import { Component, Inject, Input, OnInit } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@core/services/auth.service';\r\n\r\n@Component({\r\n  selector: 'drdp-news-description',\r\n  templateUrl: './news-description.component.html',\r\n  styleUrls: ['./news-description.component.scss']\r\n})\r\nexport class NewsDescriptionComponent implements OnInit {\r\n\r\n  canEdit: boolean = false;\r\n  user = this.authService.getCurrentUser();\r\n  constructor(\r\n    @Inject(MAT_DIALOG_DATA) public newsData: any,\r\n    private router: Router,\r\n    public modal: MatDialog,\r\n    private authService: AuthService\r\n    ) { }\r\n\r\n\r\n  ngOnInit(): void {\r\n    this.canEdit = this.user.userId === this.newsData.createdBy;\r\n  }\r\n\r\n  editNewsItem(): void {\r\n    this.modal.closeAll();\r\n    this.router.navigate([`/newsitems/${this.newsData.id}`])\r\n  }\r\n\r\n}\r\n","<div class=\"rounded-lg fixActionRow w-96\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{measureCode}} {{title}}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <div class=\"my-5\">\r\n      <div *ngFor=\"let option of options\" class=\"flex items-center mt-3\">\r\n        <ng-container *ngIf=\"option.isDisabled\">\r\n          <label class=\"ml-2 font-normal inline-block\"><b>N/A -</b> {{option.name}}</label>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!option.isDisabled\">\r\n          <img (click)=\"onOptionClick(option.id, option.isMultiLevel, option.name, option.iconName)\" \r\n               src=\"assets/images/portfolio/{{option.iconName}}-{{option.id === selectedId ? selectedLevel : 1}}.svg\" \r\n               class=\"inline-block cursor-pointer\" />\r\n          <label class=\"ml-2 font-normal inline-block\">{{option.name}}</label>\r\n        </ng-container>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn mat-button cdkFocusInitial (click)=\"onSubmit()\">Select Preliminary Rating</drdp-btn>\r\n  </div>\r\n</div>","import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { InputRatingSelectedLevel } from '@core/enums/portfolio';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IMeasureLevel } from '@views/user/input-rating/interfaces/imeasure-level';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-input-rating-modal',\r\n  templateUrl: './portfolio-input-rating-modal.component.html',\r\n  styleUrls: ['./portfolio-input-rating-modal.component.scss']\r\n})\r\nexport class PortfolioInputRatingModalComponent implements OnInit {\r\n  measureCode: string = '';\r\n  title: string = 'Preliminary Rating';\r\n  options: IMeasureLevel[] = [];\r\n  selectedLevel: number = 1;\r\n  selectedId: number = 0;\r\n  selectedName: string = '';\r\n  selectedIcon: string = '';\r\n\r\n  constructor(public dialogRef: MatDialogRef<PortfolioInputRatingModalComponent>, @Inject(MAT_DIALOG_DATA) public data: any, private cdr: ChangeDetectorRef, private toast: ToastService) {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.options = this.data.options;\r\n    this.selectedLevel = this.data.selectedLevel ? this.data.selectedLevel : InputRatingSelectedLevel.Unshaded;\r\n    this.selectedId = this.data.selectedMeasureValue ? this.data.selectedMeasureValue : 0;\r\n    this.measureCode = this.data.measureCode;\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  onOptionClick(id: number, isMultiLevel: boolean | null | undefined, name: string, icon: string) {\r\n    if (this.selectedId !== id) {\r\n      this.selectedLevel = InputRatingSelectedLevel.Unshaded;\r\n      this.selectedId = id;\r\n      this.selectedName = name;\r\n      this.selectedIcon = icon;\r\n      this.toggleSelectedLevel(isMultiLevel);\r\n    } else {\r\n      this.selectedLevel = InputRatingSelectedLevel.Unshaded;\r\n      this.selectedId = 0;\r\n      this.selectedName = '';\r\n      this.selectedIcon = '';\r\n      this.toggleSelectedLevel(isMultiLevel);\r\n    }\r\n  }\r\n\r\n  toggleSelectedLevel(isMultiLevel: boolean | null | undefined) {\r\n    if (isMultiLevel) {\r\n      this.selectedLevel = this.selectedLevel !== InputRatingSelectedLevel.FullShaded ? this.selectedLevel + 1 : InputRatingSelectedLevel.Unshaded;\r\n    } else {\r\n      this.selectedLevel = this.selectedLevel === InputRatingSelectedLevel.Unshaded ? InputRatingSelectedLevel.FullShadedOrHalfShaded : InputRatingSelectedLevel.Unshaded;\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.selectedId === 0){\r\n      this.toast.error('Please select a measure level.');\r\n      return;\r\n    }\r\n\r\n    this.dialogRef.close({\r\n      success: true,\r\n      data: {\r\n        selectedId: this.selectedId,\r\n        selectedLevel: this.selectedLevel,\r\n        selectedName: this.selectedName,\r\n        selectedIcon: this.selectedIcon\r\n      }\r\n    });\r\n  }\r\n\r\n}\r\n","export const environment = {\r\n  production: true,\r\n  apiUrl: 'https://api.drdponline.org/',\r\n  //url: 'https://legacy.drdponline.org/',\r\n  url: 'https://drdponline.org/',\r\n  authToken: 'drdp-token',\r\n  storageName: 'drdpprodstoragewst2',\r\n  storageUrl: 'https://drdpprodstoragewst2.blob.core.windows.net/',\r\n  encryptionKey: 'hWmZq4t7w!z$C&F)J@NcRfUjXn2r5u8x',\r\n  recaptcha: '6LfaYkcpAAAAAJDQ4qqzTolh5XdktqOOZsC2iY4u',\r\n  chatboxKey: '401e2f55-65a4-4b33-be6c-c3bdd87d8984',\r\n};\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { HomeComponent } from '@views/public/home/home.component';\r\n\r\nconst routes: Routes = [\r\n  { path: '', redirectTo: 'login', pathMatch: 'full' },\r\n  { path: '', component:HomeComponent, loadChildren: () => import('@views/public/public.module').then(x => x.PublicModule) }\r\n];\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forRoot(routes)],\r\n  exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-home',\r\n  templateUrl: './home.component.html',\r\n  styleUrls: ['./home.component.scss']\r\n})\r\nexport class HomeComponent implements OnInit {\r\n\r\n  constructor(){}\r\n\r\n  ngOnInit(): void {\r\n    \r\n  }\r\n}\r\n","<router-outlet></router-outlet>\r\n\r\n\r\n<drdp-spinner></drdp-spinner>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-root',\r\n  templateUrl: './app.component.html',\r\n  styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent {\r\n  title = 'DRDP_CLIENT';\r\n}\r\n","<router-outlet></router-outlet>\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { environment } from '@env/environment';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PathInterceptorService implements HttpInterceptor {\r\n\r\n  constructor() { }\r\n\r\n  public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    return next.handle(request.clone({\r\n      url: environment.apiUrl + request.url\r\n    }));\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  HttpRequest,\r\n  HttpHandler,\r\n  HttpEvent,\r\n  HttpInterceptor,\r\n  HttpResponse,\r\n} from '@angular/common/http';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable()\r\nexport class AuthInterceptorService implements HttpInterceptor {\r\n  private readonly authToken = environment.authToken;\r\n  intercept(\r\n    request: HttpRequest<any>,\r\n    next: HttpHandler\r\n  ): Observable<HttpEvent<any>> {\r\n    const token = localStorage.getItem(environment.authToken);\r\n    if (token) {\r\n      request = request.clone({\r\n        setHeaders: {\r\n          Authorization: `Bearer ${JSON.parse(token)}`,\r\n        },\r\n      });\r\n    }\r\n    return next.handle(request).pipe(\r\n      tap((event) => {\r\n        if (event instanceof HttpResponse) {\r\n          const requestAuthHeader = request.headers.get('authorization');\r\n          const responseAuthHeader = event.headers.get('Authorization');\r\n\r\n          if (\r\n            requestAuthHeader &&\r\n            responseAuthHeader &&\r\n            requestAuthHeader !== responseAuthHeader\r\n          ) {\r\n            const token = responseAuthHeader.substring(7);\r\n            localStorage.setItem(this.authToken, JSON.stringify(token));\r\n          }\r\n        }\r\n      })\r\n    );\r\n  }\r\n}\r\n","<div *ngIf=\"user\">\r\n  <div class=\"flex flex-row p-5\">\r\n    <h1 class=\"userProfile font-semibold\">User Profile: {{ userInfo?.firstName }} {{ userInfo?.lastName}}</h1>\r\n    <drdp-btn color=\"update\" routerLink=\"/update-password\">Update Password</drdp-btn>\r\n  </div>\r\n  <div class=\"place-content-center mr-5 ml-2\">\r\n    <drdp-container>\r\n      <div class=\"w-full\">\r\n        <div class=\"flex flex-row justify-between\">\r\n          <h1 class=\"information font-semibold mt-1\">Information</h1>\r\n          <drdp-btn class=\"editBtn mt-3\" routerLink=\"/edit-profile\">Edit Profile</drdp-btn>\r\n\r\n        </div>\r\n        <p class=\"info\">\r\n          <span class=\"font-bold\">Name:</span> {{ userInfo?.firstName }} {{ userInfo?.middleName }} {{\r\n          userInfo?.lastName }} {{userInfo?.suffix}}\r\n        </p>\r\n        <p class=\"info\"> <span class=\"font-bold\">Work Title:</span> {{ userInfo?.jobTitle }}</p>\r\n        <p class=\"info\"><span class=\"font-bold\">Email Address:</span> {{ userInfo?.emailName }}</p>\r\n\r\n        <div>\r\n          <h2 class=\"information font-semibold mt-3\">User Roles</h2>\r\n          <button class=\"px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpblue-400 bg-drdpblue-500 text-sm hover:bg-drdpPurple-100 transition duration-300 ease w-fit\"\r\n            *ngFor=\"let role of user.roleAssignments\">\r\n            {{ role.role.roleName }}\r\n          </button>\r\n          <button class=\"px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpblue-400 bg-drdpblue-500 text-sm hover:bg-drdpPurple-100 transition duration-300 ease w-fit\"\r\n            *ngIf=\"user.roleAssignments.length < 1\">\r\n            {{ 'No Assigned Roles Available '}}\r\n          </button>\r\n\r\n          <h2 class=\"information font-semibold mt-4\">My Sites</h2>\r\n          <button class=\"px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpPurple-300 bg-drdpPurple-200 text-sm hover:bg-drdpPurple-100 transition duration-300 ease w-fit\"\r\n            *ngFor=\"let site of user.sites\">\r\n            {{ site.site.siteName }}\r\n          </button>\r\n          <button class=\"px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpPurple-300 bg-drdpPurple-200 text-sm hover:bg-drdpPurple-100 transition duration-300 ease w-fit\"\r\n            *ngIf=\"user.sites.length < 1\">\r\n            {{ 'No Assigned Sites Available '}}\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n  </div>\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { take, tap } from 'rxjs';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\n\r\n@Component({\r\n  selector: 'drdp-user-profile',\r\n  templateUrl: './user-profile.component.html',\r\n  styleUrls: ['./user-profile.component.scss'],\r\n})\r\nexport class UserProfileComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  user?: ILoginResponse;\r\n  userInfo? : IUser; \r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private userService: UserService,\r\n    public modal: MatDialog\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.user = this.authService.getCurrentUser();\r\n    this.userService.getUserById(this.user.userId).pipe(\r\n      take(1),\r\n      tap((res: IUser) => {\r\n        this.userInfo = res;\r\n      })\r\n    ).subscribe();\r\n  }\r\n  \r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription, take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-user-session',\r\n  templateUrl: './user-session.component.html',\r\n  styleUrls: ['./user-session.component.scss']\r\n})\r\nexport class UserSessionComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  userInfo: any;\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private toast: ToastService,\r\n    public dialogRef: MatDialogRef<UserSessionComponent>\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n   }\r\n\r\n  ngOnInit(): void {\r\n    this.userInfo = JSON.parse(localStorage.getItem('drdp-user') ?? '{}');\r\n  }\r\n\r\n  removeOtherSession(): void {\r\n    const payload = {\r\n      userId: this.userInfo?.userId,\r\n      loginAuditId: this.userInfo?.loginAuditId\r\n    }\r\n\r\n    this.subscriptions.add(this.auth.deleteOtherSession(payload).subscribe(() => {\r\n      this.userInfo.sessionCount = 1;\r\n      localStorage.setItem('drdp-user', JSON.stringify(this.userInfo));\r\n    }));\r\n  }\r\n\r\n  logout(): void {\r\n    if (this.userInfo) this.auth.logout().pipe(take(1)).subscribe();\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div>\r\n    <div class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[25px] font-bold\">Multiple sessions detected</h1>\r\n    </div>\r\n    \r\n    <div mat-dialog-content>\r\n        <div class=\"content flex justify-center\">\r\n            <p class=\"pt-5\">Only one session is allowed to be active</p>\r\n        </div>\r\n        <div class=\"flex justify-center mb-5\">\r\n            <drdp-btn color=\"blue\" (click)=\"removeOtherSession()\" mat-button mat-dialog-close>\r\n                Remove Other Session\r\n            </drdp-btn>\r\n        </div>\r\n    </div>\r\n    <hr>\r\n    <div mat-dialog-actions class=\"flex justify-end\">\r\n        <drdp-btn color=\"cancel\" (click)=\"logout()\" mat-button mat-dialog-close>\r\n            Logout\r\n        </drdp-btn>\r\n    </div>\r\n</div>\r\n\r\n","export enum StudentRequestReason {\r\n  Transfer = 1,\r\n  Drop = 2,\r\n  ReEnroll = 3,\r\n  Release = 4,\r\n  ReEnrollStudent = 5,\r\n}\r\n\r\nexport enum RequestAction {\r\n  Decline = 0,\r\n  Accept = 1,\r\n  Pending = 2,\r\n}\r\n\r\nexport enum ClassReleaseReason {\r\n  ReleaseNeededToEnrollChild = 1,\r\n  Other = 2,\r\n}\r\n\r\nexport enum ClassDeclineReleaseReason {\r\n  ChildIsStillEnrolledPartTime = 1,\r\n  ChildIsStillEnrolledFullTime = 2,\r\n  Other = 3,\r\n}\r\n\r\nexport enum RequestStatusType {\r\n  Approved = 1,\r\n  Declined = 2,\r\n  Pending = 3,\r\n}\r\n\r\nexport enum ReleaseReason {\r\n  Other = 1,\r\n  MovedOutofState = 2,\r\n  MovedOutofAgency = 3,\r\n}\r\n\r\nexport enum StudentStatus {\r\n  StillEnrolled = 'Still Enrolled'\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IRatingDomainDto } from '@views/user/input-rating/interfaces/irating-domain';\r\nimport { IMeasureRatingLevel } from '@views/user/input-rating/interfaces/imeasure-rating-level';\r\nimport { getSearchUrl } from './helper.service';\r\nimport { ITeacherSurvey } from '@views/user/input-rating/interfaces/iteacher-survey';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RatingService {\r\n  private readonly studentSearchIds = 'student-search-ids';\r\n  private readonly nextStudent = 'student-next';\r\n  private readonly previousStudent = 'student-previous';\r\n  constructor(private data: DataService) {}\r\n\r\n  saveChildRatings(request: any, message: string) {\r\n    return this.data.post('rating', request, message);\r\n  }\r\n\r\n  unlockRating(id: number) {\r\n    return this.data.post(\r\n      `rating/unlock/${id}`,\r\n      null,\r\n      'Ratings successfully unlocked for this child!'\r\n    );\r\n  }\r\n\r\n  setStudentNextIndex(index: any) {\r\n    localStorage.setItem(this.nextStudent, index);\r\n  }\r\n\r\n  setStudentPreviousIndex(index: any) {\r\n    localStorage.setItem(this.previousStudent, index);\r\n  }\r\n\r\n  setStudentResultIds(data: number[]) {\r\n    localStorage.setItem(this.studentSearchIds, JSON.stringify(data));\r\n  }\r\n\r\n  getStudentResultIds() {\r\n    return JSON.parse(localStorage.getItem(this.studentSearchIds) ?? '[]');\r\n  }\r\n\r\n  getNextStudentIndex() {\r\n    return localStorage.getItem(this.nextStudent);\r\n  }\r\n\r\n  getPreviousStudentIndex() {\r\n    return localStorage.getItem(this.previousStudent);\r\n  }\r\n\r\n  getStudentMeasuresAndRatings(\r\n    templateId: number,\r\n    studentClassEnrollmentId: number,\r\n    carId?: number\r\n  ): Observable<IRatingDomainDto[]> {\r\n    let url = `rating/enrollment/${studentClassEnrollmentId}/template/${templateId}/car/`;\r\n    if (carId) url += `${carId}`;\r\n    return this.data.get(url);\r\n  }\r\n\r\n  getStudentMeasuresAndRatingsScantron(\r\n    templateId: number,\r\n    parentTemplateId: number,\r\n    studentClassEnrollmentId: number,\r\n    carId?: number\r\n  ): Observable<IRatingDomainDto[]> {\r\n    let url = `rating/enrollment/${studentClassEnrollmentId}/scantron/${templateId}/parent/${parentTemplateId}/car/`;\r\n    if (carId) url += `${carId}`;\r\n    return this.data.get(url);\r\n  }\r\n\r\n  getMeasureLevels(\r\n    templateId: number,\r\n    measureId: number\r\n  ): Observable<IMeasureRatingLevel> {\r\n    return this.data.get(\r\n      `rating/template/${templateId}/measure/${measureId}/levels`\r\n    );\r\n  }\r\n\r\n  lockClass(payload: any) {\r\n    return this.data.post(\r\n      `rating/lock/class`,\r\n      payload,\r\n      'Ratings successfully locked for this class!'\r\n    );\r\n  }\r\n\r\n  unlockClass(payload: any) {\r\n    return this.data.post(\r\n      `rating/unlock/class`,\r\n      payload,\r\n      'Ratings successfully unlocked for this class!'\r\n    );\r\n  }\r\n\r\n  getClassRatings(params: any, message?: string): Observable<any> {\r\n    const url = getSearchUrl('rating/search?', params);\r\n    return this.data.get(url, message);\r\n  }\r\n\r\n  generatePdf(id: number) {\r\n    return this.data.postWithOptions(`rating/download/${id}`, null, {\r\n      responseType: 'blob',\r\n    });\r\n  }\r\n\r\n  getRatingDownloadUrl(id: number): Observable<any> {\r\n    return this.data.get(`rating/download-url/${id}`);\r\n  }\r\n\r\n  getLockCount(): Observable<any> {\r\n    return this.data.get(`rating/lock-count`);\r\n  }\r\n\r\n  getClassroomRatings(payload: any, message?: string): Observable<any> {\r\n    return this.data.post(\r\n      `rating/classroom-ratings`,\r\n      payload\r\n    );\r\n  }\r\n\r\n  saveTeacherSurvey(payload: ITeacherSurvey, message?: string): Observable<boolean> {\r\n    return this.data.post('rating/teacher-survey', payload, message);\r\n  }\r\n  \r\n  getTeacherSurvey(cardId: number, measureId: number): Observable<ITeacherSurvey> {\r\n    return this.data.get(`rating/teacher-survey/car/${cardId}/measure/${measureId}`);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestBatch,\r\n  IStudentRequestSearch\r\n} from '@core/interfaces/istudent-request';\r\nimport { Observable, catchError, tap, throwError } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StudentRequestService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  addStudentRequest(payload: any, message?: string): Observable<any> {\r\n    return this.dataService.post('studentrequest', payload, message);\r\n  }\r\n\r\n  addBatchStudentRequests(payload: any, message?: string): Observable<any> {\r\n    return this.dataService.post('studentrequest/batch', payload, message);\r\n  }\r\n\r\n  checkDuplicateBatch(payload: any, message?: string): Observable<any> {\r\n    return this.dataService.post(\r\n      'studentrequest/check-duplicate-batch',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  getByReason(requestReasonId: number): Observable<any> {\r\n    return this.dataService.get(`studentrequest/${requestReasonId}`);\r\n  }\r\n\r\n  getByReasonAndAgency(params: IStudentRequestSearch): Observable<any> {\r\n    const url = getSearchUrl('studentrequest/admin-pending?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getApprovedOrPendingByReasonAndClass(params: any): Observable<any> {\r\n    const url = getSearchUrl(\r\n      'studentrequest/approved-or-pending-by-reason-and-class?',\r\n      params\r\n    );\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  pendingTransfersAndDropsExist(\r\n    requests: IStudentRequest[],\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.post(\r\n      'studentrequest/pending-transfers-or-drops',\r\n      requests,\r\n      message\r\n    );\r\n  }\r\n\r\n  updateStudentRequest(payload: any, message?: string): Observable<any> {\r\n    return this.dataService.put('studentrequest', payload, message);\r\n  }\r\n\r\n  processBulkUpdates(\r\n    payload: IStudentRequest[],\r\n    message?: string\r\n  ): Observable<any> {\r\n    return this.dataService.put(\r\n      'studentrequest/process-bulk-updates',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  processBulkReleaseUpdates(payload: any[], message?: string): Observable<any> {\r\n    return this.dataService.put(\r\n      'studentrequest/process-bulk-release-updates',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  processReEnrollmentRequests(\r\n    payload: IStudentRequest[],\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.put(\r\n      'studentrequest/process-reenrollment',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  processTransfers(\r\n    payload: IStudentRequest[],\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.put(\r\n      'studentrequest/process-transfers',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  processBatchRequest(\r\n    payload: IStudentRequestBatch,\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.post('studentrequest/batch', payload, message);\r\n  }\r\n\r\n  processReEnrollmentBatch(\r\n    payload: IStudentRequest[],\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.dataService.put(\r\n      'studentrequest/process-reenrollment-batch',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  getHasPendingRequest(requestReasonId: number): Observable<boolean> {\r\n    return this.dataService.get(\r\n      `studentrequest/has-pending-request/${requestReasonId}`\r\n    );\r\n  }\r\n\r\n  getStudentRequests(params: any): Observable<any> {\r\n    const url = getSearchUrl('studentrequest/student-requests-page?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n\r\n  getStudentEvidenceRequests(params: IStudentRequestSearch): Observable<any> {\r\n    const url = getSearchUrl('studentrequest/evidence-requests?', params);\r\n    return this.dataService.get(url);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getSearchUrl } from './helper.service';\r\nimport { DataService } from './data.service';\r\nimport { IPortfolioConversationRequestDto, IPortfolioMessage, IPortfolioMessageRecipient, IPortfolioMessageResponse, IPortfolioMessageSearchRequest } from '@core/interfaces/iportfolio-message';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class PortfolioMessageService {\r\n  constructor(private dataService: DataService) { }\r\n\r\n  getPortfolioMessagesByUserId(payload: IPortfolioMessageSearchRequest, message?: any) : Observable<IPortfolioMessageResponse[]>{\r\n     const url = getSearchUrl('portfolioMessage/userId?', payload);\r\n    return this.dataService.get(url, message);\r\n  }\r\n\r\n  searchPortfolioMessages(payload: IPortfolioMessageSearchRequest, message?: any): Observable<IPortfolioMessageResponse[]> {\r\n    const url = getSearchUrl('portfolioMessage/search?', payload);\r\n    return this.dataService.get(url, message);\r\n  }\r\n\r\n  addNewMessage(payload: IPortfolioMessage, message?: string) : Observable<boolean> {\r\n    return this.dataService.post('portfolioMessage/new-message', payload, message);\r\n  }\r\n\r\n  getPortfolioConversation(payload: IPortfolioConversationRequestDto, message?: string) : Observable<IPortfolioMessage[]> {\r\n    return this.dataService.post('portfolioMessage/conversation', payload, message);\r\n  }\r\n\r\n  archivePortfolioMessage(payload: IPortfolioMessageRecipient, message?: string) : Observable<boolean> {\r\n    return this.dataService.put(`PortfolioMessageRecipient/archive`, payload, message);\r\n  }\r\n\r\n  updateReadPortfolioMessages(payload: IPortfolioConversationRequestDto, message?: string) : Observable<boolean> {\r\n    return this.dataService.put(`portfolioMessageRecipient/update-read`, payload, message);\r\n  }\r\n\r\n}\r\n","<div *ngIf=\"isDashboardLoaded\" class=\"bg-drdpblue-200 px-5\">\r\n  <div class=\"min-w-full flex place-content-between place-items-center\">\r\n    <drdp-title class=\"mt-4\" title=\"Welcome\"> {{ user.userName }}</drdp-title>\r\n    <img *ngIf=\"canViewPortfolioMessages\" class=\"cursor-pointer\" [src]=\"icon\" alt=\"Message Board\"\r\n      routerLink=\"/portfolio-messages\">\r\n  </div>\r\n\r\n  <div>\r\n    <mat-checkbox [checked]=\"isSignedUp\" (change)=\"onCheckboxChange()\">\r\n      <span>Please add me to the weekly distribution of DRDP Online updates that will be sent to me via the email used for my DRDP Online account.</span>\r\n    </mat-checkbox>\r\n  </div>\r\n\r\n  <div>\r\n    <div *ngIf=\"canViewNewsItem\">\r\n      <drdp-news-item class=\"flex place-content-between\"></drdp-news-item>\r\n    </div>\r\n\r\n\r\n\r\n    <h2 class=\"text-[20px] font-bold mt-5 mb-4\">My Dashboard</h2>\r\n    <div class=\"grid lg:grid-cols-4 md:grid-cols-3 gap-4\">\r\n\r\n      <drdp-container *ngIf=\"canViewLockedChildren\" color=\"whiteDash\" additionClasses=\"justify-center\">\r\n        <a class=\"flex-col text-center px-4 pb-4 h-36\" [routerLink]=\"['/total-locked-children']\">\r\n          <p class=\"text-drdpblue-300 text-[60px]\">\r\n            {{ ratingCount }}\r\n          </p>\r\n          <p class=\"text-[15px]\">Total Locked Children</p>\r\n        </a>\r\n      </drdp-container>\r\n\r\n\r\n\r\n      <ng-container *ngFor=\"let info of myDashboard\">\r\n        <drdp-container *drdpCheckPermission=\"info.access\" color=\"whiteDash\" additionClasses=\"justify-center\">\r\n          <a class=\"grid grid-cols-1 text-center p-4 w-full h-36\" [routerLink]=\"[info.link]\">\r\n            <div *ngIf=\"info.hasPendingRequest\" class=\"flex justify-end\">\r\n              <div class=\"rounded-full py-1 bg-drdpblue-300 text-white text-xs w-24\">Items Pending</div>\r\n            </div>\r\n            <i *ngIf=\"info.icon\" class=\"text-drdpblue-300 text-[60px] {{ info.icon }} flex justify-center\"></i>\r\n            <p class=\"text-[15px] flex justify-center\">{{ info.label }}</p>\r\n          </a>\r\n        </drdp-container>\r\n      </ng-container>\r\n    </div>\r\n\r\n    <div *ngIf=\"canViewLanguage || canEditLanguage\">\r\n      <h2 class=\"text-[20px] font-bold mt-5 mb-2\">Language Settings</h2>\r\n      <div class=\"flex flex-row\">\r\n        <div class=\"basis-full md:basis-1/2 bg-white rounded-[30px] shadow-md px-5 pt-4 pb-3\">\r\n          <div *ngFor=\"let info of languageSettingsInfo\" class=\"mb-1\">\r\n            <mat-slide-toggle [disabled]=\"!canEditLanguage\" color=\"primary\" (change)=\"toggleSwitchAction(info.label)\">\r\n            </mat-slide-toggle>\r\n            <span> {{info.label}}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Subscription, take } from 'rxjs';\r\nimport { UserSessionComponent } from '../user-session/user-session.component';\r\nimport { ReEnrollmentRequestsComponent } from '../pending-requests/re-enrollment-requests/re-enrollment-requests.component';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { PortfolioMessageService } from '@core/services/portfolio-message.service';\r\nimport { IPortfolioMessageResponse, IPortfolioMessageSearchRequest } from '@core/interfaces/iportfolio-message';\r\nimport { MessageStatus } from '@core/enums/message-status';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { StateService } from '@core/services/state.service';\r\n@Component({\r\n  selector: 'drdp-dashboard',\r\n  templateUrl: './dashboard.component.html',\r\n  styleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  user = this.authService.getCurrentUser();\r\n  isAdmin = this.authService.isAdmin();\r\n  isSuperAdmin = this.authService.isSuperAdmin();\r\n  isTeacher = this.authService.isTeacher();\r\n  ratingCount = '0/0';\r\n  hasPendingTransfers: boolean = false;\r\n  hasPendingUnEnrollments: boolean = false;\r\n  hasPendingReEnrollments: boolean = false;\r\n  hasPendingChildReEnrollments: boolean = false;\r\n  hasPendingReleaseRequest: boolean = false;\r\n  hasNewMessages: boolean = false;\r\n  newMessagesIcon = 'assets/images/misc/message-notification.svg';\r\n  icon = 'assets/images/misc/message.svg';\r\n  isSignedUp: boolean = false;\r\n  isDashboardLoaded: boolean = false;\r\n  canEditLanguage: boolean = this.permissionService.checkPermission(\r\n    Permission.EditLanguageSettings\r\n  );\r\n  canViewLanguage: boolean = this.permissionService.checkPermission(\r\n    Permission.ViewLanguageSettings\r\n  );\r\n\r\n  canViewNewsItem: boolean = this.permissionService.checkPermission(\r\n    Permission.ViewNewsItem\r\n  );\r\n\r\n  canViewLockedChildren: boolean = this.permissionService.checkPermission(\r\n    Permission.ViewTotalLockedChildren\r\n  );\r\n\r\n  isPendingIndicatorHidden: boolean = this.permissionService.checkPermission(\r\n    Permission.HidePendingIndicator\r\n  );\r\n\r\n  canViewPortfolioMessages: boolean = this.permissionService.checkPermission(\r\n    Permission.AccessToPortfolioMessages\r\n  ) || this.permissionService.checkPermission(\r\n    Permission.AccessToAllPortfolioMessageBoards\r\n  );\r\n\r\n  constructor(\r\n    public modal: MatDialog,\r\n    private authService: AuthService,\r\n    private router: Router,\r\n    private permissionService: PermissionService,\r\n    private ratingService: RatingService,\r\n    private studentRequestService: StudentRequestService,\r\n    private portfolioMessageService: PortfolioMessageService,\r\n    private userService: UserService,\r\n    private stateService: StateService\r\n  ) {}\r\n\r\n  myDashboard = [\r\n    {\r\n      label: 'Classrooms',\r\n      icon: 'uil uil-diary',\r\n      link: '/classrooms',\r\n      access: Permission.ViewDashboardClassrooms,\r\n    },\r\n    {\r\n      label: 'Children',\r\n      icon: 'uil uil-diary',\r\n      link: '/children',\r\n      access: Permission.AccessToChildrenPAge,\r\n    },\r\n    {\r\n      label: 'My Ratings',\r\n      icon: 'uil uil-comment-add',\r\n      link: '/ratings',\r\n      access: Permission.ViewMyRatings,\r\n    },\r\n    {\r\n      label: 'Portfolio',\r\n      icon: 'uil uil-telescope',\r\n      link: '/portfolio',\r\n      access: Permission.ViewObservations,\r\n    },\r\n    {\r\n      label: 'Pending Transfers',\r\n      icon: 'uil uil-sign-in-alt',\r\n      link: '/pending-transfers',\r\n      access: Permission.ViewPendingTransfers,\r\n      hasPendingRequest: this.hasPendingTransfers,\r\n    },\r\n    {\r\n      label: 'Pending Withdraws',\r\n      icon: 'uil uil-user-minus',\r\n      link: '/pending-withdraws',\r\n      access: Permission.ViewPendingExits,\r\n      hasPendingRequest: this.hasPendingUnEnrollments,\r\n    },\r\n    {\r\n      label: 'Pending Classroom Re-Enrollments',\r\n      icon: 'uil uil-file-redo-alt',\r\n      link: '/pending-re-enrollment',\r\n      access: Permission.ViewPendingReEnrollments,\r\n      hasPendingRequest: this.hasPendingReEnrollments,\r\n    },\r\n    {\r\n      label: 'Pending Child Re-Enrollments',\r\n      icon: 'uil uil-redo',\r\n      link: '/pending-child-re-enrollment',\r\n      access: Permission.ViewPendingReEnrollments,\r\n      hasPendingRequest: this.hasPendingChildReEnrollments,\r\n    },\r\n    {\r\n      label: 'Pending Release Requests',\r\n      icon: 'uil uil-sign-out-alt',\r\n      link: '/pending-releases',\r\n      access: Permission.ViewPendingReleaseRequests,\r\n      hasPendingRequest: this.hasPendingReleaseRequest,\r\n    },\r\n    {\r\n      label: 'Child Requests',\r\n      icon: 'uil uil-sign-alt',\r\n      link: '/child-requests',\r\n      access: Permission.AccessChildRequestsPage,\r\n    },\r\n    {\r\n      label: 'Pending Portfolio Evidence Requests',\r\n      icon: 'uil uil-image-v',\r\n      link: '/portfolio-evidence-requests',\r\n      access: Permission.PendingPortfolioRequests,\r\n    },\r\n  ];\r\n\r\n  languageSettingsInfo = [\r\n    {\r\n      label: 'I want to view site in Spanish',\r\n      access: true,\r\n    },\r\n    {\r\n      label: 'I want to complete Rating Sheet in Spanish',\r\n      access: false,\r\n    },\r\n  ];\r\n\r\n  ngOnInit(): void { \r\n    this.stateService.stateDashboardEnabled(this.user.stateId)\r\n      .pipe(take(1)).subscribe((res: boolean) => {\r\n        if (res && this.user.permissions.includes(Permission.AccessStateDashboard)) \r\n          this.router.navigate(['/state-dashboard']);\r\n        else this.isDashboardLoaded = true;\r\n    });\r\n      \r\n    this.userService.getSignUpStatus().pipe(take(1)).subscribe((result: boolean) => {\r\n        this.isSignedUp = result;\r\n      });\r\n\r\n    if (this.user.sessionCount > 1) {\r\n      this.openSessionModel();\r\n    }\r\n    this.getRatingCount();\r\n\r\n    if (!this.isPendingIndicatorHidden) this.getPendingRequest();\r\n\r\n    if (this.canViewPortfolioMessages) this.checkNewMessages();\r\n  }\r\n  \r\n\r\n  checkNewMessages(): void {\r\n    const payload: IPortfolioMessageSearchRequest = {\r\n      itemsPerPage: 100,\r\n      pageIndex: 1\r\n    }\r\n    this.portfolioMessageService\r\n      .getPortfolioMessagesByUserId(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.hasNewMessages = res.hasNewMessages;\r\n        this.icon = this.hasNewMessages ? this.newMessagesIcon : this.icon;\r\n      })\r\n  }\r\n\r\n  toggleSwitchAction(info: any) {}\r\n\r\n  openSessionModel(): void {\r\n    const modalRef = this.modal.open(UserSessionComponent);\r\n    this.subscriptions.add(modalRef.afterClosed().subscribe());\r\n  }\r\n\r\n  buttonClick(value: string) {}\r\n\r\n  navigate(component: any) {\r\n    this.router.navigate([component]);\r\n  }\r\n\r\n  getRatingCount() {\r\n    if (this.canViewLockedChildren) {\r\n      this.ratingService\r\n        .getLockCount()\r\n        .pipe(take(1))\r\n        .subscribe((result) => {\r\n          this.ratingCount = result.count;\r\n        });\r\n    }\r\n  }\r\n\r\n  getPendingRequest() {\r\n    const pendingRequests = [\r\n      {\r\n        reason: StudentRequestReason.ReEnrollStudent,\r\n        label: 'Pending Child Re-Enrollments',\r\n      },\r\n      {\r\n        reason: StudentRequestReason.ReEnroll,\r\n        label: 'Pending Classroom Re-Enrollments',\r\n      },\r\n      {\r\n        reason: StudentRequestReason.Release,\r\n        label: 'Pending Release Requests',\r\n      },\r\n      { reason: StudentRequestReason.Transfer, label: 'Pending Transfers' },\r\n      { reason: StudentRequestReason.Drop, label: 'Pending Withdraws' },\r\n    ];\r\n\r\n    pendingRequests.forEach((request) => {\r\n      this.studentRequestService\r\n        .getHasPendingRequest(request.reason)\r\n        .pipe(take(1))\r\n        .subscribe((result) => {\r\n          if (result) {\r\n            const dashboardItem = this.myDashboard.find(\r\n              (item) => item.label === request.label\r\n            );\r\n            if (dashboardItem) {\r\n              dashboardItem.hasPendingRequest = result;\r\n            }\r\n          }\r\n        });\r\n    });\r\n  }\r\n\r\n  onCheckboxChange(): void {\r\n    this.isSignedUp = !this.isSignedUp;\r\n    this.userService.updateSignUpStatus(this.isSignedUp).pipe(take(1)).subscribe();\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-drdp-layout',\r\n  templateUrl: './drdp-layout.component.html',\r\n  styleUrls: ['./drdp-layout.component.scss']\r\n})\r\nexport class DrdpLayoutComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","\r\n<div class=\"mx-auto flex\" style=\"max-width:1420px!important\">\r\n    <div class=\"flex-col lg:flex-col lg:w-max lg:block hidden bg-drdpblue-200 m-[1%]\" >\r\n        <drdp-side-menu></drdp-side-menu>\r\n    </div>\r\n    <div class=\"flex-1 overflow-x-auto lg:flex-col lg:w-full relative\">\r\n        <div class=\"flex-1 h-20 \">\r\n            <drdp-header></drdp-header>\r\n        </div>\r\n        <div class=\"flex-1 mb-5\">\r\n            <router-outlet></router-outlet>  \r\n           \r\n        </div>\r\n        <div class=\"pt-5 lg:pt-28 -z-10\">\r\n            <drdp-footer [loggedIn]=\"true\" class=\"pt-5 lg:absolute lg:inset-x-0 xs:fixed bottom-0\"></drdp-footer>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n<drdp-spinner></drdp-spinner>\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Re-Enroll</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div *ngIf=\"displayResult\" mat-dialog-content>\r\n    <div *ngIf=\"ratingOptions.length != 0; else noRatings\" class=\"content py-3\">\r\n      <form [formGroup]=\"reEnrollmentForm\">\r\n        <div class=\"flex flex-row justify-between\">\r\n          <div class=\"mr-12\">\r\n            <label class=\"font-normal\">Classroom</label>\r\n            <p>{{ data.name }}</p>\r\n          </div>\r\n          <div>\r\n            <label class=\"font-normal\">Rating Period</label>\r\n            <mat-select placeholder=\"Select Rating Period\" formControlName=\"ratingPeriodId\">\r\n              <mat-option *ngFor=\"let rating of ratingOptions\" [value]=\"rating.id\">\r\n                {{ rating.ratingPeriodName }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </div>\r\n    <ng-template #noRatings>\r\n      <div class=\"flex flex-row mt-2\">\r\n        <p>No rating periods left to re-enroll for this classroom.</p>\r\n      </div>\r\n    </ng-template>\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex flex-row justify-end\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button mat-dialog-close>\r\n      Cancel\r\n    </drdp-btn>\r\n    <drdp-btn color=\"blue\" [disabled]=\"ratingOptions.length == 0  || isProcessing\" mat-button (click)=\"submit()\">\r\n      {{ submitBtnText }}\r\n    </drdp-btn>\r\n  </div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { take } from 'rxjs';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { IClass } from '@core/interfaces/iclasses';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-re-enroll-classroom',\r\n  templateUrl: './re-enroll-classroom.component.html',\r\n  styleUrls: ['./re-enroll-classroom.component.scss'],\r\n})\r\nexport class ReEnrollClassroomComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  ratingOptions: IRatingPeriod[] = [];\r\n  submitBtnText = '';\r\n  isAdmin: boolean = false;\r\n  reEnrollmentForm: FormGroup | any;\r\n  existingClasses: IClass[] = [];\r\n  displayResult = false;\r\n  isProcessing = false;\r\n\r\n  get ratingPeriodId() {\r\n    return this.reEnrollmentForm.get('ratingPeriodId');\r\n  }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private permissionService: PermissionService,\r\n    private studentRequestService: StudentRequestService,\r\n    private classService: ClassService,\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<ReEnrollClassroomComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public data: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n\r\n    this.isAdmin = this.permissionService.checkPermission(\r\n      Permission.AdminEnrollmentByPass\r\n    );\r\n\r\n    this.submitBtnText = this.isAdmin\r\n      ? 'Save and Re-Enroll'\r\n      : 'Save and Send For Approval';\r\n\r\n    this.classService\r\n      .getClassesByClassroom(this.data.classroomId)\r\n      .pipe(take(1))\r\n      .subscribe((result) => {\r\n        const ratingPeriods = result.flatMap((obj) => obj.ratingPeriod);\r\n\r\n        const currentRatingPeriod = ratingPeriods.find(\r\n          (r: any) => r.id == this.data.ratingPeriodId\r\n        );\r\n\r\n        if (currentRatingPeriod) {\r\n          const currentDate = new Date();\r\n          const dateWithoutTime = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\r\n          this.ratingOptions = ratingPeriods.filter(\r\n            (r: IRatingPeriod) =>\r\n              new Date(r.startDate) > new Date(currentRatingPeriod.startDate) &&\r\n              new Date(r.minDate) <= dateWithoutTime &&\r\n              r.id != this.data.ratingPeriodId\r\n          );\r\n          this.existingClasses = result;\r\n          this.displayResult = true;\r\n        }\r\n      });\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.reEnrollmentForm = this.fb.group({\r\n      ratingPeriodId: [null, Validators.required],\r\n    });\r\n  }\r\n\r\n  submit(): void {\r\n    const reEnrollClass = this.existingClasses.filter(\r\n      (ec) => ec.ratingPeriodId == this.ratingPeriodId.value\r\n    )[0];\r\n    const payload: any = {\r\n      fromClassId: this.data.id,\r\n      toClassId: reEnrollClass.id,\r\n      requestReasonId: StudentRequestReason.ReEnroll,\r\n    };\r\n    this.isProcessing = true;\r\n    const successMessage = this.isAdmin\r\n      ? 'Classroom successfully re-enrolled'\r\n      : 'Re-enrollment request has been sent';\r\n    this.studentRequestService\r\n      .addStudentRequest(payload, successMessage)\r\n      .pipe(take(1))\r\n      .subscribe((r) => {\r\n        this.isProcessing = false;\r\n        this.dialogRef.close({ success: true });\r\n      });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IClassSearchRequest } from '@core/interfaces/iclasses';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { getSearchUrl } from './helper.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MyClassesService {\r\n\r\n  constructor(private data: DataService) { }\r\n\r\n  getUserClasses(params: any, message?: string):Observable<any>{\r\n    const url = getSearchUrl('class/get-class?', params)\r\n    return this.data.get(url, message);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IStudentClassEnrollmentDetails } from '@core/interfaces/istudent';\r\nimport { IRatingViewTemplateOption } from '@views/user/configuration/rating-view-setup/interfaces/irating-view-template-option';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IStudentActiveEnrollmentInfo, IStudentEnrollmentInfo } from '@views/user/input-rating/interfaces/istudent-enrollment-info';\r\nimport { getSearchUrl } from './helper.service';\r\nimport { IEnrollmentCheckRequest } from '@core/interfaces/ienrollment-check-request';\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StudentClassEnrollmentService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getStudentClassEnrollment(classEnrollmentId: number): Observable<IStudentClassEnrollmentDetails> {\r\n    return this.data.get(`studentclassenrollment/${classEnrollmentId}`);\r\n  }\r\n\r\n  deleteStudentClassEnrollment(id: number, message?: string): Observable<boolean> {\r\n    return this.data.delete(`studentclassenrollment/${id}`, message);\r\n  }\r\n\r\n  addStudentEnrollment(\r\n    payload: IStudentClassEnrollmentDetails,\r\n    message?: string\r\n  ): Observable<any> {\r\n    return this.data.post('studentclassenrollment', payload, message);\r\n  }\r\n\r\n  updateClassEnrollmentsTable(\r\n    payload: IStudentClassEnrollmentDetails,\r\n    message?: string\r\n  ): Observable<any> {\r\n    return this.data.put('studentclassenrollment', payload, message);\r\n  }\r\n\r\n  enrollDroppedChild(payload: any, message?: string): Observable<any> {\r\n    return this.data.post(\r\n      'studentclassenrollment/dropped-child',\r\n      payload,\r\n      message\r\n    );\r\n  }\r\n\r\n  checkStudentEnrollment(\r\n    classId: number,\r\n    message?: string\r\n  ): Observable<boolean> {\r\n    return this.data.get(\r\n      `studentclassenrollment/check-student-enrollment/${classId}`,\r\n      message\r\n    );\r\n  }\r\n\r\n  getRatingPeriodTemplateOptions(\r\n    ratingPeriodId?: number | null,\r\n    siteId?: number | null,\r\n    classId?: number | null\r\n  ): Observable<IRatingViewTemplateOption[]> {\r\n    return this.data.get(\r\n      `studentclassenrollment/rating-view-template?ratingPeriodId=${ratingPeriodId}&siteId=${\r\n        siteId || 0\r\n      }&classId=${classId || 0}`\r\n    );\r\n  }\r\n\r\n  getStudentClassInfo(id: number): Observable<IStudentEnrollmentInfo> {\r\n    return this.data.get(`studentclassenrollment/${id}/info`);\r\n  }\r\n\r\n  updateClassEnrollment(payload: any): Observable<boolean> {\r\n    return this.data.put(`studentclassenrollment/class-enrollment`, payload);\r\n  }\r\n\r\n  getAgencyCurrentStudentEnrollments(params: any): Observable<any> {\r\n    const url = getSearchUrl('studentclassenrollment/agency-current?', params);\r\n    return this.data.get(url);\r\n  }\r\n\r\n  getStudentActiveActiveEnrollments(studentId: number): Observable<IStudentActiveEnrollmentInfo[]> {\r\n    return this.data.get(`studentclassenrollment/student/${studentId}/active`);\r\n  }\r\n\r\n  areEnrollmentsActive(request: IEnrollmentCheckRequest): Observable<boolean> {\r\n    return this.data.post('studentclassenrollment/is-active', request);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"mb-5 mr-3\">\r\n    <drdp-title title=\"Classrooms\"></drdp-title>\r\n  </div>\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <div class=\"w-full\">\r\n      <drdp-container\r\n        *ngIf=\"accessToClassroomSearch\"\r\n        color=\"lightBlue\"\r\n        additionClasses=\"min-h-[7rem] w-full\"\r\n      >\r\n        <form\r\n          class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-6 p-5 gap-2 md:gap-3 flex-row content-center my-auto lg:items-end\"\r\n        >\r\n          <div class=\"col-span-1\">\r\n            <drdp-select-state\r\n              #stateSelect\r\n              [initialStateId]=\"stateId.value\"\r\n              (state)=\"handleState($event)\"\r\n              [clear]=\"clearDropdowns\"\r\n              [required]=\"true\"\r\n            >\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-select-agency\r\n              #agencySelect\r\n              (agency)=\"handleAgency($event)\"\r\n              [stateId]=\"stateId.value\"\r\n              [initialAgencyId]=\"agencyId.value\"\r\n              [clear]=\"clearDropdowns\"\r\n              [required]=\"!accessToAllAgencies\"\r\n            >\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-select-site\r\n              [initialSiteId]=\"siteId.value\"\r\n              (site)=\"handleSites($event)\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"false\"\r\n              [multiSelectInitVals]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n            >\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-select-rating-period\r\n              [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n              (ratingPeriod)=\"handleRatingPeriod($event)\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [clear]=\"clearDropdowns\"\r\n            >\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-select-class\r\n              [initialClassroomId]=\"classroomId.value\"\r\n              (classroom)=\"handleClassroom($event)\"\r\n              [siteIds]=\"siteId.value\"\r\n              [ratingPeriodId]=\"ratingPeriodId.value\"\r\n              [multiSelect]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n            >\r\n            </drdp-select-class>\r\n          </div>\r\n          <div\r\n            class=\"flex flex-row col-span-1 justify-evenly content-center mt-5 lg:justify-start md:col-span-2\"\r\n          >\r\n            <div class=\"mb-0 lg:mr-2\">\r\n              <drdp-btn\r\n                [disabled]=\"classroomsForm.invalid\"\r\n                (click)=\"search(true)\"\r\n              >\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div>\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\">Clear</drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        (iconActionItem)=\"onIconClick($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"loadClasses(false)\"\r\n  >\r\n  </mat-paginator>\r\n</div>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  OnDestroy,\r\n  OnInit,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MyClassesService } from '@core/services/my-classes.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport {\r\n  IUserClassesDto,\r\n  IUserClassSearchRequestDto,\r\n} from '@core/interfaces/iclasses';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription, of, switchMap, take } from 'rxjs';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ReEnrollClassroomComponent } from './re-enroll-classroom/re-enroll-classroom.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { formatStringToStringArr } from '@core/services/helper.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\n\r\n@Component({\r\n  selector: 'drdp-my-classes',\r\n  templateUrl: './my-classes.component.html',\r\n  styleUrls: ['./my-classes.component.scss'],\r\n})\r\nexport class MyClassesComponent implements OnInit, OnDestroy, AfterViewInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('stateSelect') stateSelect!: SelectStateComponent;\r\n  @ViewChild('agencySelect') agencySelect!: SelectAgencyComponent;\r\n\r\n  private subscriptions = new Subscription();\r\n  classroomsForm: FormGroup | any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  totalData = 0;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  tableData?: any;\r\n  payload: IUserClassSearchRequestDto = {};\r\n  childMovementErrorMessage: string = 'No Students To Re-Enroll.';\r\n  accessToAllSites = this.PermissionService.checkPermission(\r\n    Permission.AccessAllSites\r\n  );\r\n  accessToAllAgencies = this.PermissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  accessToClassroomSearch = this.PermissionService.checkPermission(\r\n    Permission.ClassroomSearch\r\n  );\r\n  accessToClassReenroll = this.PermissionService.checkPermission(\r\n    Permission.ClassReenroll\r\n  );\r\n\r\n  tableColumns = [\r\n    {\r\n      columnDef: 'viewStudents',\r\n      header: 'View Students',\r\n      icon: 'file-alt',\r\n      type: 'icon',\r\n      colorClass: 'text-drdpblue-300',\r\n      cursorClass: 'cursor-pointer',\r\n    },\r\n    { columnDef: 'name', header: 'Classroom', type: 'text', isSortable: true },\r\n    { columnDef: 'siteName', header: 'Site', type: 'text', isSortable: true },\r\n    {\r\n      columnDef: 'agencyName',\r\n      header: 'Agency',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'teachersNames',\r\n      header: 'Teacher',\r\n      type: 'bulletList',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'teacherOfRecordName',\r\n      header: 'Teacher of Record',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Rating Period',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'studentCount',\r\n      header: 'Children Count',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'lockedStudents',\r\n      header: 'Locked',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    this.accessToClassReenroll ?\r\n    {\r\n      columnDef: 'reEnroll',\r\n      header: 'Re-Enroll',\r\n      icon: 'file-medical text-drdpblue-300',\r\n      type: 'icon',\r\n      colorClass: 'text-drdpblue-300',\r\n      cursorClass: 'cursor-pointer',\r\n      tooltip:\r\n        'You must have the new enrollment classroom and rating period created prior to submitting the re-enroll.',\r\n    } : null\r\n  ].filter(Boolean);\r\n  user = this.authService.getCurrentUser();\r\n  receivedPayload?: any;\r\n  clearDropdowns = false;\r\n\r\n  get stateId() {\r\n    return this.classroomsForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.classroomsForm.get('agencyId');\r\n  }\r\n  get siteId() {\r\n    return this.classroomsForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.classroomsForm.get('ratingPeriodId');\r\n  }\r\n  get classroomId() {\r\n    return this.classroomsForm.get('classroomId');\r\n  }\r\n  get selectType() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private myClasses: MyClassesService,\r\n    private route: Router,\r\n    private authService: AuthService,\r\n    public PermissionService: PermissionService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog,\r\n    private enrollmentService: StudentClassEnrollmentService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n    this.loadClasses();\r\n  }\r\n\r\n  loadClasses(resetPage?: boolean) {\r\n    if (!this.accessToClassroomSearch) {\r\n      this.getMyClasses();\r\n    } else {\r\n      this.search(resetPage);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  getMyClasses(): void {\r\n    this.payload.stateId = this.user.stateId;\r\n    this.payload.agencyId = this.user.agencyId;\r\n    this.payload.userId = this.user.userId;\r\n\r\n    if (this.paginator) {\r\n      this.payload.pageIndex = this.paginator.pageIndex + 1;\r\n      this.payload.itemsPerPage = this.paginator.pageSize;\r\n    } else {\r\n      this.payload.pageIndex = this.pageIndex;\r\n      this.payload.itemsPerPage = this.pageSize;\r\n    }\r\n    this.myClasses\r\n      .getUserClasses(this.payload)\r\n      .subscribe((res: IUserClassesDto) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        }\r\n      });\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.classroomsForm = this.fb.group({\r\n      stateId: [this.user.stateId, Validators.required],\r\n      agencyId: [this.user.agencyId],\r\n      siteId: [null],\r\n      ratingPeriodId: [null],\r\n      classroomId: [null],\r\n    });\r\n\r\n    if (!this.accessToAllAgencies) {\r\n      this.agencyId.setValidators([Validators.required]);\r\n      this.agencyId.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    res.classes = res.classes.items.map((data: any) => ({\r\n      ...data,\r\n      displayIcons: setIconDisplayObject(this.tableColumns, data),\r\n      teachersNames: formatStringToStringArr(data.teachersNames),\r\n    }));\r\n    this.dataSource = new MatTableDataSource(res.classes);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.classes;\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    if (this.classroomsForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.payload = this.classroomsForm.value;\r\n    this.payload.userId = this.user.userId;\r\n    if (this.paginator) {\r\n      this.payload.pageIndex = this.paginator.pageIndex + 1;\r\n      this.payload.itemsPerPage = this.paginator.pageSize;\r\n    } else {\r\n      this.payload.pageIndex = this.pageIndex;\r\n      this.payload.itemsPerPage = this.pageSize;\r\n    }\r\n\r\n    if (Object.keys(this.payload).length == 2) {\r\n      this.dataSource = new MatTableDataSource();\r\n      this.totalData = 0;\r\n      this.tableData = [];\r\n    } else {\r\n      this.myClasses\r\n        .getUserClasses(this.payload)\r\n        .subscribe((res: IUserClassesDto) => {\r\n          if (res) {\r\n            if (resetPage) this.paginator.firstPage();\r\n            this.initializeTableData(res);\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    switch (event.type) {\r\n      case 'viewStudents':\r\n        this.route.navigateByUrl(`view-students/${event.data.id}`);\r\n        break;\r\n      case 'reEnroll':\r\n        this.openReEnrollModal(event);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleState(state: IState) {\r\n    if (!state) {\r\n      this.onClear();\r\n      return;\r\n    }\r\n\r\n    this.stateId.setValue(state.id);\r\n    this.payload.stateId = this.stateId.value;\r\n  }\r\n\r\n  handleAgency(agency: IAgency) {\r\n    if (!agency) {\r\n      this.payload = {};\r\n      this.agencyId.setValue(null);\r\n      return;\r\n    }\r\n\r\n    this.agencyId.setValue(agency.id);\r\n    this.ratingPeriodId.setValue(null);\r\n    this.payload.agencyId = this.agencyId.value;\r\n    this.payload.ratingPeriodId = null;\r\n  }\r\n\r\n  handleSites(site: ISites): void {\r\n    if (!site) {\r\n      this.siteId.setValue(null);\r\n      this.payload.siteId = null;\r\n      this.payload.ratingPeriodId = null;\r\n      this.payload.classroomId = null;\r\n      return;\r\n    }\r\n\r\n    this.siteId.setValue(site.id);\r\n    this.payload.siteId = this.siteId.value;\r\n  }\r\n\r\n  handleRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    if (!ratingPeriod) {\r\n      this.payload.ratingPeriodId = null;\r\n      this.payload.classroomId = null;\r\n      this.ratingPeriodId.setValue(null);\r\n      this.classroomId.setValue(null);\r\n      return;\r\n    }\r\n\r\n    this.ratingPeriodId.setValue(ratingPeriod.id);\r\n    this.payload.ratingPeriodId = this.ratingPeriodId.value;\r\n  }\r\n\r\n  handleClassroom(classroom: any): void {\r\n    if (!classroom) {\r\n      this.classroomId.setValue(null);\r\n      this.payload.classroomId = null;\r\n      return;\r\n    }\r\n\r\n    this.classroomId.setValue(classroom.id);\r\n    this.payload.classroomId = this.classroomId.value;\r\n  }\r\n\r\n  search(resetPage?: boolean): void {\r\n    if (this.classroomsForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.paginateTable(resetPage);\r\n  }\r\n\r\n  onClear(): void {\r\n    this.dataSource = new MatTableDataSource<any>();\r\n    this.clearDropdowns = true;\r\n    this.totalData = 0;\r\n    this.payload.itemsPerPage = 10;\r\n    this.paginator.pageSize = 10;\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.stateId.setValue(null);\r\n      this.payload.stateId = this.stateId.value;\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(null);\r\n      this.payload.agencyId = this.agencyId.value;\r\n    }\r\n\r\n    this.classroomsForm.patchValue({\r\n      siteId: null,\r\n      ratingPeriodId: null,\r\n      classroomId: null,\r\n    });\r\n  }\r\n\r\n  openReEnrollModal(event: any): void {\r\n    if (event.data.activeStudentCount == 0) {\r\n      this.toastService.error(this.childMovementErrorMessage);\r\n      return;\r\n    }\r\n\r\n    this.enrollmentService.areEnrollmentsActive({ classId: event.data.id}).pipe(\r\n      take(1),\r\n      switchMap((isActive: boolean) => {\r\n        if (isActive) {\r\n          const modalRef = this.modal.open(ReEnrollClassroomComponent, {\r\n            data: event ? event.data : undefined,\r\n          });\r\n          return modalRef.afterClosed();\r\n        } else {\r\n          this.toastService.error(this.childMovementErrorMessage);\r\n          return of(false);\r\n        }\r\n      })\r\n    ).subscribe((success) => {\r\n      if (success) {\r\n        this.loadClasses();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">\r\n      {{ isBatch && \"Batch\" }} Withdraw Confirmation\r\n    </h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-x-10\" [formGroup]=\"dropForm\">\r\n      <div *ngIf=\"isBatch\" class=\"col-span-2 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\"\r\n          >Selected Children</label\r\n        >\r\n        <ul>\r\n          <li *ngFor=\"let child of child\">\r\n            {{ child.firstName + \" \" + child.lastName }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n\r\n      <div *ngIf=\"!isBatch\" class=\"col-span-1 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\">Child's Name</label>\r\n        <p>\r\n          {{ child.firstName + \" \" + child.lastName }}\r\n        </p>\r\n      </div>\r\n\r\n      <div class=\"input-container col-span-full md:col-span-1 mt-2\">\r\n        <mat-form-field\r\n          class=\"example-full-width no-underline\"\r\n          appearance=\"fill\"\r\n        >\r\n          <label class=\"font-normal\"\r\n            >Withdraw from Agency Reason<span class=\"required\"></span\r\n          ></label>\r\n          <mat-select formControlName=\"classExitReasonId\" placeholder=\"Reason\">\r\n            <mat-option\r\n              *ngFor=\"let reason of exitReasons$ | async\"\r\n              [value]=\"reason.id\"\r\n              (click)=\"getSelectedExitReason(reason)\"\r\n            >\r\n              {{ reason.exitReason }}</mat-option\r\n            >\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"relative\">\r\n        <div class=\"col-span-1 mt-2\">\r\n          <drdp-date-picker\r\n            label=\"Withdraw Date\"\r\n            [initialDate]=\"dropForm.get('exitDate').value\"\r\n            [isRequired]=\"true\"\r\n            (emitDate)=\"handleDate($event)\"\r\n          >\r\n          </drdp-date-picker>\r\n        </div>\r\n        <div class=\"absolute top-0 left-full mt-3 ml-[-2px]\">\r\n          <i class=\"uil uil-info-circle text-xs\" [matTooltip]=withdrawDateInfo></i>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-full\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal\" for=\"comment\">Comment</label>\r\n          <input\r\n            matInput\r\n            placeholder=\"Comments\"\r\n            autocomplete=\"off\"\r\n            type=\"text\"\r\n            formControlName=\"comment\"\r\n            maxlength=\"150\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</div>\r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n  <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n  <drdp-btn\r\n    class=\"ml-3\"\r\n    mat-button\r\n    [disabled]=\"dropForm.invalid || isProcessing\"\r\n    cdkFocusInitial\r\n    (click)=\"onSubmit()\"\r\n    >Withdraw\r\n  </drdp-btn>\r\n</div>\r\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, take } from 'rxjs';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\n@Component({\r\n  selector: 'drdp-drop-child',\r\n  templateUrl: './drop-child.component.html',\r\n  styleUrls: ['./drop-child.component.scss'],\r\n})\r\nexport class DropChildComponent implements OnInit {\r\n  @Output() valueChange = new EventEmitter();\r\n  dropForm: FormGroup | any;\r\n  exitReasons$?: Observable<any>;\r\n  selectedExitReason?: any;\r\n  isProcessing = false;\r\n  child: any;\r\n  isAdmin: boolean = false;\r\n  isBatch: boolean = false;\r\n  withdrawDateInfo = 'The day the child has been withdrawn from the agency.';\r\n  \r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<DropChildComponent>,\r\n    private lookup: LookupService,\r\n    private toastService: ToastService,\r\n    private studentRequestService: StudentRequestService,\r\n    private permissionService: PermissionService,\r\n    public modal: MatDialog,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.isAdmin = this.permissionService.checkPermission(\r\n      Permission.AdminEnrollmentByPass\r\n    );\r\n    this.getExitReasons();\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.dropForm = this.fb.group({\r\n      classExitReasonId: [null, Validators.required],\r\n      exitDate: [null, Validators.required],\r\n      comment: [''],\r\n    });\r\n\r\n    this.isBatch = this.editData?.isBatch;\r\n\r\n    if (this.isBatch) {\r\n      this.child = this.editData.students;\r\n    } else {\r\n      this.child = this.editData.data;\r\n    }\r\n  }\r\n\r\n  getExitReasons() {\r\n    this.exitReasons$ = this.lookup.getClassExitReasons();\r\n  }\r\n\r\n  getSelectedExitReason(option: any) {\r\n    this.selectedExitReason = option;\r\n  }\r\n\r\n  processBatchUnEnrollment() {\r\n    if (this.child.length < 1) {\r\n      this.toastService.error('No students to withdraw.');\r\n      return;\r\n    }\r\n\r\n    let studentBatchRequestPayload: any = {\r\n      studentRequestDtos: [],\r\n      requestReasonId: StudentRequestReason.Drop,\r\n      siteId: this.child[0].siteId,\r\n    };\r\n\r\n    for (let item of this.child) {\r\n      let payload: any = {\r\n        studentId: item.id,\r\n        fromClassId: item.classId,\r\n        requestReasonId: StudentRequestReason.Drop,\r\n        siteId: item.siteId,\r\n        studentName: `${item.firstName} ${item.lastName}`,\r\n        ...this.dropForm.value, // Merge the values from dropForm into the payload\r\n      };\r\n      studentBatchRequestPayload.studentRequestDtos.push(payload);\r\n    }\r\n\r\n    const successMessage = this.isAdmin\r\n      ? 'Student successfully exited.'\r\n      : 'Exit request has been sent.';\r\n\r\n    this.studentRequestService.checkDuplicateBatch(studentBatchRequestPayload)\r\n    .pipe(take(1))\r\n    .subscribe((duplicates) => {\r\n      if(duplicates && duplicates.length > 0) {\r\n        this.dialogRef.close({ success: false, duplicates: duplicates });\r\n      }\r\n      else {\r\n        this.addBatchStudentRequest(studentBatchRequestPayload, successMessage);\r\n      }\r\n    });\r\n  }\r\n\r\n  addBatchStudentRequest(payload: any, successMessage: string) {\r\n    this.studentRequestService\r\n    .addBatchStudentRequests(payload, successMessage)\r\n    .pipe(take(1))\r\n    .subscribe((r) => {\r\n      this.isProcessing = false;\r\n      if (r) this.dialogRef.close({ success: true });\r\n    });\r\n  }\r\n\r\n  handleDate(event: any) {\r\n    this.dropForm.get('exitDate').setValue(event);\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.dropForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    if (this.isProcessing) {\r\n      this.toastService.error('Existing request still in progress.');\r\n      return;\r\n    }\r\n\r\n    this.isProcessing = true;\r\n\r\n    if (this.isBatch) {\r\n      this.processBatchUnEnrollment();\r\n      return;\r\n    }\r\n\r\n    let payload: any = this.dropForm.value;\r\n    payload.studentId = this.child.id;\r\n    payload.fromClassId = this.child.classId;\r\n    payload.requestReasonId = StudentRequestReason.Drop;\r\n    payload.siteId = this.child.siteId;\r\n    payload.studentClassEnrollmentId = this.child.studentClassEnrollmentId;\r\n\r\n    const successMessage = this.isAdmin\r\n      ? 'Student successfully exited.'\r\n      : 'Exit request has been sent.';\r\n\r\n    this.studentRequestService\r\n      .addStudentRequest(payload, successMessage)\r\n      .pipe(take(1))\r\n      .subscribe((r) => {\r\n        this.isProcessing = false;\r\n        this.dialogRef.close({ success: true });\r\n      });\r\n  }\r\n}\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{ label }}</h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <form\r\n      class=\"grid grid-cols-2 gap-4 gap-x-10 p-3 gridCust\"\r\n      [formGroup]=\"transferChildForm\"\r\n    >\r\n      <div *ngIf=\"isBatchTransfer\" class=\"col-span-2 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\"\r\n          >Selected Children</label\r\n        >\r\n        <ul>\r\n          <li *ngFor=\"let child of students\">\r\n            {{ child.firstName + \" \" + child.lastName }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <div *ngIf=\"!isBatchTransfer\" class=\"col-span-1 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\">Child's Name</label>\r\n        <p>\r\n          {{ child.firstName + \" \" + child.lastName }}\r\n        </p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-rating-period\r\n          [initialRatingPeriodId]=\"ratingPeriod.value\"\r\n          label=\"Transfer Rating Period\"\r\n          (ratingPeriod)=\"handleRatingPeriod($event)\"\r\n          [agencyId]=\"agencyId\"\r\n          [required]=\"true\"\r\n          [omitFutureRps]=\"true\"\r\n        >\r\n        </drdp-select-rating-period>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-site\r\n          [initialSiteId]=\"site.value\"\r\n          label=\"Transfer to: Site\"\r\n          (site)=\"handleSite($event)\"\r\n          [agencyId]=\"agencyId\"\r\n          [multiSelect]=\"false\"\r\n          [multiSelectInitVals]=\"false\"\r\n          [required]=\"true\"\r\n        >\r\n        </drdp-select-site>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-class\r\n          [initialClassroomId]=\"classroom.value\"\r\n          label=\"Transfer to: Classroom\"\r\n          (classroom)=\"handleClassroom($event)\"\r\n          [siteIds]=\"site.value\"\r\n          [ratingPeriodId]=\"ratingPeriod.value\"\r\n          [multiSelect]=\"false\"\r\n          [required]=\"true\"\r\n          [includePilotClasses]=\"false\"\r\n        >\r\n        </drdp-select-class>\r\n      </div>\r\n      <div class=\"relative\">\r\n        <div class=\"col-span-1\">\r\n          <drdp-date-picker label=\"Classroom Enrollment Date\"\r\n            labelClasses=\"pb-1\"\r\n            [isRequired]=\"true\"\r\n            (emitDate)=\"handleDate($event)\">\r\n          </drdp-date-picker>\r\n          <mat-error *ngIf=\"classEnrollmentDate.hasError('exitDate')\" class=\"text-xs\">\r\n            Date cannot be prior to student(s) current enrollment exit date.\r\n          </mat-error>\r\n          <mat-error *ngIf=\"classEnrollmentDate.hasError('dateRange')\" class=\"text-xs\">\r\n            Date must be between rating period's min and max dates.\r\n          </mat-error>\r\n        </div>\r\n        <div class=\"absolute top-0 left-full mt-1 ml-[-2px]\">\r\n          <i class=\"uil uil-info-circle text-xs\" [matTooltip]=enrollmentDateInfo></i>\r\n        </div>\r\n      </div>\r\n      <div class=\"col-span-2 w-full\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label for=\"Comment\" class=\"font-normal block mb-2 text-md\">\r\n            Comment\r\n          </label>\r\n          <input\r\n            matInput\r\n            placeholder=\"Comment\"\r\n            type=\"text\"\r\n            formControlName=\"Comment\"\r\n            [maxLength]=\"150\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n    </form>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn\r\n      class=\"ml-3\"\r\n      mat-button\r\n      [disabled]=\"transferChildForm.invalid || isProcessing\"\r\n      cdkFocusInitial\r\n      (click)=\"onSubmit()\"\r\n    >\r\n      {{ submitBtnText }}</drdp-btn\r\n    >\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n  MatDialogRef,\r\n  MAT_DIALOG_DATA,\r\n  MatDialog,\r\n} from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { IUserClassSearchRequestDto } from '@core/interfaces/iclasses';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IStudentSearchResponseDto } from '@core/interfaces/istudent';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestBatch,\r\n} from '@core/interfaces/istudent-request';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-transfer-child',\r\n  templateUrl: './transfer-child.component.html',\r\n  styleUrls: ['./transfer-child.component.scss'],\r\n})\r\nexport class TransferChildComponent implements OnInit {\r\n  @Output() valueChange = new EventEmitter();\r\n  isAdmin = false;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  isProcessing = false;\r\n  child: any;\r\n  payload: IUserClassSearchRequestDto = {};\r\n  initialRatingPeriodId: any | undefined;\r\n  transferChildForm: FormGroup | any;\r\n  submitBtnText = '';\r\n  isBatchTransfer = false;\r\n  students?: IStudentSearchResponseDto[];\r\n  agencyId?: number;\r\n  label = 'Transfer Child';\r\n  ratingStartDate: Date = new Date();\r\n  ratingEndDate: Date = new Date();\r\n  yesterday! : number;\r\n  enrollmentDateInfo = 'The day the child will start in the new class enrollment.';\r\n\r\n  get site() {\r\n    return this.transferChildForm.get('site');\r\n  }\r\n  get classroom() {\r\n    return this.transferChildForm.get('classroom');\r\n  }\r\n  get ratingPeriod() {\r\n    return this.transferChildForm.get('ratingPeriod');\r\n  }\r\n  get comment() {\r\n    return this.transferChildForm.get('Comment');\r\n  }\r\n  get classEnrollmentDate() {\r\n    return this.transferChildForm.get('classEnrollmentDate');\r\n  }\r\n\r\n  constructor(\r\n    public toastService: ToastService,\r\n    public permissionService: PermissionService,\r\n    private fb: FormBuilder,\r\n    private studentRequestService: StudentRequestService,\r\n    public modal: MatDialog,\r\n    public dialogRef: MatDialogRef<TransferChildComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.calculateYesterdayDate();\r\n    this.initializeForms();\r\n    this.isAdmin = this.permissionService.checkPermission(\r\n      Permission.AdminEnrollmentByPass\r\n    );\r\n    this.submitBtnText = this.isAdmin\r\n      ? 'Transfer Child'\r\n      : 'Save and Send For Approval';\r\n\r\n    if (Array.isArray(this.editData.studentBatch)) {\r\n      const { studentBatch, agencyId } = this.editData;\r\n      this.students = studentBatch;\r\n      this.isBatchTransfer = true;\r\n      this.agencyId = agencyId;\r\n      this.label = 'Batch Transfer Confirmation';\r\n    } else {\r\n      this.child = this.editData.data;\r\n      this.agencyId = this.child.agencyId;\r\n    }\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.transferChildForm = this.fb.group({\r\n      site: [null, Validators.required],\r\n      classroom: [null, Validators.required],\r\n      ratingPeriod: [null, Validators.required],\r\n      Comment: ['', [Validators.maxLength(150)]],\r\n      classEnrollmentDate: [null, [Validators.required]],\r\n    });\r\n  }\r\n\r\n  calculateYesterdayDate(): void {\r\n    const currentDate = new Date();\r\n    let yesterday = new Date(currentDate);\r\n    yesterday.setDate(currentDate.getDate() - 1);\r\n    yesterday.setHours(0, 0, 0, 0);\r\n\r\n    this.yesterday =  yesterday.getTime();\r\n  }\r\n\r\n  handleSite(site: ISites): void {\r\n    this.site.setValue(site?.id);\r\n    this.payload.siteId = site?.id;\r\n    this.classroom.setValue(null);\r\n  }\r\n\r\n  handleClassroom(classroom: any): void {\r\n    this.classroom.setValue(classroom?.id);\r\n  }\r\n\r\n  handleRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    this.ratingPeriod.setValue(ratingPeriod?.id);\r\n    this.payload.ratingPeriodId = ratingPeriod?.id;\r\n    this.classroom.setValue(null);\r\n    this.ratingStartDate = new Date(ratingPeriod?.minDate);\r\n    this.ratingEndDate = new Date(ratingPeriod?.maxDate);\r\n    this.handleDate(this.classEnrollmentDate.value);\r\n  }\r\n\r\n  onSubmit() {\r\n    this.handleDate(this.classEnrollmentDate.value);\r\n    if (this.transferChildForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    this.isProcessing = true;\r\n    const successMessage = this.isAdmin\r\n      ? 'Transfer successful.'\r\n      : 'Transfer request has been sent.';\r\n\r\n    if (this.isBatchTransfer) {\r\n      const payload: IStudentRequestBatch = {\r\n        studentRequestDtos: [],\r\n        siteId: this.site.value,\r\n        requestReasonId: StudentRequestReason.Transfer,\r\n      };\r\n\r\n      if (this.students?.length) {\r\n        const isTransferringToSameClass = this.students?.some(\r\n          (student: IStudentSearchResponseDto) =>\r\n            student.classId == this.classroom.value\r\n        );\r\n\r\n        if (isTransferringToSameClass) {\r\n          this.showModal(`One or more children selected are already enrolled in the same classroom and rating period you are transferring to.`);\r\n          return;\r\n        }\r\n\r\n        const studentRequest: IStudentRequest[] = this.students.map(\r\n          (student: IStudentSearchResponseDto) => ({\r\n            fromClassId: student.classId,\r\n            toClassId: this.classroom.value,\r\n            studentId: student.id,\r\n            requestReasonId: StudentRequestReason.Transfer,\r\n            comment: this.comment.value,\r\n            siteId: this.site.value,\r\n            studentName: `${student.firstName} ${student.lastName}`,\r\n            classEnrollmentDate: this.classEnrollmentDate.value,\r\n            classExitDate: new Date(this.getStudentExitDate(student))\r\n          })\r\n        );\r\n        payload.studentRequestDtos = studentRequest;\r\n      }\r\n\r\n      if (payload.studentRequestDtos) {\r\n        this.studentRequestService.checkDuplicateBatch(payload)\r\n        .pipe(take(1))\r\n        .subscribe((duplicates) => {\r\n          if(duplicates && duplicates.length > 0) {\r\n            this.dialogRef.close({ success: false, duplicates: duplicates });\r\n          }\r\n          else {\r\n            this.studentRequestService\r\n            .processBatchRequest(payload)\r\n            .pipe(take(1))\r\n            .subscribe((_) => {\r\n              this.isProcessing = false;\r\n              this.dialogRef.close({ success: true });\r\n            });\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      if (this.child.classId == this.classroom.value) {\r\n        this.showModal(' Child is already enrolled in the same classroom and rating period you are transferring to.');\r\n        this.isProcessing = false;\r\n        return;\r\n      }\r\n      let payload: IStudentRequest = {\r\n        fromClassId: this.child.classId,\r\n        toClassId: this.classroom.value,\r\n        studentId: this.child.id,\r\n        requestReasonId: StudentRequestReason.Transfer,\r\n        comment: this.comment.value,\r\n        siteId: this.site.value,\r\n        classEnrollmentDate: this.classEnrollmentDate.value,\r\n        classExitDate: new Date(this.getStudentExitDate(this.child))\r\n      };\r\n\r\n      this.studentRequestService\r\n        .addStudentRequest(payload, successMessage)\r\n        .pipe(take(1))\r\n        .subscribe(() => {\r\n          this.isProcessing = false;\r\n          this.dialogRef.close({ success: true });\r\n        });\r\n    }\r\n  }\r\n\r\n\r\n  showModal(displayMessage: string) {\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: '',\r\n      message: displayMessage,\r\n      name: '',\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.OK,\r\n    };\r\n    this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.classEnrollmentDate.setValue(event);\r\n\r\n    const enrollmentDate = new Date(event);\r\n    enrollmentDate.setHours(0, 0, 0, 0);\r\n    const classEnrollmentDate = enrollmentDate.getTime();\r\n\r\n    if (this.classEnrollmentDate.value && this.ratingPeriod.value) {\r\n      if (classEnrollmentDate < this.ratingStartDate.getTime() ||\r\n        classEnrollmentDate > this.ratingEndDate.getTime()) {\r\n        this.transferChildForm.get('classEnrollmentDate').setErrors({dateRange: true});\r\n      } else if (this.checkExitDate(classEnrollmentDate)) {\r\n        this.transferChildForm.get('classEnrollmentDate').setErrors({exitDate: true});\r\n      } else {\r\n        this.classEnrollmentDate.setErrors(null);\r\n      }\r\n    }\r\n  }\r\n\r\n  checkExitDate(classEnrollmentDate: number): boolean {\r\n    if (this.isBatchTransfer && this.students) {\r\n      return this.students.some(student => student.ratingPeriodId != this.ratingPeriod.value &&\r\n        this.invalidEnrollmentDate(student, classEnrollmentDate));\r\n    } else if (this.child && (this.child.ratingPeriodId != this.ratingPeriod.value)) {\r\n      return this.invalidEnrollmentDate(this.child, classEnrollmentDate);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  invalidEnrollmentDate(student: IStudentSearchResponseDto, classEnrollmentDate: number): boolean {\r\n    const exitDate = this.getStudentExitDate(student);\r\n    return exitDate >= classEnrollmentDate;\r\n  }\r\n\r\n  getStudentExitDate(student: IStudentSearchResponseDto) {\r\n    const currentRatingPeriodEndDate = new Date(student.ratingPeriodEndDate).getTime();\r\n    const exitDate = currentRatingPeriodEndDate < this.yesterday ? currentRatingPeriodEndDate : this.yesterday;\r\n    return exitDate;\r\n  }\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n  MatDialog,\r\n  MatDialogRef,\r\n  MAT_DIALOG_DATA,\r\n} from '@angular/material/dialog';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take } from 'rxjs';\r\nimport { isDateBetween } from '@core/services/helper.service';\r\n\r\n@Component({\r\n  selector: 'app-sped-exit-date',\r\n  templateUrl: './sped-exit-date.component.html',\r\n  styleUrls: ['./sped-exit-date.component.css'],\r\n})\r\nexport class SpedExitDateComponent implements OnInit {\r\n  spedExitDateForm: FormGroup | any;\r\n  child: any;\r\n  isProcessing = false;\r\n  validDate = false;\r\n  constructor(\r\n    public toastService: ToastService,\r\n    private fb: FormBuilder,\r\n    public modal: MatDialog,\r\n    public dialogRef: MatDialogRef<SpedExitDateComponent>,\r\n    public studentService: StudentService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.child = this.editData.data;\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.spedExitDateForm = this.fb.group({\r\n      studentId: [this.child.id, Validators.required],\r\n      classId: [this.child.classId, Validators.required],\r\n      spedEntryDate: [this.child.spedEntryDate, Validators.required],\r\n      spedExitDate: [this.child.spedExitDate, Validators.required],\r\n    });\r\n  }\r\n\r\n  handleExitDate(event: any) {\r\n    this.spedExitDateForm.get('spedExitDate').setValue(event);\r\n    this.checkDates();\r\n  }\r\n\r\n  handleEntryDate(event: any) {\r\n    this.spedExitDateForm.get('spedEntryDate').setValue(event);\r\n    this.checkDates();\r\n  }\r\n\r\n  checkDates() {\r\n    const entryDate = this.spedExitDateForm.get('spedEntryDate').value;\r\n    const exitDate = this.spedExitDateForm.get('spedExitDate').value;\r\n    const gpMinStartDate = new Date(this.child.gpMinStartDate);\r\n    const gpMaxEndDate = new Date(this.child.gpMaxEndDate);\r\n\r\n    if (entryDate && exitDate) {\r\n      // Extract date parts from the date strings and compare\r\n      const startDate = new Date(entryDate);\r\n      const endDate = new Date(exitDate);\r\n\r\n      const startOnlyDate = new Date(\r\n        startDate.getFullYear(),\r\n        startDate.getMonth(),\r\n        startDate.getDate()\r\n      );\r\n      const endOnlyDate = new Date(\r\n        endDate.getFullYear(),\r\n        endDate.getMonth(),\r\n        endDate.getDate()\r\n      );\r\n\r\n      this.validDate = false;\r\n      if (startOnlyDate > endOnlyDate) {\r\n        this.toastService.error('Exit date should be greater than entry date');\r\n      } else if (!isDateBetween(gpMinStartDate, gpMaxEndDate, endOnlyDate) ) {\r\n        this.toastService.error(`The Exit Date must fall within the current enrollment Rating Period.\r\n        If the Exit Date needs to be a past date that falls within a past Rating Period,\r\n        please go to that Rating Period Classroom's page.`);\r\n      } else {\r\n        this.validDate = true;\r\n      }\r\n    }\r\n\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.spedExitDateForm.invalid || !this.validDate) {\r\n      this.toastService.error('Please enter all required fields. ');\r\n      return;\r\n    }\r\n    this.isProcessing = true;\r\n    const formValues = this.spedExitDateForm.value;\r\n    const payload = {\r\n      studentIds: [formValues.studentId],\r\n      spedExitDate: formValues.spedExitDate,\r\n      spedEntryDate: formValues.spedEntryDate,\r\n      classId: formValues.classId,\r\n      schoolYearId: this.child.schoolYearId,\r\n    };\r\n    this.studentService\r\n      .updateStudentSpedDates(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.isProcessing = false;\r\n        if (res.isSuccess) {\r\n          this.toastService.success('SPED Dates updated successfully');\r\n          this.dialogRef.close({ success: true });\r\n        } else if (res.incompleteCOSStudents.length > 0) {\r\n          this.toastService.error('The Outcome data on the Demographics page is not complete. All 3 outcomes must be chosen and saved. Cannot proceed with an Exit Date.');\r\n        }\r\n        else if (res.missingScoresStudents.length > 0) {\r\n          this.toastService.error('No scores found for this child. Cannot proceed with an Exit Date');\r\n        }\r\n      });\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold pr-5\">\r\n      Special Education Dates\r\n    </h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n\t\t<p class=\"mt-2\">The Exit Date must fall within the current enrollment Rating Period. If the Exit Date needs to be a  <br> past date  that falls within a past Rating Period, please go to that Rating Period Classroom's page.</p>\r\n    <form class=\"grid grid-cols-2 gap-4\" [formGroup]=\"spedExitDateForm\">\r\n      <div class=\"col-span-1 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\">Child's Name</label>\r\n        <p>\r\n          {{ child.firstName + \" \" + child.lastName }}\r\n        </p>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 mt-2\">\r\n        <drdp-date-picker label=\"Special Education Entry Date\"\r\n          [initialDate]=\"spedExitDateForm.get('spedEntryDate').value\" [isRequired]=\"true\"\r\n          (emitDate)=\"handleEntryDate($event)\">\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n\r\n      <div class=\"col-span-1 mt-2\">\r\n        <drdp-date-picker label=\"Special Education Exit Date\" [initialDate]=\"spedExitDateForm.get('spedExitDate').value\"\r\n          [isRequired]=\"true\" [minDate]=\"spedExitDateForm.get('spedEntryDate').value\" (emitDate)=\"handleExitDate($event)\">\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n    </form>\r\n  </div>\r\n</div>\r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n  <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n  <drdp-btn class=\"ml-3\" mat-button [disabled]=\"spedExitDateForm.invalid || isProcessing || !validDate\" cdkFocusInitial\r\n    (click)=\"onSubmit()\">Save\r\n  </drdp-btn>\r\n</div>\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">\r\n      Special Education Exit Date Update\r\n    </h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <div *ngIf=\"batchResults.isSuccess\" class=\"mt-4\"> The following children were updated with the selected exit date.</div>\r\n    <div class=\"mt-2\">\r\n      <ul>\r\n        <li *ngFor=\"let student of batchResults.successfulStudents\">\r\n          - <strong>{{ student }}</strong>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n    <div class=\"mt-4\" *ngIf=\"batchResults.missingScoresStudents?.length > 0\"> No scores found for the following children. Cannot proceed with an Exit Date.</div>\r\n    <div class=\"mt-2\">\r\n      <ul>\r\n        <li *ngFor=\"let student of batchResults.missingScoresStudents\">\r\n          - <strong>{{ student }}</strong>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n    <div class=\"mt-4\" *ngIf=\"batchResults.incompleteCOSStudents?.length > 0\"> The Outcome data on the Child's Demographics page is not complete. <br>\r\n      All 3 outcomes must be chosen and saved. Cannot proceed with an Exit Date.</div>\r\n    <div class=\"mt-2\">\r\n      <ul>\r\n        <li *ngFor=\"let student of batchResults.incompleteCOSStudents\">\r\n          - <strong>{{ student }}</strong>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n  <drdp-btn class=\"ml-3\" mat-button cdkFocusInitial mat-dialog-close>OK</drdp-btn>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\r\nimport { IClassStudent } from '@core/interfaces/iclasses';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take } from 'rxjs';\r\nimport { isDateBetween } from '@core/services/helper.service';\r\n\r\n@Component({\r\n  selector: 'drdp-confirmation-sped-exit-date',\r\n  templateUrl: './confirmation-sped-exit-date.component.html',\r\n  styleUrls: ['./confirmation-sped-exit-date.component.scss']\r\n})\r\nexport class ConfirmationSpedExitDateComponent implements OnInit {\r\n\r\n  constructor( public dialogRef: MatDialogRef<ConfirmationSpedExitDateComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any) {\r\n  dialogRef.disableClose = true;\r\n}\r\n  batchResults: any;\r\n\r\n  ngOnInit(): void {\r\n    this.batchResults = this.editData;\r\n  }\r\n\r\n  onSubmit() {\r\n\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">\r\n      Batch Special Education Exit Date\r\n    </h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <div class=\"mt-4\"> The Special Education Exit Date can only be added for children with locked ratings, is <br>\r\n      noted as a child with an IEP and with a Special Education Entry Date, and has a District <br> \r\n      of Liability chosen on child demographics.  If the Exit Date has already been chosen and <br> \r\n      processed, you are unable to reset. The Exit Date must fall within the current enrollment <br>\r\n      Rating Period. If the Exit Date needs to be a past date that falls within a past Rating Period, <br>\r\n      please go to that Rating Period Classroom's page. <br>\r\n      Only the following children will be updated: </div>\r\n    <div class=\"mt-2\">\r\n      <ul>\r\n        <li *ngFor=\"let student of students\">\r\n          - <strong>{{ student.firstName }} {{ student.lastName }}</strong> - (SPED Entry Date: {{ student.spedEntryDate\r\n          ? (student.spedEntryDate | date: 'MM/dd/yyyy') : 'N/A'}})\r\n        </li>\r\n      </ul>\r\n    </div>\r\n    <form [formGroup]=\"spedExitDateForm\">\r\n      <div class=\"relative\">\r\n        <div class=\"mt-2\">\r\n          <drdp-date-picker label=\"Special Education Exit Date\" [isRequired]=\"true\" [minDate]=\"minSpedEntryDate\"\r\n            (emitDate)=\"handleDate($event)\">\r\n          </drdp-date-picker>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</div>\r\n\r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n  <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n  <drdp-btn class=\"ml-3\" mat-button [disabled]=\"spedExitDateForm.invalid || isProcessing\" cdkFocusInitial\r\n    (click)=\"onSubmit()\">Save\r\n  </drdp-btn>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\r\nimport { IClassStudent } from '@core/interfaces/iclasses';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take } from 'rxjs';\r\nimport { isDateBetween } from '@core/services/helper.service';\r\nimport { ConfirmationSpedExitDateComponent } from '../confirmation-sped-exit-date/confirmation-sped-exit-date.component';\r\n@Component({\r\n  selector: 'app-batch-sped-exit-date',\r\n  templateUrl: './batch-sped-exit-date.component.html',\r\n  styleUrls: ['./batch-sped-exit-date.component.css']\r\n})\r\nexport class BatchSpedExitDateComponent implements OnInit {\r\n  spedExitDateForm: FormGroup | any;\r\n  students: any;\r\n  isProcessing = false;\r\n  minSpedEntryDate?: Date;\r\n  gpMinStartDate?: Date;\r\n  gpMaxEndDate?: Date;\r\n\r\n  constructor(\r\n    public toastService: ToastService,\r\n    private fb: FormBuilder,\r\n    public modal: MatDialog,\r\n    public dialogRef: MatDialogRef<BatchSpedExitDateComponent>,\r\n    public studentService: StudentService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.students = this.editData;\r\n    // Find the minimum spedEntryDate using reduce\r\n    this.minSpedEntryDate = this.students.reduce((minDate: Date, student: IClassStudent) => {\r\n    if (!minDate || (student.spedEntryDate ?? new Date) < minDate) {\r\n        return student.spedEntryDate;\r\n    }\r\n    return minDate;\r\n    }, undefined);\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.spedExitDateForm = this.fb.group({\r\n      spedExitDate: [null, Validators.required],\r\n      classId: [this.students[0]?.classId || 0, Validators.required],\r\n      schoolYearId:  [this.students[0]?.schoolYearId || 0, Validators.required],\r\n    });\r\n  }\r\n\r\n  handleDate(event: any) {\r\n    this.gpMinStartDate = new Date(this.students[0].gpMinStartDate);\r\n    this.gpMaxEndDate = new Date(this.students[0].gpMaxEndDate);\r\n    const selectedDate = new Date(event);\r\n    const isBeforeSpedEntryDate = this.students\r\n      .filter((student: IClassStudent) => student.spedEntryDate) // Filter out students without spedEntryDate\r\n      .some((student: IClassStudent) => {\r\n        if (student.spedEntryDate === null) return false;\r\n        const spedEntryDate = student.spedEntryDate ? new Date(student.spedEntryDate) : new Date();\r\n        return selectedDate < spedEntryDate;\r\n      });\r\n\r\n    if (isBeforeSpedEntryDate) {\r\n      this.toastService.error('SPED Exit Date cannot be before SPED Entry Date');\r\n      this.spedExitDateForm.get('spedExitDate').setValue(null);\r\n    } else if (!isDateBetween(this.gpMinStartDate, this.gpMaxEndDate, selectedDate) ) {\r\n      this.toastService.error(`The Exit Date must fall within the current enrollment Rating Period.\r\n      If the Exit Date needs to be a past date that falls within a past Rating Period,\r\n      please go to that Rating Period Classroom's page.`);\r\n      this.spedExitDateForm.get('spedExitDate').setValue(null);\r\n    } else {\r\n      this.spedExitDateForm.get('spedExitDate').setValue(event);\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.spedExitDateForm.invalid) {\r\n      this.toastService.error('SPED Exit Date cannot be before SPED Entry Date');\r\n      return;\r\n    }\r\n    this.isProcessing = true;\r\n    const formValues = this.spedExitDateForm.value;\r\n    const payload = {\r\n      studentIds: this.students.map((student: IClassStudent) => student.id),\r\n      spedExitDate: formValues.spedExitDate,\r\n      classId: formValues.classId,\r\n      schoolYearId: formValues.schoolYearId\r\n    };\r\n    this.studentService.updateStudentSpedDates(payload)\r\n    .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.isProcessing = false;\r\n        if (res) {\r\n          this.dialogRef.close({ success: true });\r\n          this.modal.open(ConfirmationSpedExitDateComponent, {\r\n            data: {\r\n              isSuccess: res.isSuccess,\r\n              incompleteCOSStudents: res.incompleteCOSStudents,\r\n              successfulStudents: res.successfulStudents,\r\n              missingScoresStudents: res.missingScoresStudents\r\n            }\r\n          });\r\n        }\r\n      });\r\n  }\r\n\r\n}\r\n","export enum IepPlan {\r\n    Yes = 1,\r\n    No = 2,\r\n    Unknown = 3\r\n}\r\n\r\nexport enum IepPlanValues {\r\n  Yes = 'Yes',\r\n  No = 'No',\r\n  Unknown = 'Unknown'\r\n}","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-full\">\r\n      <drdp-title\r\n        [title]=\"\r\n          'Viewing Students in ' +\r\n          (classroomName ?? '(Classroom Name Not Found)')\r\n        \"\r\n      ></drdp-title>\r\n      <h2 class=\"pb-5\">\r\n        Rating Period: {{ ratingPeriodName ?? \"(Rating Period Not Found)\" }}\r\n      </h2>\r\n    </div>\r\n    <div class=\"flex justify-end items-center\" *ngIf=\"canBatchUpdateSped\">\r\n      <drdp-btn type=\"button\" additionalClasses=\"lg:m-2 xl:m-0 inline-block\" (click)=\"batchSpedExit()\" color=\"outline\">Special Ed Exit Date by Batch</drdp-btn>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container *ngIf=\"showTable\">\r\n    <div class=\"w-full\">\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        (iconActionItem)=\"onIconClick($event)\"\r\n        (actionIconClicked)=\"onActionItemClicked($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n<mat-paginator\r\n  class=\"mb-12\"\r\n  [pageSizeOptions]=\"pageSizeOptions\"\r\n  [pageSize]=\"pageSize\"\r\n  [length]=\"totalData\"\r\n  [pageIndex]=\"pageIndex\"\r\n  (page)=\"paginate($event)\"\r\n>\r\n</mat-paginator>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport {\r\n  IAllStudentsByPermissionRequest,\r\n  IClassStudent,\r\n  IViewClassStudentsRequest,\r\n} from '@core/interfaces/iclasses';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription, of, switchMap, take } from 'rxjs';\r\nimport { DropChildComponent } from '../../drop-child/drop-child.component';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { TransferChildComponent } from '../../transfer-child/transfer-child.component';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SpedExitDateComponent } from './sped-exit-date/sped-exit-date.component';\r\nimport { BatchSpedExitDateComponent } from './batch-sped-exit-date/batch-sped-exit-date.component';\r\nimport { States } from '@core/enums/states';\r\nimport { ConfirmationSpedExitDateComponent } from './confirmation-sped-exit-date/confirmation-sped-exit-date.component';\r\nimport { IepPlan } from '@core/enums/iep-plan';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\n\r\nconst tableIconAction = {\r\n  transferChild: 'transferChild',\r\n  dropChild: 'dropChild',\r\n  viewChild: 'viewChild',\r\n};\r\n\r\nconst studentIconAction = {\r\n  setSpedExitDate: 'setSpedExitDate',\r\n};\r\n\r\n@Component({\r\n  selector: 'drdp-students',\r\n  templateUrl: './students.component.html',\r\n  styleUrls: ['./students.component.scss'],\r\n})\r\nexport class StudentsComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  private subscriptions = new Subscription();\r\n  classroomName?: string;\r\n  ratingPeriodName?: string;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData!: IClassStudent[];\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  totalData: number = 0;\r\n  pageSize: number = 10;\r\n  pageIndex: number = 1;\r\n  payload!: IAllStudentsByPermissionRequest;\r\n  classId!: number;\r\n  showTable = false;\r\n  canBatchUpdateSped = false;\r\n  childMovementErrorMessage: string = 'Child has already been moved.';\r\n  hasAccessToAll = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  hasAccessToAssigned = this.permissionService.checkPermission(\r\n    Permission.AccessAssignedStateAgencies\r\n  );\r\n  canTransfer = this.permissionService.checkPermission(\r\n    Permission.TransferEnrollment\r\n  );\r\n  canWithdraw = this.permissionService.checkPermission(\r\n    Permission.WithdrawEnrollment\r\n  );\r\n  hasBatchUpdateSpedPermission = this.permissionService.checkPermission(\r\n    Permission.SpecialEdExitDateBatch\r\n  );\r\n  user = this.auth.getCurrentUser();\r\n  agencyId: number = 0;\r\n  siteId: number = 0;\r\n  ratingPeriodId: number = 0;\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: tableIconAction.viewChild,\r\n      header: \"Child's Page\",\r\n      type: 'icon',\r\n      icon: 'file',\r\n      cursorClass: 'cursor-pointer',\r\n      colorClass: 'text-drdpblue-300',\r\n    },\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'lastName',\r\n      header: 'Last Name',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'classEnrollmentDate',\r\n      header: 'Classroom Start Date',\r\n      type: TableColumnType.date,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'classExitDate',\r\n      header: 'Classroom Withdraw Date',\r\n      type: TableColumnType.date,\r\n      isSortable: true,\r\n    }\r\n  ];\r\n\r\n  constructor(\r\n    private classService: ClassService,\r\n    private router: Router,\r\n    private activatedRoute: ActivatedRoute,\r\n    public modal: MatDialog,\r\n    private auth: AuthService,\r\n    private toast: ToastService,\r\n    private permissionService: PermissionService,\r\n    private enrollmentService: StudentClassEnrollmentService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.canWithdraw) {\r\n      this.tableColumns.unshift({\r\n        columnDef: tableIconAction.dropChild,\r\n        header: 'Withdraw from Agency',\r\n        type: 'icon',\r\n        icon: 'user-minus',\r\n        cursorClass: 'cursor-pointer',\r\n        colorClass: 'text-drdpblue-300',\r\n      })\r\n    }\r\n    if (this.canTransfer) {\r\n      this.tableColumns.unshift({\r\n        columnDef: tableIconAction.transferChild,\r\n        header: 'Transfer',\r\n        type: 'icon',\r\n        icon: 'sign-in-alt',\r\n        cursorClass: 'cursor-pointer',\r\n        colorClass: 'text-drdpblue-300',\r\n      })\r\n    }\r\n    this.getClassIdFromUrl();\r\n    this.createInitialPayload();\r\n    this.setClassroomAndRatingPeriodName();\r\n    this.getClassStudents(this.payload);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  createInitialPayload() {\r\n    this.payload = {\r\n      classId: this.classId,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1,\r\n    };\r\n  }\r\n\r\n  setClassroomAndRatingPeriodName(): void {\r\n    this.classService\r\n      .getStudentsByClass(this.classId)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          this.classroomName = res.classroom.name;\r\n          this.ratingPeriodName = res.ratingPeriod.ratingPeriodName;\r\n          this.ratingPeriodId = res.ratingPeriod.id;\r\n          this.agencyId = res.classroom.agencyId;\r\n          this.siteId = res.siteId;\r\n          if (res.stateId == States.newHampshire) {\r\n            this.canBatchUpdateSped = this.hasBatchUpdateSpedPermission;\r\n            this.tableColumns.push({\r\n              columnDef: 'spedAnticipatedExitDate',\r\n              header: 'Anticipated Special Education Exit Date',\r\n              type: TableColumnType.date,\r\n            });\r\n            this.tableColumns.push({\r\n              columnDef: 'spedExitDate',\r\n              header: 'Special Education Exit Date',\r\n              type: TableColumnType.date,\r\n            });\r\n            this.tableColumns.push({\r\n              columnDef: studentIconAction.setSpedExitDate,\r\n              header: '',\r\n              type: TableColumnType.actionIcon,\r\n              action: studentIconAction.setSpedExitDate,\r\n              icon: 'calendar-alt',\r\n              cursorClass: 'cursor-pointer',\r\n              colorClass: 'text-drdpblue-300',\r\n            });\r\n          }\r\n\r\n          this.tableColumns.push({\r\n            columnDef: 'isLocked',\r\n            header: 'Is Locked',\r\n            type: TableColumnType.boolIcon,\r\n            truthyClass: 'text-drdpGreen-300',\r\n            truthyIconUrl: 'assets/images/misc/lock-alt.svg',\r\n            falsyClass: 'text-drdpgrey-200',\r\n            falsyIconUrl: 'assets/images/misc/padlock.svg',\r\n            isSortable: true,\r\n          });\r\n          this.showTable = true;\r\n        }\r\n      });\r\n  }\r\n\r\n  getClassStudents(payload: any): void {\r\n    this.classService\r\n      .getAllClassStudentsByPermissions(this.payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          res.items = res.items.map((data: any) => ({\r\n            ...data,\r\n            displayIcons: setIconDisplayObject(this.tableColumns, data),\r\n          }));\r\n          this.dataSource = new MatTableDataSource(res.items);\r\n          this.tableData = res.items;\r\n          this.totalData = res.totalData;\r\n        }\r\n      });\r\n  }\r\n\r\n  getClassIdFromUrl(): void {\r\n    this.classId = Number(this.activatedRoute.snapshot.paramMap.get('id'));\r\n  }\r\n\r\n  paginate(event: any): void {\r\n    const payload = this.payload;\r\n    payload.itemsPerPage = event.pageSize;\r\n    payload.pageIndex = event.pageIndex + 1;\r\n\r\n    this.getClassStudents(payload);\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    event.data.classId = this.classId;\r\n    event.data.agencyId = this.agencyId;\r\n    event.data.ratingPeriodId = this.ratingPeriodId;\r\n    event.data.siteId = this.siteId;\r\n    switch (event.type) {\r\n      case tableIconAction.transferChild:\r\n        this.transferChildModal(event);\r\n        break;\r\n      case tableIconAction.dropChild:\r\n        this.dropChildModal(event);\r\n        break;\r\n      case tableIconAction.viewChild:\r\n        if (\r\n          (!this.hasAccessToAll &&\r\n            !this.hasAccessToAssigned &&\r\n            event.data.enrollmentEndDate) ||\r\n          (this.hasAccessToAssigned && this.user.stateId != event.data.stateId)\r\n        ) {\r\n          this.toast.error('Child is no longer with your agency.');\r\n          return;\r\n        }\r\n        this.router.navigate([\r\n          `/view-child/${event.data.id}/class/${this.classId}`,\r\n        ]);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  transferChildModal(event: IModalEmitData) {\r\n    if (event.data.classExitDate) {\r\n      this.toast.error(this.childMovementErrorMessage);\r\n      return;\r\n    } else if (event.data?.id <= 0) {\r\n      this.toast.error('No Student Data Present');\r\n      return;\r\n    }\r\n    \r\n    this.enrollmentService.areEnrollmentsActive({enrollmentIds: [event.data.studentClassEnrollmentId]}).pipe(\r\n      take(1),\r\n      switchMap((isActive: boolean) => {\r\n        if (isActive) {\r\n          const modalRef = this.modal.open(TransferChildComponent, {\r\n            data: event ? event : undefined,\r\n          });\r\n          return modalRef.afterClosed();\r\n        } else {      \r\n          this.toast.error(this.childMovementErrorMessage);\r\n          return of(false);          \r\n        }\r\n      })\r\n    ).subscribe((success) => {\r\n      if (success) {\r\n        this.getClassStudents(this.payload);\r\n      }\r\n    });\r\n  }\r\n\r\n  dropChildModal(event: IModalEmitData) {\r\n    if (event.data.classExitDate) {\r\n      this.toast.error(this.childMovementErrorMessage);\r\n      return;\r\n    } else if (event.data?.id <= 0) {\r\n      this.toast.error('No Student Data Present');\r\n      return;\r\n    }\r\n\r\n    this.enrollmentService.areEnrollmentsActive({enrollmentIds: [event.data.studentClassEnrollmentId]}).pipe(\r\n      take(1),\r\n      switchMap((isActive: boolean) => {\r\n        if (isActive) {\r\n          const modalRef = this.modal.open(DropChildComponent, {\r\n            data: event ? event : undefined,\r\n          });\r\n          return modalRef.afterClosed();\r\n        } else {      \r\n          this.toast.error(this.childMovementErrorMessage);\r\n          return of(false);          \r\n        }\r\n      })\r\n    ).subscribe((success) => {\r\n      if (success) {\r\n        this.getClassStudents(this.payload);\r\n      }\r\n    });\r\n  }\r\n\r\n  beginBatchUnEnrollment() {\r\n    this.router.navigate([`/view-students/${this.classId}/bulk-un-enrollment`]);\r\n  }\r\n\r\n  batchSpedExit() {\r\n    const eligibleStudents = this.tableData.filter((student: IClassStudent) => \r\n      student.isLocked === true && \r\n      student.spedEntryDate != null && \r\n      !student.osepQueueId &&\r\n      student.iepPlanId === IepPlan.Yes &&\r\n      student.districtOfLiabilityId);\r\n\r\n    if(eligibleStudents.length === 0) {\r\n      this.toast.error(\r\n        `There are no children in this class that are eligible for setting a Special Education Exit Date.  The Special Education Exit Date can only be added for children \r\n        with locked ratings, is noted as a child with an IEP and with a Special Education Entry Date, and has a District of Liability chosen on their child demographics.`\r\n      );\r\n      return;\r\n    }\r\n    const modalRef = this.modal.open(BatchSpedExitDateComponent, {\r\n      data: eligibleStudents ? eligibleStudents : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((success) => {\r\n      if (success) {\r\n        this.getClassStudents(this.payload);\r\n      }\r\n    });\r\n  }\r\n\r\n  onActionItemClicked(event: any): void {\r\n    switch (event.action) {\r\n      case studentIconAction.setSpedExitDate:\r\n        this.setSpedExitDateModal(event);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  setSpedExitDateModal(event: IModalEmitData) {\r\n    if (event.data.iepPlanId != IepPlan.Yes) {\r\n      this.toast.error(\r\n        'Child must be in Special Education.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    if(!event.data.districtOfLiabilityId) {\r\n      this.toast.error(\r\n        'Child must have a District of Liability chosen on their Demographics.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    if (!event.data.isLocked) {\r\n      this.toast.error(\r\n        'Special Education Exit Date can only be set for locked students.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    if (event.data.osepQueueId) {\r\n      this.toast.error(`Child's Special Education Date has already been submitted.`);\r\n      return;\r\n    }\r\n\r\n    if (event.data.id > 0) {\r\n      const modalRef = this.modal.open(SpedExitDateComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe((success) => {\r\n        if (success) {\r\n          this.getClassStudents(this.payload);\r\n        }\r\n      });\r\n    } else {\r\n      this.toast.error('No Student Data Present');\r\n    }\r\n  }\r\n\r\n  openConfirmationModal() {\r\n  this.modal.open(ConfirmationSpedExitDateComponent, {\r\n    data:null,\r\n    }\r\n  )\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateChild, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, take } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AuthGuard implements CanActivateChild {\r\n  constructor(private auth: AuthService, private router: Router, private toast: ToastService) { }\r\n  canActivateChild(): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n    let isValid = true;\r\n\r\n    this.auth.getActiveSession().pipe(take(1)).subscribe((res) => {\r\n      if (!res) {\r\n        localStorage.clear();\r\n        this.router.navigateByUrl('login');\r\n      }\r\n    });\r\n\r\n    const isUserLoggedIn = this.auth.checkLogin();\r\n    \r\n    if (!isUserLoggedIn) {\r\n      isValid = false;\r\n      this.logoutCurrentUser();\r\n      this.router.navigateByUrl('login');\r\n      this.toast.error('Unauthorized access');\r\n    }\r\n    return isValid;\r\n  }\r\n\r\n  logoutCurrentUser(): void {\r\n    const loggedInUser = this.auth.getCurrentUser();\r\n    if (loggedInUser) this.auth.logout().pipe(take(1)).subscribe();\r\n  }\r\n\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-full\">\r\n      <h1 class=\"pb-2 text-3xl\">Manage News</h1>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container>\r\n    <div *ngIf=\"newsItems?.length == 0\">\r\n      No news item to manage.\r\n    </div>\r\n    <div class=\"item py-3 px-2 flex justify-between\" *ngFor=\"let news of newsItems\">\r\n      <div class=\"flex\">\r\n        <drdp-pill class=\"order-2 sm:order-1 justify-self-end pr-0 sm:pr-3\" *ngIf=\"news.newsItemType.newsItemTypeName\"\r\n          [pillClass]=\"news.newsItemType.newsItemTypeName\">\r\n          {{ news.newsItemType.newsItemTypeName }}\r\n        </drdp-pill>\r\n        <p class=\"font-semibold self-start md:justify-end order-2 sm:order-2 w-24 text-left\">\r\n          {{ news.newsItemDate | date: 'MM/dd/yyyy'}}\r\n        </p>\r\n        <p class=\"mr-auto order-1 sm:order-3 w-9/12 sm:w-max cursor-pointer font-bold text-drdpblue-400 hover:underline\"\r\n          (click)='toggleModal(news)'>\r\n          {{ news.newsItemTitle }}\r\n        </p>\r\n      </div>\r\n      <div (click)=\"deleteNewsItem(news)\" class=\"cursor-pointer\" *ngIf=\"canDelete\">\r\n        <i class=\"uil uil-trash-alt text-xl text-drdpred-200\"></i>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n</div>","import { Component, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NewsDescriptionComponent } from './news-description/news-description.component';\r\nimport { Subscription, take, tap } from 'rxjs';\r\nimport { NewsItemService } from '@core/services/news-item.service';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-latest-news',\r\n  templateUrl: './latest-news.component.html',\r\n  styleUrls: ['./latest-news.component.scss'],\r\n})\r\nexport class LatestNewsComponent implements OnInit, OnDestroy {\r\n  showModal: boolean = false;\r\n  newsItems: any[] = [];\r\n  permissionService = inject(PermissionService);\r\n  canDelete = this.permissionService.checkPermission(Permission.DeleteNewsItem);\r\n\r\n  constructor(\r\n    public modal: MatDialog,\r\n    public newsItemService: NewsItemService\r\n  ) {}\r\n  private subscriptions = new Subscription();\r\n\r\n  ngOnInit(): void {\r\n    this.getRecentNewsItems();\r\n  }\r\n\r\n  getRecentNewsItems() {\r\n    this.subscriptions.add(\r\n      this.newsItemService.getUserActiveNewsItem(15).subscribe((res: any) => {\r\n        this.newsItems = res;\r\n      })\r\n    );\r\n  }\r\n\r\n  toggleModal(data: any): void {\r\n    const modalRef = this.modal.open(NewsDescriptionComponent, {\r\n      data: data ? data : undefined,\r\n    });\r\n  }\r\n\r\n  deleteNewsItem(news: any) {\r\n    let modal = { data: { modalInfo: {} } };\r\n    modal.data.modalInfo = {\r\n      title: `Delete News Item`,\r\n      message: `Are you sure you want to want to delete <span class=\"font-bold\">${news.newsItemTitle}</span>?`,\r\n      name: news.newsItemTitle,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: Modal.Delete,\r\n      showCancel: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.newsItemService\r\n          .deleteNewsItem(news.id, 'News Item Removed')\r\n          .pipe(\r\n            take(1),\r\n            tap((res: boolean) => {\r\n              if (res) {\r\n                this.getRecentNewsItems();\r\n              }\r\n            })\r\n          )\r\n          .subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscriptions) {\r\n      this.subscriptions.unsubscribe();\r\n    }\r\n  }\r\n}\r\n","<div class=\"flex flex-row p-5\">\r\n  <h1 class=\"userProfile font-semibold\">Edit User Profile</h1>\r\n</div>\r\n<div class=\"place-content-center mr-5 ml-2\">\r\n  <drdp-container>\r\n    <div class=\"\r\n        lg:flex\r\n        place-content-between place-items-center\r\n        border-b border-drdpgrey-100\r\n        self-center\r\n        hidden\r\n      \">\r\n      <h1 class=\"information font-semibold mt-1\">User Profile Details</h1>\r\n    </div>\r\n    <div class=\"\"></div>\r\n    <div class=\"w-full\">\r\n      <!-- ! Form Begins ! -->\r\n      <div mat-dialog-content>\r\n        <form [formGroup]=\"editUserForm\">\r\n          <div class=\"pt-4\">\r\n            <div class=\"grid grid-cols-3 gap-8\">\r\n              <div>\r\n                <label for=\"firstName\">Work Email<span class=\"required\"></span></label>\r\n                <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                  <input matInput type=\"text\" maxlength=\"100\" formControlName=\"emailName\" required />\r\n                </mat-form-field>\r\n                <span class=\"required\" *ngIf=\"emailName.invalid && emailName.touched\">Email Required</span>\r\n              </div>\r\n\r\n              <div>\r\n                <label></label>\r\n                <input class=\"blank\" matInput type=\"text\" maxlength=\"1\" />\r\n              </div>\r\n\r\n              <div>\r\n                <label></label>\r\n                <input class=\"blank\" matInput type=\"text\" maxlength=\"1\" />\r\n              </div>\r\n              <div>\r\n                <label for=\"firstName\">First Name<span class=\"required\"></span></label>\r\n                <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                  <input matInput type=\"text\" maxlength=\"50\" formControlName=\"firstName\" required />\r\n                </mat-form-field>\r\n                <span class=\"required\" *ngIf=\"firstName.invalid && firstName.touched\">First Name Required</span>\r\n              </div>\r\n\r\n              <div>\r\n                <label>M.I.</label>\r\n                <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                  <input matInput type=\"text\" maxlength=\"1\" formControlName=\"middleName\" />\r\n                </mat-form-field>\r\n              </div>\r\n\r\n              <div>\r\n                <label>Last Name<span class=\"required\"></span></label>\r\n                <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                  <input matInput type=\"text\" maxlength=\"50\" formControlName=\"lastName\" required />\r\n                </mat-form-field>\r\n                <span class=\"required\" *ngIf=\"lastName.invalid && lastName.touched\">Last Name Required</span>\r\n              </div>\r\n              <div>\r\n                <drdp-select-suffix [initialSuffix]=\"suffix.value\" (suffix)=\"handleSuffix($event)\">\r\n                </drdp-select-suffix>\r\n              </div>\r\n              <div>\r\n                <label>Work Title</label>\r\n                <mat-form-field class=\"bg-white w-full mt-2\" appearance=\"fill\">\r\n                  <input matInput type=\"text\" maxlength=\"50\" formControlName=\"jobTitle\"/>\r\n                </mat-form-field>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </div>\r\n      <div class=\"flex flex-row-reverse\">\r\n        <!-- Validators are 8 characters min, All inputs required and passwords have to match -->\r\n        <drdp-btn type=\"submit\" (click)=\"onSubmit()\">Save Changes</drdp-btn>\r\n\r\n        <drdp-btn color=\"cancel\" class=\"mr-6\" routerLink=\"/user-profile\">Cancel</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n</div>","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport {\r\n  FormBuilder,\r\n  FormGroup,\r\n  Validators,\r\n  FormControl,\r\n  AbstractControl,\r\n} from '@angular/forms';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-edit-user-profile',\r\n  templateUrl: './edit-user-profile.component.html',\r\n  styleUrls: ['./edit-user-profile.component.scss'],\r\n})\r\nexport class EditUserProfileComponent implements OnInit {\r\n  editUserForm: FormGroup | any;\r\n  submitAttempt = false;\r\n  private subscriptions = new Subscription();\r\n\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  dropDownForm: FormGroup | any;\r\n  user: any;\r\n  userInfo = {} as ILoginResponse;\r\n\r\n  constructor(\r\n    public lookup: LookupService,\r\n    private authService: AuthService,\r\n    private userService: UserService,\r\n    private updateUserService: UserService,\r\n    private toast: ToastService,\r\n    private fb: FormBuilder,\r\n    private router: Router\r\n  ) {}\r\n\r\n  get emailName() {\r\n    return this.editUserForm.get('emailName');\r\n  }\r\n  get firstName() {\r\n    return this.editUserForm.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.editUserForm.get('lastName');\r\n  }\r\n  get middleName() {\r\n    return this.editUserForm.get('middleName');\r\n  }\r\n  get jobTitle() {\r\n    return this.editUserForm.get('jobTitle');\r\n  }\r\n  get suffix() {\r\n    return this.editUserForm.get('suffix');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.getUserData();\r\n  }\r\n\r\n  initializeForms() {\r\n    this.editUserForm = this.fb.group({\r\n      emailName: [\r\n        '',\r\n        [Validators.email, Validators.required, Validators.maxLength(100)],\r\n      ],\r\n      firstName: ['', [Validators.required, Validators.maxLength(50)]],\r\n      lastName: ['', [Validators.required, Validators.maxLength(50)]],\r\n      middleName: ['', [Validators.maxLength(1)]],\r\n      jobTitle: [''],\r\n      suffix: [''],\r\n    });\r\n  }\r\n\r\n  invalid(control: AbstractControl) {\r\n    if (\r\n      control === undefined ||\r\n      control == null ||\r\n      typeof control === 'undefined'\r\n    ) {\r\n      return false;\r\n    } else {\r\n      return (\r\n        (!control.valid && control.touched) ||\r\n        (!control.valid && control.untouched && this.submitAttempt)\r\n      );\r\n    }\r\n  }\r\n\r\n  validateAllFormFields(formGroup: FormGroup) {\r\n    Object.keys(formGroup.controls).forEach((field) => {\r\n      const control = formGroup.get(field);\r\n      if (control instanceof FormControl) {\r\n        control.markAsTouched({ onlySelf: true });\r\n      } else if (control instanceof FormGroup) {\r\n        this.validateAllFormFields(control);\r\n      }\r\n    });\r\n  }\r\n\r\n  getUserData() {\r\n    this.subscriptions.add(\r\n      this.userService\r\n        .getUserById(this.authService.getCurrentUser().userId)\r\n        .subscribe((res) => {\r\n          this.user = res;\r\n          this.editUserForm.controls['firstName'].setValue(this.user.firstName);\r\n          this.editUserForm.controls['emailName'].setValue(this.user.emailName);\r\n          this.editUserForm.controls['middleName'].setValue(\r\n            this.user.middleName\r\n          );\r\n          this.editUserForm.controls['lastName'].setValue(this.user.lastName);\r\n          this.editUserForm.controls['jobTitle'].setValue(this.user.jobTitle);\r\n          this.editUserForm.controls['suffix'].setValue(this.user.suffix);\r\n        })\r\n    );\r\n  }\r\n\r\n  handleSuffix(event: any) {\r\n    this.suffix.setValue(event?.name);\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.editUserForm.invalid) {\r\n      this.toast.error('Form not complete');\r\n      return;\r\n    }\r\n  \r\n    this.submitAttempt = true;\r\n  \r\n    const updateUserInfo = {\r\n      UserId: this.authService.getCurrentUser().userId,\r\n      FirstName: this.editUserForm.get('firstName').value,\r\n      EmailName: this.editUserForm.get('emailName').value,\r\n      LastName: this.editUserForm.get('lastName').value,\r\n      MiddleName: this.editUserForm.get('middleName').value,\r\n      JobTitle: this.editUserForm.get('jobTitle').value,\r\n      Suffix: this.editUserForm.get('suffix').value,\r\n    };\r\n  \r\n    this.subscriptions.add(\r\n      this.updateUserService.updateUserDemographics(updateUserInfo)\r\n        .subscribe((success: boolean) => {\r\n          if (success) {\r\n            this.toast.success('User profile updated successfully.');\r\n            this.router.navigateByUrl('/user-profile');\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"flex flex-row p-2\">\r\n  <h1 class=\"userProfile font-semibold\">Change Password</h1>\r\n</div>\r\n<div class=\"place-content-center mr-5\">\r\n  <drdp-container>\r\n    <div class=\"w-full\">\r\n      <div\r\n      class=\"\r\n      lg:flex\r\n      place-content-between place-items-start\r\n      border-b border-drdpgrey-100\r\n      self-center\r\n      hidden\r\n    \">\r\n    <h1 class=\"information font-semibold mb-2\">User Password</h1>\r\n  </div>\r\n\r\n      <form\r\n        [formGroup]=\"passwordForm\"\r\n        (ngSubmit)=\"onSubmit()\"\r\n      >\r\n        <div class=\"pt-5\">\r\n          <label>Current Password <span class=\"required\"></span> </label>\r\n          <div class=\"grid grid-rows-1 h-10\">\r\n            <div class=\"grid grid-cols-2\">\r\n              <div class=\"border-b-1 border-gray-500\">\r\n                <mat-form-field class=\"bg-white w-full\" appearance=\"fill\">\r\n                  <input\r\n                    matInput\r\n                    autocomplete=\"off\"\r\n                    type=\"password\"\r\n                    formControlName=\"oldPassword\"\r\n                    [maxlength]=\"50\"\r\n                    required\r\n                    InputText\r\n                    [type]=\"hidden ? 'password' : 'text'\"\r\n                  />\r\n                </mat-form-field>\r\n              </div>\r\n              <div class=\"items-center flex\">\r\n                <i\r\n                  class=\"mx-1 uil\"\r\n                  (click)=\"hidden = !hidden\"\r\n                  [ngClass]=\"{ 'uil-eye-slash': hidden, 'uil-eye': !hidden }\"\r\n                >\r\n                </i>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <mat-error class=\"errorMsg z-10 relative\" *ngIf=\"invalid(passwordForm.get('oldPassword'))\"\r\n            >Current Password is required</mat-error\r\n          >\r\n\r\n          <div class=\"pt-10\">\r\n            <div class=\"grid-cols-1\">\r\n              <label>New Password <span class=\"required\"></span></label>\r\n              <div class=\"grid grid-rows-1 h-10\">\r\n                <div class=\"grid grid-cols-2\">\r\n                  <div class=\"border-b-1 border-gray-500\">\r\n                    <mat-form-field class=\"bg-white email w-full\" appearance=\"fill\">\r\n                      <input\r\n                        matInput\r\n                        autocomplete=\"off\"\r\n                        type=\"password\"\r\n                        formControlName=\"newPassword\"\r\n                        [maxlength]=\"50\"\r\n                        required\r\n                        InputText\r\n                        [type]=\"confirmHidden ? 'password' : 'text'\"\r\n                      />\r\n                    </mat-form-field>\r\n                  </div>\r\n                  <div class=\"items-center flex\">\r\n                    <i\r\n                      class=\"mx-1 uil\"\r\n                      (click)=\"confirmHidden = !confirmHidden\"\r\n                      [ngClass]=\"{ 'uil-eye-slash': confirmHidden, 'uil-eye': !confirmHidden }\"\r\n                    >\r\n                    </i>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <mat-error class=\"errorMsg z-10 relative\" *ngIf=\"invalid(passwordForm.get('newPassword'))\">\r\n              New Password must be a minimum of 8 alpha-numeric characters with\r\n              at least 1 special character.\r\n            </mat-error>\r\n          </div>\r\n\r\n          <div class=\"pt-10\">\r\n            <label>Confirm New Password <span class=\"required\"></span></label>\r\n            <div class=\"grid grid-rows-1 h-10\">\r\n              <div class=\"grid grid-cols-2\">\r\n                <div class=\"border-b-.5 border-gray-500\">\r\n                  <mat-form-field class=\"bg-white email w-full\" appearance=\"fill\">\r\n                    <input\r\n                      matInput\r\n                      autocomplete=\"off\"\r\n                      type=\"password\"\r\n                      formControlName=\"confirmPassword\"\r\n                      [maxlength]=\"50\"\r\n                      required\r\n                      pInputText\r\n                      [type]=\"hiddenConfirm ? 'password' : 'text'\"\r\n                    />\r\n                  </mat-form-field>\r\n                </div>\r\n                <div class=\"items-center flex\">\r\n                  <i\r\n                    class=\"mx-1 uil\"\r\n                    (click)=\"hiddenConfirm = !hiddenConfirm\"\r\n                    [ngClass]=\"{ 'uil-eye-slash': hiddenConfirm, 'uil-eye': !hiddenConfirm }\"\r\n                  >\r\n                  </i>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <mat-error class=\"errorMsg z-10 relative\" *ngIf=\"invalid(passwordForm.get('confirmPassword'))\">\r\n              New Password and Confirm Password do not match.\r\n            </mat-error>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"flex justify-end mt-4\">\r\n          <drdp-btn type=\"submit\">Change Password</drdp-btn>\r\n          <drdp-btn color=\"cancel\" class=\"ml-3 mr-6\" routerLink=\"/user-profile\"\r\n            >Cancel</drdp-btn>\r\n        </div>\r\n\r\n      </form>\r\n\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormGroup,\r\n  AbstractControl,\r\n  Validators,\r\n  FormControl,\r\n} from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { EncryptionService } from '@core/services/encryption.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription, take } from 'rxjs';\r\n@Component({\r\n  selector: 'drdp-update-password',\r\n  templateUrl: './update-password.component.html',\r\n  styleUrls: ['./update-password.component.scss'],\r\n})\r\nexport class UpdatePasswordComponent implements OnInit {\r\n  passwordForm: FormGroup | any;\r\n  submitAttempt = false;\r\n  hidden: boolean = true;\r\n  confirmHidden: boolean = true;\r\n  hiddenConfirm: boolean = true;\r\n  private subscriptions = new Subscription();\r\n  userInfo: any;\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private authService: AuthService,\r\n    private toast: ToastService,\r\n    private encryptionService: EncryptionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.passwordForm = this.fb.group({\r\n      oldPassword: [null, [Validators.required]],\r\n      newPassword: [\r\n        null,\r\n        Validators.compose([Validators.required, Validators.minLength(6), Validators.maxLength(50), this.passwordValidator]),\r\n      ],\r\n      confirmPassword: [\r\n        null,\r\n        Validators.compose([\r\n          Validators.required,\r\n          Validators.minLength(6),\r\n          Validators.maxLength(50),\r\n          (control) => this.compareValidator(control, 'newPassword'),\r\n        ]),\r\n      ],\r\n    });\r\n  }\r\n\r\n  invalid(control: AbstractControl) {\r\n    if (\r\n      control === undefined ||\r\n      control == null ||\r\n      typeof control === 'undefined'\r\n    ) {\r\n      return false;\r\n    } else {\r\n      return (\r\n        (!control.valid && control.touched) ||\r\n        (!control.valid && control.untouched && this.submitAttempt)\r\n      );\r\n    }\r\n  }\r\n\r\n  passwordValidator(control: AbstractControl) {\r\n    // {6,100}           - Assert password is between 8 and 50 characters\r\n    // (?=.*[0-9])       - Assert a string has at least one number\r\n    if (String(control.value).match(/^(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{8,50}$/)) {\r\n      return null;\r\n    } else {\r\n      // Password must be at least 6 characters long, and contain a number.\r\n      return { invalid: true };\r\n    }\r\n  }\r\n\r\n  compareValidator(control: AbstractControl, otherControlName: string) {\r\n    if (!control.parent) {\r\n      return null;\r\n    }\r\n    const otherControl = control.parent.get(otherControlName) as FormControl;\r\n\r\n    let thisControl = control;\r\n\r\n    if (!thisControl) {\r\n      if (!otherControl) {\r\n        throw new Error(\r\n          'compareValidator(): other control is not found in parent group'\r\n        );\r\n      }\r\n      this.subscriptions.add(\r\n        otherControl.valueChanges.subscribe(() => {\r\n          thisControl.updateValueAndValidity();\r\n        }));\r\n    }\r\n    if (!otherControl) {\r\n      return null;\r\n    }\r\n    if (otherControl.value !== thisControl.value) {\r\n      return {\r\n        invalid: true,\r\n      };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  onSubmit() {\r\n    this.submitAttempt = true;\r\n    if (this.passwordForm.invalid) {\r\n      this.validateAllFormFields(this.passwordForm);\r\n    } else {\r\n      var updatePassword = {\r\n        OldPassword: this.encryptionService.encryptPassword(this.passwordForm.get('oldPassword').value),\r\n        NewPassword: this.encryptionService.encryptPassword(this.passwordForm.get('newPassword').value),\r\n        UserId: this.authService.getCurrentUser().userId,\r\n      };\r\n\r\n      this.authService.updatePassword(updatePassword, 'Password has been updated.').pipe(take(1)).subscribe((success) => {\r\n        if (success) {\r\n          this.logout();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  validateAllFormFields(formGroup: FormGroup) {\r\n    Object.keys(formGroup.controls).forEach((field) => {\r\n      const control = formGroup.get(field);\r\n      if (control instanceof FormControl) {\r\n        control.markAsTouched({ onlySelf: true });\r\n      } else if (control instanceof FormGroup) {\r\n        this.validateAllFormFields(control);\r\n      }\r\n    });\r\n  }\r\n\r\n  logout(): void {\r\n    const currentUser = this.authService.getCurrentUser();\r\n    if (currentUser) this.authService.logout().pipe(take(1)).subscribe();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"flex flex-col w-96\" id=\"completeEnrollmentDialog\">\r\n  <div class=\"flex flex-row justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">\r\n      <span>\r\n        Complete Enrollment\r\n      </span>\r\n    </h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 gap-x-10 my-8\" [formGroup]=\"assignStudentForm\">\r\n      <drdp-classroom-rating-period-params (formValues)=\"handleDropdownSelection($event)\" [isDropdownRequired]=\"isDropdownRequired\"\r\n        class=\"contents\" [omitFutureRps]=\"true\">\r\n      </drdp-classroom-rating-period-params>\r\n      <div class=\"self-end z-30\">\r\n        <drdp-date-picker label=\"Classroom Enrollment Date\"\r\n                          [initialDate]=\"classEnrollmentDate?.value\"\r\n                          labelClasses=\"pb-1\"\r\n                          [isRequired]=\"true\"\r\n                          (emitDate)=\"handleDate($event)\">\r\n        </drdp-date-picker>\r\n        <mat-error *ngIf=\"classEnrollmentDate.hasError('dateRange')\" class=\"text-xs\">\r\n          Date must be between rating period's min and max dates.\r\n        </mat-error>\r\n\r\n        <mat-error *ngIf=\"classEnrollmentDate.hasError('agencyDate')\" class=\"text-xs\">\r\n          Date cannot be before the agency enrollment date.\r\n        </mat-error>\r\n\r\n\r\n      </div>\r\n    </form>\r\n    <hr>\r\n    <div class=\"mt-10 mb-2 flex justify-end\">\r\n      <drdp-btn class=\"pr-4\" color=\"cancel\" mat-dialog-close type=\"button\">\r\n        Cancel\r\n      </drdp-btn>\r\n      <drdp-btn type=\"submit\" (click)=\"onSubmit()\" [disabled]=\"!assignStudentForm.valid\" cdkFocusInitial>\r\n        Save & Enroll\r\n      </drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, Inject, ViewChild, Input } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { IClass } from '@core/interfaces/iclasses';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\n\r\n@Component({\r\n  selector: 'drdp-assign-child',\r\n  templateUrl: './assign-child.component.html',\r\n  styleUrls: [\r\n    './assign-child.component.scss',\r\n    './../add-new-child.component.scss',\r\n    './../../../../shared/components/drdp-tables/add-edit/add-edit.component.scss',\r\n  ],\r\n})\r\nexport class AssignChildComponent implements OnInit {\r\n  @Input() enrollDroppedChild: boolean = false;\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  get siteId() {\r\n    return this.assignStudentForm.get('siteId');\r\n  }\r\n  get agencyId() {\r\n    return this.assignStudentForm.get('agencyId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.assignStudentForm.get('ratingPeriodId');\r\n  }\r\n  get classId() {\r\n    return this.assignStudentForm.get('classId');\r\n  }\r\n  get classEnrollmentDate() {\r\n    return this.assignStudentForm.get('classEnrollmentDate');\r\n  }\r\n\r\n  classroomPlaceholder: string = 'Set site for classroom options';\r\n  rpPlaceholder: string = 'Set agency for rating periods';\r\n  sitePlaceholder: string = 'Set agency for sites';\r\n  currentYear: number = 0;\r\n  assignStudentForm: FormGroup | any;\r\n  sites: ISites[] = [];\r\n  ratingPeriods: IRatingPeriod[] = [];\r\n  classrooms: IClass[] = [];\r\n  optionsLoaded: boolean = false;\r\n  selectedRpMinDate!: Date;\r\n  selectedRpMaxDate!: Date;\r\n  isSubmitting: boolean = false;\r\n  private subscriptions = new Subscription();\r\n\r\n  user: ILoginResponse = this.auth.getCurrentUser();\r\n  stateSearchId? = this.user.stateId;\r\n  userAgencyId? = this.user.agencyId;\r\n\r\n  assignmentDropdowns$!: Observable<any>;\r\n  initialAgencyId!: number;\r\n  canViewMultipleAgencies!: boolean;\r\n  selectClass = SelectType.Class;\r\n\r\n  addStudentPayload: any | undefined = null;\r\n\r\n  isDropdownRequired = {\r\n    ratingPeriod: true,\r\n    site: true,\r\n    classroom: true,\r\n  };\r\n\r\n  constructor(\r\n    public fb: FormBuilder,\r\n    public lookup: LookupService,\r\n    public agency: AgencyService,\r\n    public siteService: SiteService,\r\n    public auth: AuthService,\r\n    public ratingPeriod: RatingPeriodService,\r\n    public classroomService: ClassroomService,\r\n    public classService: ClassService,\r\n    public student: StudentService,\r\n    public studentClassEnrollment: StudentClassEnrollmentService,\r\n    public toastService: ToastService,\r\n    public dialogRef: MatDialogRef<AssignChildComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public addChildFormData: any\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.addStudentPayload = this.addChildFormData;\r\n    this.initializeForm();\r\n    this.canViewMultipleAgencies =\r\n      this.auth.isSuperAdmin() || this.auth.isCustomerService();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.assignStudentForm = this.fb.group({\r\n      agencyId: [null, [Validators.required]],\r\n      siteId: [null, Validators.required],\r\n      ratingPeriodId: [null, Validators.required],\r\n      classId: [null, Validators.required],\r\n      classEnrollmentDate: [null, [Validators.required]],\r\n    });\r\n  }\r\n\r\n  handleDropdownSelection(event: any): void {\r\n    this.agencyId.setValue(event?.agencyId);\r\n    this.siteId.setValue(event?.siteId);\r\n    this.classId.setValue(event?.classroomId);\r\n    this.ratingPeriodId.setValue(event?.ratingPeriodId);\r\n    this.selectedRpMinDate = event?.ratingPeriodMinDate;\r\n    this.selectedRpMaxDate = event?.ratingPeriodMaxDate;\r\n    this.validateDate();\r\n  }\r\n\r\n  validateDate() {\r\n    const classEnrollmentDateValue = this.classEnrollmentDate.value;\r\n    if (classEnrollmentDateValue) {\r\n      const classroomEnrollmentDate = new Date(classEnrollmentDateValue).getTime();\r\n      const agencyEnrollmentDate = new Date(this.addStudentPayload.enrollmentStartDate).getTime();\r\n\r\n      if (classroomEnrollmentDate < agencyEnrollmentDate) {\r\n        this.classEnrollmentDate.setErrors({agencyDate: true });\r\n      } else if (this.ratingPeriodId.value) {\r\n        const enrollmentDate = new Date(classEnrollmentDateValue);\r\n        enrollmentDate.setHours(0, 0, 0, 0);\r\n        const classEnrollmentDate = enrollmentDate.getTime();\r\n        if ( classEnrollmentDate < this.selectedRpMinDate.getTime() || classEnrollmentDate > this.selectedRpMaxDate.getTime()) {\r\n          this.classEnrollmentDate.setErrors({ dateRange: true });\r\n        } else {\r\n          this.classEnrollmentDate.setErrors(null);\r\n        }\r\n      } else {\r\n        this.classEnrollmentDate.setErrors(null);\r\n      }\r\n    }\r\n  }\r\n\r\n  onSubmit(): void {\r\n    if (this.isSubmitting) return;\r\n    if (!this.assignStudentForm.valid) {\r\n      this.toastService.error('Please complete the form before submitting.');\r\n      return;\r\n    }\r\n    this.isSubmitting = true;\r\n    if (this.addStudentPayload.enrollDroppedChild) {\r\n      const payload = {\r\n        drdpId: this.addStudentPayload.drdpId,\r\n        classId: this.classId.value,\r\n        ratingPeriodId: this.ratingPeriodId.value,\r\n        classEnrollmentDate: this.classEnrollmentDate.value,\r\n        agencyId: this.agencyId.value,\r\n        agencyStartDate: this.addStudentPayload.enrollmentStartDate\r\n      };\r\n\r\n      this.subscriptions.add(\r\n        this.studentClassEnrollment\r\n          .enrollDroppedChild(payload)\r\n          .subscribe((success: boolean) => {\r\n            if (success) this.dialogRef.close(true);\r\n            else this.isSubmitting = false;\r\n          })\r\n      );\r\n    } else {\r\n      this.addStudentPayload.studentClassEnrollments = [\r\n        this.assignStudentForm.value,\r\n      ];\r\n\r\n      this.subscriptions.add(\r\n        this.student\r\n          .addAndEnrollStudent(this.addStudentPayload)\r\n          .subscribe((res: any) => {\r\n            if (res > 0) {\r\n              this.dialogRef.close(res);\r\n            } else {\r\n              this.isSubmitting = false;\r\n            }\r\n          })\r\n      );\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.classEnrollmentDate.setValue(event);\r\n    this.validateDate();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","export enum EnrollmentProgram {\r\n    other = 10,\r\n    otherNH = 45\r\n}\r\n","export enum DemographicSections {\r\n    childInformation = 1,\r\n    childRaceEthnicity = 2,\r\n    childLanguageInfo = 3,\r\n    childProgramInfo = 4,\r\n    specialEdInfo = 5\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'option'\r\n})\r\nexport class OptionPipe implements PipeTransform {\r\n  transform(optionText: string, by: string): string[] {\r\n    return optionText.split(by);\r\n  }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\n\r\n@Pipe({\r\n  name: 'groupDemographicSection'\r\n})\r\nexport class GroupDemographicSectionPipe implements PipeTransform {\r\n  transform(collection: IStateConfiguration[] | null, by: number): any {\r\n    if (collection) return collection.filter(item => item.sectionId === by && item.isActive);\r\n  }\r\n}","<div class=\"flex flex-col p-5 justify-center\">\r\n  <drdp-title title=\"Add New Child\" class=\"pt-5\"></drdp-title>\r\n  <drdp-container [additionClasses]=\"'mx-auto flex p-8 mb-5'\">\r\n    <form (ngSubmit)=\"validateFormData($event)\">\r\n      <ng-container [formGroup]=\"addChildForm\">\r\n        <h2 class=\"font-semibold text-lg\">Child Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal required\" for=\"firstName\"\r\n              >First Name</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"First Name\"\r\n                matInput\r\n                autocomplete=\"given-name\"\r\n                type=\"text\"\r\n                formControlName=\"firstName\"\r\n                maxlength=\"50\"\r\n                required\r\n              />\r\n              <mat-error *ngIf=\"firstName.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"middleInitial\"\r\n              >Middle Initial</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"Middle Initial\"\r\n                matInput\r\n                autocomplete=\"off\"\r\n                type=\"text\"\r\n                formControlName=\"middleInitial\"\r\n                maxlength=\"2\"\r\n              />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal required\" for=\"lastName\">Last Name</label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"Last Name\"\r\n                matInput\r\n                autocomplete=\"family-name\"\r\n                type=\"text\"\r\n                formControlName=\"lastName\"\r\n                maxlength=\"50\"\r\n                required\r\n              />\r\n              <mat-error *ngIf=\"lastName.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"SSID\">\r\n              {{ ssidLabel }}\r\n              <span class=\"required\"></span>\r\n              <br />\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"Required if Agency/District ID is blank\"\r\n                matInput\r\n                autocomplete=\"off\"\r\n                type=\"text\"\r\n                formControlName=\"SSID\"\r\n                [maxlength]=\"ssidmaxLength\"\r\n              />\r\n              <mat-error *ngIf=\"SSID.hasError('pattern')\"\r\n                >{{ ssidPatternErrorMsg }}</mat-error\r\n              >\r\n              <mat-error *ngIf=\"SSID.hasError('required')\"\r\n                >{{ ssidLocalIdReqErrorMsg }}</mat-error\r\n              >\r\n              <mat-error *ngIf=\"SSID.hasError('duplicateSSID')\"\r\n                >{{ ssidErrorMsg }}</mat-error\r\n              >\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"localID\">\r\n              {{ agencySidLabel }}\r\n              <span class=\"required\"></span>\r\n              <br />\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"Required if Statewide Student Identifier is blank\"\r\n                matInput\r\n                autocomplete=\"off\"\r\n                type=\"text\"\r\n                formControlName=\"localID\"\r\n                maxlength=\"25\"\r\n              />\r\n              <mat-error *ngIf=\"localID.hasError('required')\"\r\n                >{{ ssidLocalIdReqErrorMsg }}</mat-error\r\n              >\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-date-picker\r\n              label=\"DOB\"\r\n              [initialDate]=\"dob?.value\"\r\n              [isReadOnly]=\"false\"\r\n              [isRequired]=\"true\"\r\n              labelClasses=\"pb-5 mb-5\"\r\n              (emitDate)=\"handleDate($event, 'dob')\"\r\n            >\r\n            </drdp-date-picker>\r\n          </div>\r\n          <div>\r\n            <drdp-select-age-grade\r\n              #ageGroupInstrumentSelect\r\n              [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n              (ageGrade)=\"handleAgeGrade($event)\"\r\n              [stateId]=\"userStateId\"\r\n              [multiSelect]=\"false\"\r\n              [required]=\"true\"\r\n              label=\"Child Age/Grade Instrument\"\r\n            >\r\n            </drdp-select-age-grade>\r\n          </div>\r\n          <div>\r\n            <label class=\"font-normal\" for=\"socialEconomic\"\r\n              >Child's Socioeconomic Status</label\r\n            >\r\n            <mat-checkbox\r\n              [color]=\"'primary'\"\r\n              class=\"example-margin font-normal\"\r\n              formControlName=\"socialEconomic\"\r\n            >\r\n              Qualify for free or reduced meals?\r\n            </mat-checkbox>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <div class=\"col-span-1 col-end-3\">\r\n              <label class=\"font-normal required\" for=\"genderID\">Gender</label>\r\n              <mat-radio-group\r\n                aria-label=\"Select an option\"\r\n                formControlName=\"genderID\"\r\n              >\r\n                <mat-radio-button\r\n                  [color]=\"'primary'\"\r\n                  *ngFor=\"let g of genders\"\r\n                  [value]=\"g.id\"\r\n                >\r\n                  {{ g.genderName }}\r\n                </mat-radio-button>\r\n                <mat-error *ngIf=\"genderID.touched && genderID.invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-radio-group>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 md:pt-4 py-5\"\r\n        >\r\n          <div\r\n            *ngFor=\"\r\n              let custom of customStateConfig\r\n                | groupDemographicSection : demographicSections.childInformation\r\n            \"\r\n          >\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                  multiple\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.text\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"text\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.number\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"number\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.date\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <drdp-date-picker\r\n                [label]=\"custom.label\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"custom.isRequired\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\r\n                \"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">\r\n          Child's Race and Ethnicity Information\r\n        </h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-select-yes-no\r\n              label=\"Is the child Hispanic or Latino?\"\r\n              [initialId]=\"latino.value\"\r\n              [required]=\"true\"\r\n              (optionSelected)=\"handleHispanic($event)\"\r\n              additionalClasses=\"pb-12\"\r\n            >\r\n            </drdp-select-yes-no>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"ethnicities\">\r\n              What is the child's race?\r\n              <span class=\"required\"></span>\r\n              <span class=\"font-normal\">\r\n                Mark one or more races to indicate what the child considers\r\n                himself or herself to be:\r\n              </span>\r\n            </label>\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"ethnicities\"\r\n                multiple\r\n                placeholder=\"Choose all that apply\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let ethnicity of ethnicities\"\r\n                  [value]=\"ethnicity.id\"\r\n                  [disabled]=\"\r\n                    isEthnicityDisabled &&\r\n                    ethnicity.id !== ethnicityvalues.Intentionally_left_blank\r\n                  \"\r\n                  (click)=\"handleChosenEthnicity(ethnicity)\"\r\n                >\r\n                  <span\r\n                    *ngIf=\"isNewHampshire\"\r\n                    [matTooltip]=\"ethnicity.ethnicityName ?? ''\"\r\n                    >{{ ethnicity.ethnicityName }}</span\r\n                  >\r\n                  <span *ngIf=\"!isNewHampshire\">{{\r\n                    ethnicity.ethnicityName\r\n                  }}</span>\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"ethnicity.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n        <div\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8 py-5\"\r\n        >\r\n          <div\r\n            *ngFor=\"\r\n              let custom of customStateConfig\r\n                | groupDemographicSection\r\n                  : demographicSections.childRaceEthnicity\r\n            \"\r\n          >\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                  multiple\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.text\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"text\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.number\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"number\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.date\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <drdp-date-picker\r\n                [label]=\"custom.label\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"custom.isRequired\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\r\n                \"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">Child's Language Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal required\" for=\"languages\"\r\n              >What is the child's home language?</label\r\n            >\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"languages\"\r\n                multiple\r\n                placeholder=\"Choose all that apply\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let language of languagesList\"\r\n                  [value]=\"language.id\"\r\n                >\r\n                  {{ language.languageName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"languages.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-select-yes-no\r\n              label=\"Is a language other than English spoken in the child’s home?\"\r\n              [initialId]=\"eld.value\"\r\n              [required]=\"true\"\r\n              (optionSelected)=\"handleEld($event)\"\r\n            >\r\n            </drdp-select-yes-no>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 py-5\">\r\n          <div\r\n            *ngFor=\"\r\n              let custom of customStateConfig\r\n                | groupDemographicSection\r\n                  : demographicSections.childLanguageInfo\r\n            \"\r\n          >\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                  multiple\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.text\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"text\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.number\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"number\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.date\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <drdp-date-picker\r\n                [label]=\"custom.label\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"custom.isRequired\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\r\n                \"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">Child's Program Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal required\" for=\"enrollmentPrograms\">Program Type</label>\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"enrollmentPrograms\"\r\n                [placeholder]=\"enrollmentProgramPlaceholder\"\r\n                multiple\r\n                required=\"true\"\r\n                [disabled]=\"!enrollmentProgramTypesFiltered\"\r\n              >\r\n                <mat-option *ngFor=\"let ept of enrollmentProgramTypesFiltered\" [value]=\"ept.enrollmentProgramId\">\r\n                  {{ ept.enrollmentProgramType?.enrollmentProgramName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"enrollmentPrograms.invalid\"\r\n                >{{ required }}</mat-error\r\n              >\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"!otherRequired\"></div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"otherRequired\">\r\n            <label class=\"font-normal\" for=\"other\"\r\n              >Other<span class=\"required\"></span\r\n            ></label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                matInput\r\n                type=\"text\"\r\n                formControlName=\"other\"\r\n                palceholder=\"Other\"\r\n                aria-label=\"other\"\r\n              />\r\n              <mat-error *ngIf=\"other.invalid\"\r\n                >Field required ('Other' selected as program type).</mat-error\r\n              >\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"relative\">\r\n            <div class=\"form-input-label-group\">\r\n              <drdp-date-picker\r\n                label=\"Agency Enrollment Date\"\r\n                [initialDate]=\"enrollmentStartDate?.value\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"true\"\r\n                (emitDate)=\"handleDate($event, 'enrollmentStartDate')\"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n            <div  class=\"absolute top-0 left-full mt-2 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=agencyEnrollmentInfo></i>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"enrollmentEndDate\">\r\n              Agency Withdrawal Date\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=withdrawlInfo></i>\r\n            </label>\r\n            <mat-form-field\r\n              class=\"bg-white\"\r\n              appearance=\"fill\"\r\n            >\r\n              <input\r\n                matInput\r\n                readonly=true\r\n                type=\"text\"\r\n                [value]=\"enrollmentEndDate.value | date:'MM/dd/yyyy'\"\r\n              />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-select-county\r\n              (county)=\"handleChosenCountyOfProgram($event)\"\r\n              [stateId]=\"userStateId\"\r\n              [initialCountyIds]=\"initialCountyId\"\r\n              label=\"County of Program\"\r\n              [multiSelect]=\"false\"\r\n            >\r\n            </drdp-select-county>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-select-county\r\n              (county)=\"handleChosenCountyOfResidence($event)\"\r\n              [stateId]=\"userStateId\"\r\n              label=\"County of Residence\"\r\n              [multiSelect]=\"false\"\r\n            >\r\n            </drdp-select-county>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"tuitionFeeId\"\r\n              >Child's tuition fees are:</label\r\n            >\r\n            <mat-checkbox-group\r\n              aria-label=\"Select an option\"\r\n              class=\"flex flex-col\"\r\n            >\r\n              <mat-checkbox\r\n                class=\"rounded-checkboxes mb-3\"\r\n                [color]=\"'primary'\"\r\n                [checked]=\"tuitionFeeId.value == tf.id\"\r\n                *ngFor=\"let tf of tuitionFee\"\r\n                (change)=\"deselectCheck(tf.id)\"\r\n              >\r\n                {{ tf.tuitionFeeName }}\r\n              </mat-checkbox>\r\n            </mat-checkbox-group>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 py-5\">\r\n          <div\r\n            *ngFor=\"\r\n              let custom of customStateConfig\r\n                | groupDemographicSection : demographicSections.childProgramInfo\r\n            \"\r\n          >\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                  multiple\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.text\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"text\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.number\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"number\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.date\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <drdp-date-picker\r\n                [label]=\"custom.label\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"custom.isRequired\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\r\n                \"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">Special Education Information</h2>\r\n        <div\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pb-4 md:pb-8\"\r\n        >\r\n          <div class=\"form-input-label-group\">\r\n            <drdp-select-iep-plan\r\n              [initialId]=\"iepPlanId.value\"\r\n              [required]=\"true\"\r\n              (optionSelected)=\"handleIep($event)\"\r\n            >\r\n            </drdp-select-iep-plan>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isPrimaryDisabilityEnabled\"\r\n          >\r\n            <label class=\"font-normal\" for=\"primaryDisabilityId\"\r\n              >Primary Disability</label\r\n            >\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"primaryDisabilityId\"\r\n                placeholder=\"Primary Disability\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let disability of disabilities\"\r\n                  [value]=\"disability.id\"\r\n                >\r\n                  {{ disability.primaryDisabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" class=\"self-end hidden md:block\"></div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isDistrictLiabilityEnabled\"\r\n          >\r\n            <label class=\"font-normal\" for=\"districtOfLiabilityId\"\r\n              [ngClass]=\"{'required': isNewHampshire && iepPlanId.value == iepPlan.Yes}\">District of Liability</label\r\n            >\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"districtOfLiabilityId\"\r\n                placeholder=\"District of Liability\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let dol of districtsOfLiability\"\r\n                  [value]=\"dol.id\"\r\n                >\r\n                  {{ dol.districtOfLiabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"districtOfLiabilityId.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" \r\n            class=\"form-input-label-group\">\r\n            <label class=\"font-normal\"\r\n              >District ID</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"District ID\"\r\n                matInput\r\n                type=\"text\"\r\n                [value]=\"districtId\"\r\n                readonly=\"true\"\r\n              />\r\n            </mat-form-field>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" \r\n            class=\"form-input-label-group\">\r\n            <label class=\"font-normal\"\r\n              >SAU ID</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                placeholder=\"SAU ID\"\r\n                matInput\r\n                type=\"text\"\r\n                [value]=\"sauId\"\r\n                readonly=\"true\"\r\n              />\r\n            </mat-form-field>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isSelpaEnabled\"\r\n          >\r\n            <drdp-select-selpa\r\n              (selpa)=\"handleChosenSelpa($event)\"\r\n              additionalClasses=\"pb-12\"\r\n            >\r\n            </drdp-select-selpa>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"adaptations\">Adaptations</label>\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"adaptations\"\r\n                multiple\r\n                placeholder=\"Choose all that apply\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let adaptation of adaptations\"\r\n                  [value]=\"adaptation.id\"\r\n                  >{{ adaptation.adaptationTypeName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isSpecialEdEntryEnabled\"\r\n          >\r\n            <drdp-date-picker\r\n              label=\"Special Education Entry Date\"\r\n              [initialDate]=\"seEntryDate?.value\"\r\n              [isReadOnly]=\"false\"\r\n              [isRequired]=\"iepPlanId.value == iepPlan.Yes\"\r\n              labelClasses=\"pb-10 mb-5\"\r\n              (emitDate)=\"handleDate($event, 'seEntryDate')\"\r\n            >\r\n            </drdp-date-picker>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isAnticipatedDateEnabled\"\r\n          >\r\n            <drdp-date-picker\r\n              label=\"Special Education Anticipated Exit Date\"\r\n              [initialDate]=\"seAnticipateExitDate?.value\"\r\n              [isReadOnly]=\"false\"\r\n              labelClasses=\"pb-5 mb-5\"\r\n              (emitDate)=\"handleDate($event, 'seAnticipateExitDate')\"\r\n            >\r\n            </drdp-date-picker>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isSpecialEdExitEnabled\"\r\n          >\r\n            <label class=\"font-normal\" for=\"seExitDate\">\r\n              Special Education Exit Date\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=\"specialEdExitInfo\"></i>\r\n            </label>\r\n            <mat-form-field\r\n              class=\"bg-white md:pb-2\"\r\n              appearance=\"fill\"\r\n            >\r\n              <input\r\n                matInput\r\n                readonly=true\r\n                type=\"text\"\r\n                [value]=\"seExitDate?.value | date:'MM/dd/yyyy'\"\r\n              />\r\n            </mat-form-field>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isInitialAssessmentToolEnabled\">\r\n            <drdp-select-initial-assessment-tool-type\r\n              label=\"Initial Assessment Tool\"\r\n              [initialId]=\"initialAssessmentToolId?.value\"\r\n              (optionSelected)=\"handleInitAssessment($event)\"\r\n              additionalClasses=\"pb-12\">\r\n            </drdp-select-initial-assessment-tool-type>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isOutcome1Enabled\">\r\n            <drdp-select-outcome\r\n              label=\"Outcome 1\"\r\n              [initialId]=\"outcome1Id?.value\"\r\n              (optionSelected)=\"handleOutcome($event, 'outcome1Id')\">\r\n            </drdp-select-outcome>\r\n            </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isOutcome2Enabled\">\r\n            <drdp-select-outcome\r\n              label=\"Outcome 2\"\r\n              [initialId]=\"outcome2Id?.value\"\r\n              (optionSelected)=\"handleOutcome($event, 'outcome2Id')\">\r\n            </drdp-select-outcome>\r\n            </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isOutcome3Enabled\">\r\n            <drdp-select-outcome\r\n              label=\"Outcome 3\"\r\n              [initialId]=\"outcome3Id?.value\"\r\n              (optionSelected)=\"handleOutcome($event, 'outcome3Id')\">\r\n            </drdp-select-outcome>\r\n          </div>\r\n        </div>\r\n        <div\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8 py-5\"\r\n        >\r\n          <div\r\n            *ngFor=\"\r\n              let custom of customStateConfig\r\n                | groupDemographicSection : demographicSections.specialEdInfo\r\n            \"\r\n          >\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select\r\n                  [formControlName]=\"custom.label\"\r\n                  placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                  multiple\r\n                >\r\n                  <mat-option\r\n                    *ngFor=\"let option of custom.options | option : '|'\"\r\n                    [value]=\"option\"\r\n                  >\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.text\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"text\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.number\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <label\r\n                class=\"font-normal\"\r\n                [ngClass]=\"{ required: custom.isRequired }\"\r\n                [for]=\"custom.label\"\r\n                >{{ custom.label }}</label\r\n              >\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input\r\n                  placeholder=\"\"\r\n                  matInput\r\n                  type=\"number\"\r\n                  [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\r\n                  \"\r\n                />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\"\r\n                  >{{ required }}</mat-error\r\n                >\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div\r\n              [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.date\"\r\n              class=\"form-input-label-group\"\r\n            >\r\n              <drdp-date-picker\r\n                [label]=\"custom.label\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"custom.isRequired\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\r\n                \"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr />\r\n        <div class=\"mt-10 mb-2 flex justify-end\">\r\n          <drdp-btn\r\n            class=\"pr-4\"\r\n            (click)=\"resetAddChildForm()\"\r\n            color=\"cancel\"\r\n            type=\"button\"\r\n          >\r\n            Cancel & Reset\r\n          </drdp-btn>\r\n          <drdp-btn\r\n            [disabled]=\"addChildForm.invalid\"\r\n            type=\"submit\"\r\n            cdkFocusInitial\r\n          >\r\n            Save & Enroll\r\n          </drdp-btn>\r\n        </div>\r\n      </ng-container>\r\n    </form>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { combineLatest, map, Observable, of, Subscription, take } from 'rxjs';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport { IInitialAssessmentToolType, IOutcome, ISelectBoolean } from '@core/interfaces/iselectable';\r\nimport {\r\n  IAgeGradeInstrument,\r\n  IAgeGradeEnrollmentProgramFilter,\r\n} from '@core/interfaces/iage-grade-instrument';\r\nimport { ILanguage } from '@core/interfaces/ilanguage';\r\nimport { IDistrictOfLiability } from '@core/interfaces/idistrict-of-liability';\r\nimport { IAdaptationType } from '@core/interfaces/iadaptation-type';\r\nimport { IEthnicity } from '@core/interfaces/iethnicity';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { IDisability } from '@core/interfaces/idisability';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AssignChildComponent } from './assign-child/assign-child.component';\r\nimport { IGender } from '@core/interfaces/igender';\r\nimport { ITuitionFee } from '@core/interfaces/ituition-fee';\r\nimport { IIepPlan } from '@core/interfaces/iiep-plan';\r\nimport { AgeGradeInstrument } from '@core/enums/age-grade-instruments';\r\nimport { EnrollmentProgram } from '@core/enums/enrollment-programs';\r\nimport { StateService } from '@core/services/state.service';\r\nimport {\r\n  StudentDemographic,\r\n  StudentDemographicEthnicity,\r\n} from '@core/enums/student-demographic-form';\r\nimport { DemographicSections } from '@core/enums/demographic-sections';\r\nimport { DataType, FieldType } from '@core/enums/data-type';\r\nimport { ICustomFieldValue } from '@core/interfaces/icustom-field-value';\r\nimport { IStudentDuplicateValidationDto } from '@core/interfaces/istudent';\r\nimport { IDroppedChild } from '@core/interfaces/idropped-children';\r\nimport { Router } from '@angular/router';\r\nimport { formatDatesToString, replaceWhitespace } from '@core/services/helper.service';\r\nimport { States } from '@core/enums/states';\r\nimport { IepPlan } from '@core/enums/iep-plan';\r\n\r\n@Component({\r\n  selector: 'drdp-add-new-child',\r\n  templateUrl: './add-new-child.component.html',\r\n  styleUrls: [\r\n    './add-new-child.component.scss',\r\n    './../../../shared/components/drdp-tables/add-edit/add-edit.component.scss',\r\n  ],\r\n})\r\nexport class AddNewChildComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n\r\n  get firstName() {\r\n    return this.addChildForm.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.addChildForm.get('lastName');\r\n  }\r\n  get middleInitial() {\r\n    return this.addChildForm.get('middleInitial');\r\n  }\r\n  get SSID() {\r\n    return this.addChildForm.get('SSID');\r\n  }\r\n  get dob() {\r\n    return this.addChildForm.get('dob');\r\n  }\r\n  get genderID() {\r\n    return this.addChildForm.get('genderID');\r\n  }\r\n  get languages() {\r\n    return this.addChildForm.get('languages');\r\n  }\r\n  get eld() {\r\n    return this.addChildForm.get('eld');\r\n  }\r\n  get iepPlanId() {\r\n    return this.addChildForm.get('iepPlanId');\r\n  }\r\n  get localID() {\r\n    return this.addChildForm.get('localID');\r\n  }\r\n  get drdpId() {\r\n    return this.addChildForm.get('drdpId');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.addChildForm.get('ageGradeInstrumentId');\r\n  }\r\n  get enrollmentPrograms() {\r\n    return this.addChildForm.get('enrollmentPrograms');\r\n  }\r\n  get enrollmentStartDate() {\r\n    return this.addChildForm.get('enrollmentStartDate');\r\n  }\r\n  get enrollmentEndDate() {\r\n    return this.addChildForm.get('enrollmentEndDate');\r\n  }\r\n  get seEntryDate() {\r\n    return this.addChildForm.get('seEntryDate');\r\n  }\r\n  get seAnticipateExitDate() {\r\n    return this.addChildForm.get('seAnticipateExitDate');\r\n  }\r\n  get seExitDate() {\r\n    return this.addChildForm.get('seExitDate');\r\n  }\r\n  get ethnicity() {\r\n    return this.addChildForm.get('ethnicities');\r\n  }\r\n  get latino() {\r\n    return this.addChildForm.get('latino');\r\n  }\r\n  get other() {\r\n    return this.addChildForm.get('other');\r\n  }\r\n  get selpaId() {\r\n    return this.addChildForm.get('selpaId');\r\n  }\r\n  get initialAssessmentToolId() {\r\n    return this.addChildForm.get('initialAssessmentToolId');\r\n  }\r\n  get outcome1Id() {\r\n    return this.addChildForm.get('outcome1Id');\r\n  }\r\n  get outcome2Id() {\r\n    return this.addChildForm.get('outcome2Id');\r\n  }\r\n  get outcome3Id() {\r\n    return this.addChildForm.get('outcome3Id');\r\n  }\r\n  get countyId() {\r\n    return this.addChildForm.get('countyId');\r\n  }\r\n  get countyOfResidenceId() {\r\n    return this.addChildForm.get('countyOfResidenceId');\r\n  }\r\n  get tuitionFeeId() {\r\n    return this.addChildForm.get('tuitionFeeId');\r\n  }\r\n  get districtOfLiabilityId() {\r\n    return this.addChildForm.get('districtOfLiabilityId');\r\n  }\r\n  get districtId() {\r\n    return this.districtOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => dol.id === this.districtOfLiabilityId.value)?.districtId || ''\r\n      : '';\r\n  }\r\n  get sauId() {\r\n    return this.districtOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => dol.id === this.districtOfLiabilityId.value)?.sauId || ''\r\n      : '';\r\n  }\r\n\r\n  iepPlan = IepPlan;\r\n  currentSSID!: string;\r\n  currentLocalID!: string;\r\n\r\n  enrollmentProgramPlaceholder: string = 'Select Child Age/Grade Instrument';\r\n\r\n  getFormSelects$: Observable<any> | undefined;\r\n  updateProgramTypesSelect$: Observable<any> | undefined;\r\n\r\n  yesOrNo: ISelectBoolean[] = [];\r\n  ethnicities: IEthnicity[] = [];\r\n  languagesList: ILanguage[] = [];\r\n  counties: ICounty[] = [];\r\n  districtsOfLiability: IDistrictOfLiability[] = [];\r\n  iepPlans: IIepPlan[] = [];\r\n  adaptations: IAdaptationType[] = [];\r\n  enrollmentProgramTypes!: IAgeGradeEnrollmentProgramFilter[];\r\n  enrollmentProgramTypesFiltered!: IAgeGradeEnrollmentProgramFilter[];\r\n  ageGradeInstruments: IAgeGradeInstrument[] = [];\r\n  disabilities: IDisability[] = [];\r\n  genders: IGender[] = [];\r\n  tuitionFee: ITuitionFee[] = [];\r\n  stateConfig: IStateConfiguration[] | null = null;\r\n  customStateConfig: IStateConfiguration[] | null = null;\r\n  droppedChildren: IDroppedChild[] = [];\r\n\r\n  searchValues: any | null = {};\r\n\r\n  addChildForm: FormGroup | any;\r\n  userStateId: number = 0;\r\n  otherRequired: boolean = false;\r\n  EnrollmentProgram = EnrollmentProgram;\r\n  AgeGradeInstrument = AgeGradeInstrument;\r\n  ssidLabel = 'Statewide Student Identifier (10-Digit SSID)';\r\n  ssidmaxLength = 10;\r\n  agencySidLabel = 'Agency/District Student Identifier (Agency/District)';\r\n  specialEdInfo = {\r\n    isPrimaryDisabilityEnabled: false,\r\n    isDistrictLiabilityEnabled: false,\r\n    isSpecialEdEntryEnabled: false,\r\n    isSpecialEdExitEnabled: false,\r\n    isAnticipatedDateEnabled: false,\r\n    isSelpaEnabled: false,\r\n    isInitialAssessmentToolEnabled: false,\r\n    isOutcome1Enabled: false,\r\n    isOutcome2Enabled: false,\r\n    isOutcome3Enabled: false,\r\n  };\r\n  customFieldMap = new Map();\r\n  customFieldAnsCollection?: ICustomFieldValue[] = [];\r\n\r\n  duplicateStudentValidationPayload!: IStudentDuplicateValidationDto;\r\n  eventData!: any;\r\n  chosenCountyOfProgram: string = '';\r\n  initialCountyId: number[] = [];\r\n  isEthnicityDisabled = false;\r\n  isNewHampshire = false;\r\n  ssidErrorMsg = 'Duplicate SSID found.';\r\n  ssidPatternErrorMsg: string = 'SSID must be numeric 10 digits.';\r\n  ssidLocalIdReqErrorMsg: string = 'Either the SSID or the Agency/District ID need to be filled out.'\r\n  required: string = 'Field required.';\r\n  withdrawlInfo = 'In order to set the Agency Withdrawal date for the child, please withdraw the child from your agency in the Manage Enrollment page. The date will populate once the child is withdrawn.';\r\n  agencyEnrollmentInfo = 'The day the child was enrolled with your agency.';\r\n  specialEdExitInfo: string = \"In order to set the Special Education Exit Date for child, please exit the child from the Manage Enrollment > Classrooms \" +\r\n    \"page. The date will populate once the child's exit date is saved.\";\r\n\r\n  public get studentDemographics() {\r\n    return StudentDemographic;\r\n  }\r\n  public get demographicSections() {\r\n    return DemographicSections;\r\n  }\r\n  public get fieldType() {\r\n    return FieldType;\r\n  }\r\n  public get dataType() {\r\n    return DataType;\r\n  }\r\n  public get ethnicityvalues() {\r\n    return StudentDemographicEthnicity;\r\n  }\r\n\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public toastService: ToastService,\r\n    private lookupService: LookupService,\r\n    public studentService: StudentService,\r\n    public authService: AuthService,\r\n    private stateService: StateService,\r\n    public modal: MatDialog,\r\n    private router: Router\r\n  ) {\r\n    this.searchValues =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['searchValues'] ||\r\n      null;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.userStateId = this.authService.getUserStateId();\r\n    this.isNewHampshire = this.userStateId == States.newHampshire;\r\n    this.initializeForm();\r\n    this.onFormChanges();\r\n\r\n    this.getFormSelects$ = combineLatest({\r\n      ethnicities: this.lookupService.getEthnicities(this.userStateId),\r\n      languagesList: this.lookupService.getLanguages(),\r\n      counties: this.lookupService.getCountyList(),\r\n      districtsOfLiability: this.lookupService.getDistrictsOfLiability(),\r\n      iepPlans: this.lookupService.getIepPlans(),\r\n      adaptations: this.lookupService.getAdaptationTypes(),\r\n      ageGradeInstruments: this.lookupService.getAgeGradeInstruments(\r\n        this.userStateId\r\n      ),\r\n      disabilities: this.lookupService.getDisabilities(),\r\n      genders: this.lookupService.getGenders(this.userStateId), // needs to filter based on state config\r\n      tuitionFeeId: this.lookupService.getTuitionFees(),\r\n      yesOrNo: this.lookupService.getBasicSelects(),\r\n      enrollmentProgramTypes: this.lookupService.getAgeGradeEnrollmentFilters(),\r\n      stateConfig: this.stateService.getStateConfigurations(this.userStateId),\r\n      customConfigs: this.stateService.getCustomStateConfigurations(\r\n        this.userStateId\r\n      ),\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.getFormSelects$.subscribe((res: any) => {\r\n        this.ethnicities = res['ethnicities'];\r\n        this.languagesList = res['languagesList'];\r\n        this.counties = res['counties'];\r\n        this.districtsOfLiability = res['districtsOfLiability'];\r\n        this.iepPlans = res['iepPlans'];\r\n        this.adaptations = res['adaptations'];\r\n        this.ageGradeInstruments = res['ageGradeInstruments'];\r\n        this.disabilities = res['disabilities'];\r\n        this.genders = res['genders'];\r\n        this.tuitionFee = res['tuitionFeeId'];\r\n        this.yesOrNo = res['yesOrNo'];\r\n        this.enrollmentProgramTypes = res['enrollmentProgramTypes'];\r\n        this.stateConfig = res['stateConfig'];\r\n        this.customStateConfig = res['customConfigs'];\r\n\r\n        this.checkSpecialEdInfo();\r\n        this.buildCustomConfigFormControl();\r\n\r\n        // set SSID & LocalId custom labels\r\n        const ssid = this.stateConfig?.find(\r\n          (x: any) => x.columnName === this.studentDemographics.SSID\r\n        );\r\n        this.ssidLabel = ssid?.label ? ssid?.label : this.ssidLabel;\r\n        const localId = this.stateConfig?.find(\r\n          (x: any) => x.columnName === this.studentDemographics.AgencySID\r\n        );\r\n        this.agencySidLabel = localId?.label\r\n          ? localId?.label\r\n          : this.agencySidLabel;\r\n\r\n        this.ssidErrorMsg = this.isNewHampshire\r\n          ? 'Duplicate SASID found.'\r\n          : this.ssidErrorMsg;\r\n\r\n        this.ssidmaxLength = ssid?.maxLength! ?? this.ssidmaxLength;\r\n\r\n        this.ssidPatternErrorMsg = `${this.isNewHampshire ? 'SASID' : 'SSID'} must be ${this.ssidmaxLength} numeric digits.`;\r\n\r\n        this.ssidLocalIdReqErrorMsg = `Either the ${this.isNewHampshire ? 'SASID' : 'SSID'} or the Agency/District ID need to be filled out.`\r\n\r\n        // Get SSID && LocalId Max Length\r\n        if (ssid?.maxLength) {\r\n          this.ssidmaxLength = ssid.maxLength;\r\n          this.SSID.setValidators([Validators.pattern(new RegExp(`^\\\\d{${this.ssidmaxLength}}$`))]);\r\n          this.SSID.updateValueAndValidity();\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.addChildForm = this.fb.group({\r\n      // ========== Child Information ==========\r\n      firstName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      middleInitial: [null],\r\n      lastName: [null, [Validators.required]],\r\n      SSID: [\r\n        null,\r\n        {\r\n          validators: [Validators.required, Validators.pattern(/^\\d{10}$/)],\r\n          updateOn: 'blur',\r\n        }\r\n      ],\r\n\r\n      localID: [\r\n        null,\r\n        {\r\n          validators: [Validators.required],\r\n          updateOn: 'blur',\r\n        },\r\n      ],\r\n      drdpId: [null],\r\n      ageGradeInstrumentId: [null, [Validators.required]],\r\n      dob: [null, [Validators.required]],\r\n      genderID: [null, [Validators.required]],\r\n      socialEconomic: [0],\r\n      // ========== Race & Ethnicity ==========\r\n      latino: [null, [Validators.required]],\r\n      ethnicities: [null, [Validators.required]],\r\n      // ========== Language ==========\r\n      languages: [null, [Validators.required]],\r\n      eld: [null, [Validators.required]],\r\n      // ========== Program ==========\r\n      enrollmentPrograms: [null, Validators.required],\r\n      other: [null],\r\n      enrollmentStartDate: [null, [Validators.required]],\r\n      enrollmentEndDate: [null],\r\n      countyId: [null],\r\n      countyOfResidenceId: [null],\r\n      tuitionFeeId: [null],\r\n      // ========== Special Education ==========\r\n      iepPlanId: [null, [Validators.required]],\r\n      primaryDisabilityId: [null],\r\n      districtOfLiabilityId: [null],\r\n      adaptations: [null],\r\n      seEntryDate: [null],\r\n      seAnticipateExitDate: [null],\r\n      seExitDate: [null],\r\n      selpaId: [null],\r\n      initialAssessmentToolId: [null],\r\n      outcome1Id: [null],\r\n      outcome2Id: [null],\r\n      outcome3Id: [null],\r\n    });\r\n\r\n    if (this.searchValues) {\r\n      this.addChildForm.patchValue({\r\n        firstName: this.searchValues.firstName,\r\n        lastName: this.searchValues.lastName,\r\n        dob: this.searchValues.dob,\r\n        SSID: this.searchValues.ssid,\r\n      });\r\n\r\n      if (this.SSID.value) {\r\n        this.currentSSID = this.SSID.value;\r\n        this.SSID.updateValueAndValidity();\r\n\r\n        if (this.SSID.valid) {\r\n          this.validateSSID();\r\n        }\r\n      }\r\n      if (this.searchValues.countyOfProgramId) {\r\n        this.initialCountyId.push(this.searchValues.countyOfProgramId);\r\n      }\r\n    }\r\n  }\r\n\r\n  validateFormData(event?: any): void {\r\n    if (!this.addChildForm.valid) {\r\n      this.addChildForm.updateValueAndValidity();\r\n\r\n      for (const field in this.addChildForm.controls) {\r\n        const currentField = this.addChildForm.get(field);\r\n        if (!currentField.validator) continue;\r\n\r\n        const validator = currentField.validator({} as AbstractControl);\r\n        if (validator && validator.required) {\r\n          currentField.markAsDirty();\r\n          currentField.markAsTouched();\r\n          currentField.setErrors();\r\n          currentField.updateValueAndValidity();\r\n        }\r\n      }\r\n\r\n      this.toastService.error('Please complete the form before submitting.');\r\n\r\n      return;\r\n    }\r\n\r\n    this.validateStudent();\r\n    this.eventData = event;\r\n  }\r\n\r\n  validateSSID() {\r\n    if (this.currentSSID) {\r\n      this.studentService\r\n        .checkDuplicateStringSSID(this.currentSSID, this.userStateId)\r\n        .pipe(take(1))\r\n        .subscribe((isDuplicate: boolean) => {\r\n          if (isDuplicate) {\r\n            this.SSID.setErrors({ duplicateSSID: true });\r\n            this.localID.setValidators([Validators.required]);\r\n            this.SSID.markAsTouched();\r\n          } else {\r\n            this.localID.setValidators([]);\r\n          }\r\n          this.localID.updateValueAndValidity();\r\n        });\r\n    }\r\n  }\r\n\r\n  validateStudent(): void {\r\n    if (this.searchValues.isDifferentChild) this.prepareForAssigment();\r\n    else {\r\n      this.duplicateStudentValidationPayload = {\r\n        firstName: this.firstName.value,\r\n        lastName: this.lastName.value,\r\n        dob: this.dob.value,\r\n      };\r\n\r\n      this.studentService\r\n        .validateStudent(this.duplicateStudentValidationPayload)\r\n        .subscribe((isDuplicate: boolean) => {\r\n          if (isDuplicate) {\r\n            this.toastService.error(\r\n              'The child you are trying to enter already exists in DRDPOnline.  If you need assistance, please contact WestEd at 1-800-770-6339 or email DRDPOnline@wested.org.'\r\n            );\r\n            return;\r\n          }\r\n\r\n          this.prepareForAssigment();\r\n        });\r\n    }\r\n  }\r\n\r\n  prepareForAssigment(): void {\r\n    this.buildCustomConfigCollection();\r\n    this.firstName?.setValue(replaceWhitespace(this.firstName.value));\r\n    this.lastName?.setValue(replaceWhitespace(this.lastName.value));\r\n    const payload = this.addChildForm.value;\r\n    payload.CustomFields = this.customFieldAnsCollection;\r\n\r\n    const modalRef = this.modal.open(AssignChildComponent, {\r\n      data: payload,\r\n    });\r\n    modalRef.afterClosed().subscribe((student: any) => {\r\n      if (student) {\r\n        this.toastService.success('Student Successfully Saved and Enrolled');\r\n        this.router.navigateByUrl(`view-child/${student}`);\r\n      }\r\n    });\r\n  }\r\n\r\n  onFormChanges(): void {\r\n    this.ageGradeInstrumentId.valueChanges.subscribe((val: any) => {\r\n    this.enrollmentPrograms.reset();\r\n    this.enrollmentProgramPlaceholder = 'Select all that apply';\r\n    this.enrollmentProgramTypesFiltered =\r\n    this.enrollmentProgramTypes!.filter(\r\n            (ept: IAgeGradeEnrollmentProgramFilter) => {\r\n              return ept.ageGradeInstrumentId === val;\r\n            }\r\n          );\r\n    });\r\n\r\n    this.enrollmentPrograms.valueChanges.subscribe((val: any) => {\r\n      if (\r\n        val &&\r\n        (val.includes(this.EnrollmentProgram.other) ||\r\n          val.includes(EnrollmentProgram.otherNH))\r\n      ) {\r\n        this.other.setValidators([Validators.required]);\r\n        this.other.updateValueAndValidity();\r\n        this.otherRequired = true;\r\n        return;\r\n      }\r\n\r\n      this.other.reset();\r\n      this.other.setValidators([]);\r\n      this.other.updateValueAndValidity();\r\n      this.otherRequired = false;\r\n    });\r\n\r\n    this.SSID.valueChanges.subscribe((val: any) => {\r\n      if (this.currentSSID == val) return;\r\n      this.currentSSID = val;\r\n      if (this.SSID.valid && this.SSID.value != \"\") {\r\n        this.validateSSID();\r\n      } else {\r\n        this.localID.setValidators([Validators.required]);\r\n        this.localID.updateValueAndValidity();\r\n      }\r\n    });\r\n\r\n    this.localID.valueChanges.subscribe((val: any) => {\r\n      var ssidPattern = new RegExp(`^\\\\d{${this.ssidmaxLength}}$`);\r\n      if (this.currentLocalID == val) return;\r\n      this.currentLocalID = val;\r\n      if (this.localID.valid) {\r\n        if (this.currentLocalID) {\r\n          this.SSID.setValidators([Validators.pattern(ssidPattern)]);\r\n\r\n          if (this.SSID.value) {\r\n            this.validateSSID();\r\n          }\r\n        } else {\r\n          this.SSID.setValidators([\r\n            Validators.required,\r\n            Validators.pattern(ssidPattern),\r\n          ]);\r\n        }\r\n        this.SSID.updateValueAndValidity();\r\n      } else {\r\n        this.SSID.setValidators([\r\n          Validators.required,\r\n          Validators.minLength(this.ssidmaxLength),\r\n          Validators.pattern(ssidPattern),\r\n        ]);\r\n        this.SSID.updateValueAndValidity();\r\n      }\r\n    });\r\n  }\r\n\r\n  resetAddChildForm(): void {\r\n    this.addChildForm.reset();\r\n    this.toastService.success('The form has been reset.');\r\n  }\r\n\r\n  checkSpecialEdInfo(): void {\r\n    if (this.stateConfig) {\r\n      this.stateConfig.forEach((config: IStateConfiguration) => {\r\n        switch (config.columnName) {\r\n          case this.studentDemographics.PrimaryDisability:\r\n            this.specialEdInfo.isPrimaryDisabilityEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.DistrictLiability:\r\n            this.specialEdInfo.isDistrictLiabilityEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.SpecialEdEntryDate:\r\n            this.specialEdInfo.isSpecialEdEntryEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.AnticipatedDateExit:\r\n            this.specialEdInfo.isAnticipatedDateEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.DateExit:\r\n            this.specialEdInfo.isSpecialEdExitEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.Selpa:\r\n            this.specialEdInfo.isSelpaEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.initialAssessmentToolId:\r\n            this.specialEdInfo.isInitialAssessmentToolEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome1Id:\r\n            this.specialEdInfo.isOutcome1Enabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome2Id:\r\n            this.specialEdInfo.isOutcome2Enabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome3Id:\r\n            this.specialEdInfo.isOutcome3Enabled = config.isActive;\r\n            break;\r\n          default:\r\n            return;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  buildCustomConfigFormControl(): void {\r\n    if (this.customStateConfig) {\r\n      this.customStateConfig.forEach((config: IStateConfiguration) => {\r\n        if (config.isActive) {\r\n          const isTextField = config.customFieldTypeId === FieldType.text;\r\n          if (config.isRequired && isTextField) {\r\n            this.addChildForm.addControl(\r\n              config.label,\r\n              new FormControl('', [\r\n                Validators.required,\r\n                Validators.maxLength(config.maxLength),\r\n              ])\r\n            );\r\n          } else if (isTextField) {\r\n            this.addChildForm.addControl(\r\n              config.label,\r\n              new FormControl('', Validators.maxLength(config.maxLength))\r\n            );\r\n          } else if (config.isRequired) {\r\n            this.addChildForm.addControl(\r\n              config.label,\r\n              new FormControl('', [Validators.required])\r\n            );\r\n          } else {\r\n            this.addChildForm.addControl(config.label, new FormControl(''));\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  buildCustomConfigObj(\r\n    colName: string,\r\n    configId: number,\r\n    customFieldTypeId: number,\r\n    event?: any\r\n  ): void {\r\n    if (event) {\r\n      this.addChildForm.get(colName).setValue(event);\r\n    }\r\n    const ans = this.addChildForm.get(colName).value;\r\n    const customField: ICustomFieldValue = {\r\n      id: 0,\r\n      studentId: 0,\r\n      stateDemographicConfigurationId: configId,\r\n      intValue: customFieldTypeId == FieldType.number ? ans : 0,\r\n      smCharValue:\r\n        customFieldTypeId === FieldType.dropdownSingle ||\r\n        customFieldTypeId === FieldType.text\r\n          ? ans\r\n          : '',\r\n      lgCharValue:\r\n        customFieldTypeId === FieldType.dropdownMultiple ? ans.join('|') : '',\r\n      dateValue: customFieldTypeId === FieldType.date ? ans : '',\r\n    };\r\n    this.customFieldMap.set(colName, customField);\r\n  }\r\n\r\n  buildCustomConfigCollection(): void {\r\n    this.customFieldMap.forEach((config: ICustomFieldValue) => {\r\n      this.customFieldAnsCollection?.push(config);\r\n    });\r\n  }\r\n\r\n  handleChosenCountyOfProgram(event: any): void {\r\n    this.chosenCountyOfProgram = event.countyName;\r\n    this.countyId.setValue(event.id);\r\n  }\r\n  handleChosenCountyOfResidence(event: any): void {\r\n    this.countyOfResidenceId.setValue(event.id);\r\n  }\r\n\r\n  handleChosenSelpa(event: any): void {\r\n    this.selpaId.setValue(event.id);\r\n  }\r\n\r\n  handleChosenEthnicity(event: any): void {\r\n    if (\r\n      event.id === this.ethnicityvalues.Intentionally_left_blank &&\r\n      !this.isEthnicityDisabled\r\n    ) {\r\n      this.isEthnicityDisabled = true;\r\n      this.ethnicity.setValue([event.id]);\r\n    } else if (\r\n      event.id === this.ethnicityvalues.Intentionally_left_blank &&\r\n      this.isEthnicityDisabled\r\n    ) {\r\n      this.isEthnicityDisabled = false;\r\n    }\r\n  }\r\n\r\n\r\n  handleDate(event: any, controlName: string): void {\r\n    if (event === '' || !event) {\r\n      this.addChildForm.get(controlName).setValue(formatDatesToString(null));\r\n    } else {\r\n      this.addChildForm.get(controlName).setValue(formatDatesToString(event));\r\n    }\r\n  }\r\n\r\n  handleEld(event: ISelectBoolean): void {\r\n    this.eld.setValue(event?.id);\r\n  }\r\n\r\n  handleAgeGrade(event: IAgeGradeInstrument): void {\r\n    this.ageGradeInstrumentId.setValue(event?.id);\r\n  }\r\n\r\n  handleHispanic(event: ISelectBoolean): void {\r\n    this.latino.setValue(event?.id);\r\n  }\r\n\r\n  handleIep(event: IIepPlan): void {\r\n    this.iepPlanId.setValue(event?.id);\r\n\r\n    if (this.isNewHampshire && this.specialEdInfo.isDistrictLiabilityEnabled && event?.id == this.iepPlan.Yes) {\r\n      this.districtOfLiabilityId.addValidators([Validators.required]);\r\n      this.districtOfLiabilityId.updateValueAndValidity();\r\n    }\r\n    else {\r\n      this.districtOfLiabilityId.clearValidators();\r\n      this.districtOfLiabilityId.updateValueAndValidity();\r\n    }\r\n\r\n    if (this.specialEdInfo.isSpecialEdEntryEnabled) {\r\n      if (event?.id == this.iepPlan.Yes) this.seEntryDate.setValidators([Validators.required]);\r\n      else this.seEntryDate.clearValidators();\r\n      this.seEntryDate.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  handleOutcome(event: IOutcome, controlName: string): void {\r\n    if (!this.addChildForm.get(controlName)) return;\r\n    this.addChildForm.get(controlName).setValue(event?.id);\r\n  }\r\n\r\n  handleInitAssessment(event: IInitialAssessmentToolType): void {\r\n    this.initialAssessmentToolId.setValue(event?.id);\r\n  }\r\n\r\n  deselectCheck(id: number): void {\r\n    const currentTuitionFeeId = this.tuitionFeeId?.value;\r\n    if (currentTuitionFeeId === id) {\r\n      this.tuitionFeeId?.setValue(null);\r\n    } else {\r\n      this.tuitionFeeId?.setValue(id);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions?.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"flex flex-col px-5 justify-center\">\r\n  <drdp-title *ngIf=\"isAdd\" title=\"Add New Child\" class=\"py-5\"></drdp-title>\r\n  <div *ngIf=\"isLoading; else form\"></div>\r\n  <ng-template #form>\r\n    <drdp-container [additionClasses]=\"isAdd ? 'mx-auto flex p-8' : 'mx-auto shadow-none flex p-8'\">\r\n      <form [formGroup]=\"addChildForm\">\r\n        <h2 class=\"font-semibold text-lg\">Child Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"firstName\">First Name<span class=\"required\"></span></label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"First Name\" matInput [readonly]=\"isView\" autocomplete=\"given-name\" type=\"text\"\r\n                formControlName=\"firstName\" maxlength=\"50\" required />\r\n              <mat-error *ngIf=\"firstName.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"middleInitial\">Middle Initial</label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"Middle Initial\" matInput [readonly]=\"isView\" autocomplete=\"off\" type=\"text\"\r\n                formControlName=\"middleInitial\" maxlength=\"2\" />\r\n              <mat-error *ngIf=\"middleInitial.invalid && !isView\">Child's Middle Initial can only be 2\r\n                characters.</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"lastName\">Last Name<span class=\"required\"></span></label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"Last Name\" matInput [readonly]=\"isView\" autocomplete=\"family-name\" type=\"text\"\r\n                formControlName=\"lastName\" maxlength=\"50\" required />\r\n              <mat-error *ngIf=\"lastName.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"SSID\">\r\n              {{ ssidLabel }}\r\n              <span class=\"required\"></span>\r\n              <br />\r\n              <span *ngIf=\"isAdd\" class=\"addl-instructions\">\r\n                <span class=\"required\"></span>\r\n              </span>\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"Required if Agency/District ID is blank\" matInput [readonly]=\"isView\"\r\n                autocomplete=\"off\" type=\"text\" formControlName=\"ssid\" [maxlength]=\"ssidmaxLength\" />\r\n              <mat-error *ngIf=\"ssid.hasError('pattern') && !isView\">{{ ssidPatternErrorMsg }}</mat-error>\r\n              <mat-error *ngIf=\"ssid.hasError('required') && !isView\">{{ ssidLocalIdReqErrorMsg }}</mat-error>\r\n              <mat-error *ngIf=\"ssid.hasError('duplicateSSID') && !isView\">{{ ssidErrorMsg }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"localId\">\r\n              {{ agencySidLabel }}\r\n              <span class=\"required\"></span>\r\n              <br />\r\n              <span *ngIf=\"isAdd\" class=\"addl-instructions\">\r\n                <span class=\"required\"></span>\r\n              </span>\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"Required if Statewide Student Identifier is blank\" matInput [readonly]=\"isView\"\r\n                autocomplete=\"off\" type=\"text\" formControlName=\"localId\" maxlength=\"25\" />\r\n              <mat-error *ngIf=\"localId.hasError('required')\">{{ ssidLocalIdReqErrorMsg }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"drdpId\">\r\n              DRDP ID\r\n              <br />\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"DRDP ID\" matInput autocomplete=\"off\" type=\"text\" formControlName=\"drdpId\"\r\n                maxlength=\"25\" readonly=\"\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal required\" for=\"DOB\">DOB</label>\r\n              <p class=\"text-sm\">{{ dob?.value | date : \"MM/dd/yyyy\" }}</p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-date-picker label=\"DOB\" [initialDate]=\"dob?.value\" [isReadOnly]=\"isView\" [isRequired]=\"true\"\r\n                (emitDate)=\"handleDate($event, 'dob')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"!isView\">\r\n            <drdp-select-age-grade #ageGroupInstrumentSelect [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n              (ageGrade)=\"handleAgeGrade($event)\" [stateId]=\"userStateId\" [multiSelect]=\"false\" [required]=\"true\"\r\n              label=\"Child Age/Grade Instrument\" [tooltip]=\"ageGradeInstrumentWarning\">\r\n            </drdp-select-age-grade>\r\n            <mat-error *ngIf=\"ageGradeInstrumentId.invalid\" class=\"absolute text-xs\">{{ required }}</mat-error>\r\n          </div>\r\n          <div *ngIf=\"isView\" class=\"self-start\">\r\n            <label class=\"font-normal\" for=\"firstName\">Child Age/Grade Instrument<span class=\"required\"></span></label>\r\n            <div class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p>{{ childData?.ageGradeInstrumentName }}</p>\r\n            </div>\r\n          </div>\r\n          <div>\r\n            <label class=\"font-normal\" for=\"socialEconomic\">Child's Socioeconomic Status</label>\r\n            <mat-checkbox [color]=\"'primary'\" class=\"example-margin\" formControlName=\"socialEconomic\"\r\n              [disabled]=\"!isAdd && !isEdit\">Qualify for free or reduced meals?</mat-checkbox>\r\n          </div>\r\n          <div *ngIf=\"!isView\">\r\n            <div class=\"col-span-1 col-end-3\">\r\n              <label class=\"font-normal\" for=\"genderId\">Gender<span class=\"required\"></span></label>\r\n              <mat-radio-group aria-label=\"Select an option\" formControlName=\"genderId\">\r\n                <mat-radio-button [color]=\"'primary'\" *ngFor=\"let g of genders\" [value]=\"g.id\">\r\n                  {{ g.genderName }}\r\n                </mat-radio-button>\r\n                <mat-error *ngIf=\"genderId.touched && genderId.invalid\">{{ required }}</mat-error>\r\n              </mat-radio-group>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"isView\">\r\n            <div class=\"col-span-1 col-end-3\">\r\n              <label class=\"font-normal\" for=\"firstName\">Gender<span class=\"required\"></span></label>\r\n              <div class=\"bg-white removeLine\" appearance=\"fill\">\r\n                <p>{{ childData?.genderName }}</p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8\">\r\n          <div class=\"form-input-label-group\"\r\n            *ngFor=\"let custom of customStateConfig | groupDemographicSection : demographicSections.childInformation\">\r\n            <div [id]=\"custom.label\" *ngIf=\"isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">{{\r\n                custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" ngClass=\"removeLine\" appearance=\"fill\">\r\n                <input matInput [readonly]=\"true\" autocomplete=\"off\" [formControlName]=\"custom.label\" maxlength=\"10\" />\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">{{\r\n                custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\">\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">{{\r\n                custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\"\r\n                    multiple>\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.text && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">{{\r\n                custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"text\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.number && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">{{\r\n                custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"number\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.date && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <drdp-date-picker [label]=\"custom.label\" [initialDate]=\"addChildForm.get(custom.label)?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"custom.isRequired\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">\r\n          Child's Race and Ethnicity Information\r\n        </h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\" *ngIf=\"!isView\">\r\n            <drdp-select-yes-no label=\"Is the child Hispanic or Latino?\" [initialId]=\"latino.value\" [required]=\"true\"\r\n              (optionSelected)=\"handleHispanic($event)\" additionalClasses=\"pb-12\">\r\n            </drdp-select-yes-no>\r\n            <div>\r\n              <mat-error *ngIf=\"latino.invalid\" class=\"absolute text-xs\">{{ required }}</mat-error>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"isView\">\r\n            <label class=\"font-normal required\" for=\"latino\">Is the child Hispanic or Latino?</label>\r\n            <mat-form-field class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <input matInput readonly=\"true\" [value]=\"childData.latino ? 'Yes' : 'No'\" type=\"text\"\r\n                formControlName=\"latino\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"ethnicities\">\r\n              What is the child's race?\r\n              <span class=\"required\"></span>\r\n              <span *ngIf=\"!isView\" class=\"addl-instructions\">\r\n                Mark one or more races to indicate what the child considers\r\n                himself or herself to be:\r\n              </span>\r\n            </label>\r\n            <mat-form-field appearance=\"fill\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"ethnicityIds\" multiple placeholder=\"Choose all that apply\">\r\n                <mat-option *ngFor=\"let ethnicity of ethnicities\" [value]=\"ethnicity.id\"\r\n                  [disabled]=\"isEthnicityDisabled && ethnicity.id !== ethnicityvalues.Intentionally_left_blank\"\r\n                  (click)=\"handleChosenEthnicity(ethnicity)\">\r\n                  <span *ngIf=\"isNewHampshire\" [matTooltip]=\"ethnicity.ethnicityName ?? ''\">\r\n                    {{ ethnicity.ethnicityName }}</span>\r\n                  <span *ngIf=\"!isNewHampshire\">\r\n                    {{ ethnicity.ethnicityName }}</span>\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"ethnicity.touched && ethnicity.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.ethnicities\">\r\n              <ul>\r\n                <li\r\n                  *ngFor=\"let ethnicity of childData?.ethnicities | option : ','\">\r\n                  {{ ethnicity }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8\">\r\n          <div class=\"form-input-label-group\"\r\n            *ngFor=\"let custom of customStateConfig | groupDemographicSection : demographicSections.childRaceEthnicity\">\r\n            <div [id]=\"custom.label\" *ngIf=\"isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" ngClass=\"removeLine\" appearance=\"fill\">\r\n                <input matInput [readonly]=\"true\" autocomplete=\"off\" [formControlName]=\"custom.label\" maxlength=\"10\" />\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\">\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\"\r\n                    multiple>\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.text && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"text\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.number && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"number\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.date && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <drdp-date-picker [label]=\"custom.label\" [initialDate]=\"addChildForm.get(custom.label)?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"custom.isRequired\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">Child's Language Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"languages\">What is the child's home language?<span\r\n                class=\"required\"></span></label>\r\n            <mat-form-field appearance=\"fill\" id=\"languageSelect\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"languageIds\" multiple placeholder=\"Choose all that apply\">\r\n                <mat-option *ngFor=\"let language of languagesList\" [value]=\"language.id\">\r\n                  {{ language.languageName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"languageIds.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.languages.length > 1\">\r\n              <ul>\r\n                <li *ngFor=\"let language of childData?.languages | option : ','\">\r\n                  {{ language }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-yes-no label=\"Is a language other than English spoken in the child’s home?\"\r\n                [initialId]=\"eld.value\" [required]=\"true\" (optionSelected)=\"handleEld($event)\">\r\n              </drdp-select-yes-no>\r\n              <mat-error *ngIf=\"eld.invalid\" class=\"absolute text-xs\">{{ required }}</mat-error>\r\n            </div>\r\n            <mat-form-field *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal mt-0\" for=\"eld\">\r\n                Is a language other than English spoken in the child’s home?\r\n                <span class=\"required\"></span>\r\n              </label>\r\n              <input matInput readonly=\"true\" [value]=\"childData?.eld\" type=\"text\" formControlName=\"eld\" required />\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8\">\r\n          <div class=\"form-input-label-group\"\r\n            *ngFor=\"let custom of customStateConfig | groupDemographicSection : demographicSections.childLanguageInfo\">\r\n            <div [id]=\"custom.label\" *ngIf=\"isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" ngClass=\"removeLine\" appearance=\"fill\">\r\n                <input matInput [readonly]=\"true\" autocomplete=\"off\" [formControlName]=\"custom.label\" maxlength=\"10\" />\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\">\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\"\r\n                    multiple>\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.text && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"text\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.number && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"number\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.date && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <drdp-date-picker [label]=\"custom.label\" [initialDate]=\"addChildForm.get(custom.label)?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"custom.isRequired\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 class=\"font-semibold text-lg\">Child's Program Information</h2>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8\">\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal required\" for=\"enrollmentPrograms\">Program Type</label>\r\n            <mat-form-field *ngIf=\"!isView\" appearance=\"fill\" id=\"programSelect\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"enrollmentProgramIds\" [placeholder]=\"enrollmentProgramPlaceholder\"\r\n                required=\"true\" multiple>\r\n                <mat-option *ngFor=\"let ept of enrollmentProgramTypesFiltered ?? enrollmentProgramTypes\" [value]=\"ept.enrollmentProgramId\">\r\n                  {{ ept.enrollmentProgramType?.enrollmentProgramName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"enrollmentProgramIds.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.enrollmentProgramNames.length > 1\">\r\n              <ul>\r\n                <li *ngFor=\"let ep of childData?.enrollmentProgramNames | option : ','\">\r\n                  {{ ep }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <div *ngIf=\"otherRequired || other?.value?.length > 1\">\r\n              <label class=\"font-normal\" for=\"other\">Other<span class=\"required\"></span></label>\r\n              <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n                <input matInput type=\"text\" formControlName=\"other\" palceholder=\"Other\" />\r\n                <mat-error *ngIf=\"other.invalid\">Field required ('Other' selected as program type).</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"relative\">\r\n            <div class=\"form-input-label-group\">\r\n              <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n                <label class=\"font-normal required\" for=\"Agency Enrollment Date\">Agency Enrollment Date</label>\r\n                <p class=\"text-sm\">\r\n                  {{ enrollmentStartDate.value | date : \"MM/dd/yyyy\" }}\r\n                </p>\r\n              </div>\r\n              <div *ngIf=\"!isView\">\r\n                <drdp-date-picker label=\"Agency Enrollment Date\" [initialDate]=\"enrollmentStartDate.value\"\r\n                  [isReadOnly]=\"isView\" [isRequired]=\"true\" (emitDate)=\"handleDate($event, 'enrollmentStartDate')\">\r\n                </drdp-date-picker>\r\n              </div>\r\n            </div>\r\n            <div *ngIf=\"!isView\" class=\"absolute top-0 left-full mt-2 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=agencyEnrollmentInfo></i>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"enrollmentEndDate\">\r\n              Agency Withdrawal Date\r\n              <i *ngIf=\"!isView\" class=\"uil uil-info-circle text-xs\" [matTooltip]=withdrawlInfo></i>\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input matInput readonly=true type=\"text\" [value]=\"enrollmentEndDate.value | date:'MM/dd/yyyy'\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"form-input-label-group\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-county (county)=\"handleChosenCountyOfProgram($event)\"\r\n                [initialCountyIds]=\"countyOfProgramId.value\" [stateId]=\"userStateId\" [multiSelect]=\"false\"\r\n                label=\"County of Program\" [multiSelect]=\"false\">\r\n              </drdp-select-county>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"countyOfProgram\">County of Program</label>\r\n              <p>{{ chosenCountyOfProgram }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-county (county)=\"handleChosenCountyOfResidence($event)\"\r\n                [initialCountyIds]=\"countyOfResidenceId.value\" [stateId]=\"userStateId\" [multiSelect]=\"false\"\r\n                label=\"County of Residence\" [multiSelect]=\"false\">\r\n              </drdp-select-county>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"countyOfResidence\">County of Residence</label>\r\n              <p>{{ chosenCountyOfResidence }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div class=\"self-end md:col-span-2\">\r\n            <label class=\"font-normal\" for=\"tuitionFeeId\">Child's tuition fees are:</label>\r\n            <mat-checkbox-group aria-label=\"Select an option\" *ngIf=\"!isView\" class=\"flex flex-col\">\r\n              <mat-checkbox class=\"rounded-checkboxes mb-3\" [color]=\"'primary'\" [checked]=\"tuitionFeeId.value == tf.id\"\r\n                *ngFor=\"let tf of tuitionFee\" (change)=\"deselectCheck(tf.id)\">\r\n                {{ tf.tuitionFeeName }}\r\n              </mat-checkbox>\r\n            </mat-checkbox-group>\r\n\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p>{{ childData?.tuitionFeeName }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"self-end hidden md:block\"></div>\r\n          <div *ngIf=\"bypassDualEnrollment || canViewDualEnrollment\" class=\"self-end md:col-span-1\">\r\n            <label class=\"font-normal\" for=\"enrollmentPrograms\">Dual Enrollment Program</label>\r\n            <mat-form-field *ngIf=\"!isView\" appearance=\"fill\" id=\"programSelect\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"dualEnrollmentProgramIds\" [placeholder]=\"enrollmentProgramPlaceholder\"\r\n                multiple>\r\n                <mat-option\r\n                  *ngFor=\"let ept of enrollmentProgramTypesFiltered ?? enrollmentProgramTypes\"\r\n                  [value]=\"ept.enrollmentProgramId\">\r\n                  {{ ept.enrollmentProgramType?.enrollmentProgramName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.dualEnrollmentProgramNames\">\r\n              <ul>\r\n                <li *ngFor=\"let ep of childData?.dualEnrollmentProgramNames | option : ','\">\r\n                  {{ ep }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"bypassDualEnrollment || canViewDualEnrollment\">\r\n            <div class=\"form-input-label-group\">\r\n              <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n                <label class=\"font-normal\" for=\"Dual Agency Enrollment Date\">Dual Agency Enrollment Date\r\n                  <!-- <i *ngIf=\"!isView\" class=\"uil uil-info-circle text-xs\" [matTooltip]=agencyEnrollmentInfo></i> -->\r\n                </label>\r\n                <p class=\"text-sm\">\r\n                  {{ dualEnrollmentStartDate.value | date : \"MM/dd/yyyy\" }}\r\n                </p>\r\n              </div>\r\n              <div *ngIf=\"!isView\">\r\n                <drdp-date-picker label=\"Dual Agency Enrollment Date\" [initialDate]=\"dualEnrollmentStartDate.value\"\r\n                  [isReadOnly]=\"isView\" [isRequired]=\"false\" (emitDate)=\"handleDate($event, 'dualEnrollmentStartDate')\">\r\n                </drdp-date-picker>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"bypassDualEnrollment || canViewDualEnrollment\" class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"dualEnrollmentEndDate\">\r\n              Dual Agency Withdrawal Date\r\n              <!-- <i *ngIf=\"!isView\" class=\"uil uil-info-circle text-xs\" [matTooltip]=withdrawlInfo></i> -->\r\n            </label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input matInput readonly=true type=\"text\" [value]=\"dualEnrollmentEndDate.value | date:'MM/dd/yyyy'\" />\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8\">\r\n          <div class=\"form-input-label-group\"\r\n            *ngFor=\"let custom of customStateConfig | groupDemographicSection : demographicSections.childProgramInfo\">\r\n            <div [id]=\"custom.label\" *ngIf=\"isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" ngClass=\"removeLine\" appearance=\"fill\">\r\n                <input matInput [readonly]=\"true\" autocomplete=\"off\" [formControlName]=\"custom.label\" maxlength=\"10\" />\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\">\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\"\r\n                    multiple>\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.text && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"text\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.number && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"number\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.date && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <drdp-date-picker [label]=\"custom.label\" [initialDate]=\"addChildForm.get(custom.label)?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"custom.isRequired\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr class=\"my-5\" />\r\n        <h2 *ngIf=\"bypassDualEnrollment || isPrimaryAgency\" class=\"font-semibold text-lg\">Special Education Information\r\n        </h2>\r\n        <div *ngIf=\"bypassDualEnrollment || isPrimaryAgency\"\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pb-4 md:pb-8\">\r\n          <div [ngClass]=\"{ 'form-input-label-group': !isView }\">\r\n            <label class=\"font-normal required\" for=\"iepPlanId\" *ngIf=\"isView\">\r\n              Has Individualized Education Plan (IEP) or Individual Family Service Plan (IFSP)\r\n            </label>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-iep-plan [initialId]=\"iepPlanId.value\" [required]=\"true\"\r\n                (optionSelected)=\"handleIep($event, true)\">\r\n              </drdp-select-iep-plan>\r\n              <mat-error *ngIf=\"iepPlanId.invalid\" class=\"absolute text-xs\">{{ required }}</mat-error>\r\n            </div>\r\n            <mat-form-field appearance=\"fill\" class=\"bg-white removeLine\" *ngIf=\"isView\">\r\n              <input matInput readonly=\"true\" [value]=\"childData?.iepPlanName\" type=\"text\"\r\n                formControlName=\"iepPlanId\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isPrimaryDisabilityEnabled\">\r\n            <label class=\"font-normal\" for=\"primaryDisabilityId\">Primary Disability</label>\r\n            <mat-form-field appearance=\"fill\" id=\"primaryDisabilitySelect\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"primaryDisabilityId\" placeholder=\"Primary Disability\">\r\n                <mat-option *ngFor=\"let disability of disabilities\" [value]=\"disability.id\">\r\n                  {{ disability.primaryDisabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p>{{ childData?.primaryDisabilityName }}</p>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" class=\"self-end hidden md:block\">\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isDistrictLiabilityEnabled\">\r\n            <label class=\"font-normal\" for=\"districtOfLiabilityId\"\r\n              [ngClass]=\"{'required': isDistrictLiabilityRequired}\">District of Liability</label>\r\n            <mat-form-field appearance=\"fill\" *ngIf=\"!isView\" id=\"liabilitySelect\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"districtOfLiabilityId\" placeholder=\"District of Liability\">\r\n                <mat-option *ngFor=\"let dol of districtsOfLiability\" [value]=\"dol.id\">\r\n                  {{ dol.districtOfLiabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"districtOfLiabilityId.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p>{{ childData?.districtOfLiabilityName }}</p>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" class=\"form-input-label-group\">\r\n            <label class=\"font-normal\">District ID</label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"District ID\" matInput type=\"text\" [value]=\"districtId\" [readonly]=\"true\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div *ngIf=\"isNewHampshire && specialEdInfo.isDistrictLiabilityEnabled\" class=\"form-input-label-group\">\r\n            <label class=\"font-normal\">SAU ID</label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input placeholder=\"SAU ID\" matInput type=\"text\" [value]=\"sauId\" readonly=\"true\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isSelpaEnabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-selpa (selpa)=\"handleChosenSelpa($event, true)\" [initialSelpaId]=\"selpaId.value\"\r\n                additionalClasses=\"pb-12\">\r\n              </drdp-select-selpa>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal pb-14\" for=\"selpa\">SELPAS</label>\r\n              <p>{{ childData?.selpaName }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"adaptations\">Adaptations</label>\r\n            <mat-form-field appearance=\"fill\" id=\"adaptationSelect\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"adaptationIds\" multiple placeholder=\"Choose all that apply\">\r\n                <mat-option *ngFor=\"let adaptation of adaptations\" [value]=\"adaptation.id\">{{\r\n                  adaptation.adaptationTypeName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.adaptations.length > 1\">\r\n              <ul>\r\n                <li *ngFor=\"let adaptation of childData?.adaptations | option : ','\">\r\n                  {{ adaptation }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isSpecialEdEntryEnabled\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"seEntryDate\">Special Education Entry Date</label>\r\n              <p class=\"text-sm\">\r\n                {{ seEntryDate?.value | date : \"MM/dd/yyyy\" }}\r\n              </p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-date-picker\r\n                label=\"Special Education Entry Date\"\r\n                [initialDate]=\"seEntryDate?.value\"\r\n                [isReadOnly]=\"isView\"\r\n                [isRequired]=\"iepPlanId.value == iepPlan.Yes\"\r\n                labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"handleDate($event, 'seEntryDate')\"\r\n              >\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isAnticipatedDateEnabled\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"seAnticipateExitDate\">Special Education Anticipated Exit Date</label>\r\n              <p class=\"text-sm\">\r\n                {{ seAnticipateExitDate?.value | date : \"MM/dd/yyyy\" }}\r\n              </p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-date-picker label=\"Special Education Anticipated Exit Date\"\r\n                [initialDate]=\"seAnticipateExitDate.value\" [isReadOnly]=\"isView\" labelClasses=\"pb-5 mb-5\"\r\n                (emitDate)=\"handleDate($event, 'seAnticipateExitDate')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo?.isSpecialEdExitEnabled\"\r\n          >\r\n            <div class=\"bg-white\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"seExitDate\">\r\n                Special Education Exit Date\r\n                <i *ngIf=\"!isView\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"specialEdExitInfo\"></i>\r\n              </label>\r\n              <mat-form-field\r\n                class=\"bg-white\"\r\n                [ngClass]=\"{ removeLine: isView, 'pt-10': !isView }\"\r\n                appearance=\"fill\"\r\n              >\r\n                <input\r\n                  matInput\r\n                  readonly=true\r\n                  type=\"text\"\r\n                  [value]=\"seExitDate.value | date:'MM/dd/yyyy'\"\r\n                />\r\n              </mat-form-field>\r\n            </div>\r\n          </div>\r\n          <div\r\n            class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isInitialAssessmentToolEnabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-initial-assessment-tool-type label=\"Initial Assessment Tool\"\r\n                [initialId]=\"initialAssessmentToolId?.value\"\r\n                (optionSelected)=\"handleInitAssessment($event, 'initialAssessmentToolId')\">\r\n              </drdp-select-initial-assessment-tool-type>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"initialAssessmentTool\">Initial Assessment Tool</label>\r\n              <p class=\"text-sm\">{{ childData?.initialAssessmentToolTypeName }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome1Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 1\" [initialId]=\"outcome1Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'outcome1Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"outcome1\">Outcome 1</label>\r\n              <p class=\"text-sm\">{{ childData?.outcome1Name }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome2Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 2\" [initialId]=\"outcome2Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'outcome2Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"outcome2\">Outcome 2</label>\r\n              <p class=\"text-sm\">{{ childData?.outcome2Name }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome3Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 3\" [initialId]=\"outcome3Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'outcome3Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"outcome3\">Outcome 3</label>\r\n              <p class=\"text-sm\">{{ childData?.outcome3Name }}</p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <h2 *ngIf=\"canViewDualSped\" class=\"font-semibold text-lg\">\r\n          Dual Special Education Information</h2>\r\n        <div *ngIf=\"canViewDualSped\"\r\n          class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pb-4 md:pb-8\">\r\n          <div [ngClass]=\"{ 'form-input-label-group': !isView }\">\r\n            <label class=\"font-normal required\" for=\"iepPlanId\" *ngIf=\"isView\">\r\n              Has Individualized Education Plan (IEP) or Individual Family Service Plan (IFSP)\r\n            </label>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-iep-plan [initialId]=\"dualIepPlanId.value\" [required]=\"true\"\r\n                (optionSelected)=\"handleIep($event, false)\">\r\n              </drdp-select-iep-plan>\r\n            </div>\r\n            <mat-form-field appearance=\"fill\" class=\"bg-white removeLine\" *ngIf=\"isView\">\r\n              <input matInput readonly=\"true\" [value]=\"childData?.dualEnrollmentIepPlanName\" type=\"text\"\r\n                formControlName=\"dualIepPlanId\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\"\r\n            *ngIf=\"specialEdInfo.isSelpaEnabled && !specialEdInfo.isPrimaryDisabilityEnabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-selpa (selpa)=\"handleChosenSelpa($event, false)\" [initialSelpaId]=\"dualSelpaId.value\"\r\n                additionalClasses=\"pb-12\">\r\n              </drdp-select-selpa>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal pb-14\" for=\"selpa\">SELPAS</label>\r\n              <p>{{ childData?.dualEnrollmentSelpaName }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\">\r\n            <label class=\"font-normal\" for=\"adaptations\">Adaptations</label>\r\n            <mat-form-field appearance=\"fill\" id=\"adaptationSelect\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"dualAdaptationIds\" multiple placeholder=\"Choose all that apply\">\r\n                <mat-option *ngFor=\"let adaptation of adaptations\" [value]=\"adaptation.id\">\r\n                  {{ adaptation.adaptationTypeName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView && childData?.dualAdaptations\">\r\n              <ul>\r\n                <li *ngFor=\"let adaptation of childData?.dualAdaptations | option : ','\">\r\n                  {{ adaptation }}\r\n                </li>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isPrimaryDisabilityEnabled || primaryDisabilityReq\">\r\n            <label class=\"font-normal\" for=\"dualPrimaryDisabilityId\">Primary Disability</label>\r\n            <mat-form-field appearance=\"fill\" id=\"primaryDisabilitySelect\" *ngIf=\"!isView\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"dualPrimaryDisabilityId\" [placeholder]=\"selectedDisability ?? 'Primary Disability'\"\r\n              (selectionChange)=\"handlePrimaryDisability($event)\">\r\n                <mat-option *ngFor=\"let disability of disabilities\" [value]=\"disability\">\r\n                  {{ disability.primaryDisabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p class=\"text-sm\">{{ childData?.dualPrimaryDisabilityName }}</p>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"primaryDisabilityReq\">\r\n            <div *ngIf=\"(!isView && hasFollowUp)\">\r\n              <div class=\"col-span-1 col-end-3\">\r\n                <label class=\"font-normal\" for=\"dualExtensiveSupportId\">Does the child have extensive support needs?</label>\r\n                <mat-radio-group aria-label=\"Select an option\" formControlName=\"dualExtensiveSupportId\">\r\n                  <mat-radio-button color=\"primary\" *ngFor=\"let es of extensiveSupports\" [value]=\"es.id\">\r\n                    {{ es.extensiveSupportOption }}\r\n                  </mat-radio-button>\r\n                  <mat-error *ngIf=\"dualExtensiveSupportId.touched && dualExtensiveSupportId.invalid\">{{ required }}</mat-error>\r\n                </mat-radio-group>\r\n              </div>\r\n            </div>\r\n            <div class=\"form-input-label-group\" *ngIf=\"isView && hasFollowUp\">\r\n              <div class=\"col-span-1 col-end-3\">\r\n                <label class=\"font-normal\" for=\"firstName\">Does the child have extensive support needs?</label>\r\n                <div class=\"bg-white removeLine\" appearance=\"fill\">\r\n                  <p class=\"text-small\">{{ childData?.extensiveSupportOption }}</p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isDistrictLiabilityEnabled\">\r\n            <label class=\"font-normal\" for=\"dualDistrictOfLiabilityId\"\r\n              [ngClass]=\"{'required': dualIepPlanId.value == iepPlan.Yes}\">District of Liability</label>\r\n            <mat-form-field appearance=\"fill\" *ngIf=\"!isView\" id=\"liabilitySelect\" class=\"drdp-input\">\r\n              <mat-select formControlName=\"dualDistrictOfLiabilityId\" placeholder=\"District of Liability\">\r\n                <mat-option *ngFor=\"let dol of districtsOfLiability\" [value]=\"dol.id\">\r\n                  {{ dol.districtOfLiabilityName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"dualDistrictOfLiabilityId.invalid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <p>{{ childData?.dualDistrictOfLiabilityName }}</p>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"specialEdInfo.isDistrictLiabilityEnabled\" class=\"form-input-label-group\">\r\n            <label class=\"font-normal\">District ID</label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input matInput type=\"text\" [value]=\"dualDistrictId\" [readonly]=\"true\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div *ngIf=\"specialEdInfo.isDistrictLiabilityEnabled\" class=\"form-input-label-group\">\r\n            <label class=\"font-normal\">SAU ID</label>\r\n            <mat-form-field class=\"bg-white\" [ngClass]=\"{ removeLine: isView }\" appearance=\"fill\">\r\n              <input matInput type=\"text\" [value]=\"dualSauId\" readonly=\"true\" />\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isSpecialEdEntryEnabled\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualSeEntryDate\">Special Education Entry Date</label>\r\n              <p class=\"text-sm\">\r\n                {{ dualSeEntryDate?.value | date : \"MM/dd/yyyy\" }}\r\n              </p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-date-picker label=\"Special Education Entry Date\" [initialDate]=\"dualSeEntryDate?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"false\" labelClasses=\"pb-10 mb-5\"\r\n                (emitDate)=\"handleDate($event, 'dualSeEntryDate')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isAnticipatedDateEnabled\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualSeAnticipateExitDate\">Special Education Anticipated Exit Date</label>\r\n              <p class=\"text-sm\">\r\n                {{ dualSeAnticipateExitDate?.value | date : \"MM/dd/yyyy\" }}\r\n              </p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-date-picker label=\"Special Education Anticipated Exit Date\"\r\n                [initialDate]=\"dualSeAnticipateExitDate?.value\" [isReadOnly]=\"isView\" [isRequired]=\"false\"\r\n                labelClasses=\"pb-5 mb-5\" (emitDate)=\"handleDate($event, 'dualSeAnticipateExitDate')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isInitialAssessmentToolEnabled\">\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualInitialAssessmentToolId\">Initial Assessment Tool</label>\r\n              <p class=\"text-sm\">{{ dualInitialAssessmentToolId.value }}</p>\r\n            </div>\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-initial-assessment-tool-type label=\"Initial Assessment Tool\"\r\n                [initialId]=\"dualInitialAssessmentToolId?.value\"\r\n                (optionSelected)=\"handleInitAssessment($event, 'dualInitialAssessmentToolId')\">\r\n              </drdp-select-initial-assessment-tool-type>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome1Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 1\" [initialId]=\"dualOutcome1Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'dualOutcome1Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualOutcome1Id\">Outcome 1</label>\r\n              <p class=\"text-sm\">{{ dualOutcome1Id.value }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome2Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 2\" [initialId]=\"dualOutcome2Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'dualOutcome2Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualOutcome2Id\">Outcome 2</label>\r\n              <p class=\"text-sm\">{{ dualOutcome2Id.value }}</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"form-input-label-group\" *ngIf=\"specialEdInfo.isOutcome3Enabled\">\r\n            <div *ngIf=\"!isView\">\r\n              <drdp-select-outcome label=\"Outcome 3\" [initialId]=\"dualOutcome3Id?.value\"\r\n                (optionSelected)=\"handleOutcome($event, 'dualOutcome3Id')\">\r\n              </drdp-select-outcome>\r\n            </div>\r\n            <div *ngIf=\"isView\" class=\"bg-white removeLine\" appearance=\"fill\">\r\n              <label class=\"font-normal\" for=\"dualOutcome3Id\">Outcome 3</label>\r\n              <p class=\"text-sm\">{{ dualOutcome3Id.value }}</p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 pt-4 md:pt-8\">\r\n          <div class=\"form-input-label-group\"\r\n            *ngFor=\"let custom of customStateConfig | groupDemographicSection : demographicSections.specialEdInfo\">\r\n            <div [id]=\"custom.label\" *ngIf=\"isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" ngClass=\"removeLine\" appearance=\"fill\">\r\n                <input matInput [readonly]=\"true\" autocomplete=\"off\" [formControlName]=\"custom.label\" maxlength=\"10\" />\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownSingle && !isView\" class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                  (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\">\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\"\r\n              *ngIf=\"custom.customFieldTypeId === fieldType.dropdownMultiple && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n                <mat-select [formControlName]=\"custom.label\" placeholder=\"Select\"\r\n                (selectionChange)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" multiple>\r\n                  <mat-option *ngFor=\"let option of custom.options | option : '|'\" [value]=\"option\">\r\n                    {{ option }}\r\n                  </mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.text && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"text\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.number && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <label class=\"font-normal\" [ngClass]=\"{ required: custom.isRequired }\" [for]=\"custom.label\">\r\n                {{ custom.label }}</label>\r\n              <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                <input placeholder=\"\" matInput type=\"number\" [formControlName]=\"custom.label\"\r\n                  [maxlength]=\"custom.maxLength\"\r\n                  (input)=\"\r\n                    buildCustomConfigObj(\r\n                      custom.label,\r\n                      custom.id,\r\n                      custom.customFieldTypeId\r\n                    )\" />\r\n                <mat-error *ngIf=\"addChildForm.controls[custom.label].invalid\">{{ required }}</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div [id]=\"custom.label\" *ngIf=\"custom.customFieldTypeId === fieldType.date && !isView\"\r\n              class=\"form-input-label-group\">\r\n              <drdp-date-picker [label]=\"custom.label\" [initialDate]=\"addChildForm.get(custom.label)?.value\"\r\n                [isReadOnly]=\"isView\" [isRequired]=\"custom.isRequired\"\r\n                (emitDate)=\"\r\n                  buildCustomConfigObj(\r\n                    custom.label,\r\n                    custom.id,\r\n                    custom.customFieldTypeId,\r\n                    $event\r\n                  )\">\r\n              </drdp-date-picker>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <hr *ngIf=\"!isView\" />\r\n        <div class=\"mt-10 mb-2 flex justify-end\" *ngIf=\"!isView\">\r\n          <drdp-btn class=\"pr-4\" (click)=\"resetAddChildForm()\" color=\"cancel\">\r\n            Cancel\r\n          </drdp-btn>\r\n          <drdp-btn (click)=\"handleSubmit($event)\" [disabled]=\"!addChildForm.valid\" cdkFocusInitial>\r\n            {{ submitBtnLabel }}\r\n          </drdp-btn>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </ng-template>\r\n</div>\r\n","import {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  FormBuilder,\r\n  FormGroup,\r\n  Validators,\r\n  FormControl,\r\n} from '@angular/forms';\r\nimport { combineLatest, Observable,  Subscription, take } from 'rxjs';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport { IInitialAssessmentToolType, IOutcome, ISelectBoolean } from '@core/interfaces/iselectable';\r\nimport {\r\n  IAgeGradeInstrument,\r\n  IAgeGradeEnrollmentProgramFilter,\r\n} from '@core/interfaces/iage-grade-instrument';\r\nimport { ILanguage } from '@core/interfaces/ilanguage';\r\nimport { IDistrictOfLiability } from '@core/interfaces/idistrict-of-liability';\r\nimport { IAdaptationType } from '@core/interfaces/iadaptation-type';\r\nimport { IEthnicity } from '@core/interfaces/iethnicity';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { IDisability } from '@core/interfaces/idisability';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ComponentTypeTable } from '@core/enums/table';\r\nimport {\r\n  IStudentClassEnrollmentDetails,\r\n  IStudentDuplicateValidationDto,\r\n  IStudentUpdateDto,\r\n} from '@core/interfaces/istudent';\r\nimport { IGender } from '@core/interfaces/igender';\r\nimport { ITuitionFee } from '@core/interfaces/ituition-fee';\r\nimport { IIepPlan } from '@core/interfaces/iiep-plan';\r\nimport { SelectType } from '@core/enums/select';\r\nimport {\r\n  formatStringsToNumberArr,\r\n  formatDatesToString,\r\n  replaceWhitespace,\r\n} from '@core/services/helper.service';\r\nimport { AgeGradeInstrument } from '@core/enums/age-grade-instruments';\r\nimport { EnrollmentProgram } from '@core/enums/enrollment-programs';\r\nimport {\r\n  StudentDemographic,\r\n  StudentDemographicEthnicity,\r\n} from '@core/enums/student-demographic-form';\r\nimport { DemographicSections } from '@core/enums/demographic-sections';\r\nimport { DataType, FieldType } from '@core/enums/data-type';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { ICustomFieldValue } from '@core/interfaces/icustom-field-value';\r\nimport { AssignChildComponent } from '@views/user/add-new-child/assign-child/assign-child.component';\r\nimport { States } from '@core/enums/states';\r\nimport { IepPlan, IepPlanValues } from '@core/enums/iep-plan';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectOutcomeComponent } from '@shared/components/dropdowns/select-outcome/select-outcome.component';\r\nimport { IExtensiveSupport } from '@core/interfaces/iextensive-support';\r\n\r\n@Component({\r\n  selector: 'drdp-add-view-edit-child',\r\n  templateUrl: './add-view-edit-child.component.html',\r\n  styleUrls: ['./add-view-edit-child.component.scss'],\r\n})\r\nexport class AddViewEditChildComponent implements OnInit {\r\n  @ViewChild('outcome3Child') outcome3Child: SelectOutcomeComponent | undefined;\r\n  private subscriptions = new Subscription();\r\n  @Output() returnToView = new EventEmitter();\r\n\r\n  get firstName() {\r\n    return this.addChildForm.get('firstName');\r\n  }\r\n  get middleInitial() {\r\n    return this.addChildForm.get('middleInitial');\r\n  }\r\n  get lastName() {\r\n    return this.addChildForm.get('lastName');\r\n  }\r\n  get ssid() {\r\n    return this.addChildForm.get('ssid');\r\n  }\r\n  get dob() {\r\n    return this.addChildForm.get('dob');\r\n  }\r\n  get genderId() {\r\n    return this.addChildForm.get('genderId');\r\n  }\r\n  get languageIds() {\r\n    return this.addChildForm.get('languageIds');\r\n  }\r\n  get eld() {\r\n    return this.addChildForm.get('eld');\r\n  }\r\n  get iepPlanId() {\r\n    return this.addChildForm.get('iepPlanId');\r\n  }\r\n  get dualIepPlanId() {\r\n    return this.addChildForm.get('dualIepPlanId');\r\n  }\r\n  get localId() {\r\n    return this.addChildForm.get('localId');\r\n  }\r\n  get countyOfProgramId() {\r\n    return this.addChildForm.get('countyOfProgramId');\r\n  }\r\n  get countyOfResidenceId() {\r\n    return this.addChildForm.get('countyOfResidenceId');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.addChildForm.get('ageGradeInstrumentId');\r\n  }\r\n  get enrollmentProgramIds() {\r\n    return this.addChildForm.get('enrollmentProgramIds');\r\n  }\r\n  get enrollmentStartDate() {\r\n    return this.addChildForm.get('enrollmentStartDate');\r\n  }\r\n  get enrollmentEndDate() {\r\n    return this.addChildForm.get('enrollmentEndDate');\r\n  }\r\n  get dualEnrollmentProgramIds() {\r\n    return this.addChildForm.get('dualEnrollmentProgramIds');\r\n  }\r\n  get dualEnrollmentStartDate() {\r\n    return this.addChildForm.get('dualEnrollmentStartDate');\r\n  }\r\n  get dualEnrollmentEndDate() {\r\n    return this.addChildForm.get('dualEnrollmentEndDate');\r\n  }\r\n  get seEntryDate() {\r\n    return this.addChildForm.get('seEntryDate');\r\n  }\r\n  get seAnticipateExitDate() {\r\n    return this.addChildForm.get('seAnticipateExitDate');\r\n  }\r\n  get seExitDate() {\r\n    return this.addChildForm.get('seExitDate');\r\n  }\r\n  get ethnicity() {\r\n    return this.addChildForm.get('ethnicityIds');\r\n  }\r\n  get latino() {\r\n    return this.addChildForm.get('latino');\r\n  }\r\n  get other() {\r\n    return this.addChildForm.get('other');\r\n  }\r\n  get programType() {\r\n    return this.addChildForm.get('programType');\r\n  }\r\n  get selpaId() {\r\n    return this.addChildForm.get('selpaId');\r\n  }\r\n  get initialAssessmentToolId() {\r\n    return this.addChildForm.get('initialAssessmentToolId');\r\n  }\r\n  get outcome1Id() {\r\n    return this.addChildForm.get('outcome1Id');\r\n  }\r\n  get outcome2Id() {\r\n    return this.addChildForm.get('outcome2Id');\r\n  }\r\n  get outcome3Id() {\r\n    return this.addChildForm.get('outcome3Id');\r\n  }\r\n  get dualSelpaId() {\r\n    return this.addChildForm.get('dualSelpaId');\r\n  }\r\n  get tuitionFeeId() {\r\n    return this.addChildForm.get('tuitionFeeId');\r\n  }\r\n  get districtOfLiabilityId() {\r\n    return this.addChildForm.get('districtOfLiabilityId');\r\n  }\r\n  get dualPrimaryDisabilityId() {\r\n    return this.addChildForm.get('dualPrimaryDisabilityId');\r\n  }\r\n  get dualSeEntryDate() {\r\n    return this.addChildForm.get('dualSeEntryDate');\r\n  }\r\n  get dualSeAnticipateExitDate() {\r\n    return this.addChildForm.get('dualSeAnticipateExitDate');\r\n  }\r\n  get dualInitialAssessmentToolId() {\r\n    return this.addChildForm.get('dualInitialAssessmentToolId');\r\n  }\r\n  get dualOutcome1Id() {\r\n    return this.addChildForm.get('dualOutcome1Id');\r\n  }\r\n  get dualOutcome2Id() {\r\n    return this.addChildForm.get('dualOutcome2Id');\r\n  }\r\n  get dualOutcome3Id() {\r\n    return this.addChildForm.get('dualOutcome3Id');\r\n  }\r\n  get dualDistrictOfLiabilityId() {\r\n    return this.addChildForm.get('dualDistrictOfLiabilityId');\r\n  }\r\n  get dualExtensiveSupportId() {\r\n    return this.addChildForm.get('dualExtensiveSupportId');\r\n  }\r\n  get districtId() {\r\n    return this.districtOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => (this.isView ? dol.districtOfLiabilityName : dol.id) === this.districtOfLiabilityId.value)?.districtId || ''\r\n      : '';\r\n  }\r\n    get sauId() {\r\n    return this.districtOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => (this.isView ? dol.districtOfLiabilityName : dol.id) === this.districtOfLiabilityId.value)?.sauId || ''\r\n      : '';\r\n  }\r\n  get dualDistrictId() {\r\n    return this.dualDistrictOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => (this.isView ? dol.districtOfLiabilityName : dol.id) === this.dualDistrictOfLiabilityId.value)?.districtId || ''\r\n      : '';\r\n  }\r\n    get dualSauId() {\r\n    return this.dualDistrictOfLiabilityId.value !== null\r\n      ? this.districtsOfLiability.find(\r\n        (dol: IDistrictOfLiability) => (this.isView ? dol.districtOfLiabilityName : dol.id) === this.dualDistrictOfLiabilityId.value)?.sauId || ''\r\n      : '';\r\n  }\r\n\r\n  get drdpId() {\r\n     return this.addChildForm.get('drdpId');\r\n  }\r\n\r\n  public get ComponentTypeTable() {\r\n    return ComponentTypeTable;\r\n  }\r\n  @Input() componentType?: number;\r\n  @Input() childData?: any;\r\n  currentSSID!: string;\r\n  currentLocalID!: string;\r\n  enrollmentProgramPlaceholder: string = 'Select Child Age/Grade Instrument';\r\n  isView?: boolean;\r\n  isAdd?: boolean;\r\n  isEdit?: boolean;\r\n  getFormSelects$: Observable<any> | undefined;\r\n  updateProgramTypesSelect$: Observable<any> | undefined;\r\n  submitBtnLabel: string = history.state.enrollDroppedChild\r\n    ? 'Save and Enroll'\r\n    : 'Save Changes';\r\n  required: string = 'Field required.';\r\n\r\n  yesOrNo: ISelectBoolean[] = [];\r\n  ethnicities: IEthnicity[] = [];\r\n  languagesList: ILanguage[] = [];\r\n  counties: ICounty[] = [];\r\n  districtsOfLiability: IDistrictOfLiability[] = [];\r\n  iepPlans: IIepPlan[] = [];\r\n  adaptations: IAdaptationType[] = [];\r\n  enrollmentProgramTypes!: IAgeGradeEnrollmentProgramFilter[];\r\n  enrollmentProgramTypesFiltered!: IAgeGradeEnrollmentProgramFilter[];\r\n  ageGradeInstruments: IAgeGradeInstrument[] = [];\r\n  disabilities: IDisability[] = [];\r\n  formattedDob?: any;\r\n  formattedEthnicities?: any;\r\n  formattedLanguages?: any = [];\r\n  genders: IGender[] = [];\r\n  tuitionFee: ITuitionFee[] = [];\r\n  stateConfig: IStateConfiguration[] | null = null;\r\n  customStateConfig: IStateConfiguration[] | null = null;\r\n  customFieldCollection: ICustomFieldValue[] = [];\r\n  extensiveSupports: IExtensiveSupport[] = [];\r\n  selectEthnicity = SelectType.Ethnicities;\r\n  iepPlan = IepPlan;\r\n  isDistrictLiabilityRequired = false;\r\n  addChildForm: FormGroup | any;\r\n  userStateId: number = 0;\r\n  otherRequired: boolean = false;\r\n  EnrollmentProgram = EnrollmentProgram;\r\n  AgeGradeInstrument = AgeGradeInstrument;\r\n  ssidLabel = 'Statewide Student Identifier (10-Digit SSID)';\r\n  ssidPatternErrorMsg: string = 'SSID must be 10 numeric digits.';\r\n  ssidLocalIdReqErrorMsg: string = 'Either the SSID or the Agency/District ID need to be filled out.'\r\n  ssidmaxLength = 10;\r\n  agencySidLabel = 'Agency/District Student Identifier (Agency/District)';\r\n  specialEdInfo = {\r\n    isPrimaryDisabilityEnabled: false,\r\n    isDistrictLiabilityEnabled: false,\r\n    isSpecialEdEntryEnabled: false,\r\n    isSpecialEdExitEnabled: false,\r\n    isAnticipatedDateEnabled: false,\r\n    isSelpaEnabled: false,\r\n    isInitialAssessmentToolEnabled: false,\r\n    isOutcome1Enabled: false,\r\n    isOutcome2Enabled: false,\r\n    isOutcome3Enabled: false,\r\n  };\r\n  customFieldMap = new Map();\r\n  customFieldAnsCollection?: ICustomFieldValue[] = [];\r\n\r\n  duplicateStudentValidationPayload!: IStudentDuplicateValidationDto;\r\n  isStudentDuplicate!: boolean;\r\n  inputType: string = this.isView ? 'text' : 'date';\r\n  chosenCountyOfProgram: string = '';\r\n  chosenCountyOfResidence: string = '';\r\n  isEthnicityDisabled = false;\r\n  isLoading = true;\r\n  isNewHampshire = false;\r\n  ssidErrorMsg = 'Duplicate SSID found.';\r\n  withdrawlInfo = 'In order to set the Agency Withdrawal date for the child, please withdraw the child from your agency in the Manage Enrollment page. The date will populate once the child is withdrawn.';\r\n  agencyEnrollmentInfo = 'The day the child was enrolled with your agency.';\r\n  bypassDualEnrollment = this.permissionService.checkPermission(Permission.PowerUserViewDualEnrollments);\r\n  canViewDualEnrollment = this.permissionService.checkPermission(Permission.ViewDualEnrollments);\r\n  classEnrollments?: any;\r\n  isPrimaryAgency = false;\r\n  isDualEnrollment: boolean = false;\r\n  isPilotEnrollment: boolean = false;\r\n  hasFollowUp: boolean = false;\r\n  selectedDisability?: string;\r\n  canViewDualSped: boolean = false;\r\n  primaryDisabilityReq: boolean = false;\r\n  userAgencyId = this.authService.getCurrentUser().agencyId;\r\n  specialEdExitInfo: string = \"In order to set the Special Education Exit Date for child, please exit the child from the Manage Enrollment > Classrooms \" +\r\n    \"page. The date will populate once the child's exit date is saved.\";\r\n\r\n  ageGradeInstrumentWarning: string = \"Warning - changing the Child's Age/Grade Instrument will hide all evidence saved to the child's Portfolio in their \" + \r\n  \"previous Age/Grade Instrument. If needed, please save the child's Portfolio evidence prior to changing their demographic Age/Grade Instrument.\"\r\n  public get studentDemographics() {\r\n    return StudentDemographic;\r\n  }\r\n  public get demographicSections() {\r\n    return DemographicSections;\r\n  }\r\n  public get fieldType() {\r\n    return FieldType;\r\n  }\r\n  public get dataType() {\r\n    return DataType;\r\n  }\r\n  public get ethnicityvalues() {\r\n    return StudentDemographicEthnicity;\r\n  }\r\n\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public toastService: ToastService,\r\n    private lookupService: LookupService,\r\n    public studentService: StudentService,\r\n    public authService: AuthService,\r\n    private stateService: StateService,\r\n    public modal: MatDialog,\r\n    public permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.isLoading = true;\r\n    this.isView = this.componentType === this.ComponentTypeTable.View;\r\n    this.isEdit = this.componentType === this.ComponentTypeTable.Edit;\r\n    this.isAdd = this.componentType === this.ComponentTypeTable.Add;\r\n    this.inputType = this.isView ? 'text' : 'date';\r\n    this.userStateId = this.authService.getUserStateId();\r\n    this.isNewHampshire = this.userStateId == States.newHampshire;\r\n    this.getFormSelects$ = combineLatest({\r\n      ethnicities: this.lookupService.getEthnicities(this.userStateId),\r\n      languagesList: this.lookupService.getLanguages(),\r\n      counties: this.lookupService.getCountyList(),\r\n      districtsOfLiability: this.lookupService.getDistrictsOfLiability(),\r\n      iepPlans: this.lookupService.getIepPlans(),\r\n      adaptations: this.lookupService.getAdaptationTypes(),\r\n      ageGradeInstruments: this.lookupService.getAgeGradeInstruments(\r\n        this.userStateId\r\n      ),\r\n      disabilities: this.lookupService.getDisabilities(),\r\n      genders: this.lookupService.getGenders(this.userStateId), // needs to filter based on state config\r\n      tuitionFee: this.lookupService.getTuitionFees(),\r\n      yesOrNo: this.lookupService.getBasicSelects(),\r\n      enrollmentProgramTypes: this.lookupService.getAgeGradeEnrollmentFilters(),\r\n      stateConfig: this.stateService.getStateConfigurations(this.userStateId),\r\n      customConfigs: this.stateService.getCustomStateConfigurations(\r\n        this.userStateId\r\n      ),\r\n      studentCustomFields: this.studentService.getStudentCustomFields(\r\n        this.childData.drdpId\r\n      ),\r\n      extensiveSupports: this.lookupService.getExtensiveSupports()\r\n    });\r\n    this.initializeForm();\r\n    this.subscriptions.add(\r\n      this.getFormSelects$.subscribe((res: any) => {\r\n        this.ethnicities = res['ethnicities'];\r\n        this.languagesList = res['languagesList'];\r\n        this.counties = res['counties'];\r\n        this.districtsOfLiability = res['districtsOfLiability'];\r\n        this.iepPlans = res['iepPlans'];\r\n        this.adaptations = res['adaptations'];\r\n        this.ageGradeInstruments = res['ageGradeInstruments'];\r\n        this.disabilities = res['disabilities'];\r\n        this.genders = res['genders'];\r\n        this.tuitionFee = res['tuitionFee'];\r\n        this.yesOrNo = res['yesOrNo'];\r\n        this.enrollmentProgramTypes = res['enrollmentProgramTypes'];\r\n        this.stateConfig = res['stateConfig'];\r\n        this.customStateConfig = res['customConfigs'];\r\n        this.customFieldCollection = res['studentCustomFields'];\r\n        this.extensiveSupports = res['extensiveSupports']\r\n\r\n        if (this.componentType !== ComponentTypeTable.Add)\r\n          this.loadFormValues();\r\n\r\n        this.checkSpecialEdInfo();\r\n        this.buildCustomConfigFormControl();\r\n\r\n        // set SSID & LocalId custom labels\r\n        const ssid = this.stateConfig?.find(\r\n          (x: any) => x.columnName === this.studentDemographics.SSID\r\n        );\r\n        this.ssidLabel = ssid?.label ? ssid?.label : this.ssidLabel;\r\n        const localId = this.stateConfig?.find(\r\n          (x: any) => x.columnName === this.studentDemographics.AgencySID\r\n        );\r\n        this.agencySidLabel = localId?.label\r\n          ? localId?.label\r\n          : this.agencySidLabel;\r\n\r\n        this.ssidErrorMsg = this.isNewHampshire\r\n          ? 'Duplicate SASID found.'\r\n          : this.ssidErrorMsg;\r\n\r\n        this.ssidmaxLength = ssid?.maxLength! ?? this.ssidmaxLength;\r\n\r\n        this.ssidPatternErrorMsg = `${this.isNewHampshire ? 'SASID' : 'SSID'} must be ${this.ssidmaxLength } numeric digits.`;\r\n\r\n        this.ssidLocalIdReqErrorMsg = `Either the ${this.isNewHampshire ? 'SASID' : 'SSID'} or the Agency/District ID need to be filled out.`\r\n\r\n        // Get SSID && LocalId Max Length\r\n        if (ssid?.maxLength) {\r\n          this.ssidmaxLength = ssid.maxLength;\r\n          this.ssid.setValidators([Validators.pattern(new RegExp(`^\\\\d{${this.ssidmaxLength}}$`))]);\r\n          this.ssid.updateValueAndValidity();\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.addChildForm = this.fb.group({\r\n      // ========== Child Information ==========\r\n      firstName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      middleInitial: [null, Validators.maxLength(2)],\r\n      lastName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      ssid: [\r\n        null,\r\n        {\r\n          validators: [Validators.required, Validators.pattern(/^\\d{10}$/)],\r\n          updateOn: 'blur',\r\n        },\r\n      ],\r\n      drdpId: [null],\r\n      localId: [\r\n        null,\r\n        {\r\n          validators: [Validators.pattern('^[0-9]*$')],\r\n          updateOn: 'blur',\r\n        },\r\n      ],\r\n      ageGradeInstrumentId: [null, [Validators.required]],\r\n      dob: [null, [Validators.required]],\r\n      genderId: [null, [Validators.required]],\r\n      socialEconomic: [0],\r\n      // ========== Race & Ethnicity ==========\r\n      latino: [null, [Validators.required]],\r\n      ethnicityIds: [null, [Validators.required]],\r\n      // ========== Language ==========\r\n      languageIds: [null, [Validators.required]],\r\n      eld: [null, [Validators.required]],\r\n      // ========== Program ==========\r\n      enrollmentProgramIds: [null, Validators.required],\r\n      dualEnrollmentProgramIds: [null],\r\n      other: [null],\r\n      enrollmentStartDate: [null, [Validators.required]],\r\n      enrollmentEndDate: [null],\r\n      dualEnrollmentStartDate: [null],\r\n      dualEnrollmentEndDate: [null],\r\n      countyOfProgramId: [null],\r\n      countyOfResidenceId: [null],\r\n      tuitionFeeId: [null],\r\n      // ========== Special Education ==========\r\n      iepPlanId: [null, [Validators.required]],\r\n      dualIepPlanId: [null],\r\n      primaryDisabilityId: [null],\r\n      districtOfLiabilityId: [null],\r\n      adaptationIds: [null],\r\n      dualAdaptationIds: [null],\r\n      seEntryDate: [null],\r\n      seAnticipateExitDate: [null],\r\n      seExitDate: [null],\r\n      selpaId: [null],\r\n      dualSelpaId: [null],\r\n      initialAssessmentToolId: [null],\r\n      outcome1Id: [null],\r\n      outcome2Id: [null],\r\n      outcome3Id: [null],\r\n      dualPrimaryDisabilityId: [null],\r\n      dualSeEntryDate: [null],\r\n      dualSeAnticipateExitDate: [null],\r\n      dualInitialAssessmentToolId: [null],\r\n      dualOutcome1Id: [null],\r\n      dualOutcome2Id: [null],\r\n      dualOutcome3Id: [null],\r\n      dualDistrictOfLiabilityId: [null],\r\n      dualExtensiveSupportId: [null]\r\n    });\r\n  }\r\n\r\n  loadFormValues(): void {\r\n    this.onFormChanges();\r\n    this.chosenCountyOfProgram = this.childData?.countyName;\r\n    this.chosenCountyOfResidence = this.childData?.residenceCountyName;\r\n    this.currentSSID = this.childData?.ssid;\r\n    this.addChildForm.patchValue({\r\n      // ========== Child Information ==========\r\n      firstName: this.childData?.firstName,\r\n      middleInitial: this.childData?.middleInitial,\r\n      lastName: this.childData?.lastName,\r\n      drdpId: this.childData?.drdpId,\r\n      ageGradeInstrumentId: this.isView\r\n        ? this.childData?.ageGradeInstrumentName\r\n        : this.childData?.ageGradeInstrumentId,\r\n      dob: formatDatesToString(this.childData?.dob),\r\n      genderId: this.isView\r\n        ? this.childData?.genderName\r\n        : this.childData?.genderId,\r\n      socialEconomic: this.childData?.socialEconomic,\r\n      // ========== Race & Ethnicity ==========\r\n      latino: this.isView\r\n        ? this.returnYesOrNo(this.childData?.latino)\r\n        : [this.childData?.latino],\r\n      ethnicityIds: this.isView\r\n        ? this.childData?.ethnicities\r\n        : formatStringsToNumberArr(this.childData?.ethnicityIds),\r\n      // ========== Language ==========\r\n      languageIds: this.isView\r\n        ? this.childData?.languages\r\n        : formatStringsToNumberArr(this.childData?.languageIds),\r\n      eld: this.isView\r\n        ? this.returnYesOrNo(this.childData?.eld)\r\n        : [this.childData?.eld],\r\n      // ========== Program ==========\r\n      enrollmentProgramIds: this.isView\r\n        ? this.childData?.enrollmentProgramNames\r\n        : formatStringsToNumberArr(this.childData?.enrollmentProgramIds),\r\n      dualEnrollmentProgramIds: this.isView\r\n        ? this.childData?.dualEnrollmentProgramNames\r\n        : formatStringsToNumberArr(this.childData?.dualEnrollmentProgramIds),\r\n      other: this.childData?.otherPrograms,\r\n      enrollmentStartDate: history.state.enrollDroppedChild ? null : this.childData?.enrollmentStartDate,\r\n      enrollmentEndDate: history.state.enrollDroppedChild ? null : this.childData?.enrollmentEndDate,\r\n      dualEnrollmentStartDate: history.state.enrollDroppedChild ? null : this.childData?.dualEnrollmentStartDate,\r\n      dualEnrollmentEndDate: history.state.enrollDroppedChild ? null : this.childData?.dualEnrollmentEndDate,\r\n      countyOfProgramId: this.childData?.countyId,\r\n      countyOfResidenceId: this.childData?.countyOfResidenceId,\r\n      tuitionFeeId: this.isView\r\n        ? this.childData?.tuitionFeeName\r\n        : this.childData?.tuitionFeeId,\r\n      // ========== Special Education ==========\r\n      iepPlanId: this.isView\r\n        ? this.childData?.iepPlanName\r\n        : this.childData?.iepPlanId,\r\n      dualIepPlanId: this.isView\r\n        ? this.childData?.dualEnrollmentIepPlanName\r\n        : this.childData?.dualEnrollmentIepPlanId,\r\n      primaryDisabilityId: this.isView\r\n        ? this.childData?.primaryDisabilityName\r\n        : this.childData?.primaryDisabilityId,\r\n      districtOfLiabilityId: this.isView\r\n        ? this.childData?.districtOfLiabilityName\r\n        : this.childData?.districtOfLiabilityId,\r\n      adaptationIds: this.isView\r\n        ? this.childData?.adaptations\r\n        : formatStringsToNumberArr(this.childData?.adaptationIds),\r\n      dualAdaptationIds: this.isView\r\n        ? this.childData?.dualAdaptations\r\n        : formatStringsToNumberArr(this.childData?.dualAdaptationIds),\r\n      seEntryDate: this.childData?.seEntryDate,\r\n      seAnticipateExitDate: this.childData?.seAnticipateExitDate,\r\n      seExitDate: this.childData?.seExitDate,\r\n      selpaId: this.childData?.selpaId,\r\n      dualSelpaId: this.childData?.dualEnrollmentSelpaId,\r\n      initialAssessmentToolId: this.childData?.initialAssessmentToolId,\r\n      outcome1Id: this.childData?.outcome1Id,\r\n      outcome2Id: this.childData?.outcome2Id,\r\n      outcome3Id: this.childData?.outcome3Id,\r\n      dualPrimaryDisabilityId: this.isView\r\n        ? this.childData?.dualPrimaryDisabilityName\r\n        : this.childData?.dualPrimaryDisabilityId,\r\n      dualSeEntryDate: this.childData?.dualSeEntryDate,\r\n      dualSeAnticipateExitDate: this.childData?.dualSeAnticipateExitDate,\r\n      dualInitialAssessmentToolId: this.isView\r\n        ? this.childData?.dualInitialAssessmentToolName\r\n        : this.childData?.dualInitialAssessmentToolId,\r\n      dualOutcome1Id: this.isView\r\n        ? this.childData?.dualOutcome1Name\r\n        : this.childData?.dualOutcome1Id,\r\n      dualOutcome2Id: this.isView\r\n        ? this.childData?.dualOutcome2Name\r\n        : this.childData?.dualOutcome2Id,\r\n      dualOutcome3Id: this.isView\r\n        ? this.childData?.dualOutcome3Name\r\n        : this.childData?.dualOutcome3Id,\r\n      dualDistrictOfLiabilityId: this.isView\r\n        ? this.childData?.dualDistrictOfLiabilityName\r\n        : this.childData?.dualDistrictOfLiabilityId,\r\n      dualExtensiveSupportId: this.isView\r\n        ? this.childData?.dualExtensiveSupportName\r\n        : this.childData?.dualExtensiveSupportId\r\n    });\r\n\r\n    if (this.childData?.ssid) {\r\n      this.addChildForm.patchValue({\r\n        ssid: this.childData?.ssid,\r\n      });\r\n    }\r\n\r\n    if (this.childData?.localId) {\r\n      this.addChildForm.patchValue({\r\n        localId: this.childData?.localId,\r\n      });\r\n    }\r\n\r\n    if (this.currentSSID) {\r\n      this.localId.setValidators([]);\r\n      this.localId.updateValueAndValidity();\r\n    }\r\n\r\n    if (this.currentLocalID) {\r\n      this.ssid.setValidators([Validators.pattern(/^\\d{10}$/)]);\r\n      this.ssid.updateValueAndValidity();\r\n    }\r\n    this.getEnrollmentDetails(this.drdpId.value);\r\n    this.selectedDisability = this.childData?.dualPrimaryDisabilityName;\r\n    this.hasFollowUp = this.childData?.hasFollowUp;\r\n    this.isLoading = false;\r\n  }\r\n\r\n  getEnrollmentDetails(studentId: number): void {\r\n    if (studentId) {\r\n      this.studentService\r\n      .getClassroomEnrollmentDetails(studentId)\r\n      .pipe(\r\n        take(1)\r\n      )\r\n      .subscribe((res: any) => {\r\n        this.isPrimaryAgency = res.some((enrollment: any) => !enrollment.isDualEnrollment);\r\n        this.isDualEnrollment = res.some((enrollment: any) => enrollment.isDualEnrollment);\r\n        this.isPilotEnrollment = res.some((enrollment: any) => enrollment.isPilotEnrollment);\r\n      });\r\n      this.canViewDualSped = this.bypassDualEnrollment || this.isDualEnrollment || this.isPilotEnrollment;\r\n      this.primaryDisabilityReq = this.dualIepPlanId == this.iepPlan.Yes && this.isPilotEnrollment;\r\n    }\r\n  }\r\n\r\n  validateSSID() {\r\n    if (this.ssid.value) {\r\n      this.studentService\r\n        .checkDuplicateStringSSID(this.ssid.value, this.userStateId)\r\n        .pipe(take(1))\r\n        .subscribe((isDuplicate: boolean) => {\r\n          if (isDuplicate) {\r\n            this.ssid.setErrors({ duplicateSSID: true });\r\n            this.localId.setValidators([Validators.required]);\r\n          } else {\r\n            this.localId.setValidators([]);\r\n          }\r\n          this.localId.updateValueAndValidity();\r\n        });\r\n    }\r\n  }\r\n\r\n  returnYesOrNo(value: number) {\r\n    return value == 0 ? 'No' : value == 1 ? 'Yes' : 'Unknown';\r\n  }\r\n\r\n  handleSubmit(event?: any): void {\r\n    if (!this.ssid.value && !this.localId.value) {\r\n      this.ssid.setValidators([Validators.required]);\r\n      this.ssid.updateValueAndValidity();\r\n    }\r\n\r\n    if (!this.addChildForm.valid) {\r\n      this.addChildForm.updateValueAndValidity();\r\n      this.toastService.error('Please complete the form before submitting.');\r\n      return;\r\n    }\r\n\r\n    this.updateStudent();\r\n  }\r\n\r\n  updateStudent(): void {\r\n    let customUpdatedValues: ICustomFieldValue[] = [];\r\n    this.customFieldMap.forEach((config: ICustomFieldValue) => {\r\n      customUpdatedValues.push(config);\r\n    });\r\n\r\n    this.firstName?.setValue(replaceWhitespace(this.firstName.value));\r\n    this.lastName?.setValue(replaceWhitespace(this.lastName.value));\r\n    let payload: IStudentUpdateDto = this.addChildForm.value;\r\n    payload.eld = this.eld.value.length ? this.eld.value[0] : this.eld.value;\r\n    payload.latino = this.latino.value.length\r\n      ? this.latino.value[0]\r\n      : this.latino.value;\r\n    payload.customFields = customUpdatedValues;\r\n    if (this.isEdit) {\r\n      this.studentService\r\n        .updateStudent(payload, 'Student successfully updated.')\r\n        .subscribe((res: any) => {\r\n          if (res) {\r\n            this.isEdit = !this.isEdit;\r\n            this.isView = !this.isView;\r\n            this.returnToView.emit();\r\n          }\r\n          if (history.state.enrollDroppedChild) {\r\n            this.openEnrollDroppedChildModal();\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  openEnrollDroppedChildModal(): void {\r\n    var data = this.addChildForm.value;\r\n    data.enrollDroppedChild = true;\r\n    const modalRef = this.modal.open(AssignChildComponent, { data: data });\r\n    modalRef.afterClosed().subscribe((result: any) => {\r\n      if (result) {\r\n        this.toastService.success('Student Successfully Saved and Enrolled');\r\n        window.location.reload();\r\n      }\r\n    });\r\n  }\r\n\r\n  onFormChanges(): void {\r\n    this.ageGradeInstrumentId.valueChanges.subscribe((val: any) => {\r\n      this.enrollmentProgramIds.reset();\r\n      this.enrollmentProgramTypesFiltered = [];\r\n      this.enrollmentProgramPlaceholder = 'Select all that apply';\r\n      this.enrollmentProgramTypesFiltered =\r\n      this.enrollmentProgramTypes?.filter((ept: IAgeGradeEnrollmentProgramFilter) => {\r\n              return ept.ageGradeInstrumentId === val;\r\n            });\r\n      this.enrollmentProgramIds.setValue(formatStringsToNumberArr(this.childData?.enrollmentProgramIds));\r\n      this.dualEnrollmentProgramIds.setValue(\r\n        formatStringsToNumberArr(this.childData?.dualEnrollmentProgramIds)\r\n      );\r\n    });\r\n\r\n    this.enrollmentProgramIds.valueChanges.subscribe((val: any) => {\r\n      if (\r\n        val &&\r\n        (val.includes(this.EnrollmentProgram.other) ||\r\n          val.includes(EnrollmentProgram.otherNH))\r\n      ) {\r\n        this.other.setValidators([Validators.required]);\r\n        this.other.updateValueAndValidity();\r\n        this.otherRequired = true;\r\n        return;\r\n      }\r\n\r\n      this.other.reset();\r\n      this.other.setValidators([]);\r\n      this.other.updateValueAndValidity();\r\n      this.otherRequired = false;\r\n    });\r\n\r\n    this.ssid.valueChanges.subscribe((val: any) => {\r\n      if (this.currentSSID == val) {\r\n        this.localId.setValidators([]);\r\n        this.localId.updateValueAndValidity();\r\n        return;\r\n      }\r\n      if (this.ssid.valid) {\r\n        this.validateSSID();\r\n      } else {\r\n        this.localId.setValidators([Validators.required]);\r\n        this.localId.updateValueAndValidity();\r\n      }\r\n    });\r\n\r\n    this.localId.valueChanges.subscribe((val: any) => {\r\n      var ssidPattern = new RegExp(`^\\\\d{${this.ssidmaxLength}}$`);\r\n      if (this.currentLocalID == val) return;\r\n      this.currentLocalID = val;\r\n      if (this.localId.valid) {\r\n        if (this.currentLocalID) {\r\n          this.ssid.setValidators([Validators.pattern(ssidPattern)]);\r\n        } else {\r\n          this.ssid.setValidators([\r\n            Validators.required,\r\n            Validators.pattern(ssidPattern),\r\n          ]);\r\n        }\r\n        this.ssid.updateValueAndValidity();\r\n      } else {\r\n        this.ssid.setValidators([\r\n          Validators.required,\r\n          Validators.minLength(this.ssidmaxLength),\r\n          Validators.pattern(ssidPattern),\r\n        ]);\r\n        this.ssid.updateValueAndValidity();\r\n      }\r\n    });\r\n\r\n    if (this.ssid.invalid) this.ssid.markAsTouched();\r\n    if (this.localId.invalid) this.localId.markAsTouched();\r\n    if (this.middleInitial) this.middleInitial.markAsTouched();\r\n\r\n    this.dualIepPlanId.valueChanges.subscribe((val: any) => {\r\n      const isIepPlanYes = val == this.iepPlan.Yes;\r\n\r\n      if (this.specialEdInfo.isDistrictLiabilityEnabled) {\r\n        if (isIepPlanYes) {\r\n          this.dualDistrictOfLiabilityId.setValidators([Validators.required]);\r\n          this.dualDistrictOfLiabilityId.updateValueAndValidity();\r\n        }\r\n        else {\r\n          this.dualDistrictOfLiabilityId.setValidators([]);\r\n          this.dualDistrictOfLiabilityId.updateValueAndValidity();\r\n        }\r\n      }\r\n      else if (this.isPilotEnrollment) {\r\n        this.primaryDisabilityReq = isIepPlanYes;\r\n        this.selectedDisability = isIepPlanYes ? 'Primary Disability' : this.selectedDisability;\r\n        this.hasFollowUp = !isIepPlanYes;\r\n        if (!isIepPlanYes) {\r\n          this.dualPrimaryDisabilityId.setValue(null);\r\n          this.dualExtensiveSupportId.setValue(null);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  resetAddChildForm(): void {\r\n    window.location.reload();\r\n    if (this.componentType === ComponentTypeTable.Add)\r\n      this.toastService.success('The form has been reset.');\r\n  }\r\n\r\n  checkSpecialEdInfo(): void {\r\n    if (this.stateConfig) {\r\n      this.stateConfig.forEach((config: IStateConfiguration) => {\r\n        switch (config.columnName) {\r\n          case this.studentDemographics.PrimaryDisability:\r\n            this.specialEdInfo.isPrimaryDisabilityEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.DistrictLiability:\r\n            this.specialEdInfo.isDistrictLiabilityEnabled = config.isActive;\r\n            if (this.isNewHampshire &&\r\n              (this.childData?.iepPlanName === IepPlanValues.Yes || this.iepPlanId.value === this.iepPlan.Yes)) {\r\n              this.isDistrictLiabilityRequired = true;\r\n              this.districtOfLiabilityId.setValidators(Validators.required);\r\n              this.districtOfLiabilityId.updateValueAndValidity();\r\n            }\r\n            break;\r\n          case this.studentDemographics.SpecialEdEntryDate:\r\n            this.specialEdInfo.isSpecialEdEntryEnabled = config.isActive;\r\n            this.setSpecialEdEntryDateValidation();\r\n            break;\r\n          case this.studentDemographics.AnticipatedDateExit:\r\n            this.specialEdInfo.isAnticipatedDateEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.DateExit:\r\n            this.specialEdInfo.isSpecialEdExitEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.Selpa:\r\n            this.specialEdInfo.isSelpaEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.initialAssessmentToolId:\r\n            this.specialEdInfo.isInitialAssessmentToolEnabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome1Id:\r\n            this.specialEdInfo.isOutcome1Enabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome2Id:\r\n            this.specialEdInfo.isOutcome2Enabled = config.isActive;\r\n            break;\r\n          case this.studentDemographics.outcome3Id:\r\n            this.specialEdInfo.isOutcome3Enabled = config.isActive;\r\n            break;\r\n          default:\r\n            return;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  buildCustomConfigFormControl(): void {\r\n    if (this.customStateConfig) {\r\n      this.customStateConfig.forEach((config: IStateConfiguration) => {\r\n        if (config.isActive) {\r\n          let formControlExist = false;\r\n\r\n          if (this.customFieldCollection.length) {\r\n            this.customFieldCollection.forEach(\r\n              (customValue: ICustomFieldValue) => {\r\n                if (config.id === customValue.stateDemographicConfigurationId) {\r\n                  if (config.isRequired) {\r\n                    this.addChildForm.addControl(\r\n                      config.label,\r\n                      new FormControl(null, [\r\n                        Validators.required,\r\n                        Validators.maxLength(config.maxLength),\r\n                      ])\r\n                    );\r\n                    this.addChildForm.patchValue({\r\n                      [config.label]: this.findCustomValue(\r\n                        customValue,\r\n                        config.customFieldTypeId\r\n                      ),\r\n                    });\r\n                  } else {\r\n                    this.addChildForm.addControl(\r\n                      config.label,\r\n                      new FormControl(\r\n                        this.findCustomValue(\r\n                          customValue,\r\n                          config.customFieldTypeId\r\n                        ),\r\n                        Validators.maxLength(config.maxLength)\r\n                      )\r\n                    );\r\n                    this.addChildForm.patchValue({\r\n                      [config.label]: this.findCustomValue(\r\n                        customValue,\r\n                        config.customFieldTypeId\r\n                      ),\r\n                    });\r\n                  }\r\n                  formControlExist = true;\r\n                }\r\n              }\r\n            );\r\n          }\r\n          if (!formControlExist) {\r\n            if (config.isRequired) {\r\n              this.addChildForm.addControl(\r\n                config.label,\r\n                new FormControl(null, [\r\n                  Validators.required,\r\n                  Validators.maxLength(config.maxLength),\r\n                ])\r\n              );\r\n            } else {\r\n              this.addChildForm.addControl(\r\n                config.label,\r\n                new FormControl(null, Validators.maxLength(config.maxLength))\r\n              );\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  findCustomValue(customField: ICustomFieldValue, fieldType: number): any {\r\n    switch (fieldType) {\r\n      case FieldType.date:\r\n        return formatDatesToString(customField.dateValue);\r\n      case FieldType.dropdownMultiple:\r\n        return customField.lgCharValue.split('|');\r\n      case FieldType.dropdownSingle:\r\n      case FieldType.text:\r\n        return customField.smCharValue;\r\n      case FieldType.number:\r\n        return customField.intValue;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  buildCustomConfigObj(\r\n    colName: string,\r\n    configId: number,\r\n    customFieldTypeId: number,\r\n    event?: any\r\n  ): void {\r\n    if (event) {\r\n      this.addChildForm.get(colName).setValue(event);\r\n    }\r\n    const ans = this.addChildForm.get(colName).value;\r\n    const customValueExist = this.customFieldCollection.find(\r\n      (customField: ICustomFieldValue) =>\r\n        customField.stateDemographicConfigurationId === configId\r\n    );\r\n    const customField: ICustomFieldValue = {\r\n      id: customValueExist?.id ?? 0,\r\n      studentId: this.childData.drdpId,\r\n      stateDemographicConfigurationId: configId,\r\n      intValue: customFieldTypeId == FieldType.number ? ans : 0,\r\n      smCharValue:\r\n        customFieldTypeId === FieldType.dropdownSingle ||\r\n        customFieldTypeId === FieldType.text\r\n          ? ans\r\n          : '',\r\n      lgCharValue:\r\n        customFieldTypeId === FieldType.dropdownMultiple ? ans.join('|') : '',\r\n      dateValue: customFieldTypeId === FieldType.date ? ans : '',\r\n    };\r\n    this.customFieldMap.set(colName, customField);\r\n  }\r\n\r\n  handleChosenCountyOfProgram(event: any): void {\r\n    this.chosenCountyOfProgram = event?.countyName;\r\n    this.countyOfProgramId.setValue(event?.id);\r\n  }\r\n\r\n  handleChosenCountyOfResidence(event: any): void {\r\n    this.chosenCountyOfResidence = event?.countyName;\r\n    this.countyOfResidenceId.setValue(event?.id);\r\n  }\r\n\r\n  handleChosenSelpa(event: any, isPrimary: boolean): void {\r\n    if (isPrimary) {\r\n      this.selpaId.setValue(event?.id);\r\n    } else {\r\n      this.dualSelpaId.setValue(event?.id);\r\n    }\r\n  }\r\n\r\n  handleChosenEthnicity(event: any): void {\r\n    if (\r\n      event.id === this.ethnicityvalues.Intentionally_left_blank &&\r\n      !this.isEthnicityDisabled\r\n    ) {\r\n      this.isEthnicityDisabled = true;\r\n      this.ethnicity.setValue([event.id]);\r\n    } else if (\r\n      event.id === this.ethnicityvalues.Intentionally_left_blank &&\r\n      this.isEthnicityDisabled\r\n    ) {\r\n      this.isEthnicityDisabled = false;\r\n    }\r\n  }\r\n\r\n\r\n  handleDate(event: any, controlName: string): void {\r\n    if (event === '' || !event) {\r\n      this.addChildForm.get(controlName).setValue(formatDatesToString(null));\r\n    } else {\r\n      this.addChildForm.get(controlName).setValue(formatDatesToString(event));\r\n    }\r\n  }\r\n\r\n  handleEld(event: ISelectBoolean): void {\r\n    this.eld.setValue(event?.id);\r\n  }\r\n\r\n  handleAgeGrade(event: IAgeGradeInstrument): void {\r\n    this.ageGradeInstrumentId.setValue(event?.id);\r\n  }\r\n\r\n  handleHispanic(event: ISelectBoolean): void {\r\n    this.latino.setValue(event?.id);\r\n  }\r\n\r\n  handleIep(event: IIepPlan, primary: boolean): void {\r\n    if (primary) {\r\n      this.iepPlanId.setValue(event?.id);\r\n\r\n      if (this.isNewHampshire && this.specialEdInfo.isDistrictLiabilityEnabled && event?.id == this.iepPlan.Yes) {\r\n        this.isDistrictLiabilityRequired = true;\r\n        this.districtOfLiabilityId.addValidators([Validators.required]);\r\n        this.districtOfLiabilityId.updateValueAndValidity();\r\n      }\r\n      else {\r\n        this.isDistrictLiabilityRequired = false;\r\n        this.districtOfLiabilityId.clearValidators();\r\n        this.districtOfLiabilityId.updateValueAndValidity();\r\n      }\r\n      this.setSpecialEdEntryDateValidation();\r\n    } else {\r\n      this.dualIepPlanId.setValue(event?.id);\r\n    }\r\n  }\r\n\r\n  setSpecialEdEntryDateValidation(): void {\r\n    if (this.specialEdInfo.isSpecialEdEntryEnabled) {\r\n      if (this.iepPlanId.value == this.iepPlan.Yes) this.seEntryDate.setValidators([Validators.required]);\r\n      else this.seEntryDate.clearValidators();\r\n      this.seEntryDate.updateValueAndValidity();\r\n    }\r\n  }\r\n\r\n  handleOutcome(event: IOutcome, controlName: string): void {\r\n    if (!this.addChildForm.get(controlName)) return;\r\n    this.addChildForm.get(controlName).setValue(event?.id);\r\n  }\r\n\r\n  handleInitAssessment(event: IInitialAssessmentToolType, control: string): void {\r\n    this.addChildForm.get(control).setValue(event?.id);\r\n  }\r\n\r\n  handlePrimaryDisability(event: any) {\r\n    this.dualPrimaryDisabilityId.setValue(event.value.id);\r\n    this.hasFollowUp = event.value.hasFollowUp;\r\n    if (!this.hasFollowUp) this.dualExtensiveSupportId.setValue(null);\r\n    this.selectedDisability = event.value.primaryDisabilityName;\r\n  }\r\n\r\n  deselectCheck(id: number): void {\r\n    const currentTuitionFeeId = this.tuitionFeeId?.value;\r\n    if (currentTuitionFeeId === id) {\r\n      this.tuitionFeeId?.setValue(null);\r\n    } else {\r\n      this.tuitionFeeId?.setValue(id);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['childData']['previousValue'] != undefined) {\r\n      this.childData = changes['childData']['currentValue'];\r\n      this.initializeForm();\r\n      this.loadFormValues();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions?.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Editing Classroom Start Date</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content *ngIf=\"studentEnrollmentInfo\">\r\n    <form class=\"grid grid-cols-2 gap-2 gap-x-10 p-3\" [formGroup]=\"editForm\">\r\n      <div class=\"col-span-1 mt-2\">\r\n        <label class=\"font-bold mb-1\">Rating Period</label>\r\n        <p>\r\n          {{ studentEnrollmentInfo.ratingPeriodName }}\r\n        </p>\r\n      </div>\r\n      <div class=\"col-span-1 mt-2\">\r\n        <label class=\"font-bold mb-1\">Classroom</label>\r\n        <p>\r\n          {{ studentEnrollmentInfo.name }}\r\n        </p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-date-picker\r\n          label=\"Classroom Start Date\"\r\n          labelClasses=\"pb-1 whitespace-nowrap\"\r\n          [initialDate]=\"classEnrollmentDate?.value\"\r\n          [isRequired]=\"true\"\r\n          [minDate]=\"studentEnrollmentInfo.enrollmentStartDate\"\r\n          [maxDate]=\"studentEnrollmentInfo.ratingPeriodMaxDate\"\r\n          (emitDate)=\"handleDate($event)\">\r\n        </drdp-date-picker>\r\n      </div>\r\n      <div class=\"col-span-1 mt-2\">\r\n        <label class=\"font-bold mb-1\">Classroom Withdrawal Date</label>\r\n        <p>\r\n          {{ studentEnrollmentInfo.classExitDate | date:'MM/dd/yyyy' }}\r\n        </p>\r\n      </div>\r\n      <div class=\"col-span-1 mt-2\">\r\n        <label class=\"font-bold mb-1\">Site</label>\r\n        <p>\r\n          {{ studentEnrollmentInfo.siteName }}\r\n        </p>\r\n      </div>\r\n      <div *ngIf=\"studentEnrollmentInfo.isDualEnrollment\" class=\"col-span-1 mt-2\">\r\n        <drdp-select-age-grade\r\n              #ageGroupInstrumentSelect\r\n              [initialageGradeId]=\"ageGradeId.value\"\r\n              (ageGrade)=\"handleAgeGrade($event)\"\r\n              [stateId]=\"stateId\"\r\n              [multiSelect]=\"false\"\r\n              [required]=\"true\"\r\n              label=\"Child Age/Grade Instrument\"\r\n            >\r\n            </drdp-select-age-grade>\r\n      </div>\r\n    </form>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn class=\"mx-2\" color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn\r\n      mat-button\r\n      [disabled]=\"editForm.invalid || editForm.pristine\"\r\n      (click)=\"onSubmit()\">Save</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-edit-class-enrollment-date',\r\n  templateUrl: './edit-class-enrollment-date.component.html',\r\n  styleUrls: ['./edit-class-enrollment-date.component.scss']\r\n})\r\nexport class EditClassEnrollmentDate implements OnInit {\r\n  editForm: FormGroup | any;\r\n  studentEnrollmentInfo: any;\r\n  defaultDateError: string = \"Please enter classroom enrollment date between rating period's start and end dates.\";\r\n  agencyDateError: string = \"Please enter classroom enrollment date on or after agency enrollment date.\";\r\n  isAgencyDateError: boolean = false;\r\n  stateId: number = 0;\r\n  originalAgeGradeId: number = 0;\r\n\r\n  constructor(\r\n    public studentClassEnrollmentService: StudentClassEnrollmentService,\r\n    public toastService: ToastService,\r\n    private fb: FormBuilder,\r\n    public dialog: MatDialogRef<EditClassEnrollmentDate>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {}\r\n\r\n  get classEnrollmentDate() {\r\n    return this.editForm.get('classEnrollmentDate');\r\n  }\r\n  get ageGradeId() {\r\n    return this.editForm.get('ageGradeId');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initForm();\r\n  }\r\n\r\n  initForm(): void {\r\n    this.editForm = this.fb.group({\r\n      classEnrollmentDate: [null, [Validators.required]],\r\n      ageGradeId: [null],\r\n    });\r\n\r\n    if (this.editData) {\r\n      this.studentEnrollmentInfo = this.editData.data;\r\n      this.stateId = this.studentEnrollmentInfo.classEnrollmentDate.stateId;\r\n      this.classEnrollmentDate.setValue(this.studentEnrollmentInfo.classEnrollmentDate);\r\n\r\n      if (this.studentEnrollmentInfo.isDualEnrollment) {\r\n        this.ageGradeId.setValue(this.studentEnrollmentInfo.ageGradeId);\r\n        this.originalAgeGradeId = this.studentEnrollmentInfo.ageGradeId;\r\n        this.ageGradeId.setValidators([Validators.required]);\r\n        this.ageGradeId.updateValueAndValidity();\r\n      }\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.classEnrollmentDate.setValue(event);\r\n    this.isAgencyDateError = false;\r\n    if (this.classEnrollmentDate.value && this.studentEnrollmentInfo) {\r\n      const classEnrollmentDate = new Date(this.classEnrollmentDate.value).getTime();\r\n      const globalRatingPeriodMinDate = new Date(this.studentEnrollmentInfo.ratingPeriodMinDate).getTime();\r\n      const globalRatingPeriodMaxDate = new Date(this.studentEnrollmentInfo.ratingPeriodMaxDate).getTime();\r\n      const agencyEnrollDate = new Date(this.studentEnrollmentInfo.enrollmentStartDate).getTime();\r\n      if (classEnrollmentDate >= globalRatingPeriodMinDate &&\r\n        classEnrollmentDate <= globalRatingPeriodMaxDate &&\r\n        classEnrollmentDate >= agencyEnrollDate) {\r\n        this.classEnrollmentDate.setErrors(null);\r\n      } else {\r\n        this.classEnrollmentDate.setErrors({invalidDates: true});\r\n        if (classEnrollmentDate < agencyEnrollDate) this.isAgencyDateError = true;\r\n        this.toastService.error(this.agencyDateError);\r\n      }\r\n    } else {\r\n      this.toastService.error(this.defaultDateError);\r\n    }\r\n    this.editForm.markAsDirty();\r\n  }\r\n\r\n  handleAgeGrade(event: any): void {\r\n    this.ageGradeId.setValue(event?.id);\r\n    const { hasInputRatings, isLocked } = this.studentEnrollmentInfo;\r\n\r\n    if ((hasInputRatings && !isLocked) || (hasInputRatings && this.originalAgeGradeId !== this.ageGradeId.value)) {\r\n      this.toastService.error(\"Changing this child's age grade instrument now may cause unlocked assessments and/or locked assessments in the current rating period to disappear.\");\r\n    }\r\n    this.editForm.markAsDirty();\r\n  }\r\n\r\n\r\n\r\n  onSubmit(): void {\r\n    if (this.editForm.pristine) return;\r\n\r\n    if (this.editForm.invalid) {\r\n      this.toastService.error('Please complete the form before submitting.');\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      id: this.studentEnrollmentInfo.classEnrollmentId,\r\n      classEnrollmentDate: this.classEnrollmentDate.value,\r\n      ageGradeId: this.ageGradeId.value,\r\n    };\r\n    this.studentClassEnrollmentService.updateClassEnrollment(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: boolean) => {\r\n        this.dialog.close({ success: res});\r\n      });\r\n  }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { take } from 'rxjs';\r\nimport { DropChildComponent } from '@views/user/manage-enrollment/drop-child/drop-child.component';\r\nimport { EditClassEnrollmentDate } from './edit-class-enrollment/edit-class-enrollment-date.component';\r\n@Component({\r\n  selector: 'drdp-view-class-enrollments',\r\n  templateUrl: './view-class-enrollments.component.html',\r\n  styleUrls: ['./view-class-enrollments.component.scss'],\r\n})\r\nexport class ViewClassEnrollmentsComponent implements OnInit {\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  canDelete = this.permissionService.checkPermission(\r\n    Permission.DeleteEnrollments\r\n  );\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditStudents\r\n  );\r\n  classId: number = 0;\r\n  constructor(\r\n    private studentService: StudentService,\r\n    private studentClassEnrollmentService: StudentClassEnrollmentService,\r\n    private permissionService: PermissionService,\r\n    public modal: MatDialog,\r\n    private route: ActivatedRoute\r\n  ) {}\r\n\r\n  tableColumns = [\r\n    { columnDef: 'agencyName', header: 'Agency Name', type: 'text' },\r\n    {\r\n      columnDef: 'enrollmentStartDate',\r\n      header: 'Agency Enrollment',\r\n      type: 'date',\r\n    },\r\n    {\r\n      columnDef: 'enrollmentEndDate',\r\n      header: 'Agency Withdrawal',\r\n      type: 'date',\r\n    },\r\n    {\r\n      columnDef: 'ageGroup',\r\n      header: 'Age Grade/Instrument',\r\n      type: 'text',\r\n    },\r\n    { columnDef: 'ratingPeriodName', header: 'Rating Period', type: 'text' },\r\n    { columnDef: 'name', header: 'Classroom', type: 'text' },\r\n    {\r\n      columnDef: 'classEnrollmentDate',\r\n      header: 'Classroom Start Date',\r\n      type: 'date',\r\n    },\r\n    {\r\n      columnDef: 'classExitDate',\r\n      header: 'Classroom Withdraw Date',\r\n      type: 'date',\r\n    },\r\n    { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n    this.canEdit ?\r\n    {\r\n      columnDef: 'edit',\r\n      header: 'Edit',\r\n      type: 'edit'\r\n    }: null,\r\n  ].filter(Boolean);\r\n\r\n  ngOnInit(): void {\r\n    this.classId = Number(this.route.snapshot.paramMap.get('id'));\r\n    if (this.canDelete) {\r\n      this.tableColumns.push({\r\n        columnDef: 'delete',\r\n        header: 'Delete',\r\n        type: TableColumnType.delete,\r\n      });\r\n    }\r\n    this.getEnrollmentDetails();\r\n  }\r\n\r\n  getEnrollmentDetails() {\r\n    this.studentService\r\n      .getClassroomEnrollmentDetails(this.classId)\r\n      .subscribe((res: any) => {\r\n        this.dataSource = new MatTableDataSource(res);\r\n        this.tableData = res;\r\n      });\r\n  }\r\n\r\n  deleteModal(event: IModalEmitData): void {\r\n    const isActiveEnrollment = event.data?.classExitDate == undefined;\r\n    const isLastActive =\r\n      isActiveEnrollment &&\r\n      this.tableData.filter(\r\n        (item: any) =>\r\n          item.classExitDate == undefined && item.id != event.data?.id\r\n      ).length == 0;\r\n    let confirmationMessage = isActiveEnrollment\r\n      ? 'Are you sure you want to delete and Withdraw child from this class enrollment?'\r\n      : 'Are you sure you want to delete the child enrollment?';\r\n\r\n    if (isLastActive)\r\n      confirmationMessage +=\r\n        ' This will also remove the child from the agency.';\r\n\r\n    let modal: IModalEmitData = { data: {}, index: 0 };\r\n    modal.data.modalInfo = {\r\n      title: `Delete Enrollment`,\r\n      message: confirmationMessage,\r\n      primaryBtnText: Modal.OK,\r\n      showCancel: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        if (isActiveEnrollment) {\r\n          this.openUnenrollModal(event);\r\n        } else {\r\n          this.deleteEnrollment(event.data?.id ?? 0);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  openModel(editData: IModalEmitData) {\r\n    const modalRef = this.modal.open(EditClassEnrollmentDate, {\r\n      data: editData ? editData : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((response) => {\r\n      if (response.success) {\r\n        this.getEnrollmentDetails();\r\n      }\r\n    });\r\n  }\r\n\r\n  deleteEnrollment(id: number) {\r\n    this.studentClassEnrollmentService\r\n      .deleteStudentClassEnrollment(id, 'Enrollment successfully deleted.')\r\n      .pipe(take(1))\r\n      .subscribe((success) => {\r\n        if (success) {\r\n          this.getEnrollmentDetails();\r\n        }\r\n      });\r\n  }\r\n\r\n  openUnenrollModal(data: IModalEmitData) {\r\n    const enrollment = data.data;\r\n    if (enrollment) {\r\n      const modalData = {\r\n        data: {\r\n          id: enrollment.studentId,\r\n          classId: enrollment.classId,\r\n          siteId: enrollment.siteId,\r\n          firstName: enrollment.firstName,\r\n          lastName: enrollment.lastName,\r\n          studentClassEnrollmentId: enrollment.id,\r\n        },\r\n      };\r\n      const modalRef = this.modal.open(DropChildComponent, {\r\n        data: modalData,\r\n      });\r\n      modalRef.afterClosed().subscribe((success) => {\r\n        if (success) {\r\n          this.deleteEnrollment(data.data?.id ?? 0);\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <h1 class=\"pb-2 text-3xl\">Enrollment Information</h1>\r\n  <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\" \r\n    (deleteActionItem)=\"deleteModal($event)\" (editActionItem)=\"openModel($event)\">\r\n  </drdp-add-edit-table>\r\n</div>\r\n","import { Component, Inject, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { StudentService } from \"@core/services/student.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from \"rxjs\";\r\nimport { IAddStudentSharedProviderDto, IUserSpecialEdPowerDto } from \"@core/interfaces/istudent\";\r\n\r\n@Component({\r\n    selector: 'drdp-add-child-shared-provider',\r\n    templateUrl: './add-child-shared-provider.component.html',\r\n    styleUrls: ['./add-child-shared-provider.component.scss'],\r\n})\r\n\r\nexport class AddChildSharedProviderComponent implements OnInit {\r\n    childSharedProviderForm: FormGroup | any;\r\n    options: any\r\n\r\n    get teacherId() { return this.childSharedProviderForm.get('teacherId'); }\r\n    get name() { return this.childSharedProviderForm.get('name'); }\r\n\r\n    constructor(\r\n        @Inject(MAT_DIALOG_DATA) public data: any,\r\n        public dialogRef: MatDialogRef<AddChildSharedProviderComponent>,\r\n        private fb: FormBuilder,\r\n        public toast: ToastService,\r\n        private studentService: StudentService\r\n    ) {\r\n        dialogRef.disableClose = true\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.initializeForm();\r\n    }\r\n\r\n    initializeForm() {\r\n        this.childSharedProviderForm = this.fb.group({\r\n            teacherId: [null, Validators.required],\r\n            name: [null, Validators.required]\r\n        });\r\n    }\r\n\r\n    handleTeacher(event: any) {\r\n        if (event && event.id && event.teacherName) {\r\n            this.teacherId.setValue(event.id);\r\n            this.name.setValue(event.teacherName);\r\n        } else {\r\n            this.teacherId.setValue(null);\r\n            this.name.setValue(null);\r\n        }\r\n    }\r\n\r\n    onSubmit() {\r\n        if (this.childSharedProviderForm.invalid) {\r\n            this.toast.error(\"Please enter all required fields.\");\r\n            return;\r\n        }\r\n\r\n        const payload: IAddStudentSharedProviderDto = {\r\n            studentId: this.data?.studentId,\r\n            userId: this.teacherId.value\r\n        };\r\n\r\n        this.studentService\r\n            .addStudentSharedProvider(payload)\r\n            .pipe(take(1))\r\n            .subscribe((res: any) => {\r\n                if (res) {\r\n                    this.toast.success('Shared provider added successfully.');\r\n                    this.dialogRef.close({success: res});\r\n                }\r\n            });\r\n    }\r\n\r\n}\r\n","<div class=\"rounded-lg\">\r\n\r\n    <div  id=\"addProviderDialog\" class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[25px] font-bold\">Add Provider</h1>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n    <div id=\"add-child-shared-provider\" mat-dialog-content>\r\n        <form class=\"grid grid-cols-2 gap-x-10 p-3\" [formGroup]=\"childSharedProviderForm\">\r\n            <div class=\"col-span-1 items-center w-[100%]\">\r\n                <drdp-select-providers (provider)=\"handleTeacher($event)\"\r\n                                        [initialProviderId]=\"teacherId.value\"\r\n                                        [isValid]=\"!teacherId.touched || teacherId.valid\"\r\n                                        [required]=\"true\">\r\n\r\n                </drdp-select-providers>\r\n            </div>\r\n\r\n            <div class=\"col-span-1 items-center w-[100%]\">\r\n                <label class=\"font-normal required\" for=\"name\">Provider Name</label>\r\n                <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n                    <input placeholder=\"Provider Name\" matInput type=\"text\" readonly=\"true\" formControlName=\"name\"\r\n                        maxlength=\"200\">\r\n                </mat-form-field>\r\n            </div>\r\n        </form>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n        <button mat-button mat-dialog-close>Cancel</button>\r\n        <drdp-btn type=\"submit\" mat-button [disabled]=\"childSharedProviderForm.invalid\" cdkFocusInitial\r\n            (click)=\"onSubmit()\">Add Provider</drdp-btn>\r\n    </div>\r\n\r\n</div>","import { Component, Inject, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { StudentService } from \"@core/services/student.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from \"rxjs\";\r\n\r\n@Component({\r\n    selector: 'drdp-delete-child-shared-provider',\r\n    templateUrl: './delete-child-shared-provider.component.html',\r\n    styleUrls: ['./delete-child-shared-provider.component.scss'],\r\n})\r\n\r\nexport class DeleteChildSharedProviderComponent implements OnInit {\r\n\r\n    constructor(\r\n        @Inject(MAT_DIALOG_DATA) public data: any,\r\n        public dialogRef: MatDialogRef<DeleteChildSharedProviderComponent>,\r\n        public toast: ToastService,\r\n        private studentService: StudentService\r\n    ) {\r\n        dialogRef.disableClose = true\r\n    }\r\n\r\n    ngOnInit(): void { }\r\n\r\n\r\n    onDelete() {\r\n        const childSharedProviderId = this.data?.id;\r\n\r\n        if (!childSharedProviderId) {\r\n            this.toast.error('Id cannot be empty.');\r\n            return;\r\n        }\r\n\r\n        this.studentService\r\n            .deleteStudentSharedProvider(childSharedProviderId)\r\n            .pipe(take(1))\r\n            .subscribe((res: any) => {\r\n                if (res) {\r\n                    this.toast.success('Shared provider deleted successfully.');\r\n                    this.dialogRef.close({ success: res });\r\n                }\r\n            });\r\n    }\r\n\r\n}","<div class=\"rounded-lg\">\r\n\r\n    <div class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[25px] font-bold\">Remove Provider</h1>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n    <div id=\"delete-child-shared-provider\" mat-dialog-content>\r\n        <div class=\"my-5\">Are you sure you want to remove this provider from child?</div>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n        <button mat-button mat-dialog-close>Cancel</button>\r\n        <drdp-btn mat-button [disabled]=\"\" cdkFocusInitial\r\n            (click)=\"onDelete()\">Remove Provider</drdp-btn>\r\n    </div>\r\n\r\n</div>","<div class=\"p-5\">\r\n    <h1 class=\"pb-2 text-3xl\">Share Child</h1>\r\n    <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        viewIcon=\"uil uil-file text-drdpblue-300\" (deleteActionItem)=\"deleteModal($event?.data?.id)\">\r\n    </drdp-add-edit-table>\r\n    <div *ngIf=\"canEdit\" class=\"mt-10\">\r\n        <drdp-btn (click)=\"openModal()\">\r\n            <i class=\"uil uil-plus cursor-pointer\"></i>\r\n            Add Provider\r\n        </drdp-btn>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IStudentSharedProviderDto } from '@core/interfaces/istudent';\r\nimport { take } from 'rxjs';\r\nimport { AddChildSharedProviderComponent } from './add-child-shared-provider/add-child-shared-provider.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DeleteChildSharedProviderComponent } from './delete-child-shared-provider/delete-child-shared-provider.component';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-view-child-shared-providers',\r\n  templateUrl: './view-child-shared-providers.component.html',\r\n  styleUrls: ['./view-child-shared-providers.component.scss'],\r\n})\r\nexport class ViewChildSharedProvidersComponent implements OnInit {\r\n  dataSource: MatTableDataSource<IStudentSharedProviderDto> = new MatTableDataSource();\r\n  tableData?: any;\r\n  studentId: number = 0;\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditStudents\r\n  );\r\n  constructor(\r\n    private studentService: StudentService,\r\n    private router: Router,\r\n    private toastService: ToastService,\r\n    private route: ActivatedRoute,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService) { }\r\n\r\n  tableColumns = [\r\n    {\r\n      columnDef: 'teacherName',\r\n      header: 'Current Providers',\r\n      type: TableColumnType.text\r\n    },\r\n    {\r\n      columnDef: 'workTitle',\r\n      header: 'Work Title',\r\n      type: TableColumnType.text\r\n    },\r\n    {\r\n      columnDef: 'emailAddress',\r\n      header: 'Email Address',\r\n      type: TableColumnType.text\r\n    },\r\n    {\r\n      columnDef: 'userRole',\r\n      header: 'User Role',\r\n      type: TableColumnType.text\r\n    },\r\n    this.canEdit ?\r\n    {\r\n      columnDef: 'delete',\r\n      header: 'Delete',\r\n      type: TableColumnType.delete\r\n    } : null\r\n  ].filter(Boolean);\r\n\r\n  ngOnInit(): void {\r\n    const studentId = this.route.snapshot.paramMap.get('id');\r\n\r\n    if (!studentId) {\r\n      this.toastService.error('StudentId parameter is missing.');\r\n      return;\r\n    }\r\n\r\n    this.studentId = +studentId;\r\n\r\n    this.getStudentSharedProviders();\r\n  }\r\n\r\n  getStudentSharedProviders() {\r\n    this.studentService\r\n      .getStudentSharedProviders(this.studentId)\r\n      .pipe(take(1))\r\n      .subscribe((res: IStudentSharedProviderDto[]) => {\r\n        this.dataSource = new MatTableDataSource(res);\r\n        this.tableData = res;\r\n      });\r\n  }\r\n\r\n  openModal(): void {\r\n    const dialogRef = this.modal.open(AddChildSharedProviderComponent, {\r\n      data: { studentId: this.studentId }\r\n    });\r\n\r\n    dialogRef.afterClosed().subscribe((result: any) => {\r\n      if (result.success) {\r\n        this.getStudentSharedProviders();\r\n      }\r\n    });\r\n  }\r\n\r\n  deleteModal(id: number): void {\r\n    const dialogRef = this.modal.open(DeleteChildSharedProviderComponent, {\r\n      data: { id: id }\r\n    });\r\n\r\n    dialogRef.afterClosed().subscribe((result: any) => {\r\n      if (result.success) {\r\n        this.getStudentSharedProviders();\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-view-child-assessments',\r\n  templateUrl: './view-child-assessments.component.html',\r\n  styleUrls: ['./view-child-assessments.component.scss'],\r\n})\r\nexport class ViewChildAssessmentsComponent implements OnInit {\r\n  studentId: number = 0;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n\r\n  tableColumns = [\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Rating Period',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'classroomName',\r\n      header: 'Classroom Name',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'hasRating',\r\n      header: 'Assessment',\r\n      type: TableColumnType.boolIcon,\r\n      truthyClass: 'file-download text-drdpblue-300',\r\n      falsyIcon: '',\r\n      action: 'download',\r\n      cursorClass: 'cursor-pointer',\r\n    },\r\n    {\r\n      columnDef: 'agencyName',\r\n      header: 'Agency Name',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'siteName',\r\n      header: 'Site Name',\r\n      type: TableColumnType.text,\r\n    },\r\n  ];\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private studentService: StudentService,\r\n    private ratingService: RatingService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.studentId = Number(this.route.snapshot.paramMap.get('id'));\r\n    this.studentService\r\n      .getStudentAssessments(this.studentId)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.dataSource = new MatTableDataSource(res);\r\n        this.tableData = res;\r\n      });\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    if (event.action == 'download') this.downloadUrl(event.data.carId);\r\n  }\r\n\r\n  downloadUrl(id: number) {\r\n    this.ratingService\r\n      .getRatingDownloadUrl(id)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        const link = document.createElement('a');\r\n        link.href = res.url;\r\n        link.click();\r\n      });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <h1 class=\"pb-2 text-3xl\">Completed Assessments</h1>\r\n  <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n    (actionIconClicked)=\"onIconClick($event)\">\r\n  </drdp-add-edit-table>\r\n</div>","<div class=\"w-full\">\r\n  <div class=\"hidden md:block md:static \">\r\n    <div *ngIf=\"classId !== null\"><a class=\"text-sm cursor-pointer underline md:absolute md:right-32 md:mt-6\" (click)=\"goBack()\">\r\n      <i class=\"uil uil-angle-left-b text-base\"></i>Back to View Class</a></div>\r\n    <drdp-btn class=\"hidden md:block md:absolute md:right-8 md:mt-4\" (click)=\"editChild()\"\r\n      *ngIf=\"canEdit && activeTab === ViewChildTabs.Demographics\">\r\n      <i *ngIf=\"!isEdit\" class=\"uil uil-pen cursor-pointer\"></i>\r\n      {{ buttonText }}\r\n    </drdp-btn>\r\n  </div>\r\n  <div class=\"tabs-container mt-2 md:mt-0\">\r\n    <ul\r\n      class=\"tabs flex overflow-x-auto list-none flex-nowrap md:flex-wrap md:pt-3 flex-row text-md font-medium text-gray-700\">\r\n      <li class=\"flex flex-col justify-end md:mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\">\r\n        <a class=\"px-2 py-2 md:px-5 md:py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n          (click)=\"toggleTabs(ViewChildTabs.Demographics)\" [ngClass]=\"{\r\n                        'text-white': activeTab !== ViewChildTabs.Demographics,\r\n                        'text-white bg-drdpblue-300': activeTab === ViewChildTabs.Demographics\r\n                    }\">\r\n          Demographics\r\n        </a>\r\n      </li>\r\n      <li class=\"flex flex-col justify-end md:mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\">\r\n        <a class=\"p-2 md:px-5 md:py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n          (click)=\"toggleTabs(ViewChildTabs.ClassEnrollment)\" [ngClass]=\"{\r\n                        'text-white': activeTab !== ViewChildTabs.ClassEnrollment,\r\n                        'text-white bg-drdpblue-300': activeTab === ViewChildTabs.ClassEnrollment\r\n                    }\">\r\n          Class Enrollment\r\n        </a>\r\n      </li>\r\n      <li class=\"flex flex-col justify-end  md:mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\">\r\n        <a class=\"p-2 md:px-5 md:py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n          (click)=\"toggleTabs(ViewChildTabs.CompletedAssessments)\" [ngClass]=\"{\r\n                        'text-white': activeTab !== ViewChildTabs.CompletedAssessments,\r\n                        'text-white bg-drdpblue-300': activeTab === ViewChildTabs.CompletedAssessments\r\n                    }\">\r\n          Completed Assessments\r\n        </a>\r\n      </li>\r\n      <li class=\"flex flex-col justify-end  md:mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\"\r\n        *ngIf=\"canViewSharedChild\">\r\n        <a class=\"p-2 md:px-5 md:py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n          (click)=\"toggleTabs(ViewChildTabs.ShareChild)\" [ngClass]=\"{\r\n                        'text-white': activeTab !== ViewChildTabs.ShareChild,\r\n                        'text-white bg-drdpblue-300': activeTab === ViewChildTabs.ShareChild\r\n                    }\">\r\n          Share Child\r\n        </a>\r\n      </li>\r\n    </ul>\r\n\r\n  </div>\r\n  <div\r\n    class=\"relative flex flex-col rounded-tr-none md:rounded-tr-3xl min-w-0 break-words bg-white w-full mb-6 shadow-lg rounded-b-[30px] min-h-[44rem]\">\r\n    <div class=\"flex-auto\">\r\n      <div class=\"tab-content tab-space\">\r\n        <div class=\"pb-6\">\r\n          <div *ngIf=\"activeTab == ViewChildTabs.Demographics && !isEdit\" class=\"static block md:hidden\">\r\n            <div *ngIf=\"classId !== null\"><a class=\"text-sm cursor-pointer underline absolute right-28\" (click)=\"goBack()\">\r\n              <i class=\"uil uil-angle-left-b text-base\"></i>Back to View Class</a></div>\r\n            <drdp-btn class=\" absolute right-5\" (click)=\"editChild()\"\r\n              *ngIf=\"canEdit && activeTab === ViewChildTabs.Demographics\">\r\n              <i *ngIf=\"!isEdit\" class=\"uil uil-pen cursor-pointer\"></i>\r\n              {{ buttonText }}\r\n            </drdp-btn>\r\n\r\n\r\n          </div>\r\n          <div *ngIf=\"activeTab == ViewChildTabs.Demographics && !isEdit\">\r\n            <drdp-add-view-edit-child [componentType]=\"ComponentTypeTable.View\" [childData]=\"childData\">\r\n            </drdp-add-view-edit-child>\r\n          </div>\r\n          <div *ngIf=\"activeTab == ViewChildTabs.Demographics && isEdit\">\r\n            <drdp-add-view-edit-child [componentType]=\"ComponentTypeTable.Edit\" [childData]=\"childData\"\r\n              (returnToView)=\"backToView($event)\">\r\n            </drdp-add-view-edit-child>\r\n          </div>\r\n          <div *ngIf=\"activeTab == ViewChildTabs.ClassEnrollment\">\r\n            <drdp-view-class-enrollments></drdp-view-class-enrollments>\r\n          </div>\r\n          <div *ngIf=\"activeTab == ViewChildTabs.CompletedAssessments\">\r\n            <drdp-view-child-assessments></drdp-view-child-assessments>\r\n          </div>\r\n          <div *ngIf=\"activeTab == ViewChildTabs.ShareChild\">\r\n            <drdp-view-child-shared-providers></drdp-view-child-shared-providers>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { ViewChildTabs } from '@core/enums/table';\r\nimport { ComponentTypeTable } from '@core/enums/table';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { take } from 'rxjs';\r\n@Component({\r\n  selector: 'drdp-view-child-tabs',\r\n  templateUrl: './view-child-tabs.component.html',\r\n  styleUrls: ['./view-child-tabs.component.scss'],\r\n})\r\nexport class ViewChildTabsComponent implements OnInit {\r\n  activeTab?: number;\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n  isEdit?: boolean = history.state.isEdit ?? false;\r\n  canViewSharedChild = this.permissionService.checkPermission(\r\n    Permission.ViewSharedChild\r\n  );\r\n  canEdit = false;\r\n  @Input() childData?: any;\r\n  buttonText: string = this.isEdit ? 'Cancel' : 'Edit';\r\n  @Output() returnToView = new EventEmitter();\r\n  classId: number | null = null;\r\n  studentId: number | null = null;\r\n\r\n  public get ViewChildTabs() {\r\n    return ViewChildTabs;\r\n  }\r\n  public get ComponentTypeTable() {\r\n    return ComponentTypeTable;\r\n  }\r\n\r\n  constructor(\r\n    private permissionService: PermissionService, \r\n    private router: Router,\r\n    private route: ActivatedRoute,\r\n    private studentService: StudentService,) {}\r\n\r\n  ngOnInit(): void {     \r\n    const classId = this.route.snapshot.paramMap.get('classId');\r\n    if (classId !== null) this.classId = +classId;\r\n\r\n    const studentId = this.route.snapshot.paramMap.get('id');\r\n    if (studentId !== null) {\r\n      this.studentId = +studentId;\r\n      this.getEnrollmentDetails();\r\n    } \r\n    this.toggleTabs(ViewChildTabs.Demographics);\r\n  }\r\n\r\n  getEnrollmentDetails() {\r\n    if (this.studentId) {\r\n      this.studentService\r\n      .getClassroomEnrollmentDetails(this.studentId)\r\n      .pipe(\r\n        take(1)\r\n      )\r\n      .subscribe((res: any) => {\r\n        this.canEditChild(res);\r\n      });\r\n    }\r\n  }\r\n\r\n  canEditChild(enrollments: any) {\r\n    const permissions = {\r\n      edit: this.permissionService.checkPermission(Permission.EditStudents),\r\n      bypass: this.permissionService.checkPermission(Permission.PowerUserViewDualEnrollments),\r\n      viewDual: this.permissionService.checkPermission(Permission.ViewDualEnrollments)\r\n    };\r\n\r\n    if (permissions.edit && permissions.bypass) {\r\n      this.canEdit = true;\r\n    } else if (!permissions.edit && !permissions.bypass) { \r\n      this.canEdit = false;\r\n    } else if (permissions.edit || permissions.viewDual) {\r\n      const primaryEnrollments = enrollments.filter((item: any) => item.isDualEnrollment == false);\r\n      this.canEdit = primaryEnrollments.length > 0 ? true : false;\r\n    } else {\r\n      this.canEdit = false;\r\n    }\r\n  }\r\n\r\n  toggleTabs(tab: number) {\r\n    this.activeTab = tab;\r\n  }\r\n\r\n  editChild() {\r\n    this.isEdit = !this.isEdit;\r\n    this.buttonText = !this.isEdit ? 'Edit' : 'Cancel';\r\n  }\r\n\r\n  backToView(event: any): void {\r\n    this.returnToView.emit();\r\n    this.editChild();\r\n  }\r\n\r\n  goBack(): void {\r\n    this.router.navigate(['/view-students/' + this.classId]);\r\n  }\r\n}\r\n","<div *ngIf=\"childData\" class=\"p-5\">\r\n  <div class=\"grid\">\r\n    <div class=\"cols-span-1\">\r\n      <h1 class=\"md:pb-2 text-3xl\">Viewing Child: {{childData.firstName}} {{childData.lastName}}</h1>\r\n    </div>\r\n  </div>\r\n  <div class=\"flex flex-wrap md:mt-5\">\r\n    <div class=\"w-full mt-3\">\r\n      <drdp-view-child-tabs\r\n        [childData]=\"childData\"\r\n        (returnToView)=\"setChildDataInView()\">\r\n      </drdp-view-child-tabs>\r\n      </div>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, Inject, ViewChild, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { IStudentDetails } from '@core/interfaces/istudent';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ViewChildTabsComponent } from './view-child-tabs/view-child-tabs.component';\r\n\r\n@Component({\r\n    selector: 'drdp-view-child',\r\n    templateUrl: './view-child.component.html',\r\n    styleUrls: ['./view-child.component.scss']\r\n})\r\n\r\n\r\nexport class ViewChildComponent implements OnInit {\r\n  @ViewChild('tabs') viewTabs: ViewChildTabsComponent | undefined;\r\n  childData?: any;\r\n  studentId?: number | any = this.getChildIdFromUrl();\r\n\r\n  constructor( private route: ActivatedRoute, private studentService: StudentService){}\r\n\r\n  ngOnInit(): void {\r\n    this.setChildDataInView();\r\n  }\r\n\r\n  getChildIdFromUrl(): number {\r\n    const id = this.route.snapshot.paramMap.get('id');\r\n    return Number(id);\r\n  }\r\n\r\n  setChildDataInView() {\r\n    this.studentService.getStudentDetails(this.studentId).subscribe((res: IStudentDetails) => {\r\n      this.childData = res;\r\n    })\r\n  }\r\n\r\n}\r\n","export enum DropdownType {\r\n  tableDropdown = 'tableDropdown',\r\n  fromDropDown = 'fromDropdown',\r\n  toDropdown = ' toDropdown'\r\n}\r\n","import {\r\n  Component,\r\n  OnDestroy,\r\n  OnInit,\r\n  QueryList,\r\n  ViewChild,\r\n  ViewChildren,\r\n  inject,\r\n} from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestSearch,\r\n  IStudentRequestSearchResponse,\r\n} from '@core/interfaces/istudent-request';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport {\r\n  combineLatest,\r\n  concatMap,\r\n  map,\r\n  Observable,\r\n  Subscription,\r\n  take,\r\n} from 'rxjs';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { IClass, IClassSearchRequest } from '@core/interfaces/iclasses';\r\nimport { TableColumnType, TableInputAction } from '@core/enums/table';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\nimport { DropdownType } from '@core/enums/pending-requests';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { Router } from '@angular/router';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-pending-transfers',\r\n  templateUrl: './pending-transfers.component.html',\r\n  styleUrls: ['./pending-transfers.component.scss'],\r\n})\r\nexport class PendingTransfersComponent implements OnInit, OnDestroy {\r\n  @ViewChildren(FilterSelectComponent) selectComponents:\r\n    | QueryList<FilterSelectComponent>\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect!: SelectStateComponent;\r\n  @ViewChild('agencySelect') agencySelect!: SelectAgencyComponent;\r\n  private subscriptions = new Subscription();\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  getSelectData$: Observable<any> | undefined;\r\n  getSearchSelectData$: Observable<any> | undefined;\r\n  user = this.authService.getCurrentUser();\r\n  isAgencyAdmin?: boolean = this.authService.isAgencyAdmin();\r\n  isLeadAgencyAdmin?: boolean = this.authService.isLeadAgencyAdmin();\r\n  viewOnlyOwnAgency: boolean | undefined = false;\r\n  currentDate = new Date();\r\n  isCurrentlyEditing: boolean = false;\r\n  acceptOrDeclineChecked: boolean = false;\r\n  activeSchoolYear?: any;\r\n  tableData?: any;\r\n  selectedSiteId: number[] = [];\r\n  canViewSensitiveTransferInfo: boolean = this.permissionService.checkPermission(\r\n    Permission.ViewSensitiveStudentTransferInfo\r\n  );\r\n\r\n  selectClass = SelectType.Class;\r\n  selectSites = SelectType.Sites;\r\n  selectRatingPeriods = SelectType.RatingPeriods;\r\n\r\n  ratingPeriodsOptions?: IRatingPeriod[];\r\n  classOptions?: IClass[];\r\n  fromClassroomList: IClass[] = [];\r\n  fromRatingPeriodList: IRatingPeriod[] | undefined = [];\r\n  toClassroomList: IClass[] = [];\r\n  toRatingPeriodList: IRatingPeriod[] | undefined = [];\r\n  fromClassId?: number | undefined;\r\n  toClassId?: number | undefined;\r\n\r\n  initialAgencyId?: number | undefined;\r\n  stateSearchId?: number | null;\r\n  agencySearchId?: number | null;\r\n  clearDropdowns = false;\r\n  doneEditing: boolean = false;\r\n\r\n  searchPayload: IStudentRequestSearch | any = {\r\n    requestReasonId: StudentRequestReason.Transfer,\r\n  };\r\n\r\n  router = inject(Router);\r\n  tableColumns: any = [\r\n    { columnDef: 'studentName', header: 'Child Name', type: 'text' },\r\n    {\r\n      columnDef: 'siteName',\r\n      header: 'Transfer To: Site',\r\n      type: TableColumnType.textToDrdpSelect,\r\n      selectType: this.selectSites,\r\n      optionKey: 'siteOptions',\r\n      initialSelectId: 'siteId',\r\n      action: TableInputAction.drdpDropdown,\r\n    },\r\n    {\r\n      columnDef: 'classroomName',\r\n      header: 'Transfer To: Classroom',\r\n      type: TableColumnType.textToDrdpSelect,\r\n      selectType: this.selectClass,\r\n      optionKey: 'classOptions',\r\n      initialSelectId: 'toClassId',\r\n      action: TableInputAction.drdpDropdown,\r\n    },\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Transfer Rating Period',\r\n      type: TableColumnType.textToDrdpSelect,\r\n      selectType: this.selectRatingPeriods,\r\n      optionKey: 'ratingPeriodOptions',\r\n      initialSelectId: 'ratingPeriodId',\r\n      action: TableInputAction.drdpDropdown,\r\n    },\r\n    this.canViewSensitiveTransferInfo ?\r\n    {\r\n      columnDef: 'fromSiteName',\r\n      header: 'Transfer From: Site',\r\n      type: 'text'\r\n    } : null,\r\n    this.canViewSensitiveTransferInfo ?\r\n    {\r\n      columnDef: 'fromClassroomName',\r\n      header: 'Transfer From: Classroom',\r\n      type: 'text'\r\n    } : null,\r\n    this.canViewSensitiveTransferInfo ?\r\n    {\r\n      columnDef: 'requestedBy',\r\n      header: 'Requested By',\r\n      type: 'text'\r\n    } : null,\r\n    {\r\n      columnDef: 'comment',\r\n      header: 'Requester Comment',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'adminComment',\r\n      header: 'Approver Comment',\r\n      type: TableColumnType.textToInput,\r\n      action: TableInputAction.inputChange,\r\n      maxLength: 150,\r\n    },\r\n    {\r\n      columnDef: 'edit',\r\n      header: 'Edit',\r\n      type: 'edit',\r\n    },\r\n    {\r\n      columnDef: 'decline',\r\n      header: 'Decline',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'approve',\r\n      header: 'Accept',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n  ].filter(Boolean);\r\n\r\n  constructor(\r\n    private requestService: StudentRequestService,\r\n    private authService: AuthService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private sitesService: SiteService,\r\n    private classService: ClassService,\r\n    private toast: ToastService,\r\n    private permissionService: PermissionService,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.stateSearchId = this.user.stateId;\r\n    this.searchPayload.stateId = this.stateSearchId;\r\n    this.agencySearchId = this.user.agencyId;\r\n    this.searchPayload.agencyId = this.user.agencyId;\r\n    if (this.viewOnlyOwnAgency) {\r\n      this.searchPayload.stateId = this.user.stateId;\r\n      this.searchPayload.agencyId = this.user.agencyId;\r\n      this.initialAgencyId = this.user.agencyId;\r\n      this.setTableData();\r\n    }\r\n    if(this.user.agencyId)\r\n      this.getRatingPeriods(this.user.agencyId);\r\n  }\r\n\r\n  setTableData(): void {\r\n    this.subscriptions.add(\r\n      this.requestService\r\n        .getByReasonAndAgency(this.searchPayload)\r\n        .subscribe((res: IStudentRequestSearchResponse[]) => {\r\n          if (res) {\r\n            res = res.map((data: IStudentRequestSearchResponse) => ({\r\n              ...data,\r\n              isSelect: false,\r\n              approve: null,\r\n              decline: null,\r\n              classOptions: [],\r\n              siteOptions: [],\r\n              ratingPeriodOptions: [],\r\n            }));\r\n          }\r\n          this.dataSource = new MatTableDataSource(res);\r\n          this.tableData = res;\r\n        })\r\n    );\r\n  }\r\n\r\n  handleIconOnClick(event: any): void {\r\n    if (event.data === null) {\r\n      this.toast.error('Please select a value');\r\n    } else {\r\n      switch (event.action) {\r\n        case TableInputAction.drdpDropdown:\r\n          if (event.data.type == SelectType.Class) {\r\n            if (this.tableData[event.index].toClassId != event.data.id)\r\n              this.tableData[event.index].edited = true;\r\n            this.tableData[event.index].classroomName = event.data.name;\r\n            this.tableData[event.index].toClassId = event.data.id;\r\n          }\r\n          if (event.data.type === SelectType.Sites) {\r\n            if (this.tableData[event.index].siteId != event.data.id)\r\n              this.tableData[event.index].edited = true;\r\n            this.tableData[event.index].siteName = event.data.name;\r\n            this.tableData[event.index].siteId = event.data.id;\r\n            this.updateClassroomDropdowns(\r\n              {\r\n                siteIds: event.data.id,\r\n                ratingPeriodId: this.tableData[event.index].ratingPeriodId,\r\n              },\r\n              'tableDropdown',\r\n              event.index\r\n            );\r\n          }\r\n          if (event.data.type === SelectType.RatingPeriods) {\r\n            if (this.tableData[event.index].ratingPeriodId != event.data.id)\r\n              this.tableData[event.index].edited = true;\r\n            this.tableData[event.index].ratingPeriodName = event.data.name;\r\n            this.tableData[event.index].ratingPeriodId = event.data.id;\r\n            this.updateClassroomDropdowns(\r\n              {\r\n                siteIds: this.tableData[event.index].siteId,\r\n                ratingPeriodId: event.data.id,\r\n              },\r\n              'tableDropdown',\r\n              event.index\r\n            );\r\n          }\r\n          break;\r\n        case TableInputAction.inputChange:\r\n          if (\r\n            this.tableData[event.index].adminComment != event.data.target.value\r\n          )\r\n            this.tableData[event.index].edited = true;\r\n          this.tableData[event.index].adminComment = event.data.target.value;\r\n          break;\r\n        default:\r\n          this.tableData[event.index].isSelect =\r\n            !this.tableData[event.index].isSelect;\r\n          if (this.tableData[event.index].isSelect)\r\n            this.initializeRowDropdowns(event.index);\r\n          this.isCurrentlyEditing = this.tableData.some((row: any) => {\r\n            return row.isSelect == true;\r\n          });\r\n          this.doneEditing = this.tableData.some((row: any) => {\r\n            return row.edited == true;\r\n          });\r\n          break;\r\n      }\r\n    }\r\n  }\r\n\r\n  initializeRowDropdowns(index: number): void {\r\n    this.getSelectData$ = this.ratingPeriodService.getActiveSchoolYear().pipe(\r\n      concatMap((year: ISchoolYear) =>\r\n        combineLatest({\r\n          ratingPeriods: this.ratingPeriodService.getBySchoolYearAndAgency(\r\n            year.id,\r\n            this.tableData[index].agencyId\r\n          ),\r\n          sites: this.sitesService.getSitesByAgencyId(\r\n            this.tableData[index].agencyId\r\n          ),\r\n          classes: this.classService.getClassesByAgency(\r\n            this.tableData[index].agencyId\r\n          ),\r\n        }).pipe(map((data) => data))\r\n      )\r\n    );\r\n\r\n    this.subscriptions.add(\r\n      this.getSelectData$.subscribe((res: any) => {\r\n        this.tableData[index].ratingPeriodOptions = res.ratingPeriods;\r\n        this.tableData[index].siteOptions = res.sites;\r\n      })\r\n    );\r\n\r\n    this.updateClassroomDropdowns(\r\n      {\r\n        siteIds: this.tableData[index].siteId,\r\n        ratingPeriodId: this.tableData[index].ratingPeriodId,\r\n      },\r\n      DropdownType.tableDropdown,\r\n      index\r\n    );\r\n  }\r\n\r\n  updateClassroomDropdowns(\r\n    params: IClassSearchRequest,\r\n    dropdownType: string,\r\n    index?: number\r\n  ): void {\r\n    const payload: IClassSearchRequest = {};\r\n    payload.siteIds =   params.siteIds ? Array.isArray(params.siteIds) ? params.siteIds : [params.siteIds]  : null;\r\n    payload.ratingPeriodId = params.ratingPeriodId ?? null;\r\n    payload.itemsPerPage = 100;\r\n\r\n    this.subscriptions.add(\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .subscribe((res: any) => {\r\n          if (res) {\r\n            let mappedRes = mapClassResToDRDPSelect(res);\r\n            switch (dropdownType) {\r\n              case DropdownType.tableDropdown:\r\n                this.tableData[index!].classOptions = mappedRes;\r\n                let includesChosenClass = mappedRes\r\n                  .map((data: any) => data.id)\r\n                  .includes(this.tableData[index!].toClassId);\r\n                if (!includesChosenClass) {\r\n                  this.tableData[index!].toClassId =\r\n                    this.tableData[index!].classOptions[0]?.id;\r\n                  this.tableData[index!].classroomName =\r\n                    this.tableData[index!].classOptions[0]?.classroomName;\r\n                }\r\n                break;\r\n              case DropdownType.fromDropDown:\r\n                this.fromClassroomList = mappedRes;\r\n                break;\r\n              case DropdownType.toDropdown:\r\n                this.toClassroomList = mappedRes;\r\n                break;\r\n              default:\r\n                break;\r\n            }\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  handleRequest(event: any): void {\r\n    var i = event.index;\r\n    var prop = event.property;\r\n\r\n    this.tableData[i][prop] = !this.tableData[i][prop];\r\n    if (prop == 'approve') this.tableData[i].decline = false;\r\n    if (prop == 'decline') this.tableData[i].approve = false;\r\n    if (\r\n      this.tableData[i].approve == false &&\r\n      this.tableData[i].decline == false\r\n    ) {\r\n      this.tableData[i].decline = null;\r\n      this.tableData[i].approve = null;\r\n    }\r\n\r\n    this.acceptOrDeclineChecked = this.tableData.some((row: any) => {\r\n      return row.decline == true || row.approve == true;\r\n    });\r\n  }\r\n\r\n  handleSubmit(): void {\r\n    if (\r\n      this.isCurrentlyEditing ||\r\n      (!this.doneEditing && !this.acceptOrDeclineChecked)\r\n    ) {\r\n      this.toast.error(\r\n        'Please edit, accept, or decline a transfer request before submitting.'\r\n      );\r\n    } else {\r\n      const requestPayload: IStudentRequest[] = [];\r\n      this.tableData.forEach((studentRequest: any) => {\r\n        if (\r\n          (studentRequest.decline != null && studentRequest.approve != null) ||\r\n          studentRequest.edited == true\r\n        ) {\r\n          var requestToPush = <IStudentRequest>{\r\n            id: studentRequest.id,\r\n            studentId: studentRequest.studentId,\r\n            toClassId: studentRequest.toClassId,\r\n            fromClassId: studentRequest.fromClassId,\r\n            adminComment: studentRequest.adminComment,\r\n            accept: studentRequest.approve,\r\n            requestReasonId: studentRequest.requestReasonId,\r\n            classEnrollmentDate: studentRequest.classEnrollmentDate,\r\n          };\r\n          requestPayload.push(requestToPush);\r\n        }\r\n      });\r\n      this.subscriptions.add(\r\n        this.requestService\r\n          .processTransfers(\r\n            requestPayload,\r\n            'Transfer requests have been updated'\r\n          )\r\n          .subscribe((res: boolean) => {\r\n            if (res) {\r\n              this.setTableData();\r\n              this.resetBools();\r\n            }\r\n          })\r\n      );\r\n    }\r\n  }\r\n\r\n  getRatingPeriods(agencyId: number): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(agencyId)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        this.fromRatingPeriodList = res;\r\n        this.toRatingPeriodList = res;\r\n      });\r\n  }\r\n\r\n  handleState(state: IState): void {\r\n    if (state) {\r\n      this.searchPayload.requestReasonId = StudentRequestReason.Transfer;\r\n      this.searchPayload.stateId = state.id ?? null;\r\n      this.stateSearchId = this.searchPayload.stateId;\r\n    }\r\n    this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n      selectComponent?.clear()\r\n    );\r\n  }\r\n\r\n  handleAgency(agency: IAgency): void {\r\n    if (agency) {\r\n      this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n        selectComponent?.clear()\r\n      );\r\n      this.searchPayload.requestReasonId = StudentRequestReason.Transfer;\r\n      this.searchPayload.agencyId = agency == null ? null : agency.id;\r\n      this.agencySearchId = this.searchPayload.agencyId;\r\n\r\n      this.getRatingPeriods(agency.id);\r\n    }\r\n  }\r\n\r\n  handleFromSites(site: ISites): void {\r\n    this.searchPayload.fromSiteId = site == null ? null : site.id;\r\n\r\n    if (this.searchPayload.fromSiteId && this.searchPayload.fromRatingPeriodId)\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(site.id!),\r\n          ratingPeriodId: this.searchPayload.fromRatingPeriodId,\r\n        },\r\n        DropdownType.fromDropDown\r\n      );\r\n  }\r\n\r\n  handleFromClassroom(classId: ISelectable): void {\r\n    this.searchPayload.fromClassId = classId == null ? null : classId.id;\r\n  }\r\n\r\n  handleFromRatingPeriod(ratingPeriod: IRatingPeriod) {\r\n    this.searchPayload.fromRatingPeriodId =\r\n      ratingPeriod == null ? null : ratingPeriod.id;\r\n\r\n    if (\r\n      this.searchPayload.fromRatingPeriodId &&\r\n      this.searchPayload.fromSiteId\r\n    ) {\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(this.searchPayload.fromSiteId!),\r\n          ratingPeriodId: this.searchPayload.fromRatingPeriodId,\r\n        },\r\n        DropdownType.fromDropDown\r\n      );\r\n    }\r\n  }\r\n\r\n  handleToSites(site: ISites): void {\r\n    this.searchPayload.toSiteId = site == null ? null : site.id;\r\n\r\n    if (site)\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(site.id!),\r\n          ratingPeriodId: this.searchPayload.toRatingPeriodId,\r\n        },\r\n        DropdownType.toDropdown\r\n      );\r\n  }\r\n\r\n  handleToClassroom(classId: any): void {\r\n    this.searchPayload.toClassId = classId == null ? null : classId.id;\r\n  }\r\n\r\n  handleToRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    this.searchPayload.toRatingPeriodId =\r\n      ratingPeriod == null ? null : ratingPeriod.id;\r\n\r\n    if (this.searchPayload.toRatingPeriodId && this.searchPayload.toSiteId) {\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(this.searchPayload.toSiteId!),\r\n          ratingPeriodId: this.searchPayload.toRatingPeriodId,\r\n        },\r\n        DropdownType.toDropdown\r\n      );\r\n    }\r\n  }\r\n\r\n  getSelectedSite(site: number): number[] {\r\n    this.selectedSiteId = [];\r\n    this.selectedSiteId.push(site);\r\n    return this.selectedSiteId;\r\n  }\r\n\r\n  search(): void {\r\n    this.resetBools();\r\n    this.setTableData();\r\n  }\r\n\r\n  isSubmitBtnEnabled(): boolean {\r\n    return (\r\n      (this.doneEditing && this.acceptOrDeclineChecked) ||\r\n      (this.doneEditing && !this.acceptOrDeclineChecked) ||\r\n      (!this.doneEditing && this.acceptOrDeclineChecked)\r\n    );\r\n  }\r\n\r\n  onClear(): void {\r\n    this.resetBools();\r\n    this.clearDropdowns = true;\r\n    this.searchPayload = {};\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.stateSearchId = null;\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencySearchId = null;\r\n    }\r\n\r\n    this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n      selectComponent?.clear()\r\n    );\r\n    this.searchPayload = {\r\n      stateId: this.stateSearchId ?? this.user.stateId,\r\n      agencyId: this.agencySearchId ?? this.user.agencyId,\r\n      requestReasonId: StudentRequestReason.Transfer,\r\n    };\r\n    this.dataSource = new MatTableDataSource();\r\n  }\r\n\r\n  handleCancel(): void {\r\n    this.router.navigateByUrl('/dashboard')\r\n\r\n  }\r\n\r\n  resetBools(): void {\r\n    this.doneEditing = false;\r\n    this.acceptOrDeclineChecked = false;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"mb-5 mr-3\">\r\n    <drdp-title title=\"Pending Transfers\"></drdp-title>\r\n  </div>\r\n  <drdp-container additionClasses=\"flex flex-wrap content-between justify-end min-h-[44rem]\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\"min-h-[7rem] w-full\">\r\n        <div\r\n          class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateSearchId\" (state)=\"handleState($event)\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency #agencySelect [initialAgencyId]=\"agencySearchId\" (agency)=\"handleAgency($event)\"\r\n              [stateId]=\"stateSearchId\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period [initialRatingPeriodId]=\"searchPayload.fromRatingPeriodId\" (ratingPeriod)=\"handleFromRatingPeriod($event)\" [agencyId]=\"agencySearchId\"\r\n              [clear]=\"clearDropdowns\">\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period [initialRatingPeriodId]=\"searchPayload.toRatingPeriodId\" label=\"Transfer Rating Period\" (ratingPeriod)=\"handleToRatingPeriod($event)\" [agencyId]=\"agencySearchId\"\r\n              [clear]=\"clearDropdowns\">\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site [initialSiteId]=\"searchPayload.fromSiteId\" (site)=\"handleFromSites($event)\" [agencyId]=\"agencySearchId\" [clear]=\"clearDropdowns\"\r\n              [multiSelect]=\"false\" [multiSelectInitVals]=\"false\">\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site [initialSiteId]=\"searchPayload.toSiteId\" label=\"Transfer To: Site\" (site)=\"handleToSites($event)\" [agencyId]=\"agencySearchId\"\r\n              [clear]=\"clearDropdowns\">\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select #classSelect label=\"Classroom\" [options]=\"fromClassroomList\" [selectType]=\"selectClass\"\r\n              [intialValues]=\"fromClassId\" (onSelected)=\"handleFromClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select label=\"Transfer To: Classroom\" [options]=\"toClassroomList\" [selectType]=\"selectClass\"\r\n              [intialValues]=\"toClassId\" (onSelected)=\"handleToClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n\r\n          <div class=\"hidden lg:block lg:col-span-1 xl:col-span-1 self-end\"></div>\r\n          <div class=\"flex flex-row justify-evenly lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn (click)=\"search()\">\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        (editActionItem)=\"handleIconOnClick($event)\" (toggleSwitchActionItem)=\"handleRequest($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex flex-wrap content-between align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button (click)=\"handleCancel()\">\r\n        Cancel\r\n      </drdp-btn>\r\n      <drdp-btn mat-button (click)=\"handleSubmit()\" [disabled]=\"isCurrentlyEditing || !isSubmitBtnEnabled()\"\r\n        cdkFocusInitial>\r\n        Save and Submit\r\n      </drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TableInputAction, TableColumnType } from '@core/enums/table';\r\nimport { IClassExitReason } from '@core/interfaces/iclasses';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestSearch,\r\n} from '@core/interfaces/istudent-request';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, combineLatest, take } from 'rxjs';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\n\r\n@Component({\r\n  selector: 'drdp-pending-withdraws',\r\n  templateUrl: './pending-withdraws.component.html',\r\n  styleUrls: ['./pending-withdraws.component.scss'],\r\n})\r\nexport class PendingWithdrawsComponent implements OnInit {\r\n  @ViewChildren(FilterSelectComponent) selectComponents:\r\n    | QueryList<FilterSelectComponent>\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  @ViewChild('siteSelect') siteSelect: SelectStateComponent | undefined;\r\n\r\n  user = this.authService.getCurrentUser();\r\n  canViewMultipleAgencies!: boolean;\r\n\r\n  searchDropdownOptions$!: Observable<any>;\r\n  selectSites = SelectType.Sites;\r\n  selectClass = SelectType.Class;\r\n  exitReasons!: IClassExitReason[];\r\n  agencies!: IAgency[];\r\n  sites!: ISites[];\r\n  classrooms!: any[];\r\n  \r\n  canViewSensitiveTransferInfo: boolean = this.permission.checkPermission(\r\n    Permission.ViewSensitiveStudentTransferInfo\r\n  );\r\n\r\n  exitRequestSearchForm: FormGroup | any;\r\n  get firstName() {\r\n    return this.exitRequestSearchForm.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.exitRequestSearchForm.get('lastName');\r\n  }\r\n  get stateId() {\r\n    return this.exitRequestSearchForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.exitRequestSearchForm.get('agencyId');\r\n  }\r\n  get classroomId() {\r\n    return this.exitRequestSearchForm.get('classroomId');\r\n  }\r\n  get fromSiteId() {\r\n    return this.exitRequestSearchForm.get('fromSiteId');\r\n  }\r\n\r\n  searchPayload!: IStudentRequestSearch;\r\n\r\n  initialAgencyId?: number | undefined = !this.canViewMultipleAgencies\r\n    ? this.user.agencyId\r\n    : undefined;\r\n  stateSearchId? = this.user.stateId;\r\n  clearDropdowns = false;\r\n\r\n  studentRequestPayload: IStudentRequest[] = [];\r\n  originalData: IStudentRequest[] = [];\r\n  existingData?: any;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'studentName',\r\n      header: 'Child Name',\r\n      type: TableColumnType.text,\r\n    },\r\n    ...(this.canViewSensitiveTransferInfo ? [\r\n      {\r\n        columnDef: 'dob',\r\n        header: 'DOB',\r\n        type: TableColumnType.date,\r\n      },\r\n      {\r\n        columnDef: 'fromSiteName',\r\n        header: 'Site',\r\n        type: TableColumnType.text,\r\n      },\r\n      {\r\n        columnDef: 'fromClassroomName',\r\n        header: 'Classroom',\r\n        type: TableColumnType.text,\r\n      }\r\n    ] : []),\r\n    {\r\n      columnDef: 'classExitReasonName',\r\n      header: 'Withdraw Reason',\r\n      type: TableColumnType.textToSelect,\r\n      action: TableInputAction.optionSelect,\r\n    },\r\n    {\r\n      columnDef: 'exitDate',\r\n      header: 'Withdraw Date',\r\n      type: TableColumnType.datepicker,\r\n      action: TableInputAction.dateSelect,\r\n    },\r\n    ...(this.canViewSensitiveTransferInfo ? [\r\n      {\r\n        columnDef: 'requestedBy',\r\n        header: 'Requested By',\r\n        type: TableColumnType.text,\r\n      }\r\n    ] : []),\r\n    {\r\n      columnDef: 'comment',\r\n      header: 'Requester Comment',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'fromRatingPeriod',\r\n      header: 'Rating Period',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'adminComment',\r\n      header: 'Admin Comment',\r\n      type: TableColumnType.textToInput,\r\n      action: TableInputAction.inputChange,\r\n      maxLength: 150,\r\n    },\r\n    {\r\n      columnDef: 'edit',\r\n      header: 'Edit',\r\n      type: 'edit',\r\n    },\r\n    {\r\n      columnDef: 'decline',\r\n      header: 'Decline',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'approve',\r\n      header: 'Accept',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    private studentRequestsService: StudentRequestService,\r\n    private lookupService: LookupService,\r\n    private authService: AuthService,\r\n    private toastService: ToastService,\r\n    private modal: MatDialog,\r\n    public fb: FormBuilder,\r\n    private router: Router,\r\n    private siteService: SiteService,\r\n    private classroomService: ClassroomService,\r\n    private permission: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.setDefaultPayload();\r\n    this.initializeSearchForm();\r\n    this.getExitReasons();\r\n\r\n    if (this.user.stateId) {\r\n      this.searchPayload.stateId = this.user.stateId;\r\n    }\r\n    if (this.user.agencyId) {\r\n      this.searchPayload.agencyId = this.user.agencyId;\r\n    }\r\n    this.canViewMultipleAgencies =\r\n      this.authService.isSuperAdmin() || this.authService.isCustomerService();\r\n\r\n    this.getPendingExits();\r\n\r\n    this.stateId.setValue(this.stateSearchId);\r\n    this.agencyId.setValue(this.initialAgencyId);\r\n  }\r\n\r\n  setDefaultPayload(): void {\r\n    this.searchPayload = {\r\n      requestReasonId: StudentRequestReason.Drop,\r\n    };\r\n  }\r\n\r\n  initializeSearchForm(): void {\r\n    this.exitRequestSearchForm = this.fb.group({\r\n      stateId: [null],\r\n      agencyId: [null],\r\n      classroomId: [null],\r\n      fromSiteId: [null],\r\n      firstName: [null, [Validators.maxLength(100)]],\r\n      lastName: [null, [Validators.maxLength(100)]],\r\n    });\r\n  }\r\n\r\n  getPendingExits(): void {\r\n    this.studentRequestsService\r\n      .getByReasonAndAgency(this.searchPayload)\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          if (!this.existingData) {\r\n            this.originalData = res.map(\r\n              (record: IStudentRequest): IStudentRequest => {\r\n                return {\r\n                  adminComment: record.adminComment,\r\n                  classExitReasonId: record.classExitReasonId,\r\n                  classExitReasonName: record.classExitReasonName,\r\n                  exitDate: record.exitDate,\r\n                  fromClassId: record.fromClassId,\r\n                  id: record.id,\r\n                  requestReasonId: record.requestReasonId,\r\n                  studentId: record.studentId,\r\n                  accept: record.accept,\r\n                };\r\n              }\r\n            );\r\n\r\n            res = res.map((data: any) => ({\r\n              ...data,\r\n              isSelect: false,\r\n              approve: null,\r\n              decline: null,\r\n              items: this.exitReasons,\r\n            }));\r\n          }\r\n\r\n          this.dataSource = new MatTableDataSource(this.existingData ?? res);\r\n          this.tableData = this.existingData ?? res;\r\n        }\r\n      });\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    switch (event.action) {\r\n      case TableInputAction.dateSelect:\r\n        this.tableData[event.index].exitDate = new Date(\r\n          event.value\r\n        ).toISOString();\r\n        break;\r\n      case TableInputAction.optionSelect:\r\n        this.tableData[event.index].classExitReasonName = event.data.exitReason;\r\n        this.tableData[event.index].classExitReasonId = event.data.id;\r\n        break;\r\n      case TableInputAction.inputChange:\r\n        this.tableData[event.index].adminComment = event.data.target.value;\r\n        break;\r\n      default:\r\n        this.tableData[event.index].isSelect =\r\n          !this.tableData[event.index].isSelect;\r\n    }\r\n  }\r\n\r\n  checkChanges() {\r\n    this.tableData.forEach((data: any, index: number) => {\r\n      this.setByStatus(data, index);\r\n    });\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.studentRequestPayload = [];\r\n    this.checkChanges();\r\n\r\n    if (!this.studentRequestPayload.length) {\r\n      this.router.navigateByUrl('/dashboard');\r\n    } else {\r\n      var event = { data: { modalInfo: {} } };\r\n      event.data.modalInfo = {\r\n        title: 'Discard all unsaved changes?',\r\n        message: `You will lose all unsaved changes and return to the dashboard. Do you wish to proceed?`,\r\n        primaryBtnClass: 'red',\r\n        primaryBtnText: Modal.Confirm,\r\n      };\r\n\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe((res) => {\r\n        if (!res) {\r\n          this.modal.closeAll();\r\n        } else {\r\n          this.toastService.success(\r\n            'All changes discarded. Returning to dashboard.'\r\n          );\r\n          this.router.navigateByUrl('/dashboard');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  onSubmit(): void {\r\n    this.studentRequestPayload = [];\r\n\r\n    const isEditing = this.tableData.find((row: any) => {\r\n      return row.isSelect == true;\r\n    });\r\n\r\n    if (isEditing) {\r\n      this.toastService.error(\r\n        \"Oops, you're currently editing a drop request. Please save before submitting.\"\r\n      );\r\n      return;\r\n    }\r\n\r\n    this.checkChanges();\r\n\r\n    if (!this.studentRequestPayload.length) {\r\n      this.toastService.error('No changes detected.');\r\n      return;\r\n    }\r\n\r\n    this.studentRequestsService\r\n      .processBulkUpdates(\r\n        this.studentRequestPayload,\r\n        'Drop requests have been updated.'\r\n      )\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          this.existingData = null;\r\n          this.getPendingExits();\r\n        }\r\n      });\r\n  }\r\n\r\n  setByStatus(data: any, index: number): void {\r\n    var requestUpdate = <IStudentRequest>{\r\n      adminComment: data.adminComment,\r\n      classExitReasonId: data.classExitReasonId,\r\n      classExitReasonName: data.classExitReasonName,\r\n      exitDate: data.exitDate,\r\n      fromClassId: data.fromClassId,\r\n      id: data.id,\r\n      requestReasonId: data.requestReasonId,\r\n      studentId: data.studentId,\r\n      accept: data.accept,\r\n    };\r\n\r\n    if (\r\n      JSON.stringify(requestUpdate) === JSON.stringify(this.originalData[index])\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this.studentRequestPayload.push(requestUpdate);\r\n  }\r\n\r\n  requestStatusUpdateHandler(event: any): void {\r\n    if (event.property == 'decline') {\r\n      this.tableData[event.index].approve = null;\r\n      if (this.tableData[event.index].decline == true) {\r\n        this.tableData[event.index].decline = null;\r\n      } else {\r\n        this.tableData[event.index].decline = true;\r\n        this.tableData[event.index].approve = false;\r\n      }\r\n    } else if (event.property == 'approve') {\r\n      this.tableData[event.index].decline = null;\r\n      if (this.tableData[event.index].approve == true) {\r\n        this.tableData[event.index].approve = null;\r\n      } else {\r\n        this.tableData[event.index].decline = false;\r\n        this.tableData[event.index].approve = true;\r\n      }\r\n    }\r\n\r\n    this.tableData[event.index].accept = this.tableData[event.index].approve;\r\n  }\r\n\r\n  getExitReasons() {\r\n    this.lookupService.getClassExitReasons().subscribe((res: any) => {\r\n      if (res) {\r\n        res = res.map((data: any) => ({\r\n          ...data,\r\n          name: data.exitReason,\r\n        }));\r\n        this.exitReasons = res;\r\n      }\r\n    });\r\n  }\r\n\r\n  search(): void {\r\n    this.searchPayload.firstName = this.firstName?.value;\r\n    this.searchPayload.lastName = this.lastName?.value;\r\n    this.searchPayload.agencyId = this.agencyId?.value;\r\n    this.searchPayload.fromSiteId = this.fromSiteId?.value;\r\n    this.searchPayload.classroomId = this.classroomId?.value;\r\n    this.searchPayload.stateId = this.stateId?.value;\r\n    this.getPendingExits();\r\n  }\r\n\r\n  handleState(state: IState) {\r\n    if (!state) {\r\n      this.stateId.setValue(null);\r\n      this.agencyId.setValue(null);\r\n      this.clearDropdownOptions();\r\n    } else if (state.id == this.stateId.value) {\r\n      return;\r\n    } else {\r\n      this.stateId.setValue(state.id);\r\n    }\r\n  }\r\n\r\n  handleAgency(agency: IAgency) {\r\n    if (!agency) {\r\n      this.agencyId.setValue(null);\r\n      this.clearDropdownOptions();\r\n    } else if (agency.id == this.agencyId.value) {\r\n      return;\r\n    } else {\r\n      this.agencyId.setValue(agency.id);\r\n      this.searchDropdownOptions$ = combineLatest({\r\n        sites: this.siteService.getSitesByAgencyId(agency.id),\r\n        classrooms: this.classroomService.getClassroomsByAgency(agency.id),\r\n      });\r\n      this.searchDropdownOptions$.pipe(take(1)).subscribe((res: any) => {\r\n        this.sites = res['sites'];\r\n        this.classrooms = mapClassResToDRDPSelect(res['classrooms']);\r\n      });\r\n    }\r\n  }\r\n\r\n  handleSites(site: any): void {\r\n    if (!site || site == undefined) {\r\n      this.classrooms = [];\r\n      this.fromSiteId.setValue(null);\r\n      this.classroomId.setValue(null);\r\n\r\n      return;\r\n    }\r\n\r\n    this.fromSiteId.setValue(site.id);\r\n    this.classroomService\r\n      .getClassroomsBySite(site.id)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.classrooms = mapClassResToDRDPSelect(res, true);\r\n      });\r\n  }\r\n\r\n  handleClassroom(classroom: any): void {\r\n    this.classroomId.setValue(null);\r\n    if (!classroom) {\r\n      return;\r\n    }\r\n    this.classroomId.setValue(classroom.id);\r\n  }\r\n\r\n  clearDropdownOptions(): void {\r\n    this.sites = [];\r\n    this.fromSiteId?.setValue(null);\r\n    this.classrooms = [];\r\n    this.classroomId?.setValue(null);\r\n  }\r\n  \r\n  onClear(): void {\r\n    this.clearDropdowns = !this.clearDropdowns;\r\n    this.clearDropdownOptions();\r\n    this.agencySelect?.clearSelected();\r\n    this.stateSelect?.clearSelected();\r\n    this.siteSelect?.clearSelected();\r\n    this.firstName?.setValue(null);\r\n    this.lastName?.setValue(null);\r\n\r\n    this.stateSearchId = undefined;\r\n    this.initialAgencyId = undefined;\r\n\r\n    this.setDefaultPayload();\r\n    this.getPendingExits();\r\n  }\r\n}\r\n\r\n","<div class=\"px-5\">\r\n  <div class=\"flex justify-between pt-5\">\r\n    <drdp-title title=\"Pending Withdraws\"></drdp-title>\r\n  </div>\r\n  <drdp-container class=\"p-5\">\r\n    <div class=\"rounded-lg\">\r\n      <div>\r\n        <drdp-container color=\"lightBlue\" additionClasses=\"w-full p-4\">\r\n          <form class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-3 gap-4\"\r\n            [formGroup]=\"exitRequestSearchForm\" (ngSubmit)=\"search()\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId?.value\" (state)=\"handleState($event)\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-state>\r\n            <drdp-select-agency #agencySelect (agency)=\"handleAgency($event)\" [stateId]=\"stateId?.value\"\r\n                [initialAgencyId]=\"agencyId?.value\" [clear]=\"clearDropdowns\">\r\n              </drdp-select-agency>\r\n            <div class=\"col-span-1 select-input h-full grid space-between\">\r\n              <drdp-select-site\r\n                              #siteSelect\r\n                              (site)=\"handleSites($event)\"\r\n                              [agencyId]=\"agencyId.value\"\r\n                              [clear]=\"clearDropdowns\">\r\n            </drdp-select-site>\r\n            </div>\r\n            <div class=\"col-span-1 select-input h-full grid space-between\">\r\n              <drdp-filter-select #classSelect label=\"Classroom\" [options]=\"classrooms\" [selectType]=\"selectClass\"\r\n                (onSelected)=\"handleClassroom($event)\">\r\n              </drdp-filter-select>\r\n            </div>\r\n            <div class=\"col-span-1 h-full grid space-between\">\r\n              <label class=\"font-bold\">First Name</label>\r\n              <div class=\"basis-1/2 border-b border-black\">\r\n                <input matInput placeholder=\"First Name\" formControlName=\"firstName\"\r\n                  class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\">\r\n              </div>\r\n            </div>\r\n            <div class=\"col-span-1 h-full grid space-between\">\r\n              <label class=\"font-bold\">Last Name</label>\r\n              <div class=\"basis-1/2 border-b border-black\">\r\n                <input matInput placeholder=\"Last Name\" formControlName=\"lastName\"\r\n                  class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\">\r\n              </div>\r\n            </div>\r\n            <div class=\"flex flex-row w-full\">\r\n              <drdp-btn type=\"submit\" class=\"mr-2\">Search</drdp-btn>\r\n              <drdp-btn type=\"button\" (click)=\"onClear()\" color=\"outline\">Clear</drdp-btn>\r\n            </div>\r\n          </form>\r\n        </drdp-container>\r\n        <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n          (editActionItem)=\"onIconClick($event)\" (toggleSwitchActionItem)=\"requestStatusUpdateHandler($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n      <div mat-dialog-actions class=\"flex justify-end align-bottom pt-8\">\r\n        <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button type=\"button\" (click)=\"onCancel()\">\r\n          Cancel\r\n        </drdp-btn>\r\n        <drdp-btn mat-button type=\"submit\" (click)=\"onSubmit()\" cdkFocusInitial>\r\n          Save and Submit\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import {\r\n  AbstractControl,\r\n  FormGroup,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nexport class CustomValidators {\r\n  static isNumber(control: AbstractControl) {\r\n    if (!control.value) return null;\r\n\r\n    return String(control.value).match(/^[0-9.]+$/)\r\n      ? null\r\n      : { isNumbers: true };\r\n  }\r\n\r\n  static cannotContainWhiteSpace(control: AbstractControl) {\r\n    if (!control.value) return null;\r\n\r\n    if ((control.value as string).trim() === '') {\r\n      return { cannotContainSpace: true };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  static dateValidator(\r\n    startDateProp: string,\r\n    endDateProp: string\r\n  ): ValidationErrors | null {\r\n    return (formGroup: FormGroup): ValidationErrors | null => {\r\n      const startDateValue = formGroup.get(startDateProp)?.value;\r\n      const endDateValue = formGroup.get(endDateProp)?.value;\r\n\r\n      if (startDateValue && endDateValue) {\r\n        // Extract date parts from the date strings and compare\r\n        const startDate = new Date(startDateValue);\r\n        const endDate = new Date(endDateValue);\r\n\r\n        const startOnlyDate = new Date(\r\n          startDate.getFullYear(),\r\n          startDate.getMonth(),\r\n          startDate.getDate()\r\n        );\r\n        const endOnlyDate = new Date(\r\n          endDate.getFullYear(),\r\n          endDate.getMonth(),\r\n          endDate.getDate()\r\n        );\r\n\r\n        if (startOnlyDate > endOnlyDate) {\r\n          return { dateMismatch: true };\r\n        }\r\n      }\r\n\r\n      return null;\r\n    };\r\n  }\r\n\r\n  static sameDateValidator(\r\n    startDateProp: string,\r\n    endDateProp: string\r\n  ): ValidationErrors | null {\r\n    return (formGroup: FormGroup): ValidationErrors | null => {\r\n      const startDateValue = formGroup.get(startDateProp)?.value;\r\n      const endDateValue = formGroup.get(endDateProp)?.value;\r\n\r\n      if (startDateValue && endDateValue) {\r\n        // Extract date parts from the date strings and compare\r\n        const startDate = new Date(startDateValue);\r\n        const endDate = new Date(endDateValue);\r\n\r\n        const startOnlyDate = new Date(\r\n          startDate.getFullYear(),\r\n          startDate.getMonth(),\r\n          startDate.getDate()\r\n        );\r\n        const endOnlyDate = new Date(\r\n          endDate.getFullYear(),\r\n          endDate.getMonth(),\r\n          endDate.getDate()\r\n        );\r\n\r\n        if (startOnlyDate.getTime() == endOnlyDate.getTime()) {\r\n          return { sameDate: true };\r\n        }\r\n      }\r\n\r\n      return null;\r\n    };\r\n  }\r\n\r\n  static decimalValidator(control: AbstractControl):ValidationErrors | null {\r\n    if (!control.value) return null;\r\n\r\n    return String(control.value).match(/^\\d+(\\.\\d{1,2})?$/)\r\n    ? null\r\n    : { invalidDecimal: true };\r\n  }\r\n}\r\n","<div *ngIf=\"enrollForm\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Add Child</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <div class=\"grid grid-cols-2 gap-4 gap-x-10 mt-5\">\r\n      <div class=\"mb-5\">\r\n        <h3 class=\"font-bold text-[18px] mb-2\">First Name</h3>\r\n        <p>{{ child.data.firstName }}</p>\r\n      </div>\r\n      <div class=\"mb-5\">\r\n        <h3 class=\"font-bold text-[18px] mb-2\">Last Name</h3>\r\n        <p>{{ child.data.lastName }}</p>\r\n      </div>\r\n      <div class=\"mb-5\">\r\n        <h3 class=\"font-bold text-[18px] mb-2\">Date of Birth</h3>\r\n        <p>{{ child.data.dob | date: 'MM/dd/yyyy' }}</p>\r\n      </div>\r\n      <div class=\"mb-5\">\r\n        <h3 class=\"font-bold text-[18px] mb-2\">DRDP ID</h3>\r\n        <p>{{ child.data.drdpId }}</p>\r\n      </div>\r\n      <drdp-classroom-rating-period-params (formValues)=\"handleDropdownSelection($event)\" class=\"contents\">\r\n      </drdp-classroom-rating-period-params>\r\n    </div>\r\n  </div>\r\n  <div class=\"flex flex-row justify-end\">\r\n    <drdp-btn mat-button mat-dialog-close [color]=\"'cancel'\">Cancel</drdp-btn>\r\n    <drdp-btn [disabled]=\"!enrollForm.valid\" class=\"ml-3\" (click)=\"submit()\">Save and Submit</drdp-btn>\r\n  </div>\r\n</div>","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IClassroom } from '@core/interfaces/iclasses';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\n\r\n@Component({\r\n  selector: 'drdp-enroll-dropped-children',\r\n  templateUrl: './enroll-dropped-children.component.html',\r\n  styleUrls: ['./enroll-dropped-children.component.scss']\r\n})\r\nexport class EnrollDroppedChildrenComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  \r\n  user = this.auth.getCurrentUser();\r\n  enrollForm: FormGroup | any;\r\n  agencyList: IAgency[] = [];\r\n  siteList: ISites [] = [];\r\n  classroomList: IClassroom[] = [];\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  select = SelectType;\r\n\r\n  getAgencyAndSiteData$: Observable<any> | undefined;\r\n  getClassroomData$: Observable<any> | undefined;\r\n  updateSiteClassroomSelections$: Observable<any> | undefined;\r\n\r\n  get ratingPeriodId() { return this.enrollForm.get('ratingPeriodId') }; \r\n  get classroomId() { return this.enrollForm.get('classroomId') };\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private studentClassEnrollment: StudentClassEnrollmentService,\r\n    public dialogRef: MatDialogRef<EnrollDroppedChildrenComponent>,\r\n    private fb: FormBuilder,\r\n    @Inject(MAT_DIALOG_DATA) public child: any\r\n  ) { \r\n    dialogRef.disableClose = true \r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.enrollForm = this.fb.group({\r\n      drdpId: [this.child.data.drdpId],\r\n      classroomId: [null, [Validators.required]],\r\n      ratingPeriodId: [null, [Validators.required]]\r\n    });\r\n  }\r\n\r\n  handleDropdownSelection(event: any): void {\r\n    this.classroomId.setValue(event.classroomId);\r\n    this.ratingPeriodId.setValue(event.ratingPeriodId);\r\n  }\r\n\r\n  submit(): void {\r\n    const payload = this.enrollForm.value;\r\n    this.studentClassEnrollment.enrollDroppedChild(payload, 'Child has been enrolled').subscribe((success: boolean) => {\r\n      if (success) {\r\n        this.dialogRef.close(true);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex flex-row\">\r\n        <div class=\"basis-1/2\">\r\n            <drdp-title [title]=\"title\"></drdp-title>\r\n        </div>\r\n    </div>\r\n\r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n        <drdp-container color=\"lightBlue\">\r\n            <form [formGroup]=\"searchForm\">\r\n                <div class=\"p-3 flex grid md:grid-cols-5 grid-cols-2 flex-row content-evenly\">\r\n                    <div>\r\n                    <label for=\"firstName\">First Name<span class=\"required\"></span></label>\r\n                    <div>\r\n                        <input class=\"bg-drdpblue-200 border-b border-black \r\n                            focus:outline-none focus:border-drdpblue-300\"\r\n                            formControlName=\"firstName\">\r\n                    </div>\r\n                    </div>\r\n                    <div>\r\n                    <label for=\"LastName\">Last Name<span class=\"required\"></span></label>\r\n                    <div>\r\n                        <input class=\"bg-drdpblue-200 border-b border-black \r\n                            focus:outline-none focus:border-drdpblue-300\"\r\n                            formControlName=\"lastName\">\r\n                    </div>\r\n                    </div>\r\n                    <div>\r\n                        <label for=\"drdpId\">DRDP ID</label>\r\n                        <div>\r\n                        <input class=\"bg-drdpblue-200 border-b border-black \r\n                            focus:outline-none focus:border-drdpblue-300\"\r\n                            formControlName=\"drdpId\">\r\n                        <span *ngIf=\"!drdpId.valid\" class=\"text-xs text-red-700\">\r\n                            Must be a valid Id\r\n                        </span>\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"ml-6\">\r\n                        <drdp-date-picker label=\"Date of Birth\" \r\n                                          labelClasses=\"pb-1\" \r\n                                          [isRequired]=\"true\" \r\n                                          (emitDate)=\"handleDate($event)\">\r\n                        </drdp-date-picker>\r\n                    </div>\r\n                    <div class=\"mt-6 flex justify-between\">\r\n                    <drdp-btn [disabled]=\"!searchForm.valid\" (click)=\"search()\">Display Results</drdp-btn>\r\n                    <drdp-btn (click)=\"clear()\" color=\"outline\">Clear</drdp-btn>\r\n                    </div>\r\n                </div>\r\n            </form>\r\n        </drdp-container>\r\n        <div class=\"p-5 md:w-1/2\">\r\n            <drdp-add-edit-table\r\n                [dataSource]=\"dataSource\"\r\n                [tableData]=\"tableData\"\r\n                [columns]=\"tableColumns\"\r\n                (iconActionItem)=\"openEnrollModal($event)\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n      </drdp-container>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IDroppedChild } from '@core/interfaces/idropped-children';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { EnrollDroppedChildrenComponent } from './enroll-dropped-children/enroll-dropped-children.component';\r\n\r\n@Component({\r\n  selector: 'drdp-search-dropped-children',\r\n  templateUrl: './search-dropped-children.component.html',\r\n  styleUrls: ['./search-dropped-children.component.scss']\r\n})\r\nexport class SearchDroppedChildrenComponent implements OnInit {\r\n\r\n  private subscriptions = new Subscription();\r\n\r\n  title = 'Search Dropped Children';\r\n  droppedChildren: IDroppedChild[] = [];\r\n  searchForm: FormGroup | any;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  addIcon: string = 'user-plus'\r\n\r\n  tableColumns = [\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'drdpId', header: 'DRDP ID', type: 'text' },\r\n    { columnDef: 'dob', header: 'Date of Birth', type: 'date'},\r\n    { columnDef: 'icon',  header: 'Add', icon: 'user-plus', type: 'icon', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' }\r\n  ]\r\n\r\n  get drdpId() { return this.searchForm.get('drdpId'); }\r\n  get dob() { return this.searchForm.get('dob'); }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private student: StudentService,\r\n    private toast: ToastService,\r\n    public modal: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.searchForm = this.fb.group({\r\n      firstName: ['', [Validators.required, Validators.maxLength(100)]],\r\n      lastName: ['', [Validators.required, Validators.maxLength(100)]],\r\n      drdpId: [null, [Validators.min(1), CustomValidators.isNumber]],\r\n      dob: [null, [Validators.required]]\r\n    });\r\n  }\r\n\r\n  search(): void {\r\n    if (this.searchForm.valid) {\r\n      const params = this.searchForm.value;\r\n      if (params.drdpId == null) {\r\n        delete params.drdpId;\r\n      }\r\n\r\n      this.subscriptions.add(this.student.searchDroppedChildren(params).subscribe((res: any) => {\r\n        res = res.map((data: any) => ({\r\n          ...data,\r\n          displayIcons: setIconDisplayObject(this.tableColumns, data)\r\n        }));\r\n\r\n        this.dataSource = new MatTableDataSource(res);\r\n        this.tableData = res;\r\n      }));\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.dob.setValue(event);\r\n  }\r\n\r\n  clear(): void {\r\n    this.searchForm.reset();\r\n  }\r\n\r\n  openEnrollModal(event: any): void {\r\n    const modalRef = this.modal.open(EnrollDroppedChildrenComponent, { data: event ? event : undefined });\r\n    this.subscriptions.add(modalRef.afterClosed().subscribe((success: boolean) => {\r\n      if (success) {\r\n        var clearTable: any[] = []\r\n        this.dataSource = new MatTableDataSource(clearTable);\r\n        this.tableData = clearTable;\r\n      }\r\n    }));\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, tap } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PermissionGuard implements CanActivate {\r\n  constructor(private router: Router, private permissionService: PermissionService, private authService: AuthService, private toast: ToastService) { }\r\n  canActivate(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n    let isValid = true;\r\n\r\n    if (route.data) {\r\n\r\n      var permissions = route.data['permission'];\r\n\r\n      if (Array.isArray(permissions)) {\r\n        for (let permission of permissions)\r\n        {\r\n          isValid = this.permissionService.checkPermission(permission);\r\n          if(isValid) break;\r\n        }\r\n      } else {\r\n        isValid = this.permissionService.checkPermission(permissions);\r\n      }\r\n\r\n\r\n      if (!isValid) {\r\n        this.router.navigateByUrl('dashboard');\r\n        this.toast.error('You are not authorized to access this page. Please login with the correct credentials.');\r\n      }\r\n    }\r\n    return isValid;\r\n  }\r\n\r\n}\r\n","export enum EventAction {\r\n    Select = 'Select',\r\n    Click = 'Click'\r\n}","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { concatMap, forkJoin, map, Observable, Subscription } from 'rxjs';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { IClass } from '@core/interfaces/iclasses';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestSearchResponse,\r\n} from '@core/interfaces/istudent-request';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { EventAction } from '@core/enums/event-action';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'drdp-re-enrollment-requests',\r\n  templateUrl: './re-enrollment-requests.component.html',\r\n  styleUrls: ['./re-enrollment-requests.component.scss'],\r\n})\r\nexport class ReEnrollmentRequestsComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  pendingRequests: any[] = [];\r\n  reEnrollRequests: any[] = [];\r\n  ratingOptions: IRatingPeriod[] = [];\r\n  existingClasses: IClass[] = [];\r\n  currentDate = new Date();\r\n  user: ILoginResponse;\r\n  getRatingPeriods$: Observable<any> | undefined;\r\n  getRequestData$: Observable<any> | undefined;\r\n  getClassesByClassroom$: Observable<any> | undefined;\r\n  getApprovedOrPendingReq$: Observable<any> | undefined;\r\n  requests: any[] = [];\r\n  router = inject(Router);\r\n\r\n  tableColumns = [\r\n    { columnDef: 'classroomName', header: 'Classroom', type: 'text' },\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Rating Period',\r\n      type: 'textToSelect',\r\n      action: EventAction.Select,\r\n    },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n    {\r\n      columnDef: 'decline',\r\n      header: 'Decline',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'accept',\r\n      header: 'Accept',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox',\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    public toast: ToastService,\r\n    public modal: MatDialog,\r\n    private studentRequest: StudentRequestService,\r\n    private authService: AuthService,\r\n    private ratingPeriods: RatingPeriodService,\r\n    private classes: ClassService\r\n  ) {\r\n    this.user = this.authService.getCurrentUser();\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const pendingReqParams = {\r\n      requestReasonId: StudentRequestReason.ReEnroll,\r\n      agencyId: this.user.agencyId,\r\n    };\r\n\r\n    this.getPendingRequests(pendingReqParams);\r\n  }\r\n\r\n  getPendingRequests(params: any): void {\r\n    this.getRequestData$ = this.studentRequest\r\n      .getByReasonAndAgency(params)\r\n      .pipe(\r\n        map((requests: IStudentRequestSearchResponse[]) => ({\r\n          requests: requests,\r\n        }))\r\n      );\r\n\r\n    this.getRatingPeriods$ = this.ratingPeriods\r\n      .getActiveSchoolYear()\r\n      .pipe(\r\n        concatMap((year: ISchoolYear) =>\r\n          this.ratingPeriods\r\n            .getBySchoolYearAndAgency(year.id, this.user.agencyId)\r\n            .pipe(map((ratingPeriods) => ratingPeriods))\r\n        )\r\n      );\r\n\r\n    this.subscriptions.add(\r\n      forkJoin({\r\n        requestData: this.getRequestData$,\r\n        ratings: this.getRatingPeriods$,\r\n      }).subscribe(({ requestData, ratings }) => {\r\n        ratings = ratings.map((rating: any) => ({\r\n          ...rating,\r\n          name: rating.ratingPeriodName,\r\n        }));\r\n\r\n        if (requestData) {\r\n          var requests = requestData.requests.map((request: any) => ({\r\n            ...request,\r\n            decline: false,\r\n            accept: false,\r\n            isSelect: false,\r\n            isEditing: false,\r\n            items: this.getRatingPeriods(ratings),\r\n          }));\r\n\r\n          this.requests = requests;\r\n          this.reEnrollRequests = [...requests];\r\n          this.dataSource = new MatTableDataSource(requests);\r\n          this.tableData = requests;\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  handleSearch(event: any): void {\r\n    const params = {\r\n      stateId: event.stateId,\r\n      agencyId: event.agencyId,\r\n      fromSiteId: event.siteId,\r\n      toClassId: event.classroomId,\r\n      toRatingPeriodId: event.ratingPeriodId,\r\n      requestReasonId: StudentRequestReason.ReEnroll,\r\n    };\r\n\r\n    this.getPendingRequests(params);\r\n  }\r\n\r\n  getRatingPeriods(ratingPeriods: IRatingPeriod[]) {\r\n    return ratingPeriods.filter(\r\n      (r: IRatingPeriod) => new Date(r.startDate) > this.currentDate\r\n    );\r\n  }\r\n\r\n  handleEditRequest(event: any): void {\r\n    if (event.action == EventAction.Select) {\r\n      this.handleChangeRequest(event);\r\n    }\r\n\r\n    if (!this.tableData[event.index].isEditing) {\r\n      this.tableData[event.index].isSelect = this.tableData[\r\n        event.index\r\n      ].isEditing = true;\r\n    } else {\r\n      this.tableData[event.index].isSelect = this.tableData[\r\n        event.index\r\n      ].isEditing = false;\r\n    }\r\n\r\n    this.dataSource.data = this.tableData;\r\n  }\r\n\r\n  handleApprovalRequest(event: any): void {\r\n    var i = event.index;\r\n    var prop = event.property;\r\n\r\n    this.requests[i][prop] = !this.requests[i][prop];\r\n    if (prop == 'accept') this.requests[i].decline = false;\r\n    else if (prop == 'decline') this.requests[i].accept = false;\r\n\r\n    this.dataSource.data = this.requests;\r\n  }\r\n\r\n  handleChangeRequest(event: any): void {\r\n    const params = {\r\n      requestReasonId: StudentRequestReason.ReEnroll,\r\n      fromClassId: this.requests[event.index].fromClassId,\r\n    };\r\n    this.getClassesByClassroom$ = this.classes.getClassesByClassroom(\r\n      this.requests[event.index].classroomId\r\n    );\r\n    this.getApprovedOrPendingReq$ =\r\n      this.studentRequest.getApprovedOrPendingByReasonAndClass(params);\r\n\r\n    this.subscriptions.add(\r\n      forkJoin({\r\n        classes: this.getClassesByClassroom$,\r\n        approvedOrPendingReq: this.getApprovedOrPendingReq$,\r\n      }).subscribe(({ classes, approvedOrPendingReq }) => {\r\n        let toClassId = classes.filter(\r\n          (c: IClass) => c.ratingPeriodId == event.data.id\r\n        )[0]?.id;\r\n        if (toClassId == null) {\r\n          this.toast.error(\r\n            \"Class assignment doesn't exist for this rating period.\"\r\n          );\r\n          return;\r\n        }\r\n\r\n        if (\r\n          approvedOrPendingReq.some(\r\n            (req: any) =>\r\n              req.toClassId === toClassId &&\r\n              req.studentId === this.requests[event.index].studentId &&\r\n              req.id !== this.requests[event.index].id\r\n          )\r\n        ) {\r\n          this.toast.error(\r\n            'An approved or pending re-enroll request already exists for this rating period.'\r\n          );\r\n          return;\r\n        }\r\n\r\n        this.requests[event.index].toClassId = toClassId;\r\n        this.requests[event.index].ratingPeriodName =\r\n          event.data.ratingPeriodName;\r\n        this.dataSource.data = this.requests;\r\n      })\r\n    );\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.requests.length == 0) {\r\n      this.toast.error('No requests to process');\r\n      return;\r\n    }\r\n\r\n    var requestPayload: IStudentRequest[] = [];\r\n\r\n    this.requests.forEach((req) => {\r\n      if (!req.accept && !req.decline) return;\r\n\r\n      var requestToPush = <IStudentRequest>{\r\n        id: req.id,\r\n        toClassId: req.toClassId,\r\n        fromClassId: req.fromClassId,\r\n        requestReasonId: StudentRequestReason.ReEnroll,\r\n        accept: req.accept,\r\n      };\r\n\r\n      requestPayload.push(requestToPush);\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.studentRequest\r\n        .processReEnrollmentRequests(\r\n          requestPayload,\r\n          'Requests have been processed'\r\n        )\r\n        .subscribe((success: boolean) => {\r\n          if (success) {\r\n            var updatedView = this.requests.filter((req: any) => {\r\n              !requestPayload.includes(req);\r\n            });\r\n\r\n            this.dataSource = new MatTableDataSource(updatedView);\r\n            this.tableData = updatedView;\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  handleCancel(): void {\r\n    this.router.navigateByUrl('/dashboard');\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <drdp-title title=\"Pending Classroom Re-Enrollments\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n        <drdp-classroom-rating-period-params\r\n          (searchValues)=\"handleSearch($event)\"\r\n          [search]=\"true\"\r\n          class=\"contents\"\r\n        >\r\n        </drdp-classroom-rating-period-params>\r\n      </div>\r\n    </drdp-container>\r\n    <div>\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        (selectActionItem)=\"handleChangeRequest($event)\"\r\n        (toggleSwitchActionItem)=\"handleApprovalRequest($event)\"\r\n        (editActionItem)=\"handleEditRequest($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n    <div class=\"spacer\"></div>\r\n    <div class=\"flex flex-row justify-end\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button (click)=\"handleCancel()\">\r\n        Cancel\r\n      </drdp-btn>\r\n      <drdp-btn color=\"blue\" (click)=\"submit()\"> Save </drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","<div id=\"news\" class=\"p-5\">\r\n  <div class=\"flex\">\r\n    <drdp-title title=\"News Item Form\" class=\"pb-5\"></drdp-title>\r\n    <a\r\n      *ngIf=\"canManageNewsItem\"\r\n      class=\"text-drdpblue-300 mt-2 pl-5\"\r\n      routerLink=\"/manage-news\"\r\n      >Manage News\r\n      <i class=\"uil uil-arrow-circle-right\"></i>\r\n    </a>\r\n  </div>\r\n  <drdp-container additionClasses=\"p-10\">\r\n    <form (ngSubmit)=\"submitForm()\">\r\n      <ng-container [formGroup]=\"newsItemForm\">\r\n        <div\r\n          class=\"grid lg:grid-cols-4 md:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-6\"\r\n        >\r\n          <div\r\n            class=\"lg:col-span-4 md:col-span-3 sm:col-span-2 col-span-1\"\r\n            *drdpCheckPermission=\"Permission.CreateAllAgencyNewsItem\"\r\n          >\r\n            <mat-checkbox\r\n              class=\"rounded-checkboxes\"\r\n              color=\"primary\"\r\n              [checked]=\"isGlobal.value\"\r\n              formControlName=\"isGlobal\"\r\n              (change)=\"handleGlobal()\"\r\n              [disabled]=\"id > 0\"\r\n            >\r\n            </mat-checkbox>\r\n            <label class=\"inline\">\r\n              Apply to \"All DRDP Online Agencies\"\r\n            </label>\r\n          </div>\r\n\r\n          <div\r\n            class=\"lg:col-span-4 md:col-span-3 sm:col-span-2 col-span-1\"\r\n          >\r\n            <mat-checkbox\r\n              class=\"rounded-checkboxes\"\r\n              color=\"primary\"\r\n              [checked]=\"isStateLevel.value\"\r\n              formControlName=\"isStateLevel\"\r\n              (change)=\"handleStateLevel()\"\r\n              [disabled]=\"id > 0\"\r\n            >\r\n            </mat-checkbox>\r\n            <label class=\"inline\">\r\n              State Level News Item\r\n            </label>\r\n          </div>\r\n\r\n          <drdp-filter-select\r\n            #newsTypeSelect\r\n            label=\"News Item Type\"\r\n            [multiSelect]=\"false\"\r\n            [options]=\"newsItemTypes\"\r\n            [selectType]=\"selectNewsItemTypes\"\r\n            [initialValues]=\"newsItemTypeInitialValue\"\r\n            [required]=\"true\"\r\n            (onSelected)=\"handleType($event)\"\r\n          >\r\n          </drdp-filter-select>\r\n\r\n          <div id=\"role\">\r\n            <label class=\"required\"> Role </label>\r\n            <mat-form-field class=\"fixBorder\" appearance=\"fill\">\r\n              <mat-select\r\n                formControlName=\"roleIds\"\r\n                placeholder=\"Select Roles\"\r\n                multiple\r\n              >\r\n                <mat-option *ngFor=\"let role of roles\" [value]=\"role.id\">\r\n                  {{ role.roleName }}\r\n                </mat-option>\r\n              </mat-select>\r\n              <mat-error *ngIf=\"!roleIds.valid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n\r\n          <drdp-select-state \r\n            [hidden]=\"isGlobal.value\"\r\n            #stateSelect \r\n            [initialStateIds]=\"stateInitialValues\" \r\n            [multiSelect]=\"true\"\r\n            (state)=\"handleState($event)\"\r\n            [clear]=\"clearDropdowns\" \r\n            [required]=\"true\">\r\n          </drdp-select-state>\r\n\r\n          <drdp-select-agency\r\n            [hidden]=\"isGlobal.value || isStateLevel.value\"\r\n            #agencySelect\r\n            (agency)=\"handleAgency($event)\"\r\n            [stateId]=\"stateIds.value\"\r\n            [clear]=\"clearDropdowns\"\r\n            ngClass=\"h-full z-40\"\r\n            [required]=\"true\"\r\n            [multiSelect]=\"true\"\r\n            [multiSelectInitVals]=\"true\"\r\n            [initialAgencyIds]=\"agencyInitialValues\"\r\n          >\r\n          </drdp-select-agency>\r\n\r\n          <drdp-select-site\r\n            #siteSelect\r\n            [hidden]=\"isGlobal.value || isStateLevel.value\"\r\n            (site)=\"handleSites($event)\"\r\n            [agencyId]=\"agencyIds.value\"\r\n            [clear]=\"clearDropdowns\"\r\n            [multiSelect]=\"true\"\r\n            [required]=\"true\"\r\n            [initialSiteIds]=\"siteInitialValues\"\r\n          >\r\n          </drdp-select-site>\r\n\r\n          <div class=\"relative\">\r\n            <drdp-date-picker\r\n              label=\"Start Date\"\r\n              [initialDate]=\"newsItemDate?.value\"\r\n              [isRequired]=\"true\"\r\n              (emitDate)=\"handleDate($event, 'newsItemDate')\"\r\n            >\r\n            </drdp-date-picker>\r\n            <div class=\"absolute top-0 left-full mt-1 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=dateInfo></i>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"relative\">\r\n            <drdp-date-picker\r\n              label=\"End Date\"\r\n              [initialDate]=\"newsItemEndDate?.value\"\r\n              [isRequired]=\"true\"\r\n              [resetDate]=\"resetDate\"\r\n              (emitDate)=\"handleDate($event, 'newsItemEndDate')\"\r\n            >\r\n            </drdp-date-picker>\r\n            <div class=\"absolute top-0 left-full mt-1 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=dateInfo></i>\r\n            </div>\r\n            <mat-error *ngIf=\"newsItemForm.hasError('dateMismatch')\">\r\n              Invalid date range. The End Date cannot be after the Start\r\n              Date.</mat-error\r\n            >\r\n            <mat-error *ngIf=\"newsItemForm.hasError('sameDate')\">\r\n              End Date cannot be the same as the Start Date.\r\n            </mat-error>\r\n          </div>\r\n          <div class=\"lg:col-span-3 md:col-span-3 sm:col-span-2 col-span-1\">\r\n            <label class=\"font-normal required\" for=\"newsItemTitle\"\r\n              >Title</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input\r\n                matInput\r\n                placeholder=\"Title\"\r\n                autocomplete=\"off\"\r\n                id=\"newsItemTitle\"\r\n                type=\"text\"\r\n                formControlName=\"newsItemTitle\"\r\n                maxlength=\"100\"\r\n                required\r\n              />\r\n              <mat-error *ngIf=\"!newsItemTitle.valid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n          <div class=\"lg:col-span-4 md:col-span-3 sm:col-span-2 col-span-1\">\r\n            <label class=\"pt-3 font-formal required\" for=\"newsItem\"\r\n              >Article Body</label\r\n            >\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <textarea\r\n                matInput\r\n                placeholder=\"Article Body\"\r\n                autocomplete=\"off\"\r\n                id=\"newsItem\"\r\n                formControlName=\"newsItem\"\r\n                cdkTextareaAutosize\r\n                cdkAutosizeMinRows=\"10\"\r\n                maxlength=\"376\"\r\n                required\r\n                class=\"border border-solid border-black\"\r\n              >\r\n              </textarea>\r\n              <mat-error *ngIf=\"!newsItem.valid\">{{ required }}</mat-error>\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n        <div class=\"mt-10 mb-2 flex justify-end\">\r\n          <drdp-btn\r\n            class=\"pr-4\"\r\n            type=\"button\"\r\n            (click)=\"resetForm()\"\r\n            color=\"cancel\"\r\n          >\r\n            Cancel & Reset\r\n          </drdp-btn>\r\n          <drdp-btn\r\n            type=\"submit\"\r\n            [disabled]=\"!newsItemForm.valid\"\r\n            cdkFocusInitial\r\n          >\r\n            Save & Submit\r\n          </drdp-btn>\r\n        </div>\r\n      </ng-container>\r\n    </form>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { NewsItemService } from '@core/services/news-item.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription, take } from 'rxjs';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport {\r\n  INewsItem,\r\n  INewsItemRequest,\r\n  INewsItemType,\r\n} from '@core/interfaces/inews-items';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n  formatDatesToString,\r\n  formatToDate,\r\n} from '@core/services/helper.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IState } from '@core/interfaces/istate';\r\n\r\n@Component({\r\n  selector: 'drdp-news',\r\n  templateUrl: './news.component.html',\r\n  styleUrls: ['./news.component.scss'],\r\n})\r\nexport class AddNewsComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  get newsItemDate() {\r\n    return this.newsItemForm.get('newsItemDate');\r\n  }\r\n  get newsItemEndDate() {\r\n    return this.newsItemForm.get('newsItemEndDate');\r\n  }\r\n  get newsItemTitle() {\r\n    return this.newsItemForm.get('newsItemTitle');\r\n  }\r\n  get newsItem() {\r\n    return this.newsItemForm.get('newsItem');\r\n  }\r\n  get newsItemTypeId() {\r\n    return this.newsItemForm.get('newsItemTypeId');\r\n  }\r\n  get stateIds() {\r\n    return this.newsItemForm.get('stateIds');\r\n  }\r\n  get agencyIds() {\r\n    return this.newsItemForm.get('agencyIds');\r\n  }\r\n  get siteIds() {\r\n    return this.newsItemForm.get('siteIds');\r\n  }\r\n  get roleIds() {\r\n    return this.newsItemForm.get('roleIds');\r\n  }\r\n  get isGlobal() {\r\n    return this.newsItemForm.get('isGlobal');\r\n  }\r\n  get isStateLevel() {\r\n    return this.newsItemForm.get('isStateLevel');\r\n  }\r\n\r\n  @ViewChild('newsTypeSelect') newsTypeSelect!: FilterSelectComponent;\r\n  @ViewChild('siteSelect') siteSelect!: FilterSelectComponent;\r\n  @ViewChild('stateSelect') stateSelect!: FilterSelectComponent;\r\n\r\n  required: string = 'Field is required.';\r\n  selectType = SelectType;\r\n\r\n  selectNewsItemTypes = SelectType.NewsItemTypes;\r\n  newsItemForm: FormGroup | any;\r\n  newItemsList?: INewsItem[];\r\n  newsItemTypes: any[] = [];\r\n  user: ILoginResponse = this.authService.getCurrentUser();\r\n  clearDropdowns: boolean = false;\r\n  sites!: ISites[];\r\n  roles!: IRoles[];\r\n  newsItemTypeInitialValue: number = 0;\r\n  stateInitialValues: number[] = [this.user.stateId];\r\n  agencyInitialValues: any = [this.user.agencyId];\r\n  siteInitialValues: number[] = [];\r\n  id = 0;\r\n  router = inject(Router);\r\n  permissionService = inject(PermissionService);\r\n  dateInfo = 'Start date is for the day you want the News Item posted and End Date is for the day you want the News Item to archive.';\r\n  resetDate?: boolean = false;\r\n  canManageNewsItem = this.permissionService.checkPermission(\r\n    Permission.CreateNewsItem\r\n  );\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private newsItemService: NewsItemService,\r\n    public toastService: ToastService,\r\n    private lookupService: LookupService,\r\n    private authService: AuthService,\r\n    private sitesService: SiteService,\r\n    private RoleService: RoleService,\r\n    private route: ActivatedRoute,\r\n    public modal: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.id = Number(this.route.snapshot.paramMap.get('id'));\r\n    this.initializeForms();\r\n    this.getNewsItemsTypes();\r\n    this.getUserRoles();\r\n    this.getNewItems();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.newsItemForm = this.fb.group(\r\n      {\r\n        newsItemTypeId: [null, [Validators.required]],\r\n        newsItemDate: [formatDatesToString(new Date()), [Validators.required]],\r\n        newsItemEndDate: [null, [Validators.required]],\r\n        newsItemTitle: [null, [Validators.required, Validators.max(100)]],\r\n        newsItem: [null, [Validators.required]],\r\n        stateIds: [this.stateInitialValues, [Validators.required]],\r\n        agencyIds: [this.agencyInitialValues, [Validators.required]],\r\n        roleIds: [null, [Validators.required]],\r\n        siteIds: [null, [Validators.required]],\r\n        isGlobal: [false],\r\n        isStateLevel: [false],\r\n      },\r\n      {\r\n        validators: [\r\n          CustomValidators.dateValidator('newsItemDate', 'newsItemEndDate'),\r\n          CustomValidators.sameDateValidator('newsItemDate', 'newsItemEndDate'),\r\n        ],\r\n      }\r\n    );\r\n\r\n    if (this.id) {\r\n      this.newsItemService\r\n        .getNewsItemById(this.id)\r\n        .pipe(take(1))\r\n        .subscribe((res: INewsItemRequest) => {\r\n          if (res) {\r\n            this.newsItemForm.patchValue({\r\n              newsItemTypeId: res.newsItemTypeId,\r\n              newsItemDate: new Date(res.newsItemDate),\r\n              newsItemEndDate: new Date(res.newsItemEndDate),\r\n              newsItemTitle: res.newsItemTitle,\r\n              newsItem: res.newsItemBody,\r\n              stateIds: res.stateIds,\r\n              agencyIds: res.agencies,\r\n              isGlobal: res.isGlobal,\r\n              isStateLevel: res.isStateLevel,\r\n              roleIds:\r\n                res.newsItemRoles && res.newsItemRoles.length > 0\r\n                  ? res.newsItemRoles.map((newsItemRole: any) => {\r\n                    return newsItemRole.roleId;\r\n                  })\r\n                  : [],\r\n              siteIds:\r\n                res.newsItemSites && res.newsItemSites.length > 0\r\n                  ? res.newsItemSites.map((newsItemSite: any) => {\r\n                    return newsItemSite.siteId;\r\n                  })\r\n                  : [],\r\n            });\r\n\r\n            this.newsItemTypeInitialValue = res.newsItemTypeId;\r\n            this.stateInitialValues = this.stateIds.value;\r\n            this.agencyInitialValues = this.agencyIds.value;\r\n            this.siteInitialValues = this.siteIds.value;\r\n            if (this.isGlobal.value) this.handleGlobal();\r\n            else if (this.isStateLevel.value) this.handleStateLevel();\r\n            var agencyIdObjectArr: any[] = [];\r\n            var val = this.agencyIds.value;\r\n            if (Array.isArray(val)) {\r\n              val.forEach((item) => agencyIdObjectArr.push({ id: item }));\r\n            }\r\n\r\n            if (agencyIdObjectArr.length > 0)\r\n              this.handleAgency(agencyIdObjectArr);\r\n          } else {\r\n            this.toastService.error(\r\n              'Something went wrong posting your news item. Please try again.'\r\n            );\r\n          }\r\n        });\r\n    } else {\r\n      var agencyIdObjectArr: any[] = [];\r\n      var val = this.agencyIds.value;\r\n      if (Array.isArray(val)) {\r\n        val.forEach((item) => agencyIdObjectArr.push({ id: item }));\r\n      }\r\n\r\n      if (agencyIdObjectArr.length > 0) this.handleAgency(agencyIdObjectArr);\r\n    }\r\n  }\r\n\r\n  getNewsItemsTypes() {\r\n    this.subscriptions.add(\r\n      this.lookupService\r\n        .getNewsItemTypes()\r\n        .subscribe((res: INewsItemType[]) => {\r\n          if (res) {\r\n            this.newsItemTypes = res;\r\n          } else {\r\n            this.toastService.error('No types found!');\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  getUserRoles(): void {\r\n    this.RoleService.getRolesByUserAccess()\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          this.roles = res;\r\n        }\r\n      });\r\n  }\r\n\r\n  getNewItems(): void {\r\n    this.newsItemService\r\n      .getUserActiveNewsItem(15)\r\n      .pipe(take(1))\r\n      .subscribe((item: any) => (this.newItemsList = item));\r\n  }\r\n\r\n  handleType(event: any) {\r\n    if (!Boolean(event)) {\r\n      this.newsItemForm.patchValue({ newsItemTypeId: null });\r\n      return;\r\n    }\r\n\r\n    this.newsItemForm.patchValue({ newsItemTypeId: event.id });\r\n  }\r\n\r\n  handleState(states: IState[]): void {\r\n    states.length \r\n      ? this.stateIds.setValue(states.map((e: IState) => e.id))\r\n      : this.stateIds.setValue(null);\r\n  }\r\n\r\n  handleAgency(event: any): void {\r\n    this.clearDropdowns = false;\r\n    let agencyIds: number[] = [];\r\n\r\n    if (!event) {\r\n      return;\r\n    }\r\n\r\n    if (Array.isArray(event) && event.length < 1) {\r\n      this.sites = [];\r\n\r\n      if (this.siteSelect) {\r\n        this.siteIds.setValue(null);\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (event?.id) {\r\n      agencyIds = [event.id];\r\n    } else {\r\n      agencyIds = event.map((e: any) => e.id);\r\n    }\r\n\r\n    this.agencyIds.setValue(agencyIds);\r\n  }\r\n\r\n  handleSites(event: any): void {\r\n    if (!event) {\r\n      this.siteIds.setValue(null);\r\n    } else {\r\n      const siteIds = event.map((site: any) => {\r\n        return site.id;\r\n      });\r\n\r\n      this.siteIds.setValue(siteIds);\r\n    }\r\n  }\r\n\r\n  handleDate(event: any, controlName: string): void {\r\n    if (event === '' || !event) {\r\n      this.newsItemForm.get(controlName).setValue(formatDatesToString(null));\r\n    } else {\r\n      this.newsItemForm.get(controlName).setValue(formatDatesToString(event));\r\n    }\r\n  }\r\n\r\n  handleGlobal() {\r\n    if (this.isGlobal.value) {\r\n      this.clearAgencySiteValidators();\r\n      this.stateIds.setValue(null);\r\n      this.stateIds.clearValidators();\r\n    } else {\r\n      this.addAgencySiteValidators();\r\n      this.stateIds.setValue(this.stateInitialValues);\r\n      this.stateIds.setValidators([Validators.required]);\r\n    }\r\n    this.isStateLevel.setValue(false);\r\n    this.clearAgencySiteValues();\r\n    this.updateValueAndValidity();\r\n  }\r\n\r\n  handleStateLevel() {\r\n    if (this.isStateLevel.value) {\r\n      this.clearAgencySiteValidators();\r\n    } else {\r\n     this.addAgencySiteValidators();\r\n    }\r\n    this.isGlobal.setValue(false);\r\n    this.stateIds.setValue(this.stateInitialValues);\r\n    this.stateIds.setValidators([Validators.required]);\r\n    this.clearAgencySiteValues();\r\n    this.updateValueAndValidity();\r\n  }\r\n\r\n  clearAgencySiteValidators(): void {\r\n    this.agencyIds.clearValidators();\r\n    this.siteIds.clearValidators();\r\n  }\r\n\r\n  addAgencySiteValidators(): void {\r\n    this.agencyIds.setValidators([Validators.required]);\r\n    this.siteIds.setValidators([Validators.required]);\r\n  }\r\n\r\n  clearAgencySiteValues(): void {\r\n    this.agencyInitialValues = [];\r\n    this.siteInitialValues = [];\r\n    this.agencyIds.setValue(null);\r\n    this.siteIds.setValue(null);\r\n  }\r\n\r\n  updateValueAndValidity(): void {\r\n    this.agencyIds.updateValueAndValidity();\r\n    this.siteIds.updateValueAndValidity();\r\n    this.stateIds.updateValueAndValidity();\r\n    this.isGlobal.updateValueAndValidity();\r\n    this.isStateLevel.updateValueAndValidity();\r\n  }\r\n\r\n  submitForm(): void {\r\n    if (!this.newsItemForm.valid) {\r\n      this.toastService.error('Please complete the form before submitting.');\r\n      return;\r\n    }\r\n\r\n    if (\r\n      this.checkDuplicateDate(\r\n        this.newsItemDate.value,\r\n        this.newsItemEndDate.value\r\n      )\r\n    ) {\r\n      var event = { data: { modalInfo: {} } };\r\n      event.data.modalInfo = {\r\n        title: 'Dates Already Selected',\r\n        message: `The dates chosen have already been selected for another news item, please choose different dates.`,\r\n        name: 'No Results',\r\n        primaryBtnClass: 'blue',\r\n        showCancel: false,\r\n        primaryBtnText: Modal.Close,\r\n      };\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe();\r\n      return;\r\n    }\r\n\r\n    const payload: any = this.newsItemForm.value;\r\n    if (payload.isGlobal) {\r\n      payload.agencyIds = null;\r\n      payload.siteIds = null;\r\n    }\r\n    if (this.id) {\r\n      payload.id = this.id;\r\n      this.updateNewsItem(payload);\r\n    } else {\r\n      this.addNewsItem(payload);\r\n    }\r\n  }\r\n\r\n  checkDuplicateDate(startDate: any, endDate: any): any {\r\n    if (this.newItemsList?.length) {\r\n      const formattedStartDate = formatToDate(startDate);\r\n      const formattedEndDate = formatToDate(endDate);\r\n      return this.newItemsList.some(\r\n        (item) =>\r\n          formatToDate(item.newsItemDate) === formattedStartDate &&\r\n          formatToDate(item.newsItemEndDate) === formattedEndDate &&\r\n          (!this.id || this.id != item.id) &&\r\n          (\r\n            (this.isGlobal.value && item.isGlobal) || //both global\r\n            (this.isStateLevel.value && item.isStateLevel && this.stateIds?.value?.some((id: number) => item.stateIds?.includes(id))) || // both state level and already saved item has one of the same state\r\n            (this.siteIds.value && item.siteIds?.values ? this.siteIds.value.some((id: number) => item.siteIds?.includes(id)) : false)  // both site level and already saved item has one of the same site\r\n          )\r\n      );\r\n    }\r\n    return false;\r\n  }\r\n\r\n  updateNewsItem(payload: any) {\r\n    this.subscriptions.add(\r\n      this.newsItemService.updateNewsItem(payload).subscribe((res: boolean) => {\r\n        if (res) {\r\n          this.toastService.success('News Item Updated Successfully.');\r\n          this.resetForm();\r\n          this.router.navigateByUrl('newsitems', { replaceUrl: true });\r\n        } else {\r\n          this.toastService.error(\r\n            'Something went wrong updating your news item. Please try again.'\r\n          );\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  addNewsItem(payload: any) {\r\n    this.subscriptions.add(\r\n      this.newsItemService.addNewsItem(payload).subscribe((res: boolean) => {\r\n        if (res) {\r\n          this.toastService.success('News Item Posted Successfully.');\r\n          this.resetForm();\r\n        } else {\r\n          this.toastService.error(\r\n            'Something went wrong posting your news item. Please try again.'\r\n          );\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  resetForm(): void {\r\n    let isGlobal = this.isGlobal.value;\r\n    let isStateLevel = this.isStateLevel.value;\r\n\r\n    this.agencyInitialValues = [];\r\n    this.siteInitialValues = [];\r\n    this.newsTypeSelect.clear();\r\n    this.stateSelect.clearSelected();\r\n\r\n    if ((this.siteSelect)) {\r\n      this.siteIds.setValue(null);\r\n    }\r\n\r\n    this.newsItemForm.reset();\r\n    this.newsItemDate.setValue(formatDatesToString(new Date()));\r\n    this.isGlobal.setValue(isGlobal);\r\n    this.isStateLevel.setValue(isStateLevel);\r\n    this.stateInitialValues = [this.user.stateId];\r\n    this.stateIds.setValue(this.stateInitialValues);\r\n    this.resetDate = !this.resetDate;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div id=\"selectRating\" class=\"rounded-lg  modal-body\">\r\n  <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle ml-auto\"></i>\r\n  <div class=\"grid border-b\" [ngClass]=\"{'pb-5': dialogData.isPilotEnrollment, 'grid-rows-3 gap-2': !dialogData.isPilotEnrollment}\" *ngIf=\"ratingSheet.measureRatingLevel\">\r\n    <p class=\"col-span-2 text-lg font-semibold\">{{ratingSheet.measureRatingLevel.code}}:\r\n      {{ratingSheet.measureRatingLevel.name}}</p>\r\n    <p>\r\n      {{ratingSheet.measureRatingLevel.description}}\r\n    </p>\r\n    <div class=\"col-span-1 flex justify-end\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn color=\"save\" class=\"mr-2\" (click)=\"saveRating()\">Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <drdp-portfolio-evidence-management #evidenceManagement [measureId]=\"dialogData.id\" [evidences]=\"measureEvidence\"\r\n      [ageGradeId]=\"dialogData.ageGradeInstrumentId\" [ageGradeInstrumentCode]=\"dialogData.ageGradeInstrumentCode\"\r\n      [isDomain]=\"false\" [isPortfolio]=\"false\" [ratingSheet]=\"ratingSheet\" [dialogData]=\"dialogData\"\r\n      (rating)=\"onSubmit($event)\" [hasStructuredPrompt]=\"dialogData.isStructuredPrompt\" [isPilot]=\"dialogData.isPilotEnrollment\">\r\n    </drdp-portfolio-evidence-management>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, Inject, ViewChild, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { take, tap } from 'rxjs';\r\nimport { IRatingMeasureDto } from '../../interfaces/irating-measure';\r\nimport { MeasureCondition } from '@core/enums/measure-condition';\r\nimport {\r\n  IPortfolioEvidenceResponse,\r\n  IPortfolioRatingSheet,\r\n} from '@core/interfaces/iportfolio';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { PortfolioEvidenceManagementComponent } from '@shared/components/portfolio-evidence-management/portfolio-evidence-management.component';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\n@Component({\r\n  selector: 'drdp-select-rating-modal',\r\n  templateUrl: './select-rating-modal.component.html',\r\n  styleUrls: ['./select-rating-modal.component.scss'],\r\n})\r\nexport class SelectRatingModalComponent implements OnInit {\r\n  @ViewChild('evidenceManagement') evidenceManagement: PortfolioEvidenceManagementComponent | undefined;\r\n  ratingSheet: IPortfolioRatingSheet = {\r\n    levelCount: 0,\r\n    measureRatingLevel: null,\r\n    canEmerging: false,\r\n    measureConditionId: null,\r\n    measureConditionName: null,\r\n    selectedValue: null,\r\n    reasonId: null,\r\n    comment: null,\r\n    showComment: false,\r\n  };\r\n  measureEvidence?: IPortfolioEvidenceResponse[];\r\n  ageGradeId?: number;\r\n  dialog = inject(MatDialog);\r\n\r\n  constructor(\r\n    private ratingService: RatingService,\r\n    private portfolioService: PortfolioService,\r\n    public dialogRef: MatDialogRef<SelectRatingModalComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public dialogData: IRatingMeasureDto\r\n  ) {}\r\n\r\n  public get measureCondition() {\r\n    return MeasureCondition;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.getMeasureEvidence();\r\n    this.ratingSheet.selectedValue =\r\n      this.dialogData.ratingValue || this.dialogData.preRatingValue;\r\n    this.ratingSheet.measureConditionId = this.dialogData.measureConditionId;\r\n    this.ratingSheet.measureConditionName =\r\n      this.dialogData.measureConditionName;\r\n    this.ratingSheet.reasonId = this.dialogData.childAssessmentRatingReasonId;\r\n    this.ratingSheet.comment = this.dialogData.comment;\r\n    this.ratingSheet.showComment =\r\n      this.dialogData.reasons?.find((r) => r.id == this.ratingSheet.reasonId)\r\n        ?.reasonComment == 'Other';\r\n\r\n    this.ratingService\r\n      .getMeasureLevels(this.dialogData.templateId, this.dialogData.id)\r\n      .pipe(\r\n        take(1),\r\n        tap((results) => {\r\n          this.ratingSheet.measureRatingLevel = results;\r\n          this.ratingSheet.levelCount = results?.levels?.length || 0;\r\n          if (this.ratingSheet.selectedValue) {\r\n            this.ratingSheet.canEmerging =\r\n              this.ratingSheet.selectedValue !=\r\n              (this.ratingSheet.measureRatingLevel?.maxLevel ?? 0);\r\n          } else if (this.ratingSheet.measureConditionId) {\r\n            this.ratingSheet.canEmerging =\r\n              this.ratingSheet.measureConditionId == 0 ||\r\n              this.ratingSheet.measureConditionId == MeasureCondition.Emerging;\r\n          }\r\n\r\n          if (this.ratingSheet.levelCount > 0) {\r\n            this.ratingSheet.measureRatingLevel.conditionLevels =\r\n              results.levels.filter((l) => l.isCondition);\r\n            this.ratingSheet.measureRatingLevel.developmentalLevels =\r\n              results.levels.filter((l) => !l.isCondition);\r\n\r\n            this.ratingSheet.measureRatingLevel.EM =\r\n              this.ratingSheet.measureRatingLevel.conditionLevels.find(\r\n                (c) => c.id == MeasureCondition.Emerging\r\n              );\r\n\r\n            this.ratingSheet.measureRatingLevel.notYet =\r\n              this.ratingSheet.measureRatingLevel.conditionLevels.find(\r\n                (c) => c.id == MeasureCondition.NotYet\r\n              );\r\n\r\n            this.ratingSheet.measureRatingLevel.conditional =\r\n              this.ratingSheet.measureRatingLevel.conditionLevels.find(\r\n                (c) => c.id == MeasureCondition.Conditional\r\n              );\r\n\r\n            this.ratingSheet.measureRatingLevel.UR =\r\n              this.ratingSheet.measureRatingLevel.conditionLevels.find(\r\n                (c) => c.id == MeasureCondition.Unratable\r\n              );\r\n          }\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  getMeasureEvidence(): void {\r\n    this.measureEvidence = [];\r\n    if (this.dialogData) {\r\n      this.portfolioService\r\n        .getMeasureEvidences(\r\n          this.dialogData.enrollmentId,\r\n          this.dialogData.ageGradeInstrumentId\r\n        )\r\n        .pipe(\r\n          take(1),\r\n          tap(\r\n            (res: IPortfolioEvidenceResponse[]) => (this.measureEvidence = res)\r\n          )\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  onSubmit(event: any): any {\r\n    this.dialogData = event;\r\n    this.dialogRef.close({ measure: this.dialogData });\r\n  }\r\n\r\n  saveRating(): void {\r\n    this.evidenceManagement?.emitSave();\r\n  }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { formatDatesToString, isDateBetween } from '@core/services/helper.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-assessment-date-modal',\r\n  templateUrl: './assessment-date-modal.component.html',\r\n  styleUrls: ['./assessment-date-modal.component.scss'],\r\n})\r\nexport class AssessmentDateModalComponent implements OnInit {\r\n  constructor(\r\n    private toast: ToastService,\r\n    public dialogRef: MatDialogRef<AssessmentDateModalComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public dialogData: any\r\n  ) {}\r\n\r\n  selectedDate: any = null;\r\n  startDate: Date = new Date(this.dialogData.minDate);\r\n  endDate: Date = new Date(this.dialogData.maxDate);\r\n  today: Date = new Date();\r\n  assessmentDateInfo = \"The day the child's assessments were saved. Could also be the same day as Lock Date.\";\r\n\r\n  ngOnInit(): void {\r\n    this.selectedDate = this.dialogData.assessmentDate\r\n      ? new Date(this.dialogData.assessmentDate)\r\n      : new Date();\r\n  }\r\n\r\n  onSubmit() {\r\n    if (!this.selectedDate) {\r\n      this.toast.error('Assessment Date is required to lock.');\r\n      return;\r\n    }\r\n\r\n    const checkDate = new Date(this.selectedDate);\r\n\r\n    if (!isDateBetween(this.startDate, this.endDate, checkDate)) {\r\n      this.toast.error(\r\n        'The selected assessment date does not match the correct rating term.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    this.dialogRef.close({\r\n      assessmentDate: formatDatesToString(this.selectedDate),\r\n    });\r\n  }\r\n}\r\n","<div id=\"assessment-modal\" class=\"rounded-lg fix-action-row modal-body\">\r\n  <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle ml-auto\"></i>\r\n  <div mat-dialog-content>\r\n    <label class=\"text-lg\">\r\n      Please confirm the assessment date of\r\n    </label>\r\n\r\n    <div class=\"relative\">\r\n      <mat-form-field appearance=\"standard\">\r\n        <input matInput [matDatepicker]=\"picker\" [(ngModel)]=\"selectedDate\" [max]=\"today\" placeholder=\"mm/dd/yyyy\">\r\n        <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n        <mat-datepicker #picker></mat-datepicker>\r\n      </mat-form-field>\r\n      <div class=\"absolute top-0 left-full mt-4 ml-[-2px]\">\r\n        <i class=\"uil uil-info-circle text-xs\" [matTooltip]=assessmentDateInfo></i>\r\n      </div>\r\n    </div>\r\n\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <div class=\"flex justify-end align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn color=\"save\" class=\"mr-2\" (click)=\"onSubmit()\">Confirm</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>","export enum InputRatingAction {\r\n  Save = 'Save',\r\n  Previous = 'Previous',\r\n  Next = 'Next',\r\n  Print = 'Print',\r\n  Lock = 'Lock',\r\n  Unlock = 'Unlock',\r\n}\r\n","<div id=\"teacher-survey-modal\" class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between items-start\">\r\n    <div>\r\n      <p class=\"font-semibold pb-1\">DRDP Pilot Study Measure Feedback</p>\r\n      <p class=\"mt-1 pb-1\">Survey questions must be completed in order for your final measure rating to be saved.</p>\r\n    </div>\r\n    <drdp-btn *ngIf=\"!dialogData.viewOnly\" color=\"save\" class=\"ml-5\" type=\"submit\" (click)=\"onSubmit()\">Save</drdp-btn>\r\n    <i *ngIf=\"dialogData.viewOnly\" mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <hr class=\"w-full\">\r\n  <div mat-dialog-content>\r\n    <form [formGroup]=\"difficultyForm\">\r\n      <mat-radio-group formControlName=\"difficultyLevelId\">\r\n        <label class=\"text-lg required\">\r\n          How easy or difficult was it to rate this measure for this child?\r\n        </label>\r\n        <mat-label>Select Difficulty Level:</mat-label>\r\n        <div *ngFor=\"let level of difficultyLevels\">\r\n          <ng-container *ngIf=\"level.isDefault\">\r\n            <mat-radio-button\r\n              [value]=\"level.id\"\r\n              color=\"primary\">\r\n              {{level.name}}\r\n            </mat-radio-button>\r\n          </ng-container>\r\n        </div>\r\n      </mat-radio-group>\r\n      <mat-radio-group *ngIf=\"this.dialogData.teacherSurveyReq?.isStructuredPrompt || this.dialogData?.isStructuredPrompt\" formControlName=\"extentLevelId\">\r\n        <label class=\"text-lg required\">\r\n          To what extent did the structured prompt assist you in rating this measure for this child?\r\n        </label>\r\n        <mat-label>Select Difficulty Level:</mat-label>\r\n        <div *ngFor=\"let level of difficultyLevels\">\r\n          <ng-container *ngIf=\"isPTKMathAndNotDefault(level)\">\r\n            <mat-radio-button\r\n              [value]=\"level.id\"\r\n              color=\"primary\">\r\n              {{level.name}}\r\n            </mat-radio-button>\r\n          </ng-container>\r\n        </div>\r\n      </mat-radio-group>\r\n\r\n      <label class=\"text-lg\">\r\n        Describe any difficulties you encountered in rating this measure for this child.\r\n      </label>\r\n      <textarea \r\n          formControlName=\"difficultyAnswer\"\r\n          name=\"difficultyAnswer\" \r\n          id=\"difficultyAnswer\" \r\n          class=\"w-full border border-black rounded-md p-2\"\r\n          placeholder=\"Please leave your reply here.\"\r\n        >\r\n      </textarea>\r\n    </form>\r\n  </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IDifficultyLevels } from '@core/interfaces/idifficulty-levels';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ITeacherSurvey, ITeacherSurveyRequest } from '../../interfaces/iteacher-survey';\r\nimport { take, tap } from 'rxjs';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-teacher-survey-modal',\r\n  templateUrl: './teacher-survey-modal.component.html',\r\n  styleUrls: ['./teacher-survey-modal.component.scss']\r\n})\r\nexport class TeacherSurveyModalComponent implements OnInit {\r\n  difficultyLevels: IDifficultyLevels[] = [];\r\n  difficultyForm!: FormGroup;\r\n\r\n  public get id() {\r\n    return this.difficultyForm.get('id');\r\n  }\r\n\r\n  public get difficultyLevelId() {\r\n    return this.difficultyForm.get('difficultyLevelId');\r\n  }\r\n\r\n  public get difficultyAnswer() {\r\n    return this.difficultyForm.get('difficultyAnswer');\r\n  }\r\n\r\n  public get extentLevelId() {\r\n    return this.difficultyForm.get('extentLevelId');\r\n  }\r\n  constructor(public dialog: MatDialog, \r\n              private lookupService: LookupService, \r\n              private ratingService: RatingService,\r\n              private toast: ToastService,\r\n              private fb: FormBuilder, \r\n              public dialogRef: MatDialogRef<TeacherSurveyModalComponent>,\r\n              @Inject(MAT_DIALOG_DATA) public dialogData: any) {}\r\n \r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n    this.getDifficultyLevels();\r\n  }\r\n\r\n  getDifficultyLevels() { \r\n    this.lookupService.getDifficultyLevels().pipe(\r\n      take(1),\r\n      tap((data: IDifficultyLevels[]) => {\r\n        this.difficultyLevels = data;\r\n      })\r\n    ).subscribe();\r\n  }\r\n\r\n  getTeacherSurvey() {\r\n    const { cardId, measureId } = this.dialogData.teacherSurveyReq ?? this.dialogData;\r\n    if (cardId && measureId) {\r\n      this.ratingService.getTeacherSurvey(cardId, measureId)\r\n        .pipe(\r\n          take(1),\r\n          tap((data: ITeacherSurvey) => {\r\n            if (data) {\r\n              this.id?.setValue(data.id);\r\n              this.difficultyLevelId?.setValue(data.difficultyLevelId);\r\n              this.difficultyAnswer?.setValue(data.difficultyAnswer);\r\n              this.extentLevelId?.setValue(data.extentLevelId);\r\n            }\r\n          })\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  initializeForm() {\r\n    const { cardId, measureId } = this.dialogData.teacherSurveyReq ?? this.dialogData;\r\n    this.difficultyForm = this.fb.group({\r\n      id: [0],\r\n      carId: [cardId],\r\n      measureId: [measureId],\r\n      difficultyLevelId: [null, Validators.required],\r\n      difficultyAnswer: [null],\r\n      extentLevelId: [null],\r\n    });\r\n\r\n    if (this.dialogData.teacherSurveyReq?.isStructuredPrompt || this.dialogData?.isStructuredPrompt) {\r\n      this.difficultyForm.get('extentLevelId')?.setValidators(Validators.required);\r\n    } else {\r\n      this.difficultyForm.get('extentLevelId')?.clearValidators();\r\n    }\r\n    this.difficultyForm.get('extentLevelId')?.updateValueAndValidity();\r\n\r\n    if (this.dialogData.viewOnly) {\r\n      this.difficultyLevelId?.disable();\r\n      this.difficultyAnswer?.disable();\r\n    }\r\n    \r\n    this.getTeacherSurvey();\r\n  }\r\n\r\n  isPTKMathAndNotDefault(level: any): boolean {\r\n    return !level.isDefault && (this.dialogData.teacherSurveyReq?.isStructuredPrompt || this.dialogData?.isStructuredPrompt);\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.difficultyForm.invalid) {\r\n      this.toast.error('Please make a selection before saving.');\r\n      return;\r\n    }\r\n\r\n    if (this.difficultyAnswer?.value && this.difficultyAnswer.value.length > 2000) {\r\n      this.toast.error('Maximum 2000 character count.');\r\n      return;\r\n    }\r\n\r\n    const payload: ITeacherSurvey = {\r\n      ...this.difficultyForm.value\r\n    }\r\n    this.dialogRef.close({ payload: payload });\r\n  }\r\n\r\n}\r\n","export enum MeasureReason {\r\n  ExcessiveAbsences = 1,\r\n  Other = 2,\r\n  NotYetEarliestLevel = 3,\r\n}\r\n","<div class=\"input-rating-sheet\" *ngIf=\"studentInfo\">\r\n  <div *ngFor=\"let domain of studentDomains\">\r\n    <drdp-container additionClasses=\"min-h-[15rem] mt-4\">\r\n      <div class=\"md:flex place-content-between place-items-center self-center\">\r\n        <div class=\"font-semibold text-xl\">\r\n          <img class=\"domain-icon\" src=\"assets/images/domains/{{domain.iconName}}\" [alt]=\"domain.domainCode\">\r\n          {{domain.domainCode}} - {{domain.domainName}}\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"mt-4 overflow-x-auto\">\r\n        <table class=\"table-auto min-w-full\" aria-label=\"Input Ratings Table\">\r\n          <thead>\r\n            <tr>\r\n              <th class=\"border border-gray-200 font-medium text-xs px-4 py-3\">\r\n                Measure\r\n              </th>\r\n              <th class=\"border border-gray-200 font-medium text-xs px-4 py-3\" *ngIf=\"domain.notYet\">\r\n                {{domain.notYet.measureConditionName}}\r\n              </th>\r\n\r\n              <th class=\"border border-gray-200 font-medium text-xs px-4 py-3\"\r\n                *ngFor=\"let level of domain.domainLevels\">\r\n                {{level.levelName}}\r\n              </th>\r\n              <th class=\"border border-gray-200 font-medium text-xs px-4 py-3\" *ngIf=\"domain.conditional\">\r\n                {{domain.conditional.description}}\r\n              </th>\r\n              <th class=\"border border-gray-200 font-medium text-xs px-4 py-3\" *ngIf=\"domain.EM\">\r\n                {{domain.EM.measureConditionCode}}</th>\r\n              <th class=\"border border-gray-200 text-xs px-4 py-3\" *ngIf=\"domain.UR\"\r\n                [ngClass]=\"{'text-left': isKinder}\">\r\n                <span class=\"font-medium \"> {{domain.UR.measureConditionCode}} </span>\r\n                <p class=\"font-light\" *ngIf=\"isKinder\">In the rare circumstance that you are unable to\r\n                  rate a measure:</p>\r\n              </th>\r\n            </tr>\r\n          </thead>\r\n          <tbody class=\"bg-white\">\r\n            <tr *ngFor=\"let measure of domain.measures\">\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-200\">\r\n                <p class=\"font-bold text-xs\">{{measure.code}}</p>\r\n                <p class=\"text-xs w-36\">{{measure.name}}</p>\r\n              </td>\r\n\r\n              <!-- Not Yet -->\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-300\" *ngIf=\"domain.notYet\"\r\n                [ngClass]=\"{'bg-gray-300': !measure.notYet}\">\r\n                <div class=\"flex justify-center\" *ngIf=\"measure.notYet\">\r\n                  <mat-checkbox class=\"font-medium\" [id]=\"measure.code + 'NY'\" [name]=\"measure.code + 'NY'\"\r\n                    [checked]=\"measure.isNotYet\" [(ngModel)]=\"measure.isNotYet\" [ngModelOptions]=\"{standalone: true}\"\r\n                    (change)=\"toggleMeasureNotYet(domain, measure, measure.notYet)\"\r\n                    [disabled]=\"studentInfo.isLocked || measure.isUR || isRatingDisabled\">\r\n                    <label class=\"sr-only\" [for]=\"measure.code + 'NY'\">{{measure.notYet.measureConditionName}}</label>\r\n                  </mat-checkbox>\r\n                </div>\r\n              </td>\r\n\r\n              <!-- Levels -->\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-300\"\r\n                [ngClass]=\"{'bg-gray-300': level.isDisabled}\" *ngFor=\"let level of measure.displayLevels\">\r\n                <div class=\"flex justify-center\" *ngIf=\"!level.isDisabled\"\r\n                  (click)=\"selectLevel(domain, measure, level)\">\r\n                  <label class=\"sr-only\" [for]=\"measure.code + level.value\">{{level.name}} </label>\r\n                  <input type=\"radio\" [id]=\"measure.code + level.value\" [name]=\"measure.code + level.value\"\r\n                    [value]=\"level.value\" [(ngModel)]=\"measure.ratingValue\"\r\n                    [disabled]=\"studentInfo.isLocked || measure.isUR || measure.isNotYet || isRatingDisabled\" />\r\n                </div>\r\n              </td>\r\n\r\n              <!-- Conditional -->\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-300\" *ngIf=\"domain.conditional\"\r\n                [ngClass]=\"{'bg-gray-300': !measure.conditional}\">\r\n                <div class=\"flex justify-center\" *ngIf=\"measure.conditional\"\r\n                  (click)=\"selectCondition(domain, measure, measure.conditional)\">\r\n                  <label class=\"sr-only\" [for]=\"measure.code + 'C'\">{{measure.conditional.measureConditionName}}\r\n                  </label>\r\n                  <input type=\"radio\" [id]=\"measure.code + 'C'\" [name]=\"measure.code + 'C'\"\r\n                    [value]=\"measureCondition.Conditional\" [(ngModel)]=\"measure.measureConditionId\"\r\n                    [ngModelOptions]=\"{standalone: true}\"\r\n                    [disabled]=\"studentInfo.isLocked || measure.isUR || measure.isNotYet || isRatingDisabled\" />\r\n                </div>\r\n              </td>\r\n\r\n              <!-- EM -->\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-300\" *ngIf=\"domain.EM\"\r\n                [ngClass]=\"{'bg-gray-300': !measure.EM}\">\r\n                <div class=\"flex justify-center\" *ngIf=\"measure.EM\">\r\n                  <mat-checkbox class=\"font-medium\" [id]=\"measure.code + 'EM'\" [name]=\"measure.code + 'EM'\"\r\n                    [checked]=\"measure.isEM\" [(ngModel)]=\"measure.isEM\" [ngModelOptions]=\"{standalone: true}\"\r\n                    (change)=\"toggleMeasureEM(domain, measure)\"\r\n                    [disabled]=\"!measure.canEmerging || studentInfo.isLocked || measure.isNotYet || isRatingDisabled\">\r\n                    <label class=\"sr-only\" [for]=\"measure.code + 'EM'\">{{measure.EM.measureConditionName}} </label>\r\n                  </mat-checkbox>\r\n                </div>\r\n              </td>\r\n\r\n              <!-- UR -->\r\n              <td class=\"p-3 border-t border-b border-r border-l border-gray-300\" *ngIf=\"domain.UR\"\r\n                [ngClass]=\"{'bg-gray-300': !measure.UR}\">\r\n                <div class=\"flex\" [ngClass]=\"{'justify-center': !isKinder}\" *ngIf=\"measure.UR\">\r\n                  <mat-checkbox class=\"font-medium\" [id]=\"measure.code + 'UR'\" [name]=\"measure.code + 'UR'\"\r\n                    [checked]=\"measure.isUR\" [(ngModel)]=\"measure.isUR\" [ngModelOptions]=\"{standalone: true}\"\r\n                    (change)=\"toggleMeasureUR(domain, measure, measure.UR)\"\r\n                    [disabled]=\"studentInfo.isLocked || measure.isNotYet || isRatingDisabled\">\r\n                    <label class=\"sr-only\" [for]=\"measure.code + 'UR'\">{{measure.UR.measureConditionName}} </label>\r\n                  </mat-checkbox>\r\n                  <ng-container *ngIf=\"measure.measureConditionId == measureCondition.Unratable && isKinder\">\r\n                    <div class=\"ml-4 w-36\">\r\n                      <label class=\"font-normal text-sm m-0\" for=\"reason\">Reason</label>\r\n                      <mat-select placeholder=\"Reason\" [(ngModel)]=\"measure.childAssessmentRatingReasonId\" id=\"reason\"\r\n                        [disabled]=\"studentInfo.isLocked || isRatingDisabled\">\r\n                        <mat-option *ngFor=\"let reason of carReasons\" [value]=\"reason.id\"\r\n                          (click)=\"selectReason(domain, measure, reason)\">\r\n                          {{ reason.reasonComment }}\r\n                        </mat-option>\r\n                      </mat-select>\r\n                    </div>\r\n\r\n                    <div *ngIf=\"measure.showComment\">\r\n                      <div class=\"ml-4 w-36\">\r\n                        <label class=\"font-normal text-sm m-0\" for=\"comment\">Comment</label>\r\n                        <mat-form-field appearance=\"fill\">\r\n                          <input matInput [(ngModel)]=\"measure.comment\" placeholder=\"Add your comment here\"\r\n                            maxlength=\"100\" id=\"comment\" autocomplete=\"off\" type=\"text\"\r\n                            [disabled]=\"studentInfo.isLocked || isRatingDisabled\"\r\n                            (blur)=\"emitMeasureChange(domain, measure)\" />\r\n                        </mat-form-field>\r\n                      </div>\r\n                    </div>\r\n                  </ng-container>\r\n                </div>\r\n              </td>\r\n            </tr>\r\n          </tbody>\r\n        </table>\r\n      </div>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { IRatingDomainDto } from '../../interfaces/irating-domain';\r\nimport { IStudentEnrollmentInfo } from '../../interfaces/istudent-enrollment-info';\r\nimport { IRatingMeasureDto } from '../../interfaces/irating-measure';\r\nimport {\r\n  MeasureCondition,\r\n  MeasureConditionName,\r\n} from '@core/enums/measure-condition';\r\nimport { MeasureReason } from '@core/enums/measure-reason';\r\nimport { IRatingReason } from '../../interfaces/irating-reason';\r\nimport { IMeasureCondition } from '../../interfaces/imeasure-condition';\r\n\r\n@Component({\r\n  selector: 'drdp-scantron',\r\n  templateUrl: './scantron.component.html',\r\n  styleUrls: ['./scantron.component.scss'],\r\n})\r\nexport class ScantronComponent implements OnInit {\r\n  private _studentDomains: IRatingDomainDto[] = [];\r\n  @Input() carReasons: IRatingReason[] = [];\r\n  @Input() isKinder: boolean = false;\r\n  @Input() isRatingDisabled = false;\r\n  @Input() studentInfo?: IStudentEnrollmentInfo;\r\n\r\n  @Input()\r\n  set studentDomains(value: IRatingDomainDto[]) {\r\n    this._studentDomains = value;\r\n    this.processDomains();\r\n  }\r\n  get studentDomains(): IRatingDomainDto[] {\r\n    return this._studentDomains;\r\n  }\r\n\r\n  @Output() measureUpdated = new EventEmitter<{\r\n    domain: IRatingDomainDto;\r\n    measure: IRatingMeasureDto;\r\n  }>();\r\n  public get measureCondition() {\r\n    return MeasureCondition;\r\n  }\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  processDomains() {\r\n    if (this.studentDomains.length > 0) {\r\n      this.studentDomains.forEach((domain) => {\r\n        domain.notYet = domain.domainConditions.find(\r\n          (d) => d.id == MeasureCondition.NotYet\r\n        );\r\n        domain.conditional = domain.domainConditions.find(\r\n          (d) => d.id == MeasureCondition.Conditional\r\n        );\r\n        domain.EM = domain.domainConditions.find(\r\n          (d) => d.id == MeasureCondition.Emerging\r\n        );\r\n        null;\r\n        domain.UR = domain.domainConditions.find(\r\n          (d) => d.id == MeasureCondition.Unratable\r\n        );\r\n\r\n        domain.measures.forEach((measure) => {\r\n          if (measure.ratingValue) {\r\n            measure.canEmerging =\r\n              measure.ratingValue != (measure?.maxLevel ?? 0);\r\n          } else if (measure.measureConditionId) {\r\n            measure.showComment =\r\n              measure.childAssessmentRatingReasonId == MeasureReason.Other;\r\n            measure.canEmerging =\r\n              measure.measureConditionId == 0 ||\r\n              measure.measureConditionId == MeasureCondition.Emerging;\r\n          }\r\n\r\n          measure.displayLevels = [];\r\n          domain.domainLevels.forEach((domainLevel) => {\r\n            const level = measure.measureLevels?.find(\r\n              (m) => m.levelName === domainLevel.levelName\r\n            );\r\n            const mdl = level\r\n              ? { isDisabled: false, value: level.id, name: level.levelName }\r\n              : { isDisabled: true, value: 0, name: null };\r\n\r\n            measure.displayLevels.push(mdl);\r\n          });\r\n\r\n          measure.notYet = measure.measureConditions?.find(\r\n            (m) => m.measureConditionId == MeasureCondition.NotYet\r\n          )?.measureCondition;\r\n          measure.conditional = measure.measureConditions?.find(\r\n            (m) => m.measureConditionId == MeasureCondition.Conditional\r\n          )?.measureCondition;\r\n          measure.EM = measure.measureConditions?.find(\r\n            (m) => m.measureConditionId == MeasureCondition.Emerging\r\n          )?.measureCondition;\r\n          measure.UR = measure.measureConditions?.find(\r\n            (m) => m.measureConditionId == MeasureCondition.Unratable\r\n          )?.measureCondition;\r\n\r\n          measure.isUR =\r\n            measure.measureConditionId == MeasureCondition.Unratable;\r\n          measure.isEM =\r\n            measure.measureConditionId == MeasureCondition.Emerging;\r\n          measure.isNotYet =\r\n            measure.measureConditionId == MeasureCondition.NotYet;\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  selectLevel(\r\n    domain: IRatingDomainDto,\r\n    measure: IRatingMeasureDto,\r\n    level: any\r\n  ) {\r\n    if (this.studentInfo?.isLocked) return;\r\n    measure.canEmerging = level.value != (measure.maxLevel ?? 0);\r\n    measure.ratingValue = level.value;\r\n    measure.selectedLevelName = level.name;\r\n    if (\r\n      measure.canEmerging &&\r\n      measure.measureConditionId == MeasureCondition.Emerging\r\n    ) {\r\n      return;\r\n    }\r\n    measure.measureConditionId = null;\r\n    measure.isUR = false;\r\n    measure.isNotYet = false;\r\n    measure.isEM = false;\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  selectCondition(\r\n    domain: IRatingDomainDto,\r\n    measure: IRatingMeasureDto,\r\n    condition: IMeasureCondition\r\n  ) {\r\n    if (this.studentInfo?.isLocked) return;\r\n    if (condition.id == MeasureCondition.Emerging) {\r\n      if (!measure.canEmerging) return;\r\n      else measure.measureConditionId = condition.id;\r\n    } else {\r\n      measure.canEmerging = false;\r\n      measure.measureConditionId = condition.id;\r\n      measure.ratingValue = null;\r\n      measure.selectedLevelName = condition.measureConditionName;\r\n      measure.measureConditionName = condition.measureConditionName;\r\n    }\r\n    measure.isNotYet = false;\r\n    measure.isEM = false;\r\n    measure.isUR = false;\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  toggleMeasureUR(\r\n    domain: IRatingDomainDto,\r\n    measure: IRatingMeasureDto,\r\n    condition: IMeasureCondition\r\n  ) {\r\n    if (measure.isUR) {\r\n      measure.ratingValue = null;\r\n      measure.canEmerging = false;\r\n      measure.selectedLevelName = condition.measureConditionName;\r\n      measure.measureConditionId = MeasureCondition.Unratable;\r\n      measure.measureConditionName = MeasureConditionName.Unratable;\r\n      measure.isNotYet = false;\r\n      measure.isEM = false;\r\n    } else {\r\n      measure.measureConditionId = null;\r\n      measure.measureConditionName = null;\r\n      measure.selectedLevelName = null;\r\n      measure.canEmerging = true;\r\n    }\r\n\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  toggleMeasureNotYet(\r\n    domain: IRatingDomainDto,\r\n    measure: IRatingMeasureDto,\r\n    condition: IMeasureCondition\r\n  ) {\r\n    if (measure.isNotYet) {\r\n      measure.ratingValue = null;\r\n      measure.canEmerging = false;\r\n      measure.selectedLevelName = condition.measureConditionName;\r\n      measure.measureConditionId = MeasureCondition.NotYet;\r\n      measure.measureConditionName = MeasureConditionName.NotYet;\r\n      measure.isUR = false;\r\n      measure.isEM = false;\r\n    } else {\r\n      measure.measureConditionId = null;\r\n      measure.measureConditionName = null;\r\n      measure.selectedLevelName = null;\r\n    }\r\n\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  toggleMeasureEM(domain: IRatingDomainDto, measure: IRatingMeasureDto) {\r\n    if (measure.isEM) {\r\n      measure.measureConditionId = MeasureCondition.Emerging;\r\n      measure.measureConditionName = MeasureConditionName.Emerging;\r\n      measure.isUR = false;\r\n      measure.isNotYet = false;\r\n    } else {\r\n      measure.measureConditionId = null;\r\n      measure.measureConditionName = null;\r\n      measure.selectedLevelName = null;\r\n    }\r\n\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  selectReason(\r\n    domain: IRatingDomainDto,\r\n    measure: IRatingMeasureDto,\r\n    reason: IRatingReason\r\n  ) {\r\n    measure.childAssessmentRatingReasonId = reason.id;\r\n    measure.showComment = reason.reasonComment == 'Other';\r\n    if (!measure.showComment) measure.comment = null;\r\n    this.emitMeasureChange(domain, measure);\r\n  }\r\n\r\n  emitMeasureChange(domain: IRatingDomainDto, measure: IRatingMeasureDto) {\r\n    this.measureUpdated.emit({ domain: domain, measure: measure });\r\n  }\r\n}\r\n","<div *ngIf=\"studentInfo\">\r\n  <div class=\"grid grid-cols-1 md:grid-cols-3 gap-3 mt-5 px-0\">\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Child:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.studentName}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">District/Agency:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.agencyName}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Classroom Enrollment Date:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.enrollmentDate | date: 'longDate'}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Class:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.classroomName}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">School or Site:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.siteName}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Assessment Date:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.assessmentDate | date: 'longDate'}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Teacher:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.teacherName}}</div>\r\n    </div>\r\n    <div class=\"flex flex-wrap\">\r\n      <div class=\"w-2/5\">Age Group Instrument:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.ageGradeInstrumentName}} <span\r\n          *ngIf=\"studentInfo.isCustom\">(Custom)</span></div>\r\n    </div>\r\n    <div class=\" flex flex-wrap\">\r\n      <div class=\"w-2/5\">Lock Date:</div>\r\n      <div class=\"w-3/5 font-bold\">{{studentInfo.lockingDate | localDate | date: 'longDate'}}</div>\r\n    </div>\r\n\r\n  </div>\r\n\r\n  <div class=\"md:flex place-content-between place-items-center self-center mt-5\"\r\n    *ngIf=\"hasMeasures && !studentInfo?.isPilotEnrollment\">\r\n    <p class=\"text-sm\">\r\n      <ng-container *ngIf=\"studentInfo.templateUrl\">The <a class=\"text-blue-700 font-bold\"\r\n          [href]=\" studentInfo.templateUrl\" target=\"_blank\">DRDP instrument</a>\r\n        must be used\r\n        with this rating\r\n        record to ensure\r\n        accuracy when rating.\r\n      </ng-container>\r\n    </p>\r\n  </div>\r\n\r\n  <div class=\"md:flex place-content-between place-items-center bg-[#ed4c4c] text-white self-center mt-5 rounded-3xl py-4 px-3\"\r\n  *ngIf=\"isRatingDisabled\">\r\n    <p class=\"text-sm\">\r\n      <ng-container>\r\n        Ratings cannot be modified as the student is either withdrawn or was assessed in a different class.\r\n      </ng-container>\r\n    </p>\r\n  </div>\r\n\r\n  <div class=\"flex flex-wrap justify-end items-end space-x-2 mt-2\">\r\n    <div><a class=\"text-sm cursor-pointer\" (click)=\"goBack()\"><i\r\n      class=\"uil uil-angle-left-b text-base\"></i>Back to View Class</a></div>\r\n    <drdp-btn *ngIf=\"isScantron && !studentInfo.isLocked && canSaveRatings\"\r\n      (click)=\"onActionClick(InputRatingAction.Save)\" color=\"outline\">\r\n      <i class=\"text-drdpblue-300 text-xl uil uil-save\"></i>\r\n      Save</drdp-btn>\r\n    <drdp-btn (click)=\"onActionClick(InputRatingAction.Previous)\" color=\"outline\"> <i\r\n        class=\"text-drdpblue-300 text-xl uil uil-previous\"></i>\r\n      Previous</drdp-btn>\r\n      <drdp-btn (click)=\"onActionClick(InputRatingAction.Next)\" color=\"outline\"> <i\r\n        class=\"text-drdpblue-300 text-xl uit uil-step-forward\"></i>\r\n      Next</drdp-btn>\r\n    <drdp-btn (click)=\"onActionClick(InputRatingAction.Print)\" color=\"outline\"> <i\r\n        class=\"text-drdpblue-300 text-xl uil uil-print\"></i>\r\n      Print</drdp-btn>\r\n    <drdp-btn *ngIf=\"!studentInfo.isLocked && canLockRatings && !isRatingDisabled\"\r\n      (click)=\"onActionClick(InputRatingAction.Lock)\" color=\"outline\">\r\n      <i class=\"text-drdpblue-300 text-xl uil uil-lock\"></i>Lock</drdp-btn>\r\n\r\n    <drdp-btn *ngIf=\"studentInfo.isLocked && canUnlockRatings && !isRatingDisabled\"\r\n      (click)=\"onActionClick(InputRatingAction.Unlock)\" color=\"outline\">\r\n      <i class=\"text-drdpblue-300 text-xl uil uil-unlock\"></i>\r\n      Unlock</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IStudentEnrollmentInfo } from '../../interfaces/istudent-enrollment-info';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { InputRatingAction } from '@core/enums/input-rating-action';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'drdp-student-info',\r\n  templateUrl: './student-info.component.html',\r\n  styleUrls: ['./student-info.component.scss'],\r\n})\r\nexport class StudentInfoComponent implements OnInit {\r\n  @Input() studentInfo?: IStudentEnrollmentInfo;\r\n  @Input() hasMeasures: boolean = false;\r\n  @Input() canLock = false;\r\n  @Input() isScantron = false;\r\n  @Input() isRatingDisabled = false;\r\n  @Output() actionClicked = new EventEmitter();\r\n  canLockRatings = this.permissionService.checkPermission(\r\n    Permission.LockRatings\r\n  );\r\n  previousPage = '/ratings';\r\n\r\n  canUnlockRatings = this.permissionService.checkPermission(\r\n    Permission.UnlockRatings\r\n  );\r\n  canSaveRatings = this.permissionService.checkPermission(\r\n    Permission.CreateRating\r\n  );\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  public get InputRatingAction() {\r\n    return InputRatingAction;\r\n  }\r\n\r\n  constructor(private permissionService: PermissionService, private router: Router) {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  onActionClick(type: InputRatingAction) {\r\n    this.actionClicked.emit(type);\r\n  }\r\n\r\n  goBack(): void {\r\n    this.router.navigateByUrl(this.previousPage);\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.previousPage = `ratings/class/${this.studentInfo?.classId}/ageGradeInstrument/${this.studentInfo?.ageGradeInstrumentId}`;\r\n  }\r\n}\r\n","<div *ngIf=\"studentInfo\">\r\n  <div class=\"flex flex-col mt-5\" *ngFor=\"let domain of studentDomains\">\r\n    <drdp-container additionClasses=\"min-h-[10rem]\">\r\n      <div class=\"md:flex place-content-between place-items-center self-center\">\r\n        <div class=\"font-semibold text-xl\">\r\n          <img class=\"domain-icon\" src=\"assets/images/domains/{{domain.iconName}}\" [alt]=\"domain.domainCode\">\r\n          {{domain.domainCode}} - {{domain.domainName}}\r\n        </div>\r\n        <div class=\"flex justify-end items-end text-xl\">\r\n          {{domain.domainTotal}}\r\n        </div>\r\n      </div>\r\n      <div class=\"grid grid-cols-1  md:grid-cols-3 gap-4 mb-4\">\r\n        <div class=\"mt-5 px-1 flex flex-col\" *ngFor=\"let measure of domain.measures\">\r\n          <div class=\"flex-grow\">\r\n            <h2 class=\"font-semibold ml-2\">{{ measure.code }} : {{ measure.name }}</h2>\r\n          </div>\r\n          <div class=\"mt-3 justify-end\">\r\n            <input class=\"bg-transparent py-1 px-2 border border-gray-900 w-2/4 placeholder-black\" aria-label=\"Rating selected\"\r\n              [placeholder]=\"measure.selectedLevelName ?? 'None Selected'\" [id]=\"measure.id\" type=\"text\" readonly>\r\n\r\n            <button *ngIf=\"!measure.preRatingValue && !measure.ratingValue && !measure.measureConditionId\"\r\n              class=\"bg-transparent text-blue-700 font-semibold py-1 px-4 border border-blue-500\"\r\n              [disabled]=\"!canCreateRating || isRatingDisabled\"\r\n              (click)=\"selectRating(domain,measure)\">Select\r\n              Rating</button>\r\n\r\n            <button *ngIf=\"measure.preRatingValue && !measure.ratingValue && !measure.measureConditionId\"\r\n              class=\"bg-sky-500 text-blue-950 font-semibold py-1 px-4 border border-sky-500\"\r\n              [disabled]=\"!canCreateRating || isRatingDisabled\"\r\n              (click)=\"selectRating(domain,measure)\">Review Pre-Rating</button>\r\n\r\n            <button *ngIf=\"measure.ratingValue || measure.measureConditionId\"\r\n              [ngClass]=\"{'cursor-not-allowed': studentInfo.isLocked || isRatingDisabled}\"\r\n              [disabled]=\"!canCreateRating || isRatingDisabled\"\r\n              class=\"bg-blue-900 text-blue-50 py-1 px-4 border border-blue-900\"\r\n              (click)=\"selectRating(domain, measure)\">Final\r\n              Rating</button>\r\n          </div>\r\n          <a  *ngIf=\"(measure.ratingValue || measure.measureConditionId) && !studentInfo.isLocked && studentInfo.isPilotEnrollment\"\r\n              class=\"text-drdpblue-300 underline pt-1 cursor-pointer\" (click)=\"editTeacherSurvey(measure)\">\r\n              Edit Survey Response\r\n          </a>\r\n          <a  *ngIf=\"(measure.ratingValue || measure.measureConditionId) && studentInfo.isLocked && studentInfo.isPilotEnrollment\"\r\n              class=\"text-drdpgrey-200 underline pt-1 cursor-pointer\" (click)=\"viewTeacherSurvey(measure)\">\r\n              View Survey Response\r\n          </a>\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter, inject } from '@angular/core';\r\nimport { IRatingDomainDto } from '../../interfaces/irating-domain';\r\nimport { IStudentEnrollmentInfo } from '../../interfaces/istudent-enrollment-info';\r\nimport { IRatingMeasureDto } from '../../interfaces/irating-measure';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { ITeacherSurvey, ITeacherSurveyRequest } from '../../interfaces/iteacher-survey';\r\n@Component({\r\n  selector: 'drdp-rating-card',\r\n  templateUrl: './rating-card.component.html',\r\n  styleUrls: ['./rating-card.component.scss'],\r\n})\r\nexport class RatingCardComponent implements OnInit {\r\n  @Input() studentDomains: IRatingDomainDto[] = [];\r\n  @Input() studentInfo?: IStudentEnrollmentInfo;\r\n  @Input() isRatingDisabled = false;\r\n  @Output() actionClicked = new EventEmitter();\r\n  @Output() editClicked = new EventEmitter();\r\n  @Output() viewClicked = new EventEmitter();\r\n  private permissionService = inject(PermissionService);\r\n  canCreateRating: boolean = this.permissionService.checkPermission(\r\n    Permission.CreateRating\r\n  );\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  selectRating(domain: IRatingDomainDto, measure: IRatingMeasureDto): void {\r\n    if (!measure.ratingValue && !measure.measureConditionId && this.studentInfo?.isPilotEnrollment) {\r\n      const teacherSurveyReq: ITeacherSurveyRequest = {\r\n        cardId: this.studentInfo?.carId,\r\n        measureId: measure.id,\r\n        isStructuredPrompt: measure.isStructuredPrompt\r\n      };\r\n      this.actionClicked.emit({ domain, measure, teacherSurveyReq });\r\n    } else {\r\n      this.actionClicked.emit({ domain, measure });\r\n    }\r\n  }\r\n\r\n  editTeacherSurvey(measure: IRatingMeasureDto): void {\r\n    const teacherSurveyReq: ITeacherSurveyRequest = {\r\n      cardId: this.studentInfo?.carId,\r\n      measureId: measure.id,\r\n      isStructuredPrompt: measure.isStructuredPrompt\r\n    };\r\n    this.editClicked.emit({ teacherSurveyReq });\r\n  }\r\n\r\n  viewTeacherSurvey(measure: IRatingMeasureDto): void {\r\n    const teacherSurveyReq: ITeacherSurveyRequest = {\r\n      cardId: this.studentInfo?.carId,\r\n      measureId: measure.id,\r\n      isStructuredPrompt: measure.isStructuredPrompt\r\n    };\r\n    this.viewClicked.emit({ teacherSurveyReq });\r\n  }\r\n}\r\n","<div class=\"p-5 mt-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-1/2\">\r\n      <drdp-title [title]=\"title\"></drdp-title>\r\n      <div *ngIf=\"hasMeasures\"><a class=\"text-blue-700\" *drdpCheckPermission=\"Permission.CreateRatingSpanish\">Spanish\r\n          version of Input Ratings</a></div>\r\n    </div>\r\n    <div class=\"basis-full\" *ngIf=\"hasMeasures && !isPilotEnrollment\">\r\n      <div *drdpCheckPermission=\"Permission.CreateRating\" class=\"flex justify-end items-end\">\r\n        <a class=\"text-blue-700 py-2 px-4 cursor-pointer\" (click)=\"toggleView()\">\r\n          {{link}}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-student-info [studentInfo]=\"studentInfo\" (actionClicked)=\"onActionClick($event)\" [canLock]=\"canLock\"\r\n    [hasMeasures]=\"hasMeasures\" [isScantron]=\"isScantron\" [isRatingDisabled]=\"isRatingDisabled\"></drdp-student-info>\r\n\r\n  <drdp-container additionClasses=\" min-h-[2rem] mt-4 p-4\" *ngIf=\"!hasMeasures\">\r\n    No Rating View has been chosen for this specific Age/Grade Instrument by your Agency Administrator. If you need\r\n    assistance, please contact WestEd at 1-800-770-6339 or email DRDPOnline@wested.org.\r\n  </drdp-container>\r\n\r\n\r\n  <ng-container *ngIf=\"!isScantron\">\r\n    <drdp-rating-card [studentDomains]=\"studentDomains\" [studentInfo]=\"studentInfo\"\r\n      (actionClicked)=\"selectRatingModal($event)\" (editClicked)=\"openTeacherSurvey($event)\" (viewClicked)=\"viewTeacherSurvey($event)\"  [isRatingDisabled]=\"isRatingDisabled\"></drdp-rating-card>\r\n  </ng-container>\r\n\r\n\r\n  <ng-container *ngIf=\"isScantron\" class=\"mt-4\">\r\n    <drdp-scantron [studentDomains]=\"studentDomains\" [studentInfo]=\"studentInfo\" [carReasons]=\"carReasons\"\r\n      [isKinder]=\"isKinder\" (measureUpdated)=\"processMeasureUpdate($event)\"  [isRatingDisabled]=\"isRatingDisabled\"></drdp-scantron>\r\n  </ng-container>\r\n\r\n</div>\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {  Subscription, switchMap, take, tap } from 'rxjs';\r\nimport { SelectRatingModalComponent } from './components/select-rating-modal/select-rating-modal.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IRatingDomainDto } from './interfaces/irating-domain';\r\nimport { IStudentEnrollmentInfo } from './interfaces/istudent-enrollment-info';\r\nimport { IRatingMeasureDto } from './interfaces/irating-measure';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { AssessmentDateModalComponent } from './components/assessment-date-modal/assessment-date-modal.component';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { AgeGradeInstrumentCode } from '@core/enums/age-grade-instruments';\r\nimport { MeasureCondition } from '@core/enums/measure-condition';\r\nimport { IRatingReason } from './interfaces/irating-reason';\r\nimport { InputRatingAction } from '@core/enums/input-rating-action';\r\nimport { CanComponentDeactivate } from '@core/guards/can-deactivate.guard';\r\nimport { ITeacherSurvey, ITeacherSurveyRequest } from './interfaces/iteacher-survey';\r\nimport { TeacherSurveyModalComponent } from './components/teacher-survey-modal/teacher-survey-modal.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\n@Component({\r\n  selector: 'drdp-input-rating',\r\n  templateUrl: './input-rating.component.html',\r\n  styleUrls: ['./input-rating.component.scss'],\r\n})\r\nexport class InputRatingComponent implements OnInit, OnDestroy, CanComponentDeactivate {\r\n  private subscriptions = new Subscription();\r\n\r\n  id = 0;\r\n  studentInfo!: IStudentEnrollmentInfo;\r\n  studentDomains: IRatingDomainDto[] = [];\r\n  hasMeasures = false;\r\n  canLock = false;\r\n  isKinder = false;\r\n  touchedMeasures: IRatingMeasureDto[] = [];\r\n  carReasons: IRatingReason[] = [];\r\n  previousIndex!: number;\r\n  nextIndex!: number;\r\n  studentIds?: number[];\r\n  isScantron = false;\r\n  title = 'Rating Record';\r\n  link = 'Go to Input Ratings';\r\n  isFormDirty = false;\r\n  isSaving = false;\r\n  isPilotEnrollment = false;\r\n  age: number = 0;\r\n  isRatingDisabled = false;\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  overrideRatings = this.permissionService.checkPermission(\r\n    Permission.OverrideLockedRatings\r\n  );\r\n\r\n  constructor(\r\n    private sanitizer: DomSanitizer,\r\n    public dialog: MatDialog,\r\n    private route: ActivatedRoute,\r\n    private router: Router,\r\n    private studentClassEnrollmentService: StudentClassEnrollmentService,\r\n    private ratingService: RatingService,\r\n    private lookupService: LookupService,\r\n    private toast: ToastService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n\r\n  canDeactivate() {\r\n    return !this.isFormDirty;\r\n  }\r\n\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.add(\r\n      this.route.params.subscribe((params: any) => {\r\n        this.id = Number(params.id);\r\n        this.initializeData();\r\n      })\r\n    );\r\n  }\r\n\r\n  checkFormDisabled() {\r\n    let isEnabled = false;\r\n    // Consolidated check for when isEnabled should be true\r\n    if (this.overrideRatings ||\r\n        (this.studentInfo.isWithdrawn && this.studentInfo.isReferenced && this.studentInfo.hasSameRatingPeriod) ||\r\n        (!this.studentInfo.isWithdrawn && !this.studentInfo.hasCopiedRating))\r\n    {\r\n        isEnabled = true;\r\n    }\r\n    this.isRatingDisabled = !isEnabled;\r\n  }\r\n\r\n  initializeData() {\r\n    this.studentClassEnrollmentService\r\n      .getStudentClassInfo(this.id)\r\n      .pipe(\r\n        take(1),\r\n        switchMap((result: IStudentEnrollmentInfo) => {\r\n          this.studentInfo = result;\r\n          this.checkFormDisabled();\r\n          this.calculateStudentAge();\r\n          this.isPilotEnrollment = this.studentInfo.isPilotEnrollment;\r\n          this.studentInfo.templateUrl =\r\n            result.templateLink == null\r\n              ? null\r\n              : this.sanitizer.bypassSecurityTrustUrl(\r\n                  result.templateLink || ''\r\n                );\r\n\r\n          const templateId = this.studentInfo.isCustom\r\n            ? this.studentInfo.parentTemplateId\r\n            : this.studentInfo.templateId;\r\n\r\n          this.isKinder =\r\n            this.studentInfo.ageGradeInstrumentCode ==\r\n            AgeGradeInstrumentCode.kindergarten;\r\n\r\n          if (this.isKinder) {\r\n            this.getReasons();\r\n          }\r\n\r\n          return this.ratingService.getStudentMeasuresAndRatingsScantron(\r\n            result.templateId,\r\n            templateId,\r\n            this.id,\r\n            result.carId\r\n          );\r\n        }),\r\n        take(1)\r\n      )\r\n      .subscribe((data: IRatingDomainDto[]) => {\r\n        this.setPreviousAndNext(this.id);\r\n        this.studentDomains = data;\r\n        this.hasMeasures = data && data.length > 0;\r\n        this.canLockRatings();\r\n      });\r\n  }\r\n\r\n  calculateStudentAge(): void {\r\n    if (this.studentInfo.dob && this.studentInfo?.enrollmentDate) {\r\n      const dob = new Date(this.studentInfo.dob);\r\n      const enrollmentDate = new Date(this.studentInfo.enrollmentDate);\r\n      let age = enrollmentDate.getFullYear() - dob.getFullYear();\r\n      const month = enrollmentDate.getMonth() - dob.getMonth();\r\n      const day = enrollmentDate.getDate() - dob.getDate();\r\n\r\n      if (month < 0 || (month === 0 && day < 0)) {\r\n        age--;\r\n      }\r\n      this.age = age;\r\n    }\r\n  }\r\n\r\n  setPreviousAndNext(enrollmentId: number) {\r\n    this.studentIds = this.ratingService.getStudentResultIds();\r\n    if (!this.studentIds) {\r\n      this.getStudentResults(enrollmentId);\r\n      return;\r\n    }\r\n    const currentIndex = this.studentIds.indexOf(enrollmentId);\r\n    if (currentIndex > -1) {\r\n      this.previousIndex = currentIndex - 1;\r\n      this.nextIndex = currentIndex + 1;\r\n      this.ratingService.setStudentNextIndex(this.nextIndex);\r\n      this.ratingService.setStudentPreviousIndex(this.previousIndex);\r\n    } else {\r\n      this.getStudentResults(enrollmentId);\r\n    }\r\n  }\r\n\r\n  getStudentResults(enrollmentId: number) {\r\n    const payload = {\r\n      classId: this.studentInfo.classId,\r\n      agencyId: this.studentInfo.agencyId,\r\n      ageGradeInstrumentId: this.studentInfo.ageGradeInstrumentId,\r\n      pageIndex: 0,\r\n      itemsPerPage: 10,\r\n    };\r\n\r\n    this.ratingService.getClassRatings(payload).subscribe((res: any) => {\r\n      if (res) {\r\n        this.ratingService.setStudentResultIds(res.allItemIds);\r\n        this.setPreviousAndNext(enrollmentId);\r\n      }\r\n    });\r\n  }\r\n\r\n  getReasons() {\r\n    this.lookupService\r\n      .getCarReasons()\r\n      .pipe(take(1))\r\n      .subscribe((reasons: IRatingReason[]) => (this.carReasons = reasons));\r\n  }\r\n\r\n  selectRatingModal(data: any) {\r\n    this.selectRating(data.domain, data.measure, data.teacherSurveyReq ?? null);\r\n  }\r\n\r\n  selectRating(domain: IRatingDomainDto, measure: IRatingMeasureDto, teacherSurvey?: ITeacherSurveyRequest): void {\r\n    if (this.studentInfo.isLocked) return;\r\n    measure.templateId = this.studentInfo.isCustom\r\n      ? this.studentInfo.parentTemplateId\r\n      : this.studentInfo.templateId;\r\n    measure.reasons = this.carReasons;\r\n    measure.ageGradeInstrumentId = this.studentInfo.ageGradeInstrumentId;\r\n    measure.ageGradeInstrumentCode = this.studentInfo.ageGradeInstrumentCode;\r\n    measure.enrollmentId = this.id;\r\n    measure.isPilotEnrollment = this.isPilotEnrollment;\r\n    measure.age = this.age;\r\n    const modalRef = this.dialog.open(SelectRatingModalComponent, {\r\n      data: measure,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((result: any) => {\r\n      if (result) {\r\n        this.isFormDirty = true;\r\n        measure.ratingValue =\r\n          result?.measure?.selectedValue ??\r\n          (result.measure.measureConditionId > 0 ? null : measure.ratingValue);\r\n\r\n        if (teacherSurvey && this.isPilotEnrollment) {\r\n          this.openTeacherSurvey(teacherSurvey, domain, measure);\r\n        } else {\r\n          this.saveRating(false, measure);\r\n          this.calculateDomainTotal(domain);\r\n          this.canLockRatings();\r\n        }\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  openTeacherSurvey(data: ITeacherSurveyRequest, domain?: IRatingDomainDto, measure?: IRatingMeasureDto,) {\r\n    const modalRef = this.dialog.open(TeacherSurveyModalComponent, {\r\n      data,\r\n      disableClose: true\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((request: any) => {\r\n      const { payload } = request;\r\n      if (payload) {\r\n        if (domain && measure) {\r\n          this.saveRating(false, measure, payload);\r\n          this.calculateDomainTotal(domain);\r\n          this.canLockRatings();\r\n        } else {\r\n          this.ratingService.saveTeacherSurvey(payload).pipe(\r\n            take(1),\r\n            tap((success: boolean) => {\r\n              if (success) {\r\n                this.toast.success('Teacher Survey successfully saved!');\r\n              }\r\n            })\r\n          ).subscribe();\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  viewTeacherSurvey(data: ITeacherSurveyRequest, domain?: IRatingDomainDto, measure?: IRatingMeasureDto,) {\r\n    data.viewOnly = true;\r\n    const modalRef = this.dialog.open(TeacherSurveyModalComponent, {\r\n      data\r\n    });\r\n  }\r\n\r\n  processMeasureUpdate(event: {\r\n    domain: IRatingDomainDto;\r\n    measure: IRatingMeasureDto;\r\n  }) {\r\n    this.isFormDirty = true;\r\n    const index = this.touchedMeasures.findIndex(\r\n      (item) => item.id === event.measure.id\r\n    );\r\n    if (index !== -1) {\r\n      this.touchedMeasures.splice(index, 1);\r\n    }\r\n    this.touchedMeasures.push(event.measure);\r\n\r\n    this.calculateDomainTotal(event.domain);\r\n    this.canLockRatings();\r\n  }\r\n\r\n  openLockModal() {\r\n    const data = {\r\n      assessmentDate: this.studentInfo.assessmentDate,\r\n      ratingPeriodId: this.studentInfo.ratingPeriodId,\r\n      minDate: this.studentInfo.minRatingPeriodDate,\r\n      maxDate: this.studentInfo.maxRatingPeriodDate,\r\n    };\r\n    const modalRef = this.dialog.open(AssessmentDateModalComponent, {\r\n      data: data,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((result: any) => {\r\n      if (result) {\r\n        this.studentInfo.assessmentDate = result.assessmentDate;\r\n        this.saveRating(true);\r\n      }\r\n    });\r\n  }\r\n\r\n  calculateDomainTotal(domain: IRatingDomainDto) {\r\n    domain.measureRatingCount = domain.measures.filter(\r\n      (m) => !!m.ratingValue || !!m.measureConditionId\r\n    ).length;\r\n    domain.domainTotal = `${domain.measureRatingCount}/${domain.measureTotalCount}`;\r\n  }\r\n\r\n  canLockRatings() {\r\n    this.canLock =\r\n      this.studentDomains.filter(\r\n        (d) => d.measureRatingCount != d.measureTotalCount\r\n      ).length == 0;\r\n  }\r\n\r\n  unlockRating() {\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: `Unlock Rating`,\r\n      message: `Are you sure you want to Unlock the ratings?`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.Confirm,\r\n      showCancel: true,\r\n    };\r\n    const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: event,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res && this.studentInfo.carId) {\r\n        this.ratingService\r\n          .unlockRating(this.studentInfo.carId)\r\n          .pipe(take(1))\r\n          .subscribe((_) => {\r\n            this.studentInfo.isLocked = false;\r\n            this.studentInfo.lockingDate = null;\r\n          });\r\n      }\r\n    });\r\n  }\r\n\r\n  isValidRatings(measure?: IRatingMeasureDto | null) {\r\n    const measures: IRatingMeasureDto[] = measure ? [measure] : [...this.touchedMeasures];\r\n\r\n    if (measures.length > 0) {\r\n      const errorEmerging = measures.find(\r\n        (m) =>\r\n          m.ratingValue == null &&\r\n          m.measureConditionId == MeasureCondition.Emerging\r\n      );\r\n      if (errorEmerging) {\r\n        this.toast.error(\r\n          `A level is required for ${errorEmerging.code} if choosing Emerging. `\r\n        );\r\n        return false;\r\n      }\r\n\r\n      if (this.isKinder) {\r\n        const unrateableMeasure = measures.find(\r\n          (m) =>\r\n            m.childAssessmentRatingReasonId == null &&\r\n            m.measureConditionId == MeasureCondition.Unratable\r\n        );\r\n\r\n        if (unrateableMeasure) {\r\n          this.toast.error(\r\n            `Please choose the reason for measures that are marked as \"unable to rate.\".`\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n\r\n  saveRating(isLocked?: boolean, measure?: IRatingMeasureDto, teacherSurvey?: ITeacherSurvey): void {\r\n    if (this.isSaving) return;\r\n    if (!measure && this.touchedMeasures.length == 0 && !isLocked) {\r\n      this.toast.error(\"There's no ratings to save.\");\r\n      return;\r\n    }\r\n\r\n    if (this.isValidRatings(measure)) {\r\n      this.isSaving = true;\r\n      const measures: IRatingMeasureDto[] = measure ? [measure] : [...this.touchedMeasures];\r\n      const shapedMeasures: any[] = measures.map((m) => ({\r\n        id: m.id,\r\n        ratingValue: m.ratingValue,\r\n        measureConditionId: m.measureConditionId,\r\n        comment: m.comment,\r\n        childAssessmentRatingReasonId: m.childAssessmentRatingReasonId,\r\n      }));\r\n      const request = {\r\n        studentClassEnrollmentId: this.id,\r\n        templateId: this.studentInfo.templateId,\r\n        carId: this.studentInfo.carId,\r\n        measures: shapedMeasures,\r\n        assessmentDate: this.studentInfo.assessmentDate,\r\n        isLocked: isLocked || false,\r\n        measureRevisionId: measure?.measureRevisionId,\r\n        isPilotEnrollment: this.isPilotEnrollment,\r\n        teacherSurvey: teacherSurvey\r\n      };\r\n\r\n      const message = isLocked\r\n        ? 'Ratings successfully saved and locked for this child!'\r\n        : 'Ratings successfully saved for this child!';\r\n      this.ratingService\r\n        .saveChildRatings(request, message)\r\n        .pipe(take(1))\r\n        .subscribe((id) => {\r\n          this.isSaving = false;\r\n          this.isFormDirty = false;\r\n          if (this.id) {\r\n            this.studentInfo.carId = id;\r\n            this.touchedMeasures.length = 0;\r\n            if (isLocked) {\r\n              this.studentInfo.isLocked = true;\r\n              this.studentInfo.lockingDate = new Date();\r\n            }\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  toggleView() {\r\n    this.isScantron = !this.isScantron;\r\n    this.title = this.isScantron ? 'Input Ratings' : 'Rating Record';\r\n    this.link = this.isScantron ? 'Go to Rating Record' : 'Go to Input Ratings';\r\n  }\r\n\r\n  onActionClick(type: InputRatingAction) {\r\n    switch (type) {\r\n      case InputRatingAction.Lock:\r\n        this.lockRating();\r\n        break;\r\n      case InputRatingAction.Save:\r\n        this.saveRating();\r\n        break;\r\n      case InputRatingAction.Unlock:\r\n        this.unlockRating();\r\n        break;\r\n      case InputRatingAction.Next:\r\n        this.goToNextStudent();\r\n        break;\r\n      case InputRatingAction.Previous:\r\n        this.goToPreviousStudent();\r\n        break;\r\n      case InputRatingAction.Print:\r\n        this.confirmPdfPrint();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  lockRating() {\r\n    if (!this.isValidRatings()) return;\r\n    else if (!this.canLock) {\r\n      this.toast.error('Please enter all required ratings before locking.');\r\n      return;\r\n    } else if (!this.studentInfo.isRatingViewLocked) {\r\n      let event = { data: { modalInfo: {} } };\r\n      event.data.modalInfo = {\r\n        title: `Error`,\r\n        message: `Unable to lock Child Rating(s) until Agency has locked its Ratings View.`,\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: Modal.OK,\r\n      };\r\n      this.dialog.open(ConfirmationModalComponent, {\r\n        data: event,\r\n      });\r\n      return;\r\n    }\r\n    this.openLockModal();\r\n  }\r\n\r\n  generatePdf() {\r\n    this.ratingService\r\n      .generatePdf(this.id)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        const file = new Blob([res], { type: 'application/pdf' });\r\n        const fileUrl = URL.createObjectURL(file);\r\n        const link = document.createElement('a');\r\n        link.href = fileUrl;\r\n        let fileName =\r\n          this.studentInfo.studentName + ' ' + this.studentInfo.classroomName;\r\n        link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n        link.click();\r\n      });\r\n  }\r\n\r\n  confirmPdfPrint() {\r\n    if (this.touchedMeasures.length == 0) {\r\n      this.generatePdf();\r\n    } else {\r\n      let modal = { data: { modalInfo: {} } };\r\n      modal.data.modalInfo = {\r\n        title: `Confirmation`,\r\n        message: `There are unsaved ratings.  To include them in your print request, please click cancel and then save the ratings prior to printing. `,\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: 'Print',\r\n        showCancel: true,\r\n      };\r\n\r\n      const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n        data: modal,\r\n      });\r\n\r\n      modalRef.afterClosed().subscribe((res) => {\r\n        if (res) {\r\n          this.generatePdf();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  goToNextStudent() {\r\n    if (this.studentIds) {\r\n      const nextStudent = this.studentIds[this.nextIndex];\r\n      if (nextStudent) {\r\n        this.router.navigateByUrl(`input-ratings/${nextStudent}`);\r\n      } else {\r\n        this.toast.error('No next student available. End of list reached. ');\r\n      }\r\n    }\r\n  }\r\n\r\n  goToPreviousStudent() {\r\n    if (this.studentIds) {\r\n      const prevStudent = this.studentIds[this.previousIndex];\r\n      if (prevStudent) {\r\n        this.router.navigateByUrl(`input-ratings/${prevStudent}`);\r\n      } else {\r\n        this.toast.error(\r\n          'No previous student available. Beginning of list reached. '\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Input Ratings\"></drdp-title>\r\n    <div>\r\n      <p>Always refer to the DRDP when rating the measures. </p>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full mt-4\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\" #ngForm=\"ngForm\">\r\n        <div\r\n          class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\" [required]=\"true\"\r\n              [clear]=\"clearDropdown\" [disabled]=\"!isSuperUser\" [invalid]=\"true\" #stateSelect>\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency (agency)=\"handleChosenAgency($event)\" [stateId]=\"stateId.value\"\r\n              [initialAgencyId]=\"initAgencyId\" [required]=\"true\" [clear]=\"clearDropdown\" [disabled]=\"!isSuperUser\" #agencySelect>\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period [initialRatingPeriodId]=\"ratingPeriodId.value\" (ratingPeriod)=\"handleChosenRatingPeriod($event)\" [agencyId]=\"agencyId.value\"\r\n              [clear]=\"clearDropdown\" [required]=\"true\" [omitFutureRps]=\"true\">\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site [initialSiteId]=\"siteId.value\" (site)=\"handleChosenSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"false\"\r\n              [required]=\"true\" [multiSelectInitVals]=\"false\" [clear]=\"clearDropdown\" #sitesSelect>\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select #classroomSelect [initialValues]=\"classId.value\" label=\"Classroom\" [options]=\"classroomList\" [selectType]=\"select.Class\"\r\n              [required]=\"true\" (onSelected)=\"handleChosenClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-age-grade #ageGroupInstrumentSelect [initialageGradeId]=\"ageGradeInstrumentId.value\" [stateId]=\"stateId.value\" label=\"Age Group/Instrument\"\r\n              [multiSelect]=\"false\" [required]=\"true\" [isPilot]=\"isPilot\" (ageGrade)=\"handleAgeGroupInstrument($event)\" [clear]=\"clearDropdown\">\r\n            </drdp-select-age-grade>\r\n          </div>\r\n          <div class=\"hidden lg:block lg:col-span-3 xl:col-span-3 self-end\"></div>\r\n          <div class=\"flex flex-row justify-evenly lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn type=\"submit\">\r\n                <span class=\"px-2\" (click)=\"search()\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"clear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n    <div class=\"flex justify-end mt-4\">\r\n      <div>\r\n        <drdp-btn *ngIf=\" canLock && canLockRatings\" (click)=\"lockClass()\" color=\"outline\"> <i\r\n            class=\"text-drdpblue-300 text-xl uil uil uil-lock\"></i>Lock</drdp-btn>\r\n\r\n        <drdp-btn *ngIf=\"canUnlock && canUnlockRatings\" (click)=\"unlockClass()\" color=\"outline\"> <i\r\n            class=\"text-drdpblue-300 text-xl uil uil uil-unlock\"></i>\r\n          Unlock</drdp-btn>\r\n      </div>\r\n    </div>\r\n\r\n    <div>\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        (actionIconClicked)=\"onIconClick($event)\">\r\n      </drdp-add-edit-table>\r\n      <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\"\r\n        [pageIndex]=\"pageIndex\" (page)=\"paginateRatings()\">\r\n      </mat-paginator>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\nimport { AssessmentDateModalComponent } from '../components/assessment-date-modal/assessment-date-modal.component';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\n\r\n@Component({\r\n  selector: 'drdp-search-rating',\r\n  templateUrl: './search-rating.component.html',\r\n  styleUrls: ['./search-rating.component.scss'],\r\n})\r\nexport class SearchRatingComponent implements OnInit {\r\n  @Output() formValues = new EventEmitter();\r\n\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageSize: number = 10;\r\n  totalData: number = 0;\r\n  pageIndex: number = 0;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableColumns: any[] = [];\r\n  tableData?: any;\r\n\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ageGroupInstrumentSelect') ageGroupInstrumentSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  searchForm: FormGroup | any;\r\n  classroomList: IClassroomAssignment[] = [];\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  select = SelectType;\r\n  clearDropdown = false;\r\n  isSuperUser = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  canLock = false;\r\n  canUnlock = false;\r\n  isAgencyLocked = true;\r\n  classAssessmentDate: any = null;\r\n  minRatingPeriodDate = new Date();\r\n  maxRatingPeriodDate = new Date();\r\n  isPilot: boolean = false;\r\n  previousIsPilot: boolean = false;\r\n\r\n  canLockRatings = this.permissionService.checkPermission(\r\n    Permission.LockRatings\r\n  );\r\n\r\n  canUnlockRatings = this.permissionService.checkPermission(\r\n    Permission.UnlockRatings\r\n  );\r\n\r\n\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n  get siteId() {\r\n    return this.searchForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.searchForm.get('ratingPeriodId');\r\n  }\r\n  get classId() {\r\n    return this.searchForm.get('classId');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.searchForm.get('ageGradeInstrumentId');\r\n  }\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private classService: ClassService,\r\n    private lookup: LookupService,\r\n    private toastService: ToastService,\r\n    private fb: FormBuilder,\r\n    private router: Router,\r\n    private dialog: MatDialog,\r\n    private permissionService: PermissionService,\r\n    private ratingService: RatingService,\r\n    private agencyService: AgencyService,\r\n    private route: ActivatedRoute\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.initializeForm();\r\n\r\n    if (this.user.agencyId) {\r\n      this.getRatingPeriod();\r\n    }\r\n\r\n    const classId = this.route.snapshot.paramMap.get('classId');\r\n    const instrumentId = this.route.snapshot.paramMap.get('instrumentId');\r\n\r\n    if (classId != null && instrumentId != null) {\r\n      this.classService.getStudentsByClass(+classId).subscribe( res => {\r\n        this.initStateId = res.classroom?.site?.stateId;\r\n        this.initAgencyId = res.classroom?.agencyId;\r\n\r\n        this.handleState(res.classroom?.site?.stateId);\r\n        this.handleChosenAgency(res.classroom?.agencyId);\r\n        this.handleChosenRatingPeriod(res.ratingPeriodId);\r\n        this.handleChosenSite(res.siteId);\r\n        this.handleChosenClassroom(res.id);\r\n        this.handleAgeGroupInstrument(instrumentId);\r\n        this.isPilot = res.classroom?.isPilot;\r\n        this.search()\r\n      });\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null, [Validators.required]],\r\n      ratingPeriodId: [null, [Validators.required]],\r\n      siteId: [null, [Validators.required]],\r\n      classId: [null, [Validators.required]],\r\n      ageGradeInstrumentId: [null, [Validators.required]],\r\n    });\r\n  }\r\n\r\n  getRatingPeriod(): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(this.agencyId.value)\r\n      .pipe(take(1))\r\n      .subscribe((req) => {\r\n        this.ratingPeriodList = req;\r\n      });\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state instanceof Object ? state?.id : state);\r\n    this.agencyId.setValue(null);\r\n    this.ageGradeInstrumentId.setValue(null);\r\n    this.classId.setValue(null);\r\n    this.isPilot = false;\r\n    this.formValues.emit(this.searchForm.value);\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    const selectedAgencyId = agency instanceof Object ? agency?.id : agency;\r\n    if (selectedAgencyId != this.agencyId.value) {\r\n      this.agencyId.setValue(selectedAgencyId);\r\n      this.classId.setValue(null);\r\n      this.ratingPeriodId.setValue(null);\r\n      this.classroomList = [];\r\n      if (agency) {\r\n        this.getRatingPeriod();\r\n      } else {\r\n        this.ratingPeriodList = [];\r\n        this.classroomList = [];\r\n      }\r\n\r\n      this.formValues.emit(this.searchForm.value);\r\n    }\r\n  }\r\n\r\n  handleChosenSite(site: any): void {\r\n    this.siteId.setValue(site instanceof Object ? site?.id ?? site[0]?.id : site);\r\n    this.updateClassroomDropdown();\r\n    this.formValues.emit(this.searchForm.value);\r\n  }\r\n\r\n  handleChosenClassroom(classroom: any): void {\r\n    this.classId.setValue(classroom instanceof Object ? classroom?.id : classroom);\r\n    this.isPilot = this.classroomList.find(c => c.id == this.classId.value)?.isPilot ?? false;\r\n    if (this.previousIsPilot !== this.isPilot) {\r\n      this.ageGradeInstrumentId.setValue(null);\r\n      this.ageGroupInstrumentSelect?.clearSelected();\r\n    }\r\n    this.previousIsPilot = this.isPilot;\r\n    this.formValues.emit(this.searchForm.value);\r\n  }\r\n\r\n  handleAgeGroupInstrument(ageGroupInstrument: any): void {\r\n    this.ageGradeInstrumentId.setValue(ageGroupInstrument instanceof Object ? ageGroupInstrument?.id : ageGroupInstrument);\r\n  }\r\n\r\n  handleChosenRatingPeriod(ratingPeriod: any): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod instanceof Object ? ratingPeriod?.id : ratingPeriod);\r\n    this.updateClassroomDropdown();\r\n    this.formValues.emit(this.searchForm.value);\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    this.classroomList = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteId.value ?? null;\r\n    payload.siteIds = this.siteId.value ? [this.siteId.value] : null;\r\n\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? '';\r\n    payload.itemsPerPage = 10;\r\n    payload.useClassId = true;\r\n\r\n    if (payload.siteIds?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id)\r\n          );\r\n        });\r\n    }\r\n  }\r\n\r\n  search() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.paginateRatings(true);\r\n  }\r\n\r\n  paginateRatings(resetPage?: boolean) {\r\n    const payload = {\r\n      classId: this.classId.value,\r\n      agencyId: this.agencyId.value,\r\n      ageGradeInstrumentId: this.ageGradeInstrumentId.value,\r\n      pageIndex: resetPage ? 0 : this.paginator.pageIndex + 1,\r\n      itemsPerPage: resetPage ? 10 : this.paginator.pageSize,\r\n    };\r\n\r\n    this.ratingService.getClassRatings(payload).subscribe((res: any) => {\r\n      if (res) {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.ratingService.setStudentResultIds(res.allItemIds);\r\n        this.checkLockAndUnlock(res.items);\r\n        this.initializeTableData(res);\r\n        if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n      }\r\n    });\r\n  }\r\n\r\n  checkLockAndUnlock(data: any[]) {\r\n    if (data.length > 0) {\r\n      const firstRecord = data[0];\r\n      this.canLock =\r\n        data.every((d) => d.totalDomainCount == d.totalDomainRatings) &&\r\n        data.some((d) => !d.isLocked);\r\n      this.canUnlock = !this.canLock && data.every((d) => d.isLocked);\r\n      this.isAgencyLocked = firstRecord.isRatingViewLocked;\r\n      this.minRatingPeriodDate = new Date(firstRecord.minStartDate);\r\n      this.maxRatingPeriodDate = new Date(firstRecord.maxEndDate);\r\n\r\n      if (this.canLock) {\r\n        const withAssessmentDate = data.find((d) => d.assessmentDate);\r\n        if (withAssessmentDate)\r\n          this.classAssessmentDate = new Date(\r\n            withAssessmentDate.assessmentDate\r\n          );\r\n      }\r\n    }\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.initializeTableColumns(res.items);\r\n    this.dataSource = new MatTableDataSource(res.items);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.items;\r\n  }\r\n\r\n  initializeTableColumns(data: any[]) {\r\n    let domainRows: any[] = data.length > 0 ? data[0].displayDomains : [];\r\n\r\n    this.tableColumns = [\r\n      {\r\n        columnDef: 'enrollmentId',\r\n        header: 'Ratings',\r\n        icon: 'file-alt',\r\n        type: TableColumnType.actionIcon,\r\n        action: 'view-rating',\r\n        colorClass: 'text-drdpblue-300',\r\n        cursorClass: 'cursor-pointer',\r\n      },\r\n      {\r\n        columnDef: 'studentName',\r\n        header: 'Child Name',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'studentId',\r\n        header: 'Child ID',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n    ];\r\n\r\n    domainRows.forEach((domain: string) => {\r\n      const measureCode = domain\r\n        .replace('-', '')\r\n        .replace(':', '')\r\n        .toLowerCase();\r\n      this.tableColumns.push({\r\n        columnDef: measureCode,\r\n        header: domain,\r\n        type: TableColumnType.text,\r\n      });\r\n    });\r\n\r\n    this.tableColumns.push(\r\n      {\r\n        columnDef: 'assessmentDate',\r\n        header: 'Assessment Date',\r\n        type: TableColumnType.date,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'formattedLockingDate',\r\n        header: 'Lock Date',\r\n        type: TableColumnType.date,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'ratingCompletion',\r\n        header: 'Rating Completion',\r\n        type: TableColumnType.text,\r\n      },\r\n      {\r\n        columnDef: 'isLocked',\r\n        header: 'Locking Status',\r\n        type: TableColumnType.boolIcon,\r\n        truthyClass: 'text-drdpGreen-300',\r\n        truthyIconUrl: 'assets/images/misc/lock-alt.svg',\r\n        falsyClass: 'text-drdpgrey-200',\r\n        falsyIconUrl: 'assets/images/misc/padlock.svg',\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'teacherName',\r\n        header: 'Teacher',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'siteName',\r\n        header: 'Site',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      }\r\n    );\r\n  }\r\n\r\n\r\n  onIconClick(event: any): void {\r\n    if (event.action == 'view-rating') {\r\n      this.router.navigate([`input-ratings/${event.data.enrollmentId}`]);\r\n    }\r\n  }\r\n\r\n  clear(): void {\r\n    this.classroomSelect?.clear();\r\n    this.ratingPeriodSelect?.clear();\r\n    this.isPilot = false;\r\n    this.clearDropdown = true;\r\n    this.classroomList = [];\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.initStateId = 0;\r\n      this.stateId.setValue(null);\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(null);\r\n    }\r\n  }\r\n\r\n  lockClass() {\r\n    if (!this.isAgencyLocked) {\r\n      let event = { data: { modalInfo: {} } };\r\n      event.data.modalInfo = {\r\n        title: `Error`,\r\n        message: `Unable to lock Child Rating(s) until Agency has locked its Ratings View.`,\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: Modal.OK,\r\n      };\r\n      this.dialog.open(ConfirmationModalComponent, {\r\n        data: event,\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (this.classId.value && this.stateId.value) {\r\n      const data = {\r\n        assessmentDate: this.classAssessmentDate,\r\n        minDate: this.minRatingPeriodDate,\r\n        maxDate: this.maxRatingPeriodDate,\r\n      };\r\n      const modalRef = this.dialog.open(AssessmentDateModalComponent, {\r\n        data: data,\r\n      });\r\n\r\n      modalRef.afterClosed().subscribe((result: any) => {\r\n        if (result) {\r\n          const payload = {\r\n            assessmentDate: result.assessmentDate,\r\n            ageGradeInstrumentId: this.ageGradeInstrumentId.value,\r\n            classId: this.classId.value,\r\n            stateId: this.stateId.value\r\n          };\r\n          this.ratingService\r\n            .lockClass(payload)\r\n            .pipe(take(1))\r\n            .subscribe((_) => {\r\n              this.paginateRatings(true);\r\n            });\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  unlockClass() {\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: `Unlock Rating`,\r\n      message: `Are you sure you want to Unlock the ratings?`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.Confirm,\r\n      showCancel: true,\r\n    };\r\n    const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: event,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res && this.classId.value) {\r\n        const payload = {\r\n          ageGradeInstrumentId: this.ageGradeInstrumentId.value,\r\n          classId: this.classId.value,\r\n        };\r\n\r\n        this.ratingService\r\n          .unlockClass(payload)\r\n          .pipe(take(1))\r\n          .subscribe((_) => {\r\n            this.paginateRatings(true);\r\n          });\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { IPortfolioClassesRequest } from '@core/interfaces/iportfolio';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio',\r\n  templateUrl: './portfolio.component.html',\r\n  styleUrls: ['./portfolio.component.scss'],\r\n})\r\nexport class PortfolioComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ageGradeInstrumentSelect') ageGradeInstrumentSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  pageIndex: number = 0;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n    { columnDef: 'ratingPeriodName', header: 'Rating Period', type: 'text' },\r\n    { columnDef: 'classroomName', header: 'Classroom', type: 'text' },\r\n    { columnDef: 'View Students', header: 'View Students', type: 'view' },\r\n    { columnDef: 'classEvidence', header: 'Evidence By Class', type: 'icon', icon: 'abacus', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' },\r\n  ];\r\n\r\n  user = this.auth.getCurrentUser();\r\n  selectForm: FormGroup | any;\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  classroomList: IClassroomAssignment[] = [];\r\n  ageGroupInstrumentList: IAgeGradeInstrument[] = [];\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  select = SelectType;\r\n  clearState = false;\r\n  clearAgency = false;\r\n  clearSite = false;\r\n  clearRatingPeriod = false;\r\n  cleardropDown = false;\r\n  currentSchoolYear = 0;\r\n  isPilot = false;\r\n  previousIsPilot: boolean = false;\r\n  isSuperUser: boolean = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  searchValues = {\r\n    ratingPeriodName: '',\r\n    classroomName: '',\r\n    ageGradeInstrumentId: 0,\r\n  };\r\n\r\n  get stateId() {\r\n    return this.selectForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.selectForm.get('agencyId');\r\n  }\r\n  get siteId() {\r\n    return this.selectForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.selectForm.get('ratingPeriodId');\r\n  }\r\n  get classroomId() {\r\n    return this.selectForm.get('classroomId');\r\n  }\r\n  get ageGroupInstrumentId() {\r\n    return this.selectForm.get('ageGroupInstrumentId');\r\n  }\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private fb: FormBuilder,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private classService: ClassService,\r\n    private lookup: LookupService,\r\n    private portfolioService: PortfolioService,\r\n    private router: Router,\r\n    private toast: ToastService,\r\n    private permissionService: PermissionService,\r\n    private schoolyearService: LookupService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.initializeForm();\r\n    this.schoolyearService\r\n      .getCurrentSchoolYear()\r\n      .pipe(take(1))\r\n      .subscribe((year) => {\r\n        this.currentSchoolYear = year.id;\r\n      });\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.selectForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null, [Validators.required]],\r\n      ratingPeriodId: [null, [Validators.required]],\r\n      siteId: [null, [Validators.required]],\r\n      classroomId: [null],\r\n      ageGroupInstrumentId: [null, [Validators.required]],\r\n    });\r\n\r\n  }\r\n\r\n  paginateTable(event: any) {\r\n    this.pageIndex = event.pageIndex;\r\n    this.pageSize = event.pageSize;\r\n    this.searchClasses();\r\n  }\r\n\r\n  viewStudents(event: any) {\r\n    if (event && event.data)\r\n      this.router.navigate([\r\n        `/portfolio/class/${event.data.classId}/ageGradeInstrument/${this.ageGroupInstrumentId.value}`,\r\n      ]);\r\n  }\r\n\r\n  viewClass(event: any): void {\r\n    if (event && event.data) {\r\n      this.searchValues.classroomName = event.data.classroomName;\r\n      this.router.navigate(\r\n        [`/portfolio/class-evidence/${event.data.classId}`],\r\n        { state: { searchValues: this.searchValues }}\r\n      );\r\n    }\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    this.classroomList = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteId.value ?? null;\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? '';\r\n    payload.itemsPerPage = 10;\r\n    payload.useClassId = false;\r\n\r\n    if (this.siteId.value?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id)\r\n          );\r\n        });\r\n    } else {\r\n      this.classroomList = [];\r\n    }\r\n  }\r\n\r\n  getRatingPeriod(agencyId: number): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(agencyId)\r\n      .pipe(take(1))\r\n      .subscribe((req) => {\r\n        this.ratingPeriodList = req;\r\n      });\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n    this.ageGroupInstrumentId.setValue(null);\r\n    this.isPilot = false;\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.classroomId.setValue(null);\r\n    if (this.isPilot) {\r\n      this.ageGroupInstrumentId.setValue(null);\r\n      this.ageGradeInstrumentSelect?.clearSelected();\r\n      this.isPilot = false;\r\n    }\r\n    this.classroomList = [];\r\n    if (agency) this.getRatingPeriod(agency.id);\r\n    else this.ratingPeriodList = [];\r\n  }\r\n\r\n  handleChosenSite(site: any): void {\r\n    if(site) {\r\n      this.siteId.setValue([site.id]);\r\n    } else {\r\n      this.siteId.setValue(null);\r\n    }\r\n\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleChosenClassroom(classroom: any): void {\r\n    this.classroomId.setValue(classroom?.id);\r\n    this.isPilot = this.classroomList.find((x) => x.id === classroom?.id)?.isPilot ?? false;\r\n    if (this.previousIsPilot !== this.isPilot) {\r\n      this.ageGroupInstrumentId.setValue(null);\r\n      this.ageGradeInstrumentSelect?.clearSelected();\r\n    }\r\n    this.previousIsPilot = this.isPilot;\r\n  }\r\n\r\n  handleChosenRatingPeriod(ratingPeriod: any): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n    this.updateClassroomDropdown();\r\n    this.searchValues.ratingPeriodName = ratingPeriod?.ratingPeriodName;\r\n  }\r\n\r\n  handleAgeGroupInstrument(ageGroupInstrument: any): void {\r\n    this.ageGroupInstrumentId.setValue(ageGroupInstrument?.id);\r\n    this.searchValues.ageGradeInstrumentId = ageGroupInstrument?.id;\r\n  }\r\n\r\n  clear() {\r\n    this.classroomSelect?.clearSelected();\r\n    this.ageGradeInstrumentSelect?.clearSelected();\r\n    this.sitesSelect?.clearSelected();\r\n    this.cleardropDown = true;\r\n    this.classroomList = [];\r\n    this.ratingPeriodId.setValue(null);\r\n    this.isPilot = false;\r\n    this.clearTable();\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.initStateId = 0;\r\n      this.stateId.setValue(null);\r\n      this.clearState = true;\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.initAgencyId = null;\r\n      this.agencyId.setValue(null);\r\n      this.clearAgency = true;\r\n      this.ratingPeriodList = [];\r\n    }\r\n\r\n  }\r\n\r\n  initializeTableData(data: any): void {\r\n    data.items = data.items.map((item: any) => ({\r\n      ...item,\r\n      displayIcons: setIconDisplayObject(this.tableColumns, item)\r\n    }));\r\n    this.dataSource = new MatTableDataSource(data.items);\r\n    this.tableData = data.items;\r\n    this.totalData = data.totalData;\r\n  }\r\n\r\n  clearTable(): void {\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n  }\r\n\r\n  submit() {\r\n    if (!this.selectForm.valid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.searchClasses();\r\n  }\r\n\r\n  searchClasses() {\r\n    const payload: IPortfolioClassesRequest = {\r\n      stateId: this.stateId.value,\r\n      ageGradeInstrumentId: this.ageGroupInstrumentId.value,\r\n      classRoomId: this.classroomId.value,\r\n      ratingPeriodId: this.ratingPeriodId.value,\r\n      siteId: this.siteId.value[0] || null,\r\n      pageIndex: this.pageIndex,\r\n      itemsPerPage: this.pageSize,\r\n    };\r\n    this.portfolioService\r\n      .searchClasses(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        }\r\n      });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex flex-row\">\r\n        <div class=\"basis-1/2\">\r\n            <drdp-title title=\"Portfolio\"></drdp-title>\r\n        </div>\r\n    </div>\r\n\r\n    <drdp-container>\r\n        <drdp-container color=\"lightBlue\">\r\n            <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n                <ng-container class=\"contents\">\r\n                    <div class=\"col-span-1 z-50\">\r\n                        <drdp-select-state #stateSelect [initialStateId]=\"initStateId\" (state)=\"handleState($event)\"\r\n                            [required]=\"true\" [clear]=\"cleardropDown\" [disabled]=\"!isSuperUser\">\r\n                        </drdp-select-state>\r\n                    </div>\r\n                    <div class=\"col-span-1 z-50\">\r\n                        <drdp-select-agency #agencySelect (agency)=\"handleChosenAgency($event)\" [stateId]=\"stateId.value\"\r\n                            [initialAgencyId]=\"initAgencyId\" [required]=\"true\" [clear]=\"cleardropDown\"\r\n                            [disabled]=\"!isSuperUser\">\r\n                        </drdp-select-agency>\r\n                    </div>\r\n                    <div class=\"col-span-1 z-50\">\r\n                        <drdp-select-site #sitesSelect (site)=\"handleChosenSite($event)\" [agencyId]=\"agencyId.value\"\r\n                            [multiSelect]=\"false\" [multiSelectInitVals]=\"false\" [required]=\"true\" [clear]=\"cleardropDown\">\r\n                        </drdp-select-site>\r\n                    </div>\r\n                    <div class=\"col-span-1 z-50\">\r\n                        <drdp-select-rating-period (ratingPeriod)=\"handleChosenRatingPeriod($event)\"\r\n                                   [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n                                   [agencyId]=\"agencyId.value\"\r\n                                   [required]=\"true\"\r\n                                   [clear]=\"cleardropDown\">\r\n        </drdp-select-rating-period>\r\n                    </div>\r\n                    <div class=\"col-span-1 z-40\">\r\n                        <drdp-filter-select #classroomSelect label=\"Classroom\" [options]=\"classroomList\"\r\n                            [selectType]=\"select.Class\" (onSelected)=\"handleChosenClassroom($event)\">\r\n                        </drdp-filter-select>\r\n                    </div>\r\n                    <div class=\"col-span-1 z-40\">\r\n                        <drdp-select-age-grade #ageGroupInstrumentSelect [initialageGradeId]=\"ageGroupInstrumentId.value\" [stateId]=\"stateId.value\" label=\"Age Group/Instrument\"\r\n                            [multiSelect]=\"false\" [required]=\"true\" [isPilot]=\"isPilot\" (ageGrade)=\"handleAgeGroupInstrument($event)\" [clear]=\"cleardropDown\">\r\n                        </drdp-select-age-grade>\r\n                    </div>\r\n                    <div class=\"col-span-1 md:col-start-5 self-end justify-center md:justify-self-end\">\r\n                        <drdp-btn type=\"submit\" (click)=\"submit()\" class=\"mr-2\">Search</drdp-btn>\r\n                        <drdp-btn type=\"button\" (click)=\"clear()\" color=\"outline\">Clear</drdp-btn>\r\n                    </div>\r\n                </ng-container>\r\n            </div>\r\n        </drdp-container>\r\n        <div class=\"p-5 w-full\">\r\n            <drdp-add-edit-table viewIcon=\"uil uil-file-alt text-drdpblue-300\" [dataSource]=\"dataSource\" [tableData]=\"tableData\" \r\n                [columns]=\"tableColumns\" (viewActionItem)=\"viewStudents($event)\" (iconActionItem)=\"viewClass($event)\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n    </drdp-container>\r\n</div>\r\n<mat-paginator class=\"pb-6\" [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable($event)\">\r\n</mat-paginator>\r\n","<div class=\"w-max\">\r\n  <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">Previously Saved Evidence</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n      <div class=\"mt-2\">\r\n        Evidence for the below child/children is saved in the Evidence Library. <br>\r\n        To view evidence saved, click on the child's name below. <br>\r\n        Or if you would like to add new evidence, click on the Add New Evidence button below.\r\n      </div>\r\n      <ul class=\"student-list\">\r\n        <li *ngFor=\"let student of studentList\" (click)=\"redirectToEvidence(student)\">\r\n          <a>{{student.name}}</a>\r\n        </li>\r\n      </ul>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n      <drdp-btn type=\"submit\" mat-dialog-close color=\"outline\" class=\"mr-2\">Cancel</drdp-btn>\r\n      <drdp-btn type=\"button\" (click)=\"goToNextPage()\">Add New Evidence</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { IPortfolioStudentInformation } from '@core/interfaces/iportfolio';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n@Component({\r\n  selector: 'app-future-evidence-student',\r\n  templateUrl: './future-evidence-student.component.html',\r\n  styleUrls: ['./future-evidence-student.component.css']\r\n})\r\nexport class FutureEvidenceStudentComponent implements OnInit {\r\n  studentList: IPortfolioStudentInformation[] = [];\r\n  constructor(@Inject(MAT_DIALOG_DATA) public data: any, private router: Router, private dialogRef: MatDialogRef<FutureEvidenceStudentComponent>) { }\r\n\r\n  ngOnInit() {\r\n    this.studentList = this.data.studentList;\r\n  }\r\n\r\n  redirectToEvidence(student: IPortfolioStudentInformation) {\r\n    this.router.navigate([\r\n      `portfolio/review-evidence/future-evidence/${student.futureEvidenceId}/student/${student.studentId}/class/${student.classId}/age-grade-instrument/${student.ageGradeInstrumentId}`,\r\n    ]);\r\n    this.dialogRef.close();\r\n  }\r\n\r\n  goToNextPage() {\r\n    this.dialogRef.close(true);\r\n  }\r\n\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { IAvailableEvidence, IEvidenceRequest } from '@core/interfaces/iportfolio';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-request-evidence',\r\n  templateUrl: './request-evidence.component.html',\r\n  styleUrls: ['./request-evidence.component.scss']\r\n})\r\nexport class RequestEvidenceComponent {\r\n  isProcessing: boolean = false;\r\n  comment: string | undefined = undefined;\r\n\r\n  constructor(\r\n    private portfolioService: PortfolioService,\r\n    public dialogRef: MatDialogRef<RequestEvidenceComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: IAvailableEvidence\r\n  ) { }\r\n\r\n  onSubmit(): void {\r\n    if (!this.editData) return;\r\n\r\n    this.isProcessing = true;\r\n    const payload: IEvidenceRequest  = {\r\n      fromStudentClassEnrollmentID: this.editData.fromStudentClassEnrollmentID,\r\n      toStudentClassEnrollmentID: this.editData.toStudentClassEnrollmentID ?? 0,\r\n      studentId: this.editData.studentId ?? 0,\r\n      comment: this.comment\r\n    };\r\n\r\n    const successMessage = 'Request has been sent.';\r\n    this.portfolioService.processEvidenceRequest(payload, successMessage)\r\n      .pipe(take(1)).subscribe((res: boolean) => { \r\n        if (res) {\r\n          this.isProcessing = false; \r\n          this.dialogRef.close();\r\n        }\r\n      });\r\n  }\r\n}\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Requesting Evidence</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <div class=\"grid grid-cols-2 gap-4 gap-x-12 p-3 gridCust\">\r\n      <div>\r\n        <label class=\"font-normal mb-2\" for=\"childName\">Child Name</label>\r\n        <span>{{ editData?.studentName }}</span>\r\n      </div>\r\n      <div>\r\n        <label class=\"font-normal mb-2\" for=\"ratingPeriod\">Rating Period</label>\r\n        <span>{{ editData?.ratingPeriodName }}</span>\r\n      </div>\r\n      <div>\r\n        <label class=\"font-normal mb-2\" for=\"site\">Current Site</label>\r\n        <span>{{ editData?.siteName }}</span>\r\n      </div>\r\n      <div>\r\n        <label class=\"font-normal mb-2\" for=\"classroom\">Current Classroom</label>\r\n        <span>{{ editData?.classroomName }}</span>\r\n      </div>\r\n      <div class=\"col-span-2\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"block font-normal mb-2\" for=\"comment\">Comment</label>\r\n          <input matInput placeholder=\"Comment\" type=\"text\" maxLength=\"500\" [(ngModel)]=\"comment\"/>\r\n        </mat-form-field>\r\n      </div>\r\n      <div mat-dialog-actions class=\"col-span-2 flex justify-end\">\r\n        <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n        <drdp-btn mat-button cdkFocusInitial class=\"ml-3\" (click)=\"onSubmit()\" [disabled]=\"isProcessing\">\r\n          Request\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>","<div>\r\n    <div class=\"flex flex-row\">\r\n        <div>\r\n            <h2 class=\"mb-2 mt-0 text-3xl leading-tight\">Viewing Children in: <b>{{classroomName}}</b></h2>\r\n            <h2 class=\"mb-2 mt-0 text-2xl leading-tight\">Rating Period: <b>{{ratingPeriodName}}</b></h2>\r\n        </div>\r\n    </div>\r\n    <drdp-container>\r\n        <div class=\"p-5 w-full\">\r\n            <drdp-add-edit-table (toggleSwitchActionItem)=\"handleSelectedChild($event)\"\r\n                                 (viewActionItem)=\"reviewEvidence($event)\"\r\n                                  viewIcon=\"uil uil-notes text-drdpblue-300\"\r\n                                  [dataSource]=\"dataSource\"\r\n                                  [tableData]=\"tableData\"\r\n                                  [columns]=\"tableColumns\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n\r\n        <div class=\"border border-drdpred-200 rounded\">\r\n            <p class=\"text-drdpred-200 p-2\">\r\n                *If Child's Age/Grade Instrument changes after evidence has been saved in current enrollment Portfolio, \r\n                evidence will be hidden.  If needed, please save the child's Portfolio evidence prior to changing their \r\n                demographic Age/Grade Instrument.\r\n            </p>\r\n        </div>\r\n        <div *drdpCheckPermission=\"permission.EditObservations\" class=\"mt-10 mb-2 flex justify-end\">\r\n            <drdp-btn class=\"pr-4\" color=\"cancel\" type=\"button\" (click)=\"onCancel()\">\r\n                Cancel\r\n            </drdp-btn>\r\n            <drdp-btn type=\"submit\" (click)=\"onNextButton()\" cdkFocusInitial>\r\n                Next\r\n            </drdp-btn>\r\n        </div>\r\n\r\n    </drdp-container>\r\n\r\n</div>\r\n<mat-paginator class=\"pb-6\" [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable($event)\">\r\n</mat-paginator>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { take} from 'rxjs';\r\nimport {\r\n  IAvailableEvidence,\r\n  IPortfolioAddEvidenceParams,\r\n  IPortfolioClassResponse,\r\n  IPortfolioClassStudentsRequest,\r\n  IPortfolioStudentInformation,\r\n} from '@core/interfaces/iportfolio';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FutureEvidenceStudentComponent } from './modals/future-evidence-student/future-evidence-student.component';\r\nimport { RequestEvidenceComponent } from './request-evidence/request-evidence.component';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-class',\r\n  templateUrl: './portfolio-class.component.html',\r\n  styleUrls: ['./portfolio-class.component.scss'],\r\n})\r\nexport class PortfolioClassComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  pageIndex: number = 0;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text',  checkClass: ''},\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text', checkClass: '' },\r\n    {\r\n      columnDef: 'Review Current Evidence',\r\n      header: 'Review Current Evidence',\r\n      type: 'view',\r\n      checkClass:'',\r\n      tooltip: 'Review Current Evidence is evidence that has been assigned to the rating period.'\r\n    }\r\n  ];\r\n\r\n  classroomName: string = '';\r\n  ratingPeriodName: string = '';\r\n  siteName: string = '';\r\n  classId: number = 0;\r\n  ageGradeId: number = 0;\r\n  portfolioAddEvidenceParams!: IPortfolioAddEvidenceParams;\r\n  isPilot: boolean = false;\r\n  ratingPeriodId: number = 0;\r\n\r\n  public get permission() {return Permission }\r\n  constructor(\r\n    private portfolioService: PortfolioService,\r\n    private route: ActivatedRoute,\r\n    private router: Router,\r\n    private toast: ToastService,\r\n    private permissionSerive: PermissionService,\r\n    public modal: MatDialog\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    const canAddEvidence = this.permissionSerive.checkPermission(Permission.EditObservations);\r\n\r\n    if(canAddEvidence) {\r\n      this.tableColumns.unshift(\r\n        {\r\n          columnDef: 'select',\r\n          header: 'Add Evidence',\r\n          type: 'checkBox',\r\n          checkClass: 'checkbox'\r\n        }\r\n      )\r\n    }\r\n\r\n    this.dataSource.paginator = this.paginator;\r\n    this.initPage();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n\r\n  initPage(): void {\r\n    const classId = this.route.snapshot.paramMap.get('classId');\r\n    const ageGradeId = this.route.snapshot.paramMap.get('ageGradeId');\r\n\r\n    if (!classId || !ageGradeId) return;\r\n\r\n    this.classId = +classId;\r\n    this.ageGradeId = +ageGradeId;\r\n\r\n    this.portfolioService\r\n      .getPortfolioClass(this.classId, this.ageGradeId)\r\n      .pipe(take(1))\r\n      .subscribe((res: IPortfolioClassResponse) => {\r\n        if (res) {\r\n          this.classroomName = res.classroomName;\r\n          this.ratingPeriodName = res.ratingPeriodName;\r\n          this.siteName = res.siteName;\r\n          this.ratingPeriodId = res.ratingPeriodId;\r\n          if (!res.isPilot) {\r\n            this.tableColumns.push({\r\n              columnDef: 'Review Future Evidence',\r\n              header: 'Review Future Evidence',\r\n              type: 'view',\r\n              checkClass: '',\r\n              tooltip: 'Review Future Evidence is evidence that has been assigned to the next rating period.'\r\n            });\r\n          }\r\n          this.portfolioAddEvidenceParams = {\r\n            isPilot: res.isPilot,\r\n            ageGradeInstrumentId: this.ageGradeId,\r\n            ratingPeriodName: this.ratingPeriodName,\r\n            classroomName: this.classroomName,\r\n            ageGradeInstrumentName: res.ageGradeInstrumentName,\r\n            studentsInformation: [],\r\n          };\r\n          this.isPilot = res.isPilot ?? false;\r\n          this.getClassStudents();\r\n        } else {\r\n          this.toast.error('Error when trying to get class details');\r\n        }\r\n      });\r\n  }\r\n\r\n  paginateTable(event: any) {\r\n    this.pageIndex = event.pageIndex;\r\n    this.pageSize = event.pageSize;\r\n    this.getClassStudents();\r\n  }\r\n\r\n  initializeTableData(data: any): void {\r\n    this.dataSource = new MatTableDataSource(data.items);\r\n    this.tableData = data.items;\r\n    this.totalData = data.totalData;\r\n  }\r\n\r\n  getClassStudents(): void {\r\n    const payload: IPortfolioClassStudentsRequest = {\r\n      classId: this.classId,\r\n      ageGradeInstrumentId: this.ageGradeId,\r\n      pageIndex: this.pageIndex,\r\n      itemsPerPage: this.pageSize,\r\n    };\r\n\r\n    this.portfolioService\r\n      .getPortfolioClassStudents(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: IPortfolioClassResponse) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        } else {\r\n          this.toast.error('Error when trying to get class students');\r\n        }\r\n      });\r\n  }\r\n\r\n  handleSelectedChild(event: any): void {\r\n    const indexToRemove =\r\n      this.portfolioAddEvidenceParams.studentsInformation.findIndex(\r\n        (obj) =>\r\n          obj.studentClassEnrollmentId === event.data.studentClassEnrollmentId\r\n      );\r\n\r\n    if (indexToRemove !== -1) {\r\n      this.portfolioAddEvidenceParams.studentsInformation.splice(\r\n        indexToRemove,\r\n        1\r\n      );\r\n      return;\r\n    }\r\n    this.portfolioAddEvidenceParams.studentsInformation.push({\r\n      studentClassEnrollmentId: event.data.studentClassEnrollmentId,\r\n      name: event.data.fullName,\r\n      futureEvidenceId: event.data.futureEvidenceId,\r\n      studentId: event.data.studentId,\r\n      ageGradeInstrumentId: this.ageGradeId,\r\n      classId: this.classId,\r\n      measures: [],\r\n      domains: [],\r\n    });\r\n  }\r\n\r\n  reviewEvidence(event: any): void {\r\n    const { data, header } = event;\r\n    if (header === 'Review Current Evidence') {\r\n      if (data.portfolioId) {\r\n        this.router.navigate([\r\n          `portfolio/review-evidence/class/${this.classId}/student-enrollment/${event.data.studentClassEnrollmentId}/age-grade-instrument/${this.ageGradeId}`,\r\n        ], {\r\n          queryParams: {\r\n            portfolioId: data.portfolioId\r\n          }\r\n        });\r\n      } else {\r\n        this.reviewCurrentEvidence(event);\r\n      }\r\n    } else {\r\n      this.reviewFutureEvidence(data);\r\n    }\r\n  }\r\n\r\n  reviewCurrentEvidence(event: any): void {\r\n    this.portfolioService.getAvailableEvidenceToReq(event.data.studentId, this.ratingPeriodId, event.data?.studentClassEnrollmentId)\r\n      .pipe(take(1)).subscribe((evidence: IAvailableEvidence) => {\r\n        if (!evidence) {\r\n          this.toast.error('No Portfolio available.');\r\n          return;\r\n        }\r\n\r\n        let modalEvent = { data: { modalInfo: {} } };\r\n          modalEvent.data.modalInfo = {\r\n            title: 'No Portfolio available.',\r\n            message: `If you would like to request access to child's evidence, please click next below.`,\r\n            primaryBtnClass: 'blue',\r\n            primaryBtnText: Modal.Next,\r\n            showCancel: true\r\n          };\r\n          const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n            data: modalEvent ? modalEvent : undefined,\r\n          });\r\n          modalRef.afterClosed().subscribe((res) => {\r\n            if (res) {\r\n              evidence.toStudentClassEnrollmentID = event.data?.studentClassEnrollmentId;\r\n              evidence.studentId = event.data?.studentId;\r\n              evidence.classroomName = this.classroomName;\r\n              evidence.ratingPeriodName = this.ratingPeriodName;\r\n              evidence.siteName = this.siteName;\r\n              this.modal.open(RequestEvidenceComponent, { data: evidence });\r\n            }\r\n          });\r\n      });\r\n  }\r\n\r\n  reviewFutureEvidence(event: any): void {\r\n    if (event.futureEvidenceId) {\r\n      this.portfolioService.getFutureEvidencesById(event.futureEvidenceId!)\r\n      .pipe(take(1))\r\n      .subscribe(evidences=> {\r\n        if(evidences.domainEvidences.length > 0 || evidences.measureEvidences.length > 0) {\r\n          this.router.navigate([\r\n            `portfolio/review-evidence/future-evidence/${event.futureEvidenceId}/student/${event.studentId}/class/${this.classId}/age-grade-instrument/${this.ageGradeId}`,\r\n          ]);\r\n        }\r\n        else {\r\n          this.toast.error('No Future Evidence.');\r\n        }\r\n      });\r\n    } else {\r\n      this.toast.error('No Future Evidence.');\r\n    }\r\n  }\r\n\r\n  onNextButton(): void {\r\n    if (this.portfolioAddEvidenceParams.studentsInformation.length < 1) {\r\n      this.toast.error('No selected students.');\r\n      return;\r\n    }\r\n    const canProceed = this.checkFutureEvidence();\r\n    if (canProceed) {\r\n     this.goToAddEvidence();\r\n    }\r\n  }\r\n\r\n  checkFutureEvidence(): boolean {\r\n    const selectedStudents = this.portfolioAddEvidenceParams.studentsInformation;\r\n   // Do nothing: No selected students have future evidence\r\n    if (selectedStudents.every(student => !student.futureEvidenceId)) {\r\n      return true;\r\n    } else\r\n      this.showFutureEvidenceModal(selectedStudents);\r\n      return false;\r\n  }\r\n\r\n\r\n  goToAddEvidence(): void {\r\n    this.portfolioService.setPortfolioAddEvidenceParams(\r\n      this.portfolioAddEvidenceParams\r\n    );\r\n    this.router.navigate(['portfolio/add-evidence'], {\r\n      queryParams: { returnUrl: this.router.url, isPilot: this.isPilot },\r\n    });\r\n  }\r\n\r\n  showFutureEvidenceModal(selectedStudents: IPortfolioStudentInformation[]): void {\r\n    const futureEvidenceStudents = selectedStudents.filter(student => student.futureEvidenceId);\r\n    const modalRef = this.modal.open(FutureEvidenceStudentComponent, {\r\n      data: {studentList: futureEvidenceStudents},\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.goToAddEvidence();\r\n      }\r\n    });\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.router.navigate(['/portfolio']);\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n    <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">Request Release from Current Agency</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n  \r\n    <div mat-dialog-content>\r\n      <form class=\"grid grid-cols-2 gap-x-10\" [formGroup]=\"releaseStudentForm\">\r\n  \r\n        <div class=\"col-span-full md:col-span-1 pt-3\">\r\n          <label class=\"font-normal\" for=\"Name\">Child's Name</label>\r\n          <p>{{child.firstName + ' ' + child.lastName}}</p>\r\n        </div>\r\n  \r\n        <div class=\"col-span-full md:col-span-1 pt-4\">\r\n          <mat-form-field class=\"example-full-width no-underline\" appearance=\"fill\">\r\n            <label class=\"font-normal\">Release Reason<span class=\"required\"></span></label>\r\n            <mat-select formControlName=\"classReleaseReasonId\" placeholder='Reason'>\r\n              <mat-option *ngFor=\"let reason of releaseReasons$ | async\" [value]=\"reason.id\"\r\n                (click)=\"getSelectedReleaseReason(reason)\"> {{ reason.releaseReason }}</mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div *ngIf=\"isOther\" class=\"col-span-full\">\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <label class=\"font-normal\" for=\"comment\">Comment</label>\r\n            <input matInput placeholder=\"Comments\" autocomplete=\"off\" type=\"text\" formControlName=\"comment\">\r\n          </mat-form-field>\r\n        </div>\r\n  \r\n      </form>\r\n  \r\n    </div>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end pt-4\">\r\n    <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn class=\"ml-3\" mat-button [disabled]=\"releaseStudentForm.invalid\" cdkFocusInitial (click)=\"onSubmit()\">Request Release</drdp-btn>\r\n  </div>","import { Component, Inject, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\nimport { ClassReleaseReason, StudentRequestReason } from \"@core/enums/student-request-reason\";\r\nimport { LookupService } from \"@core/services/lookup.service\";\r\nimport { StudentRequestService } from \"@core/services/student-request.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { Observable, take } from \"rxjs\";\r\n\r\n\r\n@Component({\r\n    selector: 'drdp-release-student',\r\n    templateUrl: './request-release-student.component.html',\r\n    styleUrls: ['./request-release-student.component.scss'],\r\n})\r\nexport class ReleaseStudentComponent implements OnInit {\r\n    child: any;\r\n    releaseStudentForm: FormGroup | any;\r\n    releaseReasons$?: Observable<any>;\r\n    isOther: boolean = false;\r\n\r\n    get classReleaseReasonId() {\r\n        return this.releaseStudentForm.get('classReleaseReasonId');\r\n    }\r\n    get comment() {\r\n        return this.releaseStudentForm.get('comment');\r\n    }\r\n\r\n    constructor(\r\n        public dialogRef: MatDialogRef<ReleaseStudentComponent>,\r\n        private lookup: LookupService,\r\n        private toastService: ToastService,\r\n        private studentRequestService: StudentRequestService,\r\n        private fb: FormBuilder,\r\n        @Inject(MAT_DIALOG_DATA) public data: any\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.initializeForm();\r\n        this.getReleaseReasons();\r\n    }\r\n\r\n    initializeForm(): void {\r\n        this.releaseStudentForm = this.fb.group({\r\n            classReleaseReasonId: [null, Validators.required],\r\n            comment: [null],\r\n        });\r\n\r\n        this.child = this.data.data;\r\n    }\r\n\r\n    getReleaseReasons() {\r\n        this.releaseReasons$ = this.lookup.getClassReleaseReasons();\r\n    }\r\n\r\n    getSelectedReleaseReason(event: any) {\r\n        if (event.id === ClassReleaseReason.Other) {\r\n            this.isOther = true;\r\n        }\r\n        else {\r\n            this.isOther = false;\r\n            this.comment.setValue(null);\r\n        }\r\n    }\r\n\r\n    onSubmit() {\r\n        if (this.releaseStudentForm.invalid) {\r\n            this.toastService.error('Please enter all required fields.');\r\n            return;\r\n        }\r\n\r\n        let payload: any = this.releaseStudentForm.value;\r\n        payload.studentId = this.child.id;\r\n        payload.fromClassId = this.child.classId;\r\n        payload.requestReasonId = StudentRequestReason.Release;\r\n        payload.siteId = this.child.siteId;\r\n    \r\n        const successMessage = 'Release request has been sent.';\r\n    \r\n        this.studentRequestService\r\n          .addStudentRequest(payload, successMessage)\r\n          .pipe(take(1))\r\n          .subscribe((r) => {\r\n            this.dialogRef.close({ success: true });\r\n          });\r\n    }\r\n\r\n}","<div class=\"rounded-lg fixActionRow\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{title}}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-4 gap-x-10 mt-2 pb-3 w-[100%]\" [formGroup]=\"enrollmentForm\">\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\">\r\n        <drdp-select-state\r\n          [initialStateId]=\"stateId.value\"\r\n          (state)=\"handleDropdown($event, selectType.States)\"\r\n          [isValid]=\"!stateId.touched || stateId.valid\"\r\n          [required]=\"true\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-agency\r\n          [initialAgencyId]=\"agencyId.value\"\r\n          (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n          [stateId]=\"stateId.value\"\r\n          [required]=\"true\"\r\n        >\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-age-grade\r\n              #ageGroupInstrumentSelect\r\n              [initialageGradeId]=\"ageGradeId.value\"\r\n              (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n              [stateId]=\"stateId.value\"\r\n              [multiSelect]=\"false\"\r\n              [required]=\"true\"\r\n              label=\"Child Age/Grade Instrument\"\r\n              [isPilot]=\"isPilotEnroll\"\r\n            >\r\n            </drdp-select-age-grade>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-date-picker\r\n                label=\"Agency Enrollment Date\"\r\n                [initialDate]=\"enrollmentStartDate?.value\"\r\n                [isReadOnly]=\"false\"\r\n                [isRequired]=\"true\"\r\n                (emitDate)=\"handleDate($event, 'enrollmentStartDate')\"\r\n              >\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-site\r\n          [initialSiteId]=\"siteId.value\"\r\n          (site)=\"handleDropdown($event, selectType.Sites)\"\r\n          [agencyId]=\"agencyId.value\"\r\n          [multiSelect]=\"false\"\r\n          [multiSelectInitVals]=\"false\"\r\n          [required]=\"true\"\r\n          [isDualEnrollments]=\"isDualEnrollment\"\r\n        >\r\n        </drdp-select-site>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-rating-period\r\n          [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n          (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n          [agencyId]=\"agencyId.value\"\r\n          [required]=\"true\"\r\n          [displayCurrentRps]=\"true\">\r\n          </drdp-select-rating-period>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-class\r\n            (classroom)=\"handleDropdown($event, selectType.Class)\"\r\n            [siteIds]=\"siteId.value\"\r\n            [required]=\"true\"\r\n            [ratingPeriodId]=\"ratingPeriodId.value\"\r\n            [multiSelect]=\"false\"\r\n            [showPilotClasses]=\"isPilotEnroll\">\r\n        </drdp-select-class>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <div class=\"form-input-label-group\">\r\n          <label class=\"font-normal required\" for=\"enrollmentPrograms\"\r\n            >Program Type</label\r\n          >\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select\r\n              formControlName=\"enrollmentProgramIds\"\r\n              [placeholder]=\"enrollmentProgramPlaceholder\"\r\n              multiple\r\n              required=\"true\"\r\n              [disabled]=\"!enrollmentProgramTypesFiltered\"\r\n            >\r\n              <mat-option\r\n                *ngFor=\"let ept of enrollmentProgramTypesFiltered\"\r\n                [value]=\"ept.enrollmentProgramId\"\r\n              >\r\n                {{ ept.enrollmentProgramType?.enrollmentProgramName }}\r\n              </mat-option>\r\n            </mat-select>\r\n            <mat-error *ngIf=\"enrollmentProgramIds.invalid\"\r\n              >{{ 'Choose valid Enrollment Program'  }}</mat-error\r\n            >\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-iep-plan\r\n              [initialId]=\"iep.value\"\r\n              [required]=\"true\"\r\n              (optionSelected)=\"handleDropdown($event, selectType.IepPlan)\"\r\n              [disabled]=\"isPilotEnroll\"\r\n            >\r\n            </drdp-select-iep-plan>\r\n      </div>\r\n\r\n      <div *ngIf=\"!isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-selpa\r\n              (selpa)=\"handleDropdown($event, selectType.Selpa)\"\r\n              additionalClasses=\"pb-7\"\r\n              [initialSelpaId]=\"selpaId.value\"\r\n              [disabled]=\"isPilotEnroll\"\r\n            >\r\n            </drdp-select-selpa>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire || isPilotEnroll\" class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'mb-7': isNewHampshire}\" for=\"primaryDisabilityId\">Primary Disability</label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select \r\n            formControlName=\"primaryDisabilityId\" \r\n            [placeholder]=\"selectedDisability ?? 'Primary Disability'\"\r\n            (selectionChange)=\"handlePrimaryDisability($event)\"\r\n          >\r\n            <mat-option \r\n              *ngFor=\"let disability of disabilities\" \r\n              [value]=\"disability\"\r\n              >{{ disability.primaryDisabilityName }}\r\n            </mat-option>\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div *ngIf=\"hasFollowUp\" class=\"form-input-label-group\">\r\n        <div class=\"col-span-1 col-end-3\">\r\n          <label class=\"font-normal\" for=\"extensiveSupportId\">Does the child have extensive support needs?</label>\r\n          <mat-radio-group\r\n            aria-label=\"Select an option\"\r\n            formControlName=\"extensiveSupportId\"\r\n          >\r\n            <mat-radio-button\r\n              color=\"primary\"\r\n              *ngFor=\"let es of extensiveSupports\"\r\n              [value]=\"es.id\"\r\n            >\r\n              {{ es.extensiveSupportOption }}\r\n            </mat-radio-button>\r\n          </mat-radio-group>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"adaptations\">Adaptations</label>\r\n            <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n              <mat-select\r\n                formControlName=\"adaptationIds\"\r\n                multiple\r\n                placeholder=\"Choose all that apply\"\r\n              >\r\n                <mat-option\r\n                  *ngFor=\"let adaptation of adaptations\"\r\n                  [value]=\"adaptation.id\"\r\n                  [disabled]=\"isPilotEnroll\"\r\n                  >{{ adaptation.adaptationTypeName }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"districtOfLiabilityId\" \r\n          [ngClass]=\"{'required': iep.value == iepPlan.Yes}\">\r\n          District of Liability\r\n        </label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select formControlName=\"districtOfLiabilityId\" placeholder=\"District of Liability\">\r\n            <mat-option *ngFor=\"let dol of districtsOfLiability\" [value]=\"dol.id\">\r\n              {{ dol.districtOfLiabilityName }}\r\n            </mat-option>\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-date-picker\r\n          label=\"Special Education Entry Date\"\r\n          [isReadOnly]=\"false\"\r\n          labelClasses=\"mb-2\"\r\n          (emitDate)=\"handleDate($event, 'seEntryDate')\"\r\n        >\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-date-picker\r\n          label=\"Special Education Anticipated Exit Date\"\r\n          [isReadOnly]=\"false\"\r\n          labelClasses=\"mb-2\"\r\n          (emitDate)=\"handleDate($event, 'seAnticipateExitDate')\"\r\n        >\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-initial-assessment-tool-type\r\n          additionalClasses=\"pb-0\"\r\n          label=\"Initial Assessment Tool\"\r\n          (optionSelected)=\"handleDropdown($event, 'initialAssessmentToolType')\">\r\n        </drdp-select-initial-assessment-tool-type>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-outcome\r\n          label=\"Outcome 1\"\r\n          (optionSelected)=\"handleDropdown($event, 'outcome1')\">\r\n        </drdp-select-outcome>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-outcome\r\n          label=\"Outcome 2\"\r\n          (optionSelected)=\"handleDropdown($event, 'outcome2')\">\r\n        </drdp-select-outcome>\r\n      </div>\r\n\r\n      <div *ngIf=\"isNewHampshire\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-outcome\r\n          label=\"Outcome 3\"\r\n          (optionSelected)=\"handleDropdown($event, 'outcome3')\">\r\n        </drdp-select-outcome>\r\n      </div>\r\n    </form>\r\n\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close (click)=\"cancel()\">Cancel</drdp-btn>\r\n    <drdp-btn mat-button [disabled]=\"enrollmentForm.invalid || isProcessing\" cdkFocusInitial\r\n      (click)=\"onSubmit()\">{{ submitBtnText }}</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AgeGradeInstrument } from '@core/enums/age-grade-instruments';\r\nimport { EnrollmentProgram } from '@core/enums/enrollment-programs';\r\nimport { IepPlan } from '@core/enums/iep-plan';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { States } from '@core/enums/states';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { IAdaptationType } from '@core/interfaces/iadaptation-type';\r\nimport { IAgeGradeEnrollmentProgramFilter } from '@core/interfaces/iage-grade-instrument';\r\nimport { IDisability } from '@core/interfaces/idisability';\r\nimport { IDistrictOfLiability } from '@core/interfaces/idistrict-of-liability';\r\nimport { IDualEnrollModalData } from '@core/interfaces/idual-enroll-modal-data';\r\nimport { IExtensiveSupport } from '@core/interfaces/iextensive-support';\r\nimport { IStudentDualEnrollment } from '@core/interfaces/istudent';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-dual-enroll-child',\r\n  templateUrl: './dual-enroll-child.component.html',\r\n  styleUrls: ['./dual-enroll-child.component.scss'],\r\n})\r\nexport class DualEnrollChildComponent implements OnInit {\r\n  enrollmentForm: FormGroup | any;\r\n  isProcessing = false;\r\n  userStateId: number = this.userService.getUserStateId();\r\n  userAgencyId: number = this.userService.getCurrentUser().agencyId;\r\n  adaptations: IAdaptationType[] = [];\r\n  enrollmentProgramPlaceholder: string = 'Select Enrollment Programs';\r\n  enrollmentProgramTypes!: IAgeGradeEnrollmentProgramFilter[];\r\n  enrollmentProgramTypesFiltered!: IAgeGradeEnrollmentProgramFilter[];\r\n  AgeGradeInstrument = AgeGradeInstrument;\r\n  isNewHampshire = this.userStateId === States.newHampshire;\r\n  disabilities: IDisability[] = [];\r\n  studentDemographics = StudentDemographic;\r\n  iepPlan = IepPlan;\r\n  districtsOfLiability: IDistrictOfLiability[] = [];\r\n  isPilotEnroll: boolean = this.data.action === 'pilotEnroll';\r\n  isDualEnrollment: boolean = this.data.action === 'dualEnroll';\r\n  submitBtnText: string = this.isPilotEnroll ? 'Complete Pilot Enrollment' : 'Complete Dual Enrollment';\r\n  title: string = this.isPilotEnroll ? 'Add to 2025 Pilot Classroom' : 'Request for Dual Enrollment';\r\n  studentInfo: any = this.data.data;\r\n  hasFollowUp: boolean = false;\r\n  extensiveSupports: IExtensiveSupport[] = [];\r\n  selectedDisability?: string;\r\n\r\n  public get selectType() {\r\n    return SelectType;\r\n  }\r\n\r\n  public get programTypeValues() {\r\n    return EnrollmentProgram;\r\n  }\r\n\r\n  get stateId() {\r\n    return this.enrollmentForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.enrollmentForm.get('agencyId');\r\n  }\r\n  get ageGradeId() {\r\n    return this.enrollmentForm.get('ageGradeId');\r\n  }\r\n  get enrollmentStartDate() {\r\n    return this.enrollmentForm.get('enrollmentStartDate');\r\n  }\r\n  get siteId() {\r\n    return this.enrollmentForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.enrollmentForm.get('ratingPeriodId');\r\n  }\r\n  get classId() {\r\n    return this.enrollmentForm.get('classId');\r\n  }\r\n  get enrollmentProgramIds() {\r\n    return this.enrollmentForm.get('enrollmentProgramIds');\r\n  }\r\n  get iep() {\r\n    return this.enrollmentForm.get('iep');\r\n  }\r\n  get selpaId() {\r\n    return this.enrollmentForm.get('selpaId');\r\n  }\r\n  get adaptationIds() {\r\n    return this.enrollmentForm.get('adaptationIds');\r\n  }\r\n  get primaryDisabilityId() {\r\n    return this.enrollmentForm.get('primaryDisabilityId');\r\n  }\r\n  get districtOfLiabilityId() {\r\n    return this.enrollmentForm.get('districtOfLiabilityId');\r\n  }\r\n  get extensiveSupportId() {\r\n    return this.enrollmentForm.get('extensiveSupportId');\r\n  }\r\n\r\n  constructor(private fb: FormBuilder,\r\n              private lookupService: LookupService,\r\n              private userService: AuthService,\r\n              private toastService: ToastService,\r\n              private studentService: StudentService,\r\n              @Inject(MAT_DIALOG_DATA) public data: any,\r\n              public dialogRef: MatDialogRef<DualEnrollChildComponent>) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.initializeData();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    const adaptationsIds = this.studentInfo.adaptationIds ? this.studentInfo.adaptationIds.split(',').map((id: string) => +id) : [];\r\n    this.enrollmentForm = this.fb.group({\r\n      stateId: [this.userStateId, [Validators.required]],\r\n      agencyId: [this.userAgencyId, [Validators.required]],\r\n      ageGradeId: [null, [Validators.required]],\r\n      enrollmentStartDate: [null, [Validators.required]],\r\n      siteId: [null, [Validators.required]],\r\n      ratingPeriodId: [null, [Validators.required]],\r\n      classId: [null, [Validators.required]],\r\n      enrollmentProgramIds: [null, Validators.required],\r\n      iep: [this.isPilotEnroll ? this.studentInfo.iepPlanId : null, [Validators.required]],\r\n      selpaId: [this.isPilotEnroll ? this.studentInfo.selpaId : null],\r\n      primaryDisabilityId: [null],\r\n      adaptationIds: [this.isPilotEnroll ? adaptationsIds : []],\r\n      seEntryDate: [null],\r\n      seAnticipateExitDate: [null],\r\n      initialAssessmentToolId: [null],\r\n      outcome1Id: [null],\r\n      outcome2Id: [null],\r\n      outcome3Id: [null],\r\n      districtOfLiabilityId: [null],\r\n      extensiveSupportId: [null]\r\n    });\r\n  }\r\n\r\n  initializeData(): void {\r\n    this.lookupService.getDualEnrollModalData()\r\n      .pipe(take(1)).subscribe((res: IDualEnrollModalData) => {\r\n        this.enrollmentProgramTypes = res.enrollmentProgramTypes;\r\n        this.adaptations = res.adaptations;\r\n        this.disabilities = res.disabilities;\r\n        this.districtsOfLiability = res.districtsOfLiability;\r\n        this.extensiveSupports = res.extensiveSupports;\r\n    });\r\n  }\r\n\r\n  handleDropdown(event: any, selectType: string): void {\r\n    switch (selectType) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);        \r\n        this.isNewHampshire = this.stateId.value === States.newHampshire;\r\n        break;\r\n      case this.selectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case this.selectType.AgeInstrument:\r\n        this.ageGradeId.setValue(event?.id);\r\n        this.enrollmentProgramIds.reset();\r\n        \r\n        this.enrollmentProgramTypesFiltered =\r\n        this.enrollmentProgramTypes!.filter(\r\n          (ept: IAgeGradeEnrollmentProgramFilter) => {\r\n            return ept.ageGradeInstrumentId === this.ageGradeId.value;\r\n          }\r\n        );\r\n          \r\n        if (this.enrollmentProgramTypesFiltered.length == 0) {\r\n          this.enrollmentProgramPlaceholder = 'No program types for Age Grade';\r\n        } else {\r\n          this.enrollmentProgramPlaceholder = 'Select all that apply';\r\n        }\r\n        break;\r\n      case this.selectType.Sites:\r\n        this.siteId.setValue(event?.id);\r\n        break;\r\n      case this.selectType.RatingPeriods:\r\n        this.ratingPeriodId.setValue(event?.id);\r\n        break;\r\n      case this.selectType.Class:\r\n        this.classId.setValue(event?.id);\r\n        break;\r\n      case this.selectType.IepPlan:\r\n        this.iep.setValue(event?.id);\r\n        if (this.isNewHampshire) {\r\n          if (event?.id == this.iepPlan.Yes) {\r\n            this.districtOfLiabilityId.setValidators([Validators.required]);\r\n            this.districtOfLiabilityId.updateValueAndValidity();\r\n          }\r\n          else {\r\n            this.districtOfLiabilityId.setValidators([]);\r\n            this.districtOfLiabilityId.updateValueAndValidity();\r\n          }\r\n        }\r\n        break;\r\n      case this.selectType.Selpa:\r\n        this.selpaId.setValue(event?.id);\r\n        break;\r\n      case this.selectType.InitialAssessment:\r\n        this.enrollmentForm.get('initialAssessmentToolId').setValue(event?.id);\r\n        break;\r\n      case this.selectType.Outcome1:\r\n        this.enrollmentForm.get('outcome1Id').setValue(event?.id);\r\n        break;\r\n      case this.selectType.Outcome2:\r\n        this.enrollmentForm.get('outcome2Id').setValue(event?.id);\r\n        break;\r\n      case this.selectType.Outcome3:\r\n        this.enrollmentForm.get('outcome3Id').setValue(event?.id);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDate(event: any, control: string): void {\r\n    this.enrollmentForm.get(control).setValue(event);\r\n  }\r\n\r\n  handlePrimaryDisability(event: any) {\r\n    this.primaryDisabilityId.setValue(event.value.id);\r\n    this.hasFollowUp = event.value.hasFollowUp;\r\n    if (!this.hasFollowUp) this.extensiveSupportId.setValue(null);\r\n    this.selectedDisability = event.value.primaryDisabilityName;\r\n  }\r\n\r\n  onSubmit(): any {\r\n    if (this.enrollmentForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    if (this.isProcessing) return;\r\n    const { drdpId } = this.data.data;\r\n    this.isProcessing = true;\r\n    const payload: IStudentDualEnrollment = {\r\n      studentId: drdpId,\r\n      ...this.enrollmentForm.value,\r\n      isDualEnrollment: this.isDualEnrollment,\r\n    };\r\n\r\n    this.studentService.saveDualEnrollment(payload).pipe(\r\n      take(1),\r\n      tap((res: boolean) => {\r\n        if (res) {\r\n          this.toastService.success('Dual Enrollment Saved');\r\n          this.dialogRef.close({ success: true });\r\n        }\r\n      })\r\n    ).subscribe();\r\n  }\r\n\r\n  cancel(): void {\r\n    this.enrollmentForm.reset();\r\n  }\r\n}\r\n","export enum AdditionalFilters {\r\n  None = 0,\r\n  Subgroups = 1\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex items-center\">\r\n        <div>\r\n          <span class=\"flex items-center\">\r\n            <drdp-title title=\"Search for Child in DRDP Online System\"></drdp-title>\r\n            <i class=\"uil uil-info-circle text-xl ml-2 mb-2 cursor-pointer \"\r\n              matTooltip=\"Please search for child that will be added to ensure a duplicate record is not created. The child may already be enrolled in a classroom/family child care home or the child may be available to transfer to your organization.\"\r\n              matTooltipPosition=\"right\" matTooltipClass=\"bg-black text-white custom-tooltip\"></i>\r\n          </span>\r\n        </div>\r\n      </div>      \r\n\r\n    <drdp-container>\r\n        <drdp-container color=\"lightBlue\">\r\n            <form class=\"grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 p-2 gap-3 flex-row content-center\"\r\n                [formGroup]=\"searchForm\">\r\n                <div class=\"col-span-1\">\r\n                    <label class=\"required\">\r\n                        First Name\r\n                    </label>\r\n                    <div class=\"basis-1/2 border-b border-black\">\r\n                        <input matInput placeholder=\"First Name\" autocomplete=\"off\" type=\"text\"\r\n                            formControlName=\"firstName\" maxlength=\"50\">\r\n                    </div>\r\n                </div>\r\n                <div class=\"col-span-1\">\r\n                    <label class=\"required\">\r\n                        Last Name\r\n                    </label>\r\n                    <div class=\"basis-1/2 border-b border-black\">\r\n                        <input matInput placeholder=\"Last Name\" autocomplete=\"off\" type=\"text\"\r\n                            formControlName=\"lastName\" maxlength=\"50\">\r\n                    </div>\r\n                </div>\r\n                <div class=\"col-span-1\">\r\n                    <drdp-date-picker label=\"DOB\" [initialDate]=\"dob?.value\" labelClasses=\"pb-1\" [isRequired]=\"true\"\r\n                        (emitDate)=\"handleDate($event)\">\r\n                    </drdp-date-picker>\r\n                </div>\r\n                <div class=\"col-span-1\">\r\n                    <div><span class=\"font-bold\">Additional Filters</span></div>\r\n                    <mat-radio-group aria-label=\"Select an option\" class=\"flex gap-3\" formControlName=\"additionalFilter\">\r\n                      <mat-radio-button [value]=\"subFilter.None\" color=\"primary\">None</mat-radio-button>\r\n                      <mat-radio-button [value]=\"subFilter.Subgroups\" color=\"primary\">Filters</mat-radio-button>\r\n                    </mat-radio-group>\r\n                </div>\r\n                <div *ngIf=\"additionalFilter.value == subFilter.Subgroups\"\r\n                    class=\"col-span-1 md:col-span-3 lg:col-span-4 grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 gap-3\">\r\n                    <div class=\"col-span-1\">\r\n                        <label class=\"m-0 text-sm flex items-center\" style=\"min-height: 2.5rem;\">\r\n                            {{ ssidLabel }}\r\n                        </label>\r\n                        <div class=\"basis-1/2 border-b border-black\">\r\n                            <input matInput [placeholder]=\"ssidPlaceholder\" autocomplete=\"off\" type=\"text\"\r\n                                formControlName=\"ssid\" maxlength=\"50\">\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"col-span-1\">\r\n                        <label>\r\n                            DRDP ID\r\n                        </label>\r\n                        <div class=\"basis-1/2 border-b border-black\">\r\n                            <input matInput (keypress)=\"numberOnly($event)\" placeholder=\"DRDP ID\" autocomplete=\"off\"\r\n                                type=\"text\" formControlName=\"drdpId\" maxlength=\"50\">\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"col-span-1\">\r\n                        <drdp-select-county #countySelect [initialCountyIds]=\"null\" (county)=\"handleChosenCounty($event)\"\r\n                            [stateId]=\"userStateId\" [multiSelect]=\"false\">\r\n                        </drdp-select-county>\r\n                    </div>\r\n                </div>\r\n                <div class=\"col-span-1 md:col-start-5 self-end justify-center md:justify-self-end\">\r\n                    <drdp-btn type=\"submit\" (click)=\"search()\" class=\"mr-2\">Search</drdp-btn>\r\n                    <drdp-btn type=\"button\" (click)=\"clear()\" color=\"outline\">Clear</drdp-btn>\r\n                </div>\r\n            </form>\r\n        </drdp-container>\r\n        <div class=\"p-5 w-full\">\r\n            <drdp-add-edit-table viewIcon=\"uil uil-file-alt text-drdpblue-300\" (iconActionItem)=\"actionItem($event)\" (actionIconClicked)=\"openEnrollmentModal($event)\"\r\n                [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n    </drdp-container>\r\n</div>\r\n<mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n</mat-paginator>\r\n<div *ngIf=\"showCheckbox\" class=\"flex flex-wrap mx-2 my-2 justify-center items-center gap-3\">\r\n    <mat-checkbox color=\"primary\" (click)=\"handleCheckbox()\">By checking this box, I am acknowledging that child is not listed above from search results.</mat-checkbox>\r\n    <drdp-btn [disabled]=\"disableAddChildBtn\" type=\"button\" color=\"filled\" (click)=\"handleAddChildBtn()\">Add New Child</drdp-btn>\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { SearchStudentAction, TableColumnType } from '@core/enums/table';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { SelectCountyComponent } from '@shared/components/dropdowns/select-county/select-county.component';\r\nimport { isNumber } from '@core/services/helper.service';\r\nimport { ReleaseStudentComponent } from './request-release-student/request-release-student.component';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take, tap } from 'rxjs';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { States } from '@core/enums/states';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { StudentStatus } from '@core/enums/student-request-reason';\r\nimport { DualEnrollChildComponent } from '../dual-enroll-child/dual-enroll-child.component';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { AdditionalFilters } from '@core/enums/additional-filters';\r\n\r\n@Component({\r\n  selector: 'drdp-add-search-child',\r\n  templateUrl: './add-search-child.component.html',\r\n  styleUrls: ['./add-search-child.component.scss'],\r\n})\r\nexport class AddSearchChildComponent implements OnInit {\r\n  @ViewChild('countySelect') countySelect: SelectCountyComponent | undefined;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n  payload: any = {};\r\n  searchForm: FormGroup | any;\r\n  userStateId?: number;\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  ssidLabel = 'SSID';\r\n  ssidPlaceholder = 'SSID'\r\n  isNewHampshire = false;\r\n  showCheckbox = false;\r\n  disableAddChildBtn = true;\r\n  dualEnrollmentExists = false;\r\n\r\n  get firstName() {\r\n    return this.searchForm.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.searchForm.get('lastName');\r\n  }\r\n  get dob() {\r\n    return this.searchForm.get('dob');\r\n  }\r\n  get SSID() {\r\n    return this.searchForm.get('ssid');\r\n  }\r\n  get drdpId() {\r\n    return this.searchForm.get('drdpId');\r\n  }\r\n  get countyOfProgramId() {\r\n    return this.searchForm.get('countyOfProgramId');\r\n  }\r\n  get isDifferentChild() {\r\n    return this.searchForm.get('isDifferentChild');\r\n  }\r\n  get additionalFilter() {\r\n    return this.searchForm.get('additionalFilter');\r\n  }\r\n  get subFilter() {\r\n    return AdditionalFilters;\r\n  }\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: TableColumnType.text,\r\n    },\r\n    { columnDef: 'lastName', header: 'Last Name', type: TableColumnType.text },\r\n    {\r\n      columnDef: 'dob',\r\n      header: 'DOB',\r\n      dateFormat: 'mediumDate',\r\n      type: TableColumnType.date,\r\n    },\r\n    { columnDef: 'ssid', header: 'SSID', type: TableColumnType.text },\r\n    { columnDef: 'drdpId', header: 'DRDP ID', type: TableColumnType.text },\r\n    {\r\n      columnDef: 'previousCurrentSite',\r\n      header: 'Previous/Current Site',\r\n      type: TableColumnType.text,\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    public modal: MatDialog,\r\n    private fb: FormBuilder,\r\n    public authService: AuthService,\r\n    private studentService: StudentService,\r\n    private router: Router,\r\n    private toastService: ToastService,\r\n    private stateService: StateService,\r\n    private permission: PermissionService,\r\n    private siteService: SiteService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.permission.checkPermission(Permission.ViewCurrentEnrollment)) {\r\n      this.tableColumns.push(\r\n        {\r\n          columnDef: 'previousCurrentAgency',\r\n          header: 'Previous/Current Agency',\r\n          type: TableColumnType.text,\r\n        }\r\n      );\r\n    }\r\n\r\n    this.tableColumns.push(\r\n      { columnDef: 'status', header: 'Status', type: TableColumnType.text },\r\n      { columnDef: 'action', header: 'Action', type: TableColumnType.action }\r\n    );\r\n\r\n    const userSites = this.authService.getCurrentUser()?.sites;\r\n    const canDualEnroll = userSites?.some((site: any) => site.site?.isDualEnrollment);\r\n\r\n    if (this.permission.checkPermission(Permission.ManageDualEnrollment) && canDualEnroll) {\r\n      this.tableColumns.push(\r\n        {\r\n          columnDef: 'hideIcon',\r\n          type: TableColumnType.actionIcon,\r\n          action: 'dualEnroll',\r\n          header: 'Dual Enrollment',\r\n          icon: 'users-alt',\r\n          cursorClass: 'cursor-pointer',\r\n          colorClass: 'text-drdpblue-300',\r\n          info: 'As a Dual Enrollment Site, you can enroll an already enrolled child into your program by clicking on the Dual Enrollment icon below.',\r\n          tooltip: 'Request Dual Enrollment'\r\n        }\r\n      );\r\n    }\r\n    if (this.permission.checkPermission(Permission.Access2025StudentOptions)) {\r\n      this.tableColumns.push(\r\n        {\r\n          columnDef: 'hidePilotIcon',\r\n          type: TableColumnType.actionIcon,\r\n          action: 'pilotEnroll',\r\n          header: '2025 Pilot',\r\n          icon: 'users-alt',\r\n          cursorClass: 'cursor-pointer',\r\n          colorClass: 'text-drdpblue-300',\r\n        }\r\n      );\r\n    }\r\n\r\n    this.userStateId = this.authService.getUserStateId();\r\n    this.isNewHampshire = this.userStateId == States.newHampshire;\r\n    this.getSsidLabel(this.userStateId);\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm() {\r\n    this.searchForm = this.fb.group({\r\n      firstName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      lastName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      dob: [null, [Validators.required]],\r\n      ssid: [null],\r\n      drdpId: [null],\r\n      countyOfProgramId: [null],\r\n      isDifferentChild: [false],\r\n      additionalFilter: AdditionalFilters.None\r\n    });\r\n\r\n    this.additionalFilter.valueChanges.subscribe((val: AdditionalFilters) => {\r\n      if (val == AdditionalFilters.None) {\r\n        this.searchForm.patchValue({\r\n          ssid: null,\r\n          drdpId: null,\r\n          countyOfProgramId: null\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  getSsidLabel(stateId: number): void {\r\n    this.stateService.getStateConfigurations(stateId).pipe(\r\n      take(1),\r\n      tap((config: IStateConfiguration[]) => {\r\n        const ssid = config.find(\r\n          (x: any) => x.columnName === StudentDemographic.SSID\r\n        );\r\n        this.ssidLabel = ssid?.label ? ssid?.label : this.ssidLabel;\r\n        this.ssidPlaceholder = ssid?.label ? ssid?.label : this.ssidLabel;\r\n\r\n        const ssidColumnIndex = this.tableColumns.findIndex((col: any) => col.header === 'SSID');\r\n        if (this.isNewHampshire) {\r\n          this.tableColumns[ssidColumnIndex].header = 'SASID';\r\n        }\r\n      })\r\n      ).subscribe();\r\n  }\r\n\r\n  numberOnly(event: any): boolean {\r\n    const charCode = event.which ? event.which : event.keyCode;\r\n    return isNumber(charCode);\r\n  }\r\n\r\n  search() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    this.payload = this.searchForm.value;\r\n\r\n    this.payload.pageIndex = 0;\r\n    this.payload.itemsPerPage = 10;\r\n    this.paginateTable(false);\r\n  }\r\n\r\n  initializeTableData(res?: any): void {\r\n    const modifiedItems = res?.items.map((item: any) => {\r\n      let iconName = '';\r\n      let tooltipText = '';\r\n      let actionId = 0;\r\n      let hideIcon = false;\r\n      if (item?.isAddChild === true) {\r\n        iconName = 'uil-user-plus';\r\n        tooltipText = 'Add Child';\r\n        actionId = SearchStudentAction.AddChild;\r\n        hideIcon = item?.isDualEnrollment;\r\n      } else if (item?.isReleaseRequest === true) {\r\n        iconName = 'uil-sign-out-alt';\r\n        tooltipText = 'Request Release';\r\n        actionId = SearchStudentAction.RequestRelease;\r\n      } else {\r\n        iconName = 'uil-file';\r\n        tooltipText = 'View Student';\r\n        actionId = SearchStudentAction.ViewStudent;\r\n      }\r\n      return {\r\n        ...item,\r\n        actionIcon: iconName,\r\n        tooltipText: tooltipText,\r\n        actionId,\r\n        hideIcon\r\n      };\r\n    });\r\n    this.dataSource = new MatTableDataSource(modifiedItems);\r\n    this.totalData = res.totalData;\r\n    this.tableData = modifiedItems;\r\n  }\r\n\r\n  clear() {\r\n    this.searchForm.reset({ additionalFilter: AdditionalFilters.None });\r\n    this.countySelect?.clearSelected();\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n    this.pageSize = 10;\r\n    this.paginator.pageSize = 10;\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    this.studentService.addSearch(this.payload).subscribe((res: any) => {\r\n      if (!res) {\r\n        return;\r\n      }\r\n\r\n      if (res?.items.length < 1) {\r\n        this.openNoResultsModal();\r\n        return;\r\n      }\r\n\r\n      this.showCheckbox = true;\r\n      this.dualEnrollmentExists = res?.items.some((item: any) => item?.isDualEnrollment && item?.status === StudentStatus.StillEnrolled);\r\n      if (resetPage) this.paginator.firstPage();\r\n      this.initializeTableData(res);\r\n      if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n    });\r\n  }\r\n\r\n  handleChosenCounty(event: any) {\r\n    this.countyOfProgramId.setValue(event?.id);\r\n  }\r\n\r\n  handleAddChildBtn() {\r\n    if (this.disableAddChildBtn) return;\r\n\r\n    this.router.navigate(['/add-child'], {\r\n      state: { searchValues: this.searchForm.value },\r\n    });\r\n  }\r\n\r\n  handleCheckbox() {\r\n    this.disableAddChildBtn = !this.disableAddChildBtn;\r\n    this.isDifferentChild.setValue(!this.isDifferentChild.value);\r\n  }\r\n\r\n  openNoResultsModal(): void {\r\n    var event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'No Results Found',\r\n      message: `There were no results found.  Please check the full and accurate spelling of the name of the child.  Proceed to Add New Child.`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: 'Add New Child',\r\n      showCancel: true,\r\n      cancelText: 'Return to Search',\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.router.navigate(['/add-child'], {\r\n          state: { searchValues: this.searchForm.value },\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  openEnrollmentModal(event: any): void {\r\n    if (event.action === 'dualEnroll') {\r\n      const { isDualEnrollment, status } = event.data;\r\n      if ((isDualEnrollment && status === StudentStatus.StillEnrolled) || this.dualEnrollmentExists) {\r\n        this.toastService.error('Student is still enrolled and currently in a Dual Enrollment.');\r\n        return;\r\n      }\r\n    }\r\n    else if (event.action === 'pilotEnroll') {\r\n      if (event.data.isAddChild) {\r\n        this.toastService.error('Primary Enrollment can not be added to a 2025 Pilot Classroom');\r\n        return;\r\n      }\r\n      if (event.data.isDualEnrollment || event.data.isPilotEnrolled) {\r\n        this.toastService.error('This child is already dual enrolled and can not be added to the 2025 Pilot.');\r\n        return;\r\n      }\r\n      if (!event.data.isPilotTest) {\r\n        this.toastService.error('This child has not been pre-chosen as a 2025 Pilot child.');\r\n        return;\r\n      }\r\n    }\r\n    const modalRef = this.modal.open(DualEnrollChildComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.search();\r\n      }\r\n    });\r\n  }\r\n\r\n  actionItem(event: any) {\r\n    if (!event) {\r\n      return;\r\n    }\r\n    if (event?.data.actionId == SearchStudentAction.AddChild) {\r\n      this.router.navigateByUrl(`view-child/${event?.data?.id}`, {\r\n        state: {\r\n          isEdit: true,\r\n          enrollDroppedChild: true,\r\n        },\r\n      });\r\n    } else if (event?.data.actionId == SearchStudentAction.RequestRelease) {\r\n      this.openRequestReleaseModal(event);\r\n    } else if (event?.data.actionId == SearchStudentAction.ViewStudent) {\r\n      this.router.navigateByUrl(`view-child/${event?.data?.id}`);\r\n    } else {\r\n      this.toastService.error('No action found.');\r\n    }\r\n  }\r\n\r\n  openRequestReleaseModal(event: any) {\r\n    if (event.data.id < 1) {\r\n      this.toastService.error('No Student Data Present');\r\n    } else if (!event.data.isDualEnrollment){\r\n        const modalRef = this.modal.open(ReleaseStudentComponent, {\r\n          data: event ? event : undefined,\r\n        });\r\n    } else {\r\n      this.siteService.validateUserSite().pipe(take(1)).subscribe((res: boolean) => {\r\n        if (res) {\r\n          const modalRef = this.modal.open(ReleaseStudentComponent, {\r\n            data: event ? event : undefined,\r\n          });\r\n        }\r\n        else {\r\n          this.toastService.error('In order to request the release of a dual enrolled child, you must be a dual enrollment site.');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.dob.setValue(event);\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n    <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">Request Release from Current Agency</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n  \r\n    <div mat-dialog-content>\r\n      <form class=\"grid grid-cols-2 gap-x-10\" [formGroup]=\"declineReleaseStudentForm\">\r\n  \r\n        <div class=\"col-span-full md:col-span-1 pt-3\">\r\n          <label class=\"font-normal\" for=\"Name\">Child's Name</label>\r\n          <p>{{child.studentName}}</p>\r\n        </div>\r\n  \r\n        <div class=\"col-span-full md:col-span-1 pt-4\">\r\n          <mat-form-field class=\"example-full-width no-underline\" appearance=\"fill\">\r\n            <label class=\"font-normal\">Decline Release Reason<span class=\"required\"></span></label>\r\n            <mat-select formControlName=\"classDeclineReleaseReasonId\" placeholder='Reason'>\r\n              <mat-option *ngFor=\"let reason of declineReleaseReasons$ | async\" [value]=\"reason.id\"\r\n                (click)=\"getSelectedDeclineReleaseReason(reason)\"> {{ reason.declineReleaseReason }}</mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div *ngIf=\"isOther\" class=\"col-span-full\">\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <label class=\"font-normal\" for=\"comment\">Comment</label>\r\n            <input matInput placeholder=\"Comments\" autocomplete=\"off\" type=\"text\" formControlName=\"comment\">\r\n          </mat-form-field>\r\n        </div>\r\n  \r\n      </form>\r\n  \r\n    </div>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end pt-4\">\r\n    <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn class=\"ml-3\" mat-button [disabled]=\"declineReleaseStudentForm.invalid\" cdkFocusInitial (click)=\"onSubmit()\">Save</drdp-btn>\r\n  </div>","import { Component, Inject, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\nimport { ClassDeclineReleaseReason } from \"@core/enums/student-request-reason\";\r\nimport { LookupService } from \"@core/services/lookup.service\";\r\nimport { StudentRequestService } from \"@core/services/student-request.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { Observable, take } from \"rxjs\";\r\n\r\n\r\n@Component({\r\n    selector: 'drdp-decline-release-student',\r\n    templateUrl: './decline-release-student.component.html',\r\n    styleUrls: ['./decline-release-student.component.scss'],\r\n})\r\nexport class DeclineReleaseStudentComponent implements OnInit {\r\n    child: any;\r\n    declineReleaseStudentForm: FormGroup | any;\r\n    declineReleaseReasons$?: Observable<any>;\r\n    isOther: boolean = false;\r\n    declineReleaseReasonName: string = '';\r\n\r\n    get classReleaseReasonId() {\r\n        return this.declineReleaseStudentForm.get('classDeclineReleaseReasonId');\r\n    }\r\n    get comment() {\r\n        return this.declineReleaseStudentForm.get('comment');\r\n    }\r\n\r\n    constructor(\r\n        public dialogRef: MatDialogRef<DeclineReleaseStudentComponent>,\r\n        private lookup: LookupService,\r\n        private toastService: ToastService,\r\n        private studentRequestService: StudentRequestService,\r\n        private fb: FormBuilder,\r\n        @Inject(MAT_DIALOG_DATA) public data: any\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.initializeForm();\r\n        this.getDeclineReleaseReasons();\r\n    }\r\n\r\n    initializeForm(): void {\r\n        this.declineReleaseStudentForm = this.fb.group({\r\n            classDeclineReleaseReasonId: [null, Validators.required],\r\n            comment: [null],\r\n        });\r\n\r\n        this.child = this.data;\r\n    }\r\n\r\n    getDeclineReleaseReasons() {\r\n        this.declineReleaseReasons$ = this.lookup.getClassDeclineReleaseReasons();\r\n    }\r\n\r\n    getSelectedDeclineReleaseReason(event: any) {\r\n        if (event.id === ClassDeclineReleaseReason.Other) {\r\n            this.isOther = true;\r\n        }\r\n        else {\r\n            this.isOther = false;\r\n            this.comment.setValue(null);\r\n        }\r\n\r\n        this.declineReleaseReasonName = event?.declineReleaseReason;\r\n    }\r\n\r\n    onSubmit() {\r\n        if (this.declineReleaseStudentForm.invalid) {\r\n            this.toastService.error('Please enter all required fields.');\r\n            return;\r\n        }\r\n\r\n        let data: any = this.declineReleaseStudentForm.value;\r\n        data.declineReleaseReasonName = this.declineReleaseReasonName;\r\n\r\n        this.dialogRef.close({ success: true, data: data });\r\n    }\r\n\r\n}","<div class=\"px-5\">\r\n  <div class=\"flex justify-between pt-5\">\r\n    <drdp-title title=\"Pending Release Request\"></drdp-title>\r\n  </div>\r\n  <drdp-container class=\"p-5\">\r\n    <div class=\"rounded-lg\">\r\n      <div>\r\n        <drdp-container color=\"lightBlue\" additionClasses=\"w-full p-4\">\r\n          <form class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-3 gap-4\"\r\n            [formGroup]=\"releaseRequestSearchForm\" (ngSubmit)=\"search()\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId?.value\" (state)=\"handleState($event)\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-state>\r\n            <drdp-select-agency #agencySelect (agency)=\"handleAgency($event)\" [stateId]=\"stateId?.value\"\r\n            [initialAgencyId]=\"agencyId?.value\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-agency>\r\n            <div class=\"col-span-1 select-input h-full grid space-between\">\r\n              <drdp-select-site #siteSelect label=\"Site\" (site)=\"handleSites($event)\"\r\n              [agencyId]=\"agencyId.value\" [clear]=\"clearDropdowns\">\r\n              </drdp-select-site>\r\n            </div>\r\n            <div class=\"col-span-1 select-input h-full grid space-between\">\r\n              <drdp-filter-select #classSelect label=\"Classroom\" [options]=\"classrooms\" [selectType]=\"selectClass\"\r\n                (onSelected)=\"handleClassroom($event)\">\r\n              </drdp-filter-select>\r\n            </div>\r\n            <div class=\"col-span-1 h-full grid space-between\">\r\n              <label class=\"font-bold\">First Name</label>\r\n              <div class=\"basis-1/2 border-b border-black\">\r\n                <input matInput placeholder=\"First Name\" formControlName=\"firstName\"\r\n                  class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\">\r\n              </div>\r\n            </div>\r\n            <div class=\"col-span-1 h-full grid space-between\">\r\n              <label class=\"font-bold\">Last Name</label>\r\n              <div class=\"basis-1/2 border-b border-black\">\r\n                <input matInput placeholder=\"Last Name\" formControlName=\"lastName\"\r\n                  class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\">\r\n              </div>\r\n            </div>\r\n            <div class=\"flex flex-row w-full\">\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\" class=\"self-end\" type=\"button\">\r\n                Clear\r\n              </drdp-btn>\r\n              <drdp-btn class=\"flex-grow self-end pl-3\" type=\"submit\" additionalClasses=\"w-full\">\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n          </form>\r\n        </drdp-container>\r\n\r\n        <div class=\"overflow-x-auto\">\r\n          <div *ngFor=\"let item of tableData; let i = index\" class=\"grid grid-flow-col gap-2 border-b pt-5 pb-2\">\r\n            <div class=\"w-48\">\r\n              <div class=\"font-bold\">Child Name</div>\r\n              <p class=\"pt-2 break-words\">{{ item.studentName }}</p>\r\n            </div>\r\n            <div class=\"w-32\" *drdpCheckPermission=\"Permission.ViewSensitiveStudentTransferInfo\">\r\n              <div class=\"font-bold\">DOB</div>\r\n              <p class=\"pt-2 break-words\">{{ item.dob | date:'shortDate' }}</p>\r\n            </div>\r\n            <div class=\"w-48\" *drdpCheckPermission=\"Permission.ViewSensitiveStudentTransferInfo\">\r\n              <div class=\"font-bold\">Site</div>\r\n              <p class=\"pt-2 break-words\">{{ item.fromSiteName }}</p>\r\n            </div>\r\n            <div class=\"w-48\" *drdpCheckPermission=\"Permission.ViewSensitiveStudentTransferInfo\">\r\n              <div class=\"font-bold\">Classroom</div>\r\n              <p class=\"pt-2 break-words\">{{ item.fromClassroomName }}</p>\r\n            </div>\r\n            <div class=\"w-64\">\r\n              <div class=\"font-bold\">Release Request Reason</div>\r\n              <div class=\"pt-2 break-words\">{{ item.classReleaseReasonName }}</div>\r\n            </div>\r\n            <div class=\"w-48\">\r\n              <div class=\"font-bold\">Release Request Date</div>\r\n              <div class=\"pt-2 break-words\">{{ item.createdOn | date:'shortDate' }}</div>\r\n            </div>\r\n            <div class=\"w-64\" *drdpCheckPermission=\"Permission.ViewSensitiveStudentTransferInfo\">\r\n              <div class=\"font-bold\">Requested By</div>\r\n              <p class=\"pt-2 break-words\">{{ item.requestedBy }}</p>\r\n            </div>\r\n            <div class=\"w-64\" *drdpCheckPermission=\"Permission.ViewSensitiveStudentTransferInfo\">\r\n              <div class=\"font-bold\">Requester Agency</div>\r\n              <p class=\"pt-2 break-words\">{{ item.requesterAgencyName }}</p>\r\n            </div>\r\n            <div class=\"w-64\">\r\n              <div class=\"font-bold\">Requester Comment</div>\r\n              <p class=\"pt-2 break-words\">{{ item.comment }}</p>\r\n            </div>\r\n            <div class=\"w-48\">\r\n              <div class=\"font-bold\">Decline Reason</div>\r\n              <div class=\"pt-2 break-words\">{{ item.declineReleaseReasonName }}</div>\r\n            </div>\r\n            <div>\r\n              <div class=\"font-bold\">Decline</div>\r\n              <input class=\"accent-drdpgrey-200\" type=\"checkbox\"\r\n              [checked]=\"item.decline\" (change)=\"onDeclineChange($event,i)\">\r\n            </div>\r\n            <div class=\"pl-3\">\r\n              <div class=\"font-bold\">Accept</div>\r\n              <input class=\"accent-drdpgrey-200\" type=\"checkbox\"\r\n              [checked]=\"item.accept\" (change)=\"onAcceptChange($event,i)\">\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div mat-dialog-actions class=\"flex justify-end align-bottom pt-8\">\r\n        <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button type=\"button\" (click)=\"onCancel()\">\r\n          Cancel\r\n        </drdp-btn>\r\n        <drdp-btn mat-button type=\"submit\" (click)=\"onSubmit()\" cdkFocusInitial>\r\n          Save\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\nimport { SelectType } from \"@core/enums/select\";\r\nimport { ClassDeclineReleaseReason, StudentRequestReason } from \"@core/enums/student-request-reason\";\r\nimport { IAgency } from \"@core/interfaces/iagency\";\r\nimport { IClassExitReason } from \"@core/interfaces/iclasses\";\r\nimport { ISites } from \"@core/interfaces/isites\";\r\nimport { IState } from \"@core/interfaces/istate\";\r\nimport { IStudentPendingReleaseRequest, IStudentRequest, IStudentRequestSearch } from \"@core/interfaces/istudent-request\";\r\nimport { AuthService } from \"@core/services/auth.service\";\r\nimport { ClassroomService } from \"@core/services/classroom.service\";\r\nimport { mapClassResToDRDPSelect } from \"@core/services/helper.service\";\r\nimport { SiteService } from \"@core/services/site.service\";\r\nimport { StudentRequestService } from \"@core/services/student-request.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { combineLatest, Observable, take } from \"rxjs\";\r\nimport { DeclineReleaseStudentComponent } from \"./decline-release-student/decline-release-student.component\";\r\nimport { Permission } from \"@core/enums/permissions\";\r\nimport { SelectAgencyComponent } from \"@shared/components/dropdowns/select-agency/select-agency.component\";\r\nimport { SelectStateComponent } from \"@shared/components/dropdowns/select-state/select-state.component\";\r\n\r\n@Component({\r\n    selector: 'drdp-pending-releases',\r\n    templateUrl: './pending-releases.component.html',\r\n    styleUrls: ['./pending-releases.component.scss'],\r\n})\r\nexport class PendingReleasesComponent implements OnInit {\r\n    @ViewChildren(FilterSelectComponent) selectComponents:\r\n        | QueryList<FilterSelectComponent>\r\n        | undefined;\r\n    @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n    @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n    @ViewChild('siteSelect') siteSelect: SelectStateComponent | undefined;\r\n\r\n    searchPayload!: IStudentRequestSearch;\r\n\r\n    user = this.authService.getCurrentUser();\r\n    canViewMultipleAgencies!: boolean;\r\n\r\n    searchDropdownOptions$!: Observable<any>;\r\n    selectSites = SelectType.Sites;\r\n    selectClass = SelectType.Class;\r\n    exitReasons!: IClassExitReason[];\r\n    agencies!: IAgency[];\r\n    sites!: ISites[];\r\n    classrooms!: any[];\r\n    Permission = Permission;\r\n    initialAgencyId?: number | undefined = !this.canViewMultipleAgencies\r\n        ? this.user.agencyId\r\n        : undefined;\r\n    stateSearchId?= this.user.stateId;\r\n    clearDropdowns = false;\r\n\r\n    studentRequestPayload: IStudentRequest[] = [];\r\n    originalData: IStudentRequest[] = [];\r\n    existingData?: any;\r\n    tableData?: any;\r\n\r\n    releaseRequestSearchForm: FormGroup | any;\r\n    get firstName() {\r\n        return this.releaseRequestSearchForm.get('firstName');\r\n    }\r\n    get lastName() {\r\n        return this.releaseRequestSearchForm.get('lastName');\r\n    }\r\n    get stateId() {\r\n        return this.releaseRequestSearchForm.get('stateId');\r\n    }\r\n    get agencyId() {\r\n        return this.releaseRequestSearchForm.get('agencyId');\r\n    }\r\n    get classroomId() {\r\n        return this.releaseRequestSearchForm.get('classroomId');\r\n    }\r\n    get fromSiteId() {\r\n        return this.releaseRequestSearchForm.get('fromSiteId');\r\n    }\r\n\r\n    constructor(\r\n        private studentRequestsService: StudentRequestService,\r\n        public modal: MatDialog,\r\n        private authService: AuthService,\r\n        private toastService: ToastService,\r\n        public fb: FormBuilder,\r\n        private router: Router,\r\n        private siteService: SiteService,\r\n        private classroomService: ClassroomService) { }\r\n\r\n    ngOnInit(): void {\r\n        this.setDefaultPayload();\r\n        this.initializeSearchForm();\r\n\r\n        if (this.user.stateId) {\r\n            this.searchPayload.stateId = this.user.stateId;\r\n        }\r\n        if (this.user.agencyId) {\r\n            this.searchPayload.agencyId = this.user.agencyId;\r\n            this.siteService.getSitesByAgencyId(this.user.agencyId).pipe(take(1)).subscribe(result=> {\r\n              this.sites = result;\r\n            })\r\n\r\n        }\r\n        this.canViewMultipleAgencies =\r\n            this.authService.isSuperAdmin() || this.authService.isCustomerService();\r\n\r\n        this.getPendingReleases();\r\n        this.stateId.setValue(this.stateSearchId);\r\n        this.agencyId.setValue(this.initialAgencyId);\r\n    }\r\n\r\n    setDefaultPayload(): void {\r\n        this.searchPayload = {\r\n            requestReasonId: StudentRequestReason.Release,\r\n        };\r\n    }\r\n\r\n    initializeSearchForm(): void {\r\n        this.releaseRequestSearchForm = this.fb.group({\r\n            stateId: [null],\r\n            agencyId: [null],\r\n            classroomId: [null],\r\n            fromSiteId: [null],\r\n            firstName: [null, [Validators.maxLength(100)]],\r\n            lastName: [null, [Validators.maxLength(100)]],\r\n        });\r\n    }\r\n\r\n    onDeclineChange(event: any, index: number) {\r\n        const data = this.tableData[index];\r\n\r\n        if (event.target.checked)\r\n            this.openDeclineReleaseRequestModal(data);\r\n        else {\r\n            data.classDeclineReleaseReasonId = null;\r\n            data.declineReleaseReasonName = null;\r\n            data.adminComment = null;\r\n            data.decline = false;\r\n            if (!data.accept) {\r\n                data.accept = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    onAcceptChange(event: any, index: number) {\r\n        const data = this.tableData[index];\r\n        data.decline = null;\r\n        data.accept = !data.accept ? true : null;\r\n        if (!data.accept) {\r\n            data.decline = false;\r\n        }\r\n\r\n        if (event.target.checked) {\r\n\r\n            data.classDeclineReleaseReasonId = null;\r\n            data.declineReleaseReasonName = null;\r\n            data.adminComment = null;\r\n        }\r\n    }\r\n\r\n    openDeclineReleaseRequestModal(event: any) {\r\n        if (event) {\r\n            const modalRef = this.modal.open(DeclineReleaseStudentComponent, {\r\n                data: event ? event : undefined,\r\n            });\r\n\r\n            modalRef.afterClosed().subscribe((res) => {\r\n                if (res.success) {\r\n                    event.classDeclineReleaseReasonId = res?.data?.classDeclineReleaseReasonId;\r\n                    event.declineReleaseReasonName = event.classDeclineReleaseReasonId === ClassDeclineReleaseReason.Other ? res?.data?.declineReleaseReasonName + ': ' + res?.data?.comment : res?.data?.declineReleaseReasonName;\r\n                    event.adminComment = res?.data?.comment;\r\n                    event.accept = null;\r\n                    event.decline = true;\r\n                    if (event.decline) {\r\n                        event.accept = false;\r\n                    }\r\n                } else {\r\n                    event.decline = null;\r\n                }\r\n            });\r\n        } else {\r\n            this.toastService.error('No Student Data Present');\r\n        }\r\n    }\r\n\r\n    getPendingReleases(): void {\r\n        this.studentRequestsService\r\n            .getByReasonAndAgency(this.searchPayload)\r\n            .subscribe((res: any) => {\r\n                if (res) {\r\n                    this.tableData = res;\r\n                }\r\n            });\r\n    }\r\n\r\n    handleState(state: IState) {\r\n        if (!state) {\r\n            this.stateId.setValue(null);\r\n            this.agencyId.setValue(null);\r\n            this.clearDropdownOptions();\r\n        } else if (state.id == this.stateId.value) {\r\n            return;\r\n        } else {\r\n            this.stateId.setValue(state.id);\r\n        }\r\n    }\r\n\r\n    handleAgency(agency: IAgency) {\r\n        if (!agency) {\r\n            this.agencyId.setValue(null);\r\n            this.clearDropdownOptions();\r\n        } else if (agency.id == this.agencyId.value) {\r\n            return;\r\n        } else {\r\n            this.agencyId.setValue(agency.id);\r\n            this.searchDropdownOptions$ = combineLatest({\r\n                sites: this.siteService.getSitesByAgencyId(agency.id),\r\n                classrooms: this.classroomService.getClassroomsByAgency(agency.id),\r\n            });\r\n            this.searchDropdownOptions$.pipe(take(1)).subscribe((res: any) => {\r\n                this.sites = res['sites'];\r\n                this.classrooms = mapClassResToDRDPSelect(res['classrooms']);\r\n            });\r\n        }\r\n    }\r\n\r\n    handleSites(site: any): void {\r\n        if (!site || site == undefined) {\r\n            this.classrooms = [];\r\n            this.fromSiteId.setValue(null);\r\n            this.classroomId.setValue(null);\r\n\r\n            return;\r\n        }\r\n\r\n        this.fromSiteId.setValue(site.id);\r\n        this.classroomService\r\n            .getClassroomsBySite(site.id)\r\n            .pipe(take(1))\r\n            .subscribe((res: any) => {\r\n                this.classrooms = mapClassResToDRDPSelect(res, true);\r\n            });\r\n    }\r\n\r\n    handleClassroom(classroom: any): void {\r\n        this.classroomId.setValue(null);\r\n        if (!classroom) {\r\n            return;\r\n        }\r\n        this.classroomId.setValue(classroom.id);\r\n    }\r\n\r\n    clearDropdownOptions(): void {\r\n        this.sites = [];\r\n        this.fromSiteId?.setValue(null);\r\n        this.classrooms = [];\r\n        this.classroomId?.setValue(null);\r\n    }\r\n\r\n    search() {\r\n        this.searchPayload.firstName = this.firstName?.value;\r\n        this.searchPayload.lastName = this.lastName?.value;\r\n        this.searchPayload.agencyId = this.canViewMultipleAgencies\r\n            ? this.agencyId?.value\r\n            : this.user.agencyId;\r\n        this.searchPayload.stateId = this.stateId?.value;\r\n        this.searchPayload.fromSiteId = this.fromSiteId?.value;\r\n        this.searchPayload.classroomId = this.classroomId?.value;\r\n        this.getPendingReleases();\r\n    }\r\n\r\n    onClear() {\r\n        this.clearDropdownOptions();\r\n        this.clearDropdowns = !this.clearDropdowns;\r\n        this.agencySelect?.clearSelected();\r\n        this.stateSelect?.clearSelected();\r\n        this.siteSelect?.clearSelected();\r\n        this.firstName?.setValue(null);\r\n        this.lastName?.setValue(null);\r\n\r\n        this.stateSearchId = undefined;\r\n        this.initialAgencyId = undefined;\r\n\r\n        this.setDefaultPayload();\r\n        this.getPendingReleases();\r\n    }\r\n\r\n    onCancel() {\r\n      this.router.navigateByUrl('/dashboard');\r\n    }\r\n\r\n    onSubmit() {\r\n        // Filter out items without data to update\r\n        const dataToUpdate = this.tableData.filter((data: any) => data.accept !== undefined && data.accept !== null);\r\n    \r\n        if (dataToUpdate.length == 0) {\r\n            this.toastService.error('No request to be updated.');\r\n            return;\r\n        }\r\n    \r\n        const payload = dataToUpdate.map((d: any) => {\r\n            const request: IStudentPendingReleaseRequest = {\r\n                ...d,\r\n                agencyId: this.searchPayload.agencyId\r\n            };\r\n            return request;\r\n        });\r\n    \r\n        this.studentRequestsService\r\n            .processBulkReleaseUpdates(\r\n                payload,\r\n                'Release requests have been updated.'\r\n            )\r\n            .subscribe((res: any) => {\r\n                if (res) {\r\n                    this.existingData = null;\r\n                    this.getPendingReleases();\r\n                }\r\n            });\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BlobServiceClient, ContainerClient } from '@azure/storage-blob';\r\nimport { environment } from 'src/environments/environment';\r\nimport {\r\n  Observable,\r\n  from,\r\n  throwError,\r\n  catchError,\r\n  map,\r\n  EMPTY,\r\n  of,\r\n  forkJoin,\r\n} from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class BlobStorageService {\r\n  private accountName = environment.storageName;\r\n\r\n  constructor() {}\r\n\r\n  uploadFile(\r\n    file: File,\r\n    fileName: string,\r\n    container: string,\r\n    sasToken: string,\r\n    onProgress: (ev: any) => void\r\n  ): Observable<any> {\r\n    const containerClient = this.containerClient(sasToken, container);\r\n    const blockBlobClient = containerClient.getBlockBlobClient(fileName);\r\n\r\n    const blobOptions = {\r\n      blobHTTPHeaders: {\r\n        blobContentType: file.type,\r\n      },\r\n    };\r\n\r\n    // Use the uploadData method to upload the file as a buffer\r\n    return from(\r\n      blockBlobClient.uploadData(file, {\r\n        blobHTTPHeaders: {\r\n          blobContentType: file.type,\r\n        },\r\n        onProgress,\r\n      })\r\n    ).pipe(\r\n      map(() => {\r\n        return {\r\n          displayUrl: `https://${this.accountName}.blob.core.windows.net/${container}/${fileName}${sasToken}`,\r\n          url: `https://${this.accountName}.blob.core.windows.net/${container}/${fileName}`,\r\n        };\r\n      })\r\n    );\r\n  }\r\n\r\n  uploadMultipleFiles(\r\n    files: File[],\r\n    container: string,\r\n    sasToken: string,\r\n    onProgress: (ev: any) => void,\r\n    studentEnrollementId?: number\r\n  ): Observable<any> {\r\n    const containerClient = this.containerClient(sasToken, container);\r\n\r\n    const uploadObservables = files.map((file) => {\r\n      let fileName = '';\r\n      if (studentEnrollementId) {\r\n        fileName = `${studentEnrollementId}/${\r\n          file.name\r\n        }-${new Date().toISOString()}`;\r\n      } else {\r\n        fileName = `${file.name}-${new Date(new Date()).toLocaleDateString(\r\n          'en-US'\r\n        )}`;\r\n      }\r\n      const blockBlobClient = containerClient.getBlockBlobClient(fileName);\r\n\r\n      const blobOptions = {\r\n        blobHTTPHeaders: {\r\n          blobContentType: file.type,\r\n        },\r\n      };\r\n\r\n      return from(\r\n        blockBlobClient.uploadData(file, {\r\n          blobHTTPHeaders: {\r\n            blobContentType: file.type,\r\n          },\r\n          onProgress,\r\n        })\r\n      ).pipe(\r\n        map(() => ({\r\n          displayUrl: `https://${this.accountName}.blob.core.windows.net/${container}/${fileName}${sasToken}`,\r\n          url: `https://${this.accountName}.blob.core.windows.net/${container}/${fileName}`,\r\n          fileName: fileName\r\n        }))\r\n      );\r\n    });\r\n\r\n    return forkJoin(uploadObservables);\r\n  }\r\n\r\n  deleteFile(\r\n    fileName: string,\r\n    container: string,\r\n    sasToken: string\r\n  ): Observable<boolean> {\r\n    const containerClient = this.containerClient(sasToken, container);\r\n\r\n    return from(containerClient.deleteBlob(fileName)).pipe(\r\n      map(() => true),\r\n      catchError((error) => {\r\n        return of(false); // Return false to indicate deletion failure\r\n      })\r\n    );\r\n  }\r\n\r\n  private containerClient(\r\n    sasToken: string,\r\n    container: string\r\n  ): ContainerClient {\r\n    const blobUrl = `https://${this.accountName}.blob.core.windows.net/${sasToken}`;\r\n    return new BlobServiceClient(blobUrl).getContainerClient(container);\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'filter'\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n  transform(items?: any[], property?: string, searchTerm?: any): any[] {\r\n    if (!items || !searchTerm) {\r\n      return items || [];\r\n    }\r\n    return items.filter(item => {\r\n      return item[property!] == searchTerm;\r\n    });\r\n  }\r\n}\r\n\r\n","<div>\r\n    <div>\r\n        <div class=\"flex justify-between\">\r\n            <drdp-title title=\"{{formStep === step.StepOne ? 'Add Evidence' : 'Preliminary Ratings'}}\"></drdp-title>\r\n            <drdp-btn color=\"outline\" (click)=\"back()\">Go Back</drdp-btn>\r\n        </div>\r\n        <h1 class=\"mb-2 mt-0 text-1xl leading-tight\"><b>Rating Period:</b> {{ params && params.ratingPeriodName }}\r\n        </h1>\r\n        <h2 class=\"mb-2 mt-0 text-1xl leading-tight\"><b>Classroom:</b> {{ params && params.classroomName }}</h2>\r\n        <h2 class=\"mb-2 mt-0 text-1xl leading-tight\"><b>Age Group/Instrument:</b> {{params &&\r\n            params.ageGradeInstrumentName }}</h2>\r\n        <h2 class=\"mb-2 mt-0 text-1xl leading-tight\"><b>Child/Children:</b> {{ studentNames }}</h2>\r\n        <div *ngIf=\"formStep === step.StepOne && !params?.isPilot\" class=\"mb-2 mt-0 text-1xl text-end\">\r\n            <mat-slide-toggle color=\"primary\" class=\"pr-1\" (change)=\"toggleFutureRatingPeriod()\"\r\n            [ngModelOptions]=\"{ standalone: true }\" aria-label=\"Slider Toggle\">\r\n        </mat-slide-toggle>Save to evidence library for future rating period\r\n        </div>\r\n    </div>\r\n    <drdp-container *ngIf=\"formStep === step.StepOne\">\r\n        <div class=\"p-2 w-full\">\r\n            <h1 class=\"mb-2 font-bold mt-0 text-2xl leading-tight\">Choose Evidence</h1>\r\n            <div class=\"flex justify-evenly\">\r\n                <div *ngFor=\"let evidence of evidences; let i = index\" class=\"w-1/6 my-2\">\r\n                    <div class=\"tiles mx-auto px-4 pb-4 text-center mb-4\" (click)=\"onTilesClick(i, evidence.type)\"\r\n                        [class.active]=\"selectedIndex === i\">\r\n                        <i class=\"text-[60px] {{evidence.icon}}\"></i>\r\n                        <p class=\"text-[15px]\">{{ evidence.name }}</p>\r\n                    </div>\r\n                    <span *ngIf=\"evidence.type != PortfolioEvidenceType.Note\" class=\"text-center\">\r\n                      <p>Allowed type:</p>\r\n                      <p>{{evidence.allowedType}}</p>\r\n                    </span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div *ngIf=\"selectedIndex != null\">\r\n\r\n            <ng-container *ngIf=\"selectedEvidenceType != PortfolioEvidenceType.Note\">\r\n                <h1 class=\"mb-2 font-bold pt-5 mt-0 text-1xl leading-tight\">Add {{ uploadSettings.uploadText\r\n                    }}<b></b>\r\n                </h1>\r\n                <label for=\"images\" class=\"drop-container\" (drop)=\"fileDropHandler($event)\">\r\n                    <i class=\"text-[60px] {{ uploadSettings.uploadIcon }}\"></i>\r\n                    <span class=\"drop-title\">SELECT {{ selectedEvidenceType === PortfolioEvidenceType.Audio ? 'AN' :\r\n                        'A'\r\n                        }} {{ uploadSettings.uploadText.toUpperCase() }} FILE TO\r\n                        UPLOAD</span>\r\n                    <span class=\"text-drdpblue-300 text-[15px] underline\">Or drag and drop it here</span>\r\n                    <input class=\"invisible\" #addPhotosFileInput type=\"file\" id=\"images\" (change)=\"onSelectFile($event)\"\r\n                        accept=\"{{acceptedFiles}}\" [multiple]=\"allowMultiple\" onclick=\"this.value = null\" (click)=\"onFileClick($event)\">\r\n                </label>\r\n\r\n                <h1 *ngIf=\"url\" class=\"mb-2 font-bold pt-5 mt-0 text-1xl leading-tight\">Uploaded {{\r\n                    uploadSettings.uploadText }}<b></b>\r\n                </h1>\r\n                <h1 *ngIf=\"isFileUploading\" class=\"mb-2 font-bold pt-5 mt-0 text-1xl leading-tight\">Uploading: {{\r\n                    progress.toFixed(2) }}%<b></b>\r\n                </h1>\r\n                <mat-progress-bar *ngIf=\"isFileUploading\" mode=\"determinate\"\r\n                    value=\"{{progress.toFixed(2)}}\"></mat-progress-bar>\r\n\r\n                <div *ngIf=\"url\" class=\"w-full\">\r\n                    <drdp-video *ngIf=\"selectedEvidenceType === PortfolioEvidenceType.Video\"\r\n                        [url]=\"displayUrl\"></drdp-video>\r\n                    <drdp-audio *ngIf=\"selectedEvidenceType === PortfolioEvidenceType.Audio\"\r\n                        [url]=\"displayUrl\"></drdp-audio>\r\n                        <div class=\"grid grid-cols-2 gap-4\">\r\n\r\n                          <div *ngFor=\"let links of files\">\r\n                            <div class=\"w-fit\">\r\n                              <img *ngIf=\"selectedEvidenceType === PortfolioEvidenceType.Photo\" [src]=\"links.displayUrl\"\r\n                              class=\"w-full\" />\r\n                              <div class=\"flex flex-row justify-between\">\r\n                                <p class=\" text-xs\">\r\n                                    {{ links.fileName }}\r\n                                </p>\r\n                                <a class=\" text-sm text-red-800 cursor-pointer\" (click)=\"onFileRemove(links)\">\r\n                                    Remove\r\n                                </a>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                    <div *ngIf=\"selectedEvidenceType != PortfolioEvidenceType.Photo\" class=\"flow-root \">\r\n                        <p class=\"float-left text-xs\">\r\n                            {{ displayFileName }}\r\n                        </p>\r\n                        <a class=\"float-right text-sm text-red-800 cursor-pointer\" (click)=\"onFileRemove()\">\r\n                            Remove\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n            </ng-container>\r\n\r\n            <ng-container>\r\n                <h1 class=\"mb-2 font-bold pt-8 mt-0 text-1xl leading-tight\">Add Notes<b></b></h1>\r\n                <textarea rows=\"10\" [(ngModel)]=\"notes\" class=\"portfolio-textarea w-full\" matInput></textarea>\r\n            </ng-container>\r\n\r\n            <ng-container>\r\n                <h1 class=\"mb-2 font-bold pt-5 mt-0 text-1xl leading-tight\">Assign Evidence<b></b></h1>\r\n                <div class=\"grid grid-cols-2 md:grid-cols-8 mt-4\">\r\n                    <ng-container *ngIf=\"!isFutureRatingPeriod; else futureDomains\">\r\n                        <div *ngFor=\"let domain of templateDomains\" class=\"col-span-1\">\r\n                            <h4 class=\"text-[16px] font-bold mb-2\">{{domain.domainCode}}</h4>\r\n                            <mat-checkbox class=\"font-medium\" [checked]=\"domain.isAllSelected\"\r\n                                [(ngModel)]=\"domain.isAllSelected\"\r\n                                (change)=\"onDomainSelectChange($event.checked, domain)\"\r\n                                [ngModelOptions]=\"{standalone: true}\">\r\n                                {{domain.domainCode}}\r\n                            </mat-checkbox>\r\n                            <div class=\"ml-4\">\r\n                                <div *ngFor=\"let measure of domain.measures\">\r\n                                    <mat-checkbox class=\"font-medium\"\r\n                                        (change)=\"onMeasureSelectChange($event.checked, domain)\"\r\n                                        [(ngModel)]=\"measure.isSelected\" [ngModelOptions]=\"{standalone: true}\">\r\n                                        {{measure.code}}\r\n                                    </mat-checkbox>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </ng-container>\r\n                    <ng-template #futureDomains>\r\n                        <div *ngFor=\"let domain of masterDomains\" class=\"col-span-1\">\r\n                            <h4 class=\"text-[16px] font-bold mb-2\">{{domain.domainCode}}</h4>\r\n                            <mat-checkbox class=\"font-medium\" [checked]=\"domain.isAllSelected\"\r\n                                [(ngModel)]=\"domain.isAllSelected\"\r\n                                (change)=\"onFutureDomainSelectChange($event.checked, domain)\"\r\n                                [ngModelOptions]=\"{standalone: true}\">\r\n                                {{domain.domainCode}}\r\n                            </mat-checkbox>\r\n                            <div class=\"ml-4\">\r\n                                <div *ngFor=\"let measure of masterMeasures | filter: 'masterDomainId': domain.id\">\r\n                                    <mat-checkbox class=\"font-medium\"\r\n                                        (change)=\"onMeasureSelectChange($event.checked, domain)\"\r\n                                        [(ngModel)]=\"measure.isSelected\" [ngModelOptions]=\"{standalone: true}\">\r\n                                        {{measure.measureCode}}\r\n                                    </mat-checkbox>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </ng-template>\r\n\r\n                </div>\r\n            </ng-container>\r\n\r\n            <div class=\"w-1/3\">\r\n                <drdp-date-picker\r\n                    label=\"Date of Collected Evidence\"\r\n                    [isRequired]=\"true\"\r\n                    [isReadOnly]=\"false\"\r\n                    [minDate]=\"minStartDate\"\r\n                    [maxDate]=\"today\"\r\n                    (emitDate)=\"handleDate($event)\">\r\n              </drdp-date-picker>\r\n            </div>\r\n        </div>\r\n    </drdp-container>\r\n\r\n    <drdp-container *ngIf=\"formStep === step.StepTwo\" additionClasses=\"min-h-[2rem] mt-4 p-4\">\r\n        <h1 class=\"mb-2 font-bold mt-0 text-2xl leading-tight\">Assigned Evidence <b></b></h1>\r\n        <p class=\"helper-text\">A Preliminary Rating is not required.  Please check the box/boxes of the measures you would like to save your evidence to and click on the save button prior to leaving this page.</p>\r\n        <div class=\"grid grid-cols-3 gap-4\">\r\n            <div>\r\n                <label class=\"font-bold\"> Selected Students</label>\r\n            </div>\r\n            <div>\r\n                <label class=\"font-bold\"> {{uploadSettings.uploadText}} Evidence</label>\r\n            </div>\r\n            <div>\r\n                <label class=\"font-bold\"> Preliminary Rating</label>\r\n            </div>\r\n        </div>\r\n\r\n        <div *ngIf=\"!isFutureRatingPeriod\">\r\n            <div *ngFor=\"let item of addPortfolioModel.evidences; let isLast = last\" class=\"grid grid-cols-3 gap-4\"\r\n                [ngClass]=\"{'border-b': !isLast}\">\r\n                <div>\r\n                    <div>{{item.name}}</div>\r\n                </div>\r\n                <div>\r\n                    <div *ngFor=\"let measure of item.measures\">\r\n                        <mat-checkbox class=\"font-medium my-3\" [(ngModel)]=\"measure.isSelected\"\r\n                            [ngModelOptions]=\"{standalone: true}\">\r\n                            {{measure.code}}\r\n                        </mat-checkbox>\r\n                    </div>\r\n                </div>\r\n                <div>\r\n                    <div *ngFor=\"let measure of item.measures\" class=\"mt-1 mb-3\">\r\n                        <drdp-btn color=\"outline\" (click)=\"openInputRatingModal(measure)\">\r\n                            Rate {{measure.code}} <i\r\n                                class=\"text-drdpblue-300 text-xl uil uil-check-circle {{measure.measureValue ? 'text-green-800' : 'text-gray-500'}}\"></i></drdp-btn>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n\r\n        <div *ngIf=\"isFutureRatingPeriod\" class=\"p-4\">\r\n            <div *ngFor=\"let item of addPortfolioModel.evidences; let isLast = last\" \r\n                 class=\"grid grid-cols-3 gap-4 h-full\" [ngClass]=\"{'border-b': !isLast}\">\r\n                <div class=\"flex flex-col justify-start space-y-2 h-full\">\r\n                    <div>{{item.name}}</div>\r\n                </div>\r\n                \r\n                <div class=\"flex flex-col justify-start space-y-2 h-full\">\r\n                    <div *ngFor=\"let measure of item.measures\" class=\"my-2\">\r\n                        <mat-checkbox class=\"my-2\" [(ngModel)]=\"measure.isSelected\" \r\n                            [ngModelOptions]=\"{standalone: true}\">\r\n                            {{measure.measureCode}}\r\n                        </mat-checkbox>\r\n                    </div>\r\n                </div>\r\n                \r\n                <div class=\"flex flex-col justify-between space-y-2 h-full\">\r\n                    <div *ngFor=\"let measure of item.measures\" class=\"my-2\">\r\n                        <drdp-btn [color]=\"measure.measureId ? 'outline' : 'outlineRed'\" \r\n                            (click)=\"measure.measureId && openInputRatingModal(measure)\">\r\n                            <span *ngIf=\"measure.measureId; else unavailableLevel\">\r\n                                Rate {{measure.measureCode}}\r\n                                <i class=\"text-drdpblue-300 text-md uil uil-check-circle\" \r\n                                   [ngClass]=\"{'text-green-800': measure.measureValue, 'text-gray-200': !measure.measureValue}\"></i>\r\n                            </span>\r\n                            <ng-template #unavailableLevel>{{measure.measureCode}} not available for age grade</ng-template>\r\n                        </drdp-btn>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        \r\n    </drdp-container>\r\n\r\n    <div class=\"mt-5 mb-20 flex justify-end\">\r\n        <drdp-btn *ngIf=\"formStep === step.StepTwo\" class=\"pr-4\" (click)=\"cancel()\" color=\"cancel\" type=\"button\">\r\n            Cancel\r\n        </drdp-btn>\r\n        <drdp-btn type=\"submit\" [disabled]=\"disableSave\" class=\"float-right\" (click)=\"onSaveEvidence()\">{{formStep === step.StepOne\r\n            ? 'Next' :\r\n            'Save'}}\r\n        </drdp-btn>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { Observable, of, pipe, take } from 'rxjs';\r\nimport {\r\n  AddEvidenceFormStep,\r\n  PortfolioEvidenceType,\r\n} from '@core/enums/portfolio';\r\nimport {\r\n  IPortfolioAddEvidenceParams,\r\n  IPortfolioAddModel,\r\n  IPortfolioEvidence,\r\n  IPortfolioPhotoEvidence,\r\n} from '@core/interfaces/iportfolio';\r\nimport { BlobStorageService } from '@core/services/blob-storage.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { PortfolioInputRatingModalComponent } from '../portfolio-input-rating-modal/portfolio-input-rating-modal.component';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\nimport { cleanFileName, trimHTTPS } from '@core/services/helper.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { IGlobalRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { IMasterDomain, IMasterMeasure } from '@core/interfaces/imaster-domain';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n@Component({\r\n  selector: 'drdp-portfolio-add-evidence',\r\n  templateUrl: './portfolio-add-evidence.component.html',\r\n  styleUrls: ['./portfolio-add-evidence.component.scss'],\r\n})\r\nexport class PortfolioAddEvidence implements OnInit {\r\n  templateDomains: IBaseTemplateDomain[] = [];\r\n  originalTemplateDomains: IBaseTemplateDomain[] = [];\r\n  PortfolioEvidenceType = PortfolioEvidenceType;\r\n  selectedIndex: number | null = null;\r\n  selectedEvidenceType: number = 0;\r\n  displayUrl: string = '';\r\n  files: IPortfolioPhotoEvidence[] = [];\r\n  blobFiles: File[] = [];\r\n  url: string = '';\r\n  fileName: string = '';\r\n  displayFileName: string = '';\r\n  acceptedFiles: string = '';\r\n  blobFileName: string = '';\r\n  params: IPortfolioAddEvidenceParams | null = null;\r\n  studentNames: string = '';\r\n  container: string = 'portfolioEvidences';\r\n  addPortfolioModel!: IPortfolioAddModel;\r\n  addPortfolioModels: IPortfolioAddModel[] = [];\r\n  notes: string = '';\r\n  isTilesDisabled: boolean = false;\r\n  formStep: number = 1;\r\n  containerName: string = 'portfolio-evidences';\r\n  progress: number = 0;\r\n  isFileUploading: boolean = false;\r\n  returnUrl!: string;\r\n  disableSave = false;\r\n  selectedFile: File | null = null;\r\n  selectedFileUrl: string | ArrayBuffer | null = null;\r\n  blobResults: any[] = [];\r\n  allowMultiple: boolean = false;\r\n  selectedPhotoEvidence: boolean = false;\r\n  fileValid: boolean = false;\r\n  studentEnrollmentId: number = 0;\r\n  step = AddEvidenceFormStep;\r\n  collectedOn: string | null = null;\r\n  minStartDate: Date = new Date();\r\n  today: Date = new Date();\r\n  isFutureRatingPeriod: boolean = false;\r\n  isPilot: boolean = false;\r\n  masterDomains?: IMasterDomain[];\r\n  masterMeasures?: IMasterMeasure[];\r\n  ratingPeriodForm: FormGroup | any;\r\n\r\n  uploadSettings: any = {\r\n    uploadText: '',\r\n    uploadIcon: '',\r\n  };\r\n\r\n  evidences: IPortfolioEvidence[] = [\r\n    {\r\n      name: 'Add Photo',\r\n      icon: 'uil-images',\r\n      type: PortfolioEvidenceType.Photo,\r\n      allowedType: 'jpeg, png, gif',\r\n    },\r\n    {\r\n      name: 'Add Video',\r\n      icon: 'uil-video',\r\n      type: PortfolioEvidenceType.Video,\r\n      allowedType: 'mp4, mpeg, webm, ogg, mov',\r\n    },\r\n    {\r\n      name: 'Add Audio',\r\n      icon: 'uil-volume',\r\n      type: PortfolioEvidenceType.Audio,\r\n      allowedType: 'mpeg, wav, ogg',\r\n    },\r\n    {\r\n      name: 'Add Note',\r\n      icon: 'uil-notes',\r\n      type: PortfolioEvidenceType.Note,\r\n    }\r\n  ];\r\n\r\n  allowedTypes: Record<PortfolioEvidenceType, string[]> = {\r\n    [PortfolioEvidenceType.Photo]: ['image/jpeg', 'image/png', 'image/gif'],\r\n    [PortfolioEvidenceType.Video]: [\r\n      'video/mp4',\r\n      'video/mpeg',\r\n      'video/webm',\r\n      'video/ogg',\r\n      'video/quicktime',\r\n    ],\r\n    [PortfolioEvidenceType.Audio]: ['audio/mpeg', 'audio/wav', 'audio/ogg'],\r\n    [PortfolioEvidenceType.Note]: [],\r\n    [PortfolioEvidenceType.StructuredPrompt]: [\r\n      'image/jpeg',\r\n      'image/png',\r\n      'image/gif',\r\n      'application/msword',\r\n      'application/pdf',\r\n    ],\r\n  };\r\n\r\n  constructor(\r\n    private portfolioService: PortfolioService,\r\n    private lookupService: LookupService,\r\n    private route: ActivatedRoute,\r\n    private router: Router,\r\n    public modal: MatDialog,\r\n    private fb: FormBuilder,\r\n    private toast: ToastService,\r\n    private blobStorageService: BlobStorageService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    public dialog: MatDialog\r\n  ) {\r\n    this.ratingPeriodService\r\n      .getMinGlobalRatingPeriod()\r\n      .pipe(take(1))\r\n      .subscribe((res: IGlobalRatingPeriod) => {\r\n        this.minStartDate = new Date(res.minStartDate);\r\n      });\r\n    const isPilot = this.route.snapshot.queryParams['isPilot'];\r\n    this.isPilot = isPilot === 'true';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    window.addEventListener(\r\n      'dragover',\r\n      (e) => {\r\n        e && e.preventDefault();\r\n      },\r\n      false\r\n    );\r\n    window.addEventListener(\r\n      'drop',\r\n      (e) => {\r\n        e && e.preventDefault();\r\n      },\r\n      false\r\n    );\r\n\r\n    this.initForm();\r\n  }\r\n\r\n  initForm(): void {\r\n    var addPortfolioParams =\r\n      this.portfolioService.getPortfolioAddEvidenceParams();\r\n\r\n    this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';\r\n\r\n    if (!addPortfolioParams) {\r\n      this.toast.error('Add portfolio params cannot be null.');\r\n      this.router.navigateByUrl(this.returnUrl);\r\n      return;\r\n    }\r\n\r\n    this.params = addPortfolioParams;\r\n    this.studentNames = this.params.studentsInformation\r\n      .map((s) => s.name)\r\n      .join(', ');\r\n    this.studentEnrollmentId =\r\n      this.params.studentsInformation[0].studentClassEnrollmentId;\r\n\r\n    this.getDomainAndMeasureName(this.params.ageGradeInstrumentId);\r\n  }\r\n\r\n  getDomainAndMeasureName(ageGradeInstrumentId?: number) {\r\n    if (this.isFutureRatingPeriod) {\r\n      this.lookupService\r\n        .getMasterDomains()\r\n        .pipe(take(1))\r\n        .subscribe((res: IMasterDomain[]) => {\r\n          this.masterDomains = res\r\n            .filter(domain => !domain.onlyPilot)\r\n            .map(domain => ({\r\n              ...domain,\r\n              isAllSelected: false,\r\n            }));\r\n        });\r\n\r\n\r\n      this.lookupService\r\n        .getMasterMeasures()\r\n        .pipe(take(1))\r\n        .subscribe((res: IMasterMeasure[]) => {\r\n          this.masterMeasures = res.map((measure) => ({\r\n            ...measure,\r\n            isSelected: false,\r\n          }));\r\n        });\r\n    } else {\r\n      if (ageGradeInstrumentId) {\r\n        this.portfolioService\r\n          .getBaseMeasures(ageGradeInstrumentId)\r\n          .pipe(take(1))\r\n          .subscribe((results: IBaseTemplateDomain[]) => {\r\n            this.templateDomains = results;\r\n            this.originalTemplateDomains = results;\r\n\r\n            const hasMath = this.originalTemplateDomains.some(\r\n              (domain) => domain.isStructuredPrompt);\r\n\r\n            if (hasMath) {\r\n              this.evidences.push({\r\n                name: 'Add Structured Prompt',\r\n                icon: 'uil-images',\r\n                type: PortfolioEvidenceType.StructuredPrompt,\r\n                allowedType: 'jpeg, png, gif, doc, pdf',\r\n              });\r\n            }\r\n          });\r\n      }\r\n    }\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.ratingPeriodForm = this.fb.group({\r\n      ratingPeriod: [null, [Validators.required]],\r\n    });\r\n  }\r\n\r\n  onTilesClick(index: number, type: number): void {\r\n    if (this.isTilesDisabled) {\r\n      this.toast.error('File should be empty when moving to other tabs.');\r\n      return;\r\n    }\r\n\r\n    if (index === this.selectedIndex) {\r\n      this.selectedIndex = null;\r\n      return;\r\n    }\r\n\r\n    this.selectedIndex = index;\r\n    switch (type) {\r\n      case PortfolioEvidenceType.Photo:\r\n        this.uploadSettings.uploadText = 'Photo';\r\n        this.uploadSettings.uploadIcon = 'uil-images';\r\n        this.acceptedFiles = 'image/*';\r\n        this.selectedEvidenceType = type;\r\n        this.allowMultiple = true;\r\n        this.selectedPhotoEvidence = true;\r\n        this.templateDomains = this.originalTemplateDomains;\r\n        break;\r\n      case PortfolioEvidenceType.Video:\r\n        this.uploadSettings.uploadText = 'Video';\r\n        this.uploadSettings.uploadIcon = 'uil-video';\r\n        this.acceptedFiles = 'video/*';\r\n        this.selectedEvidenceType = type;\r\n        this.allowMultiple = false;\r\n        this.selectedPhotoEvidence = false;\r\n        this.templateDomains = this.originalTemplateDomains;\r\n        break;\r\n      case PortfolioEvidenceType.Audio:\r\n        this.uploadSettings.uploadText = 'Audio';\r\n        this.uploadSettings.uploadIcon = 'uil-volume';\r\n        this.acceptedFiles = 'audio/*';\r\n        this.selectedEvidenceType = type;\r\n        this.allowMultiple = false;\r\n        this.selectedPhotoEvidence = false;\r\n        this.templateDomains = this.originalTemplateDomains;\r\n        break;\r\n      case PortfolioEvidenceType.Note:\r\n        this.selectedEvidenceType = type;\r\n        this.selectedPhotoEvidence = false;\r\n        this.templateDomains = this.originalTemplateDomains;\r\n        break;\r\n      case PortfolioEvidenceType.StructuredPrompt:\r\n        this.uploadSettings.uploadText = 'Structured Prompt';\r\n        this.uploadSettings.uploadIcon = 'uil-images';\r\n        this.acceptedFiles = 'image/*, .doc, .pdf';\r\n        this.selectedEvidenceType = type;\r\n        this.allowMultiple = false;\r\n        this.selectedPhotoEvidence = false;\r\n        this.templateDomains = this.originalTemplateDomains\r\n          .filter((domain) => domain.isStructuredPrompt)\r\n          .map((domain) => ({\r\n            ...domain,\r\n            measures: domain.measures.filter((measure) => measure.isStructuredPrompt),\r\n          }));\r\n        break;\r\n    }\r\n  }\r\n\r\n  checkAndSetUploadRequirements(file: File) {\r\n    this.fileValid = false;\r\n    if (!this.isFileValid(file)) {\r\n      this.toast.error('This file is not an approved type.');\r\n      return;\r\n    }\r\n\r\n    if (!this.isFileSizeValid(file)) {\r\n      this.toast.error('File is larger than the 1GB upload limit.');\r\n      return;\r\n    }\r\n    const uniqueId =\r\n      Math.random().toString(36).substring(2) + Date.now().toString(36);\r\n    this.blobFileName = uniqueId + '-' + file.name;\r\n    this.isTilesDisabled = true;\r\n    this.isFileUploading = true;\r\n    this.fileValid = true;\r\n  }\r\n\r\n  isFileValid(file: File): boolean {\r\n    if (!file) {\r\n      return false;\r\n    }\r\n    const selectedEvidenceType: PortfolioEvidenceType =\r\n      this.selectedEvidenceType;\r\n    const selectedTypes = this.allowedTypes[selectedEvidenceType];\r\n\r\n    return selectedTypes.includes(file.type);\r\n  }\r\n\r\n  isFileSizeValid(file: File): boolean {\r\n    if (!file) {\r\n      return false;\r\n    }\r\n\r\n    const selectedEvidenceType: PortfolioEvidenceType =\r\n      this.selectedEvidenceType;\r\n    const maxFileSizeInBytes = 1024 * 1024 * 1024; // 1GB\r\n\r\n    if (\r\n      (selectedEvidenceType === PortfolioEvidenceType.Video ||\r\n        selectedEvidenceType === PortfolioEvidenceType.Audio) &&\r\n      file.size >= maxFileSizeInBytes\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  checkPhotoLimitMax(): void {\r\n    if (this.blobFiles.length >= 20) {\r\n      this.toast.error('Max limit of 20 photos reached.');\r\n      return;\r\n    }\r\n  }\r\n\r\n  openDuplicateFileModal() {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Duplicate File',\r\n          message:\r\n            'A file with that name already exists. Please rename and try again.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: Modal.OK,\r\n        },\r\n      },\r\n    };\r\n\r\n    const dialogRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n    return dialogRef.afterClosed();\r\n  }\r\n\r\n  processPhotos(files: any) {\r\n    for (let i = 0; i < files.length; i++) {\r\n      this.checkAndSetUploadRequirements(files[i]);\r\n      this.selectedFile = files[i];\r\n      if (this.selectedFile && this.fileValid) {\r\n        const reader = new FileReader();\r\n        reader.onload = (e) => {\r\n          this.selectedFileUrl = e.target!.result;\r\n          if (\r\n            this.files.some(\r\n              (file: IPortfolioPhotoEvidence) => file.fileName === files[i].name\r\n            )\r\n          ) {\r\n            this.openDuplicateFileModal();\r\n            return;\r\n          }\r\n          this.files.push({\r\n            fileName: files[i].name,\r\n            displayUrl: this.selectedFileUrl,\r\n            blobFileName: this.blobFileName,\r\n            url: this.blobFileName,\r\n          });\r\n          this.blobFiles.push(files[i]);\r\n          this.url = this.blobFileName;\r\n        };\r\n        reader.readAsDataURL(this.selectedFile);\r\n      }\r\n    }\r\n  }\r\n\r\n  fileDropHandler(event: any) {\r\n    event.preventDefault();\r\n    if (!this.selectedPhotoEvidence) {\r\n      const file = event.dataTransfer.files && event.dataTransfer.files[0];\r\n      this.checkAndSetUploadRequirements(file);\r\n      if (this.fileValid) this.uploadFileProcess(file);\r\n    } else {\r\n      const files = event.dataTransfer.files;\r\n      this.checkPhotoLimitMax();\r\n      this.processPhotos(files);\r\n    }\r\n    this.isFileUploading = false;\r\n  }\r\n\r\n  onSelectFile(event: any) {\r\n    if (!this.selectedPhotoEvidence) {\r\n      const file = event.target.files && event.target.files[0];\r\n      this.checkAndSetUploadRequirements(file);\r\n      if (this.fileValid) this.uploadFileProcess(file);\r\n    } else {\r\n      const files = event.target.files;\r\n      this.checkPhotoLimitMax();\r\n      this.processPhotos(files);\r\n    }\r\n    this.isFileUploading = false;\r\n  }\r\n\r\n  onFileClick(event: any) {\r\n    if (this.url && !this.selectedPhotoEvidence) {\r\n      this.toast.error('Remove existing file before uploading a new one.');\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  uploadFileProcess(file: File | File[]) {\r\n    let files: File[] = [];\r\n    if (!Array.isArray(file)) files.push(file);\r\n    else files = file;\r\n    this.portfolioService\r\n      .getBlobSasToken(this.containerName)\r\n      .pipe(take(1))\r\n      .subscribe((sasToken: any) => {\r\n        if (sasToken?.value) {\r\n          this.uploadToBlobStorage(files, sasToken?.value);\r\n        } else {\r\n          this.toast.error('Error getting sasToken');\r\n        }\r\n      });\r\n  }\r\n\r\n  updateFilesArr(link: IPortfolioPhotoEvidence) {\r\n    this.files = this.files.filter(\r\n      (file: IPortfolioPhotoEvidence) => file.fileName !== link.fileName\r\n    );\r\n  }\r\n\r\n  uploadToBlobStorage(files: File[], sasToken: string) {\r\n    this.isFileUploading = true;\r\n    this.blobStorageService\r\n      .uploadMultipleFiles(\r\n        files,\r\n        this.containerName,\r\n        sasToken,\r\n        (ev) => {\r\n          this.progress = (ev.loadedBytes / files[0].size) * 100;\r\n        },\r\n        this.studentEnrollmentId\r\n      )\r\n      .pipe(take(1))\r\n      .subscribe((result: any) => {\r\n        if (result) {\r\n          if (this.selectedPhotoEvidence) {\r\n            this.blobResults = result;\r\n            this.processMultipleFiles();\r\n          } else {\r\n            this.displayUrl = result[0].displayUrl;\r\n            this.url = result[0].url;\r\n            this.fileName = result[0].fileName;\r\n            this.displayFileName = cleanFileName(result[0].fileName);\r\n          }\r\n          this.isFileUploading = false;\r\n          this.progress = 0;\r\n        }\r\n      });\r\n  }\r\n\r\n  deleteFileProcess() {\r\n    this.portfolioService\r\n      .getBlobSasToken(this.containerName)\r\n      .pipe(take(1))\r\n      .subscribe((sasToken: any) => {\r\n        if (sasToken?.value) {\r\n          this.deleteFileFromBlobStorage(sasToken?.value);\r\n        } else {\r\n          this.toast.error('Error getting sasToken');\r\n        }\r\n      });\r\n  }\r\n\r\n  deleteFileFromBlobStorage(sasToken: string) {\r\n    if (this.blobFileName.trim() !== '') {\r\n      this.blobStorageService\r\n        .deleteFile(this.fileName, this.containerName, sasToken)\r\n        .pipe(take(1))\r\n        .subscribe((res) => {\r\n          if (res) {\r\n            this.url = '';\r\n            this.fileName = '';\r\n            this.blobFileName = '';\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  deleteFromBlobFiles(file: any) {\r\n    this.blobFiles = this.blobFiles.filter(\r\n      (f: File) => f.name !== file.fileName\r\n    );\r\n\r\n    if (this.blobFiles.length === 0) {\r\n      this.isTilesDisabled = false;\r\n      this.url = '';\r\n    }\r\n  }\r\n\r\n  updateAddPortfolioModels(file: IPortfolioPhotoEvidence) {\r\n    this.addPortfolioModels = this.addPortfolioModels.filter(\r\n      (addPortfolioModel: IPortfolioAddModel) =>\r\n        addPortfolioModel.fileName !== file.fileName\r\n    );\r\n  }\r\n\r\n  onFileRemove(photoEvidence?: IPortfolioPhotoEvidence) {\r\n    if (photoEvidence) {\r\n      this.deleteFromBlobFiles(photoEvidence);\r\n      this.updateFilesArr(photoEvidence);\r\n      this.updateAddPortfolioModels(photoEvidence);\r\n    } else {\r\n      this.deleteFileProcess();\r\n      this.isTilesDisabled = false;\r\n    }\r\n  }\r\n\r\n  onDomainSelectChange(value: boolean, domain: IBaseTemplateDomain) {\r\n    if (value) {\r\n      domain.measures.forEach((m) => (m.isSelected = false));\r\n    }\r\n  }\r\n\r\n  onFutureDomainSelectChange(value: boolean, domain: IMasterDomain) {\r\n    if (value) {\r\n      this.masterMeasures\r\n        ?.filter((d: IMasterMeasure) => d.masterDomainId === domain.id)\r\n        .forEach((m: IMasterMeasure) => (m.isSelected = false));\r\n    }\r\n  }\r\n\r\n  onMeasureSelectChange(\r\n    value: boolean,\r\n    domain: IBaseTemplateDomain | IMasterDomain\r\n  ) {\r\n    if (value) {\r\n      domain.isAllSelected = false;\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    if (\r\n      new Date(event).getTime() >= this.minStartDate.getTime() &&\r\n      new Date(event).getTime() <= this.today.getTime()\r\n    ) {\r\n      this.collectedOn = event;\r\n    } else {\r\n      this.collectedOn = null;\r\n      this.toast.error(\r\n        \"Collection date must be within school year's global rating periods.\"\r\n      );\r\n    }\r\n  }\r\n\r\n  formOneValidation(): boolean {\r\n    if (this.selectedEvidenceType === this.PortfolioEvidenceType.Note) {\r\n      if (this.notes.trim() === '') {\r\n        this.toast.error(\"Notes can't be empty.\");\r\n        return false;\r\n      }\r\n    } else {\r\n      if (this.url.trim() === '') {\r\n        this.toast.error(\"File can't be empty.\");\r\n        return false;\r\n      }\r\n    }\r\n\r\n    if (!this.hasSelectedDomainOrMeasure()) {\r\n      this.toast.error('Please select atleast one measure or domain.');\r\n      return false;\r\n    }\r\n\r\n    if (!this.collectedOn) {\r\n      this.toast.error('Please choose the date of collected evidence.');\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  formTwoValidation(): boolean {\r\n    const hasSelectedMeasuresInAllItems =\r\n      this.addPortfolioModel.evidences.every(this.hasSelectedMeasure);\r\n\r\n    if (!hasSelectedMeasuresInAllItems) {\r\n      this.toast.error('Atleast one measure selected for each child.');\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  hasMeasureValue(item: any): boolean {\r\n    return item.measures\r\n      .filter((measure: any) => measure.isSelected)\r\n      .every((measure: any) => measure.measureValue !== undefined);\r\n  }\r\n\r\n  hasSelectedMeasure(item: any): boolean {\r\n    return item.measures.some((measure: any) => measure.isSelected);\r\n  }\r\n\r\n  hasSelectedDomainOrMeasure(): boolean {\r\n    return this.templateDomains.some((domain) => {\r\n      return (\r\n        this.isAddformHasSelectedDomain() ||\r\n        this.isAddFormHasSelectedFutureDomain() ||\r\n        this.isAddFormHasSelectedMeasure() ||\r\n        this.isAddFormHasSelectedFutureMeasure()\r\n      );\r\n    });\r\n  }\r\n\r\n  isAddformHasSelectedDomain(): boolean {\r\n    return this.templateDomains.some((domain) => {\r\n      return domain.isAllSelected;\r\n    });\r\n  }\r\n\r\n  isAddFormHasSelectedFutureDomain(): boolean | any {\r\n    return this.masterDomains?.some((domain) => {\r\n      return domain.isAllSelected;\r\n    });\r\n  }\r\n\r\n  isAddFormHasSelectedMeasure(): boolean {\r\n    return this.templateDomains.some((domain) => {\r\n      return domain.measures.some((measure) => measure.isSelected);\r\n    });\r\n  }\r\n\r\n  isAddFormHasSelectedFutureMeasure(): boolean | any {\r\n    return this.masterMeasures?.some((measure) => {\r\n      return measure.isSelected;\r\n    });\r\n  }\r\n\r\n  resetSelectedDomainAndMeasure() {\r\n    this.templateDomains.forEach((domain) => {\r\n      domain.isAllSelected = false;\r\n      domain.measures.forEach((measure) => (measure.isSelected = false));\r\n    });\r\n    this.masterDomains?.forEach((domain) => {\r\n      domain.isAllSelected = false;\r\n    });\r\n    this.masterMeasures?.forEach((measure) => (measure.isSelected = false));\r\n  }\r\n\r\n  toggleFutureRatingPeriod() {\r\n    this.isFutureRatingPeriod = !this.isFutureRatingPeriod;\r\n    this.resetSelectedDomainAndMeasure();\r\n\r\n    if (this.isFutureRatingPeriod) {\r\n      this.initializeForms();\r\n      this.getDomainAndMeasureName();\r\n    }\r\n  }\r\n\r\n  processFile() {\r\n    this.processEvidences(this.addPortfolioModel, this.templateDomains);\r\n  }\r\n\r\n  updateAddPortfolioModel() {\r\n    this.addPortfolioModel = {\r\n      evidences: [],\r\n      url: trimHTTPS(this.url),\r\n      notes: this.notes,\r\n      evidenceTypeId: this.selectedEvidenceType,\r\n      fileName: this.fileName,\r\n      collectedOn: this.collectedOn!,\r\n    };\r\n    this.addPortfolioModel.evidences = [...this.params!.studentsInformation];\r\n  }\r\n\r\n  processMultipleFiles() {\r\n    this.files.forEach((file: IPortfolioPhotoEvidence, i: number) => {\r\n      if (\r\n        !this.addPortfolioModels.some(\r\n          (addPortfolioModel: IPortfolioAddModel) =>\r\n            addPortfolioModel.fileName === file.fileName\r\n        )\r\n      ) {\r\n        this.addPortfolioModels.push({\r\n          evidences: [],\r\n          url: trimHTTPS(this.blobResults[i].url),\r\n          notes: this.notes,\r\n          evidenceTypeId: this.selectedEvidenceType,\r\n          fileName: file.fileName,\r\n          collectedOn: this.collectedOn!,\r\n        });\r\n      }\r\n\r\n      this.addPortfolioModels[i].evidences = [\r\n        ...this.params!.studentsInformation,\r\n      ];\r\n      if (this.isFutureRatingPeriod) {\r\n        this.processFutureEvidences(\r\n          this.addPortfolioModels[i],\r\n          this.masterDomains!\r\n        );\r\n      } else {\r\n        this.processEvidences(this.addPortfolioModels[i], this.templateDomains);\r\n      }\r\n    });\r\n    this.checkSelectedDomainMeasure();\r\n  }\r\n\r\n  processEvidences(\r\n    addPortfolioModel: IPortfolioAddModel,\r\n    templateDomains: IBaseTemplateDomain[]\r\n  ): void {\r\n    if (addPortfolioModel.evidences && addPortfolioModel.evidences.length > 0) {\r\n      for (let i = 0; i < addPortfolioModel.evidences.length; i++) {\r\n        addPortfolioModel.evidences[i].measures = [];\r\n        addPortfolioModel.evidences[i].domains = [];\r\n        for (let j = 0; j < templateDomains.length; j++) {\r\n          const domains = templateDomains;\r\n          if (domains[j].isAllSelected) {\r\n            addPortfolioModel.evidences[i].domains.push(domains[j]);\r\n          } else {\r\n            var selectedMeasures = domains[j].measures.filter(\r\n              (measure: ITemplateMeasure) => measure.isSelected\r\n            );\r\n            selectedMeasures = selectedMeasures.map((measure) => ({\r\n              ...measure,\r\n              isSelected: false,\r\n            }));\r\n            addPortfolioModel.evidences[i].measures.push(...selectedMeasures);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  processFutureEvidences(\r\n    addPortfolioModel: IPortfolioAddModel,\r\n    templateDomains: IMasterDomain[]\r\n  ): void {\r\n    if (addPortfolioModel.evidences && addPortfolioModel.evidences.length > 0) {\r\n      for (let i = 0; i < addPortfolioModel.evidences.length; i++) {\r\n        addPortfolioModel.evidences[i].measures = [];\r\n        addPortfolioModel.evidences[i].domains = [];\r\n        for (let j = 0; j < templateDomains.length; j++) {\r\n          const domains = templateDomains;\r\n          if (domains[j].isAllSelected) {\r\n            addPortfolioModel.evidences[i].domains.push(domains[j]);\r\n          } else {\r\n            var selectedMeasures = this.masterMeasures?.filter(\r\n              (measure: IMasterMeasure) =>\r\n                measure.isSelected && measure.masterDomainId === domains[j].id\r\n            );\r\n            selectedMeasures = selectedMeasures?.map((measure) => ({\r\n              ...measure,\r\n              isSelected: false,\r\n              measureId: this.templateDomains\r\n                ? this.templateDomains\r\n                    .find((d: IBaseTemplateDomain) =>\r\n                      d.measures.some(\r\n                        (m: ITemplateMeasure) => m.code === measure.measureCode\r\n                      )\r\n                    )\r\n                    ?.measures.find(\r\n                      (m: ITemplateMeasure) => m.code === measure.measureCode\r\n                    )?.id\r\n                : null,\r\n            }));\r\n            if (selectedMeasures) {\r\n              addPortfolioModel.evidences[i].measures.push(...selectedMeasures);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  onSaveEvidence() {\r\n    if (this.formStep === this.step.StepOne) {\r\n      if (!this.params || !this.formOneValidation()) {\r\n        return;\r\n      }\r\n\r\n      this.updateAddPortfolioModel();\r\n\r\n      if (this.selectedPhotoEvidence) {\r\n        this.uploadFileProcess(this.blobFiles);\r\n      } else {\r\n        if (this.isFutureRatingPeriod) {\r\n          this.processFutureEvidences(\r\n            this.addPortfolioModel,\r\n            this.masterDomains!\r\n          );\r\n          this.checkSelectedDomainMeasure();\r\n        } else {\r\n          this.processEvidences(this.addPortfolioModel, this.templateDomains);\r\n          this.checkSelectedDomainMeasure();\r\n        }\r\n      }\r\n    } else {\r\n      if (!this.formTwoValidation()) {\r\n        return;\r\n      }\r\n\r\n      this.formTwoSave();\r\n    }\r\n  }\r\n\r\n  checkSelectedDomainMeasure(): void {\r\n    if (\r\n      (this.isAddformHasSelectedDomain() &&\r\n        !this.isAddFormHasSelectedMeasure()) ||\r\n      (this.isAddFormHasSelectedFutureDomain() &&\r\n        !this.isAddFormHasSelectedFutureMeasure())\r\n    ) {\r\n      this.formTwoSave();\r\n    } else {\r\n      this.formStep = this.step.StepTwo;\r\n    }\r\n  }\r\n\r\n  formTwoSave() {\r\n    if (this.isFutureRatingPeriod) {\r\n      this.futureEvidenceSave();\r\n    } else {\r\n      var payload: IPortfolioAddModel[] = [];\r\n      if (!this.selectedPhotoEvidence) payload.push(this.addPortfolioModel);\r\n      else payload = this.addPortfolioModels;\r\n      this.disableSave = true;\r\n      this.portfolioService\r\n        .saveEvidence(payload)\r\n        .pipe(take(1))\r\n        .subscribe((result) => {\r\n          if (result) {\r\n            this.toast.success('Evidence added successfully.');\r\n            this.router.navigateByUrl(this.returnUrl);\r\n          } else this.toast.success('Failed to add evidence.');\r\n          this.disableSave = false;\r\n          this.isFutureRatingPeriod = false;\r\n        });\r\n    }\r\n  }\r\n\r\n  futureEvidenceSave() {\r\n    var payload: IPortfolioAddModel[] = [];\r\n    if (!this.selectedPhotoEvidence) payload.push(this.addPortfolioModel);\r\n    else payload = this.addPortfolioModels;\r\n    this.disableSave = true;\r\n    this.portfolioService\r\n      .saveFutureEvidence(payload)\r\n      .pipe(take(1))\r\n      .subscribe((result) => {\r\n        if (result) {\r\n          this.toast.success('Evidence added successfully.');\r\n          this.router.navigateByUrl(this.returnUrl);\r\n          this.confirmFutureEvidenceSave();\r\n        } else this.toast.success('Failed to add evidence.');\r\n        this.disableSave = false;\r\n        this.isFutureRatingPeriod = false;\r\n      });\r\n  }\r\n\r\n  confirmFutureEvidenceSave() {\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Evidence Saved',\r\n      message: `Evidence can be found in the Review Evidence Library.`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.OK,\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe(() => {});\r\n  }\r\n\r\n  cancel() {\r\n    this.formStep = this.step.StepOne;\r\n  }\r\n\r\n  back() {\r\n    this.confirmLeavingWithoutSavingStepTwo().subscribe(\r\n      (result: boolean | '') => {\r\n        if (result) {\r\n          this.router.navigateByUrl(this.returnUrl);\r\n        }\r\n      }\r\n    );\r\n  }\r\n\r\n  confirmLeavingWithoutSavingStepTwo(): Observable<boolean | ''> {\r\n    if (this.formStep == this.step.StepTwo) {\r\n      const modal = {\r\n        data: {\r\n          modalInfo: {\r\n            title: 'You have unsaved changes',\r\n            message:\r\n              'Are you sure you want to navigate away from this page? Your evidence has not been saved.',\r\n            primaryBtnClass: 'blue',\r\n            primaryBtnText: 'Continue',\r\n            cancelText: 'Cancel',\r\n            showCancel: true,\r\n          },\r\n        },\r\n      };\r\n\r\n      const dialogRef = this.dialog.open(ConfirmationModalComponent, {\r\n        data: modal,\r\n      });\r\n\r\n      return dialogRef.afterClosed();\r\n    } else {\r\n      return of(true);\r\n    }\r\n  }\r\n\r\n  openInputRatingModal(measure: any) {\r\n    if (this.params) {\r\n      const measureId = this.isFutureRatingPeriod\r\n        ? measure.measureId\r\n        : measure?.id;\r\n      this.portfolioService\r\n        .getRatingMeasures(this.params.ageGradeInstrumentId, measureId)\r\n        .pipe(take(1))\r\n        .subscribe((result) => {\r\n          if (result) {\r\n            var data = {\r\n              options: result.levels,\r\n              selectedLevel: measure.selectedLevel,\r\n              selectedMeasureValue: measure.measureValue,\r\n              measureCode: measure.code,\r\n            };\r\n            const modalRef = this.modal.open(\r\n              PortfolioInputRatingModalComponent,\r\n              {\r\n                data: data,\r\n              }\r\n            );\r\n            modalRef\r\n              .afterClosed()\r\n              .pipe(take(1))\r\n              .subscribe((result) => {\r\n                if (result && result.success) {\r\n                  measure.measureValue = result.data.selectedId;\r\n                  measure.selectedLevel = result.data.selectedLevel;\r\n                  measure.selectedLevelName = result.data.selectedName;\r\n                  measure.selectedLevelIcon = result.data.selectedIcon;\r\n                }\r\n              });\r\n          }\r\n        });\r\n    }\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold pr-8\">Send Message Board Re: {{data.studentName}}</h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n      <form\r\n        class=\"gap-4 gap-x-10 mt-3\"\r\n        [formGroup]=\"messageForm\"\r\n      >\r\n        <div *ngIf=\"!data.recipientId\" class=\"w-1/2\">\r\n          <drdp-select-portfolio-users \r\n              [sceId]=\"data.enrollmentId\"\r\n              [multiSelect]=\"true\"\r\n              [required]=\"true\"\r\n              (portfolioUsers)=\"handleRecipientSelection($event)\">\r\n          </drdp-select-portfolio-users>\r\n        </div>\r\n        <div class=\"mt-4 w-full\">\r\n          <textarea \r\n              rows=\"5\" \r\n              maxlength=\"2000\"\r\n              class=\"text-sm w-full bg-gray-100 rounded-lg p-2 border border-drdpblue-300 focus:outline-none\" \r\n              placeholder=\"Write new message here\"\r\n              formControlName=\"message\">\r\n          </textarea>\r\n        </div>\r\n      </form>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end\">\r\n      <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn\r\n        class=\"ml-3\"\r\n        mat-button\r\n        [disabled]=\"messageForm.invalid\"\r\n        cdkFocusInitial\r\n        (click)=\"onSend()\"\r\n      >\r\n        Send Message</drdp-btn\r\n      >\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { IPortfolioMessage } from '@core/interfaces/iportfolio-message';\r\nimport { IPortfolioUser } from '@core/interfaces/iportfolio-user';\r\nimport { PortfolioMessageService } from '@core/services/portfolio-message.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-message-box',\r\n  templateUrl: './portfolio-message-box.component.html',\r\n  styleUrls: ['./portfolio-message-box.component.scss']\r\n})\r\nexport class PortfolioMessageBoxComponent implements OnInit {\r\n  messageForm: FormGroup | any;\r\n\r\n  get recipients() {\r\n    return this.messageForm.get('recipients');\r\n  }\r\n  get message() {\r\n    return this.messageForm.get('message');\r\n  }\r\n\r\n  constructor(\r\n    private portfolioMessageService: PortfolioMessageService,\r\n    private fb: FormBuilder,\r\n    private toastService: ToastService,\r\n    public dialogRef: MatDialogRef<PortfolioMessageBoxComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public data: any\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.messageForm = this.fb.group({\r\n      recipients: [null, Validators.required],\r\n      message: [null, [Validators.required]],\r\n    });\r\n\r\n    if (this.data.recipientId) {\r\n      this.recipients.setValue([this.data.recipientId]);\r\n    }\r\n  }\r\n\r\n  onSend() { \r\n    if (this.messageForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    const payload: IPortfolioMessage = {\r\n      portfolioId: this.data.portfolioId,\r\n      studentClassEnrollmentId: this.data.enrollmentId,\r\n      message: this.message.value,\r\n      messageRecipients: this.recipients.value.map((userId: number) => ({ userId })),\r\n    }\r\n\r\n    this.portfolioMessageService.addNewMessage(\r\n      payload, \r\n      'Message successfully sent.')\r\n      .pipe(take(1))\r\n      .subscribe((res: boolean) => {\r\n        if (res) this.dialogRef.close();\r\n        else this.toastService.error('Unable to send message.');\r\n      })\r\n\r\n  }\r\n\r\n  handleRecipientSelection(event: any): void {\r\n    if (event.length > 10) {\r\n      this.toastService.error('Selected number of recipients cannot exceed 10.');\r\n      return;\r\n    }\r\n    const recipients = event?.map((recipient: IPortfolioUser) => recipient.id);\r\n    this.recipients.setValue(recipients);\r\n  }\r\n}\r\n","<div class=\"pl-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <h1 class=\"text-2xl pb-3\"> {{ isFutureEvidence ? \"Review Evidence in Evidence Library\"  : \"Review Evidence\" }}</h1>\r\n    <drdp-btn *ngIf=\"!isFutureEvidence\" color=\"outline\" (click)=\"onDownloadPdf()\" type=\"button\">\r\n      <i class=\"text-drdpblue-300 text-xl uil uil-print\"></i>\r\n      Print Existing Evidence\r\n    </drdp-btn>\r\n  </div>\r\n  <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n    <div>\r\n      <p class=\"global-font-bold\" *ngIf=\"!isFutureEvidence\">Rating Period:\r\n        <span class=\"global-font-normal\">\r\n          {{ classDetails?.ratingPeriodName }}\r\n        </span>\r\n      </p>\r\n      <ng-container *ngIf=\"!isFutureEvidence\">\r\n        <p class=\"global-font-bold\">Classroom: <span class=\"global-font-normal\">{{classDetails?.classroomName}}</span></p>\r\n        <p class=\"global-font-bold\">Age Group/Instrument: <span class=\"global-font-normal\">{{ageGroupInstrumentName}}</span></p>\r\n      </ng-container>\r\n      <p class=\"global-font-bold\">Child/Children: <span class=\"global-font-normal\">{{studentDetails?.firstName! + ' ' +\r\n          studentDetails?.lastName!}}</span></p>\r\n    </div>\r\n    <div *ngIf=\"!isFutureEvidence\" class=\"text-right mt-3\">\r\n      <drdp-btn color=\"outline\" (click)=\"addToMessageBoard()\" type=\"button\">\r\n        <i class=\"text-drdpblue-300 text-xl uil uil-envelope\"></i>\r\n        Add to Message Board</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"pl-5 my-5 flex flex-row justify-between gap-3\">\r\n  <div class=\"flex gap-3\">\r\n    <drdp-btn [color]=\"domainBg\" type=\"button\" (click)=\"handleDomain()\">Domains</drdp-btn>\r\n    <drdp-btn [color]=\"measuresBg\" type=\"button\" (click)=\"handleMeasures()\">Measures</drdp-btn>\r\n  </div>\r\n  <a class=\"self-center text-sm order-last cursor-pointer\" (click)=\"goBack()\"><i\r\n      class=\"uil uil-angle-left-b text-base\"></i>Back to View Children</a>\r\n</div>\r\n\r\n<div *ngIf=\"showDomain\">\r\n  <div class=\"py-4\" *ngFor=\"let domain of measures\">\r\n    <div class=\" rounded-3xl bg-white p-3 drop-shadow-md\">\r\n      <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"changeDomainShow(domain.domainCode)\">\r\n        <div class=\"flex\">\r\n          <div class=\" pl-1.5\">\r\n            <p class=\"text-lg font-semibold\">{{domain?.domainCode}}</p>\r\n          </div>\r\n          <i [ngClass]=\"{'uil uil-angle-down text-xl': !show || selectedDomain !== domain.domainCode,\r\n                             'uil uil-angle-right text-xl': show && selectedDomain === domain.domainCode}\">\r\n          </i>\r\n        </div>\r\n        <p class=\"text-sm justify-self-end\">{{getEvidenceCount(domain, measureType.Domain)}}</p>\r\n      </div>\r\n\r\n      <div *ngIf=\"show && selectedDomain === domain.domainCode\" class=\"flex flex-col\">\r\n        <div class=\" relative\">\r\n          <drdp-portfolio-evidence-management [domainId]=\"domain.id\" [domainGroupings]=\"measures\" [isFutureEvidence]=\"isFutureEvidence\"\r\n            [evidences]=\"domainEvidence\" [isDomain]=\"true\" [isPortfolio]=\"true\" (refreshEvidences)=\"updateEvidence()\" [availableClasses]=\"studentActiveEnrollments\" \r\n            [assignmentPayload]=\"assignmentPayload\" [hasStructuredPrompt]=\"domain.isStructuredPrompt\" [isPilot]=\"isPilot\">\r\n          </drdp-portfolio-evidence-management>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div *ngIf=\"!showDomain\">\r\n  <div class=\"py-4\" *ngFor=\"let domain of measures\">\r\n    <div class=\"flex items-center\">\r\n      <img [src]=\"'assets/images/domains/' + domain.iconName\" [alt]=\"domain.domainCode\" class=\"mr-2 w-8 h-8\">\r\n      <h1 class=\"global-font-bold\">{{ domain.domainCode }}</h1>\r\n    </div>\r\n    <div class=\"py-4\" *ngFor=\"let measure of domain.measures\">\r\n      <div class=\" rounded-3xl bg-white p-3 drop-shadow-md\">\r\n        <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"changeMeasureShow(measure.code)\">\r\n          <div class=\"flex\">\r\n            <div class=\" pl-1.5\">\r\n              <p class=\"text-lg font-semibold\">{{measure.code}}</p>\r\n            </div>\r\n            <i [ngClass]=\"{'uil uil-angle-down text-xl': !show || selectedMeasure !== measure.code,\r\n                             'uil uil-angle-right text-xl': show && selectedMeasure === measure.code}\">\r\n            </i>\r\n          </div>\r\n          <div class=\"flex flex-col w-44\">\r\n            <p class=\"text-sm justify-self-end\">{{getEvidenceCount(measure, measureType.Measure)}}</p>\r\n            <div *ngFor=\"let measureRating of measurePrelimRatings\" class=\"flex items-center\">\r\n              <div *ngIf=\"measureRating.selectedLevel && measure.id === measureRating.measureId\"\r\n                class=\"flex items-center\">\r\n                <label class=\"font-normal text-sm\">{{measureRating.levelName}}</label>\r\n                <img class=\"w-5 h-5 ml-2 -mt-1\"\r\n                  src=\"assets/images/portfolio/{{measureRating.levelIcon}}-{{measureRating.selectedLevel ? measureRating.selectedLevel: 1}}.svg\" />\r\n              </div>\r\n\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n\r\n        <div *ngIf=\"show && selectedMeasure === measure.code\" class=\"flex flex-col\">\r\n          <div class=\" relative\">\r\n            <drdp-portfolio-evidence-management [measureId]=\"measure.id\" [domainGroupings]=\"measures\" [isFutureEvidence]=\"isFutureEvidence\"\r\n              [evidences]=\"measureEvidence\" [ageGradeId]=\"ageGradeId\" [isDomain]=\"false\" [isPortfolio]=\"true\"\r\n              [description]=\"measure.description\" (prelimRatingChange)=\"updateEvidencePrelimRating($event)\" (refreshEvidences)=\"updateEvidence()\" [availableClasses]=\"studentActiveEnrollments\" \r\n              [assignmentPayload]=\"assignmentPayload\" [hasStructuredPrompt]=\"measure.isStructuredPrompt\" [isPilot]=\"isPilot\">\r\n            </drdp-portfolio-evidence-management>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n  IStudent,\r\n  IStudentClassEnrollmentDetails,\r\n  IStudentDetails,\r\n} from '@core/interfaces/istudent';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { filter, take, tap, switchMap, forkJoin } from 'rxjs';\r\nimport {\r\n  IPortfolioClassResponse,\r\n  IPortfolioEvidenceResponse,\r\n} from '@core/interfaces/iportfolio';\r\nimport { AgeGradeInstrument } from '@core/enums/age-grade-instruments';\r\nimport { PortfolioMeasureType } from '@core/enums/portfolio';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { addHTTPS } from '@core/services/helper.service';\r\nimport { PortfolioMessageBoxComponent } from '../portfolio-message-box/portfolio-message-box.component';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { IStudentActiveEnrollmentInfo } from '@views/user/input-rating/interfaces/istudent-enrollment-info';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-review-evidence',\r\n  templateUrl: './portfolio-review-evidence.component.html',\r\n  styleUrls: ['./portfolio-review-evidence.component.scss'],\r\n})\r\nexport class PortfolioReviewEvidenceComponent implements OnInit {\r\n  domainBg = 'black';\r\n  measuresBg = 'white';\r\n  showDomain = true;\r\n  classEnrollmentDetails?: IStudentClassEnrollmentDetails;\r\n  studentDetails?: IStudentDetails;\r\n  studentActiveEnrollments?: IStudentActiveEnrollmentInfo[];\r\n  studentId?: number;\r\n  classDetails?: IPortfolioClassResponse;\r\n  ageGroupInstrumentName?: string;\r\n  measures?: any;\r\n  show = false;\r\n  selectedDomain = '';\r\n  selectedMeasure = '';\r\n  domainEvidence?: IPortfolioEvidenceResponse[];\r\n  measureEvidence?: IPortfolioEvidenceResponse[];\r\n  measurePrelimRatings?: IPortfolioEvidenceResponse[] = [];\r\n  classId?: number;\r\n  studentClassEnrollmentId?: number;\r\n  ageGradeId?: number;\r\n  previousPage = '';\r\n  portfolioId!: number;\r\n  isFutureEvidence: boolean = false;\r\n  futureEvidenceId?: number | null;\r\n  globalRatingPeriodName: string = '';\r\n  isPilot: boolean = false;\r\n  assignmentPayload = {\r\n    studentId: 0,\r\n    ageGradeInstrumentId: 0,\r\n    futureEvidenceId: 0\r\n  };\r\n\r\n  public get measureType() {\r\n    return PortfolioMeasureType;\r\n  }\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private router: Router,\r\n    private classEnrollmentService: StudentClassEnrollmentService,\r\n    private portfolioService: PortfolioService,\r\n    public modal: MatDialog,\r\n    private lookup: LookupService,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this. futureEvidenceId = Number(this.route.snapshot.paramMap.get('futureEvidenceId')) || null;\r\n    let classId = this.route.snapshot.paramMap.get('classId');\r\n    let ageGradeId = this.route.snapshot.paramMap.get('ageGradeId');\r\n    this.previousPage = `portfolio/class/${classId}/ageGradeInstrument/${ageGradeId}`;\r\n    this.assignmentPayload.ageGradeInstrumentId = Number(ageGradeId);\r\n    if (this.futureEvidenceId) {\r\n      this.classId = classId ? +classId : undefined;\r\n      this.ageGradeId = ageGradeId ? +ageGradeId : undefined;\r\n      this.loadFutureEvidenceData();\r\n    }\r\n    else {\r\n      let studentClassEnrollmentId = this.route.snapshot.paramMap.get(\r\n        'studentClassEnrollmentId'\r\n      );\r\n      this.route.queryParams.subscribe((params) => {\r\n        this.portfolioId = params['portfolioId'];\r\n      });\r\n\r\n      if (studentClassEnrollmentId) {\r\n        this.studentClassEnrollmentId = +studentClassEnrollmentId;\r\n        this.getStudentDetails(this.studentClassEnrollmentId);\r\n      }\r\n\r\n      if (classId && ageGradeId) {\r\n        this.classId = +classId;\r\n        this.ageGradeId = +ageGradeId;\r\n        this.portfolioService\r\n          .getPortfolioClass(this.classId, this.ageGradeId)\r\n          .pipe(take(1))\r\n          .subscribe((res: IPortfolioClassResponse) => {\r\n            if (res) {\r\n              this.classDetails = res;\r\n              this.ageGroupInstrumentName = res.ageGradeInstrumentName;\r\n            }\r\n          });\r\n      }\r\n\r\n      if (this.studentClassEnrollmentId && this.ageGradeId) {\r\n        this.getDomainEvidence(this.studentClassEnrollmentId, this.ageGradeId);\r\n        this.getMeasureEvidence(this.studentClassEnrollmentId, this.ageGradeId);\r\n      }\r\n    }\r\n  }\r\n\r\n  loadFutureEvidenceData(): void {\r\n    this.isFutureEvidence = true;\r\n    const studentId = this.route.snapshot.paramMap.get('studentId');\r\n    const futureEvidenceId = this.route.snapshot.paramMap.get('futureEvidenceId');\r\n\r\n    if (studentId && futureEvidenceId) {\r\n      this.studentId = +studentId;\r\n      this.futureEvidenceId = +futureEvidenceId;\r\n      this.assignmentPayload.studentId = this.studentId;\r\n      this.assignmentPayload.futureEvidenceId = this.futureEvidenceId;\r\n      forkJoin([\r\n        this.portfolioService.getFutureEvidencesById(this.futureEvidenceId),\r\n        this.portfolioService.getPortfolioStudent(this.studentId),\r\n        this.classEnrollmentService.getStudentActiveActiveEnrollments(this.studentId)\r\n      ]).pipe(take(1))\r\n        .subscribe(([evidences, studentDetails, activeEnrollments]) => {\r\n          this.domainEvidence = evidences.domainEvidences;\r\n          this.measureEvidence = evidences.measureEvidences;\r\n          if (evidences.domainEvidences.length == 0 && evidences.measureEvidences.length == 0) {\r\n            this.toast.error('No Future Evidence available.');\r\n            if (this.classId && this.ageGradeId) {\r\n              this.router.navigate([`portfolio/class/${this.classId}/ageGradeInstrument/${this.ageGradeId}`]);\r\n            }\r\n          }\r\n\r\n          this.studentDetails = studentDetails as any;\r\n          this.studentActiveEnrollments = activeEnrollments;\r\n\r\n          this.domainEvidence?.forEach(evidence =>\r\n            evidence.url ? evidence.url = addHTTPS(evidence.url) : '');\r\n          this.measureEvidence?.forEach(evidence =>\r\n            evidence.url ? evidence.url = addHTTPS(evidence.url) : '');\r\n        });\r\n    }\r\n\r\n    this.lookup.getBaseMasterMeasures()\r\n      .pipe(take(1))\r\n      .subscribe((res: IBaseTemplateDomain[]) => { \r\n        if (this.isFutureEvidence) {\r\n          this.measures = res.filter(measure => !measure.onlyPilot);\r\n        } else {\r\n          this.measures = res;\r\n        }\r\n      });\r\n  }\r\n\r\n  getDomainEvidence(\r\n    studentClassEnrollmentId: number,\r\n    ageGradeId: number\r\n  ): void {\r\n    this.portfolioService\r\n      .getDomainEvidences(studentClassEnrollmentId, ageGradeId)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: IPortfolioEvidenceResponse[]) => (this.domainEvidence = res)),\r\n        tap((_) =>\r\n          this.domainEvidence?.forEach((evidence: IPortfolioEvidenceResponse) =>\r\n            evidence.url ? (evidence.url = addHTTPS(evidence.url)) : ''\r\n          )\r\n        )\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  getMeasureEvidence(\r\n    studentClassEnrollmentId: number,\r\n    ageGradeId: number\r\n  ): void {\r\n    this.measureEvidence = [];\r\n    this.portfolioService\r\n      .getMeasureEvidences(studentClassEnrollmentId, ageGradeId)\r\n      .pipe(\r\n        take(1),\r\n        tap(\r\n          (res: IPortfolioEvidenceResponse[]) => (this.measureEvidence = res)\r\n        ),\r\n        tap((_) =>\r\n          this.measureEvidence?.forEach(\r\n            (evidence: IPortfolioEvidenceResponse) =>\r\n              evidence.url ? (evidence.url = addHTTPS(evidence.url)) : ''\r\n          )\r\n        ),\r\n        tap((_) => this.getMeasurePrelimRating())\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  updateFutureEvidence() {\r\n    this.portfolioService.getFutureEvidencesById(this.assignmentPayload.futureEvidenceId!)\r\n    .pipe(take(1))\r\n    .subscribe(evidences=> {\r\n      this.domainEvidence = evidences.domainEvidences;\r\n      this.measureEvidence = evidences.measureEvidences;\r\n    });\r\n  }\r\n\r\n  updatePortfolioEvidence() {\r\n    if (this.studentClassEnrollmentId && this.ageGradeId) {\r\n      this.getDomainEvidence(\r\n        this.studentClassEnrollmentId,\r\n        this.ageGradeId\r\n      );\r\n      this.getMeasureEvidence(\r\n        this.studentClassEnrollmentId,\r\n        this.ageGradeId\r\n      );\r\n    }\r\n  }\r\n  updateEvidence(): void {\r\n      if (this.isFutureEvidence) {\r\n        this.updateFutureEvidence();\r\n      } else {\r\n        this.updatePortfolioEvidence();\r\n      }\r\n  }\r\n\r\n  getEvidenceCount(domainMeasure: any, type: number): string {\r\n    let evidenceItems: IPortfolioEvidenceResponse[] | undefined;\r\n    switch (type) {\r\n      case PortfolioMeasureType.Domain:\r\n        evidenceItems = this.domainEvidence?.filter(\r\n          (evidence) => evidence.domainId === domainMeasure.id\r\n        );\r\n        break;\r\n      case PortfolioMeasureType.Measure:\r\n        evidenceItems = this.measureEvidence?.filter(\r\n          (evidence) => evidence.measureId === domainMeasure.id\r\n        );\r\n        break;\r\n    }\r\n\r\n    const count = evidenceItems?.length || 0;\r\n    const pluralSuffix = count === 1 ? '' : 's';\r\n    return `${count} Evidence Item${pluralSuffix}`;\r\n  }\r\n\r\n  handleDomain(): void {\r\n    this.showDomain = true;\r\n    this.show = false;\r\n    this.domainBg = 'black';\r\n    this.measuresBg = 'white';\r\n\r\n    if (this.studentClassEnrollmentId && this.ageGradeId) {\r\n      this.getDomainEvidence(this.studentClassEnrollmentId, this.ageGradeId);\r\n    }\r\n  }\r\n\r\n  handleMeasures(): void {\r\n    this.showDomain = false;\r\n    this.show = false;\r\n    this.domainBg = 'white';\r\n    this.measuresBg = 'black';\r\n\r\n    if (this.studentClassEnrollmentId && this.ageGradeId) {\r\n      this.getMeasureEvidence(this.studentClassEnrollmentId, this.ageGradeId);\r\n    }\r\n  }\r\n\r\n  changeDomainShow(domainCode: string): void {\r\n    this.show = !this.show;\r\n    this.selectedDomain = domainCode;\r\n  }\r\n\r\n  changeMeasureShow(measureCode: string): void {\r\n    this.show = !this.show;\r\n    this.selectedMeasure = measureCode;\r\n  }\r\n\r\n  getStudentDetails(studentClassEnrollmentId: number): void {\r\n    this.classEnrollmentService\r\n      .getStudentClassEnrollment(studentClassEnrollmentId)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: any) => {\r\n          this.classEnrollmentDetails = res;\r\n          this.studentId = this.classEnrollmentDetails?.studentId;\r\n        }),\r\n\r\n        filter((_) => !!this.studentId), // check if studentId exists, if not stop observable stream\r\n        switchMap((_) =>\r\n          this.portfolioService.getPortfolioStudent(this.studentId!)\r\n        ),\r\n        tap((res: any) => {\r\n          this.studentDetails = res;\r\n          this.isPilot = this.studentDetails?.isPilotTest ?? false;\r\n        }),\r\n\r\n        filter((_) => !!this.studentDetails), // check if studentDetails exists, if not stop observable stream\r\n        switchMap((_) =>\r\n          this.portfolioService.getBaseMeasures(\r\n            this.ageGradeId!\r\n          )\r\n        ),\r\n        tap((res: any) => {\r\n          this.measures = res;\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  getInstrumentName(instrumentId: number): string {\r\n    switch (instrumentId) {\r\n      case AgeGradeInstrument.infantToddler:\r\n        return 'Infant Toddler';\r\n      case AgeGradeInstrument.kindergarten:\r\n        return 'Kindergarten';\r\n      case AgeGradeInstrument.preschool:\r\n        return 'Preschool';\r\n      case AgeGradeInstrument.schoolAge:\r\n        return 'School Age';\r\n      case AgeGradeInstrument.tnKindergarten:\r\n        return 'TN Kindergarten';\r\n      default:\r\n        return '';\r\n    }\r\n  }\r\n\r\n  getDescription(measureId: number, isDomain: boolean): string {\r\n    if (!isDomain) {\r\n      const currTab = this.measureEvidence?.find(\r\n        (evidence: IPortfolioEvidenceResponse) =>\r\n          evidence.measureId === measureId\r\n      );\r\n      const description = currTab ? currTab.description : '';\r\n      return description;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  getMeasurePrelimRating(): void {\r\n    this.measurePrelimRatings = [];\r\n    const measureIds = Array.from(\r\n      new Set(this.measureEvidence?.map((measure) => measure.measureId))\r\n    );\r\n\r\n    measureIds.forEach((id) => {\r\n      const measureEvidenceGroup = this.measureEvidence?.filter(\r\n        (measure: IPortfolioEvidenceResponse) =>\r\n          measure.measureId === id && (measure.createdOn || measure.updatedOn)\r\n      );\r\n      if (measureEvidenceGroup) {\r\n        const latestEvidence = [...measureEvidenceGroup].sort((a, b) => {\r\n          const aDate = new Date(a.updatedOn || a.createdOn);\r\n          const bDate = new Date(b.updatedOn || b.createdOn);\r\n          return bDate.getTime() - aDate.getTime();\r\n        })[0]; // Return evidence with the most recent updatedDate or createdDate\r\n\r\n        if (latestEvidence && latestEvidence.selectedLevel) {\r\n          this.measurePrelimRatings?.push(latestEvidence);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  updateEvidencePrelimRating(event: any): void {\r\n    this.portfolioService\r\n      .getMeasureEvidences(this.studentClassEnrollmentId!, this.ageGradeId!)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: IPortfolioEvidenceResponse[]) => {\r\n          const index = res.findIndex(\r\n            (evidence: IPortfolioEvidenceResponse) => evidence.id === event.id\r\n          );\r\n          if (this.measureEvidence) {\r\n            this.measureEvidence[index] = res[index];\r\n            this.getMeasurePrelimRating();\r\n          }\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  goBack() {\r\n    this.router.navigateByUrl(this.previousPage);\r\n  }\r\n\r\n  onDownloadPdf() {\r\n    if (this.showDomain) {\r\n      this.portfolioService\r\n        .generateDomainPdf(this.studentClassEnrollmentId!, this.ageGradeId!)\r\n        .pipe(take(1))\r\n        .subscribe((res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `${this.studentDetails?.firstName}_${this.studentDetails?.lastName}_domain_evidences`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        });\r\n    } else {\r\n      this.portfolioService\r\n        .generateMeasurePdf(this.studentClassEnrollmentId!, this.ageGradeId!)\r\n        .pipe(take(1))\r\n        .subscribe((res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `${this.studentDetails?.firstName}_${this.studentDetails?.lastName}_measure_evidences`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        });\r\n    }\r\n  }\r\n\r\n  addToMessageBoard() {\r\n    this.modal.open(PortfolioMessageBoxComponent, {\r\n      data: {\r\n        enrollmentId: this.studentClassEnrollmentId,\r\n        studentName: this.studentDetails?.firstName + ' ' + this.studentDetails?.lastName,\r\n        portfolioId: this.portfolioId,\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport {\r\n  IClassStudent,\r\n  IViewClassStudentsRequest,\r\n} from '@core/interfaces/iclasses';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { take } from 'rxjs';\r\nimport { DropChildComponent } from '../../../drop-child/drop-child.component';\r\nimport { TmplAstRecursiveVisitor } from '@angular/compiler';\r\n\r\nconst tableIconAction = {\r\n  transferChild: 'transferChild',\r\n  dropChild: 'dropChild',\r\n  viewChild: 'viewChild',\r\n};\r\n\r\n@Component({\r\n  selector: 'drdp-students-bulk-un-enrollment',\r\n  templateUrl: './students-bulk-un-enrollment.component.html',\r\n  styleUrls: ['./students-bulk-un-enrollment.component.scss'],\r\n})\r\nexport class StudentBulkUnEnrollmentComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  private subscriptions = new Subscription();\r\n  classroomName?: string;\r\n  ratingPeriodName?: string;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData!: any[];\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  totalData: number = 0;\r\n  pageSize: number = 10;\r\n  pageIndex: number = 0;\r\n  payload!: IViewClassStudentsRequest;\r\n  classId!: number;\r\n  isAdmin: boolean = false;\r\n  user = this.auth.getCurrentUser();\r\n  agencyId: number = 0;\r\n  siteId: number = 0;\r\n  ratingPeriodId: number = 0;\r\n  selectedStudent: any[] = [];\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'isSelected',\r\n      header: 'Select',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'lastName',\r\n      header: 'Last Name',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'enrollmentStartDate',\r\n      header: 'Agency Enrollment',\r\n      type: 'date',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'enrollmentEndDate',\r\n      header: 'Agency Withdrawal',\r\n      type: 'date',\r\n      isSortable: true,\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    private classService: ClassService,\r\n    private router: Router,\r\n    private activatedRoute: ActivatedRoute,\r\n    public modal: MatDialog,\r\n    private student: StudentService,\r\n    private auth: AuthService,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.isAdmin = this.auth.isSuperAdmin();\r\n    this.getClassIdFromUrl();\r\n    this.setClassroomAndRatingPeriodName();\r\n    this.getClassStudents();\r\n  }\r\n\r\n  setClassroomAndRatingPeriodName(): void {\r\n    this.classService\r\n      .getStudentsByClass(this.classId)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          this.classroomName = res.classroom.name;\r\n          this.ratingPeriodName = res.ratingPeriod.ratingPeriodName;\r\n          this.ratingPeriodId = res.ratingPeriod.id;\r\n          this.agencyId = res.classroom.agencyId;\r\n          this.siteId = res.siteId;\r\n        }\r\n      });\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  getClassStudents(): void {\r\n    this.payload = {\r\n      classId: this.classId,\r\n      pageIndex: this.pageIndex,\r\n      itemsPerPage: this.pageSize,\r\n      onlyActive: true,\r\n    };\r\n\r\n    this.classService\r\n      .getClassStudents(this.payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          res.items = res.items.map((data: any) => ({\r\n            ...data,\r\n            displayIcons: setIconDisplayObject(this.tableColumns, data),\r\n            isSelected: false,\r\n          }));\r\n          this.dataSource = new MatTableDataSource(res.items);\r\n          this.tableData = res.items;\r\n          this.totalData = res.totalData;\r\n        }\r\n      });\r\n  }\r\n\r\n  getClassIdFromUrl(): void {\r\n    this.classId = Number(this.activatedRoute.snapshot.paramMap.get('id'));\r\n  }\r\n\r\n  paginate(): void {\r\n    this.pageSize = this.paginator.pageSize;\r\n    this.pageIndex = this.paginator.pageIndex;\r\n\r\n    this.getClassStudents();\r\n  }\r\n\r\n  handleSelectedChild(event: any): void {\r\n    const { index, property } = event;\r\n    const data = this.tableData[index];\r\n\r\n    data.isSelected = !data.isSelected;\r\n  }\r\n\r\n  selectAll() {\r\n    this.tableData.forEach((item) => {\r\n      item.isSelected = true;\r\n    });\r\n    this.dataSource = new MatTableDataSource(this.tableData);\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n\r\n  onSave() {\r\n    var selectedStudents = this.tableData.filter(\r\n      (student) => student.isSelected\r\n    );\r\n\r\n    if (selectedStudents.length < 1) {\r\n      this.toast.error('No selected student/s.');\r\n      return;\r\n    }\r\n\r\n    selectedStudents = selectedStudents.map((data: any) => ({\r\n      ...data,\r\n      classId: this.classId,\r\n      siteId: this.siteId,\r\n      agencyId: this.agencyId,\r\n      ratingPeriodId: this.ratingPeriodId,\r\n    }));\r\n\r\n    const data = {\r\n      students: selectedStudents,\r\n      isBatch: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(DropChildComponent, {\r\n      data: data ? data : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((success) => {\r\n      if (success) {\r\n        this.getClassStudents();\r\n      }\r\n    });\r\n  }\r\n\r\n  onCancel() {\r\n    this.router.navigate([`/view-students/${this.classId}`]);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-full\">\r\n      <drdp-title\r\n        [title]=\"\r\n          'Viewing Students in ' +\r\n          (classroomName ?? '(Classroom Name Not Found)')\r\n        \"\r\n      ></drdp-title>\r\n      <h2 class=\"pb-5\">\r\n        Rating Period: {{ ratingPeriodName ?? \"(Rating Period Not Found)\" }}\r\n      </h2>\r\n      <div class=\"flex justify-end py-3\">\r\n        <drdp-btn\r\n          color=\"cancel\"\r\n          class=\"mr-3\"\r\n          mat-button\r\n          type=\"button\"\r\n          (click)=\"onCancel()\"\r\n        >\r\n          Cancel\r\n        </drdp-btn>\r\n        <drdp-btn mat-button type=\"submit\" (click)=\"onSave()\" cdkFocusInitial>\r\n          Withdraw Batch\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container>\r\n    <div class=\"w-full\">\r\n      <div class=\"text-blue-600 cursor-pointer\" (click)=\"selectAll()\">\r\n        Select All\r\n      </div>\r\n      <drdp-add-edit-table\r\n        (toggleSwitchActionItem)=\"handleSelectedChild($event)\"\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n\r\n<mat-paginator\r\n  [pageSizeOptions]=\"pageSizeOptions\"\r\n  [pageSize]=\"pageSize\"\r\n  [length]=\"totalData\"\r\n  [pageIndex]=\"pageIndex\"\r\n  (page)=\"paginate()\"\r\n>\r\n</mat-paginator>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport { IStudentSearchRequestDto } from '@core/interfaces/istudent';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { RatingService } from '@core/services/rating.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-pilot-test-children',\r\n  templateUrl: './pilot-test-children.component.html',\r\n  styleUrls: ['./pilot-test-children.component.scss']\r\n})\r\nexport class PilotTestChildrenComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  childSearch: FormGroup | any;\r\n  user = this.authService.getCurrentUser();\r\n  isSuperUser: boolean = this.authService.isSuperUser();\r\n  isSiteAdmin: boolean = this.authService.isSiteAdmin();\r\n  isTeacher: boolean = this.authService.isTeacher();\r\n  clearDropdowns = false;\r\n  pilotChildrenList: any[] = [];\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  ssidLabel = 'SSID';\r\n  ssidPlaceholder = 'SSID';\r\n  currentSchoolYear?: ISchoolYear;\r\n\r\n  private previousAgencyId: number | null = null;\r\n  private previousRatingPeriodId: number | null = null;\r\n\r\n  get firstName() { return this.childSearch.get('firstName') }\r\n  get lastName() { return this.childSearch.get('lastName') }\r\n  get stateId() { return this.childSearch.get('stateId') }\r\n  get agencyId() { return this.childSearch.get('agencyId') }\r\n  get SSID() { return this.childSearch.get('SSID') }\r\n  get localId() { return this.childSearch.get('localId') }\r\n  get ageGradeInstrumentId() { return this.childSearch.get('ageGradeInstrumentId') }\r\n  get DOB() { return this.childSearch.get('DOB') }\r\n  get drdpId() { return this.childSearch.get('drdpId')}\r\n  get ratingPeriodId() { return this.childSearch.get('ratingPeriodId')}\r\n  get classroomIds() { return this.childSearch.get('classroomIds')}\r\n  get siteIds() { return this.childSearch.get('siteIds')}\r\n\r\n  tableColumns = [\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n    { columnDef: 'dob', header: 'DOB', type: 'date' },\r\n    { columnDef: 'agencyName', header: 'Agency', type: 'text' },\r\n    { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n    { columnDef: 'className', header: 'Class', type: 'text' },\r\n    { columnDef: 'teacherOfRecordName', header: 'Teacher', type: 'text' },\r\n    { columnDef: 'enrollmentStartDate', header: 'Agency Enrollment', type: 'date' },\r\n    { columnDef: 'enrollmentEndDate', header: 'Agency Withdrawal', type: 'date' },\r\n    { columnDef: 'ageGradeInstrumentName', header: 'Age/Instrument', type: 'text' },\r\n    { columnDef: 'View Student', header: 'View Student', type: 'view' },\r\n    { columnDef: 'isPilotTest', header: 'Assign', type: 'checkBox', checkClass: 'checkbox accent-drdpblue-300 cursor-pointer', disabledWhen: (row: any) => row.hasRatings && row.isPilotTest }\r\n  ];\r\n\r\n  public get selectType() { return SelectType; }\r\n  constructor(private fb: FormBuilder, \r\n              private authService: AuthService, \r\n              private studentService: StudentService,\r\n              private toastService: ToastService,\r\n              private router: Router,\r\n              private stateService: StateService,\r\n              private ratingService: RatingService,\r\n              private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.lookupService.getCurrentSchoolYear().pipe().subscribe((res: any) => {\r\n      this.currentSchoolYear = res;\r\n    });\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  initializeTableData(res?: any):void {\r\n    this.dataSource = new MatTableDataSource(res.items)\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.items;\r\n   }\r\n\r\n  getSsidLabel(stateId: number): void {\r\n    this.stateService\r\n      .getStateConfigurations(stateId)\r\n      .pipe(\r\n        take(1),\r\n        tap((config: IStateConfiguration[]) => {\r\n          const ssid = config.find(\r\n            (x: any) => x.columnName === StudentDemographic.SSID\r\n          );\r\n          this.ssidLabel = ssid?.label ? ssid?.label : this.ssidLabel;\r\n          this.ssidPlaceholder = ssid?.label ? ssid?.label : this.ssidLabel;\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  initializeForm():void {\r\n    this.childSearch = this.fb.group({\r\n      firstName: [null, [Validators.maxLength(100)]],\r\n      lastName: [null, [Validators.maxLength(100)]],\r\n      stateId: [null],\r\n      agencyId: [null],\r\n      ageGradeInstrumentId: [null],\r\n      SSID: [null, [Validators.maxLength(100)]],\r\n      localId: [null, [Validators.maxLength(100)]],\r\n      drdpId: [null, [Validators.maxLength(100)]],\r\n      DOB: [null],\r\n      ratingPeriodId: [null, [Validators.required]],\r\n      classroomIds: [null],\r\n      siteIds: [null],\r\n    });\r\n\r\n    const { stateId, agencyId, sites } = this.user;\r\n\r\n    if (stateId) this.childSearch.patchValue({ stateId: stateId });\r\n    if (agencyId) this.childSearch.patchValue({ agencyId: agencyId });\r\n    if (sites) {\r\n      const siteIds = sites?.map((sites: any) => sites.siteId);\r\n      this.childSearch.patchValue({ siteIds: siteIds });\r\n    } \r\n    \r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch(type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case SelectType.Sites:\r\n        const siteIds = event?.map((sites: any) => sites.id);\r\n        this.siteIds.setValue(siteIds);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        this.ratingPeriodId.setValue(event?.id);\r\n        break;\r\n      case SelectType.Class:\r\n        const classIds = event?.map((classroom: any) => classroom.id);\r\n        this.classroomIds.setValue(classIds);\r\n        break;\r\n      case SelectType.AgeInstrument:\r\n        this.ageGradeInstrumentId.setValue(event?.id);\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.DOB.setValue(event);\r\n  }\r\n\r\n  search(): void {\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  onClear(): void {\r\n    this.clearDropdowns = true;\r\n    this.childSearch.reset();\r\n  }\r\n\r\n  assignRole(event: any): void {\r\n    const { data } = event;\r\n    if (this.pilotChildrenList.some((child: any) => child.id === data.id)) {\r\n      const index = this.pilotChildrenList.findIndex((child: any) => child.id === data.id);\r\n      this.pilotChildrenList.splice(index, 1);\r\n    } else {\r\n      this.pilotChildrenList.push(data);\r\n    }\r\n  }\r\n\r\n  submitPilotChildren(): void {\r\n    if (!this.pilotChildrenList.length) {\r\n      return this.toastService.error('No new assignments to save.');\r\n    }\r\n\r\n    this.studentService.updateStudentPilotRole(this.pilotChildrenList).pipe(\r\n      take(1),\r\n      tap(_ => this.pilotChildrenList = [])\r\n    ).subscribe();\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    if (this.ratingPeriodId.value == null) {\r\n      this.toastService.error('Rating Period is required');\r\n      return;\r\n    }\r\n\r\n    const currentAgencyId = this.agencyId.value;\r\n    const currentRatingPeriodId = this.ratingPeriodId.value;\r\n\r\n    this.previousAgencyId = currentAgencyId;\r\n    this.previousRatingPeriodId = currentRatingPeriodId;\r\n\r\n    const siteIds = this.siteIds.value?.length\r\n      ? this.siteIds.value.toString()\r\n      : null;\r\n    const pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    const itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n\r\n    const payload: IStudentSearchRequestDto = {\r\n      ...this.childSearch.value,\r\n      siteIds,\r\n      pageIndex,\r\n      itemsPerPage,\r\n    };\r\n\r\n    this.studentService.search(payload).pipe(\r\n      take(1),\r\n      tap((res: any) => {\r\n        const { children } = res;\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(children);\r\n        if (children.totalData > 25) this.pageSizeOptions.push(children.totalData);\r\n      })\r\n    ).subscribe();\r\n  }\r\n\r\n  openViewChild(viewData: IModalEmitData): void {\r\n    if (!this.isSuperUser && viewData.data.enrollmentEndDate) {\r\n      this.toastService.error('Child is no longer enrolled with your agency.');\r\n      return;\r\n    }\r\n    this.router.navigate(['/view-child/' + viewData.data.id]);\r\n  }\r\n}","<div class=\"p-5\">\r\n  <drdp-title title=\"Assign Pilot Test Children\"></drdp-title>\r\n\r\n  <drdp-container additionClasses=\"h-max\">\r\n    <div class=\"w-full flex flex-col\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\" min-h-[7rem] w-full\">\r\n        <form\r\n          class=\"grid grid-cols-1 grid-rows-3 md:grid-cols-3 lg:grid-cols-5 p-2 gap-3 flex-row content-center\"\r\n          [formGroup]=\"childSearch\"\r\n        >\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">First Name:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"First Name\"\r\n                formControlName=\"firstName\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">Last Name:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"Last Name\"\r\n                formControlName=\"lastName\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-age-grade\r\n              #ageGradeSelectSelect\r\n              [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n              (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n              [stateId]=\"stateId.value\"\r\n              [multiSelect]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              label=\"Child Age/Grade Instrument\"\r\n            >\r\n            </drdp-select-age-grade>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">DRDP ID:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"DRDP ID\"\r\n                formControlName=\"drdpId\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">{{ ssidLabel }}</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                [placeholder]=\"ssidPlaceholder\"\r\n                formControlName=\"SSID\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">Agency ID:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"Agency ID\"\r\n                formControlName=\"localId\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div #dob class=\"col-span-1 self-end\">\r\n            <drdp-date-picker\r\n              label=\"DOB\"\r\n              [isReadOnly]=\"false\"\r\n              (emitDate)=\"handleDate($event)\"\r\n            >\r\n            </drdp-date-picker>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state\r\n              #stateSelect\r\n              [initialStateId]=\"stateId?.value\"\r\n              (state)=\"handleDropdown($event, selectType.States)\"\r\n              [clear]=\"clearDropdowns\"\r\n            >\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency\r\n              #agencySelect\r\n              [initialAgencyId]=\"agencyId.value\"\r\n              (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n              [stateId]=\"stateId.value\"\r\n              [required]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              [disabled]=\"!isSuperUser\"\r\n            >\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site\r\n              [initialSiteIds]=\"siteIds.value\"\r\n              (site)=\"handleDropdown($event, selectType.Sites)\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [clear]=\"clearDropdowns\"\r\n              [required]=\"false\"\r\n            >\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period\r\n              (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n              [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [required]=\"true\"\r\n              [clear]=\"clearDropdowns\"\r\n              [omitFutureRps]=\"true\"\r\n            >\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-classroom\r\n              (classroom)=\"handleDropdown($event, selectType.Class)\"\r\n              [initialClassroomIds]=\"classroomIds.value\"\r\n              [ratingPeriodId]=\"ratingPeriodId.value\"\r\n              [siteIds]=\"siteIds.value\"\r\n              [required]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              [useClassroomId]=\"true\"\r\n            >\r\n            </drdp-select-classroom>\r\n          </div>\r\n          <div class=\"col-span-1 xl:col-span-2\"></div>\r\n          <div\r\n            class=\"lg:col-span-2 xl:col-span-1 flex flex-row justify-evenly items-end xl:flex-row xl:justify-evenly xl:items-end\"\r\n          >\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn [disabled]=\"childSearch.invalid\" (click)=\"search()\">\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <drdp-add-edit-table \r\n          [dataSource]=\"dataSource\" \r\n          [tableData]=\"tableData\" \r\n          [columns]=\"tableColumns\"\r\n          viewIcon=\"uil uil-file text-drdpblue-300\" \r\n          (viewActionItem)=\"openViewChild($event)\"\r\n          (toggleSwitchActionItem)=\"assignRole($event)\">\r\n      </drdp-add-edit-table>\r\n      <div class=\"flex justify-end align-bottom\">\r\n        <drdp-btn mat-button type=\"submit\" (click)=\"submitPilotChildren()\">Save</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n\r\n  <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\nimport { TransferChildComponent } from '../manage-enrollment/transfer-child/transfer-child.component';\r\nimport { DropChildComponent } from '../manage-enrollment/drop-child/drop-child.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TableColumnType } from '@core/enums/table';\r\n\r\nconst tableIconAction = {\r\n  transferChild: 'transferChild',\r\n  dropChild: 'dropChild',\r\n  viewChild: 'viewChild',\r\n};\r\n\r\n@Component({\r\n  selector: 'drdp-children',\r\n  templateUrl: './children.component.html',\r\n  styleUrls: ['./children.component.scss'],\r\n})\r\nexport class ChildrenComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  pageSizeOptions: number[] = [2, 10, 25, 50, 100];\r\n  pageSize: number = 10;\r\n  totalData: number = 0;\r\n  pageIndex: number = 0;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  searchForm: FormGroup | any;\r\n\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n  get siteId() {\r\n    return this.searchForm.get('siteId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.searchForm.get('ratingPeriodId');\r\n  }\r\n  get classId() {\r\n    return this.searchForm.get('classId');\r\n  }\r\n\r\n  user = this.auth.getCurrentUser();\r\n\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  classroomList: IClassroomAssignment[] = [];\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  select = SelectType;\r\n  clearState = false;\r\n  clearAgency = false;\r\n  clearSite = false;\r\n  isSuperUser = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'lastName',\r\n      header: 'Last Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'dob',\r\n      header: 'DOB',\r\n      type: TableColumnType.date,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'agency',\r\n      header: 'Agency',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'site',\r\n      header: 'Site',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'class',\r\n      header: 'Class',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'teachers',\r\n      header: 'Teacher',\r\n      type: TableColumnType.bulletList,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'enrollmentStartDate',\r\n      header: 'Agency Enrollment',\r\n      type: TableColumnType.date,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'enrollmentEndDate',\r\n      header: 'Agency Withdrawal',\r\n      type: TableColumnType.date,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'ageGradeInstrumentName',\r\n      header: 'Age/Instrument',\r\n      type: TableColumnType.text,\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: tableIconAction.viewChild,\r\n      type: TableColumnType.actionIcon,\r\n      action: tableIconAction.viewChild,\r\n      header: \"View Student\",\r\n      icon: 'file',\r\n      cursorClass: 'cursor-pointer',\r\n      colorClass: 'text-drdpblue-300',\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private auth: AuthService,\r\n    private toastService: ToastService,\r\n    private permissionService: PermissionService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private classService: ClassService,\r\n    private router: Router,\r\n    public modal: MatDialog\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n\r\n    if (this.initAgencyId) {\r\n      this.agencyId.setValue(this.initAgencyId);\r\n      this.getRatingPeriod();\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null],\r\n      ratingPeriodId: [null],\r\n      siteId: [null],\r\n      classId: [null],\r\n    });\r\n  }\r\n\r\n  getRatingPeriod(): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(this.agencyId.value)\r\n      .pipe(take(1))\r\n      .subscribe((req) => {\r\n        this.ratingPeriodList = req;\r\n      });\r\n  }\r\n\r\n  search() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.paginateRatings(true);\r\n  }\r\n\r\n  paginateRatings(resetPage?: boolean) {\r\n    const payload = {\r\n      agencyId: this.agencyId.value,\r\n      ratingPeriodId: this.ratingPeriodId.value,\r\n      siteId: this.siteId.value,\r\n      classId: this.classId.value,\r\n      pageIndex: resetPage ? 0 : this.paginator.pageIndex + 1,\r\n      itemsPerPage: resetPage ? 10 : this.paginator.pageSize,\r\n    };\r\n\r\n    this.classService\r\n      .getActiveClassStudentsByPermissions(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          if (resetPage) this.paginator.firstPage();\r\n          this.dataSource = new MatTableDataSource(res.items);\r\n          this.tableData = res.items;\r\n          this.totalData = res.totalData;\r\n        }\r\n      });\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    event.data.classId = this.classId.value;\r\n    event.data.agencyId = this.agencyId.value;\r\n    event.data.ratingPeriodId = this.ratingPeriodId.value;\r\n    event.data.siteId = this.siteId.value;\r\n    switch (event.action) {\r\n      case tableIconAction.transferChild:\r\n        this.transferChildModal(event);\r\n        break;\r\n      case tableIconAction.dropChild:\r\n        this.dropChildModal(event);\r\n        break;\r\n      case tableIconAction.viewChild:\r\n        this.router.navigate(['/view-child/' + event.data.id]);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  transferChildModal(event: IModalEmitData) {\r\n    if (event.data.id > 0) {\r\n      const modalRef = this.modal.open(TransferChildComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe((success) => {\r\n        if (success) {\r\n          this.search();\r\n        }\r\n      });\r\n    } else {\r\n      this.toastService.error('No Student Data Present');\r\n    }\r\n  }\r\n\r\n  dropChildModal(event: IModalEmitData) {\r\n    if (event.data.id > 0) {\r\n      const modalRef = this.modal.open(DropChildComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe((success) => {\r\n        if (success) {\r\n          this.search();\r\n        }\r\n      });\r\n    } else {\r\n      this.toastService.error('No Student Data Present');\r\n    }\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.classId.setValue(null);\r\n    this.ratingPeriodId.setValue(null);\r\n    this.classroomList = [];\r\n    if (agency) {\r\n      this.getRatingPeriod();\r\n    } else {\r\n      this.ratingPeriodList = [];\r\n      this.classroomList = [];\r\n    }\r\n  }\r\n\r\n  handleChosenSite(site: any): void {\r\n    this.siteId.setValue(site?.id);\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleChosenClassroom(classroom: any): void {\r\n    this.classId.setValue(classroom?.id);\r\n  }\r\n\r\n  handleChosenRatingPeriod(ratingPeriod: any): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    this.classroomList = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteId.value ? [this.siteId.value] : null;\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? '';\r\n    payload.itemsPerPage = 10;\r\n    payload.useClassId = true;\r\n\r\n    if (payload.siteIds?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id)\r\n          );\r\n        });\r\n    }\r\n  }\r\n\r\n  clear(): void {\r\n    this.classroomSelect?.clear();\r\n    this.ratingPeriodSelect?.clear();\r\n    this.clearSite = true;\r\n    this.classroomList = [];\r\n    if (this.isSuperUser) {\r\n      this.initStateId = 0;\r\n      this.stateId.setValue(null);\r\n      this.stateSelect?.clear();\r\n      this.agencyId.setValue(null);\r\n      this.agencySelect?.clear();\r\n      this.sitesSelect?.clear();\r\n      this.ratingPeriodList = [];\r\n      this.clearState = true;\r\n      this.clearAgency = true;\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Viewing Children\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full mt-4\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\" #ngForm=\"ngForm\">\r\n        <div\r\n          class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state [initialStateId]=\"initStateId\" (state)=\"handleState($event)\" [required]=\"true\"\r\n              [clear]=\"clearState\" [disabled]=\"!isSuperUser\" [invalid]=\"true\">\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency (agency)=\"handleChosenAgency($event)\" [stateId]=\"stateId.value\"\r\n              [initialAgencyId]=\"initAgencyId\" [clear]=\"clearAgency\">\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select #ratingPeriodSelect label=\"Rating Period\" [options]=\"ratingPeriodList\"\r\n              [selectType]=\"select.RatingPeriods\" (onSelected)=\"handleChosenRatingPeriod($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site (site)=\"handleChosenSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"false\"\r\n              [multiSelectInitVals]=\"false\" [clear]=\"clearSite\">\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select #classroomSelect label=\"Classroom\" [options]=\"classroomList\" [selectType]=\"select.Class\"\r\n              (onSelected)=\"handleChosenClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n          <div class=\"hidden lg:block lg:col-span-4 xl:col-span-4 self-end\"></div>\r\n          <div class=\"flex flex-row justify-evenly lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn type=\"submit\">\r\n                <span class=\"px-2\" (click)=\"search()\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"clear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n\r\n\r\n    <div>\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        (actionIconClicked)=\"onIconClick($event)\">\r\n      </drdp-add-edit-table>\r\n      <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\"\r\n        [pageIndex]=\"pageIndex\" (page)=\"paginateRatings()\">\r\n      </mat-paginator>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Observable } from 'rxjs';\r\n\r\ntype CanDeactivateType = Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\r\n\r\nexport interface CanComponentDeactivate {\r\n  canDeactivate: () => CanDeactivateType;\r\n}\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CanDeactivateGuard  implements CanDeactivate<CanComponentDeactivate> {\r\n\r\n  constructor(public dialog: MatDialog) {}\r\n  canDeactivate(\r\n    component: CanComponentDeactivate,\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot): CanDeactivateType {\r\n      const canDeactivate = component.canDeactivate ? component.canDeactivate() : true;\r\n      if (!canDeactivate) {\r\n           return this.confirmNoSave();\r\n      }\r\n      return true;\r\n  }\r\n\r\n  confirmNoSave(): Observable<boolean> {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'You have unsaved changes',\r\n          message: 'Are you sure you want to navigate away from this page? Please choose one of the options below.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'Exit Page Without Saving',\r\n          cancelText: 'Return to Page',\r\n          showCancel: true,\r\n        },\r\n      },\r\n    };\r\n\r\n    const dialogRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n    return dialogRef.afterClosed();\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\" id=\"addFeatureDialog\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Batch Re-Enroll Confirmation</h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n\r\n  <div *ngIf=\"displayResult\" mat-dialog-content>\r\n    <div *ngIf=\"ratingOptions.length != 0; else noRatings\" class=\"content py-3\">\r\n      <p class=\"w-96\">\r\n        <em\r\n          >You must have the new enrollment classroom and rating period created\r\n          prior to submitting the re-enroll.</em\r\n        >\r\n      </p>\r\n      <div class=\"col-span-2 mt-2\">\r\n        <label class=\"font-normal mb-2\" for=\"childName\"\r\n          >Selected Children</label\r\n        >\r\n        <ul>\r\n          <li *ngFor=\"let child of students\">\r\n            {{ child.firstName + \" \" + child.lastName }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <form [formGroup]=\"reEnrollmentForm\">\r\n        <div class=\"flex flex-row\">\r\n          <div class=\"mr-12\">\r\n            <label class=\"font-normal\">Classroom</label>\r\n            <p>{{ data.name }}</p>\r\n          </div>\r\n          <div class=\"w-64\">\r\n            <label class=\"font-normal required\">Rating Period</label>\r\n            <mat-select\r\n              placeholder=\"Select Rating Period\"\r\n              formControlName=\"ratingPeriodId\"\r\n            >\r\n              <mat-option\r\n                *ngFor=\"let rating of ratingOptions\"\r\n                [value]=\"rating.id\"\r\n                (onSelectionChange)=\"handleRatingPeriod(rating)\"\r\n              >\r\n                {{ rating.ratingPeriodName }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </div>\r\n        </div>\r\n        <div class=\"grid grid-cols-2 gap-x-4 items-end\">\r\n          <div class=\"relative\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-date-picker label=\"Classroom End Date\"\r\n                [initialDate]=\"classExitDate?.value\"\r\n                labelClasses=\"pb-1\"\r\n                [isRequired]=\"true\"\r\n                (emitDate)=\"handleDate($event, 'classExitDate')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n            <div class=\"absolute top-0 left-full mt-1 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=endDateInfo></i>\r\n            </div>\r\n          </div>\r\n          <div class=\"relative\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-date-picker label=\"Classroom Enrollment Date\"\r\n                [initialDate]=\"classEnrollmentDate?.value\"\r\n                labelClasses=\"pb-1\"\r\n                [isRequired]=\"true\"\r\n                (emitDate)=\"handleDate($event, 'classEnrollmentDate')\">\r\n              </drdp-date-picker>\r\n            </div>\r\n            <div class=\"absolute top-0 left-full mt-1 ml-[-2px]\">\r\n              <i class=\"uil uil-info-circle text-xs\" [matTooltip]=enrollmentDateInfo></i>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"w-96\">\r\n          <mat-error *ngIf=\"classEnrollmentDate.hasError('dateNotWithinRatingPeriod')\">\r\n            Invalid date. Date must be between rating period's start and end dates.\r\n          </mat-error>\r\n          <mat-error *ngIf=\"reEnrollmentForm.hasError('dateMismatch')\">\r\n            Invalid date range. The End Date cannot be after the Enrollment\r\n            Date.\r\n          </mat-error>\r\n        </div>\r\n      </form>\r\n    </div>\r\n    <ng-template #noRatings>\r\n      <div class=\"flex flex-row mt-2\">\r\n        <p>No rating periods left to re-enroll for this classroom.</p>\r\n      </div>\r\n    </ng-template>\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex flex-row justify-end\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button mat-dialog-close>\r\n      Cancel\r\n    </drdp-btn>\r\n    <drdp-btn\r\n    *ngIf=\"ratingOptions.length > 0\"\r\n      color=\"blue\"\r\n      [disabled]=\"\r\n        ratingOptions.length == 0 || isProcessing || reEnrollmentForm.invalid\r\n      \"\r\n      mat-button\r\n      (click)=\"submit()\"\r\n    >\r\n      {{ submitBtnText }}\r\n    </drdp-btn>\r\n  </div>\r\n</div>\r\n","import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { take } from 'rxjs';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { IClass } from '@core/interfaces/iclasses';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { Component, Inject, OnInit } from '@angular/core';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestBatch,\r\n} from '@core/interfaces/istudent-request';\r\nimport { IStudentSearchResponseDto } from '@core/interfaces/istudent';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\n\r\n@Component({\r\n  selector: 'drdp-batch-re-enroll-child',\r\n  templateUrl: './batch-re-enroll-child.component.html',\r\n  styleUrls: ['./batch-re-enroll-child.component.scss'],\r\n})\r\nexport class BatchReEnrollChildComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  ratingOptions: IRatingPeriod[] = [];\r\n  submitBtnText = '';\r\n  isAdmin: boolean = false;\r\n  reEnrollmentForm: FormGroup | any;\r\n  existingClasses: IClass[] = [];\r\n  displayResult = false;\r\n  isProcessing = false;\r\n  students?: IStudentSearchResponseDto[];\r\n  rpStartDate!: number;\r\n  rpEndDate!: number;\r\n  agencyId?: number;\r\n  endDateInfo = 'The last day the child will be enrolled in the current class enrollment.';\r\n  enrollmentDateInfo = 'The day the child will start in the new class enrollment.';\r\n\r\n  get ratingPeriodId() {\r\n    return this.reEnrollmentForm.get('ratingPeriodId');\r\n  }\r\n  get classExitDate() {\r\n    return this.reEnrollmentForm.get('classExitDate');\r\n  }\r\n  get classEnrollmentDate() {\r\n     return this.reEnrollmentForm.get('classEnrollmentDate');\r\n  }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private permissionService: PermissionService,\r\n    private studentRequestService: StudentRequestService,\r\n    private classService: ClassService,\r\n    private toastService: ToastService,\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<BatchReEnrollChildComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public data: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.agencyId = this.data.agencyId;\r\n\r\n    this.isAdmin = this.permissionService.checkPermission(\r\n      Permission.AdminEnrollmentByPass\r\n    );\r\n\r\n    this.submitBtnText = this.isAdmin\r\n      ? 'Save and Re-Enroll'\r\n      : 'Save and Send For Approval';\r\n\r\n    this.classService\r\n      .getClassesByClassroom(this.data.classroomId)\r\n      .pipe(take(1))\r\n      .subscribe((result) => {\r\n        const ratingPeriods = result.flatMap((obj) => obj.ratingPeriod);\r\n        const currentRatingPeriod = ratingPeriods.find(\r\n          (r: any) => r.id == this.data.ratingPeriodId\r\n        );\r\n\r\n        if (currentRatingPeriod) {\r\n          this.ratingOptions = this.filterRatingOptions(ratingPeriods, currentRatingPeriod);\r\n          this.students = this.data.students;\r\n          this.existingClasses = result;\r\n          this.displayResult = true;\r\n        }\r\n      });\r\n  }\r\n\r\n  isCurrentDateBelowMinStartDate (minStartDate: string): boolean {\r\n    const currentDate = new Date();\r\n    const dateWithoutTime = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());\r\n    return dateWithoutTime < new Date(minStartDate);\r\n  };\r\n\r\n  filterRatingOptions(ratingPeriods: IRatingPeriod[], currentRatingPeriod: IRatingPeriod): IRatingPeriod[] {\r\n    let ratingOptions = ratingPeriods.filter(\r\n      (r: IRatingPeriod) =>\r\n        new Date(r.startDate) > new Date(currentRatingPeriod.startDate) &&\r\n        r.id != this.data.ratingPeriodId\r\n        &&\r\n        !this.isCurrentDateBelowMinStartDate(r.minDate.toString())\r\n    );\r\n    return ratingOptions;\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.reEnrollmentForm = this.fb.group({\r\n      ratingPeriodId: [null, Validators.required],\r\n      classEnrollmentDate: [null, [Validators.required]],\r\n      classExitDate: [null, [Validators.required]],\r\n    }, {validator: [CustomValidators.dateValidator('classExitDate', 'classEnrollmentDate')]\r\n    });\r\n  }\r\n\r\n  handleDate(event: any, controlName: string): void {\r\n    if (event === '' || !event) {\r\n      this.reEnrollmentForm.get(controlName).setValue(null);\r\n    } else {\r\n     this.reEnrollmentForm.get(controlName).setValue(event);\r\n    }\r\n    this.checkEnrollmentDate();\r\n  }\r\n\r\n  checkEnrollmentDate(): void {\r\n    if (this.classEnrollmentDate.value && this.ratingPeriodId.value) {\r\n      const checkDate = new Date(this.classEnrollmentDate.value).getTime();\r\n      if (checkDate < this.rpStartDate || checkDate > this.rpEndDate) {\r\n        this.classEnrollmentDate.setErrors({dateNotWithinRatingPeriod: true});\r\n      } else {\r\n        this.classEnrollmentDate.setErrors(null);\r\n      }\r\n    }\r\n  }\r\n\r\n  handleRatingPeriod(event: IRatingPeriod): void {\r\n    this.ratingPeriodId.setValue(event.id);\r\n    this.rpStartDate = new Date(event.minDate).getTime();\r\n    this.rpEndDate = new Date(event.maxDate).getTime();\r\n    this.checkEnrollmentDate();\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.reEnrollmentForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    const reEnrollClass = this.existingClasses.filter(\r\n      (ec) => ec.ratingPeriodId == this.ratingPeriodId.value\r\n    )[0];\r\n\r\n    const payload: IStudentRequestBatch = {\r\n      studentRequestDtos: [],\r\n      requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n      isBatch: true,\r\n    };\r\n\r\n    this.isProcessing = true;\r\n    const successMessage = this.isAdmin\r\n      ? 'Students successfully re-enrolled'\r\n      : 'Re-enrollment request has been sent';\r\n\r\n    if (this.students?.length) {\r\n      const studentRequest: IStudentRequest[] = this.students.map(\r\n        (student: IStudentSearchResponseDto) => ({\r\n          fromClassId: this.data.fromClassId,\r\n          toClassId: reEnrollClass.id,\r\n          studentId: student.id,\r\n          requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n          siteId: student.siteId,\r\n          studentName: `${student.firstName} ${student.lastName}`,\r\n          classEnrollmentDate: this.classEnrollmentDate.value,\r\n          classExitDate: this.classExitDate.value,\r\n        })\r\n      );\r\n      payload.studentRequestDtos = studentRequest;\r\n      payload.siteId = studentRequest[0].siteId;\r\n\r\n\r\n    this.studentRequestService.checkDuplicateBatch(payload)\r\n    .pipe(take(1))\r\n    .subscribe((duplicates) => {\r\n      if(duplicates && duplicates.length > 0) {\r\n        this.dialogRef.close({ success: false, duplicates: duplicates });\r\n      }\r\n      else {\r\n          this.studentRequestService\r\n          .processBatchRequest(payload, successMessage)\r\n          .pipe(take(1))\r\n          .subscribe((_) => {\r\n            this.isProcessing = false;\r\n            this.dialogRef.close({ success: true });\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <drdp-title title=\"Manage Enrollment\"></drdp-title>\r\n\r\n  <drdp-container additionClasses=\"h-max\">\r\n    <div class=\"w-full flex flex-col\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\" min-h-[7rem] w-full\">\r\n        <form\r\n          class=\"grid grid-cols-1 grid-rows-3 md:grid-cols-3 lg:grid-cols-5 p-2 gap-3 flex-row content-center\"\r\n          [formGroup]=\"childSearch\"\r\n        >\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">First Name:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"First Name\"\r\n                formControlName=\"firstName\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">Last Name:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"Last Name\"\r\n                formControlName=\"lastName\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-age-grade\r\n              #ageGradeSelectSelect\r\n              [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n              (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n              [stateId]=\"stateId.value\"\r\n              [multiSelect]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              label=\"Child Age/Grade Instrument\"\r\n            >\r\n            </drdp-select-age-grade>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">DRDP ID:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"DRDP ID\"\r\n                formControlName=\"drdpId\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">{{ ssidLabel }}</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                [placeholder]=\"ssidPlaceholder\"\r\n                formControlName=\"SSID\"\r\n                class=\"w-full bg-drdpblue-200 border-b-2 border-black focus:outline-none focus:border-drdpblue-300\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <label class=\"font-bold\">Agency ID:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input\r\n                matInput\r\n                placeholder=\"Agency ID\"\r\n                formControlName=\"localId\"\r\n              />\r\n            </div>\r\n          </div>\r\n          <div #dob class=\"col-span-1 self-end\">\r\n            <drdp-date-picker\r\n              label=\"DOB\"\r\n              [isReadOnly]=\"false\"\r\n              (emitDate)=\"handleDate($event)\"\r\n            >\r\n            </drdp-date-picker>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state\r\n              #stateSelect\r\n              [initialStateId]=\"stateId?.value\"\r\n              (state)=\"handleDropdown($event, selectType.States)\"\r\n              [clear]=\"clearDropdowns\"\r\n            >\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency\r\n              #agencySelect\r\n              [initialAgencyId]=\"agencyId.value\"\r\n              (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n              [stateId]=\"stateId.value\"\r\n              [required]=\"true\"\r\n              [clear]=\"clearDropdowns\"\r\n              [disabled]=\"!isSuperUser\"\r\n            >\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site\r\n              [initialSiteIds]=\"siteIds.value\"\r\n              (site)=\"handleDropdown($event, selectType.Sites)\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [clear]=\"clearDropdowns\"\r\n              [required]=\"true\"\r\n            >\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period\r\n              (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n              [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n              [agencyId]=\"agencyId.value\"\r\n              [required]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              [omitFutureRps]=\"true\"\r\n            >\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-classroom\r\n              (classroom)=\"handleDropdown($event, selectType.Class)\"\r\n              [initialClassroomIds]=\"classroomIds.value\"\r\n              [ratingPeriodId]=\"ratingPeriodId.value\"\r\n              [siteIds]=\"siteIds.value\"\r\n              [required]=\"false\"\r\n              [clear]=\"clearDropdowns\"\r\n              [useClassroomId]=\"true\"\r\n            >\r\n            </drdp-select-classroom>\r\n          </div>\r\n          <div class=\"col-span-1 xl:col-span-2\"></div>\r\n          <div\r\n            class=\"lg:col-span-2 xl:col-span-1 flex flex-row justify-evenly items-end xl:flex-row xl:justify-evenly xl:items-end\"\r\n          >\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn [disabled]=\"childSearch.invalid\" (click)=\"search()\">\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <div\r\n        *ngIf=\"tableData?.length\"\r\n        class=\"grid grid-cols-1 md:grid-cols-6 py-4 gap-2 content-center\"\r\n      >\r\n        <div class=\"col-span-3 self-end\">\r\n          <drdp-btn\r\n            color=\"outline\"\r\n            (click)=\"selectAllStudents()\"\r\n            additionalClasses=\"text-sm\"\r\n            >Select All</drdp-btn\r\n          >\r\n        </div>\r\n        <div class=\"col-span-1 self-end\" [matTooltip]=\"transferInfoText\" matTooltipPosition=\"above\">\r\n          <div class=\"text-end\">\r\n            <i class=\"uil uil-info-circle\" style=\"font-size: 0.8em; vertical-align: middle;\"></i>\r\n          </div>\r\n          <drdp-btn additionalClasses=\"text-sm w-full\" (click)=\"batchTransfer()\"\r\n            >Transfer\r\n          </drdp-btn\r\n          >\r\n        </div>\r\n        <div class=\"col-span-1 self-end\" [matTooltip]=\"reEnrollInfoText\" matTooltipPosition=\"above\">\r\n          <div class=\"text-end\">\r\n            <i class=\"uil uil-info-circle\" style=\"font-size: 0.8em; vertical-align: middle;\"></i>\r\n          </div>\r\n          <drdp-btn additionalClasses=\"text-sm w-full\" (click)=\"batchReEnroll()\"\r\n            >Re-Enroll\r\n          </drdp-btn\r\n          >\r\n        </div>\r\n        <div class=\"col-span-1 self-end\" [matTooltip]=\"withdrawInfoText\" matTooltipPosition=\"above\">\r\n          <div class=\"text-end\">\r\n            <i class=\"uil uil-info-circle\" style=\"font-size: 0.8em; vertical-align: middle;\"></i>\r\n          </div>\r\n          <drdp-btn additionalClasses=\"text-xs w-full\" (click)=\"batchWithdraw()\"\r\n            >Withdraw from Agency\r\n          </drdp-btn\r\n          >\r\n        </div>\r\n      </div>\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        viewIcon=\"uil uil-file text-drdpblue-300\"\r\n        (viewActionItem)=\"openViewChild($event)\"\r\n        (toggleSwitchActionItem)=\"handleCheckbox($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n\r\n  <mat-paginator\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\"\r\n  >\r\n  </mat-paginator>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IStateConfiguration } from '@core/interfaces/istate-configurations';\r\nimport {\r\n  IStudentSearchRequestDto,\r\n  IStudentSearchResponseDto,\r\n} from '@core/interfaces/istudent';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, map, of, switchMap, take, tap } from 'rxjs';\r\nimport { TransferChildComponent } from '../transfer-child/transfer-child.component';\r\nimport { DropChildComponent } from '../drop-child/drop-child.component';\r\nimport { BatchReEnrollChildComponent } from '../batch-re-enroll-child/batch-re-enroll-child.component';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\n\r\n@Component({\r\n  selector: 'drdp-search-manage-child',\r\n  templateUrl: './search-manage-child.component.html',\r\n  styleUrls: ['./search-manage-child.component.scss'],\r\n})\r\nexport class SearchManageChildComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  childSearch: FormGroup | any;\r\n  user = this.authService.getCurrentUser();\r\n  isSuperUser: boolean = this.authService.isSuperUser();\r\n  isSiteAdmin: boolean = this.authService.isSiteAdmin();\r\n  isTeacher: boolean = this.authService.isTeacher();\r\n  clearDropdowns = false;\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  ssidLabel = 'SSID';\r\n  ssidPlaceholder = 'SSID';\r\n  isSelectAll = false;\r\n  studentBatch: IStudentSearchResponseDto[] = [];\r\n  selectAllPagesSet: Set<number> = new Set<number>();\r\n  transferInfoText: string = \"Transfer moves children to a different classroom with a different classroom name within your agency, for example, transfer from Room A to Room B.\";\r\n  reEnrollInfoText: string = \"Re-enroll moves children into the same classroom (the classroom name must be an exact match) in a new rating period.  For example, re-enroll from Room A (in the fall) to Room A (in the spring).\";\r\n  withdrawInfoText: string = \"Withdraw from Agency leaves the child's history intact while removing the child from your agency. It also makes them available for other agencies to enroll the child.\";\r\n  initialAgencySetupComplete: boolean = false;\r\n  initialSiteSetupComplete: boolean = false;\r\n\r\n  private previousAgencyId: number | null = null;\r\n  private previousRatingPeriodId: number | null = null;\r\n\r\n  get firstName() {\r\n    return this.childSearch.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.childSearch.get('lastName');\r\n  }\r\n  get stateId() {\r\n    return this.childSearch.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.childSearch.get('agencyId');\r\n  }\r\n  get SSID() {\r\n    return this.childSearch.get('SSID');\r\n  }\r\n  get localId() {\r\n    return this.childSearch.get('localId');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.childSearch.get('ageGradeInstrumentId');\r\n  }\r\n  get DOB() {\r\n    return this.childSearch.get('DOB');\r\n  }\r\n  get drdpId() {\r\n    return this.childSearch.get('drdpId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.childSearch.get('ratingPeriodId');\r\n  }\r\n  get classroomIds() {\r\n    return this.childSearch.get('classroomIds');\r\n  }\r\n  get siteIds() {\r\n    return this.childSearch.get('siteIds');\r\n  }\r\n\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'isSelected',\r\n      header: 'Select',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox accent-drdpblue-300 cursor-pointer',\r\n    },\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n  ];\r\n\r\n  public get selectType() {\r\n    return SelectType;\r\n  }\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private authService: AuthService,\r\n    private studentService: StudentService,\r\n    private toastService: ToastService,\r\n    private permissionService: PermissionService,\r\n    private stateService: StateService,\r\n    private router: Router,\r\n    public modal: MatDialog,\r\n    private enrollmentService: StudentClassEnrollmentService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.permissionService.checkPermission(Permission.ViewDualEnrollments)) {\r\n      this.tableColumns.push(\r\n        {\r\n          columnDef: 'isDualEnrollment',\r\n          header: 'Dual Enrollment',\r\n          type: 'icon',\r\n          icon: 'users-alt',\r\n          colorClass: 'text-drdpblue-300', \r\n          cursorClass: 'cursor-text'\r\n        }\r\n      );\r\n    }\r\n    this.tableColumns.push(\r\n      { columnDef: 'dob', header: 'DOB', type: 'date' },\r\n      { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n      { columnDef: 'className', header: 'Class', type: 'text' },\r\n      { columnDef: 'teacherOfRecordName', header: 'Teacher', type: 'text' },\r\n      {\r\n        columnDef: 'enrollmentStartDate',\r\n        header: 'Agency Enrollment',\r\n        type: 'date',\r\n      },\r\n      {\r\n        columnDef: 'enrollmentEndDate',\r\n        header: 'Agency Withdrawal',\r\n        type: 'date',\r\n      },\r\n      {\r\n        columnDef: 'ageGradeInstrumentName',\r\n        header: 'Age/Instrument',\r\n        type: 'text',\r\n      },\r\n      { columnDef: 'View Student', header: 'View Student', type: 'view' },\r\n    );\r\n\r\n    this.getSsidLabel(this.user.stateId);\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  initializeTableData(res?: any): void {\r\n    res.items = res.items.map((data: any) => ({\r\n      ...data,\r\n      displayIcons: setIconDisplayObject(this.tableColumns, data)\r\n    }));\r\n    this.dataSource = new MatTableDataSource(res.items);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.items;\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.childSearch = this.fb.group({\r\n      firstName: [null, [Validators.maxLength(100)]],\r\n      lastName: [null, [Validators.maxLength(100)]],\r\n      stateId: [null],\r\n      agencyId: [null, [Validators.required]],\r\n      ageGradeInstrumentId: [null],\r\n      SSID: [null, [Validators.maxLength(100)]],\r\n      localId: [null, [Validators.maxLength(100)]],\r\n      drdpId: [null, [Validators.maxLength(100)]],\r\n      DOB: [null],\r\n      ratingPeriodId: [null],\r\n      classroomIds: [null],\r\n      siteIds: [null, [Validators.required]],\r\n    });\r\n\r\n    const { stateId, agencyId, sites } = this.user;\r\n\r\n    if (stateId) this.childSearch.patchValue({ stateId: stateId });\r\n    if (agencyId) this.childSearch.patchValue({ agencyId: agencyId });\r\n    if (sites) {\r\n      const siteIds = sites?.map((sites: any) => sites.siteId);\r\n      this.childSearch.patchValue({ siteIds: siteIds });\r\n    }\r\n  }\r\n\r\n  getSsidLabel(stateId: number): void {\r\n    this.stateService\r\n      .getStateConfigurations(stateId)\r\n      .pipe(\r\n        take(1),\r\n        tap((config: IStateConfiguration[]) => {\r\n          const ssid = config.find(\r\n            (x: any) => x.columnName === StudentDemographic.SSID\r\n          );\r\n          this.ssidLabel = ssid?.label ? ssid?.label : this.ssidLabel;\r\n          this.ssidPlaceholder = ssid?.label ? ssid?.label : this.ssidLabel;\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyId.setValue(null);\r\n        this.siteIds.setValue(null);\r\n        this.ratingPeriodId.setValue(null);\r\n        this.classroomIds.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        this.ratingPeriodId.setValue(null);\r\n        if (this.initialAgencySetupComplete && this.initialSiteSetupComplete) \r\n          this.siteIds.setValue(null);\r\n        this.classroomIds.setValue(null);\r\n        this.initialAgencySetupComplete = true;\r\n        break;\r\n      case SelectType.Sites:\r\n        const siteIds = event?.map((sites: any) => sites.id);\r\n        this.siteIds.setValue(siteIds);\r\n        this.classroomIds.setValue(null);\r\n        this.initialSiteSetupComplete = true;\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        this.ratingPeriodId.setValue(event?.id);\r\n        break;\r\n      case SelectType.Class:\r\n        const classroomIds = event?.map((classroom: any) => classroom.id);\r\n        this.classroomIds.setValue(classroomIds.length ? classroomIds : null);\r\n        break;\r\n      case SelectType.AgeInstrument:\r\n        this.ageGradeInstrumentId.setValue(event?.id);\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.DOB.setValue(event);\r\n  }\r\n\r\n  handleCheckbox(event: any): void {\r\n    if (!this.isSuperUser && event.data.enrollmentEndDate) {\r\n      event.event.target.checked = false;\r\n      this.toastService.error('Child is no longer enrolled with your agency.');\r\n      return;\r\n    }\r\n    const { data } = event;\r\n    data.isSelected = !data.isSelected;\r\n\r\n    const index = this.studentBatch.findIndex(\r\n      (student) => (student.id === data.id && student.classId === data.classId)\r\n    );\r\n\r\n    if (data.isSelected) {\r\n      if (index === -1) {\r\n        this.studentBatch.push(data);\r\n      }\r\n    } else {\r\n      if (index !== -1) {\r\n        this.studentBatch.splice(index, 1);\r\n        if (this.selectAllPagesSet.has(this.paginator.pageIndex)) {\r\n          this.isSelectAll = false;\r\n          this.selectAllPagesSet.delete(this.paginator.pageIndex);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  search(): void {\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  onClear(): void {\r\n    this.initialAgencySetupComplete = false;\r\n    this.initialSiteSetupComplete = false;\r\n    this.clearDropdowns = true;\r\n    const accessToAll = this.permissionService.checkPermission(\r\n      Permission.AccessAllAgencies\r\n    );\r\n    this.tableData = [];\r\n    this.initializeTableData(this.tableData);\r\n\r\n    if (accessToAll) {\r\n      this.childSearch.reset();\r\n    } else {\r\n      const stateId = this.stateId.value;\r\n      const agencyId = this.agencyId.value;\r\n\r\n      this.childSearch.reset({\r\n        stateId: stateId,\r\n        agencyId: agencyId,\r\n      });\r\n    }\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    if (this.childSearch.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    if (resetPage) this.studentBatch.length = 0;\r\n\r\n    const currentAgencyId = this.agencyId.value;\r\n    const currentRatingPeriodId = this.ratingPeriodId.value;\r\n\r\n    if (\r\n      currentAgencyId !== this.previousAgencyId ||\r\n      currentRatingPeriodId !== this.previousRatingPeriodId\r\n    ) {\r\n      this.studentBatch = [];\r\n      this.isSelectAll = false;\r\n    }\r\n\r\n    this.previousAgencyId = currentAgencyId;\r\n    this.previousRatingPeriodId = currentRatingPeriodId;\r\n\r\n    const siteIds = this.siteIds.value?.length\r\n      ? this.siteIds.value.toString()\r\n      : null;\r\n    const pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    const itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n\r\n    const payload: IStudentSearchRequestDto = {\r\n      ...this.childSearch.value,\r\n      siteIds,\r\n      pageIndex,\r\n      itemsPerPage,\r\n    };\r\n\r\n    this.studentService\r\n      .search(payload)\r\n      .pipe(\r\n        take(1),\r\n        tap((response: any) => {\r\n          if (resetPage) {\r\n            this.paginator.firstPage();\r\n          }\r\n          const { children } = response;\r\n          const selectedBatchIds = this.studentBatch.map((batch) => batch.id);\r\n\r\n          children.items.forEach((student: IStudentSearchResponseDto) => {\r\n            student.isSelected = selectedBatchIds.includes(student.id);\r\n          });\r\n\r\n          this.initializeTableData(children);\r\n\r\n          if (children.totalData > 25) {\r\n            this.pageSizeOptions.push(response.totalData);\r\n          }\r\n\r\n          this.isSelectAll = false;\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  selectAllStudents(): void {\r\n    if (this.selectAllPagesSet.has(this.paginator.pageIndex)) {\r\n      this.isSelectAll = false;\r\n      this.selectAllPagesSet.delete(this.paginator.pageIndex);\r\n    } else {\r\n      this.isSelectAll = true;\r\n    }\r\n\r\n    if (this.tableData) {\r\n      this.tableData.forEach((student: any) => {\r\n        student.isSelected = this.isSelectAll;\r\n      });\r\n\r\n      if (this.isSelectAll) {\r\n        this.tableData.forEach((student: any) => {\r\n          const index = this.studentBatch.findIndex(\r\n            (s: any) => s.id === student.id\r\n          );\r\n          if (index === -1) {\r\n            this.studentBatch.push(student);\r\n          }\r\n          this.selectAllPagesSet.add(this.paginator.pageIndex);\r\n        });\r\n      } else {\r\n        this.studentBatch = this.studentBatch.filter((student: any) =>\r\n          !this.tableData.some((tb: any) => tb.id == student.id)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private handleActiveCheckAndOpenModal(modalComponent: any, modalData: any): Observable<any> {\r\n    const enrollmentIds = this.studentBatch\r\n      .map(student => student.sceId)\r\n      .filter((id): id is number => id !== undefined && id !== null);\r\n\r\n      return this.enrollmentService.areEnrollmentsActive({enrollmentIds: enrollmentIds}).pipe(\r\n        take(1),\r\n        switchMap((isActive: boolean) => {\r\n          if (isActive) {\r\n            const modalRef = this.modal.open(modalComponent, {\r\n              data: modalData,\r\n            });\r\n            return modalRef.afterClosed();\r\n          } else {\r\n            this.toastService.error('One or more children selected has already been moved.');\r\n            return of(false);\r\n          }\r\n        })\r\n      );\r\n  }\r\n\r\n  batchTransfer(): void {\r\n    if (this.studentBatch.length < 1) {\r\n      this.toastService.error('No students to Transfer.');\r\n      return;\r\n    }\r\n\r\n    const batchData = {\r\n      studentBatch: this.studentBatch,\r\n      agencyId: this.agencyId.value,\r\n    };\r\n    \r\n    this.handleActiveCheckAndOpenModal(TransferChildComponent, batchData).subscribe((response) => {\r\n      if (response.success) {\r\n        this.paginateTable(true);\r\n      } else if (response.duplicates) {\r\n        this.showDuplicateModal(response.duplicates, 'transfer');\r\n      }\r\n    });\r\n  }\r\n\r\n  batchReEnroll(): void {\r\n    if (this.studentBatch.length < 1) {\r\n      this.toastService.error('No students to Re-Enroll.');\r\n      return;\r\n    }\r\n    const batchClassroom = [\r\n      ...new Set(this.studentBatch.map((student) => student.classId)),\r\n    ];\r\n\r\n    if (batchClassroom.length > 1) {\r\n      let event = { data: { modalInfo: {} } };\r\n      event.data.modalInfo = {\r\n        title: '',\r\n        message: 'One or more children selected are not from the same classroom. This feature re-enrolls a classroom of children to future rating period.',\r\n        name: '',\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: Modal.OK,\r\n      };\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe();\r\n      return;\r\n    }\r\n\r\n    const batchData = {\r\n      students: this.studentBatch,\r\n      name: this.studentBatch[0].className,\r\n      classroomId: this.studentBatch[0].classroomId,\r\n      fromClassId: batchClassroom[0],\r\n      ratingPeriodId: this.studentBatch[0].ratingPeriodId,\r\n      agencyId: this.agencyId.value\r\n    };\r\n\r\n    this.handleActiveCheckAndOpenModal(BatchReEnrollChildComponent, batchData).subscribe((response) => {\r\n      if (response.success) {\r\n        this.paginateTable(true);\r\n      } else if (response.duplicates) {\r\n        this.showDuplicateModal(response.duplicates, 're-enroll');\r\n      }\r\n    });\r\n  }\r\n\r\n  batchWithdraw(): void {\r\n    if (this.studentBatch.length < 1) {\r\n      this.toastService.error('No students to Withdraw.');\r\n      return;\r\n    }\r\n\r\n    const batchData = {\r\n      students: this.studentBatch,\r\n      isBatch: true,\r\n    };\r\n\r\n    this.handleActiveCheckAndOpenModal(DropChildComponent, batchData).subscribe((response) => {\r\n      if (response.success) {\r\n        this.paginateTable(true);\r\n      } else if (response.duplicates) {\r\n        this.showDuplicateModal(response.duplicates, 'withdraw');\r\n      }\r\n    });\r\n  }\r\n\r\n  showDuplicateModal(students: string[], type: string) {\r\n    let modal = { data: { modalInfo: {} } };\r\n\r\n    let studentList = '<ul>';\r\n\r\n    students.forEach((s) => {\r\n      studentList += `<li> - ${s}</li>`;\r\n    });\r\n    studentList += '</ul>';\r\n    modal.data.modalInfo = {\r\n      title: `Error`,\r\n      message: `There is one or more child requests already pending. Please remove from your ${type} request. <br> <br> ${studentList}`,\r\n      name: 'Error',\r\n      primaryBtnText: Modal.OK,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        modalRef.close({ success: false });\r\n      }\r\n    });\r\n  }\r\n\r\n  openViewChild(viewData: IModalEmitData): void {\r\n    if (!this.isSuperUser && viewData.data.enrollmentEndDate) {\r\n      this.toastService.error('Child is no longer enrolled with your agency.');\r\n      return;\r\n    }\r\n    this.router.navigate(['/view-child/' + viewData.data.id]);\r\n  }\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { EventAction } from '@core/enums/event-action';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { IClass } from '@core/interfaces/iclasses';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport {\r\n  IStudentRequest,\r\n  IStudentRequestSearchResponse,\r\n} from '@core/interfaces/istudent-request';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Observable, Subscription, concatMap, forkJoin, map } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-pending-child-re-enrollment',\r\n  templateUrl: './pending-child-re-enrollment.component.html',\r\n  styleUrls: ['./pending-child-re-enrollment.component.scss'],\r\n})\r\nexport class PendingChildReEnrollmentComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  pendingRequests: any[] = [];\r\n  reEnrollRequests: any[] = [];\r\n  ratingOptions: IRatingPeriod[] = [];\r\n  existingClasses: IClass[] = [];\r\n  currentDate = new Date();\r\n  user: ILoginResponse;\r\n  getRatingPeriods$: Observable<any> | undefined;\r\n  getRequestData$: Observable<any> | undefined;\r\n  getClassesByClassroom$: Observable<any> | undefined;\r\n  getApprovedOrPendingReq$: Observable<any> | undefined;\r\n  requests: any[] = [];\r\n  router = inject(Router);\r\n\r\n  tableColumns = [\r\n    { columnDef: 'studentName', header: 'Child Name', type: 'text' },\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Rating Period',\r\n      type: 'textToSelect',\r\n      action: EventAction.Select,\r\n    },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n    {\r\n      columnDef: 'decline',\r\n      header: 'Decline',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'accept',\r\n      header: 'Accept',\r\n      type: 'checkBox',\r\n      checkClass: 'checkbox',\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    public toast: ToastService,\r\n    public modal: MatDialog,\r\n    private studentRequest: StudentRequestService,\r\n    private authService: AuthService,\r\n    private ratingPeriods: RatingPeriodService,\r\n    private classes: ClassService\r\n  ) {\r\n    this.user = this.authService.getCurrentUser();\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const pendingReqParams = {\r\n      requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n      agencyId: this.user.agencyId,\r\n    };\r\n\r\n    this.getPendingRequests(pendingReqParams);\r\n  }\r\n\r\n  getPendingRequests(params: any): void {\r\n    this.getRequestData$ = this.studentRequest\r\n      .getByReasonAndAgency(params)\r\n      .pipe(\r\n        map((requests: IStudentRequestSearchResponse[]) => ({\r\n          requests: requests,\r\n        }))\r\n      );\r\n\r\n    this.getRatingPeriods$ = this.ratingPeriods\r\n      .getActiveSchoolYear()\r\n      .pipe(\r\n        concatMap((year: ISchoolYear) =>\r\n          this.ratingPeriods\r\n            .getBySchoolYearAndAgency(year.id, this.user.agencyId)\r\n            .pipe(map((ratingPeriods) => ratingPeriods))\r\n        )\r\n      );\r\n\r\n    this.subscriptions.add(\r\n      forkJoin({\r\n        requestData: this.getRequestData$,\r\n        ratings: this.getRatingPeriods$,\r\n      }).subscribe(({ requestData, ratings }) => {\r\n        ratings = ratings.map((rating: any) => ({\r\n          ...rating,\r\n          name: rating.ratingPeriodName,\r\n        }));\r\n\r\n        if (requestData) {\r\n          let requests = requestData.requests.map((request: any) => ({\r\n            ...request,\r\n            decline: false,\r\n            accept: false,\r\n            isSelect: false,\r\n            isEditing: false,\r\n            items: this.getRatingPeriods(ratings),\r\n          }));\r\n\r\n          this.requests = requests;\r\n          this.reEnrollRequests = [...requests];\r\n          this.dataSource = new MatTableDataSource(requests);\r\n          this.tableData = requests;\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  handleSearch(event: any): void {\r\n    const params = {\r\n      stateId: event.stateId,\r\n      agencyId: event.agencyId,\r\n      fromSiteId: event.siteId,\r\n      toClassId: event.classroomId,\r\n      toRatingPeriodId: event.ratingPeriodId,\r\n      requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n    };\r\n\r\n    this.getPendingRequests(params);\r\n  }\r\n\r\n  getRatingPeriods(ratingPeriods: IRatingPeriod[]) {\r\n    return ratingPeriods.filter(\r\n      (r: IRatingPeriod) => new Date(r.startDate) > this.currentDate\r\n    );\r\n  }\r\n\r\n  handleEditRequest(event: any): void {\r\n    if (event.action == EventAction.Select) {\r\n      this.handleChangeRequest(event);\r\n    }\r\n\r\n    if (!this.tableData[event.index].isEditing) {\r\n      this.tableData[event.index].isSelect = this.tableData[\r\n        event.index\r\n      ].isEditing = true;\r\n    } else {\r\n      this.tableData[event.index].isSelect = this.tableData[\r\n        event.index\r\n      ].isEditing = false;\r\n    }\r\n\r\n    this.dataSource.data = this.tableData;\r\n  }\r\n\r\n  handleApprovalRequest(event: any): void {\r\n    var i = event.index;\r\n    var prop = event.property;\r\n\r\n    this.requests[i][prop] = !this.requests[i][prop];\r\n    if (prop == 'accept') this.requests[i].decline = false;\r\n    else if (prop == 'decline') this.requests[i].accept = false;\r\n\r\n    this.dataSource.data = this.requests;\r\n  }\r\n\r\n  handleChangeRequest(event: any): void {\r\n    const params = {\r\n      requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n      fromClassId: this.requests[event.index].fromClassId,\r\n    };\r\n    this.getClassesByClassroom$ = this.classes.getClassesByClassroom(\r\n      this.requests[event.index].classroomId\r\n    );\r\n    this.getApprovedOrPendingReq$ =\r\n      this.studentRequest.getApprovedOrPendingByReasonAndClass(params);\r\n\r\n    this.subscriptions.add(\r\n      forkJoin({\r\n        classes: this.getClassesByClassroom$,\r\n        approvedOrPendingReq: this.getApprovedOrPendingReq$,\r\n      }).subscribe(({ classes, approvedOrPendingReq }) => {\r\n        let toClassId = classes.filter(\r\n          (c: IClass) => c.ratingPeriodId == event.data.id\r\n        )[0]?.id;\r\n        if (toClassId == null) {\r\n          this.toast.error(\r\n            \"Class assignment doesn't exist for this rating period.\"\r\n          );\r\n          return;\r\n        }\r\n\r\n        if (\r\n          approvedOrPendingReq.some(\r\n            (req: any) =>\r\n              req.toClassId === toClassId &&\r\n              req.studentId === this.requests[event.index].studentId &&\r\n              req.id !== this.requests[event.index].id\r\n          )\r\n        ){\r\n          this.toast.error(\r\n            'An approved or pending re-enroll request already exists for this rating period.'\r\n          );\r\n          return;\r\n        }\r\n\r\n        this.requests[event.index].toClassId = toClassId;\r\n        this.requests[event.index].ratingPeriodName =\r\n          event.data.ratingPeriodName;\r\n        this.dataSource.data = this.requests;\r\n      })\r\n    );\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.requests.length == 0) {\r\n      this.toast.error('No requests to process');\r\n      return;\r\n    }\r\n\r\n    var requestPayload: IStudentRequest[] = [];\r\n\r\n    this.requests.forEach((req) => {\r\n      if (!req.accept && !req.decline) return;\r\n\r\n      var requestToPush = <IStudentRequest>{\r\n        id: req.id,\r\n        studentId: req.studentId,\r\n        toClassId: req.toClassId,\r\n        fromClassId: req.fromClassId,\r\n        requestReasonId: StudentRequestReason.ReEnrollStudent,\r\n        accept: req.accept,\r\n      };\r\n\r\n      requestPayload.push(requestToPush);\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.studentRequest\r\n        .processReEnrollmentBatch(requestPayload, 'Request have been processed')\r\n        .subscribe((success: boolean) => {\r\n          if (success) {\r\n            var updatedView = this.requests.filter((req: any) => {\r\n              !requestPayload.includes(req);\r\n            });\r\n\r\n            this.dataSource = new MatTableDataSource(updatedView);\r\n            this.tableData = updatedView;\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  handleCancel(): void {\r\n    this.router.navigateByUrl('/dashboard');\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <drdp-title title=\"Pending Child Re-Enrollment\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n        <drdp-classroom-rating-period-params\r\n          (searchValues)=\"handleSearch($event)\"\r\n          [search]=\"true\"\r\n          class=\"contents\"\r\n        >\r\n        </drdp-classroom-rating-period-params>\r\n      </div>\r\n    </drdp-container>\r\n    <div>\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        (selectActionItem)=\"handleChangeRequest($event)\"\r\n        (toggleSwitchActionItem)=\"handleApprovalRequest($event)\"\r\n        (editActionItem)=\"handleEditRequest($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n    <div class=\"spacer\"></div>\r\n    <div class=\"flex flex-row justify-end\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button (click)=\"handleCancel()\">\r\n        Cancel\r\n      </drdp-btn>\r\n      <drdp-btn color=\"blue\" (click)=\"submit()\"> Save </drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-portfolio-messages',\r\n  templateUrl: './portfolio-messages.component.html',\r\n  styleUrls: ['./portfolio-messages.component.scss'],\r\n})\r\nexport class PortfolioMessagesComponent implements OnInit {\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n}\r\n","<router-outlet></router-outlet>","export enum MessageStatus {\r\n  New = 1,\r\n  Read = 2,\r\n  Archived = 3\r\n}\r\n","<a class=\"mt-4 shadow-lg shadow-drdpblue-100 rounded-[30px] py-4 px-6 bg-white flex flex-row justify-between cursor-pointer\" (click)=\"emitSelectedMessage(message)\">\r\n  <div>\r\n    <span class=\"text-drdpblue-300 text-lg font-semibold underline mr-4\">{{message.studentName}}</span>\r\n    <span *ngIf=\"canAccessAllMessages\">{{message.recipient}}</span> with {{message.sentFrom}}\r\n  </div>\r\n  <div *ngIf=\"message.messageStatusId === MessageStatus.New\" class=\"bg-drdpblue-300 text-white text-sm rounded-full px-2 py-1\">\r\n    NEW\r\n  </div>\r\n</a>\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IPortfolioConversationRequestDto, IPortfolioMessageResponse } from '@core/interfaces/iportfolio-message';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { MessageStatus } from '@core/enums/message-status';\r\n@Component({\r\n  selector: 'drdp-message-tile',\r\n  templateUrl: './message-tile.component.html',\r\n  styleUrls: ['./message-tile.component.scss'],\r\n})\r\nexport class MessageTileComponent {\r\n  @Input() message!: IPortfolioMessageResponse;\r\n  @Output() selectedMessage = new EventEmitter();\r\n  public get MessageStatus() { return MessageStatus }\r\n  canAccessAllMessages: boolean = this.permissionService.checkPermission(\r\n    Permission.AccessToAllPortfolioMessageBoards\r\n  )\r\n\r\n  constructor(private permissionService: PermissionService) {}\r\n  \r\n  emitSelectedMessage(message: IPortfolioMessageResponse) {\r\n    const payload: IPortfolioConversationRequestDto = {\r\n      sceId: message.studentClassEnrollmentId,\r\n      studentId: message.studentId,\r\n      createdById: message.createdBy,\r\n      isArchived: false,\r\n      recipientId: message.recipientId\r\n    }\r\n    this.selectedMessage.emit(payload);\r\n  }\r\n\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <drdp-title title=\"Message Board\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full\" *ngIf=\"canSearchPortfolioMessages\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n        <drdp-classroom-rating-period-params\r\n          (searchValues)=\"handleSearch($event)\"\r\n          [search]=\"true\"\r\n          class=\"contents\">\r\n        </drdp-classroom-rating-period-params>\r\n      </div>\r\n    </drdp-container>\r\n  </drdp-container>\r\n  <div *ngFor=\"let message of portfolioMessages\">\r\n    <drdp-message-tile [message]=\"message\" (selectedMessage)=\"handleSelectedMessage($event)\"></drdp-message-tile>\r\n  </div>\r\n\r\n  <div>\r\n    <mat-paginator\r\n      [pageSizeOptions]=\"pageSizeOptions\"\r\n      [pageSize]=\"pageSize\"\r\n      [length]=\"totalData\"\r\n      [pageIndex]=\"pageIndex\"\r\n      (page)=\"paginateTable(false)\">\r\n    </mat-paginator>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IPortfolioConversationRequestDto, IPortfolioMessageResponse, IPortfolioMessageSearchRequest } from '@core/interfaces/iportfolio-message';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { PortfolioMessageService } from '@core/services/portfolio-message.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-message-view',\r\n  templateUrl: './message-view.component.html',\r\n  styleUrls: ['./message-view.component.scss']\r\n})\r\nexport class MessageViewComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  public get Permission() { return Permission }\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  portfolioMessages: IPortfolioMessageResponse[] = [];\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  messageSelected?: IPortfolioConversationRequestDto;\r\n  payload: IPortfolioMessageSearchRequest= {\r\n    itemsPerPage: this.pageSize,\r\n    pageIndex: this.pageIndex\r\n  };\r\n  canSearchPortfolioMessages: boolean = this.permissionService.checkPermission(\r\n    Permission.AccessToAllPortfolioMessageBoards\r\n  );\r\n  constructor(\r\n    private permissionService: PermissionService,\r\n    private portfolioMessageService: PortfolioMessageService,\r\n    private authService: AuthService,\r\n    private router: Router\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (!this.canSearchPortfolioMessages) {\r\n      this.portfolioMessageService.getPortfolioMessagesByUserId(this.payload).pipe(take(1)).subscribe((res: any) => {\r\n        this.setData(res)\r\n      })\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  handleSearch(event: any): void {\r\n    this.payload = {\r\n      stateId: event.stateId,\r\n      agencyId: event.agencyId,\r\n      siteId: event.siteId,\r\n      classId: event.classroomId,\r\n      ratingPeriodId: event.ratingPeriodId,\r\n      pageIndex: this.pageIndex,\r\n      itemsPerPage: this.pageSize\r\n    };\r\n\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    this.payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    this.payload.itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n    this.payload.userId = this.canSearchPortfolioMessages ? undefined : this.authService.getCurrentUser().userId;\r\n\r\n    const observableToUse = this.canSearchPortfolioMessages\r\n    ? this.portfolioMessageService.searchPortfolioMessages(this.payload)\r\n    : this.portfolioMessageService.getPortfolioMessagesByUserId(this.payload);\r\n\r\n  observableToUse\r\n    .pipe(\r\n      take(1),\r\n      tap((res: any) => {\r\n        this.setData(res);\r\n        return res;\r\n      })\r\n    )\r\n    .subscribe();\r\n  }\r\n\r\n  setData(res: any) {\r\n    this.totalData = res.totalData;\r\n    this.portfolioMessages = res.items;\r\n  }\r\n\r\n  handleSelectedMessage(message: IPortfolioConversationRequestDto) {\r\n    this.messageSelected = message;\r\n    this.router.navigateByUrl(\r\n      `portfolio-messages/student-enrollment/${message.sceId}/student/${message.studentId}/sender/${message.createdById}/recipient/${message.recipientId}`\r\n      );\r\n  }\r\n\r\n}\r\n","<div class=\"mt-4 shadow-lg shadow-drdpblue-100 rounded-[30px] py-4 px-6 bg-white flex-col justify-between\">\r\n  <div class=\"flex items-center justify-between\">\r\n    <p id=\"message\" class=\"w-5/6\">{{ message.message }}</p>\r\n    <button *ngIf=\"!isArchived\" class=\"self-start\" (click)=\"emitArchiveMessage()\">\r\n      <i class=\"uil uil-times-circle text-red-500 text-lg\"></i>\r\n    </button>\r\n  </div>\r\n  <div class=\"flex items-center pt-4\">\r\n    <div id=\"date\">\r\n      <p class=\" text-[#757575]\">{{ message.createdOn | localDate | date: 'longDate' }} by {{ senderName }}</p>\r\n    </div>\r\n    <div id=\"newBadge\" \r\n      *ngIf=\"message.messageRecipients?.length && message.messageRecipients[0].messageStatusId === MessageStatus.New\" \r\n      class=\"bg-drdpblue-300 text-white text-sm rounded-full px-2 py-1 ml-2\">\r\n      NEW\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MessageStatus } from '@core/enums/message-status';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IPortfolioMessage, IPortfolioMessageResponse } from '@core/interfaces/iportfolio-message';\r\nimport { PermissionService } from '@core/services/permission.service';\r\n\r\n@Component({\r\n  selector: 'drdp-message-board-tile',\r\n  templateUrl: './message-board-tile.component.html',\r\n  styleUrls: ['./message-board-tile.component.scss']\r\n})\r\nexport class MessageBoardTileComponent implements OnInit {\r\n  @Input() message!: IPortfolioMessage;\r\n  @Input() senderName = '';\r\n  @Input() isArchived = false;\r\n  @Output() archiveMessage = new EventEmitter();\r\n  public get MessageStatus() { return MessageStatus }\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  emitArchiveMessage() {\r\n    this.archiveMessage.emit(this.message);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row justify-between gap-3\">\r\n    <drdp-title [title]=\"title\"></drdp-title>\r\n    <a class=\"self-center text-sm order-last cursor-pointer\" routerLink=\"/portfolio-messages\"><i\r\n      class=\"uil uil-angle-left-b text-base\"></i>Back to Portfolio Messages</a>\r\n  </div>\r\n\r\n  <div class=\"my-5 flex flex-row justify-between gap-3\">\r\n    <div class=\"flex gap-3\">\r\n      <drdp-btn [color]=\"messageBg\" type=\"button\" (click)=\"handleTabChange(false)\">Messages</drdp-btn>\r\n      <drdp-btn [color]=\"archiveBg\" type=\"button\" (click)=\"handleTabChange(true)\">Archived</drdp-btn>\r\n    </div>\r\n    <div class=\"flex gap-3\">\r\n      <div class=\"text-right\">\r\n        <drdp-btn color=\"outline\" (click)=\"addToMessageBoard()\" type=\"button\">\r\n          <i class=\"text-drdpblue-300 text-xl uil uil-envelope\"></i>\r\n          Add to Message Board</drdp-btn>\r\n      </div>\r\n      <div class=\"text-right\">\r\n        <drdp-btn color=\"outline\" (click)=\"viewStudentEvidence()\" type=\"button\">\r\n          <i class=\"text-drdpblue-300 text-xl uil uil-notes\"></i>\r\n          View Student Evidence</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div *ngFor=\"let message of portfolioMessages\">\r\n    <drdp-message-board-tile [message]=\"message\" [senderName]=\"senderName\" [isArchived]=\"isArchived\" (archiveMessage)=\"archivePortfolioMessage($event)\">\r\n    </drdp-message-board-tile>\r\n  </div>\r\n\r\n  <div>\r\n    <mat-paginator\r\n      [pageSizeOptions]=\"pageSizeOptions\"\r\n      [pageSize]=\"pageSize\"\r\n      [length]=\"totalData\"\r\n      [pageIndex]=\"pageIndex\"\r\n      (page)=\"paginateTable(false)\">\r\n    </mat-paginator>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport {\r\n  IPortfolioConversationRequestDto,\r\n  IPortfolioMessage,\r\n  IPortfolioMessageRecipient\r\n} from '@core/interfaces/iportfolio-message';\r\nimport { IStudent, IStudentClassEnrollmentDetails } from '@core/interfaces/istudent';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { PortfolioMessageService } from '@core/services/portfolio-message.service';\r\nimport { StudentService } from '@core/services/student.service';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { defer, forkJoin, take, tap } from 'rxjs';\r\nimport { PortfolioMessageBoxComponent } from '../../portfolio-class/portfolio-message-box/portfolio-message-box.component';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\n\r\n@Component({\r\n  selector: 'drdp-message-board',\r\n  templateUrl: './message-board.component.html',\r\n  styleUrls: ['./message-board.component.scss'],\r\n})\r\nexport class MessageBoardComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  portfolioMessages: IPortfolioMessage[] = [];\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  messageSelected?: IPortfolioConversationRequestDto;\r\n  routeParams = this.router.snapshot.params;\r\n  student?: IStudent;\r\n  sender?: IUser;\r\n  senderName = '';\r\n  title = '';\r\n  blackBg = 'black';\r\n  whiteBg = 'white';\r\n  messageBg = this.blackBg;\r\n  archiveBg = this.whiteBg;\r\n  previousPage = `portfolio-messages`;\r\n  isArchived = false;\r\n  classId? = 0;\r\n  canViewPortfolioMessages: boolean = this.permissionService.checkPermission(\r\n    Permission.AccessToPortfolioMessages\r\n  )\r\n\r\n  constructor(\r\n    private portfolioMessageService: PortfolioMessageService,\r\n    private studentService: StudentService,\r\n    private userService: UserService,\r\n    private sceService: StudentClassEnrollmentService,\r\n    private router: ActivatedRoute,\r\n    private route: Router,\r\n    public modal: MatDialog,\r\n    private permissionService: PermissionService\r\n  ) {\r\n    this.initializeInfo(this.initializePayload());\r\n  }\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n    if (this.canViewPortfolioMessages) this.updateMessageStatus();\r\n  }\r\n\r\n  initializePayload(updateMessages?: boolean) {\r\n    const routeParams = this.router.snapshot.params;\r\n    const sceId = +routeParams['studentClassEnrollmentId'];\r\n    const studentId = +routeParams['studentId'];\r\n    const createdById = +routeParams['senderId'];\r\n    const recipientId = +routeParams['recipientId'];\r\n\r\n    const payload = {\r\n      sceId: sceId,\r\n      studentId: studentId,\r\n      createdById: createdById,\r\n      recipientId: recipientId,\r\n      isArchived: this.isArchived,\r\n      itemsPerPage: this.pageSize,\r\n      pageIndex: this.pageIndex,\r\n    };\r\n\r\n    if (updateMessages) {\r\n      return payload;\r\n    } else {\r\n        return {\r\n        ...payload,\r\n        itemsPerPage: this.pageSize,\r\n        pageIndex: this.pageIndex,\r\n      };\r\n    }\r\n  }\r\n\r\n  initializeInfo(payload: IPortfolioConversationRequestDto) {\r\n    const student$ = defer(() =>\r\n      this.studentService.getStudentById(payload.studentId).pipe(take(1))\r\n    );\r\n    const user$ = defer(() =>\r\n      this.userService.getUserById(payload.createdById).pipe(take(1))\r\n    );\r\n    const sce$ = defer(() =>\r\n      this.sceService.getStudentClassEnrollment(payload.sceId).pipe(take(1))\r\n    );\r\n\r\n    forkJoin([student$, user$, sce$]).subscribe({\r\n      next: ([studentRes, userRes, sce]: [IStudent, IUser, IStudentClassEnrollmentDetails]) => {\r\n        this.student = studentRes;\r\n        this.sender = userRes;\r\n        this.senderName = `${this.sender.firstName} ${this.sender.lastName}`;\r\n        this.title = `${this.student.firstName} ${this.student.lastName} with ${this.senderName}`;\r\n        this.classId = sce.classId;\r\n      },\r\n      error: _=> {\r\n        this.title = '';\r\n      },\r\n    });\r\n    this.getConversation(payload);\r\n  }\r\n\r\n  getConversation(payload: IPortfolioConversationRequestDto) {\r\n    this.portfolioMessageService\r\n      .getPortfolioConversation(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.setData(res)\r\n      });\r\n  }\r\n\r\n  handleTabChange(isArchived: boolean) {\r\n    const payload = this.initializePayload();\r\n    this.isArchived = isArchived;\r\n    this.messageBg = isArchived ? this.whiteBg : this.blackBg;\r\n    this.archiveBg = isArchived ? this.blackBg : this.whiteBg;\r\n    payload.isArchived = isArchived;\r\n    this.getConversation(payload);\r\n\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    const payload = this.initializePayload();\r\n    payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    payload.itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n    this.getConversation(payload);\r\n  }\r\n\r\n  setData(res: any) {\r\n    this.totalData = res.totalData;\r\n    this.portfolioMessages = res.items;\r\n  }\r\n\r\n  addToMessageBoard() {\r\n    const routeParams = this.router.snapshot.params;\r\n    this.modal.open(PortfolioMessageBoxComponent, {\r\n      data: {\r\n        enrollmentId: this.portfolioMessages[0].studentClassEnrollmentId,\r\n        studentName: this.student?.firstName + ' ' + this.student?.lastName,\r\n        portfolioId: this.portfolioMessages[0].portfolioId,\r\n        recipientId: +routeParams['senderId']\r\n      }\r\n    });\r\n  }\r\n\r\n  viewStudentEvidence() {\r\n    const routeParams = this.router.snapshot.params;\r\n    const sceId = +routeParams['studentClassEnrollmentId'];\r\n    const portfolioId = this.portfolioMessages[0].portfolioId;\r\n    const ageGradeId = this.student?.ageGradeInstrumentId\r\n    \r\n    this.route.navigateByUrl(\r\n      `portfolio/review-evidence/class/${this.classId}/student-enrollment/${sceId}/age-grade-instrument/${ageGradeId}?portfolioId=${portfolioId}`\r\n    );\r\n  }\r\n\r\n  archivePortfolioMessage(message: IPortfolioMessage) {\r\n    let modal = { data: { modalInfo: {} } };\r\n    modal.data.modalInfo = {\r\n      title: `Archive this message?`,\r\n      message: `This message will be moved to the Archived tab.`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.Archive,\r\n      showCancel: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      const routeParams = this.router.snapshot.params;\r\n      const recipientId = +routeParams['recipientId'];\r\n      const messageRecipient = message.messageRecipients.find((x: IPortfolioMessageRecipient) => x.userId === recipientId);\r\n      if (res && messageRecipient) {\r\n        this.portfolioMessageService\r\n          .archivePortfolioMessage(messageRecipient, 'Message has been archived.')\r\n          .pipe(\r\n            take(1),\r\n            tap((res: boolean) => {\r\n              if (res) {\r\n                this.getConversation(this.initializePayload());\r\n              }\r\n            })\r\n          )\r\n          .subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  updateMessageStatus() {\r\n    this.portfolioMessageService\r\n      .updateReadPortfolioMessages(this.initializePayload(true))\r\n      .pipe(take(1))\r\n      .subscribe();\r\n  }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { RequestStatusType } from '@core/enums/student-request-reason';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { SelectRatingPeriodComponent } from '@shared/components/dropdowns/select-rating-period/select-rating-period.component';\r\nimport { take } from 'rxjs';\r\n@Component({\r\n  selector: 'drdp-student-request',\r\n  templateUrl: './child-request.component.html',\r\n  styleUrls: ['./child-request.component.scss']\r\n})\r\nexport class ChildRequestComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('requestResponseSelect') requestResponseSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('requestStatusType') requestStatusType: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect: SelectRatingPeriodComponent | undefined;\r\n\r\n  pageSizeOptions: number[] = [2, 10, 25, 50, 100];\r\n  pageSize: number = 10;\r\n  totalData: number = 0;\r\n  pageIndex: number = 0;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  ratingPeriodList: IRatingPeriod[] = [];\r\n  agencyList: IAgency[] = [];\r\n  classroomList: IClassroomAssignment[] = [];\r\n  sites!: ISites[];\r\n  requestReasonList?: any;\r\n\r\n  user = this.authService.getCurrentUser();\r\n  hasAccessToAllAgencies = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n\r\n  clearDropdowns = false;\r\n  searchPayload: any;\r\n  childRequestForm: FormGroup | any;;\r\n\r\n  tableColumns = [\r\n    {\r\n      columnDef: 'requestReason',\r\n      header: 'Request Reason',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'formattedRequestedBy',\r\n      header: 'Requester',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'fromClassroomName',\r\n      header: 'From Classroom',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'toClassroom',\r\n      header: 'To Classroom',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'studentName',\r\n      header: 'Child Name',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'comment',\r\n      header: 'Comment',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'releaseReason',\r\n      header: 'Reason',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'formattedStatus',\r\n      header: 'Status',\r\n      type: TableColumnType.text,\r\n    },\r\n  ];\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private toastService: ToastService,\r\n    private permissionService: PermissionService,\r\n    private fb: FormBuilder,\r\n    private classService: ClassService,\r\n    private studentRequestService: StudentRequestService,\r\n  ) { }\r\n\r\n  get stateId() {\r\n    return this.childRequestForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.childRequestForm.get('agencyId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.childRequestForm.get('ratingPeriodId');\r\n  }\r\n  get siteId() {\r\n    return this.childRequestForm.get('siteId');\r\n  }\r\n  get classroomId() {\r\n    return this.childRequestForm.get('classroomId');\r\n  }\r\n  get searchString() {\r\n    return this.childRequestForm.get('searchString');\r\n  }\r\n  get requestReasonId() {\r\n    return this.childRequestForm.get('requestReasonId');\r\n  }\r\n  get requestReason() {\r\n    return this.childRequestForm.get('requestReason');\r\n  }\r\n  get releaseReason() {\r\n    return this.childRequestForm.get('releaseReason');\r\n  }\r\n  get requestStatusTypeId() {\r\n    return this.childRequestForm.get('requestStatusTypeId');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.childRequestForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null, [Validators.required]],\r\n      ratingPeriodId: [null],\r\n      siteId: [null],\r\n      classroomId: [null],\r\n      searchString: [null, [Validators.maxLength(100)]],\r\n      requestReasonId: [null],\r\n      status: [null],\r\n      studentName: [null],\r\n      requestStatusTypeId: [null],\r\n    });\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    this.classroomList = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteId.value ?? null;\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? '';\r\n    payload.itemsPerPage = 10;\r\n    payload.useClassId = false;\r\n\r\n    if (this.siteId.value?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id)\r\n          );\r\n        });\r\n    } else {\r\n      this.classroomList = [];\r\n    }\r\n  }\r\n\r\n  handleState(state: IState): void {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleAgency(agency: IAgency): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.classroomId.setValue(null);\r\n    this.ratingPeriodId.setValue(null);\r\n    this.classroomList = [];\r\n    this.ratingPeriodList = [];\r\n  }\r\n\r\n  handleRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleSite(site: ISites): void {\r\n    this.siteId.setValue(site?.id);\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleClassroom(classroom: any): void {\r\n    this.classroomId.setValue(classroom?.id);\r\n  }\r\n\r\n  handleRequestReason(selectedRequestReason: any): void {\r\n    this.requestReasonId.setValue(selectedRequestReason?.id ?? null);\r\n  }\r\n\r\n  handleRequestStatusType(selectedRequestStatusType: any): void {\r\n    this.requestStatusTypeId.setValue(selectedRequestStatusType?.id ?? null);\r\n  }\r\n\r\n  handleFormSubmit(event: Event): void {\r\n    event.preventDefault();\r\n\r\n    if (this.childRequestForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    this.search(this.childRequestForm.value);\r\n  }\r\n\r\n  search(event: any): void {\r\n    this.searchPayload = {\r\n      requestReasonId: event.requestReasonId,\r\n      requestReason: event.requestReason,\r\n      releaseReason: event.releaseReason,\r\n      stateId: event.stateId,\r\n      agencyId: event.agencyId,\r\n      classroomId: event.classroomId,\r\n      status: event.status,\r\n      searchString: event.searchString,\r\n      requestStatusTypeId: event.requestStatusTypeId,\r\n      pageIndex: this.pageIndex,\r\n      itemsPerPage: this.pageSize\r\n    };\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    this.searchPayload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    this.searchPayload.itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n\r\n    this.getStudentRequest(this.searchPayload);\r\n  }\r\n\r\n  getStudentRequest(params: any): void {\r\n    this.studentRequestService\r\n      .getStudentRequests(params)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        this.tableData = res.items.map((item: any) => ({\r\n          ...item,\r\n          stateId: item.stateId ?? null,\r\n          agencyId: item.agencyId ?? null,\r\n          releaseReason: item.releaseReason ?? null,\r\n          requestReasonId: item.requestReasonId ?? null,\r\n          status: item.status ?? null,\r\n          toClassroom: item.toClassroom ?? null,\r\n          requestStatusTypeId: RequestStatusType[item.requestStatusTypeId] ?? null,\r\n        }));\r\n\r\n        this.dataSource = new MatTableDataSource<any>(this.tableData);\r\n        this.totalData = res.totalData;\r\n      });\r\n  }\r\n\r\n  clearOptions(): void {\r\n    this.sites = [];\r\n    this.classroomList = [];\r\n    this.searchString.setValue(null);\r\n  }\r\n\r\n  clearTable(): void {\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n  }\r\n\r\n  clear(): void {\r\n    this.clearDropdowns = true;\r\n    this.clearOptions();\r\n    this.childRequestForm.reset();\r\n\r\n    if (this.stateSelect?.disabled) {\r\n      this.stateId.setValue(this.user.stateId);\r\n    }\r\n\r\n    if (this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(this.user.agencyId);\r\n      this.ratingPeriodList = [];\r\n    }\r\n\r\n    this.clearTable();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"mb-5 mr-3\">\r\n    <drdp-title title=\"Child Requests\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"flex flex-wrap content-between justify-end min-h-[44rem]\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\"min-h-[7rem] w-full\">\r\n        <form #ngForm=\"ngForm\"\r\n        class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-5 lg:grid-cols-5 gap-5\"\r\n          [formGroup]=\"childRequestForm\"\r\n          (ngSubmit)=\"handleFormSubmit($event)\">\r\n\r\n          <drdp-select-state\r\n            #stateSelect\r\n            [initialStateId]=\"stateId?.value\"\r\n            [disabled]=\"!hasAccessToAllAgencies\"\r\n            (state)=\"handleState($event)\"\r\n            [clear]=\"clearDropdowns\"\r\n            [required]=\"true\">\r\n          </drdp-select-state>\r\n\r\n          <drdp-select-agency\r\n            #agencySelect\r\n            (agency)=\"handleAgency($event)\"\r\n            [stateId]=\"stateId.value\"\r\n            [initialAgencyId]=\"agencyId?.value\"\r\n            [required]=\"true\"\r\n            [clear]=\"clearDropdowns\">\r\n        </drdp-select-agency>\r\n\r\n          <drdp-select-rating-period\r\n            #ratingPeriodSelect\r\n            [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n            (ratingPeriod)=\"handleRatingPeriod($event)\"\r\n            [agencyId]=\"agencyId.value\"\r\n            [clear]=\"clearDropdowns\">\r\n          </drdp-select-rating-period>\r\n\r\n          <drdp-select-site\r\n            #siteSelect\r\n            (site)=\"handleSite($event)\"\r\n            [agencyId]=\"agencyId.value\"\r\n            [multiSelect]=\"false\"\r\n            [required]=\"false\"\r\n            [clear]=\"clearDropdowns\">\r\n          </drdp-select-site>\r\n\r\n          <drdp-select-class\r\n            (classroom)=\"handleClassroom($event)\"\r\n            [siteIds]=\"siteId.value\"\r\n            [required]=\"false\"\r\n            [ratingPeriodId]=\"ratingPeriodId.value\"\r\n            [clear]=\"clearDropdowns\"\r\n            [multiSelect]=\"false\">\r\n          </drdp-select-class>\r\n\r\n          <drdp-select-request-reason\r\n            #requestResponseSelect\r\n            (onSelected)=\"handleRequestReason($event)\"\r\n            [clear]=\"clearDropdowns\"\r\n            [multiSelect]=\"false\"\r\n            [initialResponseRequestId]=\"requestReasonId?.value\">\r\n          </drdp-select-request-reason>\r\n\r\n          <drdp-select-request-status-type\r\n            #requestStatusType\r\n            (onSelected)=\"handleRequestStatusType($event)\"\r\n            [clear]=\"clearDropdowns\"\r\n            [multiSelect]=\"false\"\r\n            [initialRequestStatusTypeId]=\"requestStatusTypeId?.value\">\r\n          </drdp-select-request-status-type>\r\n\r\n          <div class=\"col-span-1 h-full grid space-between\">\r\n            <label class=\"font-bold\">Search By:</label>\r\n            <div class=\"basis-1/2 border-b border-black\">\r\n              <input matInput placeholder=\"Child Name, Classroom Name, Requester Email\"\r\n                formControlName=\"searchString\"\r\n                class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\">\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"flex flex-row w-ful\">\r\n            <drdp-btn color=\"outline\" (click)=\"clear()\" class=\"self-end\" type=\"button\">\r\n              Clear\r\n            </drdp-btn>\r\n            <drdp-btn class=\"flex-grow self-end pl-3\" type=\"submit\" additionalClasses=\"w-full\">\r\n              <span class=\"px-2\">Search</span>\r\n            </drdp-btn>            \r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <div>\r\n        <drdp-add-edit-table\r\n          class=\"whitespace-pre-wrap\"\r\n          [dataSource]=\"dataSource\"\r\n          [tableData]=\"tableData\"\r\n          [columns]=\"tableColumns\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    class=\"mt-5 pb-3\"\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n</div>\r\n\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  OnInit,\r\n  Output,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-total-locked-children',\r\n  templateUrl: './total-locked-children.component.html',\r\n  styleUrls: ['./total-locked-children.component.scss']\r\n})\r\nexport class TotalLockedChildrenComponent implements OnInit {\r\n  @Output() formValues = new EventEmitter();\r\n  lockedForm: FormGroup | any;\r\n\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageSize: number = 10;\r\n  pageIndex: number = 1;\r\n  tableData?: any;\r\n  tableColumns: any[] = [];\r\n  totalData: number = 0;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  @ViewChild('ageGroupInstrumentSelect') ageGroupInstrumentSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n\r\n  user = this.auth.getCurrentUser();\r\n  hasAccessToAll: boolean = this.permissionService.checkPermission(Permission.AccessAllAgencies);\r\n  accessAssignedStateAgencies!: boolean;\r\n\r\n  initStateId = this.user.stateId;\r\n  initAgencyId = this.user.agencyId;\r\n\r\n  clearDropdown = false;\r\n  clearState = false;\r\n  clearAgency = false;\r\n  searchPayload: any;\r\n  ageGradeInstruments?: IAgeGradeInstrument[] = [];\r\n  sites!: ISites[];\r\n  isPilot: boolean = false;\r\n  previousIsPilot: boolean = false;\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private fb: FormBuilder,\r\n    private permissionService: PermissionService,\r\n    private toastService: ToastService,\r\n    private router: Router,\r\n    private studentClassEnrollmentService: StudentClassEnrollmentService\r\n  ) {\r\n    this.user = this.auth.getCurrentUser();\r\n    this.hasAccessToAll = this.permissionService.checkPermission(Permission.AccessAllAgencies);\r\n    this.accessAssignedStateAgencies = this.permissionService.checkPermission(Permission.AccessAssignedStateAgencies);\r\n  }\r\n\r\n  get stateId() {\r\n    return this.lockedForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.lockedForm.get('agencyId');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.lockedForm.get('ageGradeInstrumentId');\r\n  }\r\n  get classId() {\r\n    return this.lockedForm.get('classId');\r\n  }\r\n  get classroomId() {\r\n    return this.lockedForm.get('classroomId');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.lockedForm.get('ratingPeriodId');\r\n  }\r\n  get siteId() {\r\n    return this.lockedForm.get('siteId');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.lockedForm = this.fb.group({\r\n      userId: [this.user.userId ?? null],\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null, [Validators.required]],\r\n      ratingPeriodId: [null],\r\n      siteId: [null],\r\n      classId: [null],\r\n      ageGradeInstrumentId: [null],\r\n    });\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.classId.setValue(null);\r\n    this.ratingPeriodId.setValue(null);\r\n  }\r\n\r\n  handleRatingPeriod(ratingPeriod: any): void {\r\n    this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n  }\r\n\r\n  handleSite(site: any): void {\r\n    this.siteId.setValue(site?.id);\r\n  }\r\n\r\n  handleChosenClassroom(classroom: any): void {\r\n    this.isPilot = classroom?.isPilot ?? false;\r\n    if (this.previousIsPilot !== this.isPilot) {\r\n      this.ageGradeInstrumentId.setValue(null);\r\n      this.ageGroupInstrumentSelect?.clearSelected();\r\n    }\r\n    this.previousIsPilot = this.isPilot;\r\n    this.classId.setValue(classroom?.id);\r\n  }\r\n\r\n  handleAgeGrade(event: IAgeGradeInstrument): void {\r\n    this.ageGradeInstrumentId.setValue(event?.id);\r\n  }\r\n\r\n  search() {\r\n    if (this.lockedForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    const searchPayload = this.createSearchPayload(resetPage);\r\n    this.getAgencyCurrentStudentEnrollments(searchPayload);\r\n  }\r\n\r\n  createSearchPayload(resetPage?: boolean): void {\r\n    const payload = this.lockedForm.value;\r\n\r\n    payload.userId = this.user.userId ?? null;\r\n    payload.stateId = this.stateId.value ?? null;\r\n    payload.agencyId = this.agencyId.value ?? null;\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? null;\r\n    payload.siteId = this.siteId.value ?? null;\r\n    payload.classId = this.classId.value ?? null;\r\n    payload.ageGradeInstrumentId = this.ageGradeInstrumentId.value ?? null;\r\n    payload.pageIndex = resetPage ? 1 : this.paginator.pageIndex + 1;\r\n    payload.itemsPerPage = resetPage ? this.pageSize : this.paginator.pageSize;\r\n\r\n    if (resetPage && this.paginator) {\r\n      this.paginator.pageSize = payload.itemsPerPage;\r\n    }\r\n\r\n    return payload;\r\n  }\r\n\r\n  getAgencyCurrentStudentEnrollments(params: any): void {\r\n    this.studentClassEnrollmentService\r\n      .getAgencyCurrentStudentEnrollments(params)\r\n      .pipe(take(1))\r\n      .subscribe(\r\n        (res: any) => {\r\n          this.tableData = res.items.map((item: any) => ({\r\n            ...item,\r\n            userId: item.userId ?? null,\r\n            stateId: item.stateId ?? null,\r\n            agencyId: item.agencyId ?? null,\r\n            ratingPeriodId: item.ratingPeriodId ?? null,\r\n            siteId: item.siteId ?? null,\r\n            classId: item.classId ?? null,\r\n            ageGradeInstrumentId: item.ageGradeInstrumentId ?? null,\r\n          }));\r\n\r\n          this.dataSource = new MatTableDataSource<any>(this.tableData);\r\n          this.initializeTableData(res);\r\n        }\r\n      );\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.initializeTableColumns(res.items);\r\n    this.dataSource = new MatTableDataSource(res.items);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.items;\r\n  }\r\n\r\n  initializeTableColumns(_items: any[]): void {\r\n    this.tableColumns = [\r\n      {\r\n        columnDef: 'studentClassEnrollmentId',\r\n        header: 'Ratings',\r\n        icon: 'pen',\r\n        type: TableColumnType.actionIcon,\r\n        action: 'view-rating',\r\n        colorClass: 'text-drdpblue-300',\r\n        cursorClass: 'cursor-pointer',\r\n      },\r\n      {\r\n        columnDef: 'studentName',\r\n        header: 'Student Name',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'ratingPeriodName',\r\n        header: 'Rating Period',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'classroomName',\r\n        header: 'Classroom',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'siteName',\r\n        header: 'Site',\r\n        type: TableColumnType.text,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'assessmentDate',\r\n        header: 'Assessment Date',\r\n        type: TableColumnType.date,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'lockingDate',\r\n        header: 'Lock Date',\r\n        type: TableColumnType.date,\r\n        isSortable: true,\r\n      },\r\n      {\r\n        columnDef: 'isLocked',\r\n        header: 'Locking Status',\r\n        type: TableColumnType.boolIcon,\r\n        truthyClass: 'text-drdpGreen-300',\r\n        truthyIconUrl: 'assets/images/misc/lock-alt.svg',\r\n        falsyClass: 'text-drdpgrey-200',\r\n        falsyIconUrl: 'assets/images/misc/padlock.svg',\r\n        isSortable: true,\r\n      },\r\n    ];\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    if (event.action == 'view-rating') {\r\n      this.router.navigate([`input-ratings/${event.data.studentClassEnrollmentId}`]);\r\n    }\r\n  }\r\n\r\n  clearTable(): void {\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n  }\r\n\r\n  clear(): void {\r\n    this.sitesSelect?.clearSelected();\r\n    this.ageGroupInstrumentSelect?.clearSelected();\r\n    this.clearDropdown = true;\r\n    this.ratingPeriodSelect?.clearSelected();\r\n    this.ratingPeriodId.setValue(null);\r\n    this.clearTable();\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.initStateId = 0;\r\n      this.stateId.setValue(null);\r\n      this.clearState = true;\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.initAgencyId = 0;\r\n      this.agencyId.setValue(null);\r\n      this.clearAgency = true;\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <drdp-title title=\"Total Locked Children Summary\"></drdp-title>\r\n  </div>\r\n  <drdp-container additionClasses=\"w-full\">\r\n    <drdp-container color=\"lightBlue\">\r\n        <form [formGroup]=\"lockedForm\">\r\n      <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n        <drdp-select-state\r\n          #stateSelect\r\n          [stateId]=\"stateId.value\"\r\n          [initialStateId]=\"initStateId\"\r\n          (state)=\"handleState($event)\"\r\n          [required]=\"true\"\r\n          [clear]=\"clearState\"\r\n          [disabled]=\"!hasAccessToAll\"\r\n          [invalid]=\"true\">\r\n      </drdp-select-state>\r\n\r\n      <div class=\"col-span-1 self-end\">\r\n        <drdp-select-agency\r\n          #agencySelect\r\n          (agency)=\"handleAgency($event)\"\r\n          [stateId]=\"stateId.value\"\r\n          [initialAgencyId]=\"initAgencyId\"\r\n          [required]=\"true\"\r\n          [clear]=\"clearAgency\"\r\n          [disabled]=\"!accessAssignedStateAgencies\">\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 self-end\">\r\n        <drdp-select-rating-period\r\n            #ratingPeriodSelect\r\n            [displayCurrentRpsByStartEnd]=\"true\"\r\n            [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n            (ratingPeriod)=\"handleRatingPeriod($event)\"\r\n            [agencyId]=\"agencyId.value\">\r\n      </drdp-select-rating-period>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site\r\n                #sitesSelect\r\n                (site)=\"handleSite($event)\"\r\n                [agencyId]=\"agencyId.value\"\r\n                [multiSelect]=\"false\"\r\n                [required]=\"false\"\r\n                [multiSelectInitVals]=\"false\"\r\n                [clear]=\"clearDropdown\">\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-class\r\n            (classroom)=\"handleChosenClassroom($event)\"\r\n            [siteIds]=\"siteId.value\"\r\n            [required]=\"false\"\r\n            [ratingPeriodId]=\"ratingPeriodId.value\"\r\n            [clear]=\"clearDropdown\"\r\n            [multiSelect]=\"false\"\r\n            [showPilot]=\"true\">\r\n          </drdp-select-class>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-age-grade\r\n                #ageGroupInstrumentSelect\r\n                label=\"Age Group/Instrument\"\r\n                [required]=\"false\"\r\n                [isPilot]=\"isPilot\"\r\n                [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n                (ageGrade)=\"handleAgeGrade($event)\"\r\n                [multiSelect]=\"false\">\r\n            </drdp-select-age-grade>\r\n          </div>\r\n\r\n          <div class=\"flex flex-row w-ful\">\r\n              <drdp-btn class=\"self-end\" color=\"outline\" (click)=\"clear()\"> Clear </drdp-btn>\r\n              <drdp-btn class=\"flex-grow self-end pl-3\" type=\"submit\">\r\n                <span class=\"px-2\" (click)=\"search()\">Search</span>\r\n              </drdp-btn>\r\n          </div>\r\n      </div>\r\n      </form>\r\n    </drdp-container>\r\n    <div>\r\n        <drdp-add-edit-table\r\n          class=\"whitespace-pre-wrap\"\r\n          [dataSource]=\"dataSource\"\r\n          [tableData]=\"tableData\"\r\n          [columns]=\"tableColumns\"\r\n          (actionIconClicked)=\"onIconClick($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    class=\"mt-5 pb-3\"\r\n    [length]=\"totalData\"\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n</div>\r\n","<div class=\"fix-action-row modal-body\">\r\n    <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">\r\n        The following portfolio evidence(s) cannot be shared.\r\n      </h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n  \r\n    <div mat-dialog-content>\r\n        <h1 class=\"mt-4\">Please remove the following child(ren) from your approval request.</h1>\r\n      <h1 class=\"mt-4 font-bold\" *ngIf=\"invalidRequests.isInvalidRatingPeriod?.length > 0\"> \r\n        Child enrollment for the requested rating period has passed.\r\n      </h1>\r\n      <div class=\"mt-2\">\r\n        <ul>\r\n          <li *ngFor=\"let student of invalidRequests.isInvalidRatingPeriod\">\r\n            - {{ student }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <h1 class=\"mt-4 font-bold\" *ngIf=\"invalidRequests.isDomainMeasureMismatch?.length > 0\">\r\n        Evidence cannot be copied due to a mismatch of age grade template domains and measures.\r\n      </h1>\r\n      <div class=\"mt-2\">\r\n        <ul>\r\n          <li *ngFor=\"let student of invalidRequests.isDomainMeasureMismatch\">\r\n            - {{ student }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n    </div>\r\n</div>\r\n  \r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn class=\"ml-3\" mat-button cdkFocusInitial mat-dialog-close>OK</drdp-btn>\r\n</div>\r\n  ","import { Component, Inject, OnInit } from \"@angular/core\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\n\r\n@Component({\r\n    selector: 'drdp-invalid-request-modal',\r\n    templateUrl: './invalid-request-modal.component.html',\r\n    styleUrls: ['./invalid-request-modal.component.scss'],\r\n})\r\n\r\nexport class InvalidRequestModalComponent implements OnInit {\r\n    invalidRequests: any;\r\n\r\n    constructor(public dialogRef: MatDialogRef<InvalidRequestModalComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n    ngOnInit(): void {\r\n        this.invalidRequests = this.data;\r\n    }\r\n}","import {\r\n  Component,\r\n  inject,\r\n  OnInit,\r\n  QueryList,\r\n  ViewChild,\r\n  ViewChildren,\r\n} from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport { DropdownType } from '@core/enums/pending-requests';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { StudentRequestReason } from '@core/enums/student-request-reason';\r\nimport { TableColumnType, TableInputAction } from '@core/enums/table';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { IClass, IClassSearchRequest } from '@core/interfaces/iclasses';\r\nimport { IBatchEvidenceRequest, IBatchEvidenceResult, IPortfolioEvidenceResponse, IPrevPortfolioEvidenceResponse } from '@core/interfaces/iportfolio';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport {\r\n  IStudentRequestSearch,\r\n  IStudentRequestSearchResponse,\r\n} from '@core/interfaces/istudent-request';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\nimport { PortfolioService } from '@core/services/portfolio.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { StudentRequestService } from '@core/services/student-request.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport {\r\n  combineLatest,\r\n  concatMap,\r\n  forkJoin,\r\n  map,\r\n  Observable,\r\n  Subscription,\r\n  take,\r\n} from 'rxjs';\r\nimport { InvalidRequestModalComponent } from './invalid-request-modal/invalid-request-modal.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ITemplateMeasure } from '@views/user/configuration/rating-view-setup/interfaces/itemplate-measure';\r\n\r\n@Component({\r\n  selector: 'drdp-pending-portfolio-evidences',\r\n  templateUrl: './pending-portfolio-evidences.component.html',\r\n  styleUrls: ['./pending-portfolio-evidences.component.scss'],\r\n})\r\nexport class PendingPortfolioEvidencesComponent implements OnInit {\r\n  @ViewChildren(FilterSelectComponent) selectComponents:\r\n    | QueryList<FilterSelectComponent>\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect!: SelectStateComponent;\r\n  @ViewChild('agencySelect') agencySelect!: SelectAgencyComponent;\r\n  private subscriptions = new Subscription();\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  getSelectData$: Observable<any> | undefined;\r\n  getSearchSelectData$: Observable<any> | undefined;\r\n  user = this.authService.getCurrentUser();\r\n  isAgencyAdmin?: boolean = this.authService.isAgencyAdmin();\r\n  isLeadAgencyAdmin?: boolean = this.authService.isLeadAgencyAdmin();\r\n  viewOnlyOwnAgency: boolean | undefined = false;\r\n  currentDate = new Date();\r\n  isCurrentlyEditing: boolean = false;\r\n  acceptOrDeclineChecked: boolean = false;\r\n  activeSchoolYear?: any;\r\n  tableData?: any;\r\n  selectedSiteId: number[] = [];\r\n\r\n  selectClass = SelectType.Class;\r\n  selectSites = SelectType.Sites;\r\n  selectRatingPeriods = SelectType.RatingPeriods;\r\n\r\n  ratingPeriodsOptions?: IRatingPeriod[];\r\n  classOptions?: IClass[];\r\n  fromClassroomList: IClass[] = [];\r\n  toClassroomList: IClass[] = [];\r\n  toRatingPeriodList: IRatingPeriod[] | undefined = [];\r\n  fromClassId?: number | undefined;\r\n  toClassId?: number | undefined;\r\n\r\n  initialAgencyId?: number | undefined;\r\n  stateSearchId?: number | null;\r\n  agencySearchId?: number | null;\r\n  clearDropdowns = false;\r\n  doneEditing: boolean = false;\r\n\r\n  searchPayload: IStudentRequestSearch | any = {};\r\n\r\n  router = inject(Router);\r\n  toastService = inject(ToastService);\r\n  portfolioService = inject(PortfolioService);\r\n  tableColumns: any = [\r\n    { columnDef: 'studentName', header: 'Child Name', type: 'text' },\r\n    {\r\n      columnDef: 'fromSiteName',\r\n      header: 'Previous Site',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'fromClassroomName',\r\n      header: 'Previous Classroom',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'ratingPeriodName',\r\n      header: 'Rating Period',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'siteName',\r\n      header: 'Current Site',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'classroomName',\r\n      header: 'Current Classroom',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'requestedBy',\r\n      header: 'Requested By',\r\n      type: 'text',\r\n    },\r\n    {\r\n      columnDef: 'comment',\r\n      header: 'Comment',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'decline',\r\n      header: 'Decline',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n    {\r\n      columnDef: 'approve',\r\n      header: 'Accept',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox',\r\n    },\r\n  ].filter(Boolean);\r\n\r\n  constructor(\r\n    private requestService: StudentRequestService,\r\n    private authService: AuthService,\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private sitesService: SiteService,\r\n    private classService: ClassService,\r\n    public modal: MatDialog,\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.stateSearchId = this.user.stateId;\r\n    this.searchPayload.stateId = this.stateSearchId;\r\n    this.agencySearchId = this.user.agencyId;\r\n    this.searchPayload.agencyId = this.user.agencyId;\r\n    if (this.viewOnlyOwnAgency) {\r\n      this.searchPayload.stateId = this.user.stateId;\r\n      this.searchPayload.agencyId = this.user.agencyId;\r\n      this.initialAgencyId = this.user.agencyId;\r\n      this.setTableData();\r\n    }\r\n    if (this.user.agencyId) this.getRatingPeriods(this.user.agencyId);\r\n  }\r\n\r\n  setTableData(): void {\r\n    this.subscriptions.add(\r\n      this.requestService\r\n        .getStudentEvidenceRequests(this.searchPayload)\r\n        .subscribe((res: IStudentRequestSearchResponse[]) => {\r\n          if (res) {\r\n            res = res.map((data: IStudentRequestSearchResponse) => ({\r\n              ...data,\r\n              isSelect: false,\r\n              approve: null,\r\n              decline: null,\r\n              classOptions: [],\r\n              siteOptions: [],\r\n              ratingPeriodOptions: [],\r\n            }));\r\n          }\r\n          this.dataSource = new MatTableDataSource(res);\r\n          this.tableData = res;\r\n        })\r\n    );\r\n  }\r\n\r\n  initializeRowDropdowns(index: number): void {\r\n    this.getSelectData$ = this.ratingPeriodService.getActiveSchoolYear().pipe(\r\n      concatMap((year: ISchoolYear) =>\r\n        combineLatest({\r\n          ratingPeriods: this.ratingPeriodService.getBySchoolYearAndAgency(\r\n            year.id,\r\n            this.tableData[index].agencyId\r\n          ),\r\n          sites: this.sitesService.getSitesByAgencyId(\r\n            this.tableData[index].agencyId\r\n          ),\r\n          classes: this.classService.getClassesByAgency(\r\n            this.tableData[index].agencyId\r\n          ),\r\n        }).pipe(map((data) => data))\r\n      )\r\n    );\r\n\r\n    this.subscriptions.add(\r\n      this.getSelectData$.subscribe((res: any) => {\r\n        this.tableData[index].ratingPeriodOptions = res.ratingPeriods;\r\n        this.tableData[index].siteOptions = res.sites;\r\n      })\r\n    );\r\n\r\n    this.updateClassroomDropdowns(\r\n      {\r\n        siteIds: this.tableData[index].siteId,\r\n        ratingPeriodId: this.tableData[index].ratingPeriodId,\r\n      },\r\n      DropdownType.tableDropdown,\r\n      index\r\n    );\r\n  }\r\n\r\n  updateClassroomDropdowns(\r\n    params: IClassSearchRequest,\r\n    dropdownType: string,\r\n    index?: number\r\n  ): void {\r\n    const payload: IClassSearchRequest = {};\r\n    payload.siteIds = params.siteIds\r\n      ? Array.isArray(params.siteIds)\r\n        ? params.siteIds\r\n        : [params.siteIds]\r\n      : null;\r\n    payload.ratingPeriodId = params.ratingPeriodId ?? null;\r\n    payload.itemsPerPage = 100;\r\n\r\n    this.subscriptions.add(\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .subscribe((res: any) => {\r\n          if (res) {\r\n            let mappedRes = mapClassResToDRDPSelect(res);\r\n            switch (dropdownType) {\r\n              case DropdownType.tableDropdown:\r\n                this.tableData[index!].classOptions = mappedRes;\r\n                let includesChosenClass = mappedRes\r\n                  .map((data: any) => data.id)\r\n                  .includes(this.tableData[index!].toClassId);\r\n                if (!includesChosenClass) {\r\n                  this.tableData[index!].toClassId =\r\n                    this.tableData[index!].classOptions[0]?.id;\r\n                  this.tableData[index!].classroomName =\r\n                    this.tableData[index!].classOptions[0]?.classroomName;\r\n                }\r\n                break;\r\n              case DropdownType.fromDropDown:\r\n                this.fromClassroomList = mappedRes;\r\n                break;\r\n              case DropdownType.toDropdown:\r\n                this.toClassroomList = mappedRes;\r\n                break;\r\n              default:\r\n                break;\r\n            }\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  handleRequest(event: any): void {\r\n    var i = event.index;\r\n    var prop = event.property;\r\n\r\n    this.tableData[i][prop] = !this.tableData[i][prop];\r\n    if (prop == 'approve') this.tableData[i].decline = false;\r\n    if (prop == 'decline') this.tableData[i].approve = false;\r\n    if (\r\n      this.tableData[i].approve == false &&\r\n      this.tableData[i].decline == false\r\n    ) {\r\n      this.tableData[i].decline = null;\r\n      this.tableData[i].approve = null;\r\n    }\r\n\r\n    this.acceptOrDeclineChecked = this.tableData.some((row: any) => {\r\n      return row.decline == true || row.approve == true;\r\n    });\r\n  }\r\n\r\n  handleSubmit(): void {\r\n    const dataToUpdate = this.tableData.filter((data: any) => data.approve !== undefined && data.approve !== null);\r\n\r\n    if (dataToUpdate.length == 0) {\r\n      this.toastService.error('No request to be updated.');\r\n      return;\r\n    }\r\n    this.createRequestPayload(dataToUpdate);\r\n  }\r\n\r\n  createRequestPayload(dataToUpdate: any): void {\r\n    let requests = dataToUpdate.map((data: any) => ({\r\n      id: data.id,\r\n      studentId: data.studentId,\r\n      fromStudentClassEnrollmentId: data.fromStudentClassEnrollmentId,\r\n      toStudentClassEnrollmentId: data.toStudentClassEnrollmentId,\r\n      comment: data.comment,\r\n      ageGradeInstrumentId: data.ageGradeInstrumentId,\r\n      isApproved: data.approve,\r\n      isDeclined: data.decline,\r\n      createdBy: data.createdBy,\r\n      minStartDate: data.minStartDate,\r\n      maxEndDate: data.maxEndDate,\r\n      studentName: data.studentName\r\n    }));\r\n    let payload: IBatchEvidenceRequest = {\r\n      evidenceRequests: requests,\r\n      userId: this.user.userId\r\n    }\r\n    this.portfolioService.updateEvidenceRequests(payload).subscribe((res: IBatchEvidenceResult) => {\r\n      if (res.isSuccess) {\r\n        this.toastService.success('Request(s) updated successfully.');\r\n        this.setTableData();\r\n      } else {\r\n        this.openInvalidRequestModal(res);\r\n      }\r\n    });\r\n  }\r\n\r\n  openInvalidRequestModal(invalidRequests: IBatchEvidenceResult): void {\r\n    this.modal.open(InvalidRequestModalComponent, {\r\n      data: invalidRequests ? invalidRequests : undefined,\r\n    });\r\n  }\r\n\r\n  isCurrentRatingPeriod(minDate: Date | string, maxDate: Date | string): boolean {\r\n    const current = new Date();\r\n    const currentWithoutTime = new Date(current.getFullYear(), current.getMonth(), current.getDate());\r\n    return currentWithoutTime >= new Date(minDate) && currentWithoutTime <= new Date(maxDate);\r\n  }\r\n\r\n  getRatingPeriods(agencyId: number): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(agencyId)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        this.toRatingPeriodList = res;\r\n      });\r\n  }\r\n\r\n  handleState(state: IState): void {\r\n    if (state) {\r\n      this.searchPayload.stateId = state.id ?? null;\r\n      this.stateSearchId = this.searchPayload.stateId;\r\n    }\r\n    this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n      selectComponent?.clear()\r\n    );\r\n  }\r\n\r\n  handleAgency(agency: IAgency): void {\r\n    if (agency) {\r\n      this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n        selectComponent?.clear()\r\n      );\r\n      this.searchPayload.agencyId = agency == null ? null : agency.id;\r\n      this.agencySearchId = this.searchPayload.agencyId;\r\n\r\n      this.getRatingPeriods(agency.id);\r\n    }\r\n  }\r\n\r\n  handleFromSites(site: ISites): void {\r\n    this.searchPayload.fromSiteId = site == null ? null : site.id;\r\n\r\n    if (this.searchPayload.fromSiteId && this.searchPayload.toRatingPeriodId)\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(site.id!),\r\n          ratingPeriodId: this.searchPayload.toRatingPeriodId,\r\n        },\r\n        DropdownType.fromDropDown\r\n      );\r\n  }\r\n\r\n  handleFromClassroom(classId: ISelectable): void {\r\n    this.searchPayload.fromClassId = classId == null ? null : classId.id;\r\n  }\r\n\r\n  handleFromRatingPeriod(ratingPeriod: IRatingPeriod) {\r\n    this.searchPayload.fromRatingPeriodId =\r\n      ratingPeriod == null ? null : ratingPeriod.id;\r\n\r\n    if (\r\n      this.searchPayload.fromRatingPeriodId &&\r\n      this.searchPayload.fromSiteId\r\n    ) {\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(this.searchPayload.fromSiteId!),\r\n          ratingPeriodId: this.searchPayload.fromRatingPeriodId,\r\n        },\r\n        DropdownType.fromDropDown\r\n      );\r\n    }\r\n  }\r\n\r\n  handleToSites(site: ISites): void {\r\n    this.searchPayload.toSiteId = site == null ? null : site.id;\r\n\r\n    if (site)\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(site.id!),\r\n          ratingPeriodId: this.searchPayload.toRatingPeriodId,\r\n        },\r\n        DropdownType.toDropdown\r\n      );\r\n  }\r\n\r\n  handleToClassroom(classId: any): void {\r\n    this.searchPayload.toClassId = classId == null ? null : classId.id;\r\n  }\r\n\r\n  handleToRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    this.searchPayload.toRatingPeriodId =\r\n      ratingPeriod == null ? null : ratingPeriod.id;\r\n\r\n    if (this.searchPayload.toRatingPeriodId && this.searchPayload.toSiteId) {\r\n      this.updateClassroomDropdowns(\r\n        {\r\n          siteIds: this.getSelectedSite(this.searchPayload.toSiteId!),\r\n          ratingPeriodId: this.searchPayload.toRatingPeriodId,\r\n        },\r\n        DropdownType.toDropdown\r\n      );\r\n    }\r\n  }\r\n\r\n  getSelectedSite(site: number): number[] {\r\n    this.selectedSiteId = [];\r\n    this.selectedSiteId.push(site);\r\n    return this.selectedSiteId;\r\n  }\r\n\r\n  search(): void {\r\n    this.resetBools();\r\n    this.setTableData();\r\n  }\r\n\r\n  isSubmitBtnEnabled(): boolean {\r\n    return (\r\n      (this.doneEditing && this.acceptOrDeclineChecked) ||\r\n      (this.doneEditing && !this.acceptOrDeclineChecked) ||\r\n      (!this.doneEditing && this.acceptOrDeclineChecked)\r\n    );\r\n  }\r\n\r\n  onClear(): void {\r\n    this.resetBools();\r\n    this.clearDropdowns = true;\r\n    this.searchPayload = {};\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.stateSearchId = null;\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencySearchId = null;\r\n    }\r\n\r\n    this.selectComponents?.forEach((selectComponent: FilterSelectComponent) =>\r\n      selectComponent?.clear()\r\n    );\r\n    this.searchPayload = {\r\n      stateId: this.stateSearchId ?? this.user.stateId,\r\n      agencyId: this.agencySearchId ?? this.user.agencyId,\r\n    };\r\n    this.dataSource = new MatTableDataSource();\r\n  }\r\n\r\n  handleCancel(): void {\r\n    this.router.navigateByUrl('/dashboard');\r\n  }\r\n\r\n  resetBools(): void {\r\n    this.doneEditing = false;\r\n    this.acceptOrDeclineChecked = false;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"mb-5 mr-3\">\r\n    <drdp-title title=\"Pending Portfolio Evidence Requests\"></drdp-title>\r\n  </div>\r\n  <drdp-container additionClasses=\"flex flex-wrap content-between justify-end min-h-[44rem]\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\"min-h-[7rem] w-full\">\r\n        <div\r\n          class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateSearchId\" (state)=\"handleState($event)\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency #agencySelect [initialAgencyId]=\"agencySearchId\" (agency)=\"handleAgency($event)\"\r\n              [stateId]=\"stateSearchId\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-rating-period [initialRatingPeriodId]=\"searchPayload.toRatingPeriodId\" label=\"Rating Period\" (ratingPeriod)=\"handleToRatingPeriod($event)\" [agencyId]=\"agencySearchId\"\r\n              [clear]=\"clearDropdowns\">\r\n            </drdp-select-rating-period>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site [initialSiteId]=\"searchPayload.fromSiteId\" label=\"Previous Site\" (site)=\"handleFromSites($event)\" [agencyId]=\"agencySearchId\" [clear]=\"clearDropdowns\"\r\n              [multiSelect]=\"false\" [multiSelectInitVals]=\"false\">\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site [initialSiteId]=\"searchPayload.toSiteId\" label=\"Current Site\" (site)=\"handleToSites($event)\" [agencyId]=\"agencySearchId\"\r\n              [clear]=\"clearDropdowns\">\r\n            </drdp-select-site>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select #classSelect label=\"Previous Classroom\" [options]=\"fromClassroomList\" [selectType]=\"selectClass\"\r\n              [intialValues]=\"fromClassId\" (onSelected)=\"handleFromClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-filter-select label=\"Current Classroom\" [options]=\"toClassroomList\" [selectType]=\"selectClass\"\r\n              [intialValues]=\"toClassId\" (onSelected)=\"handleToClassroom($event)\">\r\n            </drdp-filter-select>\r\n          </div>\r\n\r\n          <div class=\"hidden lg:block lg:col-span-1 xl:col-span-1 self-end\"></div>\r\n          <div class=\"hidden lg:block lg:col-span-1 xl:col-span-1 self-end\"></div>\r\n          <div class=\"flex flex-row justify-evenly lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn (click)=\"search()\">\r\n                <span class=\"px-2\">Search</span>\r\n              </drdp-btn>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-btn color=\"outline\" (click)=\"onClear()\"> Clear </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\" (toggleSwitchActionItem)=\"handleRequest($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex flex-wrap content-between align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-3\" mat-button (click)=\"handleCancel()\">\r\n        Cancel\r\n      </drdp-btn>\r\n      <drdp-btn mat-button (click)=\"handleSubmit()\" [disabled]=\"isCurrentlyEditing || !isSubmitBtnEnabled()\"\r\n        cdkFocusInitial>\r\n        Save and Submit\r\n      </drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { PortfolioEvidenceType } from '@core/enums/portfolio';\r\nimport { IStudentEvidence } from '@core/interfaces/iclass-portfolio';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\n\r\n@Component({\r\n  selector: 'drdp-student-evidence',\r\n  templateUrl: './student-evidence.component.html',\r\n  styleUrls: ['./student-evidence.component.scss']\r\n})\r\nexport class StudentEvidenceComponent implements OnInit {\r\n  @Input() students: IStudentEvidence[] = [];\r\n  @Output() student = new EventEmitter();\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  infoIconColumnConfig = {\r\n    type: 'infoIcon',\r\n    colorClass: 'text-drdpblue-300',\r\n    cursorClass: 'cursor-pointer'\r\n  };\r\n\r\n  tableColumns = [\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'total', header: 'Total Items', type: 'text' },\r\n    { columnDef: 'review', header: 'Review Evidence Page', type: 'icon', icon: 'notes', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' },\r\n    { columnDef: 'photo', header: 'Photo Evidence', icon: 'images', ...this.infoIconColumnConfig },\r\n    { columnDef: 'video', header: 'Video Evidence', icon: 'video', ...this.infoIconColumnConfig },\r\n    { columnDef: 'audio', header: 'Audio Evidence', icon: 'volume', ...this.infoIconColumnConfig },\r\n    { columnDef: 'note', header: 'Note Evidence', icon: 'notes', ...this.infoIconColumnConfig },\r\n  ];\r\n\r\n  ngOnInit(): void {\r\n    this.initializeTableData();\r\n  }\r\n\r\n  initializeTableData(): void {\r\n    if(this.students && this.students.length) {\r\n      this.students = this.students.map(student => ({\r\n        ...student,\r\n        total: student.evidences?.length || 0,\r\n        photo: student.evidences?.filter(e => e.evidenceTypeId === PortfolioEvidenceType.Photo).length || 0,\r\n        audio: student.evidences?.filter(e => e.evidenceTypeId === PortfolioEvidenceType.Audio).length || 0,\r\n        video: student.evidences?.filter(e => e.evidenceTypeId === PortfolioEvidenceType.Video).length || 0,\r\n        note: student.evidences?.filter(e => e.evidenceTypeId === PortfolioEvidenceType.Note).length || 0,\r\n        displayIcons: setIconDisplayObject(this.tableColumns, student)\r\n      }));\r\n      this.dataSource = new MatTableDataSource(this.students);\r\n    }\r\n  }\r\n\r\n  onReviewEvidence(event: any): void {\r\n    this.student.emit(event);\r\n  }\r\n}\r\n","<drdp-add-edit-table [dataSource]=\"dataSource\" viewIcon=\"uil uil-notes text-drdpblue-300\" [showIconInfo]=\"true\"\r\n  [columns]=\"tableColumns\" [tableData]=\"students\" (iconActionItem)=\"onReviewEvidence($event)\">\r\n</drdp-add-edit-table>\r\n","<h2 class=\"mb-2 mt-0 text-3xl \">\r\n  Viewing Current Evidence & Totals for: <b>{{ searchValues?.classroomName }}</b>\r\n</h2>\r\n<h2 class=\"mb-2 mt-0 text-2xl\">\r\n  Rating Period: <b>{{ searchValues?.ratingPeriodName }}</b>\r\n</h2>\r\n<div class=\"flex justify-end items-center mr-4 mb-4\">\r\n  <a class=\"text-sm cursor-pointer\" (click)=\"navigateToClassList()\">\r\n    Go To Class List\r\n    <i class=\"uil uil-angle-right-b text-base\"></i>\r\n  </a>\r\n</div>\r\n<drdp-container *ngIf=\"classPortfolio.length; else noResults\">\r\n  <h2 class=\"mt-1 mb-3 text-xl font-bold\">Evidence Totals</h2>\r\n  <div *ngFor=\"let domain of classPortfolio\" class=\"mb-2\">\r\n    <div class=\"md:flex justify-between mt-4\">\r\n      <div class=\"font-semibold text-xl flex items-center gap-3\">\r\n        <img class=\"h-5\" src=\"assets/images/domains/{{domain.iconName}}\" [alt]=\"domain.domainCode\">\r\n        {{ domain.domainCode }}\r\n        <i class=\"uil uil-minus text-2xl -mx-3\"></i>\r\n        {{ domain.domainName }}\r\n      </div>\r\n      <div class=\"flex justify-end items-center text-xl cursor-pointer\" (click)=\"changeDomainShow(domain.domainCode)\">\r\n        <b>{{ domain.evidenceCount }} Evidence Item{{ domain.evidenceCount === 1 ? '' : 's' }}</b>\r\n        <i class=\"text-2xl ml-2\" [ngClass]=\"{'uil uil-angle-down': !showDomain || selectedDomain !== domain.domainCode,\r\n            'uil uil-angle-right': showDomain && selectedDomain === domain.domainCode}\"></i>\r\n      </div>\r\n    </div>\r\n    <div *ngIf=\"showDomain && selectedDomain === domain.domainCode\">\r\n      <div *ngIf=\"domain.students.length\" class=\"pl-4\">\r\n        <drdp-student-evidence [students]=\"domain.students\"\r\n          (student)=\"handleReviewEvidence($event)\"></drdp-student-evidence>\r\n      </div>\r\n      <div class=\"pl-4\" [class.mt-6]=\"!domain.evidenceCount\">\r\n        <div *ngFor=\"let measure of domain.measures\">\r\n          <div class=\"md:flex justify-between py-3 border-t border-black\">\r\n            <div class=\"flex items-center gap-3\">\r\n              {{ measure.measureCode }} - {{ measure.measureName }}\r\n            </div>\r\n            <div class=\"flex justify-self-end items-center cursor-pointer\" (click)=\"changeMeasureShow(measure.measureCode)\">\r\n              <b>{{ measure.evidenceCount }} Evidence Item{{ measure.evidenceCount === 1 ? '' : 's' }}</b>\r\n              <i class=\"text-2xl\" [ngClass]=\"{'uil uil-angle-down': !showMeasure || selectedMeasure !== measure.measureCode,\r\n                  'uil uil-angle-right': showMeasure && selectedMeasure === measure.measureCode}\"></i>\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"showMeasure && selectedMeasure === measure.measureCode\" class=\"pl-4\">\r\n            <drdp-student-evidence [students]=\"measure.students\"\r\n              (student)=\"handleReviewEvidence($event)\"></drdp-student-evidence>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</drdp-container>\r\n<ng-template #noResults><drdp-container>No portfolio available.</drdp-container></ng-template>\r\n","import { Component, OnInit } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport { IClassDomainEvidence } from \"@core/interfaces/iclass-portfolio\";\r\nimport { PortfolioService } from \"@core/services/portfolio.service\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { ClassPortfolioEvidenceComponent } from \"@shared/components/class-portfolio-evidence/class-portfolio-evidence.component\";\r\nimport { take } from \"rxjs\";\r\n\r\n\r\n@Component({\r\n  selector: 'drdp-class-based-portfolio',\r\n  templateUrl: './class-based-portfolio.component.html',\r\n  styleUrls: ['./class-based-portfolio.component.scss']\r\n})\r\nexport class ClassBasedPortfolioComponent implements OnInit {\r\n  classId: number = 0;\r\n  classPortfolio: IClassDomainEvidence[] = [];\r\n  showDomain: boolean = false;\r\n  selectedDomain: string = '';\r\n  showMeasure: boolean = false;\r\n  selectedMeasure: string = '';\r\n  searchValues: any | null = {};\r\n\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private portfolioSerive: PortfolioService,\r\n    private router: Router,\r\n    private toastService: ToastService,\r\n    public dialog: MatDialog\r\n  ) { \r\n    this.searchValues = this.router.getCurrentNavigation()?.extras?.state?.['searchValues'] || null; \r\n    if (!this.searchValues) {\r\n      this.toastService.error('Choose a classroom from table results.');\r\n      this.router.navigate(['/portfolio']);\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const classId = this.route.snapshot.paramMap.get('classId');\r\n    if (!classId) return;\r\n\r\n    this.classId = +classId;\r\n    this.getClassEvidence();\r\n  }\r\n\r\n  getClassEvidence(): void {\r\n    this.portfolioSerive.getClassPortfolio(this.classId).pipe(\r\n      take(1)\r\n    ).subscribe((data: IClassDomainEvidence[]) => {\r\n      this.classPortfolio = data;\r\n    });\r\n  }\r\n\r\n  changeDomainShow(domainCode: string): void {\r\n    this.showDomain = !this.showDomain;\r\n    this.selectedDomain = domainCode;\r\n  }\r\n\r\n  changeMeasureShow(measureCode: string): void {\r\n    this.showMeasure = !this.showMeasure;\r\n    this.selectedMeasure = measureCode;\r\n  }\r\n\r\n  navigateToClassList(): void {\r\n    this.router.navigate([\r\n      `/portfolio/class/${this.classId}/ageGradeInstrument/${this.searchValues.ageGradeInstrumentId}`,\r\n    ]);\r\n  }\r\n\r\n  handleReviewEvidence(event: any): void { \r\n    if (!event || !event.data) return;\r\n\r\n    if (event.type === 'review') {\r\n      this.router.navigate([\r\n        `portfolio/review-evidence/class/${this.classId}/student-enrollment/${event.data.enrollmentId}/age-grade-instrument/${event.data.ageGradeInstrumentId}`,\r\n      ], {\r\n        queryParams: {\r\n          portfolioId: event.data.portfolioId\r\n        }\r\n      });\r\n    }\r\n    else {\r\n      this.dialog.open(ClassPortfolioEvidenceComponent, { \r\n        data: event, \r\n        panelClass: 'portfolio-dialog-container' \r\n      });\r\n    }\r\n  }\r\n}\r\n","export enum StateDashboardTiles {\r\n  Gender = 'genderDemographic',\r\n  Enrollment = 'enrollment',\r\n  Age = 'ageBasedOnDob',\r\n  Race = 'childByRace',\r\n  AgeGroup = 'ageGroup',\r\n  Program = 'programByAgeGroup',\r\n}\r\n","<div *ngIf=\"dashboardResponse?.dashboardEnabled\" class=\"bg-drdpblue-200 px-5\">\r\n  <div class=\"min-w-full flex place-content-between place-items-center\">\r\n    <drdp-title class=\"mt-4\" title=\"Welcome\"> {{ user.userName }}</drdp-title>\r\n  </div>\r\n\r\n  <span>State Data Updated {{ dashboardResponse?.updatedOn | date: 'MM/dd/yyyy' }}</span>\r\n\r\n  <div class=\"mt-6 flex flex-col md:flex-row gap-4 text-center\">\r\n    <div class=\"flex flex-col gap-4 flex-1 overflow-x-auto\">\r\n      <drdp-container *ngIf=\"activeTiles.enrollment && childEnrollments.length\">\r\n        <h2 class=\"font-semibold text-xl mb-4\">Child Enrollment</h2>\r\n        <div class=\"flex justify-center flex-wrap gap-4 md:gap-10\">\r\n          <div class=\"flex flex-col\">\r\n            <span class=\"text-2xl font-bold\">{{ childEnrollments[0]?.total | number }}</span>\r\n            <span>{{ dashboardResponse?.schoolYearName }}</span>\r\n          </div>\r\n          <div *ngFor=\"let enrollment of childEnrollments\" class=\"flex flex-col\">\r\n            <span class=\"text-2xl font-bold\">{{ enrollment.count | number }}</span>\r\n            <span>{{ enrollment.name }}</span>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.childByRace && raceCounts.length\">\r\n        <h2 class=\"font-semibold text-xl\">Children by Race/Ethnicity</h2>\r\n        <h2 class=\"font-semibold text-xl mb-2\">{{ dashboardResponse?.schoolYearName }}</h2>\r\n        <drdp-chart [chartData]=\"raceCounts\" chartId=\"raceCount\" [width]=\"180\" [height]=\"180\" additionalClasses=\"max-h-[32rem]\"\r\n          [chartType]=\"chartType.Doughnut\" [displayColorLegend]=\"true\" legendAdditionalClasses=\"gap-x-5\"></drdp-chart>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.disability && disabilityCounts.length\">\r\n        <h2 class=\"font-semibold text-xl mb-2\">Disability Demographics</h2>\r\n        <drdp-chart [chartData]=\"disabilityCounts\" chartId=\"disabilityCount\" [width]=\"180\" [height]=\"180\"\r\n          [chartType]=\"chartType.Doughnut\" [displayColorLegend]=\"true\" legendAdditionalClasses=\"lg:pl-5 gap-x-3 lg:gap-x-6\"></drdp-chart>\r\n      \r\n        <div class=\"mt-5\">\r\n          <a class=\"text-sm cursor-pointer underline text-drdpblue-300\" routerLink=\"disability\">\r\n            Export Disabilities\r\n            <i class=\"uil uil-angle-right-b text-base\"></i>\r\n          </a>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.programByAgeGroup && programAgeGroupCounts.length\">\r\n        <h2 class=\"font-semibold text-xl\">Programs by Age Group</h2>\r\n        <h2 class=\"font-semibold text-xl mb-4\">{{ dashboardResponse?.schoolYearName }}</h2>\r\n        <div class=\"flex flex-wrap justify-center gap-y-4 md:gap-y-6\">\r\n          <div *ngFor=\"let ageGroup of programAgeGroupCounts\" class=\"flex flex-col sm:basis-1/2\">\r\n            <span class=\"text-2xl font-bold\">{{ ageGroup.count | number }}</span>\r\n            <span>Programs for {{ ageGroup.name }}</span>\r\n          </div>\r\n        </div>\r\n        <div class=\"mt-10\">\r\n          <a class=\"text-sm cursor-pointer underline text-drdpblue-300\" routerLink=\"programs\">\r\n            Export Programs by Age Group\r\n            <i class=\"uil uil-angle-right-b text-base\"></i>\r\n          </a>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.homeLanguage && homeLanguageTotal.length\">\r\n        <h2 class=\"font-semibold text-xl\">Child's Home Language</h2>\r\n        <h2 class=\"font-semibold text-xl\">{{ dashboardResponse?.schoolYearName }}</h2>\r\n        \r\n        <drdp-chart *ngIf=\"!isViewLanguage\" additionalClasses=\"mb-3\" [chartData]=\"homeLanguageTotal\" chartId=\"homeLanguageTotal\" \r\n          [chartType]=\"chartType.Bar\" [width]=\"400\" [height]=\"180\"></drdp-chart>\r\n\r\n        <div *ngIf=\"isViewLanguage\">\r\n          <div class=\"overflow-y-auto max-h-[18rem]\">\r\n            <drdp-legend additionalClasses=\"gap-x-3 pl-6\" [data]=\"homeLanguages\"></drdp-legend>\r\n          </div>\r\n          <div class=\"my-5\">\r\n            <a class=\"text-sm cursor-pointer underline text-drdpblue-300\" routerLink=\"home-languages\">\r\n              Export Child's Home Language\r\n              <i class=\"uil uil-angle-right-b text-base\"></i>\r\n            </a>\r\n          </div>\r\n        </div>\r\n        <drdp-btn type=\"button\" color=\"outline\" (click)=\"onViewLanguageClick()\">{{ isViewLanguage ? 'Close' : 'View' }} Languages</drdp-btn>\r\n      </drdp-container>\r\n    </div>\r\n\r\n    <div class=\"flex flex-col gap-4 flex-1 overflow-x-auto\">\r\n      <drdp-container *ngIf=\"activeTiles.childInSped && childrenInSped\">\r\n        <h2 class=\"font-semibold text-xl\">Children in Special Education</h2>\r\n        <h2 class=\"font-semibold text-xl mb-4\">{{ dashboardResponse?.schoolYearName }}</h2>\r\n        <div class=\"flex justify-center flex-wrap gap-4 md:gap-x-10\">\r\n          <div class=\"flex flex-col\">\r\n            <span class=\"text-2xl font-bold\">{{ childrenInSped.iepStudents | number }}</span>\r\n            <span>Children with IFSP/IEP</span>\r\n          </div>\r\n          <div class=\"flex flex-col\">\r\n            <span class=\"text-2xl font-bold\">{{ childrenInSped.exitingStudents | number }}</span>\r\n            <a routerLink=\"special-education\" class=\"text-drdpblue-300 underline\">\r\n              <span>Anticipated Children Exiting</span>\r\n              <i class=\"uil uil-angle-right\"></i>\r\n            </a>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.genderDemographic && genderDemographics.length\">\r\n        <h2 class=\"font-semibold text-xl mb-4\">Child Gender Demographics for {{ dashboardResponse?.schoolYearName }} Enrollment</h2>\r\n        <div class=\"flex justify-center flex-wrap gap-4 md:gap-8\">\r\n          <drdp-chart *ngFor=\"let gender of genderDemographics\" [chartData]=\"[gender]\" [chartId]=\"gender.name\"\r\n            [chartType]=\"chartType.Doughnut\"></drdp-chart>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.ageGroup && ageGroupCounts.length\">\r\n        <h2 class=\"font-semibold text-xl\">Child Age Group/Instrument</h2>\r\n        <h2 class=\"font-semibold text-xl mb-4\">Current Rating Period</h2>\r\n        <div class=\"grid sm:grid-cols-2 gap-4\">\r\n          <div *ngFor=\"let rpAgeGroup of ageGroupCounts\" class=\"flex flex-col\">\r\n            <span class=\"text-2xl font-bold\">{{ rpAgeGroup.count | number }}</span>\r\n            <span>{{ rpAgeGroup.name }}</span>\r\n            <span>{{ rpAgeGroup.subName }}</span>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.rating && ratingsCounts.length\">\r\n        <h2 class=\"font-semibold text-xl\">Child Ratings</h2>\r\n        <h2 class=\"font-semibold text-xl\">{{ dashboardResponse?.schoolYearName }}</h2>\r\n        \r\n        <drdp-chart additionalClasses=\"mb-3\" [chartData]=\"ratingsCounts\" chartId=\"ratingsCounts\" [chartType]=\"chartType.Bar\"\r\n          [width]=\"300\" [height]=\"500\" [isHorizontalBarChart]=\"true\" labelsSplitAt=\"ratings\"></drdp-chart>\r\n\r\n        <!-- <div class=\"mt-5\">\r\n          <a class=\"text-sm cursor-pointer underline text-drdpblue-300\" routerLink=\"child-ratings\">\r\n            Export Child Ratings\r\n            <i class=\"uil uil-angle-right-b text-base\"></i>\r\n          </a>\r\n        </div> -->\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.childByIep && childrenWithIep.length\">\r\n        <h2 class=\"font-semibold text-xl mb-4\">Children with IFSP's / IEP's</h2>\r\n        <div class=\"flex justify-center flex-wrap gap-y-4 md:gap-y-6\">\r\n          <div *ngFor=\"let iep of childrenWithIep\" class=\"flex flex-col w-full sm:w-1/3\">\r\n            <span class=\"text-2xl font-bold\">{{ iep.count | number }}</span>\r\n            <span>{{ iep.name }}</span>\r\n            <span>{{ iep.subName }}</span>\r\n          </div>\r\n        </div>\r\n      </drdp-container>\r\n\r\n      <drdp-container *ngIf=\"activeTiles.ageBasedOnDob && ageCounts.length\">\r\n        <h2 class=\"font-semibold text-xl mb-2\">Children's Age Based on Date of Birth</h2>\r\n        <drdp-chart [chartData]=\"ageCounts\" chartId=\"ageCount\" [width]=\"160\" [height]=\"160\" legendAdditionalClasses=\"gap-x-10\"\r\n          [chartType]=\"chartType.Doughnut\" [displayColorLegend]=\"true\"></drdp-chart>\r\n      </drdp-container>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { ChartType } from '@core/enums/chart-type';\r\nimport { StateDashboardTiles } from '@core/enums/state-dashboard';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { IStateDashboardTileResponse, IStateDashboardConfiguration, IStateDashboardResponse, IChildrenInSpedResponse } from '@core/interfaces/istate-dashboard';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take, tap } from 'rxjs';\r\nimport { UserSessionComponent } from '../dashboard/user-session/user-session.component';\r\n\r\n@Component({\r\n  selector: 'drdp-state-dashboard',\r\n  templateUrl: './state-dashboard.component.html',\r\n  styleUrls: ['./state-dashboard.component.scss']\r\n})\r\nexport class StateDashboardComponent implements OnInit {\r\n  private stateService = inject(StateService);\r\n  private authService = inject(AuthService);\r\n  private router = inject(Router);  \r\n  public modal = inject(MatDialog);\r\n\r\n  user: ILoginResponse = this.authService.getCurrentUser();\r\n  tiles = StateDashboardTiles;\r\n  genderDemographics: IStateDashboardTileResponse[] = [];\r\n  childEnrollments: IStateDashboardTileResponse[] = [];\r\n  ageCounts: IStateDashboardTileResponse[] = [];\r\n  raceCounts: IStateDashboardTileResponse[] = [];\r\n  ageGroupCounts: IStateDashboardTileResponse[] = [];\r\n  programAgeGroupCounts: IStateDashboardTileResponse[] = [];\r\n  homeLanguageTotal: IStateDashboardTileResponse[] = [];\r\n  homeLanguages: IStateDashboardTileResponse[] = [];\r\n  childrenInSped: IChildrenInSpedResponse | null = null;\r\n  ratingsCounts: IStateDashboardTileResponse[] = []; \r\n  childrenWithIep: IStateDashboardTileResponse[] = [];\r\n  disabilityCounts: IStateDashboardTileResponse[] = [];\r\n  chartType = ChartType;\r\n  isViewLanguage: boolean = false;\r\n  dashboardResponse: IStateDashboardResponse | null = null;\r\n  activeTiles = {\r\n    genderDemographic: false,\r\n    enrollment: false,\r\n    ageBasedOnDob: false,\r\n    childByRace: false,\r\n    ageGroup: false,\r\n    programByAgeGroup: false,\r\n    homeLanguage: false,\r\n    childInSped: false,\r\n    rating: false,\r\n    childByIep: false,\r\n    disability: false\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    if (this.user.sessionCount > 1) this.openSessionModel();\r\n\r\n    this.stateService.getStateDashboardData().pipe(\r\n      take(1), \r\n      tap((response: IStateDashboardResponse) => {\r\n        if (!response.dashboardEnabled) {\r\n          this.router.navigate(['dashboard']);\r\n        } else {\r\n          this.dashboardResponse = response;\r\n          if (response.configurations) this.getActiveTiles(response.configurations);\r\n        }\r\n      })\r\n    ).subscribe(() => {\r\n      this.initializeCharts();\r\n    });\r\n  }\r\n\r\n  openSessionModel(): void {\r\n    const modalRef = this.modal.open(UserSessionComponent);\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n  getActiveTiles(controls: IStateDashboardConfiguration[]): void {\r\n    controls.forEach((control: IStateDashboardConfiguration) => {\r\n      if (control.controlName in this.activeTiles) {\r\n        const key = control.controlName as keyof typeof this.activeTiles;\r\n        this.activeTiles[key] = control.isActive;\r\n      }\r\n    });\r\n  }\r\n\r\n  initializeCharts(): void {\r\n    if (this.activeTiles.genderDemographic) {\r\n      this.stateService.getGenderDemographicsCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.genderDemographics = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.enrollment) {\r\n      this.stateService.getChildEnrollmentsCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.childEnrollments = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.ageBasedOnDob) {\r\n      this.stateService.getChildAgeCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.ageCounts = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.childByRace) {\r\n      this.stateService.getChildRaceCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.raceCounts = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.ageGroup) {\r\n      this.stateService.getChildAgeGroupCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.ageGroupCounts = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.programByAgeGroup) {\r\n      this.stateService.getProgramsByAgeGroupCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.programAgeGroupCounts = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.homeLanguage) {\r\n      this.stateService.getStudentCountsByLangTypes()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.homeLanguageTotal = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.childInSped) {\r\n      this.stateService.getChildrenInSpedCounts()\r\n      .pipe(take(1)).subscribe((response: IChildrenInSpedResponse) => {\r\n        this.childrenInSped = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.rating) {\r\n      this.stateService.getRatingsCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.ratingsCounts = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.childByIep) {\r\n      this.stateService.getChildrenWithIepCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.childrenWithIep = response;\r\n      });\r\n    }\r\n\r\n    if (this.activeTiles.disability) {\r\n      this.stateService.getDisabilityChildCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.disabilityCounts = response;\r\n      });\r\n    }\r\n  }\r\n\r\n  onViewLanguageClick(): void {\r\n    this.isViewLanguage = !this.isViewLanguage;\r\n    if (!this.homeLanguages.length) {\r\n      this.stateService.getHomeLanguageCounts()\r\n      .pipe(take(1)).subscribe((response: IStateDashboardTileResponse[]) => {\r\n        this.homeLanguages = response;\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <drdp-title [title]=title></drdp-title>\r\n  \r\n  <drdp-container>\r\n    <drdp-container color=\"lightBlue\" additionClasses=\"p-6\">\r\n      <form class=\"grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 gap-2\" [formGroup]=\"searchForm\" (ngSubmit)=\"handleExport()\">\r\n        <div class=\"col-span-1 md:col-span-3 lg:col-span-5\">\r\n          <mat-checkbox color=\"primary\" formControlName=\"isGlobalAgencies\"></mat-checkbox>\r\n          <label class=\"inline\">Apply to All Agencies</label>\r\n        </div>\r\n\r\n        <drdp-select-state [initialStateId]=\"stateId.value\" [required]=\"true\" [disabled]=\"true\"></drdp-select-state>\r\n\r\n        <drdp-select-agency *ngIf=\"!isGlobalAgencies.value\" #agencySelect [stateId]=\"stateId.value\" [initialAgencyId]=\"agencyId.value\"\r\n          (agency)=\"handleDropdown($event, selectType.Agencies)\" [required]=\"true\" [clear]=\"clearDropdowns\">\r\n        </drdp-select-agency>\r\n\r\n        <drdp-select-age-grade *ngIf=\"displayDropdowns.ageGroup\" #ageGroupInstrumentSelect [stateId]=\"stateId.value\" label=\"Age Group\" [multiSelect]=\"false\"\r\n          (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\" [required]=\"requiredFields.ageGroup\" [clear]=\"clearDropdowns\">\r\n        </drdp-select-age-grade>\r\n\r\n        <drdp-select-program-type *ngIf=\"displayDropdowns.enrollmentProgram\" [ageGradeId]=\"ageGroupId.value\" label=\"Program Name\" [multiSelect]=\"true\"  \r\n          (programType)=\"handleDropdown($event, selectType.EnrollmentProgram)\" [required]=\"requiredFields.enrollmentProgram\" [clear]=\"clearDropdowns\">\r\n        </drdp-select-program-type>\r\n\r\n        <drdp-select-language *ngIf=\"displayDropdowns.homeLanguage\" #homeLanguageSelect label=\"Child's Home Language\" [required]=\"requiredFields.homeLanguage\"\r\n          [multiSelect]=\"true\" (language)=\"handleDropdown($event, selectType.Language)\"></drdp-select-language>\r\n\r\n        <drdp-select-school-year *ngIf=\"displayDropdowns.schoolYear\" label=\"School Year\" [disabled]=\"true\"></drdp-select-school-year>\r\n\r\n        <drdp-select-global-rating *ngIf=\"displayDropdowns.globalRatingPeriods\" (ratingPeriod)=\"handleDropdown($event, selectType.GlobalRatingPeriods)\" [multiSelect]=\"true\"\r\n            [required]=\"requiredFields.globalRatingPeriods\" label=\"Rating Period\"\r\n            [clear]=\"clearDropdowns\" [showAll]=\"false\" [hideFromStateDash]=\"true\">\r\n        </drdp-select-global-rating>\r\n\r\n        <drdp-select-disability *ngIf=\"displayDropdowns.disability\" #disabilitySelect label=\"Primary Disability\" [required]=\"requiredFields.disability\"\r\n          [multiSelect]=\"true\" (disability)=\"handleDropdown($event, selectType.PrimaryDisability)\"></drdp-select-disability>\r\n\r\n        <div class=\"flex items-end mt-4 md:mt-0\">\r\n          <drdp-btn type=\"submit\" [disabled]=\"searchForm.invalid\">Export</drdp-btn>\r\n          <drdp-btn class=\"ml-2\" type=\"button\" (click)=\"clear()\">Clear</drdp-btn>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </drdp-container>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IStateDashboardSearchFields, IStateDashboardSearchRequest } from '@core/interfaces/istate-dashboard';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { SelectAgeGradeComponent } from '@shared/components/dropdowns/select-age-grade/select-age-grade.component';\r\nimport { SelectDisabilityComponent } from '@shared/components/dropdowns/select-disability/select-disability.component';\r\nimport { SelectGlobalRatingComponent } from '@shared/components/dropdowns/select-global-rating/select-global-rating.component';\r\nimport { SelectLanguageComponent } from '@shared/components/dropdowns/select-language/select-language.component';\r\nimport { Subscription, take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-dashboard-search',\r\n  templateUrl: './dashboard-search.component.html',\r\n  styleUrls: ['./dashboard-search.component.scss']\r\n})\r\nexport class DashboardSearchComponent implements OnInit {\r\n  @ViewChild('ageGroupInstrumentSelect ') ageGroupInstrumentSelect : SelectAgeGradeComponent | undefined;\r\n  @ViewChild('homeLanguageSelect') homeLanguageSelect: SelectLanguageComponent | undefined;\r\n  @ViewChild('globalRatingsSelect') globalRatingsSelect: SelectGlobalRatingComponent | undefined;\r\n  @ViewChild('disabilitySelect') disabilitySelect: SelectDisabilityComponent | undefined;\r\n\r\n  fb = inject(FormBuilder);\r\n  private authService = inject(AuthService);\r\n  private lookup = inject(LookupService);\r\n\r\n  @Input() title: string = '';\r\n  @Input() displayDropdowns: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    schoolYear: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n  @Input() requiredFields: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n  @Output() exportClicked: EventEmitter<IStateDashboardSearchRequest> = new EventEmitter<IStateDashboardSearchRequest>();\r\n\r\n  searchForm: FormGroup | any;\r\n  user = this.authService.getCurrentUser();\r\n  subscriptions = new Subscription();\r\n  clearDropdowns: boolean = false;\r\n  public get selectType() { return SelectType; }\r\n\r\n  get stateId() { return this.searchForm.get('stateId'); }\r\n  get agencyId() { return this.searchForm.get('agencyId'); }\r\n  get isGlobalAgencies() { return this.searchForm.get('isGlobalAgencies'); }\r\n  get ageGroupId() { return this.searchForm.get('ageGroupId'); }\r\n  get enrollmentProgramFilterIds() { return this.searchForm.get('enrollmentProgramFilterIds'); }\r\n  get homeLanguageIds() { return this.searchForm.get('homeLanguageIds'); }\r\n  get globalRatingPeriodIds() { return this.searchForm.get('globalRatingPeriodIds'); }\r\n  get disabilityIds() { return this.searchForm.get('disabilityIds'); }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  private initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: [this.user.stateId, Validators.required],\r\n      agencyId: [this.user.agencyId, Validators.required],\r\n      isGlobalAgencies: [false],\r\n      ageGroupId: [null, this.requiredFields.ageGroup ? Validators.required : null],\r\n      enrollmentProgramFilterIds: [[], this.requiredFields.enrollmentProgram ? Validators.required : null],\r\n      homeLanguageIds: [[], this.requiredFields.homeLanguage ? Validators.required : null],\r\n      globalRatingPeriodIds: [[], this.requiredFields.globalRatingPeriods ? Validators.required : null],\r\n      disabilityIds: [[], this.requiredFields.disability ? Validators.required : null],\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.isGlobalAgencies.valueChanges.subscribe((val: boolean) => {\r\n        if (val) this.agencyId.clearValidators();\r\n        else this.agencyId.setValidators([Validators.required]);\r\n        this.agencyId.setValue(null);\r\n      })\r\n    );\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case SelectType.AgeInstrument:\r\n        this.ageGroupId.setValue(event?.id);\r\n        this.enrollmentProgramFilterIds.setValue([]);\r\n        break;\r\n      case SelectType.EnrollmentProgram:\r\n        event.length\r\n          ? this.enrollmentProgramFilterIds.setValue(event.map((program: any) => program.id))\r\n          : this.enrollmentProgramFilterIds.setValue([]);\r\n        break;\r\n      case SelectType.Language:\r\n        event.length\r\n          ? this.homeLanguageIds.setValue(event.map((language: any) => language.id))\r\n          : this.homeLanguageIds.setValue([]);\r\n        break;\r\n      case SelectType.GlobalRatingPeriods:\r\n        event.length\r\n          ? this.globalRatingPeriodIds.setValue(event.map((grp: any) => grp.id))\r\n          : this.globalRatingPeriodIds.setValue([]);\r\n        break;\r\n      case SelectType.PrimaryDisability:\r\n        event.length\r\n          ? this.disabilityIds.setValue(event.map((disability: any) => disability.id))\r\n          : this.disabilityIds.setValue([]);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleExport(): void {\r\n    this.exportClicked.emit(this.searchForm.value);\r\n  }\r\n\r\n  clear(): void {\r\n    this.clearDropdowns = true;\r\n    this.searchForm.reset();\r\n    this.ageGroupInstrumentSelect?.clearSelected();\r\n    this.homeLanguageSelect?.clearSelected();\r\n    this.globalRatingsSelect?.clearSelected();\r\n    this.disabilitySelect?.clearSelected();\r\n    \r\n    this.stateId.setValue(this.user.stateId);\r\n    this.isGlobalAgencies.setValue(false);\r\n    this.enrollmentProgramFilterIds.setValue([]);\r\n    this.homeLanguageIds.setValue([]);\r\n    this.globalRatingPeriodIds.setValue([]);\r\n    this.disabilityIds.setValue([]);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { UserProfileComponent } from './user-profile/user-profile.component';\r\nimport { DashboardComponent } from './dashboard/dashboard/dashboard.component';\r\nimport { DrdpLayoutComponent } from './drdp-layout/drdp-layout.component';\r\nimport { MyClassesComponent } from './manage-enrollment/my-classes/my-classes.component';\r\nimport { StudentsComponent } from './manage-enrollment/my-classes/students/students.component';\r\nimport { AuthGuard } from '@core/guards/auth.guard';\r\nimport { LatestNewsComponent } from './dashboard/latest-news/latest-news.component';\r\nimport { EditUserProfileComponent } from './user-profile/edit-user-profile/edit-user-profile.component';\r\nimport { UpdatePasswordComponent } from './user-profile/update-password/update-password.component';\r\nimport { AddNewChildComponent } from './add-new-child/add-new-child.component';\r\nimport { ViewChildComponent } from './manage-enrollment/view-child/view-child.component';\r\nimport { TransferChildComponent } from './manage-enrollment/transfer-child/transfer-child.component';\r\nimport { PendingTransfersComponent } from './dashboard/pending-requests/pending-transfers/pending-transfers.component';\r\nimport { PendingWithdrawsComponent } from './dashboard/pending-requests/pending-withdraws/pending-withdraws.component';\r\nimport { SearchDroppedChildrenComponent } from './search-dropped-children/search-dropped-children.component';\r\nimport { PermissionGuard } from '@core/guards/permission.guard';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { ReEnrollmentRequestsComponent } from './dashboard/pending-requests/re-enrollment-requests/re-enrollment-requests.component';\r\nimport { AddNewsComponent } from './configuration/news/news.component';\r\nimport { InputRatingComponent } from './input-rating/input-rating.component';\r\nimport { SearchRatingComponent } from './input-rating/search-rating/search-rating.component';\r\nimport { ScantronComponent } from './input-rating/components/scantron/scantron.component';\r\nimport { PortfolioComponent } from './dashboard/portfolio/portfolio.component';\r\nimport { PortfolioClassComponent } from './dashboard/portfolio/portfolio-class/portfolio-class.component';\r\nimport { AddSearchChildComponent } from './add-new-child/add-search-child/add-search-child.component';\r\nimport { PendingReleasesComponent } from './dashboard/pending-requests/pending-releases/pending-releases.component';\r\nimport { PortfolioAddEvidence } from './dashboard/portfolio/portfolio-class/portfolio-add-evidence/portfolio-add-evidence.component';\r\nimport { PortfolioReviewEvidenceComponent } from './dashboard/portfolio/portfolio-class/portfolio-review-evidence/portfolio-review-evidence.component';\r\nimport { StudentBulkUnEnrollmentComponent } from './manage-enrollment/my-classes/students/students-bulk-un-enrollment/students-bulk-un-enrollment.component';\r\nimport { PilotTestChildrenComponent } from './pilot-test-children/pilot-test-children.component';\r\nimport { ChildrenComponent } from './children/children.component';\r\nimport { CanDeactivateGuard } from '@core/guards/can-deactivate.guard';\r\nimport { SearchManageChildComponent } from './manage-enrollment/search-manage-child/search-manage-child.component';\r\nimport { PendingChildReEnrollmentComponent } from './dashboard/pending-requests/pending-child-re-enrollment/pending-child-re-enrollment.component';\r\nimport { PortfolioMessagesComponent } from './dashboard/portfolio/portfolio-messages/portfolio-messages.component';\r\nimport { MessageViewComponent } from './dashboard/portfolio/portfolio-messages/message-view/message-view.component';\r\nimport { MessageBoardComponent } from './dashboard/portfolio/portfolio-messages/message-board/message-board.component';\r\nimport { ChildRequestComponent } from './manage-enrollment/child-request/child-request.component';\r\nimport { TotalLockedChildrenComponent } from './dashboard/total-locked-children/total-locked-children.component';\r\nimport { PendingPortfolioEvidencesComponent } from './dashboard/pending-requests/pending-portfolio-evidences/pending-portfolio-evidences.component';\r\nimport { ClassBasedPortfolioComponent } from './dashboard/portfolio/class-based-portfolio/class-based-portfolio.component';\r\nimport { StateDashboardComponent } from './state-dashboard/state-dashboard.component';\r\nimport { SearchProgramsComponent } from './state-dashboard/dashboard-search/search-programs/search-programs.component';\r\nimport { SearchHomeLanguagesComponent } from './state-dashboard/dashboard-search/search-home-languages/search-home-languages.component';\r\nimport { SearchSpecialEducationComponent } from './state-dashboard/dashboard-search/search-special-education/search-special-education.component';\r\nimport { SearchChildRatingsComponent } from './state-dashboard/dashboard-search/search-child-ratings/search-child-ratings.component';\r\nimport { SearchDisabilitiesComponent } from './state-dashboard/dashboard-search/search-disabilities/search-disabilities.component';\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: '',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      {\r\n        path: 'add-child',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.CreateStudent },\r\n        component: AddNewChildComponent,\r\n      },\r\n      {\r\n        path: 'add-search-child',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.CreateStudent },\r\n        component: AddSearchChildComponent,\r\n      },\r\n      {\r\n        path: 'dashboard',\r\n        component: DashboardComponent,\r\n      },\r\n      {\r\n        path: 'state-dashboard',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.AccessStateDashboard },\r\n        component: StateDashboardComponent,\r\n      },\r\n      {\r\n        path: 'state-dashboard/programs',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.AccessStateDashboard },\r\n        component: SearchProgramsComponent,\r\n      },\r\n      {\r\n        path: 'state-dashboard/home-languages',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.AccessStateDashboard },\r\n        component: SearchHomeLanguagesComponent,\r\n      },\r\n      {\r\n        path: 'state-dashboard/special-education',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.AccessStateDashboard },\r\n        component: SearchSpecialEducationComponent,\r\n      },\r\n      // {\r\n      //   path: 'state-dashboard/child-ratings',\r\n      //   canActivate: [PermissionGuard],\r\n      //   data: { permission: Permission.AccessStateDashboard },\r\n      //   component: SearchChildRatingsComponent,\r\n      // },\r\n      {\r\n        path: 'state-dashboard/disability',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.AccessStateDashboard },\r\n        component: SearchDisabilitiesComponent,\r\n      },\r\n      {\r\n        path: 'user-profile',\r\n        component: UserProfileComponent,\r\n      },\r\n      {\r\n        path: 'update-password',\r\n        component: UpdatePasswordComponent,\r\n      },\r\n      {\r\n        path: 'edit-profile',\r\n        component: EditUserProfileComponent,\r\n      },\r\n      {\r\n        path: 'classrooms',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewMyClasses },\r\n        component: MyClassesComponent,\r\n      },\r\n      {\r\n        path: 'view-students/:id',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStudent },\r\n        component: StudentsComponent,\r\n      },\r\n      {\r\n        path: 'view-students/:id/bulk-un-enrollment',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStudent },\r\n        component: StudentBulkUnEnrollmentComponent,\r\n      },\r\n      {\r\n        path: 'transfer-child/:currentStudentId/:id',\r\n        component: TransferChildComponent,\r\n      },\r\n      {\r\n        path: 'manage-news',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: [Permission.CreateNewsItem],\r\n        },\r\n        component: LatestNewsComponent,\r\n      },\r\n      {\r\n        path: 'manage-enrollment',\r\n        data: { permission: Permission.SearchStudent },\r\n        component: SearchManageChildComponent,\r\n      },\r\n      {\r\n        path: 'view-child/:id',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStudent },\r\n        component: ViewChildComponent,\r\n      },\r\n      {\r\n        path: 'view-child/:id/class/:classId',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStudent },\r\n        component: ViewChildComponent,\r\n      },\r\n      { path: 'pending-transfers', component: PendingTransfersComponent },\r\n      { path: 'pending-withdraws', component: PendingWithdrawsComponent },\r\n      {\r\n        path: 'pending-child-re-enrollment',\r\n        component: PendingChildReEnrollmentComponent,\r\n      },\r\n      {\r\n        path: 'pending-re-enrollment',\r\n        component: ReEnrollmentRequestsComponent,\r\n      },\r\n      {\r\n        path: 'pending-releases',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewPendingReleaseRequests },\r\n        component: PendingReleasesComponent,\r\n      },\r\n      {\r\n        path: 'search-dropped-children',\r\n        component: SearchDroppedChildrenComponent,\r\n      },\r\n      { path: 'portfolio', component: PortfolioComponent },\r\n      {\r\n        path: 'portfolio/class/:classId/ageGradeInstrument/:ageGradeId',\r\n        component: PortfolioClassComponent,\r\n      },\r\n      { path: 'portfolio/add-evidence', component: PortfolioAddEvidence },\r\n      {\r\n        path: 'portfolio/review-evidence/class/:classId/student-enrollment/:studentClassEnrollmentId/age-grade-instrument/:ageGradeId',\r\n        component: PortfolioReviewEvidenceComponent,\r\n      },\r\n      {\r\n        path: 'portfolio/review-evidence/future-evidence/:futureEvidenceId/student/:studentId/class/:classId/age-grade-instrument/:ageGradeId',\r\n        component: PortfolioReviewEvidenceComponent,\r\n      },\r\n      {\r\n        path: 'newsitems',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.CreateNewsItem },\r\n        component: AddNewsComponent,\r\n      },\r\n      {\r\n        path: 'newsitems/:id',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.CreateNewsItem },\r\n        component: AddNewsComponent,\r\n      },\r\n      {\r\n        path: 'ratings',\r\n        component: SearchRatingComponent,\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewRatings },\r\n      },\r\n      {\r\n        path: 'ratings/class/:classId/ageGradeInstrument/:instrumentId',\r\n        component: SearchRatingComponent,\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewRatings },\r\n      },\r\n      {\r\n        path: 'input-ratings/:id',\r\n        component: InputRatingComponent,\r\n        canActivate: [PermissionGuard],\r\n        canDeactivate: [CanDeactivateGuard],\r\n        data: { permission: Permission.ViewRatings },\r\n      },\r\n      {\r\n        path: 'input-scantron/:id',\r\n        component: ScantronComponent,\r\n      },\r\n      {\r\n        path: 'pilot-test-children',\r\n        component: PilotTestChildrenComponent,\r\n        data: { permission: Permission.PilotProgramChildrenPage },\r\n      },\r\n      {\r\n        path: 'children',\r\n        component: ChildrenComponent,\r\n        data: { permission: Permission.AccessToChildrenPAge },\r\n      },\r\n      {\r\n        path: 'portfolio-messages',\r\n        // canActivate: [PermissionGuard],\r\n        // data: { permission: Permission.AccessToPortfolioMessages },\r\n        component: PortfolioMessagesComponent,\r\n        children: [\r\n          {\r\n            path: '',\r\n            component: MessageViewComponent,\r\n          },\r\n          {\r\n            path: 'message-view',\r\n            component: MessageViewComponent,\r\n          },\r\n          {\r\n            path: 'student-enrollment/:studentClassEnrollmentId/student/:studentId/sender/:senderId/recipient/:recipientId',\r\n            component: MessageBoardComponent,\r\n          },\r\n        ]\r\n      },\r\n      {\r\n        path: 'child-requests',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.AccessChildRequestsPage\r\n        },\r\n        component: ChildRequestComponent,\r\n      },\r\n      {\r\n        path: 'total-locked-children',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.ViewTotalLockedChildren\r\n        },\r\n        component: TotalLockedChildrenComponent,\r\n      },\r\n      {\r\n        path: 'portfolio-evidence-requests',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.PendingPortfolioRequests\r\n        },\r\n        component: PendingPortfolioEvidencesComponent,\r\n      },\r\n      {\r\n        path: 'portfolio/class-evidence/:classId',\r\n        component: ClassBasedPortfolioComponent,\r\n      },\r\n    ],\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class UserRoutingModule { }\r\n","import { Component, inject } from '@angular/core';\r\nimport { IStateDashboardSearchFields, IStateDashboardSearchRequest } from '@core/interfaces/istate-dashboard';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-search-programs',\r\n  templateUrl: './search-programs.component.html',\r\n  styleUrls: ['./search-programs.component.scss']\r\n})\r\nexport class SearchProgramsComponent {\r\n  private stateService = inject(StateService);\r\n  \r\n  displayDropdowns: IStateDashboardSearchFields = {\r\n    ageGroup: true,\r\n    enrollmentProgram: true,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n  requiredFields: IStateDashboardSearchFields = {\r\n    ageGroup: true,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n\r\n  handleSearch(searchValue: IStateDashboardSearchRequest): void {\r\n    this.stateService.searchProgramsByAgeGroup(searchValue).pipe(take(1)).subscribe(res => {\r\n      const fileName = 'Programs.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n}\r\n","<drdp-dashboard-search [displayDropdowns]=\"displayDropdowns\" [requiredFields]=\"requiredFields\" \r\n  title=\"Search Programs by Age Group\" (exportClicked)=\"handleSearch($event)\">\r\n</drdp-dashboard-search>","import { Component, inject } from '@angular/core';\r\nimport { IStateDashboardSearchFields, IStateDashboardSearchRequest } from '@core/interfaces/istate-dashboard';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-search-home-languages',\r\n  templateUrl: './search-home-languages.component.html',\r\n  styleUrls: ['./search-home-languages.component.scss']\r\n})\r\nexport class SearchHomeLanguagesComponent {\r\n  private stateService = inject(StateService);\r\n  \r\n  displayDropdowns: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: true,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n  requiredFields: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n\r\n  handleSearch(searchValue: IStateDashboardSearchRequest): void {\r\n    this.stateService.searchChildLanguages(searchValue).pipe(take(1)).subscribe(res => {\r\n      const fileName = 'HomeLanguages.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });  \r\n  }\r\n}\r\n","<drdp-dashboard-search [displayDropdowns]=\"displayDropdowns\" [requiredFields]=\"requiredFields\" \r\n  title=\"Search Child's Home Language\" (exportClicked)=\"handleSearch($event)\">\r\n</drdp-dashboard-search>","import { Component, inject } from '@angular/core';\r\nimport { IStateDashboardSearchFields, IStateDashboardSearchRequest } from '@core/interfaces/istate-dashboard';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-search-special-education',\r\n  templateUrl: './search-special-education.component.html',\r\n  styleUrls: ['./search-special-education.component.scss']\r\n})\r\nexport class SearchSpecialEducationComponent {\r\nprivate stateService = inject(StateService);\r\n  \r\n  displayDropdowns: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    schoolYear: true,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n  requiredFields: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: false\r\n  };\r\n\r\n  handleSearch(searchValue: IStateDashboardSearchRequest): void {\r\n    this.stateService.searchSpecialEducation(searchValue).pipe(take(1)).subscribe(res => {\r\n      const fileName = 'SpecialEducation.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n}","<drdp-dashboard-search [displayDropdowns]=\"displayDropdowns\" [requiredFields]=\"requiredFields\" \r\n  title=\"Search Anticipated Exit Data\" (exportClicked)=\"handleSearch($event)\">\r\n</drdp-dashboard-search>\r\n","import { Component, inject } from '@angular/core';\r\nimport {\r\n  IStateDashboardSearchFields,\r\n  IStateDashboardSearchRequest,\r\n} from '@core/interfaces/istate-dashboard';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-search-disabilities',\r\n  templateUrl: './search-disabilities.component.html',\r\n  styleUrls: ['./search-disabilities.component.scss'],\r\n})\r\nexport class SearchDisabilitiesComponent {\r\n  private stateService = inject(StateService);\r\n\r\n  displayDropdowns: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    schoolYear: true,\r\n    globalRatingPeriods: false,\r\n    disability: true,\r\n  };\r\n  requiredFields: IStateDashboardSearchFields = {\r\n    ageGroup: false,\r\n    enrollmentProgram: false,\r\n    homeLanguage: false,\r\n    globalRatingPeriods: false,\r\n    disability: true,\r\n  };\r\n\r\n  handleSearch(searchValue: IStateDashboardSearchRequest): void {\r\n    this.stateService\r\n      .searchDisability(searchValue)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        const fileName = 'Disability.xlsx';\r\n        const blob = new Blob([res.body], {\r\n          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n        });\r\n        const url = URL.createObjectURL(blob);\r\n        const a = document.createElement('a');\r\n        a.href = url;\r\n        a.download = fileName;\r\n        a.click();\r\n      });\r\n  }\r\n}\r\n","<drdp-dashboard-search [displayDropdowns]=\"displayDropdowns\" [requiredFields]=\"requiredFields\" \r\n  title=\"Search Disability\" (exportClicked)=\"handleSearch($event)\">\r\n</drdp-dashboard-search>\r\n\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { DataService } from '@core/services/data.service';\r\nimport { IAgencyRatingReviewsRequest, IChildRatingsRequest, IReportUsageRequest } from '@views/user/reports/interfaces/iadmin-report-tracking';\r\nimport { IRatingCompletionChildrenSearch, IRatingCompletionSearch } from '@views/user/reports/interfaces/irating-completion-search';\r\nimport { IDistrictOsepSearch, IReportSearch, IStateOsepSearch } from '@views/user/reports/interfaces/ireport-search';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ReportService {\r\n  private _dataService = inject(DataService);\r\n\r\n  generateParentProgressReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/parent-progress?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateParentProgressReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/parent-progress/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateChildProgressReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/child-progress?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateChildProgressReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/child-progress/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateClassPlanningReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/class-planning?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateClassPlanningReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/class-planning/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateGroupDetailReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/group-detail?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateGroupDetailReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/group-detail/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateGroupReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/group?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateGroupReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/group/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateCohortProgressReport(payload: IReportSearch) {\r\n    return this._dataService.post(`reports/cohort-progress?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateCohortProgressReportPdf(payload: IReportSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/cohort-progress/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateRatingCompletionReport(payload: IRatingCompletionSearch) {\r\n    return this._dataService.post(`reports/rating-completion?`, payload);\r\n\t}\r\n\r\n  getRatingCompletionChildren(payload: IRatingCompletionChildrenSearch) {\r\n    return this._dataService.post(`reports/rating-completion-children?`, payload);\r\n  }\r\n\r\n  getReportUsage(payload: IReportUsageRequest) {\r\n    return this._dataService.postWithOptions(`reports/report-usage?`, payload, { responseType: 'blob' });\r\n  }\r\n\r\n  getAgencyRatingViews(payload: IAgencyRatingReviewsRequest) {\r\n    return this._dataService.postWithOptions(`reports/agency-rating-views?`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  getChildRatings(payload: IChildRatingsRequest) {\r\n    return this._dataService.postWithOptions(`reports/child-ratings?`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  generateDistrictOsepReport(payload: IDistrictOsepSearch) {\r\n    return this._dataService.post(`reports/district-osep?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateDistrictOsepReportPdf(payload: IStateOsepSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/district-osep/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateStateOsepReport(payload: IDistrictOsepSearch) {\r\n    return this._dataService.post(`reports/state-osep?culture=${payload.locale}`, payload);\r\n  }\r\n\r\n  generateStateOsepReportPdf(payload: IStateOsepSearch) {\r\n    const options = { responseType: 'blob' };\r\n    return this._dataService.postWithOptions(`reports/state-osep/download?culture=${payload.locale}`, payload, options);\r\n  }\r\n\r\n  generateStateOsepReportDetail(payload: IStateOsepSearch) {\r\n    return this._dataService.postWithOptions(`reports/state-detail?culture=${payload.locale}`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  getTeacherSurveyResults(payload: IReportSearch) {\r\n    return this._dataService.postWithOptions(`reports/teacher-survey-results`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });\r\n  }\r\n\r\n  saveStateGroupDetailRequest(payload: IReportSearch): Observable<boolean> {\r\n    return this._dataService.post(`reports/state-group-detail`, payload);\r\n  }\r\n\r\n  saveStateCohortRequest(payload: IReportSearch): Observable<boolean> {\r\n    return this._dataService.post(`reports/state-cohort`, payload);\r\n  }\r\n\r\n  generateOSEPExceptionReport(payload: IStateOsepSearch) {\r\n    return this._dataService.postWithOptions(`reports/osep-exception`, payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: { Accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }\r\n    });  \r\n  }\r\n}\r\n","<div id=\"selectRating\" class=\"rounded-lg  modal-body\">\r\n  <div mat-dialog-title>\r\n    <h3>Viewing Students {{classroomName}}</h3>\r\n  </div>\r\n  <div class=\"mt-2 ml-2\" *ngIf=\"canSelectAll\">\r\n    <drdp-btn\r\n      color=\"outline\"\r\n      (click)=\"selectAllStudents()\"\r\n      additionalClasses=\"text-sm\"\r\n      >Select All</drdp-btn\r\n    >\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <drdp-container>\r\n      <div class=\"w-full\">\r\n        <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n                             (toggleSwitchActionItem)=\"onToggleSwitchActionItem($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n      <mat-paginator class=\"mb-12\" [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n                     (page)=\"paginate($event)\">\r\n      </mat-paginator>\r\n    </drdp-container>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <div class=\"flex justify-end align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn type=\"button\" (click)=\"selectStudents()\" [disabled]=\"!isStudentSelected()\">Select</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { AfterViewInit, Component, Inject, inject, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { take, tap } from 'rxjs';\r\nimport { IAllStudentsByPermissionRequest, IViewClassStudentsRequest } from '@core/interfaces/iclasses';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { IViewStudentByClassModalData } from '@views/user/reports';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\n\r\ninterface ViewStudentsByClassReportData {\r\n  isSelected: boolean;\r\n  firstName: string;\r\n  lastName: string;\r\n  class: string;\r\n  ratingPeriod: string;\r\n  classEnrollmentDate: Date;\r\n  classExitDate?: Date;\r\n  daysEnrolled: number;\r\n  isLocked: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'drdp-view-student-by-class-modal',\r\n  templateUrl: './view-student-by-class-modal.component.html',\r\n  styleUrls: ['./view-student-by-class-modal.component.scss']\r\n})\r\nexport class ViewStudentByClassModalComponent implements OnInit, AfterViewInit {\r\n  private selectedStudents: number[] = [];\r\n  agencyIds?: number[];\r\n  siteId?: number;\r\n  classId?: number;\r\n  globalRatingPeriodId?: number;\r\n  private readonly ageGradeInstrumentId: number;\r\n  private readonly ratingPeriod: string;\r\n  private readonly onlyLocked: boolean;\r\n  private readonly onlyActive: boolean;\r\n\r\n  canSelectAll: boolean;\r\n  classroomName?: string;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData!: ViewStudentsByClassReportData[];\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  totalData: number = 0;\r\n  pageSize: number = 10;\r\n  pageIndex: number = 1;\r\n  isSelectAll = false;\r\n  selectAllPagesSet: Set<number> = new Set<number>();\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'isSelected',\r\n      header: 'Select',\r\n      type: TableColumnType.checkBox,\r\n      checkClass: 'checkbox'\r\n    },\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'lastName',\r\n      header: 'Last Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'ageGradeInstrumentName',\r\n      header: 'Age Group',\r\n      type: TableColumnType.text,\r\n      isSortable: false\r\n    },\r\n    {\r\n      columnDef: 'class',\r\n      header: 'Class',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'ratingPeriod',\r\n      header: 'Rating Period',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'classEnrollmentDate',\r\n      header: 'Classroom Start Date',\r\n      type: TableColumnType.date,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'classExitDate',\r\n      header: 'Classroom End Date',\r\n      type: TableColumnType.date,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'daysEnrolled',\r\n      header: 'Days Enrolled',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'isLocked',\r\n      header: 'Is Locked',\r\n      type: TableColumnType.boolIcon,\r\n      truthyClass: 'text-drdpGreen-300',\r\n      truthyIconUrl: 'assets/images/misc/lock-alt.svg',\r\n      falsyClass: 'text-drdpgrey-200',\r\n      falsyIconUrl: 'assets/images/misc/padlock.svg',\r\n      isSortable: true\r\n    }\r\n  ];\r\n\r\n  classService: ClassService = inject(ClassService);\r\n  agencyService = inject(AgencyService);\r\n  authService = inject(AuthService);\r\n  permissionService = inject(PermissionService);\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n\r\n  constructor(public dialogRef: MatDialogRef<ViewStudentByClassModalComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public data: any) {\r\n    this.ageGradeInstrumentId = data.ageGradeInstrumentId;\r\n    this.ratingPeriod = data.ratingPeriod;\r\n    this.classroomName = data.classroomName ? `in ${data.classroomName}`  : '';\r\n    this.onlyLocked = data.onlyLocked;\r\n    this.onlyActive = data.onlyActive;\r\n    this.canSelectAll = data.canSelectAll ?? false;\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.preparePayload();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  isStudentSelected(): boolean {\r\n    return this.selectedStudents.length > 0\r\n  }\r\n\r\n  onToggleSwitchActionItem(event: any): void {\r\n    const studentIndex = this.selectedStudents.findIndex(cs => cs === event.data.id);\r\n    if (studentIndex === -1) {\r\n      this.selectedStudents.push(event.data.id);\r\n    } else {\r\n      this.selectedStudents.splice(studentIndex, 1);\r\n    }\r\n  }\r\n\r\n  paginate(event: PageEvent): void {\r\n    this.getClassStudents(event.pageSize, event.pageIndex + 1);\r\n  }\r\n\r\n  selectStudents(): void {\r\n    const selectedStudentIds = this.selectedStudents.map(cs => cs);\r\n    this.clearSelectedStudents();\r\n    this.dialogRef.close({ selectedStudentIds: selectedStudentIds });\r\n  }\r\n\r\n  selectAllStudents(): void {\r\n    if (this.selectAllPagesSet.has(this.paginator.pageIndex)) {\r\n      this.isSelectAll = false;\r\n      this.selectAllPagesSet.delete(this.paginator.pageIndex);\r\n    } else {\r\n      this.isSelectAll = true;\r\n    }\r\n\r\n    if (this.tableData) {\r\n      this.tableData.forEach((student: any) => {\r\n        student.isSelected = this.isSelectAll;\r\n      });\r\n\r\n      if (this.isSelectAll) {\r\n        this.tableData.forEach((student: any) => {\r\n          const index = this.selectedStudents.findIndex(\r\n            (s: any) => s === student.id\r\n          );\r\n          if (index === -1) {\r\n            this.selectedStudents.push(student.id);\r\n          }\r\n          this.selectAllPagesSet.add(this.paginator.pageIndex);\r\n        });\r\n      } else {\r\n        this.selectedStudents = this.selectedStudents.filter((student: any) =>\r\n          !this.tableData.some((tb: any) => tb.id == student)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  getLinkedAgencyIds(): any {\r\n    const user = this.authService.getCurrentUser();\r\n    this.agencyService.getLinkedAgencies(user.userId).pipe(take(1)).subscribe((res: IAgency[]) => {\r\n      if (res) {\r\n        this.agencyIds =  res?.map((s: any) => s.id);\r\n        this.getClassStudents(this.pageSize, this.pageIndex)\r\n      }\r\n    })\r\n  }\r\n\r\n  preparePayload() {\r\n    this.classId = this.data.classId;\r\n    this.siteId = this.data.siteId;\r\n    this.globalRatingPeriodId = this.data.globalRatingPeriodId;\r\n    if (this.data.agencyIds == null) {\r\n      this.getLinkedAgencyIds();\r\n      return;\r\n    }\r\n    if (this.data.agencyIds) this.agencyIds = [this.data.agencyIds];\r\n    this.getClassStudents(this.pageSize, this.pageIndex);\r\n  }\r\n\r\n  private clearSelectedStudents(): void {\r\n    this.selectedStudents = [];\r\n  };\r\n\r\n  private getClassStudents(pageSize: number, pageIndex: number): void {\r\n    let payload: IAllStudentsByPermissionRequest;\r\n    payload = {\r\n      ageGradeInstrumentId: this.ageGradeInstrumentId,\r\n      classId: this.classId, \r\n      onlyActive: this.onlyActive,\r\n      onlyLocked: this.onlyLocked,\r\n      pageIndex: pageIndex,\r\n      itemsPerPage: pageSize,\r\n      agencyIds: this.agencyIds,\r\n      globalRatingPeriodId: this.globalRatingPeriodId,\r\n      siteId: this.siteId\r\n    };\r\n\r\n    this.classService.getAllClassStudentsByPermissions(payload)\r\n    .pipe(\r\n      take(1),\r\n      tap((res: any) => {\r\n        if (res) {\r\n          res.items = res.items.map((data: any) => {\r\n            const studentIndex = this.selectedStudents.findIndex(cs => cs === data.id);\r\n            const daysEnrolledTicks = !!data.classExitDate\r\n              ? new Date(data.classExitDate).getTime() - new Date(data.classEnrollmentDate).getTime()\r\n              : (Date.now() - new Date(data.classEnrollmentDate).getTime());\r\n            return {\r\n              ...data,\r\n              isSelected: studentIndex !== -1,\r\n              class: data.classroomName,\r\n              ratingPeriod: this.ratingPeriod,\r\n              daysEnrolled: Math.round(daysEnrolledTicks / (1000 * 60 * 60 * 24)),\r\n              displayIcons: setIconDisplayObject(this.tableColumns, data),\r\n            }\r\n          })\r\n          this.dataSource = new MatTableDataSource(res.items);\r\n          this.tableData = res.items;\r\n          this.totalData = res.totalData;\r\n        }\r\n      })\r\n    )\r\n    .subscribe();\r\n  }\r\n}\r\n","<drdp-container additionClasses=\"w-full mt-4\">\r\n  <drdp-container color=\"lightBlue\">\r\n    <form [formGroup]=\"searchForm\">\r\n      <div\r\n        class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n        <div *ngIf=\"allAgenciesCheckbox\" class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n          <mat-checkbox color=\"primary\" (change)=\"handleGlobal()\"></mat-checkbox>\r\n          <label class=\"inline\">Search All Agencies</label>\r\n        </div>\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\" [required]=\"requiredFields!.state\"\r\n                             [clear]=\"clearDropdown\">\r\n          </drdp-select-state>\r\n        </div>\r\n        <div *ngIf=\"!isGlobalAgencies\" class=\"col-span-1 self-end\">\r\n          <drdp-select-agency #agencySelect (agency)=\"handleAgency($event)\" [stateId]=\"stateId.value\" \r\n            [initialAgencyId]=\"multiSelectAgencies ? null : agencyId.value\" [required]=\"requiredFields!.agency\" [clear]=\"clearDropdown\"\r\n            [multiSelect]=\"multiSelectAgencies\" [multiSelectInitVals]=\"multiSelectAgencies\">\r\n          </drdp-select-agency>\r\n        </div>\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-global-rating (ratingPeriod)=\"handleRatingPeriod($event)\" [multiSelect]=\"multiSelectRatingPeriods\"\r\n            [required]=\"requiredFields!.globalRatingPeriod\" [label]=\"ratingPeriodLabel\"\r\n            [clear]=\"clearDropdown\" [showAll]=\"showAllRatingPeriods\">\r\n          </drdp-select-global-rating>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\" *ngIf=\"displaySite\">\r\n          <drdp-select-site (site)=\"handleSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"multiSelectSites\"\r\n                            [multiSelectInitVals]=\"false\" [required]=\"requiredFields!.site\" [clear]=\"clearDropdown\">\r\n          </drdp-select-site>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\" *ngIf=\"displayClassroom\">\r\n          <drdp-filter-select label=\"Classroom\" [options]=\"classroomAssignments\" [selectType]=\"select.Class\"\r\n                              (onSelected)=\"handleClassroomAssignment($event)\" [multiSelect]=\"multiSelectClassrooms\"\r\n                              [required]=\"requiredFields!.classroom\">\r\n          </drdp-filter-select>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-age-grade label=\"Age Group\" [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n                                 (ageGrade)=\"handleAgeGroupInstrument($event)\" [stateId]=\"stateId.value\" [multiSelect]=\"false\"\r\n                                 [required]=\"requiredFields!.ageGroup\" [clear]=\"clearDropdown\" [isPilot]=\"isPilotClassroom\">\r\n          </drdp-select-age-grade>\r\n\r\n        </div>\r\n\r\n        <div *ngIf=\"hasSubfilters\" [ngClass]=\"displaySite && displayClassroom ? 'col-span-2' : 'col-span-1'\" class=\"self-end flex flex-col\">\r\n          <div>\r\n            <span class=\"font-bold\">Additional Filters</span>\r\n          </div>\r\n\r\n          <mat-radio-group aria-label=\"Select an option\" class=\"flex gap-3\" formControlName=\"additionalFilter\">\r\n            <mat-radio-button [value]=\"subFilter.None\" color=\"primary\">None</mat-radio-button>\r\n            <mat-radio-button [value]=\"subFilter.Subgroups\" color=\"primary\">Subgroups</mat-radio-button>\r\n          </mat-radio-group>\r\n        </div>\r\n      </div>\r\n      <div\r\n        *ngIf=\"additionalFilter.value == subFilter.Subgroups\"\r\n        class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center pb-6\">\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-date-picker\r\n              label=\"DOB Start Date\"\r\n              [initialDate]=\"dobStart.value\"\r\n              placeholder=\"Start Date\"\r\n              [isReadOnly]=\"false\"\r\n              (emitDate)=\"handleDobStart($event)\"\r\n            >\r\n            </drdp-date-picker>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-date-picker\r\n              label=\"DOB End Date\"\r\n              [initialDate]=\"dobEnd.value\"\r\n              placeholder=\"End Date\"\r\n              [isReadOnly]=\"false\"\r\n              (emitDate)=\"handleDobEnd($event)\"\r\n            >\r\n            </drdp-date-picker>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-gender\r\n              [stateId]=\"stateId.value\"\r\n              [initialGenderIds]=\"gender.value\"\r\n              (gender)=\"handleGender($event)\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              >\r\n\r\n          </drdp-select-gender>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-yes-no\r\n              label=\"Hispanic or Latino\"\r\n              [initialIds]=\"latino.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (optionSelected)=\"handleHispanic($event)\"\r\n            >\r\n          </drdp-select-yes-no>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-race\r\n              label=\"Race\"\r\n              [stateId]=\"stateId.value\"\r\n              [initialRaceIds]=\"race.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (race)=\"handleRace($event)\"\r\n            >\r\n          </drdp-select-race>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-yes-no\r\n              label=\"Free or Reduced Meals\"\r\n              [initialIds]=\"reducedLunch.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (optionSelected)=\"handleReducedLunch($event)\"\r\n            >\r\n          </drdp-select-yes-no>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-iep-plan\r\n              label=\"IEP Status\"\r\n              [initialIds]=\"iep.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (optionSelected)=\"handleIep($event)\"\r\n            >\r\n          </drdp-select-iep-plan>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-program-type\r\n              [ageGradeId]=\"ageGradeInstrumentId.value\"\r\n              [initialProgramTypeIds]=\"programType.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (programType)=\"handleProgramType($event)\"\r\n            >\r\n          </drdp-select-program-type>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-language\r\n              label=\"Child's Home Language\"\r\n              [initialLanguageIds]=\"language.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (language)=\"handleLanguage($event)\"\r\n            >\r\n          </drdp-select-language>\r\n\r\n        </div>\r\n\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-yes-no\r\n              label=\"Language other than English spoken at home\"\r\n              [initialIds]=\"eld.value\"\r\n              [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"true\"\r\n              [required]=\"false\"\r\n              (optionSelected)=\"handleEld($event)\"\r\n            >\r\n          </drdp-select-yes-no>\r\n\r\n        </div>\r\n      </div>\r\n      <div class=\"hidden lg:block lg:col-span-3 xl:col-span-3 self-end\"></div>\r\n      <div class=\"flex flex-row gap-1.5 justify-end lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n        <div class=\"col-span-1\">\r\n          <drdp-btn [disabled]=\"!searchForm.valid\" type=\"submit\">\r\n            <span class=\"px-2\" (click)=\"search()\">{{ showReportBtnText }}</span>\r\n          </drdp-btn>\r\n        </div>\r\n        <div *ngIf=\"displayDownload\" class=\"col-span-1\">\r\n          <drdp-btn *ngIf=\"showLocale\" type=\"button\" [disabled]=\"!searchForm.valid || isDownloadDisabled\"\r\n                    (click)=\"isDownloadMenuOpen = !isDownloadMenuOpen\"\r\n                    [matMenuTriggerFor]=\"(searchForm.valid && !isDownloadDisabled) ? reportMenu : null\">Download Report</drdp-btn>\r\n          <drdp-btn *ngIf=\"!showLocale\" type=\"button\" [disabled]=\"!searchForm.valid || isDownloadDisabled\"\r\n                    (click)=\"downloadReport('en')\">Download Report</drdp-btn>\r\n        </div>\r\n        <div *ngIf=\"displayClear\" class=\"col-span-1\">\r\n          <drdp-btn color=\"outline\" (click)=\"clear()\">Clear</drdp-btn>\r\n        </div>\r\n        <mat-menu #reportMenu=\"matMenu\" [overlapTrigger]=\"false\" [hasBackdrop]=\"false\" (closed)=\"isDownloadMenuOpen = false\">\r\n          <div>\r\n            <drdp-btn additionalClasses=\"mt-2\" (click)=\"downloadReport('en')\">English</drdp-btn>\r\n          </div>\r\n          <div>\r\n            <drdp-btn additionalClasses=\"mt-2\" (click)=\"downloadReport('es')\">Spanish</drdp-btn>\r\n          </div>\r\n        </mat-menu>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n</drdp-container>\r\n","import { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { of, Subject, Subscription, switchMap, take } from 'rxjs';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { IReportSearch, IViewStudentByClassModalData, ViewStudentByClassModalComponent } from '@views/user/reports';\r\nimport { AdditionalFilters } from '@core/enums/additional-filters';\r\nimport { ILanguage } from '@core/interfaces/ilanguage';\r\nimport { IEthnicity } from '@core/interfaces/iethnicity';\r\nimport { IAgeGradeEnrollmentProgramFilter } from '@core/interfaces/iage-grade-instrument';\r\nimport { IGender } from '@core/interfaces/igender';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n@Component({\r\n  selector: 'drdp-report-search',\r\n  templateUrl: './report-search.component.html',\r\n  styleUrls: ['./report-search.component.scss']\r\n})\r\nexport class ReportSearchComponent implements OnInit, OnDestroy {\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  private selectedClassroomAssignments: IClassroomAssignment[] = [];\r\n  private selectedRatingPeriods: IRatingPeriod | IRatingPeriod[] | null = null;\r\n  private schoolYearId: number | undefined = undefined;\r\n  private ratingPeriodName: string | undefined = undefined;\r\n\r\n  private classroomParamsSubject = new Subject<void>();\r\n  private classroomParams$ = this.classroomParamsSubject.asObservable();\r\n  private subscription: Subscription | null = null;\r\n\r\n  @Input() displaySite: boolean = true;\r\n  @Input() displayClassroom: boolean = true;\r\n  @Input() multiSelectAgencies: boolean = false;\r\n  @Input() allAgenciesCheckbox: boolean = false;\r\n  @Input() multiSelectSites: boolean = false;\r\n  @Input() multiSelectClassrooms: boolean = false;\r\n  @Input() multiSelectRatingPeriods: boolean = false;\r\n  @Input() showAllRatingPeriods: boolean = true;\r\n  @Input() ratingPeriodLabel: string = 'Rating Period';\r\n  @Input() isDownloadDisabled: boolean = false;\r\n  @Input() displayDownload: boolean = true;\r\n  @Input() displayClear: boolean = true;\r\n  @Input() showReportBtnText: string = 'Show Report';\r\n  @Input() showLocale: boolean = false;\r\n  @Input() showStudentSelect: boolean = false;\r\n  @Input() hasSubfilters: boolean = false;\r\n  @Input() onlyLocked: boolean = false;\r\n  @Input() onlyActive: boolean = false;\r\n  @Input() canSelectAll: boolean = false;\r\n  @Input() includePilot: boolean = false;\r\n  @Input() requiredFields?: IRequiredReportFields = {\r\n    state: true,\r\n    agency: true,\r\n    globalRatingPeriod: true,\r\n    site: true,\r\n    classroom: true,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false,\r\n    requireRpInSameSchoolYear: true\r\n  };\r\n  @Output() showReportClicked: EventEmitter<IReportSearch> = new EventEmitter<IReportSearch>();\r\n  @Output() downloadReportClicked: EventEmitter<IReportSearch> = new EventEmitter<IReportSearch>();\r\n  @Output() clearClicked: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n\r\n  get agencyIds() {\r\n    return this.searchForm.get('agencyIds');\r\n  }\r\n\r\n  get siteIds() {\r\n    return this.searchForm.get('siteIds');\r\n  }\r\n\r\n  get globalRatingPeriodIds() {\r\n    return this.searchForm.get('globalRatingPeriodIds');\r\n  }\r\n\r\n  get classIds() {\r\n    return this.searchForm.get('classIds');\r\n  }\r\n\r\n  get ageGradeInstrumentId() {\r\n    return this.searchForm.get('ageGradeInstrumentId');\r\n  }\r\n\r\n  get additionalFilter() {\r\n    return this.searchForm.get('additionalFilter');\r\n  }\r\n\r\n  get dobStart() {\r\n    return this.searchForm.get('dobStart');\r\n  }\r\n\r\n  get dobEnd() {\r\n    return this.searchForm.get('dobEnd');\r\n  }\r\n\r\n  get gender() {\r\n    return this.searchForm.get('gender');\r\n  }\r\n\r\n  get latino() {\r\n    return this.searchForm.get('latino');\r\n  }\r\n\r\n  get race() {\r\n    return this.searchForm.get('race');\r\n  }\r\n\r\n  get reducedLunch() {\r\n    return this.searchForm.get('reducedLunch');\r\n  }\r\n\r\n  get iep() {\r\n    return this.searchForm.get('iep');\r\n  }\r\n\r\n  get programType() {\r\n    return this.searchForm.get('programType');\r\n  }\r\n\r\n  get language() {\r\n    return this.searchForm.get('language');\r\n  }\r\n\r\n  get eld() {\r\n    return this.searchForm.get('eld');\r\n  }\r\n\r\n  public get subFilter() {\r\n    return AdditionalFilters;\r\n  }\r\n\r\n\r\n  auth = inject(AuthService);\r\n  fb = inject(FormBuilder);\r\n  ratingPeriodService = inject(RatingPeriodService);\r\n  lookup = inject(LookupService);\r\n  classService = inject(ClassService);\r\n  toastService = inject(ToastService);\r\n  modal = inject(MatDialog);\r\n  ref = inject(ChangeDetectorRef);\r\n\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  searchForm: FormGroup | any;\r\n  classroomAssignments: IClassroomAssignment[] = [];\r\n  clearDropdown: boolean = false;\r\n  select = SelectType;\r\n  isDownloadMenuOpen: boolean = false;\r\n  isPilotClassroom: boolean = false;\r\n  isGlobalAgencies: boolean = false;\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  constructor(private permissionService: PermissionService, private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n    if (this.displayClassroom) this.initializeClassroom();\r\n  }\r\n\r\n  initializeClassroom() {\r\n    this.subscription =\r\n      this.classroomParams$.pipe(\r\n        switchMap(() => {\r\n          this.classIds.setValue(null);\r\n          this.classroomAssignments = [];\r\n          const payload: any = {};\r\n          payload.siteIds = this.siteIds.value ?? null;\r\n          if (this.multiSelectRatingPeriods) {\r\n            payload.globalRatingPeriodIds = this.globalRatingPeriodIds.value ?? null;\r\n          } else {\r\n            payload.globalRatingPeriodIds = this.globalRatingPeriodIds.value ? [this.globalRatingPeriodIds.value[0]] : [];\r\n          }\r\n          payload.useClassId = true;\r\n          if (payload.siteIds?.length > 0 && (payload.globalRatingPeriodIds > 0 || payload.globalRatingPeriodIds?.length > 0)) {\r\n            return this.classService\r\n              .getClassesBySitesAndGlobalRatingPeriods(payload)\r\n          } else {\r\n            return of([]);\r\n          }\r\n        })\r\n      ).subscribe((res: any) => {\r\n        this.classroomAssignments = res.filter(\r\n          (value: any, index: any, self: any) =>\r\n            index === self.findIndex((t: any) => t.classroomId === value.classroomId) &&\r\n            (this.includePilot || !value.isPilot)\r\n        );\r\n      });\r\n  }\r\n\r\n  handleState(state: IState | null) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n    this.agencyIds.setValue(null);\r\n    this.ageGradeInstrumentId.setValue(null);\r\n  }\r\n\r\n  handleAgency(agencies: IAgency | IAgency[] | null): void {\r\n    if (!!agencies && !('length' in (agencies))) {\r\n      this.agencyId.setValue(agencies.id);\r\n    } else {\r\n      const selectedAgencyIds = !!agencies && agencies?.length > 0 ? agencies?.map((c: { id: number }) => c.id) : null;\r\n      this.agencyIds.setValue(selectedAgencyIds);\r\n    }\r\n\r\n    this.classIds.setValue(null);\r\n    this.classroomAssignments = [];\r\n    this.selectedClassroomAssignments = [];\r\n  }\r\n\r\n  handleRatingPeriod(event: IRatingPeriod | IRatingPeriod[] | null): void {\r\n    this.selectedRatingPeriods = null;\r\n    if (!!event && !('length' in (event))) {\r\n      this.selectedRatingPeriods = [event];\r\n    } else if (!!event) {\r\n      this.selectedRatingPeriods = event;\r\n    }\r\n    const selectedRatingPeriodIds = !!this.selectedRatingPeriods && this.selectedRatingPeriods?.length > 0 ? this.selectedRatingPeriods?.map(ca => ca.id) : null;\r\n    this.globalRatingPeriodIds.setValue(selectedRatingPeriodIds);\r\n\r\n    if (this.selectedRatingPeriods && this.selectedRatingPeriods.length > 0) {\r\n      this.ratingPeriodName = this.selectedRatingPeriods[0].ratingPeriodName;\r\n      this.schoolYearId = this.selectedRatingPeriods[0].schoolYearId;\r\n    }\r\n\r\n    this.classroomParamsSubject.next();\r\n    // this.updateClassroomAssignmentDropdown();\r\n  }\r\n\r\n  handleSite(sites: ISites | ISites[] | null): void {\r\n    if (!!sites && !('length' in (sites))) {\r\n      sites = [sites];\r\n    }\r\n    const selectedSiteIds = !!sites && sites?.length > 0 ? sites?.map((c: { id: number }) => c.id) : null;\r\n    this.siteIds.setValue(selectedSiteIds);\r\n    this.classroomParamsSubject.next();\r\n    // this.updateClassroomAssignmentDropdown();\r\n  }\r\n\r\n  handleClassroomAssignment(event: ISelectable | ISelectable[] | null): void {\r\n    let selectedClassrooms: ISelectable[] | null = null;\r\n    if (!!event && !('length' in (event))) {\r\n      selectedClassrooms = [event];\r\n    } else if (!!event) {\r\n      selectedClassrooms = event;\r\n    }\r\n\r\n    const selectedClassIds = !!selectedClassrooms && selectedClassrooms?.length > 0 ? selectedClassrooms?.map(ca => ca.id) : null;\r\n    this.classIds.setValue(selectedClassIds);\r\n    this.selectedClassroomAssignments = !!selectedClassrooms\r\n      ? this.classroomAssignments\r\n        .filter(ca => selectedClassrooms?.find(sc => sc.id === ca.classId))\r\n      : [] as IClassroomAssignment[];\r\n    \r\n    if (this.includePilot && this.selectedClassroomAssignments.length > 0) \r\n      this.isPilotClassroom = this.selectedClassroomAssignments.some(ca => ca.isPilot);\r\n  }\r\n\r\n  handleAgeGroupInstrument(ageGroupInstrument: any): void {\r\n    this.ageGradeInstrumentId.setValue(ageGroupInstrument?.id);\r\n  }\r\n\r\n  handleDobStart(event: any): void {\r\n    this.dobStart.setValue(event);\r\n  }\r\n\r\n  handleDobEnd(event: any): void {\r\n    this.dobEnd.setValue(event);\r\n  }\r\n\r\n  handleGender(event: any): void {\r\n    this.gender.setValue(event?.map((gender: IGender) => gender.id));\r\n  }\r\n\r\n  handleHispanic(event: any): void {\r\n    this.latino.setValue(event?.map((option: any) => option.id));\r\n  }\r\n\r\n  handleRace(event: any): void {\r\n    this.race.setValue(event?.map((race: IEthnicity) => race.id));\r\n  }\r\n\r\n  handleReducedLunch(event: any): void {\r\n    this.reducedLunch.setValue(event?.map((option: any) => option.id));\r\n  }\r\n\r\n  handleIep(event: any): void {\r\n    this.iep.setValue(event?.map((option: any) => option.id));\r\n  }\r\n\r\n  handleProgramType(event: any): void {\r\n    this.programType.setValue(event?.map((programs: IAgeGradeEnrollmentProgramFilter) => programs.id));\r\n  }\r\n\r\n  handleLanguage(event: any): void {\r\n    this.language.setValue(event?.map((language: ILanguage) => language.id));\r\n  }\r\n\r\n  handleEld(event: any): void {\r\n    this.eld.setValue(event?.map((option: any) => option.id));\r\n  }\r\n\r\n  search() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    if (Array.isArray(this.selectedRatingPeriods)) {\r\n      if (this.requiredFields?.requireMultipleRatingPeriods && this.selectedRatingPeriods.length < 2) {\r\n        this.toastService.error('At least two (2) selected rating periods is required to run the report.');\r\n        return;\r\n      }\r\n      if (new Set(this.selectedRatingPeriods.map(term => term.schoolYearId)).size !== 1 && this.requiredFields?.requireRpInSameSchoolYear) {\r\n        this.toastService.error('Rating Periods selected should be in the same school year.');\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.showReportClicked.emit({\r\n      ...this.searchForm.value,\r\n      classroomIds: this.selectedClassroomAssignments.map(ca => ca.classroomId),\r\n      schoolYearId: this.schoolYearId\r\n    } as IReportSearch);\r\n  }\r\n\r\n  downloadReport(locale: string) {\r\n    if (!this.showStudentSelect) {\r\n      this.downloadReportClicked.emit({\r\n        ...this.searchForm.value,\r\n        locale: locale,\r\n        classroomIds: this.selectedClassroomAssignments.map(ca => ca.classroomId),\r\n        schoolYearId: this.schoolYearId,\r\n        printPdf: true\r\n      } as IReportSearch);\r\n      return;\r\n    }\r\n\r\n    let classId = this.classIds.value ? this.classIds.value[0] : null;\r\n    let classroomName = null;\r\n    if (classId != null) {\r\n      classroomName = this.classroomAssignments.find(assignment => assignment.classId === classId)?.classroomName;\r\n    }\r\n\r\n\r\n    const viewStudentByClassModalData: IViewStudentByClassModalData = {\r\n      classId: this.classIds.value ? this.classIds.value[0] : null,\r\n      classroomName: classroomName,\r\n      ratingPeriod: this.ratingPeriodName ?? '',\r\n      ageGradeInstrumentId: this.ageGradeInstrumentId.value,\r\n      onlyLocked: this.onlyLocked,\r\n      onlyActive: this.onlyActive,\r\n      canSelectAll: this.canSelectAll,\r\n      agencyIds: this.agencyId.value ?? null,\r\n      siteId: this.siteIds.value ? this.siteIds.value[0] : null,\r\n      globalRatingPeriodId: this.globalRatingPeriodIds.value[0]\r\n    };\r\n    const modalRef = this.modal.open(ViewStudentByClassModalComponent, { data: viewStudentByClassModalData });\r\n    modalRef.afterClosed().subscribe(res => {\r\n      if (!res || res.selectedStudentIds.length <= 0) {\r\n        return;\r\n      }\r\n\r\n      this.downloadReportClicked.emit({\r\n        ...this.searchForm.value,\r\n        locale: locale,\r\n        classroomIds: this.selectedClassroomAssignments.map(ca => ca.classroomId),\r\n        studentIds: res.selectedStudentIds,\r\n        schoolYearId: this.schoolYearId,\r\n        printPdf: true\r\n      } as IReportSearch);\r\n    });\r\n  }\r\n\r\n  clear(): void {\r\n    this.clearDropdown = true;\r\n    this.searchForm.reset();\r\n    this.searchForm.patchValue({\r\n        stateId: this.user.stateId,\r\n        agencyId: this.user.agencyId ?? null,\r\n        agencyIds: [this.user.agencyId ?? null],\r\n        additionalFilter: AdditionalFilters.None\r\n    });\r\n    if (!this.stateSelect?.disabled) this.stateId.setValue(null);\r\n    if (!this.agencySelect?.disabled) this.agencyId.setValue(null);\r\n    this.selectedClassroomAssignments = [];\r\n    this.classroomAssignments = [];\r\n    this.schoolYearId = undefined;\r\n    this.clearClicked.emit();\r\n  }\r\n\r\n  handleGlobal(): void {\r\n    this.isGlobalAgencies = !this.isGlobalAgencies;\r\n    this.agencyId.setValue(null);\r\n    this.agencyIds.setValue(null);\r\n  }\r\n\r\n  private initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: new FormControl<number | null>(null, this.requiredFields?.state ? Validators.required : null),\r\n      agencyId: new FormControl<number | null>(null, this.requiredFields?.agency && !this.multiSelectAgencies ? Validators.required : null),\r\n      agencyIds: new FormControl<number[] | null>(null, this.requiredFields?.agency && this.multiSelectAgencies ? Validators.required : null),\r\n      globalRatingPeriodIds: new FormControl<number[] | null>(null, this.requiredFields?.globalRatingPeriod ? Validators.required : null),\r\n      siteIds: new FormControl<number[] | null>(null, this.requiredFields?.site ? Validators.required : null),\r\n      classIds: new FormControl<number[] | null>(null, this.requiredFields?.classroom ? Validators.required : null),\r\n      ageGradeInstrumentId: new FormControl<number | null>(null, this.requiredFields?.ageGroup ? Validators.required : null),\r\n      additionalFilter: new FormControl<number | null>(null),\r\n      dobStart: new FormControl<string | null>(null),\r\n      dobEnd: new FormControl<string | null>(null),\r\n      gender: new FormControl<number[] | null>([]),\r\n      latino: new FormControl<string[] | null>([]),\r\n      race: new FormControl<number[] | null>([]),\r\n      reducedLunch: new FormControl<string[] | null>([]),\r\n      iep: new FormControl<string[] | null>([]),\r\n      programType: new FormControl<number[] | null>([]),\r\n      language: new FormControl<number[] | null>([]),\r\n      eld: new FormControl<string[] | null>([]),\r\n    });\r\n\r\n    this.searchForm.patchValue({\r\n      stateId: this.user.stateId,\r\n      agencyId: this.user.agencyId,\r\n      agencyIds: [this.user.agencyId],\r\n      additionalFilter: AdditionalFilters.None\r\n    });\r\n\r\n    this.additionalFilter.valueChanges.subscribe((val: AdditionalFilters) => {\r\n      if (val == AdditionalFilters.None) {\r\n        this.searchForm.patchValue({\r\n          dobStart: null,\r\n          dobEnd: null,\r\n          gender: null,\r\n          latino: null,\r\n          race: null,\r\n          reducedLunch: null,\r\n          iep: null,\r\n          programType: null,\r\n          language: null,\r\n          eld: null\r\n        });\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  private updateClassroomAssignmentDropdown(): void {\r\n    this.classIds.setValue(null);\r\n    this.classroomAssignments = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteIds.value ?? null;\r\n    if (this.multiSelectRatingPeriods) {\r\n      payload.ratingPeriodIds = this.globalRatingPeriodIds.value ?? null;\r\n    } else {\r\n      payload.ratingPeriodId = this.globalRatingPeriodIds.value[0] ?? 0;\r\n    }\r\n    payload.useClassId = true;\r\n\r\n    if (payload.siteIds?.length > 0 && (payload.ratingPeriodId > 0 || payload.ratingPeriodIds?.length > 0)) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomAssignments = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.classroomId === value.classroomId)\r\n          );\r\n        });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscription) {\r\n      this.subscription.unsubscribe();\r\n    }\r\n  }\r\n}\r\n","import { inject, Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n  name: 'safeHtml'\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n  private sanitizer = inject(DomSanitizer);\r\n\r\n  transform(value: string): unknown {\r\n    return this.sanitizer.bypassSecurityTrustHtml(value);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Parent Progress Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select a rating period and classroom to generate a report for all the children in the classroom.\r\n        The report will include scaled scores for these children in all rating periods in the current year.\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"false\"\r\n                      [multiSelectSites]=\"false\"\r\n                      [showLocale]=\"true\"\r\n                      [showStudentSelect]=\"true\"\r\n                      [onlyLocked]=\"true\"\r\n                      [canSelectAll]=\"true\"\r\n                      [requiredFields]=\"requiredFields\"\r\n                      (showReportClicked)=\"showReport($event)\"\r\n                      (downloadReportClicked)=\"downloadReport($event)\"\r\n                      (clearClicked)=\"handleClear()\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { take } from 'rxjs';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { IReportSearch } from '@views/user/reports';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\n\r\n@Component({\r\n  selector: 'drdp-parent-progress',\r\n  templateUrl: './parent-progress.component.html',\r\n  styleUrls: ['./parent-progress.component.scss']\r\n})\r\nexport class ParentProgressComponent implements OnInit {\r\n  private reportService = inject(ReportService);\r\n  private permissionService = inject(PermissionService);\r\n  reportData:  string | undefined;\r\n  loading: boolean = false;\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: !this.hasAccessToAssignedChildren,\r\n    globalRatingPeriod: true,\r\n    site: !this.hasAccessToAssignedChildren,\r\n    classroom: !this.hasAccessToAssignedChildren,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false\r\n  }\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateParentProgressReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateParentProgressReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `parent_progress_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Class Planning Report\"></drdp-title>\r\n    <p>\r\n      This report allows users to select a rating period and classroom to generate a report for all the children in the classroom. \r\n      The report will include scaled scores and measure ratings for children, one rating period at a time.\r\n    </p>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"false\" \r\n                      [multiSelectSites]=\"false\" \r\n                      [onlyLocked]=\"false\" \r\n                      [onlyActive]=\"true\" \r\n                      [showLocale]=\"false\"\r\n                      [showStudentSelect]=\"true\" \r\n                      [canSelectAll]=\"true\"\r\n                      (showReportClicked)=\"showReport($event)\" \r\n                      (downloadReportClicked)=\"downloadReport($event)\"\r\n                      (clearClicked)=\"handleClear()\"\r\n                      [includePilot]=\"true\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>","import { Component, inject, OnInit } from '@angular/core';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { IReportSearch } from '@views/user/reports';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-class-planning',\r\n  templateUrl: './class-planning.component.html',\r\n  styleUrls: ['./class-planning.component.scss'],\r\n})\r\nexport class ClassPlanningComponent implements OnInit {\r\n  private reportService = inject(ReportService);\r\n\r\n  reportData: string | undefined;\r\n  loading: boolean = false;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateClassPlanningReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        },\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateClassPlanningReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `class_planning_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        },\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Group Detail Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select rating period and age group to create your cohort/group. (Site, Cohort Classroom(s), and additional\r\n        filters are optional.) Any rating options other than developmental levels, will not be calculated in the report\r\n        and will affect the number of children reflected. All classes are automatically included based on the sites\r\n        selected. To select a subset of classes, click on the appropriate classes in the Classes drop down menu. Only\r\n        choose specific classes if you do not want “all classes.” The report will show all domain scaled scores for the\r\n        selected group within the current year (to date).\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"true\" [multiSelectSites]=\"true\" [hasSubfilters]=\"true\"\r\n    (showReportClicked)=\"showReport($event)\" (downloadReportClicked)=\"downloadReport($event)\"\r\n    (clearClicked)=\"handleClear()\" [requiredFields]=\"requiredFields\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\nimport { take } from 'rxjs';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-group-detail',\r\n  templateUrl: './group-detail.component.html',\r\n  styleUrls: ['./group-detail.component.scss']\r\n})\r\nexport class GroupDetailComponent implements OnInit {\r\n  private reportService = inject(ReportService);\r\n  private permissionService = inject(PermissionService);\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  reportData:  string | undefined;\r\n  loading: boolean = false;\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: !this.hasAccessToAssignedChildren,\r\n    globalRatingPeriod: true,\r\n    site: false,\r\n    classroom: false,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false\r\n  }\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateGroupDetailReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateGroupDetailReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `group_detail_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Cohort Progress Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select at least two (2) rating periods and age group to create your cohort/group report. Site, Cohort Classroom(s), and additional filters are optional. All classes are automatically included based on the sites selected. To select a subset of classes, click on the appropriate classes in the drop down menu. The report will show all domain scaled scores for the selected group within the current year (to date).\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"true\" [multiSelectSites]=\"true\" [hasSubfilters]=\"true\" [multiSelectRatingPeriods]=\"true\"\r\n    (showReportClicked)=\"showReport($event)\" (downloadReportClicked)=\"downloadReport($event)\"\r\n    (clearClicked)=\"handleClear()\" [requiredFields]=\"requiredFields\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-cohort-progress',\r\n  templateUrl: './cohort-progress.component.html',\r\n  styleUrls: ['./cohort-progress.component.scss']\r\n})\r\nexport class CohortProgressComponent implements OnInit {\r\n  private reportService = inject(ReportService);\r\n  private permissionService = inject(PermissionService);\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  reportData:  string | undefined;\r\n  loading: boolean = false;\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: !this.hasAccessToAssignedChildren,\r\n    globalRatingPeriod: true,\r\n    site: false,\r\n    classroom: false,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: true\r\n  }\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateCohortProgressReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateCohortProgressReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `cohort_progress_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Child Progress Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select a rating period and classroom to generate a report for all the children in the classroom.\r\n        The report will include scaled scores for these children in all rating periods in the current year.\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"false\"\r\n                      [multiSelectSites]=\"false\"\r\n                      [showLocale]=\"true\"\r\n                      [showStudentSelect]=\"true\"\r\n                      [onlyLocked]=\"true\"\r\n                      [canSelectAll]=\"true\"\r\n                      (showReportClicked)=\"showReport($event)\"\r\n                      (downloadReportClicked)=\"downloadReport($event)\"\r\n                      [requiredFields]=\"requiredFields\"\r\n                      (clearClicked)=\"handleClear()\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { IReportSearch } from '@views/user/reports';\r\nimport { take } from 'rxjs';\r\n\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\n\r\n@Component({\r\n  selector: 'drdp-child-progress',\r\n  templateUrl: './child-progress.component.html',\r\n  styleUrls: ['./child-progress.component.scss']\r\n})\r\nexport class ChildProgressComponent implements OnInit {\r\n  private reportService = inject(ReportService);\r\n  private permissionService = inject(PermissionService);\r\n  reportData:  string | undefined;\r\n  loading: boolean = false;\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: !this.hasAccessToAssignedChildren,\r\n    globalRatingPeriod: true,\r\n    site: !this.hasAccessToAssignedChildren,\r\n    classroom: !this.hasAccessToAssignedChildren,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false\r\n  }\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateChildProgressReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateChildProgressReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `child_progress_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Group Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select rating periods and age group to create a group report (additional filters are optional). Any rating options other than developmental levels, will not be calculated in the report and will affect the number of children reflected. All classes are automatically included based on the sites selected. To select a subset of classes, click on the appropriate classes in the Classes drop down menu.\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [multiSelectClassrooms]=\"true\" [multiSelectSites]=\"true\" [hasSubfilters]=\"true\" [multiSelectRatingPeriods]=\"true\"\r\n    (showReportClicked)=\"showReport($event)\" (downloadReportClicked)=\"downloadReport($event)\"\r\n    (clearClicked)=\"handleClear()\" [requiredFields]=\"requiredFields\"></drdp-report-search>\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n</div>\r\n\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\n@Component({\r\n  selector: 'drdp-group',\r\n  templateUrl: './group.component.html',\r\n  styleUrls: ['./group.component.scss']\r\n})\r\nexport class GroupComponent implements OnInit {\r\n\r\n  private reportService = inject(ReportService);\r\n\r\n  reportData:  string | undefined;\r\n  loading: boolean = false;\r\n  hasAccessToAssignedChildren = this.permissionService.checkPermission(\r\n    Permission.AccessToAssignedChildrenReporting\r\n  );\r\n  currentSchoolYear: number | undefined;\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: !this.hasAccessToAssignedChildren,\r\n    globalRatingPeriod: true,\r\n    site: !this.hasAccessToAssignedChildren,\r\n    classroom: !this.hasAccessToAssignedChildren,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false\r\n  }\r\n  constructor(private permissionService: PermissionService, private lookupService: LookupService) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n  showReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n\r\n    this.reportService\r\n      .generateGroupReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  downloadReport(searchValues: IReportSearch) {\r\n    this.loading = true;\r\n    this.reportService\r\n      .generateGroupReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `group_report`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        }\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.reportData = undefined;\r\n  }\r\n}\r\n","import { AfterViewInit, Component, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { take } from 'rxjs';\r\nimport { ITableColumn } from '@core/interfaces/itable';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { Router } from '@angular/router';\r\nimport { IRatingCompletionChildrenResponseDto, IRatingCompletionChildrenSearch } from '../interfaces/irating-completion-search';\r\n\r\n@Component({\r\n    selector: 'drdp-view-children-modal',\r\n    templateUrl: './view-children-modal.component.html',\r\n    styleUrls: ['./view-children-modal.component.scss']\r\n  })\r\n  export class ViewChildrenModalComponent implements OnInit, AfterViewInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  classroomName?: string;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  totalData: number = 0;\r\n  pageSize: number = 10;\r\n  pageIndex: number = 0;\r\n  payload: IRatingCompletionChildrenSearch = {};\r\n  tableColumns: ITableColumn[] = [\r\n    {\r\n      columnDef: 'firstName',\r\n      header: 'First Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'lastName',\r\n      header: 'Last Name',\r\n      type: TableColumnType.text,\r\n      isSortable: true\r\n    },\r\n    {\r\n      columnDef: 'viewChild',\r\n      header: 'View Child',\r\n      icon: 'file',\r\n      type: TableColumnType.icon,\r\n      colorClass: 'text-drdpblue-300',\r\n      cursorClass: 'cursor-pointer',\r\n    }\r\n  ];\r\n\r\n\r\n  constructor(public dialogRef: MatDialogRef<ViewChildrenModalComponent>,\r\n    private reportService: ReportService, private router: Router,\r\n    @Inject(MAT_DIALOG_DATA) public data: any) {}\r\n\r\n  ngOnInit(): void {\r\n    this.classroomName = this.data.classroomName;\r\n    this.payload.classroomId = this.data.classroomId;\r\n    this.payload.globalRatingPeriodId = this.data.globalRatingPeriodId;\r\n    this.paginate(true);\r\n  }\r\n\r\n  getStudents(): void {\r\n    this.reportService\r\n      .getRatingCompletionChildren(this.payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          res.items = res.items.map((data: IRatingCompletionChildrenResponseDto[]) => ({\r\n            ...data,\r\n            displayIcons: setIconDisplayObject(this.tableColumns, data)\r\n          }));\r\n\r\n          this.dataSource = new MatTableDataSource(res.items);\r\n          this.tableData = res.items;\r\n          this.totalData = res.totalData;\r\n        }\r\n      });\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    this.router.navigateByUrl(`view-child/${event?.data?.studentId}`);\r\n    this.dialogRef.close();\r\n  }\r\n\r\n  paginate(resetPage?: boolean): void {\r\n    this.payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    this.payload.itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n    this.getStudents();\r\n  }\r\n\r\n}\r\n","<div class=\"rounded-lg  modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{'Viewing Students in ' + (classroomName ?? '(Classroom Name Not Found)')}}</h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n  <div class=\"w-full\">\r\n    <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\"\r\n      [columns]=\"tableColumns\" (iconActionItem)=\"onIconClick($event)\">\r\n    </drdp-add-edit-table>\r\n  </div>\r\n  <mat-paginator class=\"mb-12\" [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginate(false)\">\r\n  </mat-paginator>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <div class=\"flex justify-end align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-dialog-close>Cancel</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Rating Completion Report\"></drdp-title>\r\n  </div>\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\">\r\n        <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-x-8 gap-y-4\" [formGroup]=\"ratingCompletionSearch\"\r\n          (ngSubmit)=\"handleSearch()\">\r\n          <div *ngIf=\"hasAccessToPilot\" class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n            <mat-checkbox color=\"primary\" (change)=\"handleGlobal()\" formControlName=\"isAllPilot\">\r\n            </mat-checkbox>\r\n            <label class=\"inline\">\r\n              All Pilot\r\n            </label>\r\n          </div>\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleDropdown($event, selectType.States)\"\r\n              [clear]=\"clearDropdowns\" [required]=\"true\">\r\n            </drdp-select-state>\r\n          </div>\r\n\r\n          <div *ngIf=\"!isAllPilot.value\" class=\"col-span-1 my-auto\">\r\n            <drdp-select-agency #agencySelect [initialAgencyId]=\"agencyId.value\" (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n              [stateId]=\"stateId.value\" [clear]=\"clearDropdowns\" [required]=\"true\">\r\n            </drdp-select-agency>\r\n          </div>\r\n\r\n          <div *ngIf=\"!isAllPilot.value\" class=\"col-span-1 my-auto\">\r\n            <drdp-select-site [initialSiteIds]=\"siteIds.value\" (site)=\"handleDropdown($event, selectType.Sites)\" [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearDropdowns\" [required]=\"true\">\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-global-rating (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\" [required]=\"true\" \r\n              [initialRatingPeriodId]=\"globalRatingPeriodId.value\" [showPilotRps]=\"isAllPilot.value\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-global-rating>\r\n          </div>\r\n          <div *ngIf=\"!isAllPilot.value\" class=\"col-span-1 self-end\">\r\n            <drdp-select-class (classroom)=\"handleDropdown($event, selectType.Class)\" [initialClassroomIds]=\"classroomIds.value\" [siteIds]=\"siteIds.value\"\r\n              [globalRatingPeriodId]=\"globalRatingPeriodId.value\" [clear]=\"clearDropdowns\" [required]=\"true\" [useClassroomId]=\"true\">\r\n            </drdp-select-class>\r\n          </div>\r\n          <div class=\"lg:col-span-2 flex flex-row md:flex-col-1 gap-5 lg:flex-row lg:justify-start lg:items-end\">\r\n            <div class=\"mb-0 md:mb-2 lg:mb-0\">\r\n              <drdp-btn type=\"submit\" [disabled]=\"ratingCompletionSearch.invalid\" class=\"lg:mr-2\">Search</drdp-btn>\r\n            </div>\r\n            <div>\r\n              <drdp-btn color=\"outline\" type=\"button\" (click)=\"onClear()\">Clear</drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\"\r\n        viewIcon=\"uil uil-file text-drdpblue-300\"\r\n        (iconActionItem)=\"onIconClick($event)\"\r\n      >\r\n      </drdp-add-edit-table>\r\n      <div>\r\n        <mat-paginator\r\n          [pageSizeOptions]=\"pageSizeOptions\"\r\n          [pageSize]=\"pageSize\"\r\n          [length]=\"totalData\"\r\n          [pageIndex]=\"pageIndex\"\r\n          (page)=\"paginateTable(false)\">\r\n        </mat-paginator>\r\n      </div>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { take } from 'rxjs';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { ViewChildrenModalComponent } from '../view-children-modal/view-children-modal.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { IRatingCompletionReportDto, IRatingCompletionSearch } from '../interfaces/irating-completion-search';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { IPaginatedResponse } from '@core/interfaces/ipaginated-response';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n@Component({\r\n  selector: 'drdp-rating-completion',\r\n  templateUrl: './rating-completion.component.html',\r\n  styleUrls: ['./rating-completion.component.scss']\r\n})\r\n\r\nexport class RatingCompletionComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  user = this.authService.getCurrentUser();\r\n  ratingCompletionSearch: FormGroup | any;\r\n  clearDropdowns: boolean = false;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  modal = inject(MatDialog);\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  payload: IRatingCompletionSearch = {\r\n    itemsPerPage: this.pageSize,\r\n    pageIndex: this.pageIndex\r\n  }\r\n  hasAccessToPilot = this.permissionService.checkPermission(\r\n    Permission.All2025Pilot\r\n  );\r\n  tableColumns = [\r\n    { columnDef: 'agencyName', header: 'Agency', type: TableColumnType.text },\r\n    { columnDef: 'siteName', header: 'Site', type: TableColumnType.text },\r\n    { columnDef: 'classroomName', header: 'Class', type: TableColumnType.text },\r\n    { columnDef: 'children', header: 'Total Children', type: TableColumnType.text },\r\n    { columnDef: 'avgPctMeasuresCompleted', header: 'Avg % of measures completed by child', type: TableColumnType.text },\r\n    { columnDef: 'pctChildrenCompleted', header: '% of children completed', type: TableColumnType.text },\r\n    { columnDef: 'pctChildrenLocked', header: '% children locked', type: TableColumnType.text },\r\n    {\r\n      columnDef: 'preview',\r\n      header: 'View',\r\n      icon: 'eye',\r\n      type: TableColumnType.icon,\r\n      colorClass: 'text-drdpblue-300',\r\n      cursorClass: 'cursor-pointer' }\r\n  ];\r\n  get globalRatingPeriodId() { return this.ratingCompletionSearch.get('globalRatingPeriodId'); }\r\n  get classroomIds() { return this.ratingCompletionSearch.get('classroomIds'); }\r\n  get siteIds() { return this.ratingCompletionSearch.get('siteIds'); }\r\n  get stateId() { return this.ratingCompletionSearch.get('stateId'); }\r\n  get agencyId() { return this.ratingCompletionSearch.get('agencyId'); }\r\n  get isAllPilot() { return this.ratingCompletionSearch.get('isAllPilot'); }\r\n  public get selectType() { return SelectType; }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private fb: FormBuilder,\r\n    private reportService: ReportService,\r\n    private permissionService: PermissionService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  onIconClick(event: any): void {\r\n    event.data.globalRatingPeriodId = this.globalRatingPeriodId.value;\r\n    const modalRef = this.modal.open(ViewChildrenModalComponent, {\r\n      data: event.data ?? undefined,\r\n      autoFocus: false\r\n    });\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n  handleSearch(): void {\r\n    this.payload = this.ratingCompletionSearch.value;\r\n    if (!this.isAllPilot.value) {\r\n      this.payload.siteIds = this.siteIds.value.toString();\r\n      this.payload.classroomIds = this.classroomIds.value.toString();\r\n    }\r\n    this.payload.itemsPerPage = this.pageSize;\r\n    this.payload.pageIndex = this.pageIndex;\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  paginateTable(resetPage?: boolean): void {\r\n    this.payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    this.payload.itemsPerPage = resetPage ? 10 : this.paginator.pageSize;\r\n    this.reportService.generateRatingCompletionReport(this.payload).pipe(take(1)).subscribe((res: IPaginatedResponse) => {\r\n      res.items = res.items.map((data: IRatingCompletionReportDto[]) => ({\r\n        ...data,\r\n        displayIcons: setIconDisplayObject(this.tableColumns, data)\r\n      }))\r\n\t  this.setData(res);\r\n\t})\r\n  }\r\n\r\n  setData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.items);\r\n\t  this.tableData = res.items;\r\n    this.totalData = res.totalData;\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.ratingCompletionSearch = this.fb.group({\r\n      stateId: [null, Validators.required],\r\n      agencyId: [null, Validators.required],\r\n      siteIds: [null, Validators.required],\r\n      classroomIds: [null, Validators.required],\r\n      globalRatingPeriodId: [null, Validators.required],\r\n      isAllPilot: [false, Validators.required]\r\n    });\r\n\r\n    this.ratingCompletionSearch.patchValue({\r\n        stateId: this.authService.getUserStateId(),\r\n        agencyId: this.authService.getCurrentUser().agencyId ?? null,\r\n    });\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyId.setValue(null);\r\n        this.siteIds.setValue(null);\r\n        this.globalRatingPeriodId.setValue(null);\r\n        this.classroomIds.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        this.siteIds.setValue(null);\r\n        break;\r\n      case SelectType.Sites:\r\n        const siteIds = event?.map((sites: any) => sites.id);\r\n        this.siteIds.setValue(siteIds);\r\n        this.classroomIds.setValue(null);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        this.globalRatingPeriodId.setValue(event?.id);\r\n        this.classroomIds.setValue(null);\r\n        break;\r\n      case SelectType.Class:\r\n        const classroomIds = event?.map((classroom: any) => classroom.id);\r\n        this.classroomIds.setValue(classroomIds);\r\n        break;\r\n    }\r\n  }\r\n\r\n  onClear(): void {\r\n    this.clearDropdowns = true;\r\n    this.ratingCompletionSearch.reset();\r\n  }\r\n\r\n  handleGlobal(): void {\r\n    if (this.isAllPilot.value) {\r\n      this.resetFieldsAndValidators();\r\n    } else {\r\n      this.agencyId.setValue(this.authService.getCurrentUser().agencyId);\r\n      this.setRequiredValidators();\r\n    }\r\n    this.updateFieldValidity();\r\n  }\r\n\r\n  resetFieldsAndValidators() {\r\n    this.globalRatingPeriodId.setValue(null);\r\n    this.agencyId.setValue(null);\r\n    this.siteIds.setValue(null);\r\n    this.classroomIds.setValue(null);\r\n    this.agencyId.setValidators([]);\r\n    this.siteIds.setValidators([]);\r\n    this.classroomIds.setValidators([]);\r\n  }\r\n  \r\n  setRequiredValidators() {\r\n    this.agencyId.setValidators([Validators.required]);\r\n    this.siteIds.setValidators([Validators.required]);\r\n    this.classroomIds.setValidators([Validators.required]);\r\n  }\r\n  \r\n  updateFieldValidity() {\r\n    this.agencyId.updateValueAndValidity();\r\n    this.siteIds.updateValueAndValidity();\r\n    this.classroomIds.updateValueAndValidity();\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { take, pipe } from 'rxjs';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IReportAction, IReportType } from '@core/interfaces/ireport-type';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\n\r\n@Component({\r\n  selector: 'drdp-report-usage',\r\n  templateUrl: './report-usage.component.html',\r\n  styleUrls: ['./report-usage.component.scss']\r\n})\r\n\r\nexport class ReportUsageComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  ratingCompletionSearch: FormGroup | any;\r\n  clearDropdowns: boolean = false;\r\n  allAgencies: boolean = false;\r\n  btnClass: string = 'lg:col-span-3';\r\n\r\n  get reportTypeIds() { return this.ratingCompletionSearch.get('reportTypeIds'); }\r\n  get stateId() { return this.ratingCompletionSearch.get('stateId'); }\r\n  get schoolYearId() { return this.ratingCompletionSearch.get('schoolYearId'); }\r\n  get agencyId() { return this.ratingCompletionSearch.get('agencyId'); }\r\n  get globalRatingPeriodIds() { return this.ratingCompletionSearch.get('globalRatingPeriodIds'); }\r\n  get ageGradeInstrumentIds() { return this.ratingCompletionSearch.get('ageGradeInstrumentIds'); }\r\n  get reportActionIds() { return this.ratingCompletionSearch.get('reportActionIds'); }\r\n  public get selectType() { return SelectType; }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private fb: FormBuilder,\r\n    private reportService: ReportService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.ratingCompletionSearch = this.fb.group({\r\n      reportTypeIds: [null, Validators.required],\r\n      stateId: [this.authService.getUserStateId(), Validators.required],\r\n      agencyId: [this.authService.getCurrentUser().agencyId ?? null],\r\n      globalRatingPeriodIds: [null],\r\n      schoolYearId: [null],\r\n      ageGradeInstrumentIds: [null],\r\n      reportActionIds: [null]\r\n    });\r\n  }\r\n\r\n  handleDownload(): void {\r\n    let payload = this.ratingCompletionSearch.value;\r\n    this.reportService.getReportUsage(payload).pipe(take(1)).subscribe((res: any) => {\r\n        const file = new Blob([res], { type: 'text/csv' });\r\n        const fileUrl = URL.createObjectURL(file);\r\n        const link = document.createElement('a');\r\n        link.href = fileUrl;\r\n        let fileName = 'ReportUsage';\r\n        link.download = `${fileName.replace(/ /g, '_')}.csv`;\r\n        link.click();\r\n    });\r\n  }\r\n  \r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.ReportType:\r\n        let reportTypeIds = event?.map((reportType: IReportType) => reportType.id)\r\n        this.reportTypeIds.setValue(reportTypeIds.toString());\r\n        break;\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyId.setValue(null);\r\n        this.globalRatingPeriodIds.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        let ratingPeriodIds =  this.agencyId.value \r\n          ? event?.map((ratingPeriod: any) => ratingPeriod.globalRatingPeriodId)\r\n          : event?.map((globalRatingPeriod: any) => globalRatingPeriod.id);\r\n        this.globalRatingPeriodIds.setValue(ratingPeriodIds.length === 0 ? null : ratingPeriodIds.toString());\r\n        break;\r\n    case SelectType.SchoolYear:\r\n        this.schoolYearId.setValue(event?.id);\r\n        break;\r\n    case SelectType.AgeInstrument:\r\n        let ageGradeInstrumentIds = event?.map((ageInstrument: IAgeGradeInstrument) => ageInstrument.id);\r\n        this.ageGradeInstrumentIds.setValue(ageGradeInstrumentIds.length === 0 ? null : ageGradeInstrumentIds.toString());\r\n        break;\r\n    case SelectType.ReportAction:\r\n        let reportActionIds = event?.map((reportAction: IReportAction) => reportAction.id);\r\n        this.reportActionIds.setValue(reportActionIds.length === 0 ? null : reportActionIds.toString());\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleGlobal(): void {\r\n    this.allAgencies = !this.allAgencies;\r\n    this.btnClass = this.allAgencies ? 'lg:col-span-4' :'lg:col-span-3';\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n}\r\n","<drdp-container additionClasses=\"mb-4\">\r\n  <div class=\"w-full\">\r\n    <h1 class=\"text-xl font-semibold my-2\">Report Usage</h1>\r\n    <drdp-container color=\"lightBlue\" additionClasses=\"p-6\">\r\n      <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-2 my-auto\" [formGroup]=\"ratingCompletionSearch\"\r\n        (ngSubmit)=\"handleDownload()\">\r\n        <div class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n          <label>\r\n            <mat-checkbox color=\"primary\" (change)=\"handleGlobal()\">\r\n            </mat-checkbox>\r\n            Search All Agencies\r\n          </label>\r\n        </div>\r\n\r\n        <drdp-select-report-type #reportTypeSelect (onSelected)=\"handleDropdown($event, selectType.ReportType)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"true\" [isReportTracking]=\"true\">\r\n        </drdp-select-report-type>\r\n\r\n        <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleDropdown($event, selectType.States)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"true\">\r\n        </drdp-select-state>\r\n\r\n        <drdp-select-school-year #schoolYearSelect (schoolYear)=\"handleDropdown($event, selectType.SchoolYear)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"false\" [currentSchoolYear]=\"true\">\r\n        </drdp-select-school-year>\r\n\r\n        <drdp-select-agency #agencySelect [hidden]=\"allAgencies\" [stateId]=\"stateId.value\"\r\n          [required]=\"false\" [initialAgencyId]=\"agencyId.value\" [clear]=\"clearDropdowns\" (agency)=\"handleDropdown($event, selectType.Agencies)\">\r\n        </drdp-select-agency>\r\n\r\n        <drdp-select-rating-period (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n          [clear]=\"clearDropdowns\" [schoolYear]=\"schoolYearId.value\" [multiSelect]=\"true\" [agencyId]=\"agencyId.value\">\r\n        </drdp-select-rating-period>\r\n\r\n        <drdp-select-age-grade #ageGroupInstrumentSelect (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n          [stateId]=\"stateId.value\" [multiSelect]=\"true\" [clear]=\"clearDropdowns\">\r\n        </drdp-select-age-grade>\r\n\r\n        <drdp-select-report-action #reportActionSelect (onSelected)=\"handleDropdown($event, selectType.ReportAction)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"false\">\r\n        </drdp-select-report-action>\r\n\r\n        <div [ngClass]=\"btnClass\" class=\"flex flex-row md:flex-col-2 gap-5 items-end lg:flex-row justify-end\">\r\n          <div class=\"mb-0 md:mb-2 lg:mb-0\">\r\n            <drdp-btn type=\"submit\" class=\"lg:mr-2\" [disabled]=\"!ratingCompletionSearch.valid\">\r\n              Download Report Usage\r\n            </drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </div>\r\n</drdp-container>\r\n\r\n\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { take } from 'rxjs';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { IAgencyRatingReviewsRequest } from '../../interfaces/iadmin-report-tracking';\r\n\r\n@Component({\r\n  selector: 'drdp-agency-rating-views',\r\n  templateUrl: './agency-rating-views.component.html',\r\n  styleUrls: ['./agency-rating-views.component.scss']\r\n})\r\n\r\nexport class AgencyRatingViewsComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  agencyRatingViewsSearch: FormGroup | any;\r\n  clearDropdowns: boolean = false;\r\n  allAgencies: boolean = false;\r\n  btnClass: string = 'lg:col-span-1';\r\n\r\n  get stateId() { return this.agencyRatingViewsSearch.get('stateId'); }\r\n  get agencyId() { return this.agencyRatingViewsSearch.get('agencyId'); }\r\n  get ageGradeInstrumentIds() { return this.agencyRatingViewsSearch.get('ageGradeInstrumentIds'); }\r\n  get isCustomView() { return this.agencyRatingViewsSearch.get('isCustomView'); }\r\n  public get selectType() { return SelectType; }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private fb: FormBuilder,\r\n    private reportService: ReportService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.agencyRatingViewsSearch = this.fb.group({\r\n      stateId: [this.authService.getUserStateId(), Validators.required],\r\n      agencyId: [this.user.agencyId ?? null],\r\n      ageGradeInstrumentIds: [null, Validators.required],\r\n      isCustomView: [null, Validators.required]\r\n    });\r\n  }\r\n\r\n  handleDownload(): void {\r\n    let payload: IAgencyRatingReviewsRequest = this.agencyRatingViewsSearch.value;\r\n    this.reportService.getAgencyRatingViews(payload).pipe(take(1)).subscribe((res: any) => {\r\n      const fileName = 'AgencyRatingViews.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyId.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case SelectType.AgeInstrument:\r\n        let ageGradeInstrumentIds = event?.map((ageInstrument: IAgeGradeInstrument) => ageInstrument.id);\r\n        this.ageGradeInstrumentIds.setValue(ageGradeInstrumentIds.toString());\r\n        break;\r\n      case SelectType.YesNo:\r\n        this.isCustomView.setValue(event?.id);\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleGlobal(): void {\r\n    this.allAgencies = !this.allAgencies;\r\n    this.btnClass = this.allAgencies ? 'lg:col-span-2 items-end' : 'lg:col-span-1';\r\n    this.agencyId.setValue(this.allAgencies ? null : this.user.agencyId ?? null);\r\n  }\r\n\r\n}\r\n","<drdp-container additionClasses=\"mb-4\">\r\n  <div class=\"w-full\">\r\n    <h1 class=\"text-xl font-semibold my-2\">Agency Rating Views</h1>\r\n    <drdp-container color=\"lightBlue\" additionClasses=\"p-6\">\r\n      <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-2 my-auto\" [formGroup]=\"agencyRatingViewsSearch\"\r\n        (ngSubmit)=\"handleDownload()\">\r\n        <div class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n          <label>\r\n            <mat-checkbox color=\"primary\" (change)=\"handleGlobal()\">\r\n            </mat-checkbox>\r\n            Search All Agencies\r\n          </label>\r\n        </div>\r\n\r\n        <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleDropdown($event, selectType.States)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"true\">\r\n        </drdp-select-state>\r\n\r\n        <drdp-select-agency #agencySelect [hidden]=\"allAgencies\" [stateId]=\"stateId.value\"\r\n          [required]=\"false\" [initialAgencyId]=\"agencyId.value\" [clear]=\"clearDropdowns\" (agency)=\"handleDropdown($event, selectType.Agencies)\">\r\n        </drdp-select-agency>\r\n\r\n        <drdp-select-age-grade #ageGroupInstrumentSelect (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n          [stateId]=\"stateId.value\" [multiSelect]=\"true\" [clear]=\"clearDropdowns\" [required]=\"true\">\r\n        </drdp-select-age-grade>\r\n\r\n        <drdp-select-yes-no #yesNoSelect label=\"Custom View\" (optionSelected)=\"handleDropdown($event, selectType.YesNo)\" [clear]=\"clearDropdowns\" [required]=\"true\">\r\n        </drdp-select-yes-no>\r\n\r\n        <div [ngClass]=\"btnClass\" class=\"flex items-end justify-end  md:col-span-2\">\r\n          <div class=\" mb-0 md:mb-2 lg:mb-0\">\r\n            <drdp-btn type=\"submit\" class=\"lg:mr-2\"\r\n            [disabled]=\"!agencyRatingViewsSearch.valid\">\r\n              Download Agency Rating Views\r\n            </drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </div>\r\n</drdp-container>\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { IChildRatingsRequest } from '../../interfaces/iadmin-report-tracking';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-child-ratings',\r\n  templateUrl: './child-ratings.component.html',\r\n  styleUrls: ['./child-ratings.component.scss']\r\n})\r\nexport class ChildRatingsComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  childRatingsSearch: FormGroup | any;\r\n  clearDropdowns: boolean = false;\r\n  allAgencies: boolean = false;\r\n  btnClass: string = 'lg:col-span-1';\r\n  selectType = SelectType;\r\n  startingSchoolYear = '2019'\r\n\r\n  get stateId() { return this.childRatingsSearch.get('stateId'); }\r\n  get agencyIds() { return this.childRatingsSearch.get('agencyIds'); }\r\n  get schoolYearId() { return this.childRatingsSearch.get('schoolYearId'); }\r\n  get globalRatingPeriodId() { return this.childRatingsSearch.get('globalRatingPeriodId'); }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private fb: FormBuilder,\r\n    private reportService: ReportService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.childRatingsSearch = this.fb.group({\r\n      stateId: [this.authService.getUserStateId(), Validators.required],\r\n      agencyIds: [this.authService.getCurrentUser().agencyId ?? null],\r\n      schoolYearId: [null],\r\n      globalRatingPeriodId: [null]\r\n    });\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyIds.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyIds.setValue(event?.id);\r\n        break;\r\n      case SelectType.SchoolYear:\r\n        this.schoolYearId.setValue(event?.id);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        this.globalRatingPeriodId.setValue(event?.id.toString());\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDownload(): void {\r\n    let payload: IChildRatingsRequest = this.childRatingsSearch.value;\r\n    this.reportService.getChildRatings(payload).pipe(take(1)).subscribe((res: any) => {\r\n      const fileName = 'ChildRatings.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n\r\n\r\n  handleGlobal(): void {\r\n    this.allAgencies = !this.allAgencies;\r\n    this.btnClass = this.allAgencies ? 'lg:col-span-2 items-end' : 'lg:col-span-1';\r\n    this.agencyIds.setValue(this.allAgencies ? null : this.user.agencyId ?? null);\r\n  }\r\n}\r\n","<drdp-container additionClasses=\"mb-4\">\r\n  <div class=\"w-full\">\r\n    <h1 class=\"text-xl font-semibold my-2\">Child Ratings</h1>\r\n    <drdp-container color=\"lightBlue\" additionClasses=\"p-6\">\r\n      <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-2 my-auto\" [formGroup]=\"childRatingsSearch\"\r\n        (ngSubmit)=\"handleDownload()\">\r\n        <div class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n          <label>\r\n            <mat-checkbox color=\"primary\" (change)=\"handleGlobal()\">\r\n            </mat-checkbox>\r\n            Search All Agencies\r\n          </label>\r\n        </div>\r\n\r\n        <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleDropdown($event, selectType.States)\"\r\n          [clear]=\"clearDropdowns\" [required]=\"true\">\r\n        </drdp-select-state>\r\n\r\n        <drdp-select-agency #agencySelect [hidden]=\"allAgencies\" [stateId]=\"stateId.value\" [initialAgencyId]=\"agencyIds.value\"\r\n          [required]=\"true\" [clear]=\"clearDropdowns\" (agency)=\"handleDropdown($event, selectType.Agencies)\">\r\n        </drdp-select-agency>\r\n\r\n        <drdp-select-school-year #schoolYearSelect (schoolYear)=\"handleDropdown($event, selectType.SchoolYear)\"\r\n          [clear]=\"clearDropdowns\" [startingSchoolYear]=\"startingSchoolYear\" [required]=\"true\">\r\n        </drdp-select-school-year>\r\n\r\n        <drdp-select-global-rating (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n          [clear]=\"clearDropdowns\" [schoolYearId]=\"schoolYearId.value\">\r\n        </drdp-select-global-rating>\r\n\r\n        <div [ngClass]=\"btnClass\" class=\"flex items-end justify-end  md:col-span-2\">\r\n          <div class=\" mb-0 md:mb-2 lg:mb-0\">\r\n            <drdp-btn type=\"submit\" class=\"lg:mr-2\"\r\n              [disabled]=\"!childRatingsSearch.valid\">\r\n              Download Child Ratings\r\n            </drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </div>\r\n</drdp-container>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { take, pipe } from 'rxjs';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IReportAction, IReportType } from '@core/interfaces/ireport-type';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\n\r\n@Component({\r\n  selector: 'drdp-report-tracking',\r\n  templateUrl: './report-tracking.component.html',\r\n  styleUrls: ['./report-tracking.component.scss']\r\n})\r\n\r\nexport class ReportTrackingComponent implements OnInit {\r\n  user = this.authService.getCurrentUser();\r\n  ratingCompletionSearch: FormGroup | any;\r\n  clearDropdowns: boolean = false;\r\n  allAgencies: boolean = false;\r\n  btnClass: string = 'lg:col-span-3';\r\n\r\n  get reportTypeIds() { return this.ratingCompletionSearch.get('reportTypeIds'); }\r\n  get stateId() { return this.ratingCompletionSearch.get('stateId'); }\r\n  get schoolYearId() { return this.ratingCompletionSearch.get('schoolYearId'); }\r\n  get agencyId() { return this.ratingCompletionSearch.get('agencyId'); }\r\n  get globalRatingPeriodIds() { return this.ratingCompletionSearch.get('globalRatingPeriodIds'); }\r\n  get ageGradeInstrumentIds() { return this.ratingCompletionSearch.get('ageGradeInstrumentIds'); }\r\n  get reportActionIds() { return this.ratingCompletionSearch.get('reportActionIds'); }\r\n  public get selectType() { return SelectType; }\r\n\r\n  constructor(\r\n    private authService: AuthService,\r\n    private fb: FormBuilder,\r\n    private reportService: ReportService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  handleDownload(): void {\r\n    let payload = this.ratingCompletionSearch.value;\r\n    this.reportService.getReportUsage(payload).pipe(take(1)).subscribe((res: any) => {\r\n        const file = new Blob([res], { type: 'text/csv' });\r\n        const fileUrl = URL.createObjectURL(file);\r\n        const link = document.createElement('a');\r\n        link.href = fileUrl;\r\n        let fileName = 'ReportUsage';\r\n        link.download = `${fileName.replace(/ /g, '_')}.csv`;\r\n        link.click();\r\n    });\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.ratingCompletionSearch = this.fb.group({\r\n      reportTypeIds: [null, Validators.required],\r\n      stateId: [this.authService.getUserStateId(), Validators.required],\r\n      agencyId: [this.authService.getCurrentUser().agencyId ?? null],\r\n      globalRatingPeriodIds: [null],\r\n      schoolYearId: [null],\r\n      ageGradeInstrumentIds: [null],\r\n      reportActionIds: [null]\r\n    });\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.ReportType:\r\n        let reportTypeIds = event?.map((reportType: IReportType) => reportType.id)\r\n        this.reportTypeIds.setValue(reportTypeIds.toString());\r\n        break;\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        this.agencyId.setValue(null);\r\n        this.globalRatingPeriodIds.setValue(null);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        let ratingPeriodIds = event?.map((ratingPeriod: any) => this.allAgencies ? ratingPeriod.id : ratingPeriod.globalRatingPeriodId);\r\n        this.globalRatingPeriodIds.setValue(ratingPeriodIds.toString());\r\n        break;\r\n    case SelectType.SchoolYear:\r\n        this.schoolYearId.setValue(event?.id);\r\n        break;\r\n    case SelectType.AgeInstrument:\r\n        let ageGradeInstrumentIds = event?.map((ageInstrument: IAgeGradeInstrument) => ageInstrument.id);\r\n        this.ageGradeInstrumentIds.setValue(ageGradeInstrumentIds.toString());\r\n        break;\r\n    case SelectType.ReportAction:\r\n        let reportActionIds = event?.map((reportAction: IReportAction) => reportAction.id);\r\n        this.reportActionIds.setValue(reportActionIds.toString());\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleGlobal(): void {\r\n    this.allAgencies = !this.allAgencies;\r\n    this.btnClass = this.allAgencies ? 'lg:col-span-4' :'lg:col-span-3';\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Admin Report Tracking\"></drdp-title>\r\n  </div>\r\n  <drdp-report-usage></drdp-report-usage>\r\n  <drdp-agency-rating-views></drdp-agency-rating-views>\r\n  <drdp-child-ratings></drdp-child-ratings>\r\n</div>\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"District OSEP Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        OSEP Federally Mandated Year-End Report. Preschool Education Outcomes. Please select the required fields below\r\n        to view or download.\r\n      </p>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full mt-4\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\">\r\n        <div class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 md:gap-3 flex-row content-center mb-4\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\"\r\n              [required]=\"true\" [clear]=\"clearDropdown\">\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-agency #agencySelect (agency)=\"handleAgency($event)\" [stateId]=\"stateId.value\"\r\n              [initialAgencyId]=\"agencyId.value\" [required]=\"true\" [clear]=\"clearDropdown\">\r\n            </drdp-select-agency>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-school-year #schoolYearSelect (schoolYear)=\"handleSchoolYear($event)\" [clear]=\"clearDropdown\"\r\n              [required]=\"true\">\r\n            </drdp-select-school-year>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-site (site)=\"handleSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"true\"\r\n              [multiSelectInitVals]=\"false\" [required]=\"true\" [clear]=\"clearDropdown\">\r\n            </drdp-select-site>\r\n          </div>\r\n        </div>\r\n        <div class=\"flex flex-row gap-1.5 justify-end lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-4 md:mt-0\">\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn [disabled]=\"!searchForm.valid\" type=\"submit\">\r\n              <span class=\"px-2\" (click)=\"showReport()\">Show Report</span>\r\n            </drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn type=\"button\" [disabled]=\"!searchForm.valid\" (click)=\"downloadReport()\">Download Report</drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn color=\"outline\" (click)=\"handleClear()\">Clear</drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </drdp-container>\r\n\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n\r\n  <!-- End of report -->\r\n</div> <!-- End of entire component -->\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  OnInit,\r\n  ViewChild,\r\n  inject,\r\n} from '@angular/core';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport {\r\n  FormBuilder,\r\n  FormControl,\r\n  FormGroup,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { take } from 'rxjs';\r\nimport Chart from 'chart.js/auto';\r\nimport { States } from '@core/enums/states';\r\n@Component({\r\n  selector: 'app-district-osep',\r\n  templateUrl: './district-osep.component.html',\r\n  styleUrls: ['./district-osep.component.css'],\r\n})\r\nexport class DistrictOsepComponent implements OnInit {\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  loading = false;\r\n  reportData: string | undefined;\r\n  reportService = inject(ReportService);\r\n  auth = inject(AuthService);\r\n  fb = inject(FormBuilder);\r\n  toastService = inject(ToastService);\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  searchForm: FormGroup | any;\r\n  clearDropdown: boolean = false;\r\n  chartInstances:any[]= [];\r\n\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n\r\n  get siteIds() {\r\n    return this.searchForm.get('siteIds');\r\n  }\r\n\r\n  get schoolYearId() {\r\n    return this.searchForm.get('schoolYearId');\r\n  }\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit() {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: new FormControl<number | null>(\r\n        this.initStateId,\r\n        Validators.required\r\n      ),\r\n      agencyId: new FormControl<number | null>(\r\n        this.initAgencyId,\r\n        Validators.required\r\n      ),\r\n      schoolYearId: new FormControl<number | null>(null, Validators.required),\r\n      siteIds: new FormControl<number[] | null>(null, Validators.required),\r\n    });\r\n  }\r\n\r\n  handleState(state: IState | null) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleAgency(agency: IAgency | null): void {\r\n    this.agencyId.setValue(agency?.id);\r\n  }\r\n\r\n  handleSchoolYear(schoolYear: ISchoolYear | null): void {\r\n    this.schoolYearId.setValue(schoolYear?.id);\r\n  }\r\n\r\n  handleSite(sites: ISites | ISites[] | null): void {\r\n    if (!!sites && !('length' in sites)) {\r\n      sites = [sites];\r\n    }\r\n    const selectedSiteIds =\r\n      !!sites && sites?.length > 0\r\n        ? sites?.map((c: { id: number }) => c.id)\r\n        : null;\r\n    this.siteIds.setValue(selectedSiteIds);\r\n  }\r\n\r\n  showReport() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('Only supported for New Hampshire state.');\r\n      this.reportData = undefined;\r\n      return;\r\n    }\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n    searchValues.printPdf = false;\r\n    this.reportService\r\n      .generateDistrictOsepReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          if (res) {\r\n            this.reportData = res.reportData;\r\n            setTimeout(() => {\r\n              res.outcomes.forEach((outcome: any) => {\r\n                this.createBarChart(outcome.categoryChartName, outcome.barCount, outcome.outcomeCategoryTotal);\r\n              });\r\n              const barContainers = document.querySelectorAll('.bar-container');\r\n              barContainers.forEach((element: any) => {\r\n                element.style.height = '100%';\r\n                element.style.position = 'relative';\r\n              });\r\n            }, 1000);\r\n        }\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        },\r\n      });\r\n  }\r\n\r\n  createBarChart(id: string, chartData: any, maxCount: number) {\r\n    const chartElement = document.getElementById(id) as HTMLCanvasElement;\r\n    if (chartElement === null) return;\r\n    const ctx: CanvasRenderingContext2D | null = chartElement?.getContext('2d');\r\n    if (ctx === null) return;\r\n\r\n    const existingChartIndex = this.chartInstances.findIndex(chart => chart.canvas === chartElement);\r\n    if (existingChartIndex !== -1) {\r\n      this.chartInstances[existingChartIndex].destroy();\r\n      this.chartInstances.splice(existingChartIndex, 1);\r\n    }\r\n\r\n    const refChart = new Chart(ctx, {\r\n      type: 'bar',\r\n      data: {\r\n        labels: ['A', 'B', 'C', 'D', 'E'],\r\n        datasets: [\r\n          {\r\n            label: '',\r\n            data: chartData,\r\n            backgroundColor: 'black',\r\n          },\r\n        ],\r\n      },\r\n      options: {\r\n        maintainAspectRatio: false,\r\n        responsive: true,\r\n        plugins: {\r\n          legend: {\r\n            display: false,\r\n          },\r\n        },\r\n        scales: {\r\n          y: {\r\n            ticks: {\r\n              stepSize: 1,\r\n            },\r\n            suggestedMax: maxCount,\r\n          },\r\n        },\r\n      },\r\n    });\r\n\r\n    // Store the new chart instance for later destruction\r\n    if (!this.chartInstances) {\r\n      this.chartInstances = [];\r\n    }\r\n    this.chartInstances.push(refChart);\r\n  }\r\n\r\n  downloadReport() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('OSEP Data is for NH State only.');\r\n      this.reportData = undefined;\r\n      return;\r\n    }\r\n    this.loading = true;\r\n    searchValues.printPdf = true;\r\n    this.reportService\r\n      .generateDistrictOsepReportPdf(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          const file = new Blob([res], { type: 'application/pdf' });\r\n          const fileUrl = URL.createObjectURL(file);\r\n          const link = document.createElement('a');\r\n          link.href = fileUrl;\r\n          let fileName = `district_osep`;\r\n          link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n          link.click();\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        },\r\n      });\r\n  }\r\n\r\n  handleClear(): void {\r\n    this.clearDropdown = true;\r\n    this.reportData = undefined;\r\n    this.searchForm.reset();\r\n    this.searchForm.patchValue({\r\n      stateId: this.user.stateId,\r\n      agencyId: this.user.agencyId ?? null,\r\n    });\r\n    if (!this.stateSelect?.disabled) this.stateId.setValue(null);\r\n    if (!this.agencySelect?.disabled) this.agencyId.setValue(null);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"State OSEP Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        OSEP Federally Mandated Year-End Report. State Summary and District Data Detail Export can be viewed or\r\n        downloaded below.\r\n      </p>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full mt-4\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\">\r\n        <div class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 md:gap-3 flex-row content-center mb-4\">\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\"\r\n              [required]=\"true\" [clear]=\"clearDropdown\">\r\n            </drdp-select-state>\r\n          </div>\r\n          <div class=\"col-span-1 self-end\">\r\n            <drdp-select-school-year #schoolYearSelect (schoolYear)=\"handleSchoolYear($event)\" [clear]=\"clearDropdown\"\r\n              [required]=\"true\">\r\n            </drdp-select-school-year>\r\n          </div>\r\n\r\n        </div>\r\n        <div class=\"flex flex-row gap-1.5 justify-end lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-4 md:mt-0\">\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn [disabled]=\"!searchForm.valid\" type=\"submit\">\r\n              <span class=\"px-2\" (click)=\"showReport()\">Show Summary Report</span>\r\n            </drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn type=\"button\" [disabled]=\"!searchForm.valid\" (click)=\"downloadReport()\">Download Summary\r\n              Report</drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn type=\"button\" [disabled]=\"!searchForm.valid\" (click)=\"downloadDetailReport()\">Download State\r\n              Detail</drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn color=\"outline\" (click)=\"handleClear()\">Clear</drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </drdp-container>\r\n\r\n  <div *ngIf=\"!!reportData\" [innerHtml]=\"reportData! | safeHtml\"></div>\r\n\r\n</div>\r\n","import { Component, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { take } from 'rxjs';\r\nimport Chart from 'chart.js/auto';\r\nimport { States } from '@core/enums/states';\r\n@Component({\r\n  selector: 'app-state-osep',\r\n  templateUrl: './state-osep.component.html',\r\n  styleUrls: ['./state-osep.component.css']\r\n})\r\nexport class StateOsepComponent implements OnInit {\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent| undefined;\r\n  loading = false;\r\n  reportData:  string | undefined;\r\n  reportService = inject(ReportService);\r\n  auth = inject(AuthService);\r\n  fb = inject(FormBuilder);\r\n  toastService = inject(ToastService);\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  searchForm: FormGroup | any;\r\n  clearDropdown: boolean = false;\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n\r\n  get schoolYearId() {\r\n    return this.searchForm.get('schoolYearId');\r\n  }\r\n  constructor() { }\r\n\r\n  ngOnInit() {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: new FormControl<number | null>(this.initStateId, Validators.required),\r\n      schoolYearId: new FormControl<number | null>(null, Validators.required),\r\n    });\r\n  }\r\n\r\n  handleState(state: IState | null) {\r\n    this.stateId.setValue(state?.id);\r\n  }\r\n\r\n  handleSchoolYear(schoolYear: ISchoolYear | null): void {\r\n    this.schoolYearId.setValue(schoolYear?.id);\r\n  }\r\n\r\n  showReport() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('Only supported for New Hampshire state.');\r\n      this.reportData = undefined;\r\n      return;\r\n    }\r\n    this.loading = true;\r\n    if (!searchValues.locale) {\r\n      searchValues.locale = 'en';\r\n    }\r\n    searchValues.printPdf = false;\r\n    this.reportService\r\n      .generateStateOsepReport(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe({\r\n        next: (res) => {\r\n          this.reportData = res.reportData;\r\n        },\r\n        complete: () => {\r\n          this.loading = false;\r\n        },\r\n      });\r\n  }\r\n\r\n  downloadReport() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('OSEP Data is for NH State only.');\r\n      this.reportData = undefined;\r\n      return;\r\n    }\r\n    searchValues.printPdf = true;\r\n    this.loading = true;\r\n    this.reportService\r\n    .generateStateOsepReportPdf(searchValues)\r\n    .pipe(take(1))\r\n    .subscribe({\r\n      next: (res) => {\r\n        const file = new Blob([res], { type: 'application/pdf' });\r\n        const fileUrl = URL.createObjectURL(file);\r\n        const link = document.createElement('a');\r\n        link.href = fileUrl;\r\n        let fileName = `state_osep`;\r\n        link.download = `${fileName.replace(/ /g, '_')}.pdf`;\r\n        link.click();\r\n      },\r\n      complete: () => {\r\n        this.loading = false;\r\n      },\r\n    });\r\n  }\r\n\r\n  downloadDetailReport() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('Only supported for New Hampshire state.');\r\n      this.reportData = undefined;\r\n      return;\r\n    }\r\n    searchValues.printPdf = true;\r\n    this.loading = true;\r\n    this.reportService\r\n    .generateStateOsepReportDetail(searchValues)\r\n    .pipe(take(1))\r\n    .subscribe({\r\n      next: (res) => {\r\n        const fileName = 'OSEPStateDetail.xlsx';\r\n        const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n        const url = URL.createObjectURL(blob);\r\n        const a = document.createElement('a');\r\n        a.href = url;\r\n        a.download = fileName;\r\n        a.click();\r\n      },\r\n      complete: () => {\r\n        this.loading = false;\r\n      },\r\n    });\r\n  }\r\n\r\n\r\n  handleClear(): void {\r\n    this.clearDropdown = true;\r\n    this.reportData = undefined;\r\n    this.searchForm.reset();\r\n    this.searchForm.patchValue({\r\n        stateId: this.user.stateId\r\n    });\r\n    if (!this.stateSelect?.disabled) this.stateId.setValue(null);\r\n  }\r\n\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { States } from '@core/enums/states';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\n\r\n@Component({\r\n  selector: 'drdp-teacher-survey',\r\n  templateUrl: './teacher-survey.component.html',\r\n  styleUrls: ['./teacher-survey.component.scss']\r\n})\r\nexport class TeacherSurveyComponent implements OnInit {\r\n  searchForm: FormGroup | any;\r\n  allAgencies: boolean = false;\r\n  selectType = SelectType;\r\n  clearDropdown: boolean = false;\r\n\r\n  get stateId() { return this.searchForm.get('stateId'); }\r\n  get agencyId() { return this.searchForm.get('agencyId'); }\r\n  get siteIds() { return this.searchForm.get('siteIds'); }\r\n  get classIds() { return this.searchForm.get('classIds'); }\r\n  get schoolYearId() { return this.searchForm.get('schoolYearId'); }\r\n  get ratingPeriodId() { return this.searchForm.get('ratingPeriodId'); }\r\n\r\n  fb = inject(FormBuilder);\r\n  reportService = inject(ReportService);\r\n  \r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: [States.california, Validators.required],\r\n      agencyId: [null, Validators.required],\r\n      schoolYearId: [null, Validators.required],\r\n      ratingPeriodId: [null, Validators.required],\r\n      siteIds: [null, Validators.required],\r\n      classIds: [null],\r\n    });\r\n  }\r\n\r\n  handleAll(): void {\r\n    this.allAgencies = !this.allAgencies;\r\n    this.agencyId.setValue(null);\r\n    this.siteIds.setValue(null);\r\n    this.classIds.setValue(null); \r\n    this.clearDropdown = true;\r\n    if (this.allAgencies) {\r\n      this.agencyId.clearValidators();\r\n      this.siteIds.clearValidators();\r\n    } else {\r\n      this.agencyId.setValidators([Validators.required]);\r\n      this.siteIds.setValidators([Validators.required]);\r\n    }\r\n    this.agencyId.updateValueAndValidity();\r\n    this.siteIds.updateValueAndValidity();\r\n    this.classIds.updateValueAndValidity();\r\n  }\r\n\r\n  handleDropdown(event: any, type: string): void {\r\n    switch (type) {\r\n      case SelectType.States:\r\n        this.stateId.setValue(event?.id);\r\n        break;\r\n      case SelectType.Agencies:\r\n        this.agencyId.setValue(event?.id);\r\n        this.siteIds.setValue(null);\r\n        this.classIds.setValue(null);\r\n        break;\r\n      case SelectType.SchoolYear:\r\n        this.schoolYearId.setValue(event?.id);\r\n        this.ratingPeriodId.setValue(null);\r\n        break;\r\n      case SelectType.RatingPeriods:\r\n        this.ratingPeriodId.setValue(event?.id);\r\n        this.classIds.setValue(null);\r\n        break;\r\n      case SelectType.Sites:\r\n        const siteIds = event?.map((sites: any) => sites.id);\r\n        this.siteIds.setValue(siteIds);\r\n        this.classIds.setValue(null);\r\n        break;\r\n      case SelectType.Class:\r\n        const classIds = event?.map((classroom: any) => classroom.id);\r\n        this.classIds.setValue(classIds);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleDownload(): void {\r\n    let payload: IReportSearch = this.searchForm.value;\r\n    payload.globalRatingPeriodIds = [payload.ratingPeriodId ?? 0];\r\n    this.reportService.getTeacherSurveyResults(payload).pipe(take(1)).subscribe(res => {\r\n      const fileName = 'TeacherSurveyResults.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"DRDP 2025 Teacher Survey Results\"></drdp-title>\r\n  </div>\r\n  <drdp-container additionClasses=\"mb-4\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\" additionClasses=\"p-6\">\r\n        <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-2 my-auto\"\r\n          [formGroup]=\"searchForm\" (ngSubmit)=\"handleDownload()\">\r\n          <div class=\"lg:col-span-5 md:col-span-2 col-span-1\">\r\n            <mat-checkbox color=\"primary\" (change)=\"handleAll()\"></mat-checkbox>\r\n            <label class=\"inline\">Search All Agencies</label>\r\n          </div>\r\n\r\n          <drdp-select-state [clear]=\"clearDropdown\" [initialStateId]=\"stateId.value\" [disabled]=\"true\"\r\n            (state)=\"handleDropdown($event, selectType.States)\" [required]=\"true\">\r\n          </drdp-select-state>\r\n\r\n          <drdp-select-agency [clear]=\"clearDropdown\" [hidden]=\"allAgencies\" [stateId]=\"stateId.value\" [initialAgencyId]=\"agencyId.value\"\r\n            [isPilot]=\"true\" [required]=\"true\" (agency)=\"handleDropdown($event, selectType.Agencies)\">\r\n          </drdp-select-agency>\r\n\r\n          <drdp-select-school-year (schoolYear)=\"handleDropdown($event, selectType.SchoolYear)\"\r\n            [required]=\"true\">\r\n          </drdp-select-school-year>\r\n\r\n          <drdp-select-global-rating (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n            [schoolYearId]=\"schoolYearId.value\" [required]=\"true\">\r\n          </drdp-select-global-rating>\r\n\r\n          <drdp-select-site [hidden]=\"allAgencies\" (site)=\"handleDropdown($event, selectType.Sites)\" [agencyId]=\"agencyId.value\"\r\n            [clear]=\"clearDropdown\" [isPilot]=\"true\" [multiSelect]=\"true\" [multiSelectInitVals]=\"false\" [required]=\"true\">\r\n          </drdp-select-site>\r\n\r\n          <drdp-select-class [clear]=\"clearDropdown\" [hidden]=\"allAgencies\" (classroom)=\"handleDropdown($event, selectType.Class)\"\r\n            [showPilotClasses]=\"true\" [globalRatingPeriodId]=\"ratingPeriodId.value\" [siteIds]=\"siteIds.value\">\r\n          </drdp-select-class>\r\n\r\n          <div class=\"flex items-end justify-end\" [ngClass]=\"{'lg:col-span-4': !allAgencies}\">\r\n            <div>\r\n              <drdp-btn type=\"submit\" [disabled]=\"searchForm.invalid\">\r\n                Download Teacher Survey Results\r\n              </drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { AuthGuard } from \"@core/guards/auth.guard\";\r\nimport { DrdpLayoutComponent } from \"@views/user/drdp-layout/drdp-layout.component\";\r\nimport { PermissionGuard } from \"@core/guards/permission.guard\";\r\nimport { Permission } from \"@core/enums/permissions\";\r\nimport { ParentProgressComponent } from \"@views/user/reports/parent-progress/parent-progress.component\";\r\nimport { ClassPlanningComponent } from './class-planning/class-planning.component';\r\nimport { GroupDetailComponent } from './group-detail/group-detail.component';\r\nimport { CohortProgressComponent } from './cohort-progress/cohort-progress.component';\r\nimport { ChildProgressComponent } from '@views/user/reports/child-progress/child-progress.component';\r\nimport { GroupComponent } from './group/group.component';\r\nimport { RatingCompletionComponent } from './rating-completion/rating-completion.component';\r\nimport { ReportTrackingComponent } from './report-tracking/report-tracking.component';\r\nimport { DistrictOsepComponent } from './district-osep/district-osep.component';\r\nimport { StateOsepComponent } from './state-osep/state-osep.component';\r\nimport { TeacherSurveyComponent } from './teacher-survey/teacher-survey.component';\r\nimport { StateGroupDetailComponent } from './state-group-detail/state-group-detail.component';\r\nimport { StateCohortComponent } from './state-cohort/state-cohort.component';\r\nimport { OsepExceptionComponent } from './osep-exception/osep-exception.component';\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: 'reports',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      {\r\n        path: 'child-progress',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.ChildProgressReport},\r\n        component: ChildProgressComponent,\r\n      },\r\n      {\r\n        path: 'class-planning',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.ClassPlanningReport},\r\n        component: ClassPlanningComponent,\r\n      },\r\n      {\r\n        path: 'parent-progress',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.ParentProgressReport},\r\n        component: ParentProgressComponent,\r\n      },\r\n      {\r\n        path: 'group-detail',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.GroupDetailsReport},\r\n        component: GroupDetailComponent,\r\n      },\r\n      {\r\n        path: 'state-group-detail',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.StateGroupDetailReport},\r\n        component: StateGroupDetailComponent,\r\n      },\r\n      {\r\n        path: 'cohort-progress',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.CohortProgressReport},\r\n        component: CohortProgressComponent,\r\n      },\r\n      {\r\n        path: 'state-cohort',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.StateCohortReport},\r\n        component: StateCohortComponent,\r\n      },\r\n      {\r\n        path: 'group',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.GroupReport},\r\n        component: GroupComponent,\r\n      },\r\n      {\r\n        path: 'rating-completion',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.RatingCompletion},\r\n        component: RatingCompletionComponent,\r\n      },\r\n      {\r\n        path: 'report-tracking',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.AccessToReportTracking},\r\n        component: ReportTrackingComponent,\r\n      },\r\n      {\r\n        path: 'district-osep',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.DistrictOSEPReport},\r\n        component: DistrictOsepComponent,\r\n      },\r\n      {\r\n        path: 'state-osep',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.StateOSEPReport},\r\n        component: StateOsepComponent,\r\n      },\r\n      {\r\n        path: 'teacher-survey',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.PilotIncludeRatings},\r\n        component: TeacherSurveyComponent,\r\n      },\r\n      {\r\n        path: 'osep-exception',\r\n        canActivate: [PermissionGuard],\r\n        data: {permission: Permission.OSEPException},\r\n        component: OsepExceptionComponent,\r\n      },\r\n    ],\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule]\r\n})\r\nexport class ReportsRoutingModule {\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\n\r\n@Component({\r\n  selector: 'drdp-state-group-detail',\r\n  templateUrl: './state-group-detail.component.html',\r\n  styleUrls: ['./state-group-detail.component.scss']\r\n})\r\nexport class StateGroupDetailComponent {\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: false,\r\n    globalRatingPeriod: true,\r\n    site: false,\r\n    classroom: false,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: false\r\n  };\r\n\r\n  reportService = inject(ReportService); \r\n  dialog = inject(MatDialog);\r\n\r\n  showReport(searchValue: IReportSearch): void {\r\n    this.reportService\r\n      .saveStateGroupDetailRequest(searchValue)\r\n      .pipe(take(1))\r\n      .subscribe((res: boolean) => {\r\n        if (res) this.displaySuccessMessage();\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage(): void {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n    this.dialog.open(ConfirmationModalComponent, { data: modal });  \r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"State Group Detail Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select age group and rating period to create your state cohort/group. Additional filters are optional. To select a subset of \r\n        agencies, click on the appropriate agencies in the agency drop down menu or if running for whole state, check all agencies. Any \r\n        rating options other than developmental levels, will not be calculated in the report and will affect the number of children \r\n        reflected. The report will show all domain scaled scores for the selected group.\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [hasSubfilters]=\"true\" [multiSelectAgencies]=\"true\" [allAgenciesCheckbox]=\"true\" \r\n    [displaySite]=\"false\" [displayClassroom]=\"false\" [displayDownload]=\"false\" [requiredFields]=\"requiredFields\"\r\n    ratingPeriodLabel=\"Cohort Rating Period\" showReportBtnText=\"Send Request\" (showReportClicked)=\"showReport($event)\">\r\n  </drdp-report-search>\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { IRequiredReportFields } from '../interfaces/irequired-report-fields';\r\nimport { IReportSearch } from '../interfaces/ireport-search';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-state-cohort',\r\n  templateUrl: './state-cohort.component.html',\r\n  styleUrls: ['./state-cohort.component.scss']\r\n})\r\nexport class StateCohortComponent {\r\n  requiredFields: IRequiredReportFields = {\r\n    state: true,\r\n    agency: false,\r\n    globalRatingPeriod: true,\r\n    site: false,\r\n    classroom: false,\r\n    ageGroup: true,\r\n    requireMultipleRatingPeriods: true,\r\n    requireRpInSameSchoolYear: false\r\n  };\r\n\r\n  dialog = inject(MatDialog);\r\n  reportService = inject(ReportService);\r\n\r\n  showReport(searchValue: IReportSearch): void {\r\n    this.reportService\r\n      .saveStateCohortRequest(searchValue)\r\n      .pipe(take(1))\r\n      .subscribe((res: boolean) => {\r\n        if (res) this.displaySuccessMessage();\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage(): void {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n    this.dialog.open(ConfirmationModalComponent, { data: modal });  \r\n  }\r\n}","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"State Cohort Report\"></drdp-title>\r\n    <div>\r\n      <p>\r\n        Select all agencies, one agency, or multiple agencies. Select at least two (2) rating periods and age group. The Sites and Classrooms \r\n        within the selected agencies will automatically be included. Additional filters are optional. The report will show all domain scaled \r\n        scores for the selected group, to date.\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <drdp-report-search [hasSubfilters]=\"true\" [multiSelectAgencies]=\"true\" [allAgenciesCheckbox]=\"true\" [multiSelectRatingPeriods]=\"true\"\r\n    [displaySite]=\"false\" [displayClassroom]=\"false\" [displayDownload]=\"false\" [requiredFields]=\"requiredFields\"\r\n    showReportBtnText=\"Send Request\" (showReportClicked)=\"showReport($event)\">\r\n  </drdp-report-search>\r\n</div>","import { Component, OnInit, inject } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { States } from '@core/enums/states';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IStateOsepSearch } from '../interfaces/ireport-search';\r\nimport { ReportService } from '@core/services/report.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-osep-exception',\r\n  templateUrl: './osep-exception.component.html',\r\n  styleUrls: ['./osep-exception.component.scss']\r\n})\r\nexport class OsepExceptionComponent implements OnInit {\r\n  fb = inject(FormBuilder);\r\n  toastService = inject(ToastService);\r\n  reportService = inject(ReportService);  \r\n  startingSchoolYear: string = '2024';\r\n  \r\n  searchForm: FormGroup | any;\r\n  initStateId: number = States.newHampshire;\r\n  \r\n  get stateId() { return this.searchForm.get('stateId'); }\r\n  get schoolYearId() { return this.searchForm.get('schoolYearId'); }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: new FormControl<number | null>(this.initStateId, Validators.required),\r\n      schoolYearId: new FormControl<number | null>(null, Validators.required),\r\n    });\r\n  }\r\n\r\n  handleState(state: IState | null) {\r\n    this.stateId.setValue(state?.id);\r\n  }\r\n\r\n  handleSchoolYear(schoolYear: ISchoolYear | null): void {\r\n    this.schoolYearId.setValue(schoolYear?.id);\r\n  }\r\n\r\n  handleDownload(): void {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    const searchValues: IStateOsepSearch = this.searchForm.value;\r\n    if (searchValues.stateId !== States.newHampshire) {\r\n      this.toastService.error('Only supported for New Hampshire state.');\r\n      return;\r\n    }\r\n    \r\n    this.reportService.generateOSEPExceptionReport(searchValues).pipe(take(1)).subscribe(res => {\r\n      const fileName = 'OSEPExceptionDetail.xlsx';\r\n      const blob = new Blob([res.body], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n      const url = URL.createObjectURL(blob);\r\n      const a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fileName;\r\n      a.click();\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"OSEP Exception Report\"></drdp-title>\r\n  </div>\r\n\r\n  <drdp-container additionClasses=\"w-full mt-4\">\r\n    <drdp-container color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\">\r\n        <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 md:gap-3\">\r\n          <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\" \r\n            [required]=\"true\"></drdp-select-state>\r\n          \r\n          <drdp-select-school-year #schoolYearSelect (schoolYear)=\"handleSchoolYear($event)\" \r\n            [required]=\"true\" [startingSchoolYear]=\"startingSchoolYear\"></drdp-select-school-year>\r\n          \r\n          <div class=\"lg:col-span-2 flex items-end justify-end mt-2\">\r\n            <drdp-btn type=\"button\" (click)=\"handleDownload()\" [disabled]=\"searchForm.invalid\">\r\n              Download Exception Report\r\n            </drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </drdp-container>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '@shared/shared.module';\r\nimport { CoreModule } from '@core/core.module';\r\nimport { PipesModule } from '@core/pipes/pipes.module';\r\nimport { ReportsRoutingModule } from './reports-routing.module';\r\nimport { ParentProgressComponent } from './parent-progress/parent-progress.component';\r\nimport { ReportSearchComponent } from './report-search/report-search.component';\r\nimport { ViewStudentByClassModalComponent } from './view-student-by-class-modal/view-student-by-class-modal.component';\r\nimport { ClassPlanningComponent } from './class-planning/class-planning.component';\r\nimport { GroupDetailComponent } from './group-detail/group-detail.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CohortProgressComponent } from './cohort-progress/cohort-progress.component';\r\nimport { ChildProgressComponent } from './child-progress/child-progress.component';\r\nimport { GroupComponent } from './group/group.component';\r\nimport { RatingCompletionComponent } from './rating-completion/rating-completion.component';\r\nimport { ViewChildrenModalComponent } from './view-children-modal/view-children-modal.component';\r\nimport { ReportTrackingComponent } from './report-tracking/report-tracking.component';\r\nimport { ReportUsageComponent } from './report-tracking/report-usage/report-usage.component';\r\nimport { AgencyRatingViewsComponent } from './report-tracking/agency-rating-views/agency-rating-views.component';\r\nimport { ChildRatingsComponent } from './report-tracking/child-ratings/child-ratings.component';\r\nimport { DistrictOsepComponent } from './district-osep/district-osep.component';\r\nimport { StateOsepComponent } from './state-osep/state-osep.component';\r\nimport { BarChartComponent } from './district-osep/charts/bar-chart/bar-chart.component';\r\nimport { LineChartComponent } from './district-osep/charts/line-chart/line-chart.component';\r\nimport { TeacherSurveyComponent } from './teacher-survey/teacher-survey.component';\r\nimport { StateGroupDetailComponent } from './state-group-detail/state-group-detail.component';\r\nimport { StateCohortComponent } from './state-cohort/state-cohort.component';\r\nimport { OsepExceptionComponent } from './osep-exception/osep-exception.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ParentProgressComponent,\r\n    ReportSearchComponent,\r\n    ViewStudentByClassModalComponent,\r\n    ClassPlanningComponent,\r\n    GroupDetailComponent,\r\n    CohortProgressComponent,\r\n    ChildProgressComponent,\r\n    GroupComponent,\r\n    RatingCompletionComponent,\r\n    ViewChildrenModalComponent,\r\n    ReportTrackingComponent,\r\n    ReportUsageComponent,\r\n    AgencyRatingViewsComponent,\r\n    ChildRatingsComponent,\r\n    DistrictOsepComponent,\r\n    StateOsepComponent,\r\n    BarChartComponent,\r\n    LineChartComponent,\r\n    TeacherSurveyComponent,\r\n    StateGroupDetailComponent,\r\n    StateCohortComponent,\r\n    OsepExceptionComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ReportsRoutingModule,\r\n    SharedModule,\r\n    CoreModule,\r\n    FormsModule,\r\n    PipesModule.forRoot()\r\n  ]\r\n})\r\nexport class ReportsModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SharedModule } from '@shared/shared.module';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CoreModule } from '@core/core.module';\r\n\r\nimport { UserProfileComponent } from './user-profile/user-profile.component';\r\nimport { UserRoutingModule } from './user-routing.module';\r\nimport { DashboardComponent } from './dashboard/dashboard/dashboard.component';\r\nimport { DrdpLayoutComponent } from './drdp-layout/drdp-layout.component';\r\nimport { MyClassesComponent } from './manage-enrollment/my-classes/my-classes.component';\r\nimport { StudentsComponent } from './manage-enrollment/my-classes/students/students.component';\r\nimport { LatestNewsComponent } from './dashboard/latest-news/latest-news.component';\r\nimport { NewsDescriptionComponent } from './dashboard/latest-news/news-description/news-description.component';\r\nimport { EditUserProfileComponent } from './user-profile/edit-user-profile/edit-user-profile.component';\r\nimport { UpdatePasswordComponent } from './user-profile/update-password/update-password.component';\r\nimport { AddNewChildComponent } from './add-new-child/add-new-child.component';\r\nimport { AssignChildComponent } from './add-new-child/assign-child/assign-child.component';\r\nimport { UserSessionComponent } from './dashboard/user-session/user-session.component';\r\nimport { ViewChildComponent } from './manage-enrollment/view-child/view-child.component';\r\nimport { ViewChildTabsComponent } from './manage-enrollment/view-child/view-child-tabs/view-child-tabs.component';\r\nimport { AddViewEditChildComponent } from './manage-enrollment/add-view-edit-child/add-view-edit-child.component';\r\nimport { ViewClassEnrollmentsComponent } from './manage-enrollment/view-child/view-class-enrollments/view-class-enrollments.component';\r\nimport { PipesModule } from '@core/pipes/pipes.module';\r\nimport { TransferChildComponent } from './manage-enrollment/transfer-child/transfer-child.component';\r\nimport { ReEnrollClassroomComponent } from './manage-enrollment/my-classes/re-enroll-classroom/re-enroll-classroom.component';\r\nimport { PendingTransfersComponent } from './dashboard/pending-requests/pending-transfers/pending-transfers.component';\r\nimport { ReEnrollmentRequestsComponent } from './dashboard/pending-requests/re-enrollment-requests/re-enrollment-requests.component';\r\nimport { DropChildComponent } from './manage-enrollment/drop-child/drop-child.component';\r\nimport { PendingWithdrawsComponent } from './dashboard/pending-requests/pending-withdraws/pending-withdraws.component';\r\nimport { SearchDroppedChildrenComponent } from './search-dropped-children/search-dropped-children.component';\r\nimport { EnrollDroppedChildrenComponent } from './search-dropped-children/enroll-dropped-children/enroll-dropped-children.component';\r\nimport { SelectDroppedChildComponent } from './add-new-child/select-dropped-child/select-dropped-child.component';\r\nimport { InputRatingComponent } from './input-rating/input-rating.component';\r\nimport { SelectRatingModalComponent } from './input-rating/components/select-rating-modal/select-rating-modal.component';\r\nimport { SearchRatingComponent } from './input-rating/search-rating/search-rating.component';\r\nimport { ScantronComponent } from './input-rating/components/scantron/scantron.component';\r\nimport { StudentInfoComponent } from './input-rating/components/student-info/student-info.component';\r\nimport { PortfolioComponent } from './dashboard/portfolio/portfolio.component';\r\nimport { PortfolioClassComponent } from './dashboard/portfolio/portfolio-class/portfolio-class.component';\r\nimport { PortfolioAddEvidence } from './dashboard/portfolio/portfolio-class/portfolio-add-evidence/portfolio-add-evidence.component';\r\nimport { PortfolioReviewEvidenceComponent } from './dashboard/portfolio/portfolio-class/portfolio-review-evidence/portfolio-review-evidence.component';\r\nimport { PortfolioInputRatingModalComponent } from './dashboard/portfolio/portfolio-class/portfolio-input-rating-modal/portfolio-input-rating-modal.component';\r\nimport { ViewChildSharedProvidersComponent } from './manage-enrollment/view-child/view-child-shared-providers/view-child-shared-providers.component';\r\nimport { AddChildSharedProviderComponent } from './manage-enrollment/view-child/view-child-shared-providers/add-child-shared-provider/add-child-shared-provider.component';\r\nimport { DeleteChildSharedProviderComponent } from './manage-enrollment/view-child/view-child-shared-providers/delete-child-shared-provider/delete-child-shared-provider.component';\r\nimport { AddSearchChildComponent } from './add-new-child/add-search-child/add-search-child.component';\r\nimport { ReleaseStudentComponent } from './add-new-child/add-search-child/request-release-student/request-release-student.component';\r\nimport { PendingReleasesComponent } from './dashboard/pending-requests/pending-releases/pending-releases.component';\r\nimport { AssessmentDateModalComponent } from './input-rating/components/assessment-date-modal/assessment-date-modal.component';\r\nimport { RatingCardComponent } from './input-rating/components/rating-card/rating-card.component';\r\nimport { ViewChildAssessmentsComponent } from './manage-enrollment/view-child/view-child-assessments/view-child-assessments.component';\r\nimport { DeclineReleaseStudentComponent } from './dashboard/pending-requests/pending-releases/decline-release-student/decline-release-student.component';\r\nimport { StudentBulkUnEnrollmentComponent } from './manage-enrollment/my-classes/students/students-bulk-un-enrollment/students-bulk-un-enrollment.component';\r\nimport { PilotTestChildrenComponent } from './pilot-test-children/pilot-test-children.component';\r\nimport { ChildrenComponent } from './children/children.component';\r\nimport { SearchManageChildComponent } from './manage-enrollment/search-manage-child/search-manage-child.component';\r\nimport { BatchReEnrollChildComponent } from './manage-enrollment/batch-re-enroll-child/batch-re-enroll-child.component';\r\nimport { PendingChildReEnrollmentComponent } from './dashboard/pending-requests/pending-child-re-enrollment/pending-child-re-enrollment.component';\r\nimport { ReportsModule } from \"@views/user/reports/reports.module\";\r\nimport { ChildRequestComponent } from './manage-enrollment/child-request/child-request.component';\r\nimport { EditClassEnrollmentDate } from './manage-enrollment/view-child/view-class-enrollments/edit-class-enrollment/edit-class-enrollment-date.component';\r\nimport { PortfolioMessageBoxComponent } from './dashboard/portfolio/portfolio-class/portfolio-message-box/portfolio-message-box.component';\r\nimport { PortfolioMessagesComponent } from './dashboard/portfolio/portfolio-messages/portfolio-messages.component';\r\nimport { MessageTileComponent } from './dashboard/portfolio/portfolio-messages/message-tile/message-tile.component';\r\nimport { MessageViewComponent } from './dashboard/portfolio/portfolio-messages/message-view/message-view.component';\r\nimport { MessageBoardTileComponent } from './dashboard/portfolio/portfolio-messages/message-board-tile/message-board-tile.component';\r\nimport { MessageBoardComponent } from './dashboard/portfolio/portfolio-messages/message-board/message-board.component';\r\nimport { TotalLockedChildrenComponent } from './dashboard/total-locked-children/total-locked-children.component';\r\nimport { ViewChildEvidenceComponent } from './manage-enrollment/view-child/view-child-evidence/view-child-evidence.component';\r\nimport { FutureEvidenceStudentComponent } from './dashboard/portfolio/portfolio-class/modals/future-evidence-student/future-evidence-student.component';\r\nimport { AssignEnrollmentComponent } from './dashboard/portfolio/portfolio-class/modals/assign-enrollment/assign-enrollment.component';\r\nimport { DualEnrollChildComponent } from './add-new-child/dual-enroll-child/dual-enroll-child.component';\r\nimport { SpedExitDateComponent } from './manage-enrollment/my-classes/students/sped-exit-date/sped-exit-date.component';\r\nimport { BatchSpedExitDateComponent } from './manage-enrollment/my-classes/students/batch-sped-exit-date/batch-sped-exit-date.component';\r\nimport { ConfirmationSpedExitDateComponent } from './manage-enrollment/my-classes/students/confirmation-sped-exit-date/confirmation-sped-exit-date.component';\r\nimport { TeacherSurveyModalComponent } from './input-rating/components/teacher-survey-modal/teacher-survey-modal.component';\r\nimport { RequestEvidenceComponent } from './dashboard/portfolio/portfolio-class/request-evidence/request-evidence.component';\r\nimport { PendingPortfolioEvidencesComponent } from './dashboard/pending-requests/pending-portfolio-evidences/pending-portfolio-evidences.component';\r\nimport { InvalidRequestModalComponent } from './dashboard/pending-requests/pending-portfolio-evidences/invalid-request-modal/invalid-request-modal.component';\r\nimport { ClassBasedPortfolioComponent } from './dashboard/portfolio/class-based-portfolio/class-based-portfolio.component';\r\nimport { StudentEvidenceComponent } from './dashboard/portfolio/class-based-portfolio/student-evidence/student-evidence.component';\r\nimport { StateDashboardComponent } from './state-dashboard/state-dashboard.component';\r\nimport { SearchProgramsComponent } from './state-dashboard/dashboard-search/search-programs/search-programs.component';\r\nimport { DashboardSearchComponent } from './state-dashboard/dashboard-search/dashboard-search.component';\r\nimport { SearchHomeLanguagesComponent } from './state-dashboard/dashboard-search/search-home-languages/search-home-languages.component';\r\nimport { SearchSpecialEducationComponent } from './state-dashboard/dashboard-search/search-special-education/search-special-education.component';\r\nimport { SearchChildRatingsComponent } from './state-dashboard/dashboard-search/search-child-ratings/search-child-ratings.component';\r\nimport { SearchDisabilitiesComponent } from './state-dashboard/dashboard-search/search-disabilities/search-disabilities.component';\r\n@NgModule({\r\n  declarations: [\r\n    DrdpLayoutComponent,\r\n    DashboardComponent,\r\n    UserProfileComponent,\r\n    MyClassesComponent,\r\n    StudentsComponent,\r\n    LatestNewsComponent,\r\n    NewsDescriptionComponent,\r\n    EditUserProfileComponent,\r\n    UpdatePasswordComponent,\r\n    AddNewChildComponent,\r\n    AssignChildComponent,\r\n    UserSessionComponent,\r\n    ViewChildComponent,\r\n    ViewChildTabsComponent,\r\n    AddViewEditChildComponent,\r\n    ViewClassEnrollmentsComponent,\r\n    TransferChildComponent,\r\n    ReEnrollClassroomComponent,\r\n    PendingTransfersComponent,\r\n    ReEnrollmentRequestsComponent,\r\n    DropChildComponent,\r\n    PendingWithdrawsComponent,\r\n    SearchDroppedChildrenComponent,\r\n    EnrollDroppedChildrenComponent,\r\n    SelectDroppedChildComponent,\r\n    InputRatingComponent,\r\n    SelectRatingModalComponent,\r\n    SearchRatingComponent,\r\n    ScantronComponent,\r\n    StudentInfoComponent,\r\n    PortfolioComponent,\r\n    PortfolioClassComponent,\r\n    PortfolioAddEvidence,\r\n    PortfolioReviewEvidenceComponent,\r\n    PortfolioInputRatingModalComponent,\r\n    ViewChildSharedProvidersComponent,\r\n    AddChildSharedProviderComponent,\r\n    DeleteChildSharedProviderComponent,\r\n    AddSearchChildComponent,\r\n    ReleaseStudentComponent,\r\n    PendingReleasesComponent,\r\n    AssessmentDateModalComponent,\r\n    RatingCardComponent,\r\n    ViewChildAssessmentsComponent,\r\n    DeclineReleaseStudentComponent,\r\n    StudentBulkUnEnrollmentComponent,\r\n    PilotTestChildrenComponent,\r\n    ChildrenComponent,\r\n    SearchManageChildComponent,\r\n    BatchReEnrollChildComponent,\r\n    PendingChildReEnrollmentComponent,\r\n    ChildRequestComponent,\r\n    EditClassEnrollmentDate,\r\n    PortfolioMessageBoxComponent,\r\n    PortfolioMessagesComponent,\r\n    MessageTileComponent,\r\n    PortfolioMessageBoxComponent,\r\n    PortfolioMessagesComponent,\r\n    MessageTileComponent,\r\n    MessageViewComponent,\r\n    MessageBoardTileComponent,\r\n    MessageBoardComponent,\r\n    TotalLockedChildrenComponent,\r\n    ViewChildEvidenceComponent,\r\n    FutureEvidenceStudentComponent,\r\n    AssignEnrollmentComponent,\r\n    DualEnrollChildComponent,\r\n    SpedExitDateComponent,\r\n    BatchSpedExitDateComponent,\r\n    ConfirmationSpedExitDateComponent,\r\n    TeacherSurveyModalComponent,\r\n    RequestEvidenceComponent,\r\n    PendingPortfolioEvidencesComponent,\r\n    InvalidRequestModalComponent,\r\n    ClassBasedPortfolioComponent,\r\n    StudentEvidenceComponent,\r\n    StateDashboardComponent,\r\n    SearchProgramsComponent,\r\n    DashboardSearchComponent,\r\n    SearchHomeLanguagesComponent,\r\n    SearchSpecialEducationComponent,\r\n    SearchChildRatingsComponent,\r\n    SearchDisabilitiesComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    UserRoutingModule,\r\n    SharedModule,\r\n    FormsModule,\r\n    CoreModule,\r\n    PipesModule.forRoot(),\r\n    ReportsModule\r\n  ],\r\n  providers: [],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class UserModule { }\r\n","export enum HeadStart {\r\n  HeadStartGrantee = 1,\r\n  HeadStartDelegate = 2,\r\n}\r\n","export enum StatePreschool {\r\n  StatePreschoolContractor = 1,\r\n  StatePreschoolSubcontractor = 2\r\n}\r\n","<div class=\"rounded-lg fixActionRow\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{title}}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content class=\"relative\">\r\n    <form class=\"grid grid-cols-2 gap-x-4 gap-x-10 py-6\" [formGroup]=\"agencyForm\">\r\n      <div class=\"absolute left-[52%] mt-2\">\r\n        <mat-checkbox formControlName=\"isTestAgency\"><span class=\"font-normal text-base\">Test Agency</span></mat-checkbox>\r\n      </div>\r\n\r\n      <div class=\"col-span-2 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"agencyName\">Agency Name</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Agency Name\" autocomplete=\"off\" id=\"agencyName\" type=\"text\"\r\n            formControlName=\"agencyName\" maxlength=\"100\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div>\r\n        <label class=\"font-normal required\" for=\"cdsCode\">Agency Code</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Agency Code*\" autocomplete=\"off\" id=\"cdsCode\" type=\"text\"\r\n            formControlName=\"cdsCode\" maxlength=\"25\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\">\r\n        <drdp-select-site-code [initialCodeId]=\"codeType.value\" (code)=\"onDropDownSelect($event, selectType.CodeType)\"\r\n          [isValid]=\"!codeType.touched || codeType.valid\" [required]=\"true\">\r\n        </drdp-select-site-code>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\">\r\n        <drdp-select-state [initialStateId]=\"stateId.value\" (state)=\"onDropDownSelect($event, selectType.States)\"\r\n          [isValid]=\"!stateId.touched || stateId.valid\" [required]=\"true\" [disabled]=\"!!stateId.value && editData?.data?.id\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\">\r\n        <drdp-select-type [initialTypeId]=\"typeId.value\" (type)=\"onDropDownSelect($event, selectType.SiteType)\"\r\n          [required]=\"true\" [isValid]=\"!typeId.touched || typeId.valid\">\r\n        </drdp-select-type>\r\n      </div>\r\n\r\n      <div class=\"col-span-2 \">\r\n        <label class=\"font-normal\" for=\"footer\">Footer</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Footer\" autocomplete=\"off\" id=\"footer\" type=\"text\" formControlName=\"footer\"\r\n            [maxLength]=\"250\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div>\r\n        <label class=\"font-normal required\" for=\"agencyAdress\">Agency Address</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Agency Address\" autocomplete=\"off\" id=\"agencyAdress\" type=\"text\"\r\n            formControlName=\"agencyAddress\" maxlength=\"100\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div>\r\n        <label class=\"font-normal required\" for=\"agencyCity\">Agency City</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Agency City\" autocomplete=\"off\" id=\"agencyCity\" type=\"text\"\r\n            formControlName=\"agencyCity\" maxlength=\"25\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"input-container\">\r\n        <drdp-select-county [initialCountyIds]=\"countyId.value\" (county)=\"onDropDownSelect($event, selectType.County)\"\r\n          [stateId]=\"stateId.value\" [multiSelect]=\"false\" [multiSelectInitVals]=\"false\"\r\n          [isValid]=\"!countyId.touched || countyId.valid\">\r\n        </drdp-select-county>\r\n      </div>\r\n\r\n      <div>\r\n        <label class=\"font-normal required\" for=\"agencyZipCode\">Agency Zip Code</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Agency Zip Code\" autocomplete=\"off\" id=\"agencyZipCode\" type=\"text\"\r\n            formControlName=\"agencyZipCode\" maxlength=\"10\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div>\r\n        <drdp-select-region [stateId]=\"stateId.value\" [initialRegionId]=\"regionIds.value\" [multiSelectInitVals]=\"true\"\r\n          [multiSelect]=\"true\" [isValid]=\"!regionIds.touched || regionIds.valid\"\r\n          (region)=\"onDropDownSelect($event, selectType.RegionRef)\">\r\n        </drdp-select-region>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\">\r\n        <drdp-select-vendor [initialVendorIds]=\"vendorIds.value\" [multiSelectInitVals]=\"true\" [multiSelect]=\"true\"\r\n          (vendor)=\"onDropDownSelect($event, selectType.VendorRef)\" [required]=\"true\"\r\n          [isValid]=\"!vendorIds.touched || vendorIds.valid\">\r\n        </drdp-select-vendor>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col jusityf-center items-center\">\r\n        <drdp-select-head-start label=\"Head Start\"\r\n          [initialheadStartId]=\"headStartId.value\"\r\n          (headStart)=\"onHeadStartSelect($event)\"\r\n          [stateId]=\"stateId.value\">\r\n        </drdp-select-head-start>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\"\r\n        *ngIf=\"headStartId.value && headStartId.value == HeadStart.HeadStartDelegate\">\r\n        <drdp-select-grantee [initialGranteeId]=\"granteeAgencyId.value\"\r\n          [intialAgencyId]=\"editData.data?.id\"\r\n          label=\"Head Start Grantee Agency\"\r\n          (agency)=\"onDropDownSelect($event, selectType.HeadStartGranteeRef)\"\r\n          [required]=\"true\"\r\n          [stateId]=\"stateId.value\">\r\n        </drdp-select-grantee>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col jusityf-center items-center\">\r\n        <drdp-select-state-preschool label=\"State Preschool\"\r\n          [initialStatePreschoolId]=\"statePreschoolId.value\"\r\n          (statePreschool)=\"onStatePreschoolSelect($event)\"\r\n          [stateId]=\"stateId.value\">\r\n        </drdp-select-state-preschool>\r\n      </div>\r\n\r\n      <div class=\"select-input flex-col justify-center items-center\"\r\n        *ngIf=\"statePreschoolId.value && statePreschoolId.value == StatePreschool.StatePreschoolSubcontractor\">\r\n        <drdp-select-contractor [initialContractorId]=\"contractorAgencyId.value\"\r\n          [intialAgencyId]=\"editData.data?.id\"\r\n          label=\"State Preschool Contractor Agency\"\r\n          (agency)=\"onDropDownSelect($event, selectType.StatePreschoolContractorRef)\"\r\n          [required]=\"true\"\r\n          [stateId]=\"stateId.value\">\r\n        </drdp-select-contractor>\r\n      </div>\r\n\r\n    </form>\r\n\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close (click)=\"cancel()\">Cancel</drdp-btn>\r\n    <drdp-btn mat-button [disabled]=\"agencyForm.invalid || isProcessing\" cdkFocusInitial\r\n      (click)=\"onSubmit()\">Save</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport {\r\n  IAgency,\r\n  IAgencyCodeType,\r\n  IAgencyType,\r\n} from '@core/interfaces/iagency';\r\nimport { IVendor } from '@core/interfaces/ivendor';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { Observable, Subscription, take } from 'rxjs';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { HeadStart } from '@core/enums/head-start';\r\nimport { IRegionType } from '@core/interfaces/iregion-type';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { IHeadStartOption } from '@core/interfaces/ihead-start';\r\nimport { StatePreschool } from '@core/enums/state-preschool';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-agency',\r\n  templateUrl: './add-edit-agency.component.html',\r\n  styleUrls: ['./add-edit-agency.component.scss'],\r\n})\r\nexport class AddEditAgencyComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  isProcessing = false;\r\n  agencyForm: FormGroup | any;\r\n  selectedState?: IState;\r\n  selectedCodeType?: IAgencyCodeType;\r\n  selectedType?: IAgencyType;\r\n  selectedCounty?: ICounty;\r\n  selectedVendor?: IVendor[];\r\n  selectedRegion?: number[];\r\n  title = 'Add New Agency';\r\n  isAgencyDelegate = false;\r\n\r\n  public get HeadStart() {\r\n    return HeadStart;\r\n  }\r\n  public get StatePreschool() {\r\n    return StatePreschool;\r\n  }\r\n\r\n  getSelectData$: Observable<any> | undefined;\r\n\r\n  public get selectType() {\r\n    return SelectType;\r\n  }\r\n  get agencyName() {\r\n    return this.agencyForm.get('agencyName');\r\n  }\r\n  get cdsCode() {\r\n    return this.agencyForm.get('cdsCode');\r\n  }\r\n  get codeType() {\r\n    return this.agencyForm.get('codeType');\r\n  }\r\n  get stateId() {\r\n    return this.agencyForm.get('stateId');\r\n  }\r\n  get typeId() {\r\n    return this.agencyForm.get('typeId');\r\n  }\r\n  get footer() {\r\n    return this.agencyForm.get('footer');\r\n  }\r\n  get agencyAddress() {\r\n    return this.agencyForm.get('agencyAddress');\r\n  }\r\n  get agencyCity() {\r\n    return this.agencyForm.get('agencyCity');\r\n  }\r\n  get agencyZipCode() {\r\n    return this.agencyForm.get('agencyZipCode');\r\n  }\r\n  get countyId() {\r\n    return this.agencyForm.get('countyId');\r\n  }\r\n\r\n  get headStartId() {\r\n    return this.agencyForm.get('headStartId');\r\n  }\r\n  get granteeAgencyId() {\r\n    return this.agencyForm.get('granteeAgencyId');\r\n  }\r\n\r\n  get vendorIds() {\r\n    return this.agencyForm.get('vendorIds');\r\n  }\r\n  get regionIds() {\r\n    return this.agencyForm.get('regionIds');\r\n  }\r\n\r\n  get statePreschoolId() {\r\n    return this.agencyForm.get('statePreschoolId');\r\n  }\r\n  get contractorAgencyId() {\r\n    return this.agencyForm.get('contractorAgencyId');\r\n  }\r\n  get isTestAgency() {\r\n    return this.agencyForm.get('isTestAgency');\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<AddEditAgencyComponent>,\r\n    private agencyService: AgencyService,\r\n    private toast: ToastService,\r\n    public stateService: StateService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.agencyForm = this.fb.group({\r\n      agencyName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      cdsCode: [null, [Validators.required, Validators.maxLength(25)]],\r\n      codeType: [null, [Validators.required]],\r\n      stateId: [null, [Validators.required]],\r\n      typeId: [null, [Validators.required]],\r\n      agencyAddress: [null, [Validators.required, Validators.maxLength(100)]],\r\n      agencyCity: [null, [Validators.required, Validators.maxLength(25)]],\r\n      agencyZipCode: [null, [Validators.required, Validators.maxLength(10)]],\r\n      countyId: [\r\n        null,\r\n        [Validators.maxLength(50), Validators.pattern(/^-?(0|[1-9]\\d*)?$/)],\r\n      ],\r\n      footer: [null, Validators.maxLength(250)],\r\n      headStartId: [null],\r\n      granteeAgencyId: [null],\r\n      vendorIds: [null, Validators.required],\r\n      regionIds: [null],\r\n      statePreschoolId: [null],\r\n      contractorAgencyId: [null],\r\n      isTestAgency: [false],\r\n    });\r\n\r\n    this.headStartId.valueChanges.subscribe((val: any) => {\r\n      if (val == HeadStart.HeadStartDelegate) {\r\n        this.granteeAgencyId.setValidators([Validators.required]);\r\n      } else {\r\n        this.granteeAgencyId.clearValidators();\r\n      }\r\n      this.granteeAgencyId.updateValueAndValidity();\r\n    });\r\n\r\n    this.statePreschoolId.valueChanges.subscribe((val: any) => {\r\n      if (val == StatePreschool.StatePreschoolSubcontractor) {\r\n        this.contractorAgencyId.setValidators([Validators.required]);\r\n      } else {\r\n        this.contractorAgencyId.clearValidators();\r\n      }\r\n      this.contractorAgencyId.updateValueAndValidity();\r\n    });\r\n\r\n    if (this.editData && this.editData.data && this.editData.data.id) {\r\n      const edit = this.editData.data;\r\n\r\n      this.title =\r\n        edit.headStartId == HeadStart.HeadStartGrantee\r\n          ? 'Edit Head Start Grantee Agency'\r\n          : 'Edit Agency';\r\n\r\n      this.agencyForm.patchValue({\r\n        ...edit,\r\n        agencyName: edit.agencyName,\r\n        countyID: edit.countyID,\r\n        codeType: edit.codeType,\r\n        stateId: edit.stateId,\r\n        typeId: edit.siteTypeId,\r\n        headStartId: edit.headStartId,\r\n        granteeAgencyId: edit.granteeAgencyId,\r\n        statePreschoolId: edit.statePreschoolId,\r\n        contractorAgencyId: edit.contractorAgencyId,\r\n        vendorIds: edit.vendorIds?.split(',').map(Number),\r\n        regionIds: edit.regionIds?.split(',').map(Number),\r\n      });\r\n      this.isAgencyDelegate = edit.headStartId == HeadStart.HeadStartDelegate;\r\n\r\n      this.selectedState = edit.state;\r\n      this.selectedCodeType = edit.siteCodeType;\r\n      this.selectedType = edit.siteType;\r\n      this.selectedCounty = edit.county;\r\n      this.selectedVendor = edit.vendors;\r\n      this.selectedRegion = edit.regionIds?.split(',').map(Number);\r\n    } else if (this.editData && this.editData.isHeadStartGrantee) {\r\n      this.title = 'Add New Head Start Grantee Agency';\r\n      this.headStartId.setValue(HeadStart.HeadStartGrantee);\r\n    }\r\n  }\r\n\r\n  onDropDownSelect(event: any, selectType: string) {\r\n    switch (selectType) {\r\n      case SelectType.States:\r\n        this.selectedState = event;\r\n        this.stateId.setValue(event?.id);\r\n        this.stateId.markAsTouched();\r\n        this.regionIds.setValue([]);\r\n        break;\r\n      case SelectType.CodeType:\r\n        this.codeType.setValue(event?.id);\r\n        this.codeType.markAsTouched();\r\n        if (this.selectedCodeType) {\r\n          this.selectedCodeType = event;\r\n        }\r\n        break;\r\n      case SelectType.SiteType:\r\n        this.typeId.setValue(event?.id);\r\n        this.typeId.markAsTouched();\r\n        if (this.selectedType) {\r\n          this.selectedType = event;\r\n        }\r\n        break;\r\n      case SelectType.County:\r\n        this.selectedCounty = event;\r\n        this.countyId.setValue(event?.id);\r\n        this.countyId.markAsTouched();\r\n        break;\r\n      case SelectType.RegionRef:\r\n        this.selectedRegion = event;\r\n        this.regionIds.setValue(event);\r\n        this.regionIds.markAsTouched();\r\n        break;\r\n      case SelectType.HeadStartRef:\r\n        this.headStartId.setValue(event?.id);\r\n        this.headStartId.markAsTouched();\r\n        break;\r\n      case SelectType.HeadStartGranteeRef:\r\n        this.granteeAgencyId.setValue(event?.id);\r\n        this.granteeAgencyId.markAsTouched();\r\n        break;\r\n      case SelectType.StatePreschoolContractorRef:\r\n        this.contractorAgencyId.setValue(event?.id);\r\n        this.contractorAgencyId.markAsTouched();\r\n        break;\r\n      case SelectType.VendorRef:\r\n        this.selectedVendor = event;\r\n        this.vendorIds.setValue(\r\n          event?.map((vendorIds: IVendor) => vendorIds.id)\r\n        );\r\n        this.vendorIds.markAsTouched();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  onSubmit(): any {\r\n    if (this.isProcessing) return;\r\n    if (this.agencyForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    // Sends Payload obj to parent\r\n    let payload: IAgency = this.agencyForm.value;\r\n    if (payload.headStartId != HeadStart.HeadStartDelegate)\r\n      payload.granteeAgencyId = null;\r\n\r\n    if (payload.statePreschoolId != StatePreschool.StatePreschoolSubcontractor)\r\n      payload.contractorAgencyId = null;\r\n\r\n    if (this.editData && this.editData?.data?.id) {\r\n      payload.id = this.editData.data.id;\r\n    }\r\n\r\n    // Send new Agency back to table for Re-rendering\r\n    let updateTableView: IAgency = Object.assign({}, this.agencyForm.value);\r\n    updateTableView.agencyName = this.agencyName;\r\n    updateTableView.state = this.selectedState;\r\n    updateTableView.stateCode = this.selectedState?.stateCode;\r\n    updateTableView.siteCodeType = this.selectedCodeType;\r\n    updateTableView.siteType = this.selectedType;\r\n    updateTableView.county = this.selectedCounty;\r\n    updateTableView.vendors = this.selectedVendor;\r\n    updateTableView.vendorNames = this.selectedVendor?.map(\r\n      (vendor: any) => vendor.name\r\n    );\r\n    updateTableView.regionIds = this.selectedRegion;\r\n\r\n    this.isProcessing = true;\r\n    if (payload.id) {\r\n      this.agencyService\r\n        .updateAgency(payload, 'Agency has been successfully updated.')\r\n        .pipe(take(1))\r\n        .subscribe((success: boolean) => {\r\n          this.isProcessing = false;\r\n          if (success) {\r\n            this.dialogRef.close({\r\n              success: true,\r\n              updateTableView: updateTableView,\r\n            });\r\n          }\r\n        });\r\n    } else {\r\n      this.agencyService\r\n        .addNewAgency(payload, 'Agency has been successfully added.')\r\n        .pipe(take(1))\r\n        .subscribe((success: any) => {\r\n          this.isProcessing = false;\r\n          if (success) {\r\n            this.dialogRef.close({\r\n              success: true,\r\n              updateTableView: updateTableView,\r\n            });\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  onHeadStartSelect(selectedValue: IHeadStartOption): void {\r\n    if (selectedValue?.id == HeadStart.HeadStartDelegate) {\r\n      this.headStartId.setValue(HeadStart.HeadStartDelegate)\r\n      this.granteeAgencyId.setValue(null);\r\n    } else if (selectedValue?.id == HeadStart.HeadStartGrantee) {\r\n      this.headStartId.setValue(HeadStart.HeadStartGrantee)\r\n    }\r\n    else\r\n      this.headStartId.setValue(null);\r\n  }\r\n\r\n  cancel(): void {\r\n    this.agencyForm.reset();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n\r\n  onStatePreschoolSelect(selectedValue: any): void {\r\n    if (selectedValue?.id == StatePreschool.StatePreschoolContractor) {\r\n      this.statePreschoolId.setValue(StatePreschool.StatePreschoolContractor)\r\n      this.contractorAgencyId.setValue(null);\r\n    } else if(selectedValue?.id == StatePreschool.StatePreschoolSubcontractor){\r\n      this.statePreschoolId.setValue(StatePreschool.StatePreschoolSubcontractor)\r\n    }\r\n    else\r\n      this.statePreschoolId.setValue(null);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title title=\"Agencies\"></drdp-title>\r\n    <span>\r\n      <drdp-btn *drdpCheckPermission=\"Permission.CreateAgencies\" (click)=\"openModal(undefined, ModalType.Agency)\">\r\n        <i class=\"uil uil-plus\"></i>\r\n        Add New Agency\r\n      </drdp-btn>\r\n    </span>\r\n  </div>\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <drdp-container *ngIf=\"hasAccessToAll\" color=\"lightBlue\">\r\n      <form [formGroup]=\"searchForm\" (ngSubmit)=\"search()\">\r\n        <div class=\"p-3 flex grid md:grid-cols-5 gap-2 flex-row content-between\">\r\n          <ng-container class=\"contents\">\r\n            <div class=\"col-span-1\">\r\n              <label class=\"font-bold\">Search by:</label>\r\n              <div class=\"border-b border-black\">\r\n                <input class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\"\r\n                  matInput\r\n                  placeholder=\"Agency Name\"\r\n                  searchInput=\"searchInput\"\r\n                  formControlName=\"agencyName\"/>\r\n              </div>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-select-state\r\n              #stateSelect\r\n              [initialStateId]=\"stateId?.value\"\r\n              (state)=\"handleState($event)\">\r\n              </drdp-select-state>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-select-agency\r\n                #agencySelect\r\n                (agency)=\"handleAgency($event)\"\r\n                [stateId]=\"stateId?.value\"\r\n                [initialAgencyId]=\"agencyId?.value\">\r\n              </drdp-select-agency>\r\n            </div>\r\n            <div class=\"col-span-1\">\r\n              <drdp-select-type\r\n                #typeSelect\r\n                (type)=\"handleType($event)\"\r\n                [initialTypeId]=\"typeId?.value\">\r\n              </drdp-select-type>\r\n            </div>\r\n            <div class=\"col-span-1 md:col-start-5 self-end justify-center md:justify-self-end\">\r\n              <drdp-btn type=\"submit\" class=\"mr-2\">Search</drdp-btn>\r\n              <drdp-btn type=\"button\" (click)=\"onClear()\" color=\"outline\">Clear</drdp-btn>\r\n            </div>\r\n          </ng-container>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n    <drdp-add-edit-table\r\n      [dataSource]=\"dataSource\"\r\n      [tableData]=\"tableData\"\r\n      [columns]=\"tableColumns\"\r\n      [isSuperAdmin]=\"hasAccessToAll\"\r\n      (editActionItem)=\"openModal($event)\">\r\n    </drdp-add-edit-table>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    *ngIf=\"hasAccessToAll\"\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateAgency(false)\">\r\n  </mat-paginator>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { IAgency, IAgencySearchPayload } from '@core/interfaces/iagency';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AddEditAgencyComponent } from './add-edit-agency/add-edit-agency.component';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { take } from 'rxjs';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectTypeComponent } from '@shared/components/dropdowns/select-type/select-type.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { ModalType } from '@core/enums/modal';\r\n\r\n@Component({\r\n  selector: 'drdp-agencies',\r\n  templateUrl: './agencies.component.html',\r\n  styleUrls: ['./agencies.component.scss'],\r\n})\r\nexport class AgenciesComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  @ViewChild('typeSelect') typeSelect: SelectTypeComponent | undefined;\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageSize: number = 10;\r\n  pageIndex: number = 1;\r\n  tableData?: any;\r\n  totalData: number = 0;\r\n  searchAgencyId: number | null = null;\r\n  searchStateId: number | null = null;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  user: any = this.authService.getCurrentUser();\r\n  hasAccessToAll = this.permissionService.checkPermission(Permission.AccessAllAgencies);\r\n  canSearchAgencies: boolean = this.permissionService.checkPermission(\r\n    Permission.SearchAgencies\r\n  );\r\n  payload: any = {};\r\n\r\n  searchForm!: FormGroup;\r\n  initStateId: number = 0;\r\n  initAgencyId: number = 0;\r\n\r\n  isMenuOpen = false;\r\n  tableColumns = [\r\n    { columnDef: 'agencyName', header: 'Agency Name', type: 'text' },\r\n    { columnDef: 'cdsCode', header: 'Agency Code', type: 'text' },\r\n    {\r\n      columnDef: 'siteCodeTypeName',\r\n      header: 'Agency Code Type',\r\n      type: 'text',\r\n    },\r\n    { columnDef: 'stateCode', header: 'State', type: 'text' },\r\n    { columnDef: 'siteTypeName', header: 'Type', type: 'text' },\r\n    { columnDef: 'vendorNames', header: 'Vendor', type: 'bulletList' },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n  ];\r\n\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  public get ModalType() {\r\n    return ModalType;\r\n  }\r\n\r\n  get agencyName() {\r\n    return this.searchForm.get('agencyName')\r\n  }\r\n  get typeId() {\r\n    return this.searchForm.get('typeId');\r\n  }\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private agencyService: AgencyService,\r\n    public modal: MatDialog,\r\n    public authService: AuthService,\r\n    private permissionService: PermissionService\r\n  ) { }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    if(this.paginator)\r\n      this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.createInitialPayload();\r\n    this.loadTableData();\r\n\r\n    this.paginateAgency(true);\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.initStateId = this.user.stateId;\r\n    this.initAgencyId = this.user.agencyId;\r\n\r\n    this.searchForm = this.fb.group({\r\n      agencyName: [''],\r\n      typeId: [null],\r\n      stateId: [this.initStateId ?? null],\r\n      agencyId: [this.initAgencyId ?? null],\r\n    });\r\n  }\r\n\r\n  createInitialPayload() {\r\n    this.payload = {\r\n      agencyName: '',\r\n      agencyId: this.user.agencyId,\r\n      stateId: this.user.stateId,\r\n      typeId: 0,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1,\r\n    };\r\n  }\r\n\r\n  loadTableData() {\r\n    this.getAgencyList(true, this.payload);\r\n  }\r\n\r\n  getInitialAgencyId(): number | null {\r\n    return this.hasAccessToAll ? null : this.user.agencyId;\r\n  }\r\n\r\n  getAgenciesByUser(): void {\r\n    this.agencyService\r\n      .getCurrentAgenciesByUser()\r\n      .pipe(take(1))\r\n      .subscribe((res: IAgency[]) => {\r\n        this.dataSource.data = res;\r\n        this.table?.reRender(res);\r\n      });\r\n  }\r\n\r\n  getAgencyList(resetPage?: boolean, payload?: any): void {\r\n    this.agencyService\r\n      .getAgenciesByPage(payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: any) => {\r\n        if (res) {\r\n          if (resetPage) {\r\n            this.paginator?.firstPage();\r\n          }\r\n          this.initializeTableData(res);\r\n          if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n        }\r\n      });\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.tableData = res.data;\r\n    this.tableData.forEach((item: any) => {\r\n      if (item.vendorNames) {\r\n        item.vendorNames = item.vendorNames.split('|').map((name: string) => name.trim());\r\n      }\r\n    });\r\n    this.dataSource = new MatTableDataSource(this.tableData);\r\n    this.totalData = res.totalData;\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData, type?: string): void {\r\n    const modalRef = this.modal.open(AddEditAgencyComponent, {\r\n      data: editData\r\n        ? editData\r\n        : type\r\n          ? { id: 0, isHeadStartGrantee: type == 'grantee' }\r\n          : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((result: any) => {\r\n      if (result.success) {\r\n        this.agencySelect?.refreshList();\r\n        this.loadTableData();\r\n      }\r\n    });\r\n  }\r\n\r\n  search() {\r\n    this.pageSizeOptions = [5, 10, 25];\r\n    this.pageSize = 10;\r\n    this.paginator.pageSize = 10;\r\n\r\n    this.payload = {\r\n      agencyName: this.agencyName?.value?.trim() ?? '',\r\n      agencyId: this.agencyId?.value,\r\n      stateId: this.stateId?.value,\r\n      typeId: this.typeId?.value,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1\r\n    };\r\n\r\n    this.getAgencyList(true, this.payload);\r\n  }\r\n\r\n  onClear() {\r\n    this.searchForm.reset({\r\n      agencyName: '',\r\n      typeId: null,\r\n      stateId: this.initStateId,\r\n      agencyId: this.getInitialAgencyId(),\r\n    });\r\n\r\n    this.dataSource.data = [];\r\n    this.totalData = 0;\r\n    this.payload = {\r\n      agencyName: '',\r\n      agencyId: this.user.agencyId,\r\n      stateId: this.user.stateId,\r\n      typeId: 0,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1,\r\n    };\r\n    this.paginator.firstPage();\r\n\r\n    this.agencySelect?.clearSelected();\r\n    this.stateSelect?.clearSelected();\r\n    this.typeSelect?.clearSelected();\r\n\r\n    this.loadTableData();\r\n  }\r\n\r\n  paginateAgency(event: any): void {\r\n    if (this.paginator && this.paginator.pageSize !== undefined) {\r\n      const payload = this.payload;\r\n      const previousPageSize = payload.itemsPerPage;\r\n      payload.itemsPerPage = this.paginator.pageSize;\r\n      payload.pageIndex = this.paginator.pageIndex + 1;\r\n\r\n      const isPageSizeChanged = previousPageSize !== payload.itemsPerPage;\r\n\r\n      this.getAgencyList(isPageSizeChanged, payload);\r\n    }\r\n  }\r\n\r\n  handleState(event: any) {\r\n    this.stateId?.setValue(event?.id);\r\n  }\r\n\r\n  handleAgency(event: any) {\r\n    this.agencyId?.setValue(event?.id);\r\n  }\r\n\r\n  handleType(event: any) {\r\n    this.typeId?.setValue(event?.id);\r\n  }\r\n}\r\n","<div class=\"rounded-lg\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{ label }}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div id=\"classroomAssignment\" mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-x-10 p-3\" [formGroup]=\"classroomForm\">\r\n      <div *ngIf=\"hasAccessToAgencies\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-state [initialStateId]=\"selectedState\"\r\n                           (state)=\"handleDropdown($event, selectType.States)\"\r\n                           [required]=\"true\"\r\n                           [isValid]=\"!stateId.touched || stateId.valid\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div *ngIf=\"hasAccessToAgencies\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-agency [initialAgencyId]=\"selectedAgency\"\r\n                            (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n                            [stateId]=\"selectedState\"\r\n                            [required]=\"true\"\r\n                            [isValid]=\"!agencyId.touched || agencyId.valid\"\r\n                            [clear]=\"clearDropdown\"\r\n                            >\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-filter-select label=\"Classroom\" [options]=\"options\" [selectType]=\"select.Class\"\r\n          (onSelected)=\"handleDropdown($event, select.Class)\" [multiSelect]=\"false\"\r\n          [required]=\"true\" [initialValues]=\"selectedClassrooomId\" [showPilot]=\"true\">\r\n        </drdp-filter-select>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-teacher (teacherOfRecord)=\"handleDropdown($event, role.TeacherOfRecord)\"\r\n                             [initialTeacherId]=\"teacherOfRecordId.value\"\r\n                             [agencyId]=\"agencyId.value\"\r\n                             [requireSite]=\"true\"\r\n                             [siteId]=\"siteId\"\r\n                             [clear]=\"clearDropdown\"\r\n                             [required]=\"true\"\r\n                             [isValid]=\"!teacherOfRecordId.touched || teacherOfRecordId.valid\"\r\n                             [allTeachers]=\"false\"\r\n                             [teacherType]=\"role.TeacherOfRecord\">\r\n        </drdp-select-teacher>\r\n      </div>\r\n\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-rating-period (ratingPeriod)=\"handleDropdown($event, selectType.RatingPeriods)\"\r\n                                   [initialRatingPeriodId]=\"ratingPeriodId.value\"\r\n                                   [agencyId]=\"agencyId.value\"\r\n                                   [required]=\"true\"\r\n                                   [disabled]=\"!canEditRatingPeriods\"\r\n                                   [isValid]=\"!ratingPeriodId.touched || ratingPeriodId.valid\"\r\n                                   [displayFutureRps]=\"true\"\r\n                                   [clear]=\"clearDropdown\"\r\n                                   [showPilotRps]=\"isPilotClassroom\">\r\n        </drdp-select-rating-period>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-teacher (teacher)=\"handleDropdown($event, role.Teacher)\"\r\n                             [initialTeachersId]=\"teachers.value\"\r\n                             [agencyId]=\"agencyId.value\"\r\n                             [siteId]=\"siteId\"\r\n                             [multiSelect]=\"true\"\r\n                             [multiSelectInitVals]=\"true\"\r\n                             [required]=\"false\"\r\n                             [requireSite]=\"true\"\r\n                             [clear]=\"clearDropdown\"\r\n                             [allTeachers]=\"false\"\r\n                             [teacherType]=\"role.Teacher\">\r\n        </drdp-select-teacher>\r\n      </div>\r\n    </form>\r\n\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn type=\"submit\" mat-button [disabled]=\"classroomForm.invalid\" cdkFocusInitial (click)=\"onSubmit()\">Save</drdp-btn>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators,  } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport {  take, tap } from 'rxjs';\r\nimport { IClassroom, IClassroomSearchRequest, IUpdateClass } from '@core/interfaces/iclasses';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Role } from '@core/enums/roles';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { mapClassResToDRDPSelect } from '@core/services/helper.service';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-classes',\r\n  templateUrl: './add-edit-classes.component.html',\r\n  styleUrls: ['./add-edit-classes.component.scss'],\r\n})\r\n\r\nexport class AddEditClassesComponent implements OnInit {\r\n  classroomForm: FormGroup | any;\r\n  user = this.authService.getCurrentUser();\r\n  options: any;\r\n  label?: string;\r\n  currentSchoolYear?: number;\r\n  isNewClassroom?: boolean = true;\r\n  hasAccessToAgencies?: boolean;\r\n  siteId?: number | null;\r\n  payload: IUpdateClass = {};\r\n  clearDropdown = false;\r\n  canEditRatingPeriods: boolean = false;\r\n  isPilotClassroom: boolean = false;\r\n\r\n  selectedState?: number | null;\r\n  selectedAgency?: number | null;\r\n  selectedRatingPeriodId?: number | null;\r\n  selectedTeachers?: number[] | null;\r\n  selectedTeacherOfRecordId?: number | null;\r\n  selectedClassrooomId?: number | null;\r\n  selectedClassroomName?: string | null;\r\n  select = SelectType;\r\n  maxTeachersPerClass: number = 12;\r\n\r\n\r\n  get selectType() { return SelectType; }\r\n  get role() { return Role; }\r\n\r\n  get ratingPeriodId() { return this.classroomForm.get('ratingPeriodId'); }\r\n  get teacherOfRecordId() { return this.classroomForm.get('teacherOfRecordId'); }\r\n  get teachers() { return this.classroomForm.get('teachers'); }\r\n  get agencyId() { return this.classroomForm.get('agencyId'); }\r\n  get stateId() { return this.classroomForm.get('stateId'); }\r\n  get classroomId() { return this.classroomForm.get('classroomId'); }\r\n\r\n  constructor(\r\n    @Inject(MAT_DIALOG_DATA) public editData: any,\r\n    public dialogRef: MatDialogRef<AddEditClassesComponent>,\r\n    private fb: FormBuilder,\r\n    public toast: ToastService,\r\n    private classroomService: ClassroomService,\r\n    private classService: ClassService,\r\n    private authService: AuthService,\r\n    private agency: AgencyService,\r\n    private lookup: LookupService) {  dialogRef.disableClose = true }\r\n\r\n  ngOnInit(): void {\r\n    this.hasAccessToAgencies = this.authService.isSuperUser() || this.authService.isWestEdPilot();\r\n    this.initializeForm();\r\n    this.getClassroomNames();\r\n\r\n    this.lookup.getCurrentSchoolYear().pipe(\r\n      take(1),\r\n      tap((schoolYear: any) => this.currentSchoolYear = schoolYear.id)\r\n    ).subscribe();\r\n\r\n    if (!this.editData) {\r\n      this.selectedState = this.user.stateId;\r\n      this.selectedAgency = this.user.agencyId;\r\n      this.label = \"Add Teacher Assignments and Rating Periods\";\r\n      this.canEditRatingPeriods = true;\r\n    } else {\r\n      this.label = \"Edit Teacher Assignments and Rating Periods\";\r\n      this.canEditRatingPeriods = this.canEditRatingPeriod(this.editData.data.minStartDate);\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.classroomForm = this.fb.group({\r\n      classroomId: [null, Validators.required],\r\n      ratingPeriodId: [null, Validators.required],\r\n      teacherOfRecordId: [null, Validators.required],\r\n      teachers: [null],\r\n      agencyId: [this.user.agencyId, Validators.required],\r\n      stateId: [this.user.stateId, Validators.required]\r\n    });\r\n\r\n    if (this.editData) {\r\n      const edit = this.editData.data;\r\n\r\n      this.selectedState = edit.stateId;\r\n      this.selectedAgency = edit.agencyId;\r\n      this.selectedRatingPeriodId = edit.ratingPeriodId;\r\n      this.selectedTeachers = edit.teacherIds;\r\n      this.selectedTeacherOfRecordId = edit.teacherOfRecordId;\r\n      this.selectedClassrooomId = edit.classroomId;\r\n      this.selectedClassroomName = edit.name;\r\n\r\n      this.classroomForm.patchValue({\r\n        classroomName: edit.name,\r\n        classroomId: this.selectedClassrooomId,\r\n        ratingPeriodId: this.selectedRatingPeriodId,\r\n        teacherOfRecordId: this.selectedTeacherOfRecordId,\r\n        teachers: this.selectedTeachers,\r\n        agencyId: this.selectedAgency,\r\n        stateId: this.selectedState\r\n      });\r\n      this.siteId = edit.siteId;\r\n    }\r\n  }\r\n\r\n  canEditRatingPeriod(minStartDate: Date): boolean {\r\n    const today = new Date();\r\n    const dateWithoutTime = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n    return new Date(minStartDate) > dateWithoutTime;\r\n  }\r\n\r\n  getClassroomNames():void {\r\n      let req: IClassroomSearchRequest = {\r\n          stateId: this.stateId.value,\r\n          agencyId: this.agencyId.value\r\n      }\r\n      this.classroomService.getClassroomByUserAccess((req)).pipe(take(1))\r\n      .subscribe((res: IClassroom[]) => {\r\n        if (res) {\r\n          this.options = mapClassResToDRDPSelect(res, true, true);\r\n        }\r\n      });\r\n\r\n  }\r\n\r\n  handleDropdown(data: any, type: string | number): void {\r\n    switch (type) {\r\n      case this.selectType.States:\r\n        this.selectedState = data ? data.id : null;\r\n        this.stateId.setValue(this.selectedState);\r\n        this.stateId.markAsTouched();\r\n\r\n        if (this.selectedState) {\r\n          this.agency.getAgenciesByState([this.selectedState]).pipe(\r\n            take(1),\r\n            tap((agency: IAgency[]) => {\r\n              this.selectedAgency = agency[0] ? agency[0].id : null;\r\n              this.agencyId.setValue(this.selectedAgency);\r\n            }),\r\n            tap(_ => {\r\n              this.clearDropdown = true;\r\n              this.stateId.setValue(this.selectedState);\r\n            })\r\n          ).subscribe();\r\n        }\r\n        break;\r\n      case this.selectType.Agencies:\r\n        this.selectedAgency = data ? data.id : null;\r\n        this.agencyId.setValue(this.selectedAgency);\r\n        this.agencyId.markAsTouched();\r\n        this.getClassroomNames();\r\n        break;\r\n      case this.selectType.Class:\r\n        this.siteId = null;\r\n        this.selectedClassrooomId = data ? data.id : null;\r\n        this.selectedClassroomName = data ? data.name : null;\r\n        this.classroomId.setValue(this.selectedClassrooomId);\r\n        if (data?.id) {\r\n          const classroom = this.options.find((c:any) => c.id === data.id);\r\n          this.siteId = classroom?.siteId ?? null;\r\n        }\r\n        this.classroomId.markAsTouched();\r\n        this.isPilotClassroom = data.isPilot;\r\n        if (this.isPilotClassroom) this.ratingPeriodId.setValue(null);\r\n        break;\r\n      case this.selectType.RatingPeriods:\r\n        this.selectedRatingPeriodId = data ? data.id : null;\r\n        this.ratingPeriodId.setValue(this.selectedRatingPeriodId);\r\n        this.ratingPeriodId.markAsTouched();\r\n        break;\r\n      case Role.TeacherOfRecord:\r\n        this.selectedTeacherOfRecordId = data ? data.id : null;\r\n        this.teacherOfRecordId.setValue(this.selectedTeacherOfRecordId);\r\n        this.teacherOfRecordId.markAsTouched();\r\n        break;\r\n      case Role.Teacher:\r\n        this.selectedTeachers = data ? data.map((teacher: any) => teacher.id) : null;\r\n        this.teachers.setValue(this.selectedTeachers);\r\n        this.teachers.markAsTouched();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  onSubmit(): any {\r\n    if (this.classroomForm.invalid) {\r\n      this.toast.error(\"Form not complete\");\r\n      return;\r\n    }\r\n\r\n    if (this.teachers.value && this.teachers.value.length > this.maxTeachersPerClass) {\r\n      this.toast.error(`Only ${this.maxTeachersPerClass} teachers can be assigned to one class.`);\r\n      return;\r\n    }\r\n\r\n    this.payload = {\r\n      id: this.editData?.data?.id ?? 0,\r\n      ...this.classroomForm.value\r\n    }\r\n\r\n    var message = '';\r\n\r\n    if (this.payload.id == 0) {\r\n      message =  `Added ${this.selectedClassroomName} Assignments and Terms`;\r\n    } else {\r\n      message = `Updated ${this.selectedClassroomName} Assignments and Terms`;\r\n    }\r\n\r\n    this.classService.saveAll(this.payload, message).pipe(take(1)).subscribe((res:boolean) => {\r\n      if (res) {\r\n        this.dialogRef.close();\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n}\r\n","<div class=\"md:p-5 sm:container sm:mx-auto\">\r\n  <div class=\"grid grid-cols-2\">\r\n    <div class=\"col-span-2 lg:col-span-1\">\r\n      <drdp-title title=\"Teacher Assignments and Rating Periods\" additionalClasses=\"text-2xl\"></drdp-title>\r\n    </div>\r\n    <div class=\"col-span-2 lg:col-span-1 justify-self-center lg:justify-self-end self-baseline mb-5 lg:mb-0\">\r\n      <drdp-btn (click)=\"openModal()\"\r\n                *drdpCheckPermission=\"Permission.CreateClassrooms\">\r\n                <i class=\"uil uil-plus\"></i>\r\n                Add Teacher Assignments and Rating Periods\r\n      </drdp-btn>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <div class=\"w-full\">\r\n      <drdp-search\r\n        *ngIf=\"true\"\r\n        [searchInput]=\"searchInput\"\r\n        [requiredFields]=\"requiredFields\"\r\n        [allTeachers]=\"true\"\r\n        (clear)=\"onClear()\"\r\n        (search)=\"searchTable($event)\">\r\n      </drdp-search>\r\n      <drdp-add-edit-table\r\n          [dataSource]=\"dataSource\"\r\n          [tableData]=\"tableData\"\r\n          [columns]=\"tableColumns\"\r\n          (editActionItem)=\"openModal($event)\"\r\n          (deleteActionItem)=\"deleteModal($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n</div>\r\n","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { AddEditClassesComponent } from './add-edit-classes/add-edit-classes.component';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { IClass, IClassSearchRequest, ITeacherAssignment } from '@core/interfaces/iclasses'\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Subscription, take } from 'rxjs';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IRatingPeriod, ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { IDropdownSearchRequestDto } from '@core/interfaces/idropdown';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IRequiredFields } from '@core/interfaces/irequired-fields';\r\nimport { LookupService } from '@core/services/lookup.service';\r\n\r\n\r\n@Component({\r\n  selector: 'drdp-classes',\r\n  templateUrl: './classes.component.html',\r\n  styleUrls: ['./classes.component.scss'],\r\n})\r\n\r\nexport class ClassesComponent implements OnInit, OnDestroy {\r\n  constructor(\r\n    private classService: ClassService,\r\n    public modal: MatDialog,\r\n    private fb: FormBuilder,\r\n    private authService: AuthService,\r\n    public PermissionService: PermissionService,\r\n    private toast: ToastService,\r\n    private classEnrollmentService: StudentClassEnrollmentService,\r\n    private lookupService: LookupService) {}\r\n\r\n  public get Permission() { return Permission }\r\n  private subscriptions = new Subscription();\r\n  @ViewChild(AddEditClassesComponent) table?: AddEditClassesComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('schoolYearSelect') schoolYearSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('teacherSelect') teacherSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('teacherOfRecordSelect') teacherOfRecordSelect: FilterSelectComponent | undefined;\r\n  user = this.authService.getCurrentUser();\r\n  classSearch: FormGroup | any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  receivedPayload?: any;\r\n  payload: IClassSearchRequest = {\r\n    itemsPerPage: 10\r\n  };\r\n  dropdownPayload: IDropdownSearchRequestDto = {\r\n    agencyId: this.user.agencyId\r\n  }\r\n  isAdmin = this.PermissionService.checkPermission(Permission.DeleteClassrooms);\r\n  canEdit = this.PermissionService.checkPermission(Permission.EditClassrooms);\r\n  canDelete = this.PermissionService.checkPermission(Permission.DeleteClassrooms);\r\n  isSuperUser = this.authService.isSuperUser();\r\n\r\n  schoolYearList: ISchoolYear[] | undefined = [];\r\n  ratingPeriodList: IRatingPeriod[] | undefined = [];\r\n  classTeacherList: IUser[] | any = [];\r\n\r\n  selectSchoolYear = SelectType.SchoolYear;\r\n  selectRatingPeriod = SelectType.RatingPeriods;\r\n  selectTeacher = SelectType.Teacher;\r\n  selTeacherOfRecord = SelectType.TeacherOfRecord;\r\n\r\n  initialRatingPeriodId: any | undefined;\r\n  initialSchoolYearId: any | undefined;\r\n  initialTeacherId: any | undefined;\r\n  currentSchoolYearId: number | undefined;\r\n\r\n  searchInput: ISearchInput = {\r\n    searchName: true,\r\n    searchAgency: true,\r\n    searchState: true,\r\n    searchYear: true,\r\n    searchRatingPeriod: true,\r\n    searchTeacher: true,\r\n    searchTeacherOfRecord: true\r\n  }\r\n\r\n  requiredFields: IRequiredFields = {\r\n    name: false,\r\n    teacher: false,\r\n    siteType: false,\r\n    period: false,\r\n    site: false,\r\n    state: true,\r\n    agency: true,\r\n    year: true,\r\n    teacherOfRecord: false\r\n  }\r\n\r\n  get search() { return this.classSearch.get('search') }\r\n\r\n  tableColumns = [\r\n    { columnDef: 'name', header: 'Classroom', type: 'text' },\r\n    { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n    { columnDef: 'ratingPeriodName', header: 'Rating Period', type: 'text' },\r\n    { columnDef: 'teacherOfRecordName', header: 'Teacher of Record', type: 'text' },\r\n    { columnDef: 'teachers', header: 'Teacher Names', type: 'bulletList' },\r\n  ];\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.canEdit) {\r\n      this.tableColumns.push({ columnDef: 'edit', header: 'Edit', type: 'edit' })\r\n    }\r\n    if (this.canDelete) {\r\n      this.tableColumns.push({ columnDef: 'delete', header: 'Delete', type: 'delete' })\r\n    }\r\n    this.initializeForms();\r\n    this.lookupService.getCurrentSchoolYear().pipe(take(1)).subscribe((res: any) => {\r\n      if (res) this.currentSchoolYearId = res.id;\r\n    });\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.classSearch  = this.fb.group({\r\n      search: ['', Validators.required],\r\n    })\r\n  }\r\n\r\n  checkStudentEnrollment(classId: number) {\r\n     return this.classEnrollmentService.checkStudentEnrollment(classId).subscribe();\r\n  }\r\n\r\n  searchTable(event: any): void {\r\n    const payload = this.createSearchPayload(true, event);\r\n    this.classService.search(payload).pipe(take(1)).subscribe((res: any) => {\r\n      if (res) {\r\n        this.initializeTableData(res);\r\n      }\r\n    })\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData): void {\r\n    if (editData?.data?.schoolYearId && editData?.data?.schoolYearId != this.currentSchoolYearId) {\r\n      this.toast.error('Classroom Assignment cannot be edited.  School Year has ended.');\r\n      return;\r\n    }\r\n    const dialogRef = this.modal.open(AddEditClassesComponent, {\r\n      data: editData ? editData : undefined });\r\n\r\n    dialogRef.afterClosed().subscribe(() => {\r\n      this.initializeTable();\r\n    });\r\n  }\r\n\r\n\r\n  deleteModal(event: IModalEmitData): void {\r\n    const selectedClassId = event.data.id;\r\n    this.classEnrollmentService.checkStudentEnrollment(selectedClassId).subscribe((res: boolean) => {\r\n      if (res) {\r\n        event.data.modalInfo = {\r\n          title: `${event.data.name} cannot be deleted`,\r\n          message: `There is one or more children currently enrolled in this classroom.  The classroom can not be deleted.  For assistance, please contact WestEd at 1-800-770-6339 or email DRDPOnline@wested.org.`,\r\n          name: event.data.name,\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: Modal.Confirm\r\n        }\r\n        const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n        modalRef.afterClosed().subscribe();\r\n      } else {\r\n        event.data.modalInfo = {\r\n          title: `Delete ${event.data.name}`,\r\n          message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.name}</span>?`,\r\n          name: event.data.name,\r\n          primaryBtnClass: 'red',\r\n          primaryBtnText: Modal.Delete,\r\n          showCancel: true\r\n        }\r\n        const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n        modalRef.afterClosed().subscribe(res => {\r\n          if (res) {\r\n            this.removeClass(selectedClassId, event.data.name);\r\n          }\r\n        });\r\n      }\r\n    })\r\n  }\r\n\r\n  removeClass(classId: any, classroomName: string): void {\r\n    this.subscriptions.add(this.classService.deleteAll(classId, `Deleted ${classroomName} Assignments and Terms`).subscribe((res: boolean) => {\r\n      this.initializeTable();\r\n    }))\r\n  }\r\n\r\n  initializeTable(): void {\r\n    this.payload.stateId =  this.payload.stateId ?? this.user.stateId;\r\n    this.payload.agencyId = this.payload.agencyId ?? this.user.agencyId;\r\n    this.payload.itemsPerPage = this.payload.itemsPerPage ?? this.paginator.pageSize;\r\n    this.subscriptions.add(this.classService.search(this.payload).subscribe((res: IClass) => {\r\n      if (res) this.initializeTableData(res);\r\n    }))\r\n  }\r\n\r\n\r\n  initializeTableData(res: any): void {\r\n    const { items, totalData } = res.classes;\r\n    this.getTeacherNames(items);\r\n    this.dataSource = new MatTableDataSource(items);\r\n    this.totalData = totalData;\r\n    this.tableData = items;\r\n  }\r\n\r\n  onClear(): void {\r\n    this.payload = {};\r\n    this.paginator.pageSize = 10;\r\n    this.clearTable();\r\n    this.initializeForms();\r\n  }\r\n\r\n  clearTable(): void {\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n  }\r\n\r\n  getTeacherNames(res: any): void {\r\n    res.map((classroom: any) => {\r\n      classroom.teachers = classroom.teachers?.split('|') ?? [];\r\n      classroom.teacherIds = classroom.teacherIds?.split('|').map(Number) ?? [];\r\n    })\r\n    return res;\r\n  }\r\n\r\n  createSearchPayload(resetPage: boolean, event: any): IClassSearchRequest {\r\n    this.payload.search = event.SearchName ?? \"\";\r\n    this.payload.agencyId = this.isSuperUser ? event.AgencyId ?? \"\" : event.AgencyId ?? this.user.agencyId;\r\n    this.payload.schoolYearId = event.SchoolYearId ?? \"\";\r\n    this.payload.ratingPeriodId = event.RatingPeriodId ?? \"\";\r\n    this.payload.teacherId = event.TeacherId ?? \"\";\r\n    this.payload.teacherOfRecordId = event.TeacherOfRecordId ?? \"\";\r\n    this.payload.stateId = this.isSuperUser ? event.StateId ?? \"\" : event.StateId ?? this.user.stateId;\r\n    resetPage ? this.payload.pageIndex = 0 : this.payload.pageIndex = this.paginator.pageIndex + 1;\r\n    resetPage ? this.payload.itemsPerPage = 10 : this.payload.itemsPerPage = this.paginator.pageSize;\r\n    return this.payload;\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    resetPage ? this.payload.pageIndex = 0 : this.payload.pageIndex = this.paginator.pageIndex + 1;\r\n    resetPage ? this.payload.itemsPerPage = 10 : this.payload.itemsPerPage = this.paginator.pageSize;\r\n    this.classService.search(this.payload).pipe(take(1)).subscribe((res: any) => {\r\n      if (res) {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(res);\r\n        if (res.classes.totalData > 25) this.pageSizeOptions.push(res.classes.totalData);\r\n      }\r\n    })\r\n  }\r\n\r\n  ngOnDestroy():void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { Router } from '@angular/router';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-states',\r\n  templateUrl: './states.component.html',\r\n  styleUrls: ['./states.component.scss'],\r\n})\r\nexport class StatesComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  searchTerm?: string;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  canEditState = false;\r\n  tableColumns = [\r\n    { columnDef: 'stateName', header: 'State Name', type: 'text' },\r\n    { columnDef: 'stateCode', header: 'State Code', type: 'text' },\r\n  ];\r\n\r\n  searchInput: ISearchInput = {\r\n    searchName: true,\r\n  };\r\n\r\n  constructor(\r\n    private stateService: StateService,\r\n    public toast: ToastService,\r\n    private route: Router,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.canEditState = this.permissionService.checkPermission(\r\n      Permission.EditStates\r\n    );\r\n    if (this.canEditState) {\r\n      this.tableColumns.push({\r\n        columnDef: 'isSelectable',\r\n        header: 'Active',\r\n        type: 'toggleSwitch',\r\n      });\r\n      this.tableColumns.push({\r\n        columnDef: 'edit',\r\n        header: 'Edit',\r\n        type: 'edit',\r\n      });\r\n    } else {\r\n      this.tableColumns.push({\r\n        columnDef: 'isActive',\r\n        header: 'Active',\r\n        type: 'text',\r\n      });\r\n    }\r\n\r\n    this.getStates();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  getStates(): void {\r\n    this.stateService.getAllStates().subscribe((res: any) => {\r\n      this.tableData = res;\r\n      this.initializeTableData(res);\r\n    });\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource.data = res;\r\n    this.totalData = res.length;\r\n  }\r\n\r\n  searchTable(search: any) {\r\n    const originalStateList = this.tableData;\r\n    if (search.SearchName) {\r\n      const filter = originalStateList.filter((item: IState) => {\r\n        return item.stateName\r\n          .toLowerCase()\r\n          .includes(search.SearchName.toLowerCase());\r\n      });\r\n      this.initializeTableData(filter);\r\n    } else {\r\n      this.initializeTableData(originalStateList);\r\n    }\r\n  }\r\n\r\n  changeActiveStatus($event: any) {\r\n    const stateInfo: IState = {\r\n      id: $event.data.id,\r\n      stateCode: $event.data.stateCode,\r\n      stateName: $event.data.stateName,\r\n      isSelectable: ($event.data.isSelectable = !$event.data.isSelectable),\r\n    };\r\n\r\n    this.stateService.editStates(stateInfo).subscribe();\r\n  }\r\n\r\n  editConfiguration(state: any): void {\r\n    let { data } = state;\r\n    this.route.navigateByUrl(`config/states-configurations/${data.id}`, {\r\n      state: data,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <drdp-title title=\"States\"></drdp-title>\r\n\r\n  <drdp-container>\r\n    <drdp-search [textInputPlaceholder]=\"'State Name'\" [searchInput]=\"searchInput\" (search)=\"searchTable($event)\" (clear)=\"searchTable($event)\"></drdp-search>\r\n\r\n    <div class=\"p-5 w-full\">\r\n\r\n        <drdp-add-edit-table [dataSource]=\"dataSource\"\r\n                             [columns]=\"tableColumns\"\r\n                             (toggleSwitchActionItem)=\"changeActiveStatus($event)\"\r\n                             (editActionItem)=\"editConfiguration($event)\"\r\n                             >\r\n        </drdp-add-edit-table>\r\n\r\n    </div>\r\n  </drdp-container>\r\n\r\n  <mat-paginator\r\n                 [pageSizeOptions]=\"pageSizeOptions\"\r\n                 [pageSize]=\"pageSize\"\r\n                 [length]=\"totalData\"\r\n                 >\r\n  </mat-paginator>\r\n</div>\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{ !editData ? 'Add New Site' : 'Edit Site' }}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-x-10\" [formGroup]=\"siteForm\">\r\n\r\n      <div *ngIf=\"hasFullOptions\" class=\"input-container col-span-full md:col-span-1 z-50\">\r\n        <drdp-select-state (state)=\"onDropDownSelect($event, select.States)\" [clear]=\"clearDropdowns\"\r\n          [initialStateId]=\"state.value\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div *ngIf=\"hasFullOptions\" class=\"input-container col-span-full md:col-span-1 z-50\">\r\n        <drdp-select-agency (agency)=\"onDropDownSelect($event, select.Agencies)\" [stateId]=\"state.value\"\r\n          [initialAgencyId]=\"adminAgencyDropdown.value\" [clear]=\"clearDropdowns\">\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-full\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal\" for=\"SiteName\">Site Name <span class=\"required\"></span></label>\r\n          <input matInput placeholder=\"Site Name\" autocomplete=\"off\" type=\"text\" formControlName=\"siteName\"\r\n            maxlength=\"100\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-full\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal\" for=\"SiteCode\">Site Code</label>\r\n          <input matInput placeholder=\"Site Code\" autocomplete=\"off\" type=\"text\" formControlName=\"siteCode\"\r\n            maxlength=\"25\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"select-input col-span-full md:col-span-1\">\r\n        <drdp-select-site-code [initialCodeId]=\"siteCodeType.value\" (code)=\"onDropDownSelect($event, select.CodeType)\"\r\n          [isValid]=\"!siteCodeType.touched || siteCodeType.valid\" label=\"Site Code Type\">\r\n        </drdp-select-site-code>\r\n      </div>\r\n\r\n      <div class=\"select-input col-span-full md:col-span-1\">\r\n        <drdp-select-type [initialTypeId]=\"siteType.value\" (type)=\"onDropDownSelect($event, select.SiteType)\"\r\n          [required]=\"true\" [isValid]=\"!siteType.touched || siteType.valid\">\r\n      </drdp-select-type>\r\n      </div>\r\n\r\n      <div class=\"col-span-full md:col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal required\" for=\"siteAddress\">Site Address</label>\r\n          <input matInput placeholder=\"Site Address\" autocomplete=\"off\" type=\"text\" formControlName=\"siteAddress\"\r\n            maxlength=\"100\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\" col-span-full md:col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal required\" for=\"siteCity\">Site City</label>\r\n          <input matInput placeholder=\"Site City\" autocomplete=\"off\" type=\"text\" formControlName=\"siteCity\"\r\n            maxlength=\"25\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"select-input col-span-full md:col-span-1\" *ngIf=\"viewCountyDropdown\">\r\n        <drdp-select-county [initialCountyIds]=\"siteCounty.value\" (county)=\"onDropDownSelect($event, select.County)\"\r\n            [stateId]=\"state.value\" [multiSelect]=\"false\" [multiSelectInitVals]=\"false\"\r\n            [isValid]=\"!siteCounty.touched || siteCounty.valid\" (initCounties)=\"handleView($event)\">\r\n        </drdp-select-county>\r\n      </div>\r\n\r\n      <div class=\"select-input col-span-full md:col-span-1\">\r\n        <drdp-select-state (state)=\"onDropDownSelect($event, select.States)\" [clear]=\"clearDropdowns\"\r\n          [initialStateId]=\"state.value\" [required]=\"true\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div class=\"col-span-full md:col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"font-normal required\" for=\"SiteZip\">Site Zip</label>\r\n          <input matInput placeholder=\"Site Zip\" autocomplete=\"off\" type=\"text\" formControlName=\"siteZip\"\r\n            maxlength=\"10\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-full md:col-span-1 mt-3\" >\r\n        <div>\r\n          <label class=\"inline\">Dual Enrollment Site</label>\r\n          <i class=\"uil uil-info-circle text-lg ml-2\" matTooltip=\"State Preschool, Head Start, Family Childcare, After School Program\"></i>\r\n        </div>\r\n        <mat-checkbox color=\"primary\" formControlName=\"isDualEnrollment\">\r\n        </mat-checkbox>\r\n      </div>\r\n    </form>\r\n\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn mat-button [disabled]=\"siteForm.invalid\" cdkFocusInitial (click)=\"onSubmit()\">Save</drdp-btn>\r\n\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { ISiteCodeType, ISiteType } from '@core/interfaces/isites';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { take } from 'rxjs';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { States } from '@core/enums/states';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-sites',\r\n  templateUrl: './add-edit-sites.component.html',\r\n  styleUrls: ['./add-edit-sites.component.scss'],\r\n})\r\nexport class AddEditSitesComponent implements OnInit {\r\n  isSuperAdmin: boolean = false;\r\n  initStateId: number = 0;\r\n  initAgencyId: number = 0;\r\n  clearDropdowns = false;\r\n\r\n  siteForm: FormGroup | any;\r\n\r\n  selectedCodeType?: ISiteCodeType;\r\n  selectedType?: ISiteType;\r\n  selectedCounty?: ICounty;\r\n  selectedState?: any;\r\n  selectedStateId?: number;\r\n  user = this.auth.getCurrentUser();\r\n  hasFullOptions: boolean =\r\n    this.auth.isSuperAdmin() || this.auth.isCustomerService();\r\n  viewCountyDropdown: boolean = true;\r\n\r\n  get siteName() {\r\n    return this.siteForm.get('siteName');\r\n  }\r\n  get siteCode() {\r\n    return this.siteForm.get('siteCode');\r\n  }\r\n  get siteCodeType() {\r\n    return this.siteForm.get('siteCodeType');\r\n  }\r\n  get siteType() {\r\n    return this.siteForm.get('siteType');\r\n  }\r\n  get adminStateDropdown() {\r\n    return this.siteForm.get('adminStateDropdown');\r\n  }\r\n  get state() {\r\n    return this.siteForm.get('state');\r\n  }\r\n  get adminAgencyDropdown() {\r\n    return this.siteForm.get('adminAgencyDropdown');\r\n  }\r\n  get siteAddress() {\r\n    return this.siteForm.get('siteAddress');\r\n  }\r\n  get siteCity() {\r\n    return this.siteForm.get('siteCity');\r\n  }\r\n  get siteZipCode() {\r\n    return this.siteForm.get('siteZip');\r\n  }\r\n  get siteCounty() {\r\n    return this.siteForm.get('siteCounty');\r\n  }\r\n  get isDualEnrollment() {\r\n    return this.siteForm.get('isDualEnrollment');\r\n  }\r\n\r\n  public get select() {\r\n    return SelectType;\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<AddEditSitesComponent>,\r\n    private siteService: SiteService,\r\n    public lookup: LookupService,\r\n    private auth: AuthService,\r\n    private toast: ToastService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    (dialogRef.disableClose = true), dialogRef.updateSize('600px');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.siteForm = this.fb.group({\r\n      siteName: [null, [Validators.required, Validators.maxLength(100)]],\r\n      siteCode: [null, [Validators.maxLength(25)]],\r\n      siteCodeType: [null],\r\n      siteType: [null, [Validators.required]],\r\n      siteAddress: [null, [Validators.required, Validators.maxLength(100)]],\r\n      siteCity: [null, [Validators.required, Validators.maxLength(25)]],\r\n      siteCounty: [null],\r\n      state: [this.user.stateId, [Validators.required]],\r\n      siteZip: [null, [Validators.required, Validators.maxLength(10)]],\r\n      adminAgencyDropdown: [this.user.agencyId > 0 ? this.user.agencyId : 0],\r\n      adminStateDropdown: [0],\r\n      isDualEnrollment: [0]\r\n    });\r\n\r\n    if (this.editData) {\r\n      const edit = this.editData.data;\r\n      this.siteName.setValue(edit.siteName);\r\n      this.siteCode.setValue(edit.cdsCode);\r\n      this.state.setValue(edit.stateId);\r\n      this.siteCodeType.setValue(edit.siteCodeTypeId);\r\n      this.siteType.setValue(edit.siteTypeId);\r\n      this.siteAddress.setValue(edit.siteAddress);\r\n      this.siteCity.setValue(edit.siteCity);\r\n      this.siteCounty.setValue(edit.countyID);\r\n      this.siteZipCode.setValue(edit.siteZipCode);\r\n\r\n      this.adminAgencyDropdown.setValue(edit.agencyId);\r\n      this.adminStateDropdown.setValue(edit.agencyId);\r\n      this.isDualEnrollment.setValue(edit.isDualEnrollment);\r\n      this.initStateId = edit.stateId;\r\n      this.initAgencyId = edit.agencyId;\r\n      this.selectedCodeType = edit.siteCodeType;\r\n      this.selectedType = edit.siteType;\r\n      this.selectedCounty = edit.county;\r\n    }\r\n  }\r\n\r\n  handleView(event: boolean) {\r\n    this.viewCountyDropdown = event;\r\n  }\r\n\r\n  onDropDownSelect(event: any, selectType: string) {\r\n    this.clearDropdowns = false;\r\n    switch (selectType) {\r\n      case this.select.States:\r\n        if (event?.id == States.california || event?.id == States.newHampshire) {\r\n          this.viewCountyDropdown = true;\r\n        }\r\n        else {\r\n          this.viewCountyDropdown = false;\r\n        }\r\n        this.siteCounty.reset();\r\n        this.state.setValue(event?.id);\r\n        this.adminStateDropdown.setValue(event?.id);\r\n        break;\r\n      case this.select.Agencies:\r\n        this.adminAgencyDropdown.setValue(event?.id);\r\n        break;\r\n      case this.select.CodeType:\r\n        this.siteCodeType.setValue(event?.id);\r\n        this.siteCodeType.markAsTouched();\r\n        this.selectedCodeType = event;\r\n        break;\r\n      case this.select.SiteType:\r\n        this.siteType.setValue(event?.id);\r\n        this.siteType.markAsTouched();\r\n        this.selectedType = event;\r\n        break;\r\n      case SelectType.County:\r\n        this.selectedCounty = event;\r\n        this.siteCounty.setValue(event?.id);\r\n        this.siteCounty.markAsTouched();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  // Sends Payload obj to parent\r\n  onSubmit() {\r\n    if (this.siteForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    let payload = {\r\n      id: this.editData ? this.editData.data.id : 0,\r\n      RegionId: 1,\r\n      agencyId: this.adminAgencyDropdown.value,\r\n      cdsCode: this.siteCode.value,\r\n      countyId: this.siteCounty.value,\r\n      isActive: true,\r\n      isDualEnrollment: this.isDualEnrollment.value,\r\n      siteAddress: this.siteAddress.value,\r\n      siteCity: this.siteCity.value,\r\n      siteName: this.siteName.value,\r\n      siteTypeId: this.siteType.value,\r\n      siteCodeTypeId: this.siteCodeType.value,\r\n      siteZipCode: this.siteZipCode.value\r\n    };\r\n\r\n    let updateTableView = {\r\n      id: this.editData ? this.editData.data.id : 0,\r\n      siteName: this.siteName.value,\r\n      cdsCode: this.siteCode.value,\r\n      siteType: this.siteType.value,\r\n      siteCodeType: this.siteCodeType.value,\r\n      siteAddress: this.siteAddress.value,\r\n      siteCity: this.siteCity.value,\r\n      siteZipCode: this.siteZipCode.value,\r\n      countyId: this.siteCounty.value,\r\n      states: this.state.value\r\n    };\r\n\r\n    if (this.editData) {\r\n      this.siteService\r\n        .updateSite(payload, 'Site has been succesfully updated.')\r\n        .pipe(take(1))\r\n        .subscribe((success: boolean) => {\r\n          if (success) {\r\n            this.dialogRef.close({\r\n              success: true,\r\n              updateTableView: updateTableView,\r\n            });\r\n          }\r\n        });\r\n    } else {\r\n      this.siteService\r\n        .addSite(payload, 'Site has been successfully added.')\r\n        .pipe(take(1))\r\n        .subscribe((result: any) => {\r\n          if (result && result.id > 0) {\r\n            this.dialogRef.close({\r\n              success: true,\r\n              updateTableView: updateTableView,\r\n            });\r\n          }\r\n        });\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-1/2\">\r\n      <drdp-title title=\"Sites\"></drdp-title>\r\n    </div>\r\n    <div class=\"basis-1/2\">\r\n      <div class=\"flex justify-end items-end\">\r\n        <drdp-btn *drdpCheckPermission=\"Permission.CreateSites\" (click)=\"openModal()\">\r\n          <i class=\"uil uil-plus\"></i>\r\n          Add New Site\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <drdp-container>\r\n    <drdp-search\r\n      (search)=\"searchSite($event)\"\r\n      (clear)=\"onClear()\"\r\n      [searchInput]=\"searchInput\"\r\n      [reload]=\"reload\"\r\n      textInputPlaceholder=\"Site Name\">\r\n    </drdp-search>\r\n    <div class=\"p-5 w-full\">\r\n      <drdp-add-edit-table\r\n        class=\"whitespace-pre-wrap\"\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\" \r\n        [isSuperAdmin]=\"hasAccessToAll\"\r\n        (editActionItem)=\"openModal($event)\"\r\n        (toggleSwitchActionItem)=\"changeActiveStatus($event)\"\r\n        (deleteActionItem)=\"deleteModal($event)\"\r\n        toggleMsg=\"Are you sure you want to deactivate this site?\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n  <mat-paginator\r\n    [pageSizeOptions]=\"pageSizeOptions\"\r\n    [pageSize]=\"pageSize\"\r\n    [length]=\"totalData\"\r\n    [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginate(false)\">\r\n  </mat-paginator>\r\n</div>\r\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { Observable, Subscription, take } from 'rxjs';\r\nimport { AddEditSitesComponent } from './add-edit-sites/add-edit-sites.component';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-sites',\r\n  templateUrl: './sites.component.html',\r\n  styleUrls: ['./sites.component.scss'],\r\n})\r\nexport class SitesComponent implements OnInit, OnDestroy {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageIndex = 1;\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  searchObj?: any;\r\n  siteSearchName?: string = '';\r\n  siteType = 0;\r\n  siteId = 0;\r\n\r\n  hasAccessToAll = this.permissionService.checkPermission(Permission.AccessAllAgencies);\r\n  hasAccessToAssigned = this.permissionService.checkPermission(Permission.AccessAssignedStateAgencies);\r\n  isToggleActive = this.permissionService.checkPermission(Permission.DeactivateSites);\r\n  isEditable: boolean = false;\r\n  isDeletable: boolean = false;\r\n  reload = false;\r\n\r\n  data?: Observable<any>;\r\n  num: number = 1;\r\n\r\n  siteTypeInfo: any = [];\r\n\r\n  user = this.authService.getCurrentUser();\r\n\r\n  payload: any;\r\n  initialPayload: any = {\r\n    itemsPerPage: this.pageSize,\r\n    pageIndex: this.pageIndex,\r\n    agencyId: this.user.agencyId,\r\n    stateId: this.user.stateId\r\n  };\r\n\r\n  tableColumns = [\r\n    { columnDef: 'siteName', header: 'Site Name', type: 'text' },\r\n    { columnDef: 'cdsCode', header: 'Site Code', type: 'text' },\r\n    {\r\n      columnDef: 'siteCodeTypeName',\r\n      header: 'Site Code Type',\r\n      type: 'text',\r\n    },\r\n    { columnDef: 'agencyName', header: 'Agency', type: 'text' },\r\n    { columnDef: 'siteTypeName', header: 'Type', type: 'text' },\r\n    {\r\n      columnDef: 'isActive',\r\n      header: 'Status',\r\n      type: 'toggleSwitch',\r\n      readOnly: !this.isToggleActive,\r\n    },\r\n  ];\r\n\r\n  searchInput: ISearchInput = {\r\n    searchName: true,\r\n    searchSite: true,\r\n    searchMultiSite: true,\r\n    searchState: true,\r\n    searchAgency: true,\r\n    searchSiteType: true,\r\n  };\r\n\r\n  constructor(\r\n    private site: SiteService,\r\n    public modal: MatDialog,\r\n    public lookup: LookupService,\r\n    public authService: AuthService,\r\n    public permissionService: PermissionService,\r\n    private toastService: ToastService\r\n  ) { }\r\n\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n  private subscriptions = new Subscription();\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.isEditable = this.permissionService.checkPermission(\r\n      Permission.EditSites\r\n    );\r\n    if (this.isEditable) {\r\n      this.tableColumns.push({\r\n        columnDef: 'edit',\r\n        header: 'Edit',\r\n        type: 'edit',\r\n      });\r\n    }\r\n    this.isDeletable = this.permissionService.checkPermission(\r\n      Permission.DeleteSites\r\n    );\r\n    if (this.isDeletable) {\r\n      this.tableColumns.push({\r\n        columnDef: 'delete',\r\n        header: 'Delete',\r\n        type: 'delete',\r\n      });\r\n    }\r\n\r\n    this.loadInitialList();\r\n  }\r\n\r\n  loadInitialList() {\r\n    this.payload = {\r\n      searchName: '',\r\n      typeId: null,\r\n      agencyId: this.user.agencyId,\r\n      siteIds: [],\r\n      stateId: this.user.stateId,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1,\r\n    };\r\n\r\n    this.paginate(true);\r\n  }\r\n\r\n  getInitialAgencyId(): number | null {\r\n    return this.hasAccessToAll ? null : this.user.agencyId;\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData): void {\r\n    this.reload = false;\r\n    if (editData) {\r\n      const { isActive } = editData.data;\r\n      if (!isActive) {\r\n        this.toastService.error('Unable to edit while site is inactive.');\r\n        return;\r\n      }\r\n    }\r\n    const modalRef = this.modal.open(AddEditSitesComponent, {\r\n      data: editData ?? undefined,\r\n    });\r\n    this.subscriptions.add(\r\n      modalRef.afterClosed().subscribe((result) => {\r\n        if (result.success) {\r\n          if (!editData) this.totalData++;\r\n          this.reload = true;\r\n          this.getSites(this.payload);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  deleteModal(event: IModalEmitData): void {\r\n    event.data.modalInfo = {\r\n      title: `Delete ${event.data.siteName}`,\r\n      message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.siteName}</span>?`,\r\n      name: event.data.siteName,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: Modal.Delete,\r\n      showCancel: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.removeSite(res.id, 'Site Deleted');\r\n      }\r\n    });\r\n  }\r\n\r\n  removeSite(siteId: number, message?: any) {\r\n    this.reload = false;\r\n    this.subscriptions.add(\r\n      this.site.deleteSite(siteId, message).subscribe((res: boolean) => {\r\n        if (res) {\r\n          this.totalData--;\r\n          this.reload = true;\r\n          this.getSites(this.payload);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  updateSite(site: any): void {\r\n    this.reload = false;\r\n    this.subscriptions.add(\r\n      this.site\r\n        .updateSite(site.payload, 'Updated Site')\r\n        .subscribe((res: boolean) => {\r\n          if (res) {\r\n            this.reload = true;\r\n            this.getSites(this.payload);\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  changeActiveStatus(event: any) {\r\n    this.reload = false;\r\n    if (event) {\r\n      const siteInfo: ISites = {\r\n        id: event.data.id,\r\n        isActive: (event.data.isActive = !event.data.isActive),\r\n        siteName: event.data.siteName,\r\n        agencyId: event.data.agencyId,\r\n        cdsCode: event.data.cdsCode,\r\n        countyID: event.data.countyID,\r\n        regionId: event.data.regionId,\r\n        siteAddress: event.data.siteAddress,\r\n        siteCity: event.data.siteCity,\r\n        siteCodeTypeId: event.data.siteCodeTypeId,\r\n        siteTypeId: event.data.siteTypeId,\r\n        siteZipCode: event.data.siteZipCode,\r\n      };\r\n      this.site.updateSite(siteInfo).pipe(take(1)).subscribe(res => {\r\n        if (res) {\r\n          this.reload = true;\r\n          this.getSites(this.payload);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  // Initialize Table data\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.sites);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.sites;\r\n  }\r\n\r\n  searchSite(search: any): void {\r\n    this.payload = {\r\n      siteName: search.SearchName,\r\n      stateId: search.StateId,\r\n      agencyId: search.AgencyId,\r\n      siteIds: search.SiteIds.split(',').map((id: string) => Number(id.trim())).filter((id: number) => !isNaN(id) && id !== 0),\r\n      typeId: search.Type === 0 ? null : search.Type,\r\n      itemsPerPage: this.paginator.pageSize = 10,\r\n      pageIndex: this.paginator.pageIndex = 0\r\n    };\r\n\r\n    this.siteType = search.searchSiteType;\r\n    this.siteSearchName = search.SearchName;\r\n\r\n    this.paginate(true);\r\n  }\r\n\r\n  getSites(payload?: ISites): void {\r\n    this.subscriptions.add(\r\n      this.site.getSitesWithParam(payload).subscribe((res: any) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  paginate(resetPage?: boolean): void {\r\n    if (this.paginator) {\r\n      this.payload.pageIndex = resetPage ? 1 : this.paginator.pageIndex + 1;\r\n      this.payload.itemsPerPage = this.paginator.pageSize;\r\n\r\n      if (resetPage) {\r\n        this.paginator.pageSize = this.payload.itemsPerPage;\r\n      }\r\n    }\r\n\r\n    this.getSites(this.payload);\r\n  }\r\n\r\n  onClear(): void {\r\n    this.siteSearchName = '';\r\n    this.payload = {\r\n      searchName: '',\r\n      typeId: null,\r\n      agencyId: this.getInitialAgencyId(),\r\n      siteIds: [],\r\n      stateId: this.user.stateId,\r\n      itemsPerPage: 10,\r\n      pageIndex: 1,\r\n    };\r\n  \r\n    this.paginate(true);\r\n  }\r\n  \r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Edit Rating Period</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-4 gap-x-10\" [formGroup]=\"ratingPeriodForm\">\r\n\r\n      <div class=\"col-span-full mt-2\">\r\n        <div *ngIf=\"data\">\r\n          <span class=\"global-font-bold\">Rating Period Name</span>\r\n          <p>{{this.data.data.ratingPeriodName}}</p>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-full md:col-span-1\">\r\n        <drdp-date-picker label=\"Start Date\" [initialDate]=\"StartDate?.value\" [isRequired]=\"true\" [minDate]=\"minStart\"\r\n          [maxDate]=\"maxEnd\" (emitDate)=\"handleDate($event, 'StartDate')\">\r\n        </drdp-date-picker>\r\n      </div>\r\n\r\n      <div class=\"col-span-full md:col-span-1 mb-8\">\r\n        <drdp-date-picker label=\"End Date\" [initialDate]=\"EndDate?.value\" [isRequired]=\"true\" [minDate]=\"minStart\"\r\n          [maxDate]=\"maxEnd\" (emitDate)=\"handleDate($event, 'EndDate')\">\r\n        </drdp-date-picker>\r\n        <mat-error *ngIf=\"ratingPeriodForm.hasError('dateMismatch')\"> Invalid date range. The End Date cannot be after\r\n          the Start Date.</mat-error>\r\n      </div>\r\n\r\n    </form>\r\n\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn class=\"mx-2\" color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn *ngIf=\"ratingPeriodForm.valid\" mat-button [mat-dialog-close]=\"onSubmit()\" [disabled]=\"false\"\r\n      cdkFocusInitial>Save</drdp-btn>\r\n    <drdp-btn *ngIf=\"!ratingPeriodForm.valid\" mat-button [disabled]=\"true\" cdkFocusInitial>Save</drdp-btn>\r\n  </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { formatDatesToString } from '@core/services/helper.service';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-rating-period',\r\n  templateUrl: './add-edit-rating-period.component.html',\r\n  styleUrls: ['./add-edit-rating-period.component.scss'],\r\n  providers: [RatingPeriodService],\r\n})\r\nexport class AddEditRatingPeriodComponent implements OnInit {\r\n  ratingPeriodForm: FormGroup | any;\r\n  minStart: Date;\r\n  maxEnd: Date;\r\n\r\n  constructor(\r\n    private ratingPeriod: RatingPeriodService,\r\n    private fb: FormBuilder,\r\n    public dialog: MatDialog,\r\n    @Inject(MAT_DIALOG_DATA) public data: any\r\n  ) {\r\n    this.minStart = new Date(this.data.data.globalRatingPeriod.minStartDate);\r\n    this.maxEnd = new Date(this.data.data.globalRatingPeriod.maxEndDate);\r\n  }\r\n\r\n  get StartDate() {\r\n    return this.ratingPeriodForm.get('StartDate');\r\n  }\r\n  get EndDate() {\r\n    return this.ratingPeriodForm.get('EndDate');\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  dateChange(event: any) {\r\n    this.minStart =\r\n      event.targetElement.name == 'minDatePicker' ? event.value : this.minStart;\r\n    this.maxEnd =\r\n      event.targetElement.name == 'maxDatePicker' ? event.value : this.maxEnd;\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.ratingPeriodForm = this.fb.group(\r\n      {\r\n        StartDate: [null, [Validators.required]],\r\n        EndDate: [null, [Validators.required]],\r\n      },\r\n      {\r\n        validators: CustomValidators.dateValidator('StartDate', 'EndDate'),\r\n      }\r\n    );\r\n\r\n    if (this.data) {\r\n      const edit = this.data.data;\r\n      this.StartDate.setValue(edit.startDate);\r\n      this.EndDate.setValue(edit.endDate);\r\n    }\r\n  }\r\n\r\n  handleDate(event: any, controlName: string): void {\r\n    if (event === '' || !event) {\r\n      this.ratingPeriodForm\r\n        .get(controlName)\r\n        .setValue(formatDatesToString(null));\r\n    } else {\r\n      this.ratingPeriodForm\r\n        .get(controlName)\r\n        .setValue(formatDatesToString(event));\r\n      if (controlName === 'StartDate') this.minStart = event;\r\n      else this.maxEnd = event;\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    let payload = this.ratingPeriodForm.value;\r\n\r\n    if (this.data) {\r\n      payload.id = this.data.data.id;\r\n      payload.agencyId = this.data.data.agencyId;\r\n      payload.ratingPeriodName = this.data.data.ratingPeriodName;\r\n      payload.ratingPeriodDescription = this.data.data.ratingPeriodDescription;\r\n      payload.schoolYearId = this.data.data.schoolYearId;\r\n      payload.globalRatingPeriodId = this.data.data.globalRatingPeriodId;\r\n      payload.isActive = this.data.data.isActive;\r\n    }\r\n\r\n    let updateTableView: IRatingPeriod = this.ratingPeriodForm.value;\r\n    return {\r\n      formValid: true,\r\n      payload: payload,\r\n      updateTableView: updateTableView,\r\n    };\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <drdp-title title=\"Rating Periods\"></drdp-title>\r\n\r\n    <drdp-container>\r\n      <div class=\"w-full\">\r\n        <drdp-search (search)=\"search($event)\" (clear)=\"onClear()\" [searchInput]=\"searchInput\" textInputPlaceholder=\"Rating Period\"></drdp-search>\r\n        <drdp-add-edit-table \r\n          [dataSource]=\"dataSource\"\r\n          [tableData]=\"tableData\" \r\n          [columns]=\"tableColumns\" \r\n          (toggleSwitchActionItem)=\"toggleStatus($event)\"\r\n          (editActionItem)=\"openModal($event)\"\r\n          toggleMsg=\"Are you sure you want to deactivate this rating period?\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n      </drdp-container>\r\n\r\n      <mat-paginator *ngIf=\"isAdmin\"\r\n                     [pageSizeOptions]=\"pageSizeOptions\" \r\n                     [pageSize]=\"pageSize\" \r\n                     [length]=\"totalData\" \r\n                     [pageIndex]=\"pageIndex\" \r\n                     (page)=\"getRatingPeriods()\">\r\n      </mat-paginator>\r\n</div>","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AddEditRatingPeriodComponent } from './add-edit-rating-period/add-edit-rating-period.component';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Subscription, take, tap } from 'rxjs';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\n@Component({\r\n  selector: 'drdp-rating-periods',\r\n  templateUrl: './rating-periods.component.html',\r\n  styleUrls: ['./rating-periods.component.scss'],\r\n})\r\nexport class RatingPeriodsComponent implements OnInit, OnDestroy {\r\n  constructor(\r\n    private _ratingPeriods: RatingPeriodService,\r\n    public toast: ToastService,\r\n    public modal: MatDialog,\r\n    private authService: AuthService,\r\n    private permissionService: PermissionService\r\n  ) {}\r\n  private subscriptions = new Subscription();\r\n  dataLength: number = 0;\r\n  ratingPeriod: string = '';\r\n  schoolYear: number = 0;\r\n  currentSchoolYearId: number = 0;\r\n\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageIndex = 1;\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  searchTerm?: string;\r\n  searchSchoolYearId?: number;\r\n  searchAgencyId?: number;\r\n  searchStateId?: number;\r\n  canEditRatingPeriod?: boolean = true;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  isAdmin = true;\r\n  user = this.authService.getCurrentUser();\r\n  canEdit = this.permissionService.checkPermission(\r\n    Permission.EditRatingPeriods\r\n  );\r\n  isToggleActive = this.permissionService.checkPermission(Permission.DeactivateRatingPeriod);\r\n\r\n  hasFullSearchOptions: boolean =\r\n    this.authService.isSuperAdmin() || this.authService.isCustomerService();\r\n\r\n  tableColumns = [\r\n    { columnDef: 'ratingPeriodName', header: 'Name', type: 'text' },\r\n    {\r\n      columnDef: 'schoolYear.schoolYearName',\r\n      header: 'School Year',\r\n      type: 'text',\r\n    },\r\n    { columnDef: 'startDate', header: 'Start Date', type: 'date' },\r\n    { columnDef: 'endDate', header: 'End Date', type: 'date' },\r\n    {\r\n      columnDef: 'globalRatingPeriod.minStartDate',\r\n      header: 'Minimum Date',\r\n      type: 'date',\r\n    },\r\n    {\r\n      columnDef: 'globalRatingPeriod.maxEndDate',\r\n      header: 'Maximum Date',\r\n      type: 'date',\r\n    },\r\n    {\r\n      columnDef: 'isActive',\r\n      header: 'Status',\r\n      type: 'toggleSwitch',\r\n      readOnly: !this.isToggleActive\r\n    },\r\n  ];\r\n\r\n  searchInput: ISearchInput = {\r\n    searchName: true,\r\n    searchAgency: this.hasFullSearchOptions,\r\n    searchState: this.hasFullSearchOptions,\r\n    searchYear: true,\r\n  };\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.canEdit) {\r\n      this.tableColumns.push({\r\n        columnDef: 'schoolYear.isCurrent',\r\n        header: 'Edit',\r\n        type: 'select',\r\n      });\r\n    }\r\n    this.getCurrentSchoolYear();\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData): void {\r\n    if (editData) {\r\n      const { data } = editData;\r\n      if (!data.isActive) {\r\n        this.toast.error('Unable to edit Rating Period while inactive.');\r\n        return;\r\n      }\r\n    }\r\n\r\n    const modalRef = this.modal.open(AddEditRatingPeriodComponent, {\r\n      data: editData ? editData : undefined,\r\n    });\r\n\r\n    // Data passed from Modal\r\n    this.subscriptions.add(\r\n      modalRef.afterClosed().subscribe((result: any) => {\r\n        // Add\r\n        if (!editData && result.formValid) {\r\n          this.saveNewRatingPeriod(result);\r\n        }\r\n\r\n        // Update\r\n        if (editData && result.formValid) {\r\n          this.updateRatingPeriod(result);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  getCurrentSchoolYear() {\r\n    this.subscriptions.add(\r\n      this._ratingPeriods.getActiveSchoolYear().subscribe((res) => {\r\n        this.currentSchoolYearId = res.id;\r\n        this.getRatingPeriods(true);\r\n      })\r\n    );\r\n  }\r\n\r\n  saveNewRatingPeriod(period: any): void {\r\n    this.subscriptions.add(\r\n      this._ratingPeriods\r\n        .addRatingPeriod(period.payload, 'Added Rating Period')\r\n        .subscribe((res: boolean) => {\r\n          if (res) {\r\n            this.totalData++;\r\n            this.getRatingPeriods(true);\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  updateRatingPeriod(period: any): void {\r\n    this.subscriptions.add(\r\n      this._ratingPeriods\r\n        .updateRatingPeriod(period.payload, 'Updated Rating Period')\r\n        .subscribe((res: boolean) => {\r\n          if (res) {\r\n            this.getRatingPeriods(true);\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  toggleStatus(ratingPeriod: any): void {\r\n    const { data } = ratingPeriod;\r\n    data.isActive = !data.isActive;\r\n\r\n    this._ratingPeriods.updateRatingPeriod(data).pipe(\r\n      take(1),\r\n      tap((res: boolean) => {\r\n        if (res) {\r\n          this.getRatingPeriods(true);\r\n        }\r\n      })\r\n      ).subscribe();\r\n  }\r\n\r\n  search(searchTerm?: any): void {\r\n    this.searchTerm = searchTerm\r\n      ? (this.searchTerm = searchTerm.SearchName)\r\n      : (this.searchTerm = '');\r\n    this.searchSchoolYearId =\r\n      searchTerm?.SchoolYearId ?? this.currentSchoolYearId;\r\n    this.searchStateId = searchTerm?.StateId ?? this.user.stateId ?? 0;\r\n    this.searchAgencyId = searchTerm?.AgencyId ?? this.user.agencyId ?? 0;\r\n\r\n    this.getRatingPeriods(true);\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.rating);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.rating;\r\n  }\r\n\r\n  getRatingPeriods(resetPage?: Boolean): void {\r\n    const payload: any = {};\r\n    payload.agencyId = typeof this.searchAgencyId !== 'undefined' ? this.searchAgencyId : this.user.agencyId;\r\n    payload.stateId = this.searchStateId || this.user.stateId;\r\n    this.searchTerm ? (payload.RatingPeriod = this.searchTerm) : null;\r\n    payload.SchoolYearID = this.searchSchoolYearId ?? this.currentSchoolYearId;\r\n    resetPage\r\n      ? (payload.PageIndex = 1)\r\n      : (payload.PageIndex = this.paginator.pageIndex + 1);\r\n    resetPage\r\n      ? (payload.ItemsPerPage = 10)\r\n      : (payload.ItemsPerPage = this.paginator.pageSize);\r\n\r\n    this.subscriptions.add(\r\n      this._ratingPeriods\r\n        .getRatingPeriodWithParam(payload)\r\n        .subscribe((res: any) => {\r\n          if (res) {\r\n            if (resetPage) this.paginator.firstPage();\r\n            this.initializeTableData(res);\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  onClear() {\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"rounded-sm fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b mb-2\">\r\n    <h1 class=\"text-[25px] font-bold mr-2\">Add School Year</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-1\" [formGroup]=\"schoolYearForm\">\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"schoolYearName\">School Year: </label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"yyyy-yy\" autocomplete=\"off\" id=\"schoolYearName\" type=\"text\"\r\n            formControlName=\"schoolYearName\" required>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <span *ngIf=\"schoolYearName.errors?.pattern && (schoolYearName.value.length < 7 || schoolYearName.value.length > 6)\"\r\n          class=\"text-center text-sm text-red-700\">\r\n          Please enter a valid school year format : yyyy-yy\r\n        </span>\r\n      </div>\r\n    </form>\r\n  </div>\r\n\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <button mat-button mat-dialog-close>Cancel</button>\r\n    <drdp-btn mat-button (click)=\"onSubmit()\" [disabled]=\"schoolYearForm.invalid\" cdkFocusInitial>\r\n      Save\r\n    </drdp-btn>\r\n  </div>\r\n</div>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-add-schoolyear',\r\n  templateUrl: './add-schoolyear.component.html',\r\n  styleUrls: ['./add-schoolyear.component.scss'],\r\n})\r\nexport class AddSchoolyearComponent implements OnInit {\r\n  schoolYearForm: FormGroup | any;\r\n  latestSchoolYear!: number;\r\n\r\n  get schoolYearName() {\r\n    return this.schoolYearForm.get('schoolYearName');\r\n  }\r\n  get schoolYearDescription() {\r\n    return this.schoolYearForm.get('schoolYearDescription');\r\n  }\r\n  get isCurrent() {\r\n    return this.schoolYearForm.get('isCurrent');\r\n  }\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<AddSchoolyearComponent>,\r\n    private fb: FormBuilder,\r\n    private toast: ToastService,\r\n    @Inject(MAT_DIALOG_DATA) public data: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.latestSchoolYear = parseInt(this.data.schoolYearDescription);\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.schoolYearForm = this.fb.group({\r\n      schoolYearName: [\r\n        null,\r\n        [Validators.required, Validators.pattern('\\\\d{4}-\\\\d{2}')],\r\n      ],\r\n      schoolYearDescription: [null],\r\n      isCurrent: [false],\r\n    });\r\n  }\r\n\r\n  onSubmit(): any {\r\n    if (this.schoolYearForm.invalid) {\r\n      this.toast.error('Inputted year is not valid.');\r\n      return;\r\n    }\r\n    var inputYear = parseInt(this.schoolYearName.value?.substring(0, 4));\r\n    var beginRange = parseInt(this.schoolYearName.value?.substring(2, 4));\r\n    var endRange = parseInt(this.schoolYearName.value?.substring(5, 7));\r\n    var rangeDifference = endRange - beginRange;\r\n\r\n    if (inputYear != this.latestSchoolYear || rangeDifference > 1) {\r\n      this.toast.error('Inputted year is not valid.');\r\n    } else {\r\n      this.schoolYearDescription.setValue(\r\n        this.schoolYearName.value.substring(0, 2) +\r\n          this.schoolYearName.value.substring(5, 7)\r\n      );\r\n\r\n      let payload: ISchoolYear = this.schoolYearForm.value;\r\n      this.dialogRef.close({ formValid: true, payload: payload });\r\n    }\r\n  }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { AddSchoolyearComponent } from './add-schoolyear/add-schoolyear.component';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { forkJoin, Subscription } from 'rxjs';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\n\r\n@Component({\r\n  selector: 'drdp-schoolyears',\r\n  templateUrl: './schoolyears.component.html',\r\n  styleUrls: ['./schoolyears.component.scss'],\r\n})\r\nexport class SchoolyearsComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  private subscriptions = new Subscription();\r\n  schoolYears: ISchoolYear[] = [];\r\n  recentGlobalRatingPeriods: any[] = [];\r\n  currentSchoolYear!: ISchoolYear;\r\n  canAddSchoolYear: boolean = false;\r\n  currentDateYear: number = new Date().getFullYear();\r\n  totalData = 0;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  yearToUpdate: string = '';\r\n  yearToUpdateDesc: string = '';\r\n  ratingAmount: number = 16;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'schoolYearName', header: 'School Year', type: 'text' },\r\n    { columnDef: 'isCurrent', header: 'Active', type: 'checkBox' },\r\n  ];\r\n\r\n  constructor(\r\n    private ratingPeriods: RatingPeriodService,\r\n    public modal: MatDialog,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    var getSchoolYears = this.ratingPeriods.getAllSchoolYears();\r\n    var getRecentGlobalRatingPeriods =\r\n      this.ratingPeriods.getRecentGlobalRatingPeriods(this.ratingAmount);\r\n\r\n    this.subscriptions.add(\r\n      forkJoin([getSchoolYears, getRecentGlobalRatingPeriods]).subscribe(\r\n        ([years, periods]) => {\r\n          this.schoolYears = years.sort((a: any, b: any) =>\r\n            parseInt(a.schoolYearName) < parseInt(b.schoolYearName) ? 1 : -1\r\n          );\r\n\r\n          this.currentSchoolYear = this.schoolYears[0];\r\n          this.canAddSchoolYear =\r\n            periods.filter((p: any) => p.schoolYearId == this.schoolYears[0].id)\r\n              .length == 4;\r\n          this.initializeTableData(this.schoolYears);\r\n        }\r\n      )\r\n    );\r\n  }\r\n\r\n  initializeTableData(data: any): void {\r\n    this.dataSource.data = data;\r\n    this.tableData = data;\r\n    this.totalData = this.tableData.length;\r\n  }\r\n\r\n  openModal(): void {\r\n    if (!this.canAddSchoolYear) {\r\n      this.toast.error(\r\n        'Latest school year must have global rating periods to add a new school year.'\r\n      );\r\n    } else {\r\n      var preModalData: any = this.currentSchoolYear;\r\n      preModalData.index = 0;\r\n      const data: IModalEmitData = preModalData;\r\n      const modalRef = this.modal.open(AddSchoolyearComponent, {\r\n        data: data ?? undefined,\r\n      });\r\n\r\n      modalRef.afterClosed().subscribe((res: any) => {\r\n        if (res.formValid) {\r\n          this.saveNewSchoolYear(res.payload);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  saveNewSchoolYear(schoolYear: any): void {\r\n    this.subscriptions.add(\r\n      this.ratingPeriods\r\n        .addSchoolYear(schoolYear, 'Added School Year')\r\n        .subscribe((res: boolean) => {\r\n          if (res) {\r\n            this.schoolYears.unshift(schoolYear);\r\n\r\n            this.dataSource = new MatTableDataSource(this.schoolYears);\r\n            this.tableData = this.schoolYears;\r\n            this.totalData++;\r\n            this.canAddSchoolYear = false;\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  chooseActiveYear($event: any) {\r\n    var currActiveIndex = this.schoolYears.findIndex((x) => x.isCurrent);\r\n    var temp = this.schoolYears[currActiveIndex];\r\n    temp.isCurrent = false;\r\n    this.schoolYears[currActiveIndex] = temp;\r\n\r\n    var newActiveYearIndex = this.schoolYears.findIndex(\r\n      (x) => x.schoolYearName == $event.data.schoolYearName\r\n    );\r\n    var newActive = this.schoolYears[newActiveYearIndex];\r\n    newActive.isCurrent = true;\r\n    this.schoolYears[newActiveYearIndex] = newActive;\r\n\r\n    this.dataSource.data = this.schoolYears;\r\n    this.tableData = this.schoolYears;\r\n\r\n    this.yearToUpdate = newActive.schoolYearName;\r\n    this.yearToUpdateDesc = newActive.schoolYearDescription;\r\n  }\r\n\r\n  updateActiveSchoolYear(): void {\r\n    if (parseInt(this.yearToUpdateDesc) < this.currentDateYear - 1) {\r\n      this.toast.error('Cannot set past school years to active');\r\n    } else {\r\n      this.subscriptions.add(\r\n        this.ratingPeriods\r\n          .setActiveSchoolYear(this.yearToUpdate, 'New Active School Year')\r\n          .subscribe()\r\n      );\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n      <div class=\"basis-1/2\">\r\n          <h1 class=\"pb-3 text-3xl font-semibold\">School Years</h1>\r\n      </div>\r\n      <div class=\"basis-1/2\">\r\n        <div class=\"flex justify-end items-end\">\r\n          <drdp-btn (click)=\"openModal()\"><i class=\"uil uil-plus\"></i> Add School Year</drdp-btn>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n  <drdp-container>\r\n    <div class=\"pl-1 xl:w-1/5 lg:w-1/4 md:w-1/3\">\r\n      <h1 class=\"text-xl font-bold border-b\">Active School Year</h1>\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\"\r\n                          [tableData]=\"tableData\"\r\n                          [columns]=\"tableColumns\"\r\n                          (toggleSwitchActionItem)=\"chooseActiveYear($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n    <div class=\"flex justify-end items-en mt-5\">\r\n      <drdp-btn (click)=\"updateActiveSchoolYear()\">Save</drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>","export enum SchoolYear {\r\n    SchoolYear2023_24 = 10\r\n}","<drdp-container>\r\n  <div class=\"pl-1 w-1/5\">\r\n    <h1 class=\"text-xl font-bold border-b\" *ngIf=\"currentPeriods.length == 0\">\r\n      Add Term Dates\r\n    </h1>\r\n    <h1 class=\"text-xl font-bold border-b\" *ngIf=\"currentPeriods.length\">\r\n      Term Dates\r\n    </h1>\r\n  </div>\r\n  <div *ngIf=\"currentPeriods.length == 0\">\r\n    <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"formTableColumns\"\r\n      (editActionItem)=\"dateChange($event)\">\r\n    </drdp-add-edit-table>\r\n  </div>\r\n  <div *ngIf=\"currentPeriods.length\">\r\n    <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"formTableColumns\">\r\n    </drdp-add-edit-table>\r\n  </div>\r\n  <div class=\"flex justify-end items-en mt-5\">\r\n    <div *ngIf=\"currentPeriods.length == 0\">\r\n      <drdp-btn [disabled]=\"!(validForm$ | async)\" (click)=\"confirmSave()\">Save</drdp-btn>\r\n    </div>\r\n    <div *ngIf=\"currentPeriods.length && !agenciesApplied\">\r\n      <drdp-btn [disabled]=\"noSubmit\" (click)=\"confirmSubmit()\">Submit</drdp-btn>\r\n    </div>\r\n  </div>\r\n</drdp-container>","import { Component, Input, OnChanges, OnDestroy } from '@angular/core';\r\nimport { IGlobalRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { formatDate } from '@angular/common';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { SchoolYear } from '@core/enums/school-year';\r\n\r\n@Component({\r\n  selector: 'drdp-add-global-rating-period',\r\n  templateUrl: './add-global-rating-period.component.html',\r\n  styleUrls: ['./add-global-rating-period.component.scss'],\r\n})\r\nexport class AddGlobalRatingPeriodComponent implements OnChanges, OnDestroy {\r\n  private subscription = new Subscription();\r\n\r\n  @Input() currentYear: any;\r\n  @Input() currentPeriods: IGlobalRatingPeriod[] = [];\r\n  validForm$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n  forms: FormGroup[] = [];\r\n  globalFall: FormGroup | any;\r\n  globalWinter: FormGroup | any;\r\n  globalSpring: FormGroup | any;\r\n  globalSummer1: FormGroup | any;\r\n  globalSummer2: FormGroup | any;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  noSubmit: boolean = true;\r\n  agenciesApplied: boolean = false;\r\n  summerAssigned: boolean = false;\r\n  isNewSchoolYear: boolean = false;\r\n  formTableColumns = [\r\n    { columnDef: 'schoolYearName', header: 'School Year', type: TableColumnType.text },\r\n    { columnDef: 'periodName', header: 'Term', type: TableColumnType.text },\r\n    {\r\n      columnDef: 'defaultStartDate',\r\n      header: 'Default Start Date',\r\n      type: TableColumnType.datepicker,\r\n    },\r\n    {\r\n      columnDef: 'defaultEndDate',\r\n      header: 'Default End Date',\r\n      type: TableColumnType.datepicker,\r\n    },\r\n    {\r\n      columnDef: 'minStartDate',\r\n      header: 'Minimum Start Date',\r\n      type: TableColumnType.datepicker,\r\n    },\r\n    { columnDef: 'maxEndDate', header: 'Maximum End Date', type: TableColumnType.datepicker },\r\n  ];\r\n\r\n  constructor(\r\n    private ratingPeriodService: RatingPeriodService,\r\n    public toast: ToastService,\r\n    public modal: MatDialog,\r\n    private fb: FormBuilder\r\n  ) {}\r\n\r\n  ngOnChanges(): void {\r\n    if (this.currentYear) {\r\n      this.initializeForms();\r\n    }\r\n  }\r\n\r\n  initializeForms(): void {\r\n    const year = this.currentYear.schoolYearName;\r\n    this.isNewSchoolYear = this.currentYear.id > SchoolYear.SchoolYear2023_24;\r\n    if (this.forms.length < 4 && !this.isNewSchoolYear){\r\n      this.forms.push((this.globalFall = this.generateFormGroup('Fall')));\r\n      this.forms.push((this.globalWinter = this.generateFormGroup('Winter')));\r\n      this.forms.push((this.globalSpring = this.generateFormGroup('Spring')));\r\n      this.forms.push((this.globalSummer1 = this.generateFormGroup('Summer')));\r\n    } else if (this.forms.length < 4 && this.isNewSchoolYear) {\r\n      this.forms.push((this.globalSummer1 = this.generateFormGroup('Summer', true)));\r\n      this.forms.push((this.globalFall = this.generateFormGroup('Fall')));\r\n      this.forms.push((this.globalWinter = this.generateFormGroup('Winter')));\r\n      this.forms.push((this.globalSpring = this.generateFormGroup('Spring')));\r\n      this.forms.push((this.globalSummer2 = this.generateFormGroup('Summer')));\r\n    }\r\n\r\n    this.globalSummer1\r\n      .get('globalRatingPeriodName')\r\n      .setValue('Summer ' + year.substring(0, 4));\r\n    this.globalFall\r\n      .get('globalRatingPeriodName')\r\n      .setValue('Fall ' + year.substring(0, 4));\r\n    this.globalWinter\r\n      .get('globalRatingPeriodName')\r\n      .setValue('Winter ' + year);\r\n    this.globalSpring\r\n      .get('globalRatingPeriodName')\r\n      .setValue('Spring ' + year.substring(0, 2) + year.substring(5, 7));\r\n    if (this.isNewSchoolYear) {\r\n      this.globalSummer2\r\n      .get('globalRatingPeriodName')\r\n      .setValue('Summer ' + year.substring(0, 2) + year.substring(5, 7));\r\n    }\r\n\r\n\r\n    this.globalFall.get('periodName').setValue('Fall');\r\n    this.globalWinter.get('periodName').setValue('Winter');\r\n    this.globalSpring.get('periodName').setValue('Spring');\r\n    if (this.isNewSchoolYear) {\r\n      this.globalSummer1.get('periodName').setValue('Summer 1');\r\n      this.globalSummer2.get('periodName').setValue('Summer 2');\r\n    } else {\r\n      this.globalSummer1.get('periodName').setValue('Summer');\r\n    }\r\n    this.generateTableData();\r\n  }\r\n\r\n  generateFormGroup(season: string, isFirstSummer?: boolean): FormGroup {\r\n    let schoolYearName = '';\r\n\r\n    if (this.isNewSchoolYear && season === 'Summer' && isFirstSummer) {\r\n      schoolYearName = this.currentYear.schoolYearName;\r\n    } else if (season == 'Fall' && !this.isNewSchoolYear) {\r\n      schoolYearName = this.currentYear.schoolYearName;\r\n    }\r\n\r\n    return this.fb.group({\r\n      schoolYearName: [schoolYearName],\r\n      schoolYearId: [this.currentYear.id],\r\n      globalRatingPeriodName: [season],\r\n      periodName: [null],\r\n      minStartDate: [null, Validators.required],\r\n      maxEndDate: [null, Validators.required],\r\n      defaultStartDate: [null, Validators.required],\r\n      defaultEndDate: [null, Validators.required],\r\n      isSelect: [true]\r\n    });\r\n  }\r\n\r\n  generateTableData(): void {\r\n    if (this.currentPeriods.length) {\r\n      this.noSubmit = false;\r\n      this.formTableColumns.forEach((x) => {\r\n        x.type = TableColumnType.text;\r\n      });\r\n      for (let per in this.currentPeriods) {\r\n        switch (this.currentPeriods[per].periodName) {\r\n          case 'Fall': {\r\n            this.populateFormValues(this.globalFall, this.currentPeriods[per]);\r\n            break;\r\n          }\r\n          case 'Winter': {\r\n            this.populateFormValues(\r\n              this.globalWinter,\r\n              this.currentPeriods[per]\r\n            );\r\n            break;\r\n          }\r\n          case 'Spring': {\r\n            this.populateFormValues(\r\n              this.globalSpring,\r\n              this.currentPeriods[per]\r\n            );\r\n            break;\r\n          }\r\n          case 'Summer 2': {\r\n            this.populateFormValues(this.globalSummer2, this.currentPeriods[per]);\r\n            break;\r\n          }\r\n          default: {\r\n            this.populateFormValues(\r\n              this.globalSummer1,\r\n              this.currentPeriods[per]\r\n            );\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.dataSource.data = [\r\n      this.forms[0].value,\r\n      this.forms[1].value,\r\n      this.forms[2].value,\r\n      this.forms[3].value,\r\n    ];\r\n    if (this.isNewSchoolYear) {\r\n      this.dataSource.data.push(this.forms[4].value);\r\n    }\r\n\r\n    this.tableData = [\r\n      this.forms[0].value,\r\n      this.forms[1].value,\r\n      this.forms[2].value,\r\n      this.forms[3].value,\r\n    ];\r\n    if (this.isNewSchoolYear) {\r\n      this.tableData.push(this.forms[4].value);\r\n    }\r\n\r\n    this.subscription.add(\r\n      this.ratingPeriodService\r\n        .globalRatingsApplied(this.currentYear.id)\r\n        .subscribe((res) => {\r\n          if (res) {\r\n            this.agenciesApplied = res;\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  populateFormValues(form: FormGroup, period: IGlobalRatingPeriod): void {\r\n    form\r\n      .get('defaultStartDate')\r\n      ?.setValue(formatDate(period.defaultStartDate, 'M/d/yyyy', 'en-US'));\r\n    form\r\n      .get('defaultEndDate')\r\n      ?.setValue(formatDate(period.defaultEndDate, 'M/d/yyyy', 'en-US'));\r\n    form\r\n      .get('minStartDate')\r\n      ?.setValue(formatDate(period.minStartDate, 'M/d/yyyy', 'en-US'));\r\n    form\r\n      .get('maxEndDate')\r\n      ?.setValue(formatDate(period.maxEndDate, 'M/d/yyyy', 'en-US'));\r\n    form.get('periodName')?.setValue(period.periodName);\r\n  }\r\n\r\n  dateChange(change: any): void {\r\n    let i = change.index;\r\n    let property = change.property;\r\n    let val = change.value;\r\n\r\n    this.forms[i].get(property)?.setValue(formatDate(val, 'M/d/yyyy', 'en-US'));\r\n\r\n    for (let form in this.forms) {\r\n      if (!this.forms[form].valid) {\r\n        this.validForm$.next(false);\r\n        return;\r\n      }\r\n      this.validForm$.next(true);\r\n    }\r\n  }\r\n\r\n  saveGlobalRatingPeriods() {\r\n    let mappedPeriods = this.forms.map((form: any) => {\r\n      let x = form.value;\r\n      return <IGlobalRatingPeriod>{\r\n        id: 0,\r\n        schoolYearId: x.schoolYearId,\r\n        globalRatingPeriodName: x.globalRatingPeriodName,\r\n        minStartDate: x.minStartDate,\r\n        maxEndDate: x.maxEndDate,\r\n        defaultStartDate: x.defaultStartDate,\r\n        defaultEndDate: x.defaultEndDate,\r\n      };\r\n    });\r\n\r\n    this.subscription.add(\r\n      this.ratingPeriodService\r\n        .addGlobalRatingPeriod(mappedPeriods)\r\n        .subscribe((success) => {\r\n          if (success) {\r\n            this.formTableColumns.forEach((x) => {\r\n              x.type = TableColumnType.text;\r\n            });\r\n            this.currentPeriods = mappedPeriods;\r\n            this.noSubmit = false;\r\n            this.dataSource.data = [\r\n              this.forms[0].value,\r\n              this.forms[1].value,\r\n              this.forms[2].value,\r\n              this.forms[3].value,\r\n              this.forms[4].value,\r\n            ];\r\n            this.tableData = [\r\n              this.forms[0].value,\r\n              this.forms[1].value,\r\n              this.forms[2].value,\r\n              this.forms[3].value,\r\n              this.forms[4].value,\r\n            ];\r\n            this.toast.success('Global Rating Periods have been saved.');\r\n          } else {\r\n            this.toast.error('Error! Could not add Global Rating Periods');\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  applyGlobalRatingPeriods(): void {\r\n    const payload = {\r\n      schoolYearId: this.currentYear.id,\r\n      schoolYearName: this.currentYear.schoolYearName,\r\n    };\r\n\r\n    this.subscription.add(\r\n      this.ratingPeriodService\r\n        .applyGlobalRatingPeriodsExisting(payload)\r\n        .subscribe((success) => {\r\n          if (success) {\r\n            this.agenciesApplied = true;\r\n            this.toast.success(\r\n              'Rating Periods have been created for agencies.'\r\n            );\r\n          }\r\n        })\r\n    );\r\n  }\r\n\r\n  isValidDateOrder(form: FormGroup): boolean {\r\n    return (\r\n      new Date(form.get('minStartDate')?.value) <\r\n        new Date(form.get('maxEndDate')?.value) &&\r\n      new Date(form.get('defaultStartDate')?.value) <\r\n        new Date(form.get('defaultEndDate')?.value)\r\n    );\r\n  }\r\n\r\n  confirmSave(): void {\r\n    if (!this.validForm$.getValue()) {\r\n      this.toast.error('Form not complete');\r\n      return;\r\n    }\r\n\r\n    for (var form in this.forms) {\r\n      if (!this.isValidDateOrder(this.forms[form])) {\r\n        this.toast.error('Start dates cannot be after or equal to end dates');\r\n        return;\r\n      }\r\n    }\r\n\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Save Global Rating Periods',\r\n      message: `Please confirm you want to save these dates.  They cannot be edited once saved.`,\r\n      name: 'Global Rating Periods',\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.Confirm,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.saveGlobalRatingPeriods();\r\n      }\r\n    });\r\n  }\r\n\r\n  confirmSubmit(): void {\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Submit Global Rating Periods',\r\n      message: `Submitting these dates will create the agency's rating periods for the school year.  Please confirm you want to submit.`,\r\n      name: 'Global Rating Periods',\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.Confirm,\r\n      showCancel: true,\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.applyGlobalRatingPeriods();\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscription.unsubscribe();\r\n  }\r\n}\r\n","<drdp-container>\r\n    <div class=\"pl-1 w-1/5\">\r\n        <h1 class=\"text-xl font-bold border-b\">Past Term Dates</h1>\r\n    </div>\r\n    <div *ngIf=\"processedPerList.length > 0\">\r\n        <div class=\"border-b\" *ngFor=\"let year of processedPerList; let i = index\">\r\n            <drdp-add-edit-table [dataSource]=\"getTableDataSource(i)\"\r\n            [tableData]=\"getTableData(i)\"\r\n            [columns]=\"formTableColumns\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n    </div>\r\n</drdp-container>\r\n\r\n","import { Component, Input, OnChanges } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { formatDate } from '@angular/common';\r\nimport {\r\n  IGlobalRatingPeriod,\r\n  IProcessedPeriod,\r\n  ISchoolYear,\r\n} from '@core/interfaces/iratingperiod';\r\n\r\n@Component({\r\n  selector: 'drdp-past-global-rating-periods',\r\n  templateUrl: './past-global-rating-periods.component.html',\r\n  styleUrls: ['./past-global-rating-periods.component.scss'],\r\n})\r\nexport class PastGlobalRatingPeriodsComponent implements OnChanges {\r\n  @Input() pastYears: ISchoolYear[] = [];\r\n  @Input() pastPeriods: IGlobalRatingPeriod[] = [];\r\n  processedPeriods: IProcessedPeriod[] = [];\r\n  processedPerList: any = [];\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  formTableColumns = [\r\n    { columnDef: 'schoolYear', header: '', type: 'text' },\r\n    { columnDef: 'globalRatingPeriodName', header: '', type: 'text' },\r\n    { columnDef: 'defaultStartDate', header: '', type: 'text' },\r\n    { columnDef: 'defaultEndDate', header: '', type: 'text' },\r\n    { columnDef: 'minStartDate', header: '', type: 'text' },\r\n    { columnDef: 'maxEndDate', header: '', type: 'text' },\r\n  ];\r\n\r\n  constructor() {}\r\n\r\n  ngOnChanges(): void {\r\n    if (this.pastYears.length > 0) {\r\n      this.processRatingPeriodsData();\r\n    }\r\n  }\r\n\r\n  processRatingPeriodsData(): void {\r\n    let n = 0;\r\n    for (let i in this.pastPeriods) {\r\n      let per = this.pastPeriods[i];\r\n      this.processedPeriods.push(<IProcessedPeriod>{\r\n        sortOrder: this.getSortOrder(per),\r\n        schoolYear: this.getSchoolYear(per),\r\n        globalRatingPeriodName: per.globalRatingPeriodName.split(' ')[0],\r\n        minStartDate: formatDate(per.minStartDate, 'M/d/yyyy', 'en-US'),\r\n        maxEndDate: formatDate(per.maxEndDate, 'M/d/yyyy', 'en-US'),\r\n        defaultStartDate: formatDate(per.defaultStartDate, 'M/d/yyyy', 'en-US'),\r\n        defaultEndDate: formatDate(per.defaultEndDate, 'M/d/yyyy', 'en-US'),\r\n      });\r\n      n++;\r\n\r\n      if (n == 4) {\r\n        this.processedPeriods.sort((a, b) => a.sortOrder - b.sortOrder);\r\n        this.processedPerList.push([...this.processedPeriods]);\r\n        n = 0;\r\n        this.processedPeriods.length = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  getTableDataSource(index: number): any {\r\n    let source = new MatTableDataSource();\r\n    source.data = this.processedPerList[index];\r\n    return source;\r\n  }\r\n  getTableData(index: number): any {\r\n    return this.processedPerList[index];\r\n  }\r\n\r\n  getSchoolYear(period: IGlobalRatingPeriod): string {\r\n    let name = '';\r\n    if (period.globalRatingPeriodName.split(' ')[0] == 'Fall') {\r\n      const year = this.pastYears.filter((e) => e.id == period.schoolYearId);\r\n      if (year.length > 0) {\r\n        name = year[0].schoolYearName;\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  getSortOrder(period: IGlobalRatingPeriod) {\r\n    switch (period.globalRatingPeriodName.split(' ')[0]) {\r\n      case 'Fall':\r\n        return 1;\r\n      case 'Winter':\r\n        return 2;\r\n      case 'Spring':\r\n        return 3;\r\n      default:\r\n        return 4;\r\n    }\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n  IGlobalRatingPeriod,\r\n  ISchoolYear,\r\n} from '@core/interfaces/iratingperiod';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\n\r\n@Component({\r\n  selector: 'drdp-global-rating-periods',\r\n  templateUrl: './global-rating-periods.component.html',\r\n  styleUrls: ['./global-rating-periods.component.scss'],\r\n})\r\nexport class GlobalRatingPeriodsComponent implements OnInit {\r\n  years: ISchoolYear[] = [];\r\n  globalRatingPeriods: IGlobalRatingPeriod[] = [];\r\n  currentYear: any;\r\n  currentPeriods: IGlobalRatingPeriod[] = [];\r\n  pastYears: ISchoolYear[] = [];\r\n  pastPeriods: IGlobalRatingPeriod[] = [];\r\n  ratingAmount: number = 16;\r\n\r\n  constructor(private ratingPeriodService: RatingPeriodService) {}\r\n\r\n  ngOnInit(): void {\r\n    this.ratingPeriodService.getRecentSchoolYears().subscribe((res) => {\r\n      this.years = res;\r\n      this.currentYear = res.filter((e: ISchoolYear) => e.isCurrent)[0];\r\n      this.pastYears = res.filter((e: ISchoolYear) => !e.isCurrent);\r\n\r\n      this.ratingPeriodService\r\n        .getRecentGlobalRatingPeriods(this.ratingAmount)\r\n        .subscribe((res) => {\r\n          this.globalRatingPeriods = res;\r\n          this.currentPeriods = res.filter(\r\n            (e: IGlobalRatingPeriod) => e.schoolYearId == this.currentYear.id\r\n          );\r\n          this.pastPeriods = res.filter(\r\n            (e: IGlobalRatingPeriod) => e.schoolYearId != this.currentYear.id\r\n          );\r\n        });\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"basis-1/2\">\r\n        <h1 class=\"pb-3 text-3xl font-semibold\">Global Rating Periods</h1>\r\n    </div>\r\n    <div class=\"mb-10\">\r\n        <drdp-add-global-rating-period [currentYear]=\"currentYear\" [currentPeriods]=\"currentPeriods\">\r\n        </drdp-add-global-rating-period>\r\n    </div>\r\n    <div>\r\n        <drdp-past-global-rating-periods [pastYears]=\"pastYears\" [pastPeriods]=\"pastPeriods\">\r\n        </drdp-past-global-rating-periods>\r\n    </div>\r\n</div>\r\n","<div>\r\n    <div class=\"flex justify-between border-b mb-3\">\r\n      <h1 class=\"text-[25px] font-bold mr-12\">Edit Lock Rating View</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n  \r\n    <div mat-dialog-content>\r\n        <form class=\"grid sm:grid-cols-2 gap-x-4\" [formGroup]=\"lockingStatusForm\">\r\n            <div class=\"items-center w-[100%] pl-3\">\r\n              <drdp-date-picker label=\"Lock Date: \" \r\n                            [initialDate]=\"lockingStatusForm.get('lockDate').value\"\r\n                            (emitDate)=\"handleDate($event)\">\r\n              </drdp-date-picker>\r\n            </div>\r\n            <div class=\"md:pl-8 pl-3\">\r\n                <label class=\"font-normal\" for=\"active\">Active: </label>\r\n                <div class=\"pt-6\">\r\n                  <mat-checkbox [color]=\"'primary'\" class=\"example-margin font-normal\" formControlName=\"active\">\r\n                  </mat-checkbox>\r\n                </div>\r\n            </div>\r\n          </form>\r\n    </div>  \r\n    <div mat-dialog-actions class=\"flex justify-end bottom-0\">\r\n      <button mat-button mat-dialog-close>Cancel</button>\r\n      <drdp-btn *ngIf=\"lockingStatusForm.valid\" mat-button [mat-dialog-close]=\"onSubmit()\" [disabled]=\"false\" \r\n        cdkFocusInitial>\r\n            Save\r\n      </drdp-btn>\r\n      <drdp-btn *ngIf=\"!lockingStatusForm.valid\" mat-button [disabled]=\"true\" cdkFocusInitial>Save</drdp-btn> \r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ILockingStatus } from '@core/interfaces/ilockingstatus';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-locking-status',\r\n  templateUrl: './add-edit-locking-status.component.html',\r\n  styleUrls: ['./add-edit-locking-status.component.scss']\r\n})\r\nexport class AddEditLockingStatusComponent implements OnInit {\r\n  lockingStatusForm: FormGroup | any;\r\n\r\n  get isActive() { return this.lockingStatusForm.get('active'); }\r\n\r\n  constructor(public dialogRef: MatDialogRef<AddEditLockingStatusComponent>,\r\n    private fb: FormBuilder,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any) { dialogRef.disableClose = true }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.lockingStatusForm = this.fb.group({\r\n      lockType: [\"Lock Rating View\"],\r\n      lockDate: [this.editData ? this.editData.lockDate: null, \r\n                  [Validators.required]],\r\n      active: [this.editData ? this.editData.active : false]\r\n    })\r\n  }\r\n\r\n  handleDate(event: any): void {\r\n    this.lockingStatusForm.get('lockDate').setValue(event);\r\n  }\r\n\r\n  onSubmit(): any {\r\n    let payload: ILockingStatus = this.lockingStatusForm.value;\r\n    if (this.editData) {\r\n      payload.id = this.editData.id;\r\n    }\r\n    let updateTableView: ILockingStatus = Object.assign({}, this.lockingStatusForm.value);\r\n    updateTableView.active = payload.active;\r\n    updateTableView.lockType = payload.lockType\r\n    updateTableView.lockDate = payload.lockDate;\r\n\r\n    return { formValid: true, payload: payload, updateTableView: updateTableView}\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n  })\r\n  export class LockSettingService {\r\n\r\n    constructor(private data: DataService) { }\r\n\r\n    getAllLockSettings(): Observable<any> {\r\n        return this.data.get(`lockSetting/all`);\r\n    }\r\n\r\n    updateLockSetting(lockSetting: any, message?: string): Observable<boolean> {\r\n        return this.data.put(`locksetting`, lockSetting, message);\r\n    }\r\n  }","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { LockSettingService } from '@core/services/lock-setting.service';\r\nimport { AddEditLockingStatusComponent } from './add-edit-locking-status/add-edit-locking-status.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ILockingStatus } from '@core/interfaces/ilockingstatus';\r\nimport { AnySchema } from 'ajv';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\n\r\n@Component({\r\n  selector: 'drdp-locking-status',\r\n  templateUrl: './locking-status.component.html',\r\n  styleUrls: ['./locking-status.component.scss']\r\n})\r\nexport class LockingStatusComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  isSuperUser: boolean = true;\r\n  tableData: any[] = [];\r\n  dataSource: MatTableDataSource<AnySchema> = new MatTableDataSource();\r\n  formTableColumns = [\r\n    { columnDef: 'lockType', header: 'Lock Type', type: 'text'},\r\n    { columnDef: 'lockDate', header: 'Lock Date', type: 'date'},\r\n    { columnDef: 'isActive', header: 'Active', type: 'text'}\r\n  ]\r\n\r\n  constructor(private lockSetting : LockSettingService,\r\n              public modal: MatDialog,\r\n              public toast: ToastService) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.isSuperUser) {\r\n      this.formTableColumns.push({ columnDef: 'edit', header: 'Edit', type: 'edit' });\r\n    }\r\n    this.lockSetting.getAllLockSettings().subscribe((res) => {\r\n      res = res.map((s : any) => ({...s, isActive: s.active ? 'Yes' : 'No'}));\r\n      this.dataSource.data = res;\r\n      this.tableData = res;\r\n    })\r\n  }\r\n\r\n  openModal(data?: IModalEmitData): void {\r\n    const modalRef = this.modal.open(AddEditLockingStatusComponent, {data: data ? data.data : undefined});\r\n\r\n    modalRef.afterClosed().subscribe((res: any) => {\r\n      if (data && res.formValid) {\r\n        this.lockSetting.updateLockSetting(res.payload).subscribe((success) => {\r\n          if (success) {\r\n            this.tableData[data.index] = res.updateTableView;\r\n            this.tableData[data.index].isActive = this.tableData[data.index].active ? 'Yes' : 'No';\r\n            this.table?.reRender(this.tableData);\r\n            this.toast.success(\"Lock Status updated\");\r\n          } else {\r\n            this.toast.success(\"Could not update Lock Status\");\r\n          }\r\n        })\r\n      }\r\n    })\r\n  }\r\n\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"basis-1/2\">\r\n        <h1 class=\"pb-3 text-3xl font-semibold\">Lock Rating Views</h1>\r\n    </div>\r\n    <drdp-container>\r\n        <div class=\"md:w-1/2\">\r\n            <drdp-add-edit-table [dataSource]=\"dataSource\"\r\n            [tableData]=\"tableData\"\r\n            [columns]=\"formTableColumns\"\r\n            (editActionItem)=\"openModal($event)\">\r\n            </drdp-add-edit-table>\r\n        </div>\r\n    </drdp-container>\r\n</div>\r\n","<div id=\"classroom\" class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">{{ label }}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle ml-8\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid md:grid-cols-2 grid-cols-1 gap-4 gap-x-4 p-3 grid-cust\" [formGroup]=\"classroomForm\">\r\n      <div *ngIf=\"canViewDropdowns\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-state [initialStateId]=\"selectedState\" (state)=\"handleDropdown($event, selectType.States)\"\r\n          [required]=\"true\" [isValid]=\"!stateId.touched || stateId.valid\">\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div *ngIf=\"canViewDropdowns\" class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-agency [initialAgencyId]=\"selectedAgency\" (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n          [stateId]=\"selectedState\" [required]=\"true\" [isValid]=\"!agencyId.touched || agencyId.valid\" [clear]=\"clearDropdown\">\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"name\">Classroom</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input placeholder=\"\" matInput type=\"text\" formControlName=\"name\" maxlength=\"100\">\r\n        </mat-form-field>\r\n        <mat-error *ngIf=\"name.hasError('invalidPilotName')\">Invalid pilot classroom name.</mat-error>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-site [initialSiteId]=\"selectedSiteId\" [agencyId]=\"selectedAgency\" [required]=\"true\"\r\n          (site)=\"handleDropdown($event, selectType.Sites)\" [isValid]=\"!siteId.touched || siteId.valid\" [clear]=\"clearDropdown\">\r\n        </drdp-select-site>\r\n      </div>\r\n\r\n      <div *ngIf=\"canCreate2025Classroom && selectedState == states.california\" class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"isPilot\">2025 Pilot Classroom</label>\r\n        <mat-checkbox color=\"primary\" formControlName=\"isPilot\" [disabled]=\"editData\"></mat-checkbox>\r\n      </div>\r\n    </form>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <div class=\"flex justify-end align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn type=\"submit\" mat-button (click)=\"onSubmit()\" [disabled]=\"classroomForm.invalid || isProcessing\"\r\n        cdkFocusInitial>Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit, inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take, tap } from 'rxjs';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { Role } from '@core/enums/roles';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { replaceWhitespace } from '@core/services/helper.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { States } from '@core/enums/states';\r\n\r\n@Component({\r\n  selector: 'drdp-add-class-modal',\r\n  templateUrl: './add-class-modal.component.html',\r\n  styleUrls: ['./add-class-modal.component.scss'],\r\n})\r\nexport class AddClassModalComponent implements OnInit {\r\n  classroomForm: FormGroup | any;\r\n  user = this.authService.getCurrentUser();\r\n  options: any;\r\n  label?: string;\r\n  superUser?: boolean;\r\n  payload: any = {};\r\n  selectedState?: number | null;\r\n  selectedAgency?: number | null;\r\n  selectedSiteId?: number | null;\r\n  clearDropdown = false;\r\n  modal = inject(MatDialog);\r\n  isProcessing: boolean = false;\r\n  canCreate2025Classroom = this.permission.checkPermission(Permission.Create2025Classroom);\r\n  canViewDropdowns: boolean = this.permission.checkPermission(Permission.AccessAssignedStateAgencies) \r\n    || this.permission.checkPermission(Permission.AccessAllAgencies);\r\n  states = States;\r\n\r\n  get selectType() {\r\n    return SelectType;\r\n  }\r\n  get role() {\r\n    return Role;\r\n  }\r\n\r\n  get name() {\r\n    return this.classroomForm.get('name');\r\n  }\r\n  get siteId() {\r\n    return this.classroomForm.get('siteId');\r\n  }\r\n  get agencyId() {\r\n    return this.classroomForm.get('agencyId');\r\n  }\r\n  get stateId() {\r\n    return this.classroomForm.get('stateId');\r\n  }\r\n  get classroomId() {\r\n    return this.classroomForm.get('classroomId');\r\n  }\r\n  get isPilot() {\r\n    return this.classroomForm.get('isPilot');\r\n  }\r\n\r\n  constructor(\r\n    @Inject(MAT_DIALOG_DATA) public editData: any,\r\n    public dialogRef: MatDialogRef<AddClassModalComponent>,\r\n    private fb: FormBuilder,\r\n    public toast: ToastService,\r\n    private classroomService: ClassroomService,\r\n    private authService: AuthService,\r\n    private agency: AgencyService,\r\n    private permission: PermissionService\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.superUser = this.authService.isSuperUser();\r\n    this.initializeForm();\r\n    if (!this.editData) {\r\n      this.selectedState = this.user.stateId;\r\n      this.selectedAgency = this.user.agencyId;\r\n      this.label = 'Add Classroom';\r\n    } else {\r\n      this.label = 'Edit Classroom';\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.classroomForm = this.fb.group({\r\n      name: [null, [Validators.required, Validators.maxLength(100), CustomValidators.cannotContainWhiteSpace]],\r\n      siteId: [null, Validators.required],\r\n      agencyId: [this.user.stateId, Validators.required],\r\n      stateId: [this.user.agencyId, Validators.required],\r\n      isPilot: [false],\r\n    });\r\n\r\n    if (this.editData) {\r\n      const edit = this.editData.data;\r\n      this.selectedState = edit.stateId;\r\n      this.selectedAgency = edit.agencyId;\r\n      this.selectedSiteId = edit.siteId;\r\n\r\n      this.classroomForm.patchValue({\r\n        name: edit.className,\r\n        siteId: this.selectedSiteId,\r\n        agencyId: this.selectedAgency,\r\n        stateId: this.selectedState,\r\n        isPilot: edit.isPilot,\r\n      });\r\n    }\r\n\r\n    this.isPilot.valueChanges.subscribe((isPilot: boolean) => {\r\n      let currentName = this.name?.value || '';\r\n      \r\n      if (isPilot && !currentName.startsWith('2025 ')) {\r\n        this.name?.setValue(`2025 ${currentName}`);\r\n      } else if (!isPilot) {\r\n        if (currentName.startsWith('2025 ')) this.name?.setValue(currentName.replace('2025 ', ''));\r\n\r\n        const errors = this.name.errors || {};\r\n        delete errors['invalidPilotName'];\r\n        if (Object.keys(errors).length === 0) this.name.setErrors(null);\r\n        else this.name.setErrors(errors);\r\n      }\r\n    });\r\n  }\r\n\r\n  handleDropdown(data: any, type: string | number): void {\r\n    if (type == this.selectType.States) {\r\n      this.selectedState = data ? data.id : null;\r\n      this.stateId.setValue(this.selectedState);\r\n\r\n      if (this.selectedState) {\r\n        this.agency\r\n          .getAgenciesByState([this.selectedState])\r\n          .pipe(\r\n            take(1),\r\n            tap((agency: IAgency[]) => {\r\n              this.selectedAgency = agency[0] ? agency[0].id : null;\r\n              this.agencyId.setValue(this.selectedAgency);\r\n            }),\r\n            tap((_) => {\r\n              this.clearDropdown = true;\r\n              this.selectedSiteId = null;\r\n              this.stateId.setValue(this.selectedState);\r\n            })\r\n          )\r\n          .subscribe();\r\n      }\r\n    } else if (type == this.selectType.Agencies) {\r\n      this.selectedAgency = data ? data.id : null;\r\n      this.agencyId.setValue(this.selectedAgency);\r\n    } else if (type == this.selectType.Sites) {\r\n      this.selectedSiteId = data ? data.id ?? data[0].id : null;\r\n      this.siteId.setValue(this.selectedSiteId);\r\n    }\r\n  }\r\n\r\n  onSubmit(): any {\r\n    if (this.isProcessing) return;\r\n    if (this.classroomForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.name.setValue(replaceWhitespace(this.name.value));\r\n    \r\n    if (this.isPilot.value && !this.name.value.startsWith('2025 ')) {\r\n      this.name.setErrors({ invalidPilotName: true });\r\n      this.name.markAsTouched();\r\n      return;\r\n    }\r\n\r\n    this.payload = {\r\n      id: this.editData?.data.classId ?? 0,\r\n      ...this.classroomForm.value,\r\n    };\r\n\r\n    this.isProcessing = true;\r\n    this.classroomService\r\n      .saveClassroom(this.payload)\r\n      .pipe(take(1))\r\n      .subscribe((success) => {\r\n        this.isProcessing = false;\r\n        if (success)  {\r\n          this.dialogRef.close({ success: true })\r\n          var event = { data: { modalInfo: {} } };\r\n           event.data.modalInfo = {\r\n              title: 'Success',\r\n              message: `Your classroom name has been saved.  Please go to Teacher Assignments and Rating Periods in the Setup Menu to finish creating your classroom.`,\r\n              primaryBtnClass: 'blue',\r\n              showCancel: false,\r\n              primaryBtnText: Modal.OK\r\n           };\r\n          this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n        };\r\n      });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-1/2\">\r\n      <drdp-title title=\"Classroom\"></drdp-title>\r\n    </div>\r\n    <div class=\"basis-1/2 mt-2\">\r\n      <div class=\"flex justify-end items-end\">\r\n        <drdp-btn (click)=\"openModal()\" *drdpCheckPermission=\"Permission.CreateClassrooms\"><i class=\"uil uil-plus\"></i>\r\n          Add New Classroom</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container>\r\n    <drdp-search textInputPlaceholder=\"Classroom Name\" [searchInput]=\"searchInput\" (search)=\"searchTable($event)\"\r\n      (clear)=\"onClear()\"></drdp-search>\r\n    <div class=\"p-5 w-full\">\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        (editActionItem)=\"openModal($event)\" (deleteActionItem)=\"deleteModal($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n<mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n  (page)=\"paginateTable(false)\" class=\"mb-12\">\r\n</mat-paginator>","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IClass, IClassroomSearchRequest } from '@core/interfaces/iclasses';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { ClassroomService } from '@core/services/classroom.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { AddClassModalComponent } from './add-class-modal/add-class-modal.component';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { Subscription, take } from 'rxjs';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\n\r\n@Component({\r\n  selector: 'drdp-classroom',\r\n  templateUrl: './classroom.component.html',\r\n  styleUrls: ['./classroom.component.scss'],\r\n})\r\nexport class ClassroomComponent implements OnInit, OnDestroy {\r\n  constructor(\r\n    private classroomService: ClassroomService,\r\n    public dialog: MatDialog,\r\n    private authService: AuthService,\r\n    private classEnrollmentService: StudentClassEnrollmentService,\r\n    public PermissionService: PermissionService\r\n  ) {}\r\n\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n  private subscriptions = new Subscription();\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  pageSizeOptions = [5, 10, 25];\r\n  pageSize = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  pageIndex: number = 0;\r\n\r\n  payload: IClassroomSearchRequest = {};\r\n\r\n  user = this.authService.getCurrentUser();\r\n  isSuperUser = false;\r\n  isSiteAdmin = false;\r\n  canEdit = this.PermissionService.checkPermission(Permission.EditClassrooms);\r\n  canDelete = this.PermissionService.checkPermission(\r\n    Permission.DeleteClassrooms\r\n  );\r\n\r\n  tableColumns = [\r\n    { columnDef: 'className', header: 'Classroom', type: 'text' },\r\n    { columnDef: 'siteName', header: 'Site', type: 'text' },\r\n  ];\r\n\r\n  searchInput: ISearchInput = {\r\n    searchName: true,\r\n    searchAgency: true,\r\n    searchState: true,\r\n    searchSite: true,\r\n    searchMultiSite: true\r\n  };\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.isSuperUser = this.authService.isSuperUser();\r\n    this.isSiteAdmin = this.authService.isSiteAdmin();\r\n    if (this.canEdit) {\r\n      this.tableColumns.push({\r\n        columnDef: 'edit',\r\n        header: 'Edit',\r\n        type: 'edit',\r\n      });\r\n    }\r\n    if (this.canDelete) {\r\n      this.tableColumns.push({\r\n        columnDef: 'delete',\r\n        header: 'Delete',\r\n        type: 'delete',\r\n      });\r\n    }\r\n    this.createInitialPayload();\r\n  }\r\n\r\n  createInitialPayload() {\r\n    this.payload = {\r\n      agencyId: this.user.agencyId,\r\n      stateId: this.user.stateId,\r\n      pageIndex: 0,\r\n      itemsPerPage: 10,\r\n    };\r\n  }\r\n\r\n  checkStudentEnrollment(classId: number) {\r\n    return this.classEnrollmentService\r\n      .checkStudentEnrollment(classId)\r\n      .subscribe();\r\n  }\r\n\r\n  searchTable(event: any): void {\r\n    const payload = this.createSearchPayload(true, event);\r\n    this.subscriptions.add(\r\n      this.classroomService.search(payload).subscribe((res: IClass) => {\r\n        if (res) {\r\n          this.paginator.firstPage();\r\n          this.initializeTableData(res);\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData): void {\r\n    const modalRef = this.dialog.open(AddClassModalComponent, {\r\n      data: editData ? editData : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((success: any) => {\r\n      if (success) {\r\n        this.initializeTable();\r\n      }\r\n    });\r\n  }\r\n\r\n  initializeTable() {\r\n    this.classroomService\r\n      .search(this.payload)\r\n      .pipe(take(1))\r\n      .subscribe((res: IClass) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        }\r\n      });\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.classroom);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.classroom;\r\n  }\r\n\r\n  onClear() {\r\n    if (this.isSiteAdmin && !this.isSuperUser) {\r\n      this.payload.agencyId = this.user.agencyId;\r\n      this.payload.stateId = this.user.stateId;\r\n      this.payload.classroomName = null;\r\n      this.payload.siteIds = null;\r\n    } else {\r\n      this.payload = {};\r\n    }\r\n    const empty: any = [];\r\n    this.dataSource = new MatTableDataSource(empty);\r\n    this.totalData = 0;\r\n    this.tableData = [];\r\n    this.pageSize = 10;\r\n    this.paginator.pageSize = 10;\r\n  }\r\n\r\n  deleteModal(event: IModalEmitData): void {\r\n    const selectedClassId = event.data.classId;\r\n    this.classroomService\r\n      .checkClassroomHasEnolledStudents(selectedClassId)\r\n      .subscribe((res: boolean) => {\r\n        if (res) {\r\n          event.data.modalInfo = {\r\n            title: `${event.data.className} cannot be deleted`,\r\n            message: `There is one or more children currently enrolled in this classroom.  The classroom can not be deleted.  For assistance, please contact WestEd at 1-800-770-6339 or email DRDPOnline@wested.org.`,\r\n            name: event.data.className,\r\n            primaryBtnClass: 'blue',\r\n            primaryBtnText: Modal.OK,\r\n          };\r\n          const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n            data: event ? event : undefined,\r\n          });\r\n          modalRef.afterClosed().subscribe();\r\n        } else {\r\n          event.data.modalInfo = {\r\n            title: `Delete ${event.data.className}`,\r\n            message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.className}</span>?`,\r\n            name: event.data.className,\r\n            primaryBtnClass: 'red',\r\n            primaryBtnText: Modal.Delete,\r\n            showCancel: true,\r\n          };\r\n          const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n            data: event ? event : undefined,\r\n          });\r\n          modalRef.afterClosed().subscribe((res) => {\r\n            if (res) {\r\n              this.removeClassroomName(selectedClassId, event.data.className);\r\n            }\r\n          });\r\n        }\r\n      });\r\n  }\r\n\r\n  removeClassroomName(classroomId: any, classroomName: string) {\r\n    this.subscriptions.add(\r\n      this.classroomService\r\n        .deleteClassroom(classroomId, `Classroom Name ${classroomName} Deleted`)\r\n        .subscribe((res: boolean) => {\r\n          this.initializeTable();\r\n        })\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n\r\n  createSearchPayload(resetPage: boolean, event: any): IClassroomSearchRequest {\r\n    if (this.isSiteAdmin && !this.isSuperUser) {\r\n      this.payload.classroomName = event.SearchName ?? null;\r\n      this.payload.stateId = event.StateId ?? this.payload.stateId ?? null;\r\n      this.payload.agencyId = event.StateId\r\n        ? event.AgencyId\r\n        : this.payload.agencyId ?? null;\r\n      this.payload.siteIds = event.SiteIds ?? null;\r\n    } else {\r\n      this.payload.classroomName = event.SearchName ?? null;\r\n      this.payload.agencyId = event.AgencyId ?? null;\r\n      this.payload.stateId = event.StateId ?? null;\r\n      this.payload.siteIds = event.SiteIds ?? null;\r\n    }\r\n\r\n    this.payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n\r\n    this.payload.itemsPerPage = this.paginator.pageSize;\r\n    return this.payload;\r\n  }\r\n\r\n  paginateTable(resetPage: boolean, search?: any): void {\r\n    this.payload.pageIndex = resetPage ? 0 : this.paginator.pageIndex + 1;\r\n    this.payload.itemsPerPage = this.paginator.pageSize;\r\n\r\n    this.classroomService.search(this.payload).subscribe((res: any) => {\r\n      if (res) {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(res);\r\n        if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n    <div class=\"flex justify-between border-b pb-5\">\r\n      <h1 class=\"text-[25px] font-bold\">{{title}}</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n\r\n    <div mat-dialog-content>\r\n      <form class=\"grid grid-cols-2 gap-4 gap-x-10\" [formGroup]=\"customConfigForm\">\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label class=\"font-bold required\" for=\"Demographics Section\">Demographics Section</label>\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <mat-form-field id=\"Demographics\" appearance=\"fill\">\r\n              <mat-select formControlName=\"sectionId\" [placeholder]=\"'Select an option'\">\r\n                <mat-option *ngFor=\"let section of sectionOptions$ | async\" [value]=\"section.id\"> {{ section.description }}\r\n                </mat-option>\r\n              </mat-select>\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label class=\"font-bold required\" for=\"Field Label\">Field Label</label>\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <input matInput\r\n                   placeholder=\"Add Field Label\"\r\n                   autocomplete=\"off\"\r\n                   id=\"label\"\r\n                   type=\"text\"\r\n                   formControlName=\"label\"\r\n                   maxlength=\"100\">\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label class=\"font-bold required\" for=\"Field Type\">Field Type</label>\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <mat-form-field id=\"Field\" appearance=\"fill\">\r\n                <mat-select formControlName=\"customFieldTypeId\" [placeholder]=\"'Select an option'\" (selectionChange)=\"onfieldTypeChange($event)\">\r\n                  <mat-option *ngFor=\"let type of fieldTypeOptions$ | async\" [value]=\"type.id\"> {{ type.name }}\r\n                  </mat-option>\r\n                </mat-select>\r\n            </mat-form-field>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label class=\"font-bold required\" for=\"Sort Order\">Sort Order</label>\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <input matInput\r\n                   placeholder=\"Add Sort Order\"\r\n                   autocomplete=\"off\"\r\n                   id=\"orderBy\"\r\n                   type=\"number\"\r\n                   formControlName=\"orderBy\"\r\n                   maxlength=\"5\">\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label class=\"font-bold\" for=\"Maximum Length of Characters\" [ngClass]=\"{ 'required' : isMaxRequired}\">Maximum Length of Characters</label>\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <input matInput\r\n                   placeholder=\"Add Maximum Length\"\r\n                   autocomplete=\"off\"\r\n                   id=\"maxLength\"\r\n                   type=\"number\"\r\n                   formControlName=\"maxLength\"\r\n                   max=\"1000\"\r\n                   maxlength=\"4\">\r\n          </mat-form-field>\r\n          <mat-error *ngIf=\"maxLength.value > 1000\">Maximum allowed is 1000. </mat-error>\r\n        </div>\r\n\r\n        <div class=\"flex w-[100%]\">\r\n          <div class=\"flex flex-col pr-5\">\r\n            <label class=\"font-bold\" for=\"Status\">Active</label>\r\n            <mat-slide-toggle formControlName=\"isActive\"\r\n                              [color]=\"'primary'\">\r\n            </mat-slide-toggle>\r\n          </div>\r\n          <div class=\"flex flex-col\">\r\n            <label class=\"font-bold\" for=\"v\">Required</label>\r\n            <mat-slide-toggle formControlName=\"isRequired\"\r\n                              [color]=\"'primary'\">\r\n            </mat-slide-toggle>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-2 items-center w-[100%]\">\r\n          <label class=\"font-normal\" [ngClass]=\"{ 'required' : isOptionRequired}\" for=\"Field Type Options\">Field Type Options</label>\r\n          <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n            <input matInput\r\n                   placeholder=\"Add Field Type\"\r\n                   autocomplete=\"off\"\r\n                   id=\"options\"\r\n                   type=\"text\"\r\n                   formControlName=\"options\"\r\n                   maxlength=\"50\">\r\n          </mat-form-field>\r\n          <mat-error *ngIf=\"options.errors?.error\">Options must be seperated by pipes.</mat-error>\r\n        </div>\r\n      </form>\r\n\r\n    </div>\r\n    <div class=\"spacer\"></div>\r\n    <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n      <button mat-button mat-dialog-close>Cancel</button>\r\n      <drdp-btn *ngIf=\"customConfigForm.valid\" mat-button [mat-dialog-close]=\"onSubmit()\" [disabled]=\"false\" cdkFocusInitial>Save and Submit</drdp-btn>\r\n      <drdp-btn *ngIf=\"customConfigForm.invalid\" mat-button [disabled]=\"true\" cdkFocusInitial>Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport {\r\n  AbstractControl,\r\n  FormBuilder,\r\n  FormGroup,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DataType, FieldType } from '@core/enums/data-type';\r\nimport { IDemographicInformation } from '@core/interfaces/idemographic-information';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { Observable } from 'rxjs';\r\nimport { StateConfigurationComponent } from '../state-configuration.component';\r\n\r\n@Component({\r\n  selector: 'drdp-custom-configuration',\r\n  templateUrl: './custom-configuration.component.html',\r\n  styleUrls: ['./custom-configuration.component.scss'],\r\n})\r\nexport class CustomConfigurationComponent implements OnInit {\r\n  customConfigForm: FormGroup | any;\r\n  title?: string;\r\n  sectionOptions$?: Observable<IDemographicInformation[]>;\r\n  fieldTypeOptions$?: Observable<any>;\r\n  isOptionRequired = false;\r\n  isMaxRequired = false;\r\n\r\n  get columnName() {\r\n    return this.customConfigForm.get('columnName');\r\n  }\r\n  get dataType() {\r\n    return this.customConfigForm.get('dataType');\r\n  }\r\n  get customFieldTypeId() {\r\n    return this.customConfigForm.get('customFieldTypeId');\r\n  }\r\n  get isActive() {\r\n    return this.customConfigForm.get('isActive');\r\n  }\r\n  get isRequired() {\r\n    return this.customConfigForm.get('isRequired');\r\n  }\r\n  get iscustom() {\r\n    return this.customConfigForm.get('iscustom');\r\n  }\r\n  get label() {\r\n    return this.customConfigForm.get('label');\r\n  }\r\n  get options() {\r\n    return this.customConfigForm.get('options');\r\n  }\r\n  get sectionID() {\r\n    return this.customConfigForm.get('sectionID');\r\n  }\r\n  get stateID() {\r\n    return this.customConfigForm.get('stateID');\r\n  }\r\n  get orderBy() {\r\n    return this.customConfigForm.get('orderBy');\r\n  }\r\n  get maxLength() {\r\n    return this.customConfigForm.get('maxLength');\r\n  }\r\n\r\n  public get dataTypeConst() {\r\n    return DataType;\r\n  }\r\n  public get fieldTypeConst() {\r\n    return FieldType;\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<StateConfigurationComponent>,\r\n    private lookupService: LookupService,\r\n    @Inject(MAT_DIALOG_DATA) public modal: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.title = this.modal.data\r\n      ? 'Edit Custom Configuration'\r\n      : 'Add Custom Configuration';\r\n    this.sectionOptions$ = this.lookupService.getDemographicInformation();\r\n    this.fieldTypeOptions$ = this.lookupService.getFieldTypes();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.customConfigForm = this.fb.group({\r\n      id: [0],\r\n      customFieldTypeId: [null, Validators.required],\r\n      isActive: [true, Validators.required],\r\n      isRequired: [false, Validators.required],\r\n      isCustom: [true],\r\n      label: [null, [Validators.required]],\r\n      options: [null, [Validators.maxLength(50), this.customOptionValidator()]],\r\n      sectionId: [null, Validators.required],\r\n      stateId: [this.modal.data ? this.modal.data.stateId : this.modal],\r\n      orderBy: [null, [Validators.required, Validators.pattern('^[0-9]*$')]],\r\n      maxLength: [\r\n        null,\r\n        [\r\n          Validators.pattern('^[0-9]*$'),\r\n          Validators.max(1000),\r\n          Validators.maxLength(4),\r\n        ],\r\n      ],\r\n    });\r\n\r\n    if (this.modal.data) {\r\n      let {\r\n        id,\r\n        customFieldTypeId,\r\n        isActive,\r\n        isRequired,\r\n        isCustom,\r\n        label,\r\n        options,\r\n        sectionId,\r\n        orderBy,\r\n        maxLength,\r\n      } = this.modal.data;\r\n\r\n      this.customConfigForm.patchValue({\r\n        id,\r\n        customFieldTypeId,\r\n        isActive,\r\n        isRequired,\r\n        isCustom,\r\n        label,\r\n        options,\r\n        sectionId,\r\n        orderBy,\r\n        maxLength,\r\n      });\r\n    }\r\n  }\r\n\r\n  onfieldTypeChange(event: any): void {\r\n    if (\r\n      event.value == FieldType.dropdownSingle ||\r\n      event.value == FieldType.dropdownMultiple\r\n    ) {\r\n      this.options.setValidators([\r\n        Validators.required,\r\n        Validators.maxLength(50),\r\n        this.customOptionValidator(),\r\n      ]);\r\n      this.isOptionRequired = true;\r\n    } else {\r\n      this.options.clearValidators();\r\n      this.isOptionRequired = false;\r\n    }\r\n    this.options.updateValueAndValidity();\r\n\r\n    if (event.value == FieldType.text) {\r\n      this.maxLength.setValidators([\r\n        Validators.required,\r\n        Validators.pattern('^[0-9]*$'),\r\n        Validators.max(1000),\r\n        Validators.maxLength(4),\r\n      ]);\r\n      this.isMaxRequired = true;\r\n    } else {\r\n      this.maxLength.setValidators([Validators.pattern('^[0-9]*$')]);\r\n      this.isMaxRequired = false;\r\n    }\r\n    this.maxLength.updateValueAndValidity();\r\n  }\r\n\r\n  customOptionValidator(): ValidatorFn {\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      const value = control.value;\r\n      if (!value) return null;\r\n\r\n      const splitOptions = value.split('|');\r\n      const hasTwoOrMoreOptions = splitOptions.length >= 2;\r\n      let isOptionsValid = true;\r\n\r\n      for (let option of splitOptions) {\r\n        if (option.trim().length > 0) {\r\n          isOptionsValid = true;\r\n        } else {\r\n          isOptionsValid = false;\r\n        }\r\n      }\r\n\r\n      const customOptionsValid = hasTwoOrMoreOptions && isOptionsValid;\r\n      return !customOptionsValid ? { error: true } : null;\r\n    };\r\n  }\r\n\r\n  onSubmit() {\r\n    let payload = {\r\n      StateId: this.modal.data ? this.modal.data.stateId : this.modal,\r\n      StateConfigList: [this.customConfigForm.value],\r\n    };\r\n\r\n    return payload;\r\n  }\r\n}\r\n","<div class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b pb-5\">\r\n    <h1 class=\"text-[25px] font-bold mr-8\">{{title}}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-4 gap-x-10\" [formGroup]=\"targetForm\" (ngSubmit)=\"onSubmit()\">\r\n      <div class=\"col-span-2 items-center w-[100%]\">\r\n        <div class=\"col-span-1 items-center w-[50%]\">\r\n          <drdp-select-school-year label=\"School Year\" [initialYearId]=\"schoolYearId.value\"\r\n           [editConfigs]=true (schoolYear)=\"onDropDownSelect($event)\"></drdp-select-school-year>\r\n        </div>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7a1\">7A1</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7a1\" type=\"number\" formControlName=\"indicator7a1\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7a2\">7A2</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7a2\" type=\"number\" formControlName=\"indicator7a2\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7b1\">7B1</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7b1\" type=\"number\" formControlName=\"indicator7b1\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7b2\">7B2</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7b2\" type=\"number\" formControlName=\"indicator7b2\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7c1\">7C1</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7c1\" type=\"number\" formControlName=\"indicator7c1\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\"for=\"7c2\">7C2</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput id=\"7c2\" type=\"number\" formControlName=\"indicator7c2\">\r\n        </mat-form-field>\r\n      </div>\r\n      <mat-error *ngIf=\"invalidDecimal\" class=\"text-sm mt-3\">Invalid decimal value.</mat-error>\r\n    </form>\r\n  </div>\r\n  <div class=\"spacer\"></div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <button mat-button mat-dialog-close type=\"button\">Cancel</button>\r\n    <drdp-btn [disabled]=\"targetForm.invalid\" mat-button type=\"submit\" (click)=\"onSubmit()\">Save</drdp-btn> \r\n  </div>\r\n</div>\r\n\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ISchoolYear } from '@core/interfaces/iratingperiod';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { CustomValidators } from '@core/validators/custom.validator';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-school-year-target',\r\n  templateUrl: './school-year-target.component.html',\r\n  styleUrls: ['./school-year-target.component.scss']\r\n})\r\nexport class SchoolYearTargetComponent implements OnInit {\r\n  targetForm: FormGroup | any;\r\n  title: string = '';\r\n  schoolYears: ISchoolYear[] = [];\r\n  invalidDecimal: boolean = false;\r\n\r\n  indicatorKeys: string[] = ['indicator7a1', 'indicator7a2', 'indicator7b1', 'indicator7b2', 'indicator7c1', 'indicator7c2'];\r\n\r\n  get schoolYearId() { return this.targetForm.get('schoolYearId'); }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private lookupService: LookupService,\r\n    private stateService: StateService,\r\n    public dialogRef: MatDialogRef<SchoolYearTargetComponent>,\r\n    private toastService: ToastService,\r\n    @Inject(MAT_DIALOG_DATA) public modal: any\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.title = this.modal.editData ? 'Edit School Year OSEP Target' : 'Add School Year OSEP Target';\r\n    this.initializeForms();\r\n    this.getSchoolYears();\r\n    this.observeFormChanges();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.targetForm = this.fb.group({\r\n      id: [0],\r\n      stateId: [this.modal.stateId],\r\n      schoolYearId: [null, Validators.required],\r\n      indicator7a1: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n      indicator7a2: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n      indicator7b1: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n      indicator7b2: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n      indicator7c1: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n      indicator7c2: [null, [Validators.required, CustomValidators.decimalValidator]],\r\n    });\r\n\r\n    if (this.modal.editData) {\r\n      this.targetForm.patchValue(this.modal.editData);\r\n      this.roundNumericFields();\r\n    }\r\n  }\r\n\r\n  private roundNumericFields(): void {\r\n    this.indicatorKeys.forEach(key => { \r\n      this.targetForm.controls[key].setValue(this.modal.editData[key].toFixed(2));\r\n    });\r\n  }\r\n\r\n  observeFormChanges(): void {\r\n    this.targetForm.valueChanges.subscribe(() => {\r\n      this.invalidDecimal = this.indicatorKeys.some(key => {\r\n        const control = this.targetForm.get(key);\r\n        return control && control.errors && control.errors.invalidDecimal;\r\n      });\r\n    });\r\n  }\r\n\r\n  getSchoolYears(): void {\r\n    this.lookupService.getAllSchoolYears().pipe(\r\n      take(1)\r\n    ).subscribe((res: ISchoolYear[]) => {\r\n      this.schoolYears = res;\r\n    });\r\n  }\r\n  \r\n  onDropDownSelect(event: any): void {\r\n    this.schoolYearId.setValue(event?.id ?? null);\r\n  }\r\n\r\n  onSubmit(): void {\r\n    if (this.targetForm.invalid) {\r\n      this.toastService.error('Please fill out all required fields.');\r\n      return;\r\n    } \r\n\r\n    if (this.modal.editData) {\r\n      this.stateService.updateStateSchoolYearTarget(this.targetForm.value, `School Year ${this.modal.editData.schoolYearName} OSEP Target Updated.`).pipe(\r\n        take(1)\r\n      ).subscribe((res: boolean) => {\r\n        if (res) this.dialogRef.close(res);\r\n      });\r\n    } else {\r\n      this.stateService.saveStateSchoolYearTarget(this.targetForm.value).pipe(\r\n        take(1)\r\n      ).subscribe((res: boolean) => {\r\n        if (res) this.dialogRef.close(res);\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { FieldType, RegionType } from '@core/enums/data-type';\r\nimport { StudentDemographic } from '@core/enums/student-demographic-form';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-student-demographics',\r\n  templateUrl: './student-demographics.component.html',\r\n  styleUrls: ['./student-demographics.component.scss']\r\n})\r\nexport class StudentDemographicsComponent implements OnInit {\r\n  @Input() state?: IState;\r\n  demographicForm: FormGroup | any;\r\n  configurations: any;\r\n  public get fieldTypeConst() {return FieldType };\r\n  public get regionTypeConst() {return RegionType };\r\n  public get studentDemograpic() {return StudentDemographic };\r\n\r\n  constructor(private fb: FormBuilder, public stateService: StateService, private router:  Router) { }\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngOnChanges() {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.demographicForm = this.fb.group({\r\n      'Statewide Student Identifier': [null],\r\n      'maxLength': [10],\r\n      'Agency/District Student Identifier': [null],\r\n      'Region Label': [RegionType.Region],\r\n      'Primary Disability': [false],\r\n      'Special Education Entry Date': [false],\r\n      'District of Liability': [false],\r\n      'Anticipated Date of Exit from Preschool Education to Kindergarten': [false],\r\n      'Date of Exit from Preschool Special Education to Kindergarten': [false],\r\n      'Selpa': [false],\r\n      'initialAssessmentToolId': [false],\r\n      'outcome1Id': [false],\r\n      'outcome2Id': [false],\r\n      'outcome3Id': [false],\r\n    });\r\n    this.initializeValues();\r\n  }\r\n\r\n  initializeValues(): void {\r\n    if (this.state) {\r\n      this.stateService.getStateConfigurations(this.state?.id).pipe(\r\n        take(1),\r\n        tap((configs: any) => {\r\n          if (configs) {\r\n            this.configurations = configs.filter((config: any) => !config.iscustom);\r\n\r\n            for(let config of this.configurations) {\r\n              if (config.columnName == StudentDemographic.SSID) {\r\n                this.demographicForm.controls[StudentDemographic.SSID].setValue(config.label);\r\n                this.demographicForm.controls[StudentDemographic.maxLength].setValue(config.maxLength == 0 ? 10 : config.maxLength)\r\n              } else if (config.columnName == StudentDemographic.AgencySID) {\r\n                this.demographicForm.controls[StudentDemographic.AgencySID].setValue(config.label);\r\n              } else if (config.columnName === StudentDemographic.RegionLabel) {\r\n                this.demographicForm.controls[StudentDemographic.RegionLabel].setValue(config.label ?? RegionType.Region);\r\n              } else if (!config.isCustom){\r\n                this.demographicForm.controls[config.columnName].setValue(config.isActive);\r\n              }\r\n            }\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  updateConfigurations(): void {\r\n    for(let config of this.configurations) {\r\n      if (config.columnName == StudentDemographic.SSID) {\r\n        config.label = this.demographicForm.controls[StudentDemographic.SSID].value;\r\n        config.maxLength = this.demographicForm.controls[StudentDemographic.maxLength].value;\r\n      } else if (config.columnName == StudentDemographic.AgencySID) {\r\n        config.label = this.demographicForm.controls[StudentDemographic.AgencySID].value;\r\n      } else if (config.columnName == StudentDemographic.RegionLabel) {\r\n        config.label = this.demographicForm.controls[StudentDemographic.RegionLabel].value;\r\n      } else if (!config.isCustom){\r\n        config.isActive = this.demographicForm.controls[config.columnName]?.value;\r\n      }\r\n    }\r\n  }\r\n\r\n  addConfiguration(): void {\r\n    Object.keys(this.demographicForm.controls).forEach(key => {\r\n      const configExist = this.configurations.find((obj: any) => (obj.columnName === key));\r\n      const isValidFormControl =  key !== StudentDemographic.maxLength;\r\n\r\n      if (!configExist && isValidFormControl) {\r\n        this.configurations.push({\r\n          Id: 0,\r\n          StateID: this.state?.id,\r\n          ColumnName: key,\r\n          SectionID: this.getSection(key),\r\n          Label: this.getLabel(key),\r\n          IsActive: this.checkIsActive(key),\r\n          MaxLength: this.getMaxLength(key)\r\n        });\r\n      }\r\n\r\n    });\r\n  }\r\n\r\n  getSection(key: string): number | null{\r\n    switch(key) {\r\n      case StudentDemographic.SSID:\r\n      case StudentDemographic.AgencySID:\r\n        return 1;\r\n      case StudentDemographic.PrimaryDisability:\r\n      case StudentDemographic.SpecialEdEntryDate:\r\n      case StudentDemographic.DistrictLiability:\r\n      case StudentDemographic.AnticipatedDateExit:\r\n      case StudentDemographic.DateExit:\r\n      case StudentDemographic.Selpa:\r\n        return 5;\r\n      default:\r\n        return null;\r\n    }\r\n  }\r\n\r\n  getLabel(key: string): string | null {\r\n    if (key === StudentDemographic.SSID || key === StudentDemographic.AgencySID || key === StudentDemographic.RegionLabel) {\r\n      return this.demographicForm.controls[key].value;\r\n    }\r\n    return null;\r\n  }\r\n\r\n\r\n  getMaxLength(key: string): number | null {\r\n    if (key === StudentDemographic.SSID) {\r\n      const maxLength = this.demographicForm.controls[StudentDemographic.maxLength].value;\r\n      return maxLength > 0 ? maxLength : 10;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  checkIsActive(key: string): boolean | null {\r\n    if (key !== StudentDemographic.SSID && key !== StudentDemographic.AgencySID && key !== this.studentDemograpic.RegionLabel) {\r\n      return this.demographicForm.controls[key].value;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  backToStatePage(): void {\r\n    this.router.navigate(['config/states']);\r\n  }\r\n\r\n  onSubmit(): void {\r\n    if (this.demographicForm.value) {\r\n      this.updateConfigurations();\r\n      this.addConfiguration();\r\n\r\n      if (this.configurations) {\r\n        let payload = {\r\n          StateID:  this.state?.id,\r\n          StateConfigList: this.configurations\r\n        }\r\n\r\n        this.stateService.updateStateConfigurations(payload).pipe(\r\n          take(1)\r\n        ).subscribe()\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","<drdp-container additionClasses=\"h-min\">\r\n\r\n    <div class=\"pl-5 pb-5 w-full\">\r\n        <h1 class=\" text-2xl font-medium\">Student Demographics</h1>\r\n        <form id=\"demographicForm\" class=\"grid grid-cols-2 gap-1 pt-4\" [formGroup]=\"demographicForm\">\r\n            <div class=\"col-span-1 items-center invisible lg:visible w-[100%]\">\r\n              <label class=\"font-bold\" for=\"Name\">Name</label>\r\n            </div>\r\n\r\n            <div class=\"col-span-1 items-center invisible lg:visible w-[100%]\">\r\n              <label class=\"font-bold\" for=\"Options\">Options</label>\r\n            </div>\r\n\r\n            <div class=\"col-span-2 lg:col-span-1 pt-5 items-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Statewide Student Identifier\">Statewide Student Identifier</label>\r\n            </div>\r\n\r\n            <div class=\"col-span-2 lg:col-span-1 pt-5 w-[100%]\">\r\n              <div class=\"grid col-span-1 sm:grid-cols-3 gap-3\">\r\n                <div class=\"col-span-1\">\r\n                  <mat-form-field id=\"ssidLabel\" class=\"bg-white\">\r\n                      <input matInput\r\n                             autocomplete=\"off\"\r\n                             placeholder=\"SSID Label\"\r\n                             id=\"SSID\"\r\n                             type=\"text\"\r\n                             [formControlName]=\"studentDemograpic.SSID\"\r\n                             maxlength=\"100\">\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"col-span-1\">\r\n                  <mat-form-field id=\"ssidAgency\" class=\"bg-white\">\r\n                      <input matInput\r\n                             autocomplete=\"off\"\r\n                             placeholder=\"SSID Max Length\"\r\n                             id=\"customMaxLengthSSID\"\r\n                             type=\"number\"\r\n                             [formControlName]=\"studentDemograpic.maxLength\"\r\n                             >\r\n                    </mat-form-field>\r\n                </div>\r\n              </div>\r\n            </div>\r\n\r\n            <div class=\"col-span-2 lg:col-span-1 items-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Statewide Student Identifier\">Agency/District Student Identifier</label>\r\n            </div>\r\n\r\n            <div class=\"col-span-2 lg:col-span-1 w-[100%]\">\r\n              <div class=\"grid col-span-1 sm:grid-cols-3 gap-4\">\r\n                <div class=\"col-span-1\">\r\n                  <mat-form-field class=\"bg-white\">\r\n                      <input matInput\r\n                             autocomplete=\"off\"\r\n                             placeholder=\"Agency SID Label\"\r\n                             id=\"ADSI\"\r\n                             type=\"text\"\r\n                             [formControlName]=\"studentDemograpic.AgencySID\"\r\n                             maxlength=\"100\">\r\n                    </mat-form-field>\r\n                </div>\r\n              </div>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Primary Disability\">Region Label</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] lg:w-[35%] h-min\">\r\n              <mat-form-field id=\"fieldTypeAgency\" floatLabel=\"never\">\r\n                <mat-select matNativeControl placeholder=\"Select Label\" [formControlName]=\"studentDemograpic.RegionLabel\" >\r\n                  <mat-option [value]=\"regionTypeConst.Region\">Region</mat-option>\r\n                  <mat-option [value]=\"regionTypeConst.SAU\">SAU</mat-option>\r\n                </mat-select>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Primary Disability\">Primary Disability</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.PrimaryDisability\"\r\n                              color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Special Education Entry Date\">Special Education Entry Date</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.SpecialEdEntryDate\"\r\n                               color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"District of Liability\">District of Liability</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.DistrictLiability\"\r\n                              color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Anticipated Date of Exit from Preschool Education to Kindergarten\">Anticipated Date of Exit from Preschool Education to Kindergarten</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.AnticipatedDateExit\"\r\n                              color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Date of Exit from Preschool Special Education to Kindergarten\">Date of Exit from Preschool Special Education to Kindergarten</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.DateExit\"\r\n                               color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Selpa\">Selpa</label>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.Selpa\"\r\n                               color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"InitialAssessmentTool\">Initial Assessment Tool</label>\r\n            </div>\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.initialAssessmentToolId\"\r\n                  color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Outcome 1\">Outcome 1</label>\r\n            </div>\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.outcome1Id\"\r\n                  color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Outcome 2\">Outcome 2</label>\r\n            </div>\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.outcome2Id\"\r\n                  color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"flex flex-col justify-center w-[100%]\">\r\n              <label class=\"font-normal\" for=\"Outcome 3\">Outcome 3</label>\r\n            </div>\r\n            <div class=\"flex flex-col w-[100%] h-min\">\r\n                <mat-checkbox [formControlName]=\"studentDemograpic.outcome3Id\"\r\n                  color=\"primary\">\r\n                  Enable\r\n                </mat-checkbox>\r\n            </div>\r\n\r\n            <div class=\"col-span-2 w-[100%] h-min\">\r\n                <div class=\"flex justify-end w-[100%]\">\r\n                    <drdp-btn [color]=\"'cancel'\" (click)=\"backToStatePage()\">Cancel</drdp-btn>\r\n                    <span class=\" ml-5\"><drdp-btn (click)=\"onSubmit()\">Save and Submit</drdp-btn></span>\r\n                </div>\r\n            </div>\r\n\r\n          </form>\r\n    </div>\r\n</drdp-container>\r\n","export enum UploadTypes {\r\n    user = 1,\r\n    class = 2,\r\n    student = 3\r\n}\r\n\r\nexport enum CompanionDocuments {\r\n    Guidance_For_DRDP_Domain_Scaled_Scores = 1,\r\n    Group_Report_Guidance = 2,\r\n    Domain_Scale_Cut_Points_for_Sharing = 3\r\n}","import { Injectable } from '@angular/core';\r\nimport { IChildTemplateUpload } from '@core/interfaces/IdownloadTemplate';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DownloadTemplateService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  downloadTemplate(stateId: number, uploadType: number, options?: any): Observable<any> {\r\n    return this.dataService.getWithOptions(`template/${stateId}/${uploadType}`, options);\r\n  }\r\n\r\n  uploadTemplate(upload: FormData, message?: string): Observable<any> {\r\n    return this.dataService.post(`template/upload`, upload, message);\r\n  }\r\n}\r\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { UploadTypes } from '@core/enums/upload-types';\r\nimport { IChildTemplate, IChildTemplateUpload } from '@core/interfaces/IdownloadTemplate';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { DownloadTemplateService } from '@core/services/downloadTemplate.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-child-upload',\r\n  templateUrl: './child-upload.component.html',\r\n  styleUrls: ['./child-upload.component.scss']\r\n})\r\nexport class ChildUploadComponent implements OnInit {\r\n  @Input() stateId?: number;\r\n  stateCode = '';\r\n  public get uploadTypes() { return UploadTypes }\r\n  constructor(private downloadTemplateService: DownloadTemplateService, private authService: AuthService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.stateCode = this.authService.getUserStateCode();\r\n  }\r\n\r\n  downloadFile() {\r\n    if (this.stateId) {\r\n      this.downloadTemplateService.downloadTemplate(this.stateId, this.uploadTypes.student, { responseType: 'blob', observe: 'response' }).pipe(\r\n        take(1),\r\n        tap((res: any) => {\r\n          let fileName = `All-Instrument-Upload-${this.stateCode}.xlsx`;             \r\n          let link = document.createElement('a');\r\n          link.href = window.URL.createObjectURL(res.body);\r\n          link.download = fileName;\r\n          link.click();\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  onFileSelected(event: any) {\r\n    const file:File = event.target.files[0];\r\n    if (file) {\r\n      if (this.stateId) {\r\n        var formData = new FormData();\r\n        formData.append('template.StateId', JSON.stringify(this.stateId));\r\n        formData.append('template.UploadTypeId', JSON.stringify(this.uploadTypes.student));\r\n        formData.append('template.Id', JSON.stringify(0));\r\n        formData.append('file', file);\r\n\r\n        this.downloadTemplateService.uploadTemplate(formData, 'Upload Template Successful').pipe(\r\n          take(1)\r\n        ).subscribe();\r\n      }\r\n    }\r\n  }\r\n}\r\n","<div>\r\n    <h1 class=\"text-2xl font-medium\">Child Upload Template</h1>\r\n    <div class=\"flex flex-col pt-5\">\r\n        <div class=\"col-span-1\">\r\n            <label>All Instrument Upload Template:</label>\r\n            <span class=\"pl-0 sm:pl-4 whitespace-nowrap\"><i class=\"uil uil-file-download text-drdpblue-300 text-xl\"></i>\r\n                <button class=\"pl-1\" (click)=\"downloadFile()\">Download File</button>\r\n            </span>\r\n            <span class=\"pl-4 whitespace-nowrap\"><i class=\"uil uil-upload text-drdpblue-300 text-xl\"></i>\r\n                <input type=\"file\" class=\"file-input\"(change)=\"onFileSelected($event)\" #fileUpload>\r\n                <button class=\"pl-1\" (click)=\"fileUpload.click()\">Upload File</button>\r\n            </span>\r\n        </div>\r\n    </div>\r\n</div>","<div class=\"pl-5 pb-5 w-full\">\r\n  <div class=\"flex justify-between\">\r\n    <h1 class=\"text-2xl font-medium\">State Dashboard</h1>  \r\n    <mat-checkbox [(ngModel)]=\"stateDashboardEnabled\" color=\"primary\">\r\n      <span class=\"font-bold\">State Dashboard Enabled</span>\r\n    </mat-checkbox>\r\n  </div>\r\n  <form *ngIf=\"stateDashboardEnabled\" id=\"dashboardForm\" class=\"grid grid-cols-2 gap-1 pt-4\" [formGroup]=\"dashboardForm\">\r\n    <div class=\"col-span-1 items-center w-[100%]\">\r\n      <label class=\"font-bold\" for=\"Name\">Tile Name</label>\r\n    </div>\r\n\r\n    <div class=\"col-span-1 items-center w-[100%]\">\r\n      <label class=\"font-bold\" for=\"Options\">Tile Status</label>\r\n    </div>\r\n\r\n    <ng-container *ngFor=\"let tile of dashboardTiles\">\r\n      <div class=\"flex flex-col justify-center w-[100%]\">\r\n        <label class=\"font-normal\" [for]=\"tile.controlName\">{{ tile.title }}</label>\r\n      </div>\r\n      <div class=\"flex flex-col w-[100%] h-min mt-1.5\">\r\n        <mat-checkbox [formControlName]=\"tile.controlName\" color=\"primary\">Enable</mat-checkbox>\r\n      </div>\r\n    </ng-container>\r\n  </form>\r\n  <div class=\"col-span-2 w-[100%] h-min\" [class.mt-6]=\"!stateDashboardEnabled\">\r\n    <div class=\"flex justify-end w-[100%]\">\r\n      <drdp-btn color=\"cancel\" (click)=\"onCancel()\">Cancel</drdp-btn>\r\n      <span class=\" ml-5\"><drdp-btn (click)=\"onSubmit()\" [disabled]=\"isSubmitting\">Save and Submit</drdp-btn></span>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, SimpleChanges, inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { IStateDashboardConfiguration, IStateDashboardTile } from '@core/interfaces/istate-dashboard';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { forkJoin, take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-state-dashboard',\r\n  templateUrl: './state-dashboard.component.html',\r\n  styleUrls: ['./state-dashboard.component.scss']\r\n})\r\nexport class StateDashboardComponent implements OnInit {\r\n  @Input() stateId?: number;\r\n  dashboardForm: FormGroup | any;\r\n  dashboardTiles: IStateDashboardTile[] = [];\r\n  configurations: IStateDashboardConfiguration[] = [];\r\n  isSubmitting: boolean = false;\r\n  stateDashboardEnabled: boolean = false;\r\n\r\n  private fb = inject(FormBuilder);\r\n  private lookupService = inject(LookupService);\r\n  private stateService = inject(StateService);\r\n  private router = inject(Router);\r\n\r\n  ngOnInit(): void {\r\n    this.lookupService.getStateDashboardTiles()\r\n      .pipe(take(1))\r\n      .subscribe((tiles: IStateDashboardTile[]) => {\r\n        this.dashboardTiles = tiles;\r\n      });\r\n\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['stateId']) this.initializeValues();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.dashboardForm = this.fb.group({\r\n      enrollment: [false],\r\n      ageGroup: [false],\r\n      childByRace: [false],\r\n      rating: [false],\r\n      programByAgeGroup: [false],\r\n      homeLanguage: [false],\r\n      childByIep: [false],\r\n      ageBasedOnDob: [false],\r\n      genderDemographic: [false],\r\n      childInSped: [false],\r\n      disability: [false],\r\n    });\r\n  }\r\n\r\n  initializeValues(): void {\r\n    if (this.stateId) {\r\n      forkJoin([\r\n        this.stateService.getDashboardConfigurations(this.stateId),\r\n        this.stateService.stateDashboardEnabled(this.stateId)\r\n      ]).pipe(take(1))\r\n        .subscribe(([configs, stateDashboardEnabled]) => {\r\n          this.configurations = configs;\r\n          this.configurations.forEach(config => {\r\n            this.dashboardForm.get(config.controlName).setValue(config.isActive);\r\n          });\r\n          this.stateDashboardEnabled = stateDashboardEnabled;\r\n        });\r\n    }\r\n  }\r\n\r\n  updateConfigurations(): void {\r\n    Object.keys(this.dashboardForm.controls).forEach(key => {\r\n      const config = this.configurations.find(c => c.controlName === key);\r\n\r\n      if (config) {\r\n        config.isActive = this.dashboardForm.get(key).value;\r\n      } else if (this.dashboardForm.get(key).value) {\r\n        this.configurations.push({\r\n          id: 0,\r\n          stateId: this.stateId ?? 0,\r\n          controlName: key,\r\n          stateDashboardTileId: this.dashboardTiles.find(t => t.controlName === key)?.id ?? 0,\r\n          isActive: this.dashboardForm.get(key).value\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  onSubmit(): void {\r\n    this.isSubmitting = true;\r\n    if (this.dashboardForm.value) {\r\n      this.updateConfigurations();\r\n\r\n      this.stateService.updateDashboardConfigurations(this.configurations, this.stateId ?? 0, this.stateDashboardEnabled)\r\n        .pipe(take(1)).subscribe((res: boolean) => {\r\n          if (res) {\r\n            this.initializeValues();\r\n            this.isSubmitting = false;\r\n          }\r\n        });\r\n    }\r\n  }\r\n\r\n  onCancel(): void {\r\n    this.router.navigate(['config/states']);\r\n  }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription, take, tap } from 'rxjs';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { CustomConfigurationComponent } from './custom-configuration/custom-configuration.component';\r\nimport { SchoolYearTargetComponent } from './school-year-target/school-year-target.component';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { IStateSchoolYearTarget } from '@core/interfaces/istateSchoolYearTarget';\r\n\r\n@Component({\r\n  selector: 'drdp-state-configuration',\r\n  templateUrl: './state-configuration.component.html',\r\n  styleUrls: ['./state-configuration.component.scss']\r\n})\r\nexport class StateConfigurationComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  subscriptions  = new Subscription();\r\n  title = 'State Configuration for '\r\n  currentState?: IState;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  targetTableData?: any;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'demographicInformation.description', header: 'Demographics Section', type: 'text'},\r\n    { columnDef: 'label', header: 'Field Label', type: 'text'},\r\n    { columnDef: 'customFieldType.name', header: 'Field Type', type: 'text'},\r\n    { columnDef: 'isActiveLabel', header: 'Active', type: 'text'},\r\n    { columnDef: 'isRequired', header: 'Required', type: 'text'},\r\n    { columnDef: 'options', header: 'Field Type Options', type: 'text'},\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit'}\r\n  ];\r\n\r\n  targetColumns = [\r\n    { columnDef: 'schoolYearName', header: 'School Year', type: 'text'},\r\n    { columnDef: 'indicator7a1', header: '7A1', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'indicator7a2', header: '7A2', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'indicator7b1', header: '7B1', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'indicator7b2', header: '7B2', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'indicator7c1', header: '7C1', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'indicator7c2', header: '7C2', type: 'text', applyDecimalPipe: true},\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit'},\r\n    { columnDef: 'delete', header: 'Delete', type: 'delete'}\r\n  ];\r\n\r\n  constructor(\r\n    private activatedRoute:ActivatedRoute, \r\n    private stateService: StateService, \r\n    public modal: MatDialog,\r\n    public dialog: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getState();\r\n  }\r\n\r\n  getState(): void {\r\n    this.subscriptions.add(this.activatedRoute.params.subscribe(params => {\r\n      let { stateId } = params;\r\n\r\n      this.stateService.getStatesById(stateId).pipe(\r\n        take(1),\r\n        tap((state: IState) => {\r\n          this.currentState = state;\r\n          this.title = this.title.concat(this.currentState.stateName);\r\n        })\r\n      ).subscribe();\r\n      this.getCustomConfigs(stateId);\r\n      this.getTargets(stateId);\r\n    }));\r\n  }\r\n\r\n  getCustomConfigs(stateId: number): void {\r\n\r\n    this.stateService.getCustomStateConfigurations(stateId).pipe(\r\n      take(1)\r\n    ).subscribe((configs: any) => {\r\n      if (configs) {\r\n        configs.forEach((config: any) => config.isActiveLabel = config.isActive ? 'Active' : '');\r\n        this.tableData = configs;\r\n        this.table?.reRender(this.tableData);\r\n      }\r\n    });\r\n  }\r\n\r\n  openModal(editData?: any, stateId?: number) {\r\n    const modalRef = this.modal.open(CustomConfigurationComponent, { data: editData ?? stateId });\r\n\r\n    modalRef.afterClosed().subscribe((payload: any) => {\r\n      if (payload) {\r\n        this.stateService.updateStateConfigurations(payload).pipe(\r\n          take(1),\r\n          tap(_ => {\r\n            this.getCustomConfigs(this.currentState?.id ?? editData.data.stateId);\r\n          })\r\n        ).subscribe();\r\n      }\r\n    });\r\n  }\r\n  \r\n  getTargets(stateId: number): void {\r\n    this.stateService.getStateSchoolYearTargets(stateId).pipe(\r\n      take(1)\r\n    ).subscribe((targets: IStateSchoolYearTarget[]) => {\r\n      if (targets) this.targetTableData = targets;\r\n    });\r\n  }\r\n\r\n  openTargetModal(editData?: any, stateId?: number): void {\r\n    const modalRef = this.modal.open(SchoolYearTargetComponent, { \r\n      data: { editData: editData?.data, stateId: stateId } \r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res && this.currentState?.id) this.getTargets(this.currentState.id);\r\n    });\r\n  }\r\n\r\n  deleteTargetModal(event: any): void {    \r\n    event.data.modalInfo = {\r\n      title: `Delete ${event.data.schoolYearName}`,\r\n      message: `Are you sure you want to want to delete this OSEP Target?`,\r\n      name: event.data.schoolYearName,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: 'Yes',\r\n      cancelText: 'No',\r\n      showCancel: true\r\n    };\r\n    const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) this.removeTarget(event.data.id, event.data.schoolYearName);\r\n    });\r\n  }\r\n\r\n  removeTarget(id: number, name: string): void {\r\n    this.stateService.deleteStateSchoolYearTarget(id, `School Year ${name} OSEP Target Deleted.`).pipe(\r\n      take(1)\r\n    ).subscribe((res: boolean) => {\r\n      if (res && this.currentState?.id) this.getTargets(this.currentState.id);\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex justify-between\">\r\n      <drdp-title title= {{title}}></drdp-title>\r\n    </div>\r\n\r\n    <drdp-student-demographics [state]=\"currentState\"></drdp-student-demographics>\r\n\r\n    <drdp-container additionClasses=\"h-min mt-5\">\r\n      <drdp-state-dashboard [stateId]=\"currentState?.id\"></drdp-state-dashboard>\r\n    </drdp-container>\r\n\r\n    <drdp-container [additionClasses]=\"'h-min mt-5'\">\r\n      <drdp-child-upload [stateId]=\"currentState?.id\"></drdp-child-upload>\r\n    </drdp-container>\r\n\r\n    <drdp-container [additionClasses]=\"'h-min mt-5'\">\r\n\r\n      <div class=\"w-full\">\r\n        <h1 class=\"text-2xl font-medium\">Custom Configurations</h1>\r\n        <drdp-add-edit-table [dataSource]=\"dataSource\"\r\n                             [tableData]=\"tableData\"\r\n                             [columns]=\"tableColumns\"\r\n                             (editActionItem)=\"openModal($event)\">\r\n        </drdp-add-edit-table>\r\n\r\n        <div class=\"col-span-2 w-[100%] h-min\">\r\n          <div class=\"flex justify-end w-[100%]\"><drdp-btn (click)=\"openModal(null, currentState?.id)\"><i class=\"uil uil-plus\"></i>Add Alternate Configuration</drdp-btn>\r\n          </div>\r\n      </div>\r\n\r\n      </div>\r\n    </drdp-container>\r\n\r\n    <drdp-container [additionClasses]=\"'h-min mt-5'\">\r\n      <div class=\"w-full\">\r\n        <h1 class=\"text-2xl font-medium\">School Year OSEP Target</h1>\r\n        <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"targetTableData\" [columns]=\"targetColumns\" \r\n          (editActionItem)=\"openTargetModal($event, currentState?.id)\" (deleteActionItem)=\"deleteTargetModal($event)\"> \r\n        </drdp-add-edit-table>\r\n        <div class=\"col-span-2 w-[100%] h-min\">\r\n          <div class=\"flex justify-end w-[100%]\">\r\n            <drdp-btn (click)=\"openTargetModal(null, currentState?.id)\"><i class=\"uil uil-plus\"></i>\r\n              Add School Year OSEP Target</drdp-btn>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { Observable } from 'rxjs';\r\nimport { IRatingBaseTemplate } from '@views/user/configuration/rating-view-setup/interfaces/irating-base-template';\r\nimport { IBaseTemplateDomain } from '@views/user/configuration/rating-view-setup/interfaces/ibase-template-domain';\r\nimport { ICustomRatingTemplateForm } from '@views/user/configuration/rating-view-setup/interfaces/icustom-rating-template-form';\r\nimport { ICustomRatingTemplate } from '@views/user/configuration/rating-view-setup/interfaces/icustom-rating-template';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AgeGradeTemplateService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getBaseTemplates(stateId: number): Observable<IRatingBaseTemplate[]> {\r\n    return this.data.get(`agegradetemplate/base-templates/${stateId}`);\r\n  }\r\n\r\n  getAvailBaseTemplates(): Observable<IRatingBaseTemplate[]> {\r\n    return this.data.get(`agegradetemplate/avail-base-templates`);\r\n  }\r\n\r\n  getBaseMeasures(\r\n    ageGradeInstrumentId: number,\r\n    ageGradeTemplateId: number\r\n  ): Observable<IBaseTemplateDomain[]> {\r\n    return this.data.get(\r\n      `agegradetemplate/${ageGradeTemplateId}/base-measures/${ageGradeInstrumentId}`\r\n    );\r\n  }\r\n\r\n  getBaseMeasuresByInstrument(\r\n    ageGradeInstrumentId: number\r\n  ): Observable<IBaseTemplateDomain[]> {\r\n    return this.data.get(\r\n      `agegradetemplate/base-measures/${ageGradeInstrumentId}`\r\n    );\r\n  }\r\n\r\n  getCustomTemplateById(id: number): Observable<ICustomRatingTemplateForm> {\r\n    return this.data.get(`agegradetemplate/custom/${id}`);\r\n  }\r\n\r\n  getCustomTemplatesByAgencyId(\r\n    agencyId: number\r\n  ): Observable<ICustomRatingTemplate[]> {\r\n    return this.data.get(`agegradetemplate/custom/agency/${agencyId}`);\r\n  }\r\n\r\n  saveCustomTemplate(request: any): Observable<any> {\r\n    return this.data.post(\r\n      `agegradetemplate/custom`,\r\n      request,\r\n      'Alternate Ratings View Template succesfully saved.'\r\n    );\r\n  }\r\n\r\n  saveBaseTemplate(request: any): Observable<any> {\r\n    return this.data.post(\r\n      `agegradetemplate/base-template`,\r\n      request,\r\n      'Base Template succesfully saved.'\r\n    );\r\n  }\r\n\r\n  deleteAgeGradeTemplate(\r\n    id: number\r\n  ): Observable<any> {\r\n    return this.data.post(`agegradetemplate/delete/${id}`, id);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { Observable } from 'rxjs';\r\nimport { IRatingViewEnrollment } from '@views/user/configuration/rating-view-setup/interfaces/irating-view-enrollment';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AgeGradeTemplateEnrollmentService {\r\n  constructor(private data: DataService) {}\r\n\r\n  getBaseTemplateEnrollmentByAgency(\r\n    agencyId: number\r\n  ): Observable<IRatingViewEnrollment[]> {\r\n    return this.data.get(`ageGradeTemplateEnrollment/base/${agencyId}`);\r\n  }\r\n\r\n  getCustomTemplateEnrollmentById(\r\n    id: number\r\n  ): Observable<IRatingViewEnrollment[]> {\r\n    return this.data.get(`ageGradeTemplateEnrollment/custom/${id}`);\r\n  }\r\n\r\n  saveBaseTemplateEnrollment(request: any): Observable<any> {\r\n    return this.data.post(\r\n      `ageGradeTemplateEnrollment/base-templates`,\r\n      request,\r\n      'Ratings View Template successfully saved!'\r\n    );\r\n  }\r\n\r\n  saveTemplateAssignments(request: any): Observable<any> {\r\n    return this.data.post(`ageGradeTemplateEnrollment/assignments`, request);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title title=\"Ratings View Setup\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex justify-between mb-2\" *drdpCheckPermission=\"permission.CreateBaseTemplates\">\r\n    <h2 class=\"text-[20px] font-bold\"></h2>\r\n    <span (click)=\"gotToBaseForm()\">\r\n      <drdp-btn><i class=\"uil uil-plus\"></i> Add Base Template </drdp-btn>\r\n    </span>\r\n  </div>\r\n\r\n  <drdp-container *ngIf=\"canSearch\">\r\n    <div class=\"w-full\">\r\n      <drdp-search [searchInput]=\"searchInput\" (search)=\"getEnrollmentsByAgencyId($event)\"\r\n        (clear)=\"clearForm()\"></drdp-search>\r\n    </div>\r\n  </drdp-container>\r\n  <drdp-container [additionClasses]=\"canSearch ? 'mt-5' : ''\">\r\n    <h2 class=\"text-[20px] font-bold mb-2\">Select Agency Default Views</h2>\r\n    <hr>\r\n    <div *ngIf=\"!canViewResults\" class=\"mt-4\"> Select an agency to display. </div>\r\n    <form [formGroup]=\"defaultViewForm\" class=\"mt-4\" *ngIf=\"canViewResults\">\r\n      <div class=\"grid grid-cols-1 md:grid-cols-4 gap-3 md:gap-6\">\r\n        <div class=\"form-input-label-group\" *ngIf=\"hasIT\">\r\n          <label class=\"font-normal required\" for=\"itTemplateId\">IT</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"itTemplateId\" placeholder=\"Select an option\"\r\n              [disabled]=\"!canEditRatingViews || !!agency?.isRatingViewLocked\">\r\n              <mat-option *ngFor=\"let option of itOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\" *ngIf=\"hasPS\">\r\n          <label class=\"font-normal required\" for=\"psTemplateId\">PS</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"psTemplateId\" placeholder=\"Select an option\"\r\n              [disabled]=\"!canEditRatingViews || !!agency?.isRatingViewLocked\">\r\n              <mat-option *ngFor=\"let option of psOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\" *ngIf=\"hasTK\">\r\n          <label class=\"font-normal required\" for=\"tkTemplateId\">TK</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"tkTemplateId\" placeholder=\"Select an option\"\r\n              [disabled]=\"!canEditRatingViews || !!agency?.isRatingViewLocked\">\r\n              <mat-option *ngFor=\"let option of tkOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\" *ngIf=\"hasK\">\r\n          <label class=\"font-normal required\" for=\"kTemplateId\">K</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"kTemplateId\" placeholder=\"Select an option\"\r\n              [disabled]=\"!canEditRatingViews || !!agency?.isRatingViewLocked\">\r\n              <mat-option *ngFor=\"let option of kOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\" *ngIf=\"hasSA\">\r\n          <label class=\"font-normal required\" for=\"saTemplateId\">SA</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"saTemplateId\" placeholder=\"Select an option\"\r\n              [disabled]=\"!canEditRatingViews || !!agency?.isRatingViewLocked\">\r\n              <mat-option *ngFor=\"let option of saOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n      <div class=\"mt-4 mb-2 flex justify-end\">\r\n        <drdp-btn (click)=\"submitForm()\"\r\n          [disabled]=\"!canEditRatingViews || defaultViewForm.invalid || agency?.isRatingViewLocked\"> Save and Lock\r\n        </drdp-btn>\r\n        <drdp-btn class=\"ml-2\" (click)=\"unlockAgency()\" *ngIf=\"canUnlockRatingViews && agency?.isRatingViewLocked\">\r\n          Unlock\r\n        </drdp-btn>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n\r\n  <drdp-container *ngIf=\"selectedStateId == states.california\" [additionClasses]=\"canSearch ? 'mt-5' : ''\">\r\n    <h2 class=\"text-[20px] font-bold mb-2\">DRDP 2025 Pilot Views</h2>\r\n    <hr>\r\n    <div *ngIf=\"!canViewResults\" class=\"mt-4\"> Select an agency to display.</div>\r\n    <form [formGroup]=\"pilotViewForm\" class=\"mt-4\" *ngIf=\"canViewResults\">\r\n      <div class=\"grid grid-cols-1 md:grid-cols-4 gap-3 md:gap-6\">\r\n        <div class=\"form-input-label-group\">\r\n          <label class=\"font-normal required\" for=\"pilotItTemplateId\">IT</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"pilotItTemplateId\" placeholder=\"Select an option\" [disabled]=\"true\">\r\n              <mat-option *ngFor=\"let option of pilotItOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\">\r\n          <label class=\"font-normal required\" for=\"ptkTemplateId\">PTK</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"ptkTemplateId\" placeholder=\"Select an option\" [disabled]=\"true\">\r\n              <mat-option *ngFor=\"let option of ptkOptions\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"form-input-label-group\">\r\n          <label class=\"font-normal required\" for=\"ptk3TemplateId\">PTK-3</label>\r\n          <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n            <mat-select formControlName=\"ptk3TemplateId\" placeholder=\"Select an option\" [disabled]=\"true\">\r\n              <mat-option *ngFor=\"let option of ptk3Options\" [value]=\"option.id\">\r\n                {{ option.description }}\r\n              </mat-option>\r\n            </mat-select>\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n\r\n  <drdp-container additionClasses=\"mt-5\">\r\n    <div class=\"flex justify-between mb-2\">\r\n      <h2 class=\"text-[20px] font-bold\">Alternate Rating Views</h2>\r\n      <span (click)=\"addCustomRatingModal()\" *ngIf=\"canViewResults\">\r\n        <drdp-btn *drdpCheckPermission=\"permission.CreateRatingViews\"><i class=\"uil uil-plus\"></i> Add Alternate Rating\r\n          View</drdp-btn>\r\n      </span>\r\n    </div>\r\n    <hr>\r\n    <div *ngIf=\"!canViewResults\" class=\"mt-4\">Select an agency to display.</div>\r\n    <div *ngIf=\"canViewResults\">\r\n      <drdp-add-edit-table class=\"left-justified\" [dataSource]=\"dataSource\" [tableData]=\"customTemplates\"\r\n        [columns]=\"customTableColumns\" viewIcon=\"uil uil-file text-drdpblue-300\"\r\n        (viewActionItem)=\"viewCustomForm($event)\" (deleteActionItem)=\"deleteModal($event)\">>\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n</div>","import { Component, OnInit, inject } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n  AgeGradeInstrument,\r\n  AgeGradeInstrumentCode,\r\n} from '@core/enums/age-grade-instruments';\r\nimport { ISearchInput } from '@core/interfaces/isearch-input';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { forkJoin, take, tap } from 'rxjs';\r\nimport { IRatingBaseTemplate } from './interfaces/irating-base-template';\r\nimport { IRatingViewEnrollment } from './interfaces/irating-view-enrollment';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { AgeGradeTemplateService } from '@core/services/age-grade-template.service';\r\nimport { AgeGradeTemplateEnrollmentService } from '@core/services/age-grade-template-enrollment.service.ts';\r\nimport { Router } from '@angular/router';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TableColumnType } from '@core/enums/table';\r\nimport { ICustomRatingTemplate } from './interfaces/icustom-rating-template';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { ILoginResponse } from '@core/interfaces/ilogin-response';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { Subscription } from 'rxjs';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { States } from '@core/enums/states';\r\n\r\n@Component({\r\n  selector: 'drdp-rating-view-setup',\r\n  templateUrl: './rating-view-setup.component.html',\r\n  styleUrls: ['./rating-view-setup.component.scss'],\r\n})\r\nexport class RatingViewSetupComponent implements OnInit {\r\n  defaultViewForm: FormGroup | any;\r\n  pilotViewForm: FormGroup | any;\r\n  psOptions: IRatingBaseTemplate[] = [];\r\n  itOptions: IRatingBaseTemplate[] = [];\r\n  kOptions: IRatingBaseTemplate[] = [];\r\n  saOptions: IRatingBaseTemplate[] = [];\r\n  tkOptions: IRatingBaseTemplate[] = [];\r\n  pilotItOptions: IRatingBaseTemplate[] = [];\r\n  ptkOptions: IRatingBaseTemplate[] = [];\r\n  ptk3Options: IRatingBaseTemplate[] = [];\r\n  hasIT = false;\r\n  hasPS = false;\r\n  hasK = false;\r\n  hasSA = false;\r\n  hasTK = false;\r\n  selectedAgencyId = 0;\r\n  selectedStateId = 0;\r\n  ageGradeInstrument = AgeGradeInstrument;\r\n  permission = Permission;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  customTemplates: ICustomRatingTemplate[] = [];\r\n  ageGradeInstruments: IAgeGradeInstrument[] = [];\r\n  canEditRatingViews = false;\r\n  canUnlockRatingViews = false;\r\n  agency: IAgency | null = null;\r\n  currentUser?: ILoginResponse;\r\n  dialog = inject(MatDialog);\r\n  ratingPeriodService = inject(RatingPeriodService);\r\n  schoolYearName: string = '';\r\n  pilotAgeGradeInstruments: IAgeGradeInstrument[] = [];\r\n  states = States;\r\n\r\n  customTableColumns = [\r\n    {\r\n      columnDef: 'name',\r\n      header: 'Title',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'ratingPeriod',\r\n      header: 'Rating Period',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'ageGradeInstrument',\r\n      header: 'Age Group',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'description',\r\n      header: 'Description',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'baseDescription',\r\n      header: 'Base Template',\r\n      type: TableColumnType.text,\r\n    },\r\n    {\r\n      columnDef: 'View',\r\n      header: 'View',\r\n      type: TableColumnType.view,\r\n    }\r\n  ];\r\n\r\n  get itTemplateId() {\r\n    return this.defaultViewForm.get('itTemplateId');\r\n  }\r\n  get psTemplateId() {\r\n    return this.defaultViewForm.get('psTemplateId');\r\n  }\r\n\r\n  get tkTemplateId() {\r\n    return this.defaultViewForm.get('tkTemplateId');\r\n  }\r\n  get kTemplateId() {\r\n    return this.defaultViewForm.get('kTemplateId');\r\n  }\r\n\r\n  get saTemplateId() {\r\n    return this.defaultViewForm.get('saTemplateId');\r\n  }\r\n\r\n  constructor(\r\n    public modal: MatDialog,\r\n    private authService: AuthService,\r\n    private formBuilder: FormBuilder,\r\n    private agencyService: AgencyService,\r\n    private templateService: AgeGradeTemplateService,\r\n    private templateEnrollmentService: AgeGradeTemplateEnrollmentService,\r\n    private toast: ToastService,\r\n    private router: Router,\r\n    private permissionService: PermissionService,\r\n    private lookupService: LookupService,\r\n    private classService: ClassService,\r\n    public PermissionService: PermissionService\r\n  ) {\r\n    this.currentUser = this.authService.getCurrentUser();\r\n    this.selectedAgencyId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['agencyId'] ||\r\n      this.currentUser.agencyId;\r\n    this.selectedStateId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['stateId'] ||\r\n      this.currentUser.stateId;\r\n  }\r\n  private subscriptions = new Subscription();\r\n  canDelete = this.PermissionService.checkPermission(Permission.DeleteRatingView);\r\n  receivedPayload?: any;\r\n\r\n  canSearch = false;\r\n  canViewResults = true;\r\n  searchInput: ISearchInput = {\r\n    searchName: false,\r\n    searchAgency: true,\r\n    searchState: true,\r\n  };\r\n  agencyBaseEnrollments: IRatingViewEnrollment[] = [];\r\n\r\n  ngOnInit(): void {\r\n    this.canSearch =\r\n      this.authService.isSuperAdmin() || this.authService.isCustomerService();\r\n    this.canViewResults = !this.canSearch;\r\n\r\n    this.canEditRatingViews = this.permissionService.checkPermission(\r\n      Permission.EditRatingViews\r\n    );\r\n\r\n    this.canUnlockRatingViews = this.permissionService.checkPermission(\r\n      Permission.UnlockRatingViews\r\n    );\r\n    this.initForm();\r\n    this.initData();\r\n\r\n    if (this.canDelete) {\r\n      this.customTableColumns.push({ columnDef: 'delete', header: 'Delete', type: TableColumnType.delete })\r\n    }\r\n  }\r\n\r\n  initForm() {\r\n    this.defaultViewForm = this.formBuilder.group({\r\n      itTemplateId: [{ value: null, disabled: !this.canEditRatingViews }],\r\n      psTemplateId: [{ value: null, disabled: !this.canEditRatingViews }],\r\n      kTemplateId: [{ value: null, disabled: !this.canEditRatingViews }],\r\n      saTemplateId: [{ value: null, disabled: !this.canEditRatingViews }],\r\n      tkTemplateId: [{ value: null, disabled: !this.canEditRatingViews }],\r\n    });\r\n\r\n    this.pilotViewForm = this.formBuilder.group({\r\n      pilotItTemplateId: [null],\r\n      ptkTemplateId: [null],\r\n      ptk3TemplateId: [null],\r\n    });\r\n  }\r\n\r\n  initData() {\r\n    this.ratingPeriodService\r\n      .getActiveSchoolYear()\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        this.schoolYearName = res.schoolYearName;\r\n      });\r\n\r\n    if (this.canViewResults) {\r\n      this.getBaseTemplates(0);\r\n      this.getAgencyTemplates(0);\r\n      this.getAgeGradeInstruments(0);\r\n    }\r\n  }\r\n\r\n  getBaseTemplates(stateId: number) {\r\n    this.templateService\r\n      .getBaseTemplates(stateId)\r\n      .pipe(\r\n        take(1),\r\n        tap((results) => {\r\n          this.psOptions = results.filter(\r\n            (r) => r.ageGradeInstrumentCode == AgeGradeInstrumentCode.preschool\r\n          );\r\n          this.itOptions = results.filter(\r\n            (r) =>\r\n              stateId == States.newHampshire ?\r\n                r.ageGradeInstrumentId == AgeGradeInstrument.nhInfantToddler :\r\n                r.ageGradeInstrumentId == AgeGradeInstrument.infantToddler\r\n          );\r\n          this.kOptions = results.filter(\r\n            (r) =>\r\n              r.ageGradeInstrumentCode == AgeGradeInstrumentCode.kindergarten\r\n          );\r\n          this.saOptions = results.filter(\r\n            (r) => r.ageGradeInstrumentCode == AgeGradeInstrumentCode.schoolAge\r\n          );\r\n          this.tkOptions = results.filter(\r\n            (r) =>\r\n              r.ageGradeInstrumentCode ==\r\n              AgeGradeInstrumentCode.transitionalKinder\r\n          );\r\n\r\n          if (this.selectedStateId == States.california) {\r\n            this.pilotItOptions = results.filter(\r\n              (r) =>\r\n                r.ageGradeInstrumentId == AgeGradeInstrument.pilotInfantToddler\r\n            );\r\n            this.ptkOptions = results.filter(\r\n              (r) =>\r\n                r.ageGradeInstrumentCode == AgeGradeInstrumentCode.pilotPreschool\r\n            );\r\n            this.ptk3Options = results.filter(\r\n              (r) =>\r\n                r.ageGradeInstrumentCode == AgeGradeInstrumentCode.pilotPreschool3\r\n            );\r\n          }\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  getAgencyInfo(agencyId: number) {\r\n    this.agencyService\r\n      .getAgency(agencyId)\r\n      .pipe(take(1))\r\n      .subscribe((agency) => {\r\n        this.agency = agency;\r\n      });\r\n  }\r\n\r\n  unlockAgency() {\r\n    this.agencyService\r\n      .unlockAgency(this.selectedAgencyId)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        this.getAgencyInfo(this.selectedAgencyId);\r\n      });\r\n  }\r\n\r\n  getEnrollmentsByAgencyId(search: any): void {\r\n    if (search.StateId) {\r\n      this.selectedStateId = search.StateId;\r\n      this.getBaseTemplates(search.StateId);\r\n      this.getAgeGradeInstruments(search.StateId);\r\n    }\r\n\r\n    if (search.AgencyId) {\r\n      this.canViewResults = true;\r\n      this.selectedAgencyId = search.AgencyId;\r\n      this.getAgencyTemplates(search.AgencyId);\r\n    }\r\n  }\r\n\r\n  getAgeGradeInstruments(stateId: number) {\r\n    this.subscriptions.add(\r\n      forkJoin({\r\n        ageGradeInstrument: this.lookupService.getAgeGradeInstruments(stateId),\r\n        pilotAgeGradeInstrument: this.lookupService.getPilotAgeGrade(),\r\n      }).subscribe(({ ageGradeInstrument, pilotAgeGradeInstrument }) => {\r\n        this.ageGradeInstruments = ageGradeInstrument;\r\n        this.pilotAgeGradeInstruments = pilotAgeGradeInstrument;\r\n        this.updateAgeGradeInstruments();\r\n      }\r\n    ));\r\n  }\r\n\r\n  updateAgeGradeInstruments() {\r\n    this.hasIT =\r\n      this.ageGradeInstruments.find(\r\n        (agi) =>\r\n          agi.ageGradeInstrumentCode == AgeGradeInstrumentCode.infantToddler\r\n      ) != null;\r\n\r\n    this.hasSA =\r\n      this.ageGradeInstruments.find(\r\n        (agi) => agi.ageGradeInstrumentCode == AgeGradeInstrumentCode.schoolAge\r\n      ) != null;\r\n\r\n    this.hasPS =\r\n      this.ageGradeInstruments.find(\r\n        (agi) => agi.ageGradeInstrumentCode == AgeGradeInstrumentCode.preschool\r\n      ) != null;\r\n\r\n    this.hasTK =\r\n      this.ageGradeInstruments.find(\r\n        (agi) =>\r\n          agi.ageGradeInstrumentCode ==\r\n          AgeGradeInstrumentCode.transitionalKinder\r\n      ) != null;\r\n\r\n    this.hasK =\r\n      this.ageGradeInstruments.find(\r\n        (agi) =>\r\n          agi.ageGradeInstrumentCode == AgeGradeInstrumentCode.kindergarten\r\n      ) != null;\r\n\r\n    if (this.hasIT) {\r\n      this.itTemplateId.setValidators(Validators.required);\r\n    } else {\r\n      this.itTemplateId.clearValidators();\r\n    }\r\n\r\n    if (this.hasPS) {\r\n      this.psTemplateId.setValidators(Validators.required);\r\n    } else {\r\n      this.psTemplateId.clearValidators();\r\n    }\r\n\r\n    if (this.hasK) {\r\n      this.kTemplateId.setValidators(Validators.required);\r\n    } else {\r\n      this.kTemplateId.clearValidators();\r\n    }\r\n\r\n    if (this.hasSA) {\r\n      this.saTemplateId.setValidators(Validators.required);\r\n    } else {\r\n      this.saTemplateId.clearValidators();\r\n    }\r\n\r\n    if (this.hasTK) {\r\n      this.tkTemplateId.setValidators(Validators.required);\r\n    } else {\r\n      this.tkTemplateId.clearValidators();\r\n    }\r\n\r\n    this.defaultViewForm.updateValueAndValidity();\r\n  }\r\n\r\n  getAgencyTemplates(agencyId: number) {\r\n    this.getAgencyInfo(agencyId);\r\n    this.templateEnrollmentService\r\n      .getBaseTemplateEnrollmentByAgency(agencyId)\r\n      .pipe(\r\n        take(1),\r\n        tap((results) => {\r\n          this.updateFormValue(results);\r\n        })\r\n      )\r\n      .subscribe();\r\n\r\n    this.templateService\r\n      .getCustomTemplatesByAgencyId(agencyId)\r\n      .pipe(\r\n        take(1),\r\n        tap((results) => {\r\n          this.customTemplates = results;\r\n          this.dataSource = new MatTableDataSource(results);\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  updateFormValue(results: IRatingViewEnrollment[]) {\r\n    this.defaultViewForm.reset();\r\n    if (results) {\r\n      this.agencyBaseEnrollments = results.filter((r) => !r.isCustom);\r\n      const psOption = this.agencyBaseEnrollments.find(\r\n        (a) => a.ageGradeInstrumentCode == AgeGradeInstrumentCode.preschool\r\n      )?.ageGradeTemplateId;\r\n      const itOption = this.agencyBaseEnrollments.find(\r\n        (a) => \r\n          this.selectedStateId == States.newHampshire ?\r\n            a.ageGradeInstrumentId == AgeGradeInstrument.nhInfantToddler :\r\n            a.ageGradeInstrumentId == AgeGradeInstrument.infantToddler\r\n      )?.ageGradeTemplateId;\r\n      const kOption = this.agencyBaseEnrollments.find(\r\n        (a) => a.ageGradeInstrumentCode == AgeGradeInstrumentCode.kindergarten\r\n      )?.ageGradeTemplateId;\r\n      const saOption = this.agencyBaseEnrollments.find(\r\n        (a) => a.ageGradeInstrumentCode == AgeGradeInstrumentCode.schoolAge\r\n      )?.ageGradeTemplateId;\r\n      const tkOption = this.agencyBaseEnrollments.find(\r\n        (a) =>\r\n          a.ageGradeInstrumentCode == AgeGradeInstrumentCode.transitionalKinder\r\n      )?.ageGradeTemplateId;\r\n\r\n      this.defaultViewForm.setValue({\r\n        psTemplateId: psOption ?? null,\r\n        itTemplateId: itOption ?? null,\r\n        kTemplateId: kOption ?? null,\r\n        saTemplateId: saOption ?? null,\r\n        tkTemplateId: tkOption ?? null,\r\n      });\r\n\r\n      if (this.selectedStateId == States.california) {\r\n        const pilotItOption = this.agencyBaseEnrollments.find(\r\n          (a) =>\r\n            a.ageGradeInstrumentId == AgeGradeInstrument.pilotInfantToddler\r\n        )?.ageGradeTemplateId;\r\n        const ptkOption = this.agencyBaseEnrollments.find(\r\n          (a) =>\r\n            a.ageGradeInstrumentCode == AgeGradeInstrumentCode.pilotPreschool\r\n        )?.ageGradeTemplateId;\r\n        const ptk3Option = this.agencyBaseEnrollments.find(\r\n          (a) =>\r\n            a.ageGradeInstrumentCode == AgeGradeInstrumentCode.pilotPreschool3\r\n        )?.ageGradeTemplateId;\r\n\r\n        this.pilotViewForm.setValue({\r\n          pilotItTemplateId: pilotItOption ?? null,\r\n          ptkTemplateId: ptkOption ?? null,\r\n          ptk3TemplateId: ptk3Option ?? null,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  submitForm() {\r\n    if (this.agency?.isRatingViewLocked) return;\r\n    if (this.defaultViewForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    let event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: `Confirmation`,\r\n      message: `The chosen Rating Views are for the ${this.schoolYearName} school year and will be locked until the next school year.`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.OK,\r\n      showCancel: true,\r\n    };\r\n    const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: event,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) this.save();\r\n    });\r\n  }\r\n\r\n  save() {\r\n    const formValue = this.defaultViewForm.value;\r\n    let request = {\r\n      agencyId: this.selectedAgencyId,\r\n      templateIds: [\r\n        formValue.psTemplateId,\r\n        formValue.itTemplateId,\r\n        formValue.kTemplateId,\r\n        formValue.saTemplateId,\r\n        formValue.tkTemplateId,\r\n      ],\r\n    };\r\n\r\n    request.templateIds = request.templateIds.filter((t) => t != null);\r\n    this.templateEnrollmentService\r\n      .saveBaseTemplateEnrollment(request)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        this.getAgencyInfo(this.selectedAgencyId);\r\n      });\r\n  }\r\n\r\n  addCustomRatingModal() {\r\n    var event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: `Add Alternate Rating View`,\r\n      message: `Please note that your site, classroom, and children must already exist in DRDP Online prior to assigning a alternate rating view.`,\r\n      primaryBtnClass: 'blue',\r\n      primaryBtnText: Modal.OK,\r\n      showCancel: true,\r\n    };\r\n    const modalRef = this.dialog.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.goToCustomForm();\r\n      }\r\n    });\r\n  }\r\n\r\n  goToCustomForm() {\r\n    this.router.navigateByUrl('/config/custom-rating-view', {\r\n      state: { agencyId: this.selectedAgencyId, stateId: this.selectedStateId },\r\n    });\r\n  }\r\n\r\n  gotToBaseForm() {\r\n    this.router.navigateByUrl('/config/base-rating-view', {\r\n      state: { agencyId: this.selectedAgencyId, stateId: this.selectedStateId },\r\n    });\r\n  }\r\n\r\n  viewCustomForm(data: any) {\r\n    this.router.navigateByUrl(`/config/custom-rating-view/${data.data.id}`, {\r\n      state: { agencyId: this.selectedAgencyId, stateId: this.selectedStateId },\r\n    });\r\n  }\r\n\r\n  clearForm() {\r\n    this.canViewResults = false;\r\n  }\r\n\r\n  deleteModal(event: IModalEmitData): void {\r\n    const customTemplateId = event.data.id;\r\n    if (event.data.hasOwnProperty('ratingPeriod')) {\r\n      event.data.modalInfo = {\r\n        title: `${event.data.name} cannot be deleted`,\r\n        message: `This alternate rating view has been assigned and can not be deleted`,\r\n        name: event.data.name,\r\n        primaryBtnClass: 'blue',\r\n        primaryBtnText: Modal.OK,\r\n      };\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe();\r\n    } else {\r\n      event.data.modalInfo = {\r\n        title: `Delete ${event.data.name}`,\r\n        message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.name}</span>?`,\r\n        name: event.data.name,\r\n        primaryBtnClass: 'red',\r\n        primaryBtnText: Modal.Delete,\r\n        showCancel: true,\r\n      };\r\n\r\n      const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n        data: event ? event : undefined,\r\n      });\r\n      modalRef.afterClosed().subscribe((res) => {\r\n        if (res) {\r\n          this.templateService\r\n            .deleteAgeGradeTemplate(customTemplateId)\r\n            .subscribe((res: boolean) => {\r\n              if (res) {\r\n                this.toast.success(\r\n                  `${event.data.name} successfully deleted!`\r\n                );\r\n                this.dataSource.data = this.dataSource.data.filter(\r\n                  (item: any) => item.id !== event.data\r\n                );\r\n              } else {\r\n                this.toast.error(\r\n                  `Failed to delete ${event.data.name}. Please try again.`\r\n                );\r\n              }\r\n              this.initData();\r\n            });\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-reassign-modal',\r\n  templateUrl: './reassign-modal.component.html',\r\n  styleUrls: ['./reassign-modal.component.scss']\r\n})\r\nexport class ReassignModalComponent implements OnInit {\r\n  reassignForm: FormGroup | any;\r\n  @Output() formData = new EventEmitter<any>();\r\n\r\n  constructor(\r\n    @Inject(MAT_DIALOG_DATA) public reassignData: any,\r\n    private fb: FormBuilder,\r\n    private toast: ToastService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.reassignForm = this.fb.group({\r\n      title: [null, [Validators.required, Validators.maxLength(250)]],\r\n      description: [this.reassignData.description, [Validators.required, Validators.maxLength(250)]],\r\n    });\r\n  }\r\n\r\n  onSubmit(): void {\r\n    if (this.reassignForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n    this.formData.emit(this.reassignForm.value);\r\n  }\r\n}\r\n","<div class=\"modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Create Name and Description</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle ml-8\"></i>\r\n  </div>\r\n  <div class=\"mat-dialog-content\">\r\n    <form [formGroup]=\"reassignForm\">\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"title\">Title</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input placeholder=\"\" matInput type=\"text\" formControlName=\"title\">\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"description\">Description</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input placeholder=\"\" matInput type=\"text\" formControlName=\"description\">\r\n        </mat-form-field>\r\n      </div>\r\n    </form>\r\n  </div>\r\n  <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n    <div class=\"flex justify-end align-bottom\">\r\n      <drdp-btn color=\"cancel\" class=\"mr-2\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n      <drdp-btn type=\"submit\" mat-button (click)=\"onSubmit()\" [disabled]=\"reassignForm.invalid\"\r\n        cdkFocusInitial>Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n</div>","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title [title]=\"pageTitle\"></drdp-title>\r\n  </div>\r\n  <div *ngIf=\"isView\" class=\"flex justify-end\">\r\n    <a routerLink=\"/config/rating-views\" class=\"self-center text-sm order-last cursor-pointer\">\r\n      <i class=\"uil uil-angle-left-b text-base\"></i>Back to Ratings View Setup\r\n    </a>\r\n  </div>\r\n  <drdp-container additionClasses=\"mt-5\">\r\n    <div *ngIf=\"!isView\">\r\n      <h2 class=\"text-[20px] font-bold mb-2\">Add Alternate Rating View</h2>\r\n      <hr>\r\n    </div>\r\n    <form [formGroup]=\"customViewForm\" #ngForm=\"ngForm\">\r\n      <div class=\"form-input-label-group\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"title\">Title</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" placeholder=\"Title\" matInput type=\"text\" [readonly]=\"isView\" formControlName=\"title\"\r\n            required>\r\n          <mat-error *ngIf=\"title.invalid\">Title is required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"form-input-label-group\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"description\">Description</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" placeholder=\"Description\" matInput type=\"text\" [readonly]=\"isView\"\r\n            formControlName=\"description\" required>\r\n          <mat-error *ngIf=\"description.invalid\">Description is required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"form-input-label-group\" *ngIf=\"!isView\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"ageGradeInstrumentId\">Age Group</label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select formControlName=\"ageGradeInstrumentId\" placeholder=\"Select a base template\" required\r\n            [ngClass]=\"{'invalid' : ageGradeInstrumentId.invalid && ngForm.submitted }\">\r\n            <mat-option *ngFor=\"let agi of ageGradeInstruments\" [value]=\"agi.id\">\r\n              {{ agi.ageGradeInstrumentName }}\r\n            </mat-option>\r\n          </mat-select>\r\n          <mat-error *ngIf=\"ageGradeInstrumentId.invalid\">Age Group required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div *ngIf=\"isView\" class=\"self-start\">\r\n        <label class=\"font-normal\" for=\"ageGradeInstrumentId\">Age Group</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" matInput [readonly]=\"isView\" [value]=\"customTemplate?.ageGradeInstrument\" type=\"text\"\r\n            formControlName=\"ageGradeInstrumentId\" required>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"form-input-label-group mt-4\" *ngIf=\"!isView\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"ageGradeTemplateId\">Base Template</label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select formControlName=\"ageGradeTemplateId\" placeholder=\"Select an age group\" required\r\n            [ngClass]=\"{'invalid' : ageGradeInstrumentId.invalid && ngForm.submitted }\">\r\n            <mat-option *ngFor=\"let abt of ageGradeBaseTemplates\" [value]=\"abt.id\">\r\n              {{ abt.description }}\r\n            </mat-option>\r\n          </mat-select>\r\n          <mat-error *ngIf=\"ageGradeTemplateId.invalid\">Base Template is required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div *ngIf=\"isView\" class=\"self-start\">\r\n        <label class=\"font-normal\" for=\"ageGradeTemplateId\">Base Template</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input matInput class=\"display\" [readonly]=\"isView\" [value]=\"customTemplate?.ageGradeTemplate\" type=\"text\"\r\n            formControlName=\"ageGradeTemplateId\" required>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"mt-4\">\r\n        <h3 class=\"text-[18px] font-bold mb-2\">Extra Measures</h3>\r\n        <span *ngIf=\"!displayMeasures\"> Choose an age group and base template to see all available measures.</span>\r\n        <div class=\"grid grid-cols-2 md:grid-cols-8 mt-4\">\r\n          <div *ngFor=\"let domain of templateDomains\">\r\n            <div class=\"col-span-1\">\r\n              <h4 class=\"text-[16px] font-bold mb-2\">{{domain.domainCode}}</h4>\r\n              <mat-checkbox class=\"font-medium\" (change)=\"checkDomainSelected(domain)\" [checked]=\"domain.isAllSelected\"\r\n                [disabled]=\"isView\" [(ngModel)]=\"domain.isAllSelected\" [ngModelOptions]=\"{standalone: true}\">\r\n                ALL {{domain.domainCode}}\r\n              </mat-checkbox>\r\n              <div class=\"ml-2\">\r\n                <div *ngFor=\"let measure of domain.measures\">\r\n                  <mat-checkbox class=\"font-medium\" (change)=\"checkDomainAllSelected(domain)\"\r\n                    [checked]=\"measure.isSelected\" [disabled]=\"measure.isRequired || isView || domain.disableMeasures\"\r\n                    [(ngModel)]=\"measure.isSelected\" [ngModelOptions]=\"{standalone: true}\">\r\n                    {{measure.code}}\r\n                  </mat-checkbox>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"mt-4\" *ngIf=\"hasAssignments\">\r\n        <h3 class=\"text-[18px] font-bold mb-2\">Assignments</h3>\r\n\r\n        <div class=\"font-bold mt-2\" *ngIf=\"siteAssignments.length > 0\">Sites </div>\r\n\r\n        <div class=\"grid grid-cols-4\" *ngIf=\"siteAssignments.length > 0\">\r\n          <div *ngFor=\"let site of siteAssignments\"\r\n            class=\"ml-2 px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpblue-400 bg-drdpblue-500 text-sm\">\r\n            {{site.siteName}}\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"font-bold mt-4\" *ngIf=\"classAssignments.length > 0\">Classrooms </div>\r\n        <div class=\"grid grid-cols-4\" *ngIf=\"classAssignments.length > 0\">\r\n          <div *ngFor=\"let class of classAssignments\"\r\n            class=\"ml-2 px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpblue-400 bg-drdpblue-500 text-sm\">\r\n            {{class.className}}\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"font-bold mt-4\" *ngIf=\"studentAssignments.length > 0\">Students </div>\r\n        <div class=\"grid grid-cols-4\" *ngIf=\"studentAssignments.length > 0\">\r\n          <div *ngFor=\"let student of studentAssignments\"\r\n            class=\"ml-2 px-4 py-1 mx-1 mt-3 pr-3 rounded-full text-drdpblue-400 bg-drdpblue-500 text-sm\">\r\n            {{student.studentName}}\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"mt-4 mb-2 flex justify-end\" *ngIf=\"canEditRatingViews\">\r\n        <drdp-btn *ngIf=\"!isView\" type=\"button\" color=\"cancel\" (click)=\"cancel()\"> Cancel </drdp-btn>\r\n        <drdp-btn *ngIf=\"!isView\" (click)=\"submitForm()\" class=\"mx-4\"> Save </drdp-btn>\r\n        <drdp-btn *ngIf=\"isView || hasAssignments\" class=\"mx-4\" (click)=\"reassign()\">Re-Assign Rating View</drdp-btn>\r\n        <drdp-btn *ngIf=\"!isView || !hasAssignments\" (click)=\"next()\"\r\n          [type]=\"isView ? 'button' : 'submit'\">\r\n          {{nextLabel}} <i class=\"uil uil-angle-right\"></i> </drdp-btn>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { IRatingBaseTemplate } from '../../interfaces/irating-base-template';\r\nimport { AgeGradeTemplateService } from '@core/services/age-grade-template.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IBaseTemplateDomain } from '../../interfaces/ibase-template-domain';\r\nimport { ICustomRatingTemplateForm } from '../../interfaces/icustom-rating-template-form';\r\nimport { take, tap, combineLatest, Observable, Subscription } from 'rxjs';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { AgeGradeTemplateEnrollmentService } from '@core/services/age-grade-template-enrollment.service.ts';\r\nimport { IRatingViewEnrollment } from '../../interfaces/irating-view-enrollment';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ReassignModalComponent } from './reassign-modal/reassign-modal.component';\r\n\r\n@Component({\r\n  selector: 'drdp-custom-rating-view-form',\r\n  templateUrl: './custom-rating-view-form.component.html',\r\n  styleUrls: ['./custom-rating-view-form.component.scss'],\r\n})\r\nexport class CustomRatingViewFormComponent implements OnInit, OnDestroy {\r\n  id: number = 0;\r\n  pageTitle = 'Alternate Rating View';\r\n  isView = false;\r\n  customViewForm: FormGroup | any;\r\n  ageGradeInstruments: IAgeGradeInstrument[] = [];\r\n  baseTemplates: IRatingBaseTemplate[] = [];\r\n  ageGradeBaseTemplates: IRatingBaseTemplate[] = [];\r\n  templateDomains: IBaseTemplateDomain[] = [];\r\n  selectedAgencyId = 0;\r\n  selectedStateId = 0;\r\n  nextLabel = 'Next';\r\n  customTemplate?: ICustomRatingTemplateForm;\r\n  customAssignments: IRatingViewEnrollment[] = [];\r\n  hasAssignments = false;\r\n  siteAssignments: IRatingViewEnrollment[] = [];\r\n  classAssignments: IRatingViewEnrollment[] = [];\r\n  studentAssignments: IRatingViewEnrollment[] = [];\r\n  canEditRatingViews = false;\r\n  lookups$?: Observable<{\r\n    ageGradeInstruments: IAgeGradeInstrument[];\r\n    baseTemplates: IRatingBaseTemplate[];\r\n  }>;\r\n  subscriptions = new Subscription();\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private formBuilder: FormBuilder,\r\n    private toast: ToastService,\r\n    private lookupService: LookupService,\r\n    private templateService: AgeGradeTemplateService,\r\n    private templateEnrollmentService: AgeGradeTemplateEnrollmentService,\r\n    private permissionService: PermissionService,\r\n    private router: Router,\r\n    public dialog: MatDialog\r\n  ) {\r\n    this.selectedAgencyId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['agencyId'] || 0;\r\n    this.selectedStateId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['stateId'] || 0;\r\n  }\r\n\r\n  get title() {\r\n    return this.customViewForm.get('title');\r\n  }\r\n  get description() {\r\n    return this.customViewForm.get('description');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.customViewForm.get('ageGradeInstrumentId');\r\n  }\r\n  get ageGradeTemplateId() {\r\n    return this.customViewForm.get('ageGradeTemplateId');\r\n  }\r\n  get displayMeasures() {\r\n    return this.templateDomains.length > 0;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.id = Number(this.route.snapshot.paramMap.get('id'));\r\n    this.isView = this.id > 0;\r\n    if (this.isView) {\r\n      this.pageTitle = 'View Alternate Rating View';\r\n      this.nextLabel = 'Configure Assignments';\r\n    }\r\n    this.canEditRatingViews = this.permissionService.checkPermission(\r\n      Permission.EditRatingViews\r\n    );\r\n    this.initForm();\r\n    this.initData();\r\n  }\r\n\r\n  initForm() {\r\n    this.customViewForm = this.formBuilder.group({\r\n      title: [null, [Validators.required, Validators.maxLength(250)]],\r\n      description: [null, [Validators.required, Validators.maxLength(500)]],\r\n      ageGradeInstrumentId: [null, Validators.required],\r\n      ageGradeTemplateId: [null, Validators.required],\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.ageGradeInstrumentId.valueChanges.subscribe((val: number) => {\r\n        if (!this.isView) {\r\n          this.templateDomains = [];\r\n          this.ageGradeBaseTemplates = this.baseTemplates.filter(\r\n            (r) => r.ageGradeInstrumentId == val\r\n          );\r\n        }\r\n      })\r\n    );\r\n\r\n    this.subscriptions.add(\r\n      this.ageGradeTemplateId.valueChanges.subscribe((val: number) => {\r\n        if (!val || this.id > 0) {\r\n          return;\r\n        }\r\n\r\n        this.templateService\r\n          .getBaseMeasures(this.ageGradeInstrumentId.value, val)\r\n          .pipe(\r\n            take(1),\r\n            tap((results) => {\r\n              this.templateDomains = results;\r\n            })\r\n          )\r\n          .subscribe();\r\n      })\r\n    );\r\n  }\r\n\r\n  initData() {\r\n    this.lookups$ = combineLatest({\r\n      ageGradeInstruments: this.lookupService.getAgeGradeInstruments(\r\n        this.selectedStateId\r\n      ),\r\n      baseTemplates: this.templateService.getBaseTemplates(\r\n        this.selectedStateId\r\n      ),\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.lookups$.subscribe((results) => {\r\n        this.ageGradeInstruments = results['ageGradeInstruments'];\r\n        this.baseTemplates = results['baseTemplates'].filter(\r\n          (r) => r.name != 'N/A'\r\n        );\r\n      })\r\n    );\r\n\r\n    if (this.id > 0) {\r\n      this.templateService\r\n        .getCustomTemplateById(this.id)\r\n        .pipe(\r\n          take(1),\r\n          tap((result) => {\r\n            this.customViewForm.setValue({\r\n              title: result.title,\r\n              description: result.description,\r\n              ageGradeInstrumentId: result.ageGradeInstrumentId,\r\n              ageGradeTemplateId: result.ageGradeTemplateId,\r\n            });\r\n            this.customTemplate = result;\r\n            this.templateDomains = result.measures;\r\n            this.customViewForm.disable();\r\n          })\r\n        )\r\n        .subscribe();\r\n\r\n      this.templateEnrollmentService\r\n        .getCustomTemplateEnrollmentById(this.id)\r\n        .pipe(\r\n          take(1),\r\n          tap((results) => {\r\n            this.customAssignments = results;\r\n            this.hasAssignments = this.customAssignments.length > 0;\r\n            this.siteAssignments = results.filter((r) => r.siteId > 0);\r\n            this.classAssignments = results.filter((r) => r.classId > 0);\r\n            this.studentAssignments = results.filter((r) => r.studentId > 0);\r\n          })\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  reassign() : void {   \r\n    const modalRef = this.dialog.open(ReassignModalComponent, {\r\n      data: this.customViewForm.value\r\n    });\r\n    modalRef.componentInstance.formData.subscribe((formData: any) => {\r\n      this.title.setValue(formData.title);\r\n      this.description.setValue(formData.description);\r\n      this.submitForm(true);\r\n      modalRef.close();\r\n    });\r\n  }\r\n\r\n  submitForm(fromNext?: boolean) {\r\n    if (this.customViewForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    let extraMeasures: number[] = [];\r\n    this.templateDomains.forEach((domain) => {\r\n      domain.measures.forEach((m) => {\r\n        if (m.isSelected != m.isRequired) {\r\n          extraMeasures.push(m.id);\r\n        }\r\n      });\r\n    });\r\n\r\n    if (extraMeasures.length == 0) {\r\n      this.toast.error(\"There's no extra measures selected. \");\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      ...this.customViewForm.value,\r\n      agencyId: this.selectedAgencyId,\r\n      measureIds: extraMeasures,\r\n    };\r\n\r\n    this.templateService\r\n      .saveCustomTemplate(payload)\r\n      .pipe(\r\n        take(1),\r\n        tap((result: number) => {\r\n          const nextUrl = fromNext\r\n            ? `/config/custom-rating-view/${result}/assignment`\r\n            : '/config/rating-views';\r\n          this.router.navigateByUrl(nextUrl, {\r\n            state: {\r\n              agencyId: this.selectedAgencyId,\r\n              stateId: this.selectedStateId,\r\n            },\r\n          });\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  checkDomainSelected(domain: IBaseTemplateDomain) {\r\n    let nonRequired = domain.measures.filter((d) => !d.isRequired);\r\n    nonRequired.forEach((n) => (n.isSelected = domain.isAllSelected));\r\n  }\r\n\r\n  checkDomainAllSelected(domain: IBaseTemplateDomain) {\r\n    domain.isAllSelected =\r\n      domain.measures.filter((d) => !d.isSelected).length == 0;\r\n  }\r\n\r\n  next() {\r\n    if (this.id) {\r\n      this.router.navigateByUrl(\r\n        `/config/custom-rating-view/${this.id}/assignment`,\r\n        {\r\n          state: {\r\n            agencyId: this.selectedAgencyId,\r\n            stateId: this.selectedStateId,\r\n          },\r\n        }\r\n      );\r\n    } else {\r\n      this.submitForm(true);\r\n    }\r\n  }\r\n\r\n  cancel(): void {\r\n    this.router.navigateByUrl(`/config/rating-views`);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscriptions) this.subscriptions?.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title title=\"Assignment of Alternate Rating View\"></drdp-title>\r\n  </div>\r\n  <drdp-container>\r\n    <drdp-container additionClasses=\"min-h-[6rem] w-full\" color=\"lightBlue\">\r\n      <form\r\n        class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-6 p-5 gap-2 md:gap-3 flex-row content-center my-auto lg:items-end\">\r\n        <div class=\"col-span-1\">\r\n          <drdp-select-rating-period [initialRatingPeriodId]=\"selectedRatingPeriodId\" (ratingPeriod)=\"handleRatingPeriod($event)\" [agencyId]=\"agencyId\"\r\n              [clear]=\"clearDropdowns\" [required]=\"true\">\r\n          </drdp-select-rating-period>\r\n        </div>\r\n        <div class=\"col-span-1\">\r\n          <drdp-select-site (site)=\"handleSites($event)\" [agencyId]=\"agencyId\" [multiSelect]=\"false\"\r\n            [multiSelectInitVals]=\"false\" [clear]=\"clearDropdowns\">\r\n          </drdp-select-site>\r\n        </div>\r\n\r\n        <div class=\"col-span-1\">\r\n          <drdp-filter-select #classroomSelect label=\"Classroom\" [options]=\"classroomList\"\r\n            [selectType]=\"selectType.Class\" (onSelected)=\"handleClassroom($event)\">\r\n          </drdp-filter-select>\r\n        </div>\r\n        <div class=\"flex flex-row col-span-1 justify-evenly content-center mt-5 lg:justify-start md:col-span-2 \">\r\n          <div class=\"mb-0 lg:mr-2\">\r\n            <drdp-btn (click)=\"search()\">\r\n              <span class=\"px-2\">Search</span>\r\n            </drdp-btn>\r\n          </div>\r\n          <div>\r\n            <drdp-btn color=\"outline\" (click)=\"onClear()\">Clear</drdp-btn>\r\n          </div>\r\n        </div>\r\n      </form>\r\n    </drdp-container>\r\n  </drdp-container>\r\n\r\n  <drdp-container *ngFor=\"let result of results\" additionClasses=\"mt-4\">\r\n    <div class=\"grid grid-cols-4\">\r\n      <div class=\"font-bold\">Select All From Site</div>\r\n      <div class=\"font-bold\">Site Name</div>\r\n      <div class=\"font-bold\">Classrooms</div>\r\n      <div class=\"font-bold\">View Site</div>\r\n\r\n      <div>\r\n        <mat-checkbox class=\"font-medium\" [checked]=\"result.isSelected\" [(ngModel)]=\"result.isSelected\"\r\n          [ngModelOptions]=\"{standalone: true}\" (change)=\"toggleSite(result)\">\r\n        </mat-checkbox>\r\n      </div>\r\n      <div>{{result.siteName}}</div>\r\n      <div>{{result.classroomCount}}</div>\r\n      <div><a class=\"font-bold text-blue-600 cursor-pointer\"\r\n          (click)=\"result.showClassrooms = !result.showClassrooms\">Open Site List <i\r\n            [class]=\"result.showClassrooms ? 'uil uil-angle-right' : 'uil uil-angle-down'\"></i></a></div>\r\n    </div>\r\n    <hr class=\"my-4\" *ngIf=\"result.showClassrooms\">\r\n    <div class=\"grid grid-cols-5\" *ngIf=\"result.showClassrooms\">\r\n      <div></div>\r\n      <div class=\"font-bold\">Select Entire Classroom</div>\r\n      <div class=\"font-bold\">Classroom</div>\r\n      <div class=\"font-bold\">Rating Period</div>\r\n      <div class=\"font-bold\">View Students</div>\r\n\r\n      <ng-container *ngFor=\"let classroom of result.classroomDetails\">\r\n        <div></div>\r\n        <div class=\"text-center\">\r\n          <mat-checkbox class=\"font-medium\" [checked]=\"classroom.isSelected\" [(ngModel)]=\"classroom.isSelected\"\r\n            [ngModelOptions]=\"{standalone: true}\" (change)=\"toggleClassroom(result, classroom)\">\r\n          </mat-checkbox>\r\n        </div>\r\n\r\n        <div> {{classroom.classroomName }}</div>\r\n        <div> {{classroom.ratingPeriodName }}</div>\r\n        <div><a class=\"font-bold text-blue-600 cursor-pointer\"\r\n            (click)=\"classroom.showStudents = !classroom.showStudents\">Open Student\r\n            List <i [class]=\"classroom.showStudents ? 'uil uil-angle-right' : 'uil uil-angle-down'\"></i></a>\r\n          <div class=\"student-box\" *ngIf=\"classroom.showStudents\">\r\n            <div *ngFor=\"let student of classroom.students\">\r\n              <mat-checkbox class=\"font-medium\" [checked]=\"student.isSelected\" [(ngModel)]=\"student.isSelected\"\r\n                [ngModelOptions]=\"{standalone: true}\" (change)=\"checkIsClassroomSelected(result, classroom, student)\">\r\n                {{student.name}}\r\n              </mat-checkbox>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </ng-container>\r\n    </div>\r\n  </drdp-container>\r\n\r\n  <div class=\"mt-4 mb-2 flex justify-end\">\r\n    <drdp-btn color=\"outline\" (click)=\"cancel()\">Cancel</drdp-btn>\r\n    <drdp-btn (click)=\"submit()\" class=\"ml-4\" *ngIf=\"results.length > 0\"> Save </drdp-btn>\r\n  </div>\r\n\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IClass, IUserClassSearchRequestDto } from '@core/interfaces/iclasses';\r\nimport { IRatingPeriod } from '@core/interfaces/iratingperiod';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { AgeGradeTemplateEnrollmentService } from '@core/services/age-grade-template-enrollment.service.ts';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { StudentClassEnrollmentService } from '@core/services/student-class-enrollment.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\nimport {\r\n  IClassroomDetail,\r\n  IRatingViewTemplateOption,\r\n  IStudentOption,\r\n} from '../../interfaces/irating-view-template-option';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\n\r\n@Component({\r\n  selector: 'drdp-custom-rating-view-assignment',\r\n  templateUrl: './custom-rating-view-assignment.component.html',\r\n  styleUrls: ['./custom-rating-view-assignment.component.scss'],\r\n})\r\nexport class CustomRatingViewAssignmentComponent implements OnInit {\r\n  payload: IUserClassSearchRequestDto = {};\r\n  agencyId = 0;\r\n  templateId = 0;\r\n  selectedSiteId?: any;\r\n  selectedRatingPeriodId?: number | null;\r\n  siteList: ISites[] | undefined = [];\r\n  ratingPeriodList: IRatingPeriod[] | undefined = [];\r\n  classroomList: IClass[] = [];\r\n  results: IRatingViewTemplateOption[] = [];\r\n  clearDropdowns = false;\r\n\r\n  get selectType() {\r\n    return SelectType;\r\n  }\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n\r\n  constructor(\r\n    private ratingPeriodService: RatingPeriodService,\r\n    private classService: ClassService,\r\n    private router: Router,\r\n    private route: ActivatedRoute,\r\n    private toast: ToastService,\r\n    private studentClassEnrollmentService: StudentClassEnrollmentService,\r\n    private enrollmentService: AgeGradeTemplateEnrollmentService,\r\n    public modal: MatDialog\r\n  ) {\r\n    this.agencyId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['agencyId'] || 0;\r\n\r\n    if (this.agencyId == 0) {\r\n      this.toast.error('Choose a custom view template to edit.');\r\n      this.router.navigateByUrl('/config/rating-views');\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.templateId = Number(this.route.snapshot.paramMap.get('id'));\r\n    this.initializeDropdowns();\r\n  }\r\n\r\n  initializeDropdowns(): void {\r\n    this.ratingPeriodService\r\n      .getByAgency(this.agencyId)\r\n      .pipe(take(1))\r\n      .subscribe((req) => {\r\n        this.ratingPeriodList = req;\r\n      });\r\n  }\r\n\r\n  handleSites(site: ISites): void {\r\n    if (!site) {\r\n      this.payload.siteId = null;\r\n      this.payload.ratingPeriodId = null;\r\n      this.payload.classroomId = null;\r\n      this.ratingPeriodSelect?.clear();\r\n      this.classroomList = [];\r\n      return;\r\n    }\r\n\r\n    this.payload.siteId = site.id;\r\n    this.selectedSiteId = site.id;\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleRatingPeriod(ratingPeriod: IRatingPeriod): void {\r\n    if (!ratingPeriod) {\r\n      this.payload.ratingPeriodId = null;\r\n      this.payload.classroomId = null;\r\n      this.classroomList = [];\r\n      return;\r\n    }\r\n\r\n    this.payload.ratingPeriodId = ratingPeriod.id;\r\n    this.selectedRatingPeriodId = ratingPeriod.id;\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleClassroom(classroom: any): void {\r\n    if (!classroom) {\r\n      this.payload.classroomId = null;\r\n      return;\r\n    }\r\n\r\n    this.payload.classroomId = classroom.id;\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    const payload: any = {};\r\n    payload.siteIds = this.selectedSiteId ? [this.selectedSiteId] : null;\r\n    payload.ratingPeriodId = this.selectedRatingPeriodId ?? '';\r\n    payload.itemsPerPage = 10;\r\n\r\n    if (payload.siteIds?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id)\r\n          );\r\n        });\r\n    }\r\n  }\r\n\r\n  onClear(): void {\r\n    this.clearDropdowns = true;\r\n    this.ratingPeriodSelect?.clear();\r\n    this.classroomSelect?.clear();\r\n    this.selectedRatingPeriodId = null;\r\n    this.selectedSiteId = null;\r\n    this.classroomList = [];\r\n\r\n    this.payload = {};\r\n    this.payload.itemsPerPage = 10;\r\n    this.results = [];\r\n  }\r\n\r\n  search(): void {\r\n    if (!this.payload.ratingPeriodId) {\r\n      this.toast.error('Rating Period is required');\r\n      return;\r\n    }\r\n\r\n    this.studentClassEnrollmentService\r\n      .getRatingPeriodTemplateOptions(\r\n        this.payload.ratingPeriodId,\r\n        this.payload.siteId,\r\n        this.payload.classroomId\r\n      )\r\n      .pipe(take(1))\r\n      .subscribe((result: IRatingViewTemplateOption[]) => {\r\n        this.results = result;\r\n      });\r\n  }\r\n\r\n  toggleSite(site: IRatingViewTemplateOption) {\r\n    site.classroomDetails.forEach((c) => {\r\n      c.isSelected = site.isSelected;\r\n      c.students.forEach((student) => {\r\n        student.isSelected = site.isSelected;\r\n      });\r\n    });\r\n  }\r\n\r\n  toggleClassroom(\r\n    site: IRatingViewTemplateOption,\r\n    classroom: IClassroomDetail\r\n  ) {\r\n    classroom.students.forEach((student) => {\r\n      student.isSelected = classroom.isSelected;\r\n    });\r\n\r\n    if (!classroom.isSelected) this.checkIfSiteSelected(site);\r\n  }\r\n\r\n  checkIsClassroomSelected(\r\n    site: IRatingViewTemplateOption,\r\n    classroom: IClassroomDetail,\r\n    student: IStudentOption\r\n  ) {\r\n    if (!student.isSelected) {\r\n      classroom.isSelected =\r\n        classroom.students.filter((d) => !d.isSelected).length == 0;\r\n    }\r\n\r\n    if (!classroom.isSelected) this.checkIfSiteSelected(site);\r\n  }\r\n\r\n  checkIfSiteSelected(site: IRatingViewTemplateOption) {\r\n    site.isSelected =\r\n      site.classroomDetails.filter((d) => !d.isSelected).length == 0;\r\n  }\r\n\r\n  submit() {\r\n    if (\r\n      !this.results.some((d) => d.isSelected) &&\r\n      !this.results.some((d) => d.classroomDetails.some((c) => c.isSelected)) &&\r\n      !this.results.some((d) =>\r\n        d.classroomDetails.some((c) => c.students.some((s) => s.isSelected))\r\n      )\r\n    ) {\r\n      this.toast.error('Please select a site, classroom or student.');\r\n      return;\r\n    }\r\n\r\n    const request = {\r\n      agencyId: this.agencyId,\r\n      ageGradeTemplateId: this.templateId,\r\n      ratingPeriodId: this.selectedRatingPeriodId,\r\n      options: this.results,\r\n    };\r\n    this.enrollmentService\r\n      .saveTemplateAssignments(request)\r\n      .pipe(take(1))\r\n      .subscribe((s) => {  \r\n        if (s.pilotStudents) {\r\n          this.openErrorModal(s.pilotStudents.join('<br><br>'));\r\n        } else if (s.lockedStudents) {\r\n          this.openErrorModal(s.lockedStudents.join('<br><br>'));\r\n        } else if (s.iepStudents) {\r\n          let errorMsg = \"PS Children with an IEP cannot be assigned an alternate rating view that has less domain and measure requirements than the PS Fundamental View. IT Children with an IFSP cannot be assigned an alternate rating view that has less domain and measure requirements than the IT Comprehensive View.<br><br>\" + \r\n          \"<b>IEP Student(s)</b><br>\" + \r\n          s.iepStudents.join('<br>');\r\n          this.openErrorModal(errorMsg);\r\n        } else if (s.duplicates) {\r\n          this.openErrorModal(s.duplicates.join('<br><br>'));\r\n        }\r\n        else {\r\n          this.toast.success('Assignments successfully saved!');\r\n          this.router.navigateByUrl('/config/rating-views');\r\n        }\r\n      });\r\n  }\r\n\r\n  openErrorModal(message: any) {\r\n    let modal = { data: { modalInfo: {\r\n      title: 'Error',\r\n      message: message,\r\n      primaryBtnText: Modal.OK,\r\n      wideContent: true\r\n    }}};\r\n    this.modal.open(ConfirmationModalComponent, { data: modal });\r\n  }\r\n\r\n  cancel() {\r\n    this.router.navigateByUrl(`/config/custom-rating-view/${this.templateId}`, {\r\n      state: { agencyId: this.agencyId },\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title [title]=\"pageTitle\"></drdp-title>\r\n  </div>\r\n  <drdp-container additionClasses=\"mt-5\">\r\n    <div>\r\n      <h2 class=\"text-[20px] font-bold mb-2\">Add A New Base Template</h2>\r\n      <hr>\r\n    </div>\r\n    <form [formGroup]=\"customViewForm\" #ngForm=\"ngForm\">\r\n      <div class=\"form-input-label-group\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"title\">Title</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" placeholder=\"Title\" matInput type=\"text\" [readonly]=\"isView\" formControlName=\"title\"\r\n            required>\r\n          <mat-error *ngIf=\"title.invalid\">Title is required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"form-input-label-group\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"description\">Description</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" placeholder=\"Description\" matInput type=\"text\" [readonly]=\"isView\"\r\n            formControlName=\"description\" required>\r\n          <mat-error *ngIf=\"description.invalid\">Description is required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"form-input-label-group\" *ngIf=\"!isView\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"ageGradeInstrumentId\">Age Group</label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select formControlName=\"ageGradeInstrumentId\" placeholder=\"Select a base template\" required\r\n            [ngClass]=\"{'invalid' : ageGradeInstrumentId.invalid && ngForm.submitted }\">\r\n            <mat-option *ngFor=\"let agi of ageGradeInstruments\" [value]=\"agi.id\">\r\n              {{ agi.ageGradeInstrumentName }}\r\n            </mat-option>\r\n          </mat-select>\r\n          <mat-error *ngIf=\"ageGradeInstrumentId.invalid\">Age Group required.</mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div *ngIf=\"isView\" class=\"self-start\">\r\n        <label class=\"font-normal\" for=\"ageGradeInstrumentId\">Age Group</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input class=\"display\" matInput [readonly]=\"isView\" [value]=\"customTemplate?.ageGradeInstrument\" type=\"text\"\r\n            formControlName=\"ageGradeInstrumentId\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"form-input-label-group mt-4\" *ngIf=\"!isView\">\r\n        <label class=\"font-normal\" [ngClass]=\"{'required': !isView }\" for=\"ageGradeTemplateId\">Base Template:\r\n        </label>\r\n        <mat-form-field appearance=\"fill\" class=\"drdp-input\">\r\n          <mat-select formControlName=\"ageGradeTemplateId\" placeholder=\"Select an age group\" required\r\n            [ngClass]=\"{'invalid' : ageGradeInstrumentId.invalid && ngForm.submitted }\">\r\n            <mat-option *ngFor=\"let abt of ageGradeBaseTemplates\" [value]=\"abt.id\">\r\n              {{ abt.ageGradeInstrumentCode }} - {{ abt.description }}\r\n            </mat-option>\r\n          </mat-select>\r\n          <mat-error *ngIf=\"ageGradeTemplateId.invalid\">Base Template is required.</mat-error>\r\n        </mat-form-field>\r\n        <small>This will be used to create the developmental levels so choose properly. </small>\r\n      </div>\r\n      <div *ngIf=\"isView\" class=\"self-start\">\r\n        <label class=\"font-normal\" for=\"ageGradeTemplateId\">Base Template</label>\r\n        <mat-form-field appearance=\"fill\">\r\n          <input matInput class=\"display\" [readonly]=\"isView\" [value]=\"customTemplate?.ageGradeTemplate\" type=\"text\"\r\n            formControlName=\"ageGradeTemplateId\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n\r\n      <div class=\"mt-4\">\r\n        <h3 class=\"text-[18px] font-bold mb-2\">Choose Domains</h3>\r\n        <span *ngIf=\"!displayMeasures\"> Choose a domain to include in your base template. Measures will be automatically\r\n          selected. </span>\r\n        <div class=\"grid grid-cols-2 md:grid-cols-8 mt-4\">\r\n          <div *ngFor=\"let domain of templateDomains\">\r\n            <div class=\"col-span-1\">\r\n              <h4 class=\"text-[16px] font-bold mb-2\">{{domain.domainCode}}</h4>\r\n              <mat-checkbox class=\"font-medium\" (change)=\"checkDomainSelected(domain)\" [checked]=\"domain.isAllSelected\"\r\n                [disabled]=\"isView\" [(ngModel)]=\"domain.isAllSelected\" [ngModelOptions]=\"{standalone: true}\">\r\n                {{domain.domainCode}}\r\n              </mat-checkbox>\r\n              <div class=\"ml-2 hidden\">\r\n                <div *ngFor=\"let measure of domain.measures\">\r\n                  <mat-checkbox class=\"font-medium\" (change)=\"checkDomainAllSelected(domain)\"\r\n                    [checked]=\"measure.isSelected\" [disabled]=\"true\" [(ngModel)]=\"measure.isSelected\"\r\n                    [ngModelOptions]=\"{standalone: true}\">\r\n                    {{measure.code}}\r\n                  </mat-checkbox>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"mt-4 mb-2 flex justify-end\">\r\n        <drdp-btn (click)=\"submitForm()\"> Save </drdp-btn>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n</div>","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { AgeGradeTemplateService } from '@core/services/age-grade-template.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take, tap, combineLatest, Observable, Subscription } from 'rxjs';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { AgeGradeTemplateEnrollmentService } from '@core/services/age-grade-template-enrollment.service.ts';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IRatingBaseTemplate } from '../interfaces/irating-base-template';\r\nimport { IBaseTemplateDomain } from '../interfaces/ibase-template-domain';\r\nimport { ICustomRatingTemplateForm } from '../interfaces/icustom-rating-template-form';\r\nimport { ITemplateMeasure } from '../interfaces/itemplate-measure';\r\n\r\n@Component({\r\n  selector: 'drdp-base-template',\r\n  templateUrl: './base-template.component.html',\r\n  styleUrls: ['./base-template.component.scss'],\r\n})\r\nexport class BaseTemplateComponent implements OnInit {\r\n  pageTitle = 'Base Template View';\r\n  isView = false;\r\n  customViewForm: FormGroup | any;\r\n  ageGradeInstruments: IAgeGradeInstrument[] = [];\r\n  baseTemplates: IRatingBaseTemplate[] = [];\r\n  ageGradeBaseTemplates: IRatingBaseTemplate[] = [];\r\n  templateDomains: IBaseTemplateDomain[] = [];\r\n  selectedAgencyId = 0;\r\n  customTemplate?: ICustomRatingTemplateForm;\r\n  lookups$?: Observable<{\r\n    ageGradeInstruments: IAgeGradeInstrument[];\r\n    baseTemplates: IRatingBaseTemplate[];\r\n  }>;\r\n  subscriptions = new Subscription();\r\n  constructor(\r\n    private formBuilder: FormBuilder,\r\n    private toast: ToastService,\r\n    private lookupService: LookupService,\r\n    private templateService: AgeGradeTemplateService,\r\n    private router: Router\r\n  ) {\r\n    this.selectedAgencyId =\r\n      this.router.getCurrentNavigation()?.extras?.state?.['agencyId'] || 0;\r\n  }\r\n\r\n  get title() {\r\n    return this.customViewForm.get('title');\r\n  }\r\n  get description() {\r\n    return this.customViewForm.get('description');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.customViewForm.get('ageGradeInstrumentId');\r\n  }\r\n  get ageGradeTemplateId() {\r\n    return this.customViewForm.get('ageGradeTemplateId');\r\n  }\r\n  get displayMeasures() {\r\n    return this.templateDomains.length > 0;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initForm();\r\n    this.initData();\r\n  }\r\n\r\n  initForm() {\r\n    this.customViewForm = this.formBuilder.group({\r\n      title: [null, [Validators.required, Validators.maxLength(250)]],\r\n      description: [null, [Validators.required, Validators.maxLength(500)]],\r\n      ageGradeInstrumentId: [null, Validators.required],\r\n      ageGradeTemplateId: [null, Validators.required],\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.ageGradeInstrumentId.valueChanges.subscribe((val: number) => {\r\n        if (!val) {\r\n          return;\r\n        }\r\n\r\n        this.templateService\r\n          .getBaseMeasuresByInstrument(val)\r\n          .pipe(\r\n            take(1),\r\n            tap((results) => {\r\n              this.templateDomains = results;\r\n            })\r\n          )\r\n          .subscribe();\r\n      })\r\n    );\r\n  }\r\n\r\n  initData() {\r\n    this.lookups$ = combineLatest({\r\n      ageGradeInstruments: this.lookupService.getAgeGradeInstruments(0),\r\n      baseTemplates: this.templateService.getAvailBaseTemplates(),\r\n    });\r\n\r\n    this.subscriptions.add(\r\n      this.lookups$.subscribe((results) => {\r\n        this.ageGradeInstruments = results['ageGradeInstruments'];\r\n        this.baseTemplates = results['baseTemplates'];\r\n        this.ageGradeBaseTemplates = this.baseTemplates;\r\n      })\r\n    );\r\n  }\r\n\r\n  submitForm() {\r\n    if (this.customViewForm.invalid) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    let selectedMeasures: ITemplateMeasure[] = [];\r\n    this.templateDomains.forEach((domain) => {\r\n      domain.measures.forEach((m) => {\r\n        if (m.isSelected) {\r\n          selectedMeasures.push(m);\r\n        }\r\n      });\r\n    });\r\n\r\n    if (selectedMeasures.length == 0) {\r\n      this.toast.error(\"There's no measures selected. \");\r\n      return;\r\n    }\r\n\r\n    const payload = {\r\n      ...this.customViewForm.value,\r\n      agencyId: this.selectedAgencyId,\r\n      selectedMeasures: selectedMeasures,\r\n    };\r\n\r\n    this.templateService\r\n      .saveBaseTemplate(payload)\r\n      .pipe(\r\n        take(1),\r\n        tap((result: number) => {\r\n          this.router.navigateByUrl('/config/rating-views', {\r\n            state: { agencyId: this.selectedAgencyId },\r\n          });\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  checkDomainSelected(domain: IBaseTemplateDomain) {\r\n    let nonRequired = domain.measures.filter((d) => !d.isRequired);\r\n    nonRequired.forEach((n) => (n.isSelected = domain.isAllSelected));\r\n  }\r\n\r\n  checkDomainAllSelected(domain: IBaseTemplateDomain) {\r\n    domain.isAllSelected =\r\n      domain.measures.filter((d) => !d.isSelected).length == 0;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.subscriptions) this.subscriptions?.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex justify-between\">\r\n      <drdp-title title=\"Integration Management\"></drdp-title>\r\n      <span>\r\n        <drdp-btn *drdpCheckPermission=\"Permission.IntegrationManagement\" (click)=\"addVendor()\"><i class=\"uil uil-plus\"></i> \r\n          Add New Vendor</drdp-btn>\r\n      </span>\r\n    </div>\r\n  \r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n      <drdp-add-edit-table [dataSource]=\"dataSource\" [tableData]=\"tableData\" [columns]=\"tableColumns\"\r\n        [isAdmin]=\"hasFullAccess\" (editActionItem)=\"editVendor($event)\">\r\n      </drdp-add-edit-table>\r\n    </drdp-container>\r\n  </div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { take } from 'rxjs';\r\nimport { IVendor } from '@core/interfaces/ivendor';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'drdp-integrations',\r\n  templateUrl: './integrations.component.html',\r\n  styleUrls: ['./integrations.component.scss'],\r\n})\r\nexport class IntegrationsComponent implements OnInit {\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  hasFullAccess?: boolean;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'name', header: 'Vendor Name', type: 'text' },\r\n    { columnDef: 'id', header: 'Vendor ID', type: 'text' },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n  ];\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n  constructor(\r\n    private lookupService: LookupService,\r\n    public modal: MatDialog,\r\n    public authService: AuthService,\r\n    private router: Router\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.hasFullAccess =\r\n      this.authService.isSuperAdmin() || this.authService.isCustomerService();\r\n    this.loadTableData();\r\n  }\r\n\r\n  getVendorList(): void {\r\n    this.lookupService\r\n      .getVendors()\r\n      .pipe(take(1))\r\n      .subscribe((res: IVendor[]) => {\r\n        if (res) {\r\n          this.initializeTableData(res);\r\n        }\r\n      });\r\n  }\r\n\r\n  initializeTableData(res: IVendor[]): void {\r\n    this.tableData = res;\r\n    this.dataSource = new MatTableDataSource(res);\r\n  }\r\n\r\n  loadTableData() {\r\n    this.getVendorList();\r\n  }\r\n\r\n  addVendor(): void {\r\n    this.router.navigateByUrl('/config/integrations/add-vendor');\r\n  }\r\n\r\n  editVendor(event: any): void {\r\n    const { data } = event;\r\n    this.router.navigateByUrl(`/config/integrations/edit-vendor/${data.id}`);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DataService } from './data.service';\r\nimport { IVendorRequest, IVendor } from '@core/interfaces/ivendor';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class VendorService {\r\n  constructor(public data: DataService) {}\r\n\r\n  saveVendor(payload: IVendorRequest, message?: string): Observable<boolean> {\r\n    return this.data.post('vendor', payload, message);\r\n  }\r\n\r\n  getVendor(vendorId: number): Observable<IVendor> {\r\n    return this.data.get(`vendor/${vendorId}`);\r\n  }\r\n\r\n  generateKey(payload: IVendorRequest, message?: string): Observable<IVendor> {\r\n    return this.data.put('vendor/generate-key', payload, message);\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title [title]=\"label\"></drdp-title>\r\n    <span *ngIf=\"id.value\">\r\n      <drdp-btn *drdpCheckPermission=\"Permission.IntegrationManagement\" color=\"outline\"\r\n        (click)=\"generateAPIKey()\">Generate API Key</drdp-btn>\r\n    </span>\r\n  </div>\r\n\r\n  <drdp-container [additionClasses]=\"'min-h-[22rem]'\">\r\n    <form class=\"grid grid-cols-2 gap-x-8 gap-x-10 pt-5\" [formGroup]=\"vendorForm\">\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"name\">Vendor Name</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Vendor Name\" autocomplete=\"off\" id=\"vendorName\" type=\"text\"\r\n            formControlName=\"name\" maxlength=\"50\" required>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <div class=\"grid grid-cols-2 gap-x-4 gap-x-10\">\r\n\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <label class=\"font-normal\" for=\"name\">Vendor ID</label>\r\n            <p *ngIf=\"id.value\">{{id.value}}</p>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <label class=\"font-normal\" for=\"name\">Visibility</label>\r\n            <mat-checkbox formControlName=\"isVisible\" color=\"primary\">\r\n            </mat-checkbox>\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal required\" for=\"name\">Contact Email</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Enter Contact Email\" autocomplete=\"off\" id=\"email\" type=\"text\"\r\n            formControlName=\"emailName\" maxlength=\"100\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"name\">Contact Phone</label>\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <input matInput placeholder=\"Enter Contact Phone\" autocomplete=\"off\" id=\"phone\" type=\"text\"\r\n            mask=\"(000) 000-0000\" formControlName=\"phoneNumber\" maxlength=\"\">\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <label class=\"font-normal\" for=\"permissions\">Permissions</label>\r\n        <div class=\"grid grid-cols-2 gap-x-4 gap-x-10\">\r\n\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <mat-checkbox formControlName=\"permissions_hasSingleScore\" color=\"primary\">\r\n              Single Score\r\n            </mat-checkbox>\r\n          </div>\r\n          <div class=\"col-span-1 items-center w-[100%]\">\r\n            <mat-checkbox formControlName=\"permissions_hasAgencyExtract\" color=\"primary\">\r\n              Agency Extract\r\n            </mat-checkbox>\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n    </form>\r\n    <div class=\" flex grow\"></div>\r\n    <div mat-dialog-actions class=\"flex justify-end \">\r\n      <drdp-btn type=\"button\" color=\"cancel\" class=\"mr-2\" [routerLink]=\"'/config/integrations'\"\r\n        mat-button>Cancel</drdp-btn>\r\n      <drdp-btn type=\"submit\" [disabled]=\"vendorForm.invalid\" (click)=\"submit()\">Save & Exit</drdp-btn>\r\n    </div>\r\n  </drdp-container>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { IVendorRequest, IVendor } from '@core/interfaces/ivendor';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { map, take, tap } from 'rxjs';\r\nimport { Clipboard } from '@angular/cdk/clipboard';\r\nimport { VendorService } from '@core/services/vendor.service';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-integration',\r\n  templateUrl: './add-edit-integration.component.html',\r\n  styleUrls: ['./add-edit-integration.component.scss'],\r\n})\r\nexport class AddEditIntegrationComponent implements OnInit {\r\n  vendorForm: FormGroup | any;\r\n  currentVendor?: IVendor;\r\n  currentUser?: IUser;\r\n  label = 'Add Vendor';\r\n  API_Key: string | null = '';\r\n  public get Permission() {\r\n    return Permission;\r\n  }\r\n\r\n  get name() {\r\n    return this.vendorForm.get('name');\r\n  }\r\n  get id() {\r\n    return this.vendorForm.get('id');\r\n  }\r\n  get isVisible() {\r\n    return this.vendorForm.get('isVisible');\r\n  }\r\n  get emailName() {\r\n    return this.vendorForm.get('emailName');\r\n  }\r\n  get phoneNumber() {\r\n    return this.vendorForm.get('phoneNumber');\r\n  }\r\n  get permissions_hasSingleScore() {\r\n    return this.vendorForm.get('permissions_hasSingleScore');\r\n  }\r\n  get permissions_hasAgencyExtract() {\r\n    return this.vendorForm.get('permissions_hasAgencyExtract');\r\n  }\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private vendorService: VendorService,\r\n    private toastService: ToastService,\r\n    private router: Router,\r\n    private route: ActivatedRoute,\r\n    public modal: MatDialog,\r\n    private clipboard: Clipboard\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.vendorForm = this.fb.group({\r\n      name: [null, [Validators.required, Validators.maxLength(50)]],\r\n      id: [null],\r\n      isVisible: [null],\r\n      emailName: [\r\n        null,\r\n        [Validators.required, Validators.email, Validators.maxLength(50)],\r\n      ],\r\n      phoneNumber: [null, Validators.maxLength(12)],\r\n      permissions_hasSingleScore: [null],\r\n      permissions_hasAgencyExtract: [null],\r\n    });\r\n\r\n    this.route.paramMap.subscribe((params) => {\r\n      const currentId = params.get('id');\r\n      if (currentId) {\r\n        this.label = 'Edit Vendor';\r\n        this.getVendorById(+currentId);\r\n      }\r\n    });\r\n  }\r\n\r\n  getVendorById(id: number): void {\r\n    this.vendorService\r\n      .getVendor(id)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: IVendor) => {\r\n          this.currentVendor = res;\r\n          this.vendorForm.patchValue({\r\n            ...res,\r\n          });\r\n\r\n          if (this.currentVendor.user) {\r\n            this.vendorForm.patchValue({\r\n              emailName: this.currentVendor.user.emailName,\r\n              phoneNumber: this.currentVendor.user.phoneNumber,\r\n            });\r\n          }\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  generateAPIKey(): void {\r\n    if (this.vendorForm.invalid) {\r\n      this.toastService.error(\r\n        'Please complete form before generating api key.'\r\n      );\r\n      return;\r\n    }\r\n    if (this.currentVendor) {\r\n      Object.assign(this.currentVendor, this.vendorForm.value);\r\n      const payload: IVendorRequest = {\r\n        ...this.currentVendor,\r\n      };\r\n      this.vendorService\r\n        .generateKey(payload)\r\n        .pipe(\r\n          take(1),\r\n          map((res: any) => {\r\n            const { rawKey } = res;\r\n            this.API_Key = rawKey;\r\n            return res;\r\n          }),\r\n          tap((res: any) => {\r\n            var event = { data: { modalInfo: {} } };\r\n            event.data.modalInfo = {\r\n              title: 'Vendor API Key',\r\n              message: `Here is your key. Please copy this key now. <br> <br> <p class=\"underline\">${this.API_Key}</p>`,\r\n              primaryBtnClass: 'blue',\r\n              primaryBtnText: Modal.Copy,\r\n            };\r\n\r\n            const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n              data: event ? event : undefined,\r\n            });\r\n            modalRef.afterClosed().subscribe((res: any) => {\r\n              if (res && this.API_Key) {\r\n                this.clipboard.copy(this.API_Key);\r\n                this.toastService.success('API Key copied to Clipboard');\r\n              }\r\n            });\r\n          })\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.vendorForm.invalid) {\r\n      this.toastService.error('Please complete form.');\r\n      return;\r\n    }\r\n\r\n    let payload: IVendorRequest = {\r\n      ...this.vendorForm.value,\r\n    };\r\n\r\n    if (this.id.value) {\r\n      payload.id = this.id.value;\r\n    }\r\n\r\n    this.vendorService\r\n      .saveVendor(payload, 'Vendor Saved.')\r\n      .pipe(\r\n        (take(1),\r\n        tap((res: boolean) => {\r\n          this.router.navigate(['/config/integrations']);\r\n        }))\r\n      )\r\n      .subscribe();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AuthGuard } from '@core/guards/auth.guard';\r\nimport { AgenciesComponent } from './agencies/agencies.component';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { ClassesComponent } from './classes/classes.component';\r\nimport { StatesComponent } from './states/states.component';\r\nimport { SitesComponent } from './sites/sites.component';\r\nimport { RatingPeriodsComponent } from './rating-periods/rating-periods.component';\r\nimport { DrdpLayoutComponent } from '../drdp-layout/drdp-layout.component';\r\nimport { SchoolyearsComponent } from './schoolyears/schoolyears.component';\r\nimport { GlobalRatingPeriodsComponent } from './global-rating-periods/global-rating-periods.component';\r\nimport { LockingStatusComponent } from './locking-status/locking-status.component';\r\nimport { ClassroomComponent } from './classroom/classroom.component';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { PermissionGuard } from '@core/guards/permission.guard';\r\nimport { StateConfigurationComponent } from './state-configuration/state-configuration.component';\r\nimport { RatingViewSetupComponent } from './rating-view-setup/rating-view-setup.component';\r\nimport { CustomRatingViewFormComponent } from './rating-view-setup/custom-rating-view/custom-rating-view-form/custom-rating-view-form.component';\r\nimport { CustomRatingViewAssignmentComponent } from './rating-view-setup/custom-rating-view/custom-rating-view-assignment/custom-rating-view-assignment.component';\r\nimport { BaseTemplateComponent } from './rating-view-setup/base-template/base-template.component';\r\nimport { IntegrationsComponent } from './integrations/integrations.component';\r\nimport { AddEditIntegrationComponent } from './integrations/add-edit-integration/add-edit-integration.component';\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: 'config',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      { path: 'classroom-assignments', component: ClassesComponent },\r\n      {\r\n        path: 'states',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStates },\r\n        component: StatesComponent,\r\n      },\r\n      {\r\n        path: 'states-configurations/:stateId',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewStates },\r\n        component: StateConfigurationComponent,\r\n      },\r\n      {\r\n        path: 'agencies',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewAgencies },\r\n        component: AgenciesComponent,\r\n      },\r\n      {\r\n        path: 'sites',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewSites },\r\n        component: SitesComponent,\r\n      },\r\n      {\r\n        path: 'ratingperiods',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewRatingPeriods },\r\n        component: RatingPeriodsComponent,\r\n      },\r\n      {\r\n        path: 'globalratingperiods',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewGlobalRatingPeriod },\r\n        component: GlobalRatingPeriodsComponent,\r\n      },\r\n      {\r\n        path: 'schoolyears',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewTerms },\r\n        component: SchoolyearsComponent,\r\n      },\r\n      {\r\n        path: 'lockingstatus',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewLockStatus },\r\n        component: LockingStatusComponent,\r\n      },\r\n      {\r\n        path: 'classroom',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewClassrooms },\r\n        component: ClassroomComponent,\r\n      },\r\n      {\r\n        path: 'rating-views',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewRatingViews },\r\n        component: RatingViewSetupComponent,\r\n      },\r\n      {\r\n        path: 'base-rating-view',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.CreateBaseTemplates,\r\n          agencyId: 0,\r\n          stateId: 0,\r\n        },\r\n        component: BaseTemplateComponent,\r\n      },\r\n      {\r\n        path: 'custom-rating-view',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.EditRatingViews,\r\n          agencyId: 0,\r\n          stateId: 0,\r\n        },\r\n        component: CustomRatingViewFormComponent,\r\n      },\r\n      {\r\n        path: 'custom-rating-view/:id',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.ViewRatingViews,\r\n          agencyId: 0,\r\n          stateId: 0,\r\n        },\r\n        component: CustomRatingViewFormComponent,\r\n      },\r\n      {\r\n        path: 'custom-rating-view/:id/assignment',\r\n        canActivate: [PermissionGuard],\r\n        data: {\r\n          permission: Permission.EditRatingViews,\r\n          agencyId: 0,\r\n          stateId: 0,\r\n        },\r\n        component: CustomRatingViewAssignmentComponent,\r\n      },\r\n      {\r\n        path: 'integrations',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.IntegrationManagement },\r\n        component: IntegrationsComponent,\r\n      },\r\n      {\r\n        path: 'integrations/add-vendor',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.IntegrationManagement },\r\n        component: AddEditIntegrationComponent,\r\n      },\r\n      {\r\n        path: 'integrations/edit-vendor/:id',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.IntegrationManagement },\r\n        component: AddEditIntegrationComponent,\r\n      },\r\n    ],\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class ConfigurationRoutingModule {}\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\n\r\nimport { SharedModule } from '@shared/shared.module'\r\nimport { FormsModule } from '@angular/forms'\r\nimport { ClassesComponent } from './classes/classes.component'\r\nimport { StatesComponent } from './states/states.component'\r\nimport { AgenciesComponent } from './agencies/agencies.component'\r\nimport { AddEditAgencyComponent } from './agencies/add-edit-agency/add-edit-agency.component'\r\nimport { CoreModule } from '@core/core.module'\r\nimport { AddEditClassesComponent } from './classes/add-edit-classes/add-edit-classes.component'\r\nimport { SitesComponent } from './sites/sites.component'\r\nimport { AddEditSitesComponent } from './sites/add-edit-sites/add-edit-sites.component'\r\nimport { RatingPeriodsComponent } from './rating-periods/rating-periods.component'\r\nimport { AddEditRatingPeriodComponent } from './rating-periods/add-edit-rating-period/add-edit-rating-period.component'\r\nimport { ConfigurationRoutingModule } from './configuration-routing.module'\r\nimport { SchoolyearsComponent } from './schoolyears/schoolyears.component'\r\nimport { AddSchoolyearComponent } from './schoolyears/add-schoolyear/add-schoolyear.component'\r\nimport { GlobalRatingPeriodsComponent } from './global-rating-periods/global-rating-periods.component'\r\nimport { AddGlobalRatingPeriodComponent } from './global-rating-periods/add-global-rating-period/add-global-rating-period.component'\r\nimport { PastGlobalRatingPeriodsComponent } from './global-rating-periods/past-global-rating-periods/past-global-rating-periods.component'\r\nimport { LockingStatusComponent } from './locking-status/locking-status.component'\r\nimport { AddEditLockingStatusComponent } from './locking-status/add-edit-locking-status/add-edit-locking-status.component'\r\nimport { ClassroomComponent } from './classroom/classroom.component'\r\nimport { AddClassModalComponent } from './classroom/add-class-modal/add-class-modal.component';\r\nimport { AddNewsComponent } from './news/news.component';\r\nimport { StateConfigurationComponent } from './state-configuration/state-configuration.component';\r\nimport { StudentDemographicsComponent } from './state-configuration/student-demographics/student-demographics.component';\r\nimport { CustomConfigurationComponent } from './state-configuration/custom-configuration/custom-configuration.component';\r\nimport { ChildUploadComponent } from './state-configuration/child-upload/child-upload.component';\r\nimport { RatingViewSetupComponent } from './rating-view-setup/rating-view-setup.component';\r\nimport { CustomRatingViewFormComponent } from './rating-view-setup/custom-rating-view/custom-rating-view-form/custom-rating-view-form.component';\r\nimport { CustomRatingViewAssignmentComponent } from './rating-view-setup/custom-rating-view/custom-rating-view-assignment/custom-rating-view-assignment.component';\r\nimport { BaseTemplateComponent } from './rating-view-setup/base-template/base-template.component';\r\nimport { IntegrationsComponent } from './integrations/integrations.component';\r\nimport { AddEditIntegrationComponent } from './integrations/add-edit-integration/add-edit-integration.component';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\nimport { ReassignModalComponent } from './rating-view-setup/custom-rating-view/custom-rating-view-form/reassign-modal/reassign-modal.component';\r\nimport { SchoolYearTargetComponent } from './state-configuration/school-year-target/school-year-target.component';\r\nimport { StateDashboardComponent } from './state-configuration/state-dashboard/state-dashboard.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ClassesComponent,\r\n    StatesComponent,\r\n    AgenciesComponent,\r\n    AddEditAgencyComponent,\r\n    AddEditClassesComponent,\r\n    SitesComponent,\r\n    AddEditSitesComponent,\r\n    RatingPeriodsComponent,\r\n    AddEditRatingPeriodComponent,\r\n    SchoolyearsComponent,\r\n    AddSchoolyearComponent,\r\n    GlobalRatingPeriodsComponent,\r\n    AddGlobalRatingPeriodComponent,\r\n    PastGlobalRatingPeriodsComponent,\r\n    LockingStatusComponent,\r\n    AddEditLockingStatusComponent,\r\n    ClassroomComponent,\r\n    AddClassModalComponent,\r\n    AddNewsComponent,\r\n    StateConfigurationComponent,\r\n    StudentDemographicsComponent,\r\n    CustomConfigurationComponent,\r\n    ChildUploadComponent,\r\n    RatingViewSetupComponent,\r\n    CustomRatingViewFormComponent,\r\n    CustomRatingViewAssignmentComponent,\r\n    BaseTemplateComponent,\r\n    IntegrationsComponent,\r\n    AddEditIntegrationComponent,\r\n    ReassignModalComponent,\r\n    SchoolYearTargetComponent,\r\n    StateDashboardComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ConfigurationRoutingModule,\r\n    SharedModule,\r\n    FormsModule,\r\n    CoreModule,\r\n    NgxMaskModule.forRoot(),\r\n  ],\r\n  providers: [],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class ConfigurationModule {}\r\n","<div id=\"role\" class=\"fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 *ngIf=\"!editData\" class=\"text-[25px] font-bold\">Add New Role</h1>\r\n    <h1 *ngIf=\"editData\" class=\"text-[25px] font-bold\">Edit Role</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <form class=\"grid grid-cols-2 gap-4 gap-x-10\" [formGroup]=\"roleForm\">\r\n    <div>\r\n      <label class=\"required\">Role Category</label>\r\n      <mat-radio-group class=\"flex flex-row\" formControlName=\"RoleGroupId\">\r\n        <div *ngFor=\"let group of roleGroup$ | async\">\r\n          <mat-radio-button class=\"mx-3\" [value]=\"group.id\" color=\"primary\">\r\n            {{ group.name.substring(0, group.name.length - 5) }}\r\n          </mat-radio-button>\r\n        </div>\r\n      </mat-radio-group>\r\n    </div>\r\n    <div class=\"col-span-full\">\r\n      <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n        <label class=\"font-normal required\" for=\"RoleName\">Role Name</label>\r\n        <input matInput placeholder=\"Role Name\" autocomplete=\"off\" type=\"text\" formControlName=\"RoleName\" maxlength=\"25\"\r\n          required>\r\n      </mat-form-field>\r\n    </div>\r\n    <div class=\"col-span-full\">\r\n      <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n        <label class=\"font-normal required\" for=\"RoleDescription\">Description</label>\r\n        <input matInput placeholder=\"Description\" autocomplete=\"off\" type=\"text\" formControlName=\"RoleDescription\"\r\n          maxlength=\"50\" required>\r\n      </mat-form-field>\r\n    </div>\r\n  </form>\r\n\r\n  <div mat-dialog-actions class=\"flex justify-end\">\r\n    <drdp-btn class=\"pr-3\" color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n    <drdp-btn mat-button (click)=\"onSubmit()\" [disabled]=\"roleForm.invalid\" cdkFocusInitial>Save</drdp-btn>\r\n  </div>\r\n</div>","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IRoleGroup, IRoles } from '@core/interfaces/iroles';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-roles',\r\n  templateUrl: './add-edit-roles.component.html',\r\n  styleUrls: ['./add-edit-roles.component.scss'],\r\n})\r\nexport class AddEditRolesComponent implements OnInit {\r\n  @Output() valueChange = new EventEmitter();\r\n  isSuperAdmin: boolean = false;\r\n\r\n  roleForm: FormGroup | any;\r\n  roleEdit: any;\r\n  roleGroup$?: Observable<IRoleGroup[]>;\r\n\r\n  get RoleName() {\r\n    return this.roleForm.get('RoleName');\r\n  }\r\n  get RoleDescription() {\r\n    return this.roleForm.get('RoleDescription');\r\n  }\r\n  get RoleGroupId() {\r\n    return this.roleForm.get('RoleGroupId');\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<AddEditRolesComponent>,\r\n    private roleService: RoleService,\r\n    private toast: ToastService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.roleGroup$ = this.roleService.getRoleGroups();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.roleForm = this.fb.group({\r\n      RoleName: [null, [Validators.required, Validators.maxLength(25)]],\r\n      RoleDescription: [null, [Validators.required, Validators.maxLength(50)]],\r\n      RoleGroupId: [null, Validators.required],\r\n    });\r\n\r\n    if (this.editData) {\r\n      const edit = this.editData.data;\r\n      this.RoleName.setValue(edit.roleName);\r\n      this.RoleDescription.setValue(edit.roleDescription);\r\n      this.RoleGroupId.setValue(edit.roleGroupId);\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.roleForm.invalid) {\r\n      this.toast.error('Please fix form errors.');\r\n      return;\r\n    }\r\n    let payload: IRoles = this.roleForm.value;\r\n    if (this.editData) {\r\n      payload.id = this.editData.data.id;\r\n    }\r\n\r\n    this.roleService\r\n      .addRole(payload, 'Added Role')\r\n      .pipe(take(1))\r\n      .subscribe((result) => {\r\n        if (result) {\r\n          this.dialogRef.close({ success: true });\r\n        }\r\n      });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-1/2\">\r\n      <h1 class=\"pb-2 text-3xl\">Roles</h1>\r\n    </div>\r\n    <div class=\"basis-1/2\">\r\n      <div class=\"flex justify-end items-end\">\r\n        <drdp-btn *ngIf=\"canCreateRoles || isAdmin\" (click)=\"openModal()\"><i class=\"uil uil-plus\"></i> Add New Role</drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container>\r\n\r\n    <div class=\"p-5 w-full\">\r\n      <drdp-add-edit-table \r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"tableData\" \r\n        [columns]=\"tableColumns\"\r\n        (editActionItem)=\"openModal($event)\">\r\n      </drdp-add-edit-table>\r\n\r\n    </div>\r\n  </drdp-container>\r\n  <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n\r\n\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { AddEditRolesComponent } from './add-edit-roles/add-edit-roles.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { RoleGroup } from '@core/enums/roles';\r\n\r\n@Component({\r\n  selector: 'drdp-user-roles',\r\n  templateUrl: './user-roles.component.html',\r\n  styleUrls: ['./user-roles.component.scss'],\r\n})\r\nexport class UserRolesComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  payload: any = {};\r\n  tableData?: any;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  rolesInfo: IRoles[] = [];\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  isAdmin: boolean = false;\r\n  canViewRoles: boolean = true;\r\n  canCreateRoles: boolean = true;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'roleName', header: 'Name', type: 'text', isSortable: true },\r\n    {\r\n      columnDef: 'roleGroupName',\r\n      header: 'Category',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n    {\r\n      columnDef: 'roleDescription',\r\n      header: 'Description',\r\n      type: 'text',\r\n      isSortable: true,\r\n    },\r\n  ];\r\n\r\n  get roleGroup() {\r\n    return RoleGroup;\r\n  }\r\n  constructor(private roleService: RoleService, public modal: MatDialog) {}\r\n  ngOnInit(): void {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.roles);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.roles;\r\n  }\r\n\r\n  openModal(editData?: IModalEmitData): void {\r\n    const modalRef = this.modal.open(AddEditRolesComponent, {\r\n      data: editData ? editData : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe((result) => {\r\n      if (!editData && result.success) {\r\n        this.paginateTable(false);\r\n      }\r\n    });\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    this.roleService\r\n      .searchRoles(this.createSearchPayload(resetPage))\r\n      .subscribe((res: any) => {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(res);\r\n        if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n      });\r\n  }\r\n\r\n  createSearchPayload(resetPage: boolean): any {\r\n    if (resetPage) {\r\n      this.payload.pageIndex = 0;\r\n      this.payload.itemsPerPage = 10;\r\n    } else {\r\n      this.payload.pageIndex = this.paginator.pageIndex + 1;\r\n      this.payload.itemsPerPage = this.paginator.pageSize;\r\n    }\r\n    return this.payload;\r\n  }\r\n}\r\n","<div class=\"rounded-lg fixActionRow\" id=\"addFeatureDialog\">\r\n    <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">{{headerName}}</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n\r\n    <div mat-dialog-content>\r\n      <form class=\"grid grid-cols-1 gap-10 py-5 px-2\" [formGroup]=\"featureForm\">\r\n          <div class=\"col-span-1\">\r\n            <label class=\"font-normal\" for=\"FeatureName\">Feature Name</label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input matInput\r\n                     placeholder=\"Feature Name*\"\r\n                     autocomplete=\"off\"\r\n                     id=\"featureName\"\r\n                     type=\"text\"\r\n                     formControlName=\"permissionName\"\r\n                     maxlength=\"100\"\r\n                     required>\r\n            </mat-form-field>\r\n          </div>\r\n\r\n          <div class=\"col-span-1\">\r\n            <label class=\"font-normal\" for=\"featureDescription\">Feature Description</label>\r\n            <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n              <input matInput\r\n                     placeholder=\"Feature Description*\"\r\n                     autocomplete=\"off\"\r\n                     id=\"featureDescription\"\r\n                     type=\"text\"\r\n                     formControlName=\"permissionDescription\"\r\n                     maxlength=\"100\"\r\n                     required>\r\n            </mat-form-field>\r\n          </div>\r\n\r\n      </form>\r\n\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n      <button mat-button mat-dialog-close>Cancel</button>\r\n      <drdp-btn *ngIf=\"featureForm.valid\" mat-button [mat-dialog-close]=\"onSubmit()\" [disabled]=\"false\" cdkFocusInitial>Save</drdp-btn>\r\n      <drdp-btn *ngIf=\"!featureForm.valid\" mat-button [disabled]=\"true\" cdkFocusInitial>Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n","import { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core'\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms'\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { IPermission } from '@core/interfaces/ipermission'\r\n\r\n@Component({\r\n  selector: 'drdp-features-add-edit',\r\n  templateUrl: './features-add-edit.component.html',\r\n  styleUrls: ['./features-add-edit.component.scss']\r\n})\r\nexport class FeaturesAddEditComponent implements OnInit {\r\n  @Output() valueChange = new EventEmitter();\r\n  featureForm: FormGroup | any;\r\n  headerName = \"Add New Feature\";\r\n\r\n  get permissionName() { return this.featureForm.get('permissionName') };\r\n  get permissionDescription() { return this.featureForm.get('permissionDescription') };\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<FeaturesAddEditComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any,\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.featureForm = this.fb.group({\r\n      permissionName: [null, Validators.required],\r\n      permissionDescription: [null, Validators.required],\r\n    });\r\n\r\n    if (this.editData) {\r\n      const edit = this.editData.data\r\n      this.headerName = \"Edit Feature\";\r\n      this.permissionName.setValue(edit.permissionName)\r\n      this.permissionDescription.setValue(edit.permissionDescription)\r\n    };\r\n  }\r\n\r\n  onSubmit() {\r\n    let payload: IPermission = this.featureForm.value;\r\n\r\n    if (this.editData) {\r\n      const { id } = this.editData.data;\r\n      payload.id = id;\r\n    }\r\n\r\n    return {\r\n      formValid: true,\r\n      payload: payload\r\n    };\r\n  }\r\n}\r\n","<div class=\"rounded-lg fixActionRow\" id=\"superFeatureDialog\">\r\n    <div class=\"flex justify-between border-b\">\r\n      <h1 class=\"text-[25px] font-bold\">{{ modalTitle }}</h1>\r\n      <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n    \r\n    <div mat-dialog-content>\r\n      <form class=\"grid grid-cols-1 gap-10 py-5 px-2\" [formGroup]=\"featureGroupForm\">\r\n\r\n        <div *ngIf=\"!hasChosenSuperFeature\" class=\"col-span-1\">\r\n        <drdp-add-edit-table [dataSource]=\"uncategorizedDataSource\"\r\n                             [tableData]=\"uncategorizedTableData\"\r\n                             [columns]=\"addUncategorizedSubColumns\"\r\n                             (addActionItem)=\"addSuperFeature($event)\">\r\n        </drdp-add-edit-table>\r\n        </div>\r\n\r\n        <div *ngIf=\"hasChosenSuperFeature\" class=\"col-span-1\">\r\n          <div>\r\n            <h3 class=\"global-font-bold\">Current Sub Features</h3>\r\n            <drdp-add-edit-table [dataSource]=\"newSubDataSource\"\r\n                                 [tableData]=\"newSubTableData\"\r\n                                 [columns]=\"removeUncategorizedSubColumns\"\r\n                                 (deleteActionItem)=\"removeSubFeature($event)\">\r\n            </drdp-add-edit-table>\r\n          </div>\r\n          <div>\r\n            <h3 class=\"global-font-bold\">Add Sub Features</h3>\r\n            <drdp-add-edit-table [dataSource]=\"uncategorizedDataSource\"\r\n                                 [tableData]=\"uncategorizedTableData\"\r\n                                 [columns]=\"addUncategorizedSubColumns\"\r\n                                 (addActionItem)=\"addSubFeature($event)\">\r\n            </drdp-add-edit-table>\r\n          </div>\r\n        </div>\r\n\r\n      </form>\r\n\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex justify-end align-bottom\">\r\n      <button mat-button mat-dialog-close>Cancel</button>\r\n      <drdp-btn *ngIf=\"featureGroupForm.valid\" mat-button [mat-dialog-close]=\"onSubmit()\" [disabled]=\"false\" cdkFocusInitial>Save</drdp-btn>\r\n      <drdp-btn *ngIf=\"!featureGroupForm.valid\" mat-button [disabled]=\"true\" cdkFocusInitial>Save</drdp-btn>\r\n    </div>\r\n  </div>\r\n\r\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core'\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms'\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IPermission, IPermissionGroupAssignmentRequest } from '@core/interfaces/ipermission'\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-super-features-add',\r\n  templateUrl: './super-features-add.component.html',\r\n  styleUrls: ['./super-features-add.component.scss']\r\n})\r\nexport class SuperFeaturesAddComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  featureGroupForm: FormGroup | any;\r\n  modalTitle = 'Add a new Super Feature';\r\n  uncategorizedTableData?: any;\r\n  uncategorizedDataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  newSubTableData: any = [];\r\n  newSubDataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  hasChosenSuperFeature = false;\r\n\r\n  removeUncategorizedSubColumns = [\r\n    { columnDef: 'permissionName', header: 'Name', type: 'text' },\r\n    { columnDef: 'permissionDescription', header: 'Description', type: 'text' },\r\n    { columnDef: 'delete', header: 'Delete', type: 'delete' },\r\n  ];\r\n\r\n  addUncategorizedSubColumns = [\r\n    { columnDef: 'permissionName', header: 'Name', type: 'text' },\r\n    { columnDef: 'permissionDescription', header: 'Description', type: 'text' },\r\n    { columnDef: 'add', header: 'Add', type: 'add' },\r\n  ];\r\n\r\n  get superPermissionId() { return this.featureGroupForm.get('superPermissionId') };\r\n  get subPermissionIds() { return this.featureGroupForm.get('subPermissionIds') };\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private permissionService: PermissionService,\r\n    public dialogRef: MatDialogRef<SuperFeaturesAddComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForms();\r\n    this.getUncategorizedFeatures();\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.featureGroupForm = this.fb.group({\r\n      superPermissionId: [null, Validators.required],\r\n      subPermissionIds: [[]]\r\n    });\r\n  }\r\n\r\n  initializeNewSubTableData(newSubFeatures?: IPermission[]): void {\r\n    if (newSubFeatures) {\r\n      this.newSubDataSource = new MatTableDataSource(newSubFeatures);\r\n      this.table?.reRender(newSubFeatures);\r\n    }\r\n  }\r\n\r\n  initializeUncategorizedSubTableData(uncategorizedFeatures?: IPermission[]): void {\r\n    if (uncategorizedFeatures) {\r\n      this.uncategorizedDataSource = new MatTableDataSource(uncategorizedFeatures);\r\n      this.table?.reRender(uncategorizedFeatures);\r\n    }\r\n  }\r\n\r\n  getUncategorizedFeatures(): void {\r\n    this.permissionService.getUncategorizedPermission().pipe(\r\n      take(1),\r\n      tap((permissions: IPermission[]) => {\r\n        this.uncategorizedTableData = permissions;\r\n        this.uncategorizedDataSource = new MatTableDataSource(this.uncategorizedTableData);\r\n        this.table?.reRender();\r\n      })\r\n    ).subscribe();\r\n\r\n  }\r\n\r\n  addSuperFeature(event: any): void {\r\n    const {data, index} = event;\r\n    this.superPermissionId.setValue(data.id);\r\n    this.uncategorizedTableData?.splice(index, 1);\r\n    this.modalTitle = data.permissionName;\r\n    this.hasChosenSuperFeature = true;\r\n  }\r\n\r\n  addSubFeature(event: any): void {\r\n    const {data, index} = event;\r\n    this.newSubTableData.push(data);\r\n    this.subPermissionIds.setValue(this.newSubTableData.map((permission: IPermission) => permission.id));\r\n    this.uncategorizedTableData?.splice(index, 1);\r\n    this.sortTableData();\r\n    this.initializeNewSubTableData(this.newSubTableData);\r\n    this.initializeUncategorizedSubTableData(this.uncategorizedTableData);\r\n  }\r\n\r\n  removeSubFeature(event: any): void {\r\n    const {data, index} = event;\r\n    this.uncategorizedTableData.push(data);\r\n    this.newSubTableData?.splice(index, 1);\r\n    this.subPermissionIds.setValue(this.newSubTableData.map((permission: IPermission) => permission.id));\r\n    this.sortTableData();\r\n    this.initializeNewSubTableData(this.newSubTableData);\r\n    this.initializeUncategorizedSubTableData(this.uncategorizedTableData);\r\n  }\r\n\r\n  sortTableData(): void {\r\n    this.uncategorizedTableData = this.uncategorizedTableData?.sort((a: IPermission, b: IPermission) => a.permissionName.localeCompare(b.permissionName));\r\n    this.newSubTableData = this.newSubTableData?.sort((a: IPermission, b: IPermission) => a.permissionName.localeCompare(b.permissionName));\r\n  }\r\n\r\n  onSubmit() {\r\n    let payload: IPermissionGroupAssignmentRequest = this.featureGroupForm.value;\r\n    return {\r\n      formValid: true,\r\n      payload: payload\r\n    };\r\n  }\r\n}\r\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport {\r\n  IPermission,\r\n  IPermissionGroupAssignment,\r\n  IPermissionGroupAssignmentRequest,\r\n} from '@core/interfaces/ipermission';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-super-features-edit',\r\n  templateUrl: './super-features-edit.component.html',\r\n  styleUrls: ['./super-features-edit.component.scss'],\r\n})\r\nexport class SuperFeaturesEditComponent implements OnInit {\r\n  @ViewChild('currentSub') currentSub?: AddEditComponent;\r\n  @ViewChild('addSub') addSub?: AddEditComponent;\r\n  currentSubTableData?: any = [];\r\n  currentSubDataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  addSubTableData?: any = [];\r\n  addSubDataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n\r\n  currentSubColumns = [\r\n    { columnDef: 'permissionName', header: 'Name', type: 'text' },\r\n    { columnDef: 'permissionDescription', header: 'Description', type: 'text' },\r\n    { columnDef: 'delete', header: 'Delete', type: 'delete' },\r\n  ];\r\n\r\n  addSubColumns = [\r\n    { columnDef: 'permissionName', header: 'Name', type: 'text' },\r\n    { columnDef: 'permissionDescription', header: 'Description', type: 'text' },\r\n    { columnDef: 'add', header: 'Add', type: 'add' },\r\n  ];\r\n  constructor(\r\n    private permissionService: PermissionService,\r\n    public dialogRef: MatDialogRef<SuperFeaturesEditComponent>,\r\n    private toastService: ToastService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.getUncategorizedFeatures();\r\n    this.getCurentFeatures();\r\n  }\r\n\r\n  getUncategorizedFeatures(): void {\r\n    this.permissionService\r\n      .getUncategorizedPermission()\r\n      .pipe(\r\n        take(1),\r\n        tap((permissions: IPermission[]) => {\r\n          this.addSubTableData = permissions;\r\n        }),\r\n        tap((_) => this.initializeAddSubTableData(this.addSubTableData))\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  getCurentFeatures(): void {\r\n    this.permissionService.getCurrentPermission(this.editData.groupId).pipe(\r\n      take(1),\r\n      tap((permissions: IPermission[]) => {this.currentSubTableData = permissions}),\r\n      tap(_ => this.initializeCurrentSubTableData(this.currentSubTableData))\r\n    ).subscribe();\r\n  }\r\n\r\n  initializeCurrentSubTableData(currentSub?: IPermission[]): void {\r\n    if (currentSub) {\r\n      this.currentSubDataSource = new MatTableDataSource(currentSub);\r\n      this.currentSub?.reRender(currentSub);\r\n    }\r\n  }\r\n\r\n  initializeAddSubTableData(addSub?: IPermission[]): void {\r\n    if (addSub) {\r\n      this.addSubDataSource = new MatTableDataSource(addSub);\r\n      this.addSub?.reRender(addSub);\r\n    }\r\n  }\r\n\r\n  addPermission(permission: any): void {\r\n    const { data } = permission;\r\n    const payload: IPermissionGroupAssignmentRequest = {\r\n      superPermissionId: this.editData.groupId,\r\n      subPermissionIds: [data.id],\r\n    };\r\n\r\n    this.permissionService\r\n      .addPermissionGroupAssignment(payload)\r\n      .pipe(\r\n        take(1),\r\n        tap(() => {\r\n          this.currentSubTableData?.push(permission.data);\r\n          this.addSubTableData?.splice(permission.index, 1);\r\n          this.initializeCurrentSubTableData(this.currentSubTableData);\r\n          this.initializeAddSubTableData(this.addSubTableData);\r\n        }),\r\n        tap(() => this.toastService.success('Sub Feature Added'))\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  deletePermission(permission: any): void {\r\n    const { data } = permission;\r\n    const payload: IPermissionGroupAssignment = {\r\n      superPermissionId: this.editData.groupId,\r\n      subPermissionId: data.id,\r\n    };\r\n\r\n    this.permissionService\r\n      .updatePermissionGroupAssignment(payload)\r\n      .pipe(\r\n        take(1),\r\n        tap(() => {\r\n          this.currentSubTableData?.splice(permission.index, 1);\r\n          this.addSubTableData?.push(permission.data);\r\n          this.initializeCurrentSubTableData(this.currentSubTableData);\r\n          this.initializeAddSubTableData(this.addSubTableData);\r\n        }),\r\n        tap(() => this.toastService.warn('Sub Feature Removed'))\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  closeModal(): IPermission[] | any {\r\n    if (this.currentSubTableData) {\r\n      return this.currentSubTableData;\r\n    }\r\n  }\r\n}\r\n","<div class=\"rounded-lg fixActionRow\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Manage Sub Features</h1>\r\n    <i mat-button [mat-dialog-close]=\"closeModal()\" class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <div class=\"content\">\r\n      <div class=\"p-5 w-full mb-6\">\r\n        <h3 class=\"global-font-bold\">Current Sub Features</h3>\r\n        <drdp-add-edit-table #currentSub\r\n                             [dataSource]=\"currentSubDataSource\"\r\n                             [tableData]=\"currentSubTableData\"\r\n                             [columns]=\"currentSubColumns\"\r\n                             (deleteActionItem)=\"deletePermission($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n      <div class=\"p-5 w-full mb-6\">\r\n        <h3 class=\"global-font-bold\">Add Sub Features</h3>\r\n        <drdp-add-edit-table #addSub\r\n                             [dataSource]=\"addSubDataSource\"\r\n                             [tableData]=\"addSubTableData\"\r\n                             [columns]=\"addSubColumns\"\r\n                             (addActionItem)=\"addPermission($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","<div class=\"sm:container sm:mx-auto\">\r\n  <div class=\"flex flex-row-reverse\">\r\n    <drdp-btn\r\n      *ngIf=\"activeTab === FeatureTable.Feature\"\r\n      (click)=\"featureAction()\"\r\n    >\r\n      <i class=\"uil uil-plus\"></i>\r\n      Add New Feature\r\n    </drdp-btn>\r\n    <drdp-btn\r\n      *ngIf=\"activeTab === FeatureTable.FeatureHierarchy\"\r\n      (click)=\"addSuperFeature()\"\r\n    >\r\n      <i class=\"uil uil-plus\"></i>\r\n      Create New Super Feature\r\n    </drdp-btn>\r\n  </div>\r\n  <ul\r\n    class=\"flex list-none flex-wrap pb-2 flex-row text-md font-medium text-gray-700\"\r\n  >\r\n    <li class=\"-mb-px mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\">\r\n      <a\r\n        class=\"px-5 py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n        (click)=\"toggleTabs(FeatureTable.Feature)\"\r\n        [ngClass]=\"{\r\n          'text-white': activeTab !== FeatureTable.Feature,\r\n          'text-white bg-drdpblue-300': activeTab === FeatureTable.Feature\r\n        }\"\r\n      >\r\n        Features\r\n      </a>\r\n    </li>\r\n    <li class=\"-mb-px mr-2 last:mr-0 text-center rounded-t-lg cursor-pointer\">\r\n      <a\r\n        class=\"px-5 py-3 rounded-t-lg leading-normal cursor-pointer\"\r\n        (click)=\"toggleTabs(FeatureTable.FeatureHierarchy)\"\r\n        [ngClass]=\"{\r\n          'text-white': activeTab !== FeatureTable.FeatureHierarchy,\r\n          'text-white bg-drdpblue-300':\r\n            activeTab === FeatureTable.FeatureHierarchy\r\n        }\"\r\n      >\r\n        Feature Hierarchy\r\n      </a>\r\n    </li>\r\n  </ul>\r\n  <drdp-container>\r\n    <div class=\"w-full\">\r\n      <drdp-add-edit-table\r\n        [dataSource]=\"dataSource\"\r\n        [tableData]=\"\r\n          activeTab == FeatureTable.Feature\r\n            ? featureTableData\r\n            : supFeatureTableData\r\n        \"\r\n        [columns]=\"\r\n          activeTab == FeatureTable.Feature\r\n            ? featureTableColumns\r\n            : subFeatureTableColumns\r\n        \"\r\n        (editActionItem)=\"\r\n          activeTab == FeatureTable.Feature\r\n            ? featureAction($event)\r\n            : editSupFeatures($event)\r\n        \"\r\n        (deleteActionItem)=\"\r\n          activeTab == FeatureTable.Feature\r\n            ? deleteFeature($event)\r\n            : deleteSupFeature($event)\r\n        \"\r\n      >\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Modal } from '@core/enums/modal';\r\nimport { FeatureTable } from '@core/enums/table';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { IPermission, IPermissionGroupAssignment, IPermissionGroupAssignmentRes } from '@core/interfaces/ipermission';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { switchMap, take, tap } from 'rxjs';\r\nimport { ConfirmationModalComponent } from '../../../../../shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { AddEditComponent } from '../../../../../shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { FeaturesAddEditComponent } from '../features-add-edit/features-add-edit.component';\r\nimport { SuperFeaturesAddComponent } from '../super-features-add/super-features-add.component';\r\nimport { SuperFeaturesEditComponent } from '../super-features-edit/super-features-edit.component';\r\n\r\n@Component({\r\n  selector: 'drdp-features-tabs',\r\n  templateUrl: './features-tabs.component.html',\r\n  styleUrls: ['./features-tabs.component.scss'],\r\n})\r\nexport class FeaturesTabsComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  featureTableData?: IPermission[];\r\n  supFeatureTableData: any = [];\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  uncategorized?: IPermission[];\r\n  activeTab?: number;\r\n  public get FeatureTable() {\r\n    return FeatureTable;\r\n  }\r\n\r\n  featureTableColumns = [\r\n    { columnDef: 'permissionName', header: 'Name', type: 'text', isSortable: true },\r\n    { columnDef: 'permissionDescription', header: 'Description', type: 'text' },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n    { columnDef: 'delete', header: 'Delete', type: 'delete' }\r\n  ];\r\n\r\n  subFeatureTableColumns = [\r\n    { columnDef: 'groupName', header: 'Super Feature', type: 'text' },\r\n    { columnDef: 'featureList', header: 'Sub Feature', type: 'bulletList' },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n    { columnDef: 'delete', header: 'Delete', type: 'delete' }\r\n  ];\r\n\r\n  constructor(\r\n    private permissionService: PermissionService,\r\n    private toastService: ToastService,\r\n    public modal: MatDialog\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.toggleTabs(FeatureTable.Feature);\r\n  }\r\n\r\n  getFeatureList(): void {\r\n    this.permissionService.getPermission().subscribe((res: IPermission[]) => {\r\n      this.featureTableData = res.sort((a, b) =>\r\n        a.permissionName > b.permissionName ? 1 : -1\r\n      );\r\n\r\n      this.initializeTableData(this.featureTableData);\r\n    });\r\n  }\r\n\r\n  getFeatureGroup(): void {\r\n    this.permissionService\r\n      .getSuperPermissionGroups()\r\n      .pipe(\r\n        take(1),\r\n        tap((res) => {\r\n          this.supFeatureTableData = [];\r\n          res.forEach((group: IPermissionGroupAssignmentRes) => {\r\n            this.filterFeatures(group);\r\n          });\r\n        }),\r\n        tap(() => {\r\n          this.initializeTableData(this.supFeatureTableData);\r\n        })\r\n      ).subscribe();\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res);\r\n  }\r\n\r\n  featureAction(editData?: IModalEmitData): void {\r\n    const modalRef = this.modal.open(FeaturesAddEditComponent, {\r\n      data: editData ? editData : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((result) => {\r\n      if (!editData && result.formValid) {\r\n        this.addFeature(result);\r\n      }\r\n\r\n      if (editData && result.formValid) {\r\n        this.updateFeature(result, editData.index);\r\n      }\r\n    });\r\n  }\r\n\r\n  editSupFeatures(editData?: IModalEmitData): void {\r\n    const superFeatureModalData = {\r\n      nonGroupFeatures: this.uncategorized,\r\n      groupId: editData?.data.groupId,\r\n    };\r\n\r\n    const modalRef = this.modal.open(SuperFeaturesEditComponent, {\r\n      data: superFeatureModalData ? superFeatureModalData : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((result) => {\r\n      if (editData) {\r\n        let data = {\r\n          groupId: editData.data.groupId,\r\n          groupName: editData.data.groupName,\r\n          featureList: result?.map(\r\n            (x: { permissionName: any }) => x.permissionName\r\n          ),\r\n        };\r\n\r\n        this.supFeatureTableData[editData.index] = data;\r\n        this.initializeTableData(this.supFeatureTableData);\r\n      }\r\n    });\r\n  }\r\n\r\n  addFeature(featuresService: any): void {\r\n    this.permissionService\r\n      .addPermission(featuresService.payload, 'Feature Added')\r\n      .pipe(\r\n        switchMap((_) =>\r\n          this.permissionService.getPermission().pipe(\r\n            tap((permissions) => {\r\n              this.featureTableData = permissions;\r\n              this.initializeTableData(this.featureTableData);\r\n            })\r\n          )\r\n        )\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  addSuperFeature(): void {\r\n    const modalRef = this.modal.open(SuperFeaturesAddComponent);\r\n\r\n    modalRef.afterClosed().subscribe((result) => {\r\n      if (result.formValid) {\r\n        this.permissionService.addPermissionGroupAssignment(result.payload, 'Super Feature Added')\r\n        .pipe(\r\n          take(1),\r\n          tap((res: boolean) => {\r\n            if (res) this.getFeatureGroup();\r\n            else this.toastService.warn('Must add sub-features.')\r\n          })\r\n        ).subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  updateFeature(feature: any, index: number): void {\r\n    this.permissionService\r\n      .updatePermission(feature.payload, 'Updated Feature')\r\n      .subscribe((res: boolean) => {\r\n        if (res && this.featureTableData) {\r\n          this.featureTableData[index] = feature.payload;\r\n          this.table?.reRender(this.featureTableData);\r\n        }\r\n      });\r\n  }\r\n\r\n  deleteFeature(event: IModalEmitData): void {\r\n    event.data.modalInfo = {\r\n      title: `Delete ${event.data.permissionName}`,\r\n      message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.permissionName}</span>?`,\r\n      name: event.data.permissionName,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: Modal.Delete\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        this.permissionService\r\n          .deletePermission(event.data.id, 'Feature Removed')\r\n          .pipe(\r\n            tap((res) => {\r\n              this.featureTableData?.splice(event.index, 1);\r\n              this.initializeTableData(this.featureTableData);\r\n            })\r\n          )\r\n          .subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  deleteSupFeature(event: IModalEmitData): void {\r\n    event.data.modalInfo = {\r\n      title: `Delete ${event.data.groupName}`,\r\n      message: `Are you sure you want to want to delete <span class=\"font-bold\">${event.data.groupName}</span>?`,\r\n      name: event.data.groupName,\r\n      primaryBtnClass: 'red',\r\n      primaryBtnText: Modal.Delete,\r\n      showCancel: true\r\n    };\r\n\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, {\r\n      data: event ? event : undefined,\r\n    });\r\n\r\n    modalRef.afterClosed().subscribe((res) => {\r\n      if (res) {\r\n        const {data} = event;\r\n        const payload: IPermissionGroupAssignment = {\r\n          superPermissionId: data.groupId\r\n        };\r\n\r\n        this.permissionService\r\n          .deletePermissionGroupAssignment(payload, 'Super Feature Removed')\r\n          .pipe(\r\n            tap(() => {\r\n              this.supFeatureTableData?.splice(event.index, 1);\r\n              this.initializeTableData(this.supFeatureTableData);\r\n            })\r\n          )\r\n          .subscribe();\r\n      }\r\n    });\r\n  }\r\n\r\n  filterFeatures(permissionGroup: IPermissionGroupAssignmentRes): void {\r\n    let tableData = {\r\n      groupId: permissionGroup.superPermission.id,\r\n      groupName: permissionGroup.superPermission.permissionName,\r\n      featureList: permissionGroup.subPermissions?.map((x) => x.permissionName),\r\n    };\r\n    this.supFeatureTableData.push(tableData);\r\n  }\r\n\r\n  toggleTabs(tab: number) {\r\n    this.activeTab = tab;\r\n    if (this.activeTab === FeatureTable.Feature) {\r\n      this.getFeatureList();\r\n    } else if (this.activeTab === FeatureTable.FeatureHierarchy) {\r\n      this.getFeatureGroup();\r\n    }\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'drdp-features',\r\n  templateUrl: './features.component.html',\r\n  styleUrls: ['./features.component.scss'],\r\n})\r\nexport class FeaturesComponent implements OnInit {\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <drdp-title title=\"Features\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex flex-wrap\">\r\n    <div class=\"w-full mt-5\">\r\n      <!-- Features and Feature Hierarchy Tab -->\r\n      <drdp-features-tabs></drdp-features-tabs>\r\n    </div>\r\n  </div>\r\n</div>\r\n","<div class=\"rounded-xl max-w-full max-h-min\">\r\n  <div class=\"flex justify-between\">\r\n    <h2 mat-dialog-title>Filter Roles</h2>\r\n    <i mat-button \r\n       [mat-dialog-close]=\"closeModal()\"\r\n       class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n  <mat-dialog-content>\r\n    <ul>\r\n      <li class=\"text-sm appearance-none\" (click)=\"toggleRoles(true)\"><p class=\"cursor-pointer\" type=\"button\">Show All Roles</p></li>\r\n      <li class=\"text-sm appearance-none\" (click)=\"toggleRoles(false)\"><p class=\"cursor-pointer\" type=\"button\">Hide All Roles</p></li>\r\n      <hr>\r\n      <div *ngFor=\"let role of originalRolesList\">\r\n        <li>\r\n          <span class=\"text-sm\">\r\n            <i class=\"text-lg text-drdpblue-300 cursor-pointer\" \r\n               [ngClass]=\"roleSet.has(role.id) ? 'uil uil-eye' : 'uil uil-eye-slash'\" \r\n               (click)=\"updateRoleSet(role.id)\"></i>\r\n            {{role.roleName}}\r\n            <i class=\"text-lg uil uil-info-circle cursor-pointer\"></i>\r\n          </span>\r\n        </li>\r\n      </div>\r\n    </ul>\r\n  </mat-dialog-content>\r\n</div>\r\n","import { Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { RoleService } from '@core/services/role.service';\r\n\r\n@Component({\r\n  selector: 'drdp-permissions-filter',\r\n  templateUrl: './permissions-filter.component.html',\r\n  styleUrls: ['./permissions-filter.component.scss']\r\n})\r\nexport class PermissionsFilterComponent implements OnInit {\r\n  originalRolesList?: IRoles[];\r\n  roleSet = new Set();\r\n\r\n  constructor(@Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n  ngOnInit(): void {\r\n    this.buildRoleSet();\r\n  }\r\n\r\n  buildRoleSet(): void {\r\n    const roleIds = this.data.roleId;\r\n    this.originalRolesList = this.data.orignalRolesList;\r\n\r\n    if (!roleIds.length && this.originalRolesList) {\r\n      for(let role of this.originalRolesList) {\r\n        this.roleSet.add(role.id);\r\n      }\r\n    } else {\r\n      for(let id of roleIds) {\r\n        this.roleSet.add(id);\r\n      }\r\n    }\r\n  }\r\n\r\n  toggleRoles(showAll: boolean): void {\r\n    if (showAll && this.originalRolesList) {\r\n      for(let role of this.originalRolesList) {\r\n        this.roleSet.add(role.id);\r\n      }\r\n    } else {\r\n      this.roleSet.clear();\r\n    }\r\n  }\r\n\r\n  updateRoleSet(id: number): void {\r\n   if (this.roleSet.has(id)) {\r\n    this.roleSet.delete(id);\r\n   } else {\r\n    this.roleSet.add(id);\r\n   }\r\n  }\r\n\r\n  closeModal(): any {\r\n    return [...this.roleSet];\r\n  }\r\n\r\n}\r\n","<div class=\" rounded-3xl bg-white p-3 drop-shadow-md\">\r\n  <div *ngIf=\"!isUncategorized\">\r\n    <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"changeShow()\">\r\n      <div class=\" pl-1.5\">\r\n        <p class=\"text-lg font-semibold\">{{group?.superPermission?.permissionName}}</p>\r\n      </div>\r\n\r\n      <i [ngClass]=\"{'uil uil-angle-down text-xl': !show,\r\n                     'uil uil-angle-right text-xl': show}\"></i>\r\n    </div>\r\n\r\n    <div *ngIf=\"show\" class=\"flex flex-col\">\r\n      <div *ngIf=\"!group?.subPermissions?.length\">\r\n        <p class=\" text-center\">No Permissions Available</p>\r\n      </div>\r\n\r\n      <div *ngIf=\"group?.subPermissions?.length\"\r\n        class=\"overflow-x-auto w-full scrollbar scrollbar-thumb-white scrollbar-track-gray-100 py-4\">\r\n        <div class=\" relative\">\r\n\r\n          <table class=\"table-fixed whitespace-nowrap\">\r\n            <!-- Table Headers -->\r\n            <thead class=\"sticky top-0\">\r\n              <tr>\r\n                <th scope=\"col\" class=\" sticky bg-white left-0 p-4\"></th>\r\n                <th scope=\"col\"\r\n                  class=\"py-3 px-6 text-xs font-medium tracking-wider text-left text-black bg-white divide-x\"\r\n                  *ngFor=\"let role of roles\">\r\n                  {{role.roleName}}\r\n                </th>\r\n              </tr>\r\n            </thead>\r\n\r\n            <tbody>\r\n              <!-- Build rows for each permission in specific group -->\r\n              <tr *ngFor=\"let permission of group?.subPermissions\">\r\n                <td class=\"sticky left-0 bg-white py-4 px-6 text-sm font-medium text-gray-900 whitespace-nowrap\">\r\n                  {{permission.permissionName}}\r\n                </td>\r\n\r\n                <!-- Build columns for row, for each user role -->\r\n                <td *ngFor=\"let role of roles\"\r\n                  class=\"py-4 px-6 text-sm font-medium whitespace-nowrap bg-white border-r border-slate-200 text-center\">\r\n\r\n                  <input type=\"checkbox\"\r\n                    class=\"text-blue-600 focus:ring-blue-500 dark:focus:ring-blue-600 text-sm cursor-pointer\"\r\n                    [checked]=\"checkAssignment(permission.id, role.id)\"\r\n                    (click)=\"emitPermissionAssignment(permission.id, role.id)\">\r\n                </td>\r\n              </tr>\r\n            </tbody>\r\n          </table>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <div *ngIf=\"isUncategorized\">\r\n    <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"changeShow()\">\r\n      <div class=\" pl-1.5\">\r\n        <p class=\"text-lg font-semibold\">Non Categorized Features</p>\r\n      </div>\r\n\r\n      <i [ngClass]=\"{'uil uil-angle-down text-xl': !show,\r\n                       'uil uil-angle-right text-xl': show}\"></i>\r\n    </div>\r\n\r\n    <div *ngIf=\"show\" class=\"flex flex-col\">\r\n      <div *ngIf=\"!uncategorizedList?.length\">\r\n        <p class=\" text-center\">No Permissions Available</p>\r\n      </div>\r\n\r\n      <div class=\"overflow-x-auto w-full scrollbar scrollbar-thumb-white scrollbar-track-gray-100 py-4\">\r\n        <div class=\" relative\">\r\n\r\n          <table class=\"table-fixed whitespace-nowrap\">\r\n            <!-- Table Headers -->\r\n            <thead class=\"sticky top-0\">\r\n              <tr>\r\n                <th scope=\"col\" class=\" sticky bg-white left-0 p-4\"></th>\r\n                <th scope=\"col\"\r\n                  class=\"py-3 px-6 text-xs font-medium tracking-wider text-left text-black bg-white divide-x\"\r\n                  *ngFor=\"let role of roles\">\r\n                  {{role.roleName}}\r\n                </th>\r\n              </tr>\r\n            </thead>\r\n\r\n            <tbody>\r\n              <!-- Build rows for each permission in specific group -->\r\n              <tr *ngFor=\"let permission of uncategorizedList\">\r\n                <td class=\"sticky left-0 bg-white py-4 px-6 text-sm font-medium text-gray-900 whitespace-nowrap\">\r\n                  {{permission.permissionName}}\r\n                </td>\r\n\r\n                <!-- Build columns for row, for each user role -->\r\n                <td *ngFor=\"let role of roles\"\r\n                  class=\"py-4 px-6 text-sm font-medium whitespace-nowrap bg-white border-r border-slate-200 text-center\">\r\n\r\n                  <input type=\"checkbox\"\r\n                    class=\"text-blue-600 focus:ring-blue-500 dark:focus:ring-blue-600 text-sm cursor-pointer\"\r\n                    [checked]=\"checkAssignment(permission.id, role.id)\"\r\n                    (click)=\"emitPermissionAssignment(permission.id, role.id)\">\r\n                </td>\r\n              </tr>\r\n            </tbody>\r\n          </table>\r\n\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n  IPermission,\r\n  IPermissionAssignment,\r\n  IPermissionGroupAssignmentRes,\r\n} from '@core/interfaces/ipermission';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\n\r\n@Component({\r\n  selector: 'drdp-permissions-management',\r\n  templateUrl: './permissions-management.component.html',\r\n  styleUrls: ['./permissions-management.component.scss'],\r\n})\r\nexport class PermissionsManagmentComponent implements OnInit {\r\n  @Output() permissionAssignment = new EventEmitter<IPermissionAssignment>();\r\n  @Input() assignmentList?: IPermissionAssignment[];\r\n  @Input() group?: IPermissionGroupAssignmentRes;\r\n  @Input() roles?: IRoles[] | null;\r\n  @Input() isUncategorized = false;\r\n  @Input() uncategorizedList?:  IPermission[];\r\n  show = false;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  checkAssignment(permissionId: number, roleId: number): boolean {\r\n    const assignment = this.assignmentList?.find(\r\n      (x) => x.permissionId === permissionId && x.roleId === roleId\r\n    );\r\n\r\n    return !!assignment;\r\n  }\r\n\r\n  emitPermissionAssignment(permissionId: number, roleId: number): void {\r\n    let assignment = this.assignmentList?.find(\r\n      (x) => x.permissionId === permissionId && x.roleId === roleId\r\n    );\r\n\r\n    if (assignment) {\r\n      assignment.isDeleted = !assignment.isDeleted;\r\n      this.permissionAssignment.emit(assignment);\r\n    } else {\r\n      let newAssignment: IPermissionAssignment = {\r\n        id: 0,\r\n        roleId: roleId,\r\n        permissionId: permissionId,\r\n        isDeleted: false,\r\n      };\r\n      this.permissionAssignment.emit(newAssignment);\r\n    }\r\n  }\r\n\r\n  changeShow() {\r\n    this.show = !this.show;\r\n  }\r\n}\r\n","<div class=\"p-5 min-h-screen\">\r\n  <div class=\"flex justify-between\">\r\n    <drdp-title title=\"Permissions\"></drdp-title>\r\n    <span class=\"align-bottom\">\r\n      <drdp-btn class=\" pr-2\" [color]=\"'outline'\" (click)=\"openFilterDialog()\">\r\n        Filter Roles\r\n      </drdp-btn>\r\n      <drdp-btn [color]=\"'outline'\" (click)=\"downloadRoleReport()\">Export</drdp-btn>\r\n    </span>\r\n  </div>\r\n\r\n  <div *ngFor=\"let group of permissionGroup$ | async\" class=\" pb-6\">\r\n    <drdp-permissions-management [group]=\"group\" [roles]=\"roles\" (permissionAssignment)=\"updatePermission($event)\"\r\n      [assignmentList]=\"assignmentList\">\r\n    </drdp-permissions-management>\r\n  </div>\r\n  <drdp-permissions-management [isUncategorized]=\"true\" [uncategorizedList]=\"uncategorizedList\" [roles]=\"roles\" (permissionAssignment)=\"updatePermission($event)\"\r\n      [assignmentList]=\"assignmentList\">\r\n  </drdp-permissions-management>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { PermissionsFilterComponent } from './permissions-filter/permissions-filter.component';\r\nimport {\r\n  IPermission,\r\n  IPermissionAssignment,\r\n  IPermissionGroupAssignmentRes,\r\n} from '@core/interfaces/ipermission';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Observable, take } from 'rxjs';\r\n@Component({\r\n  selector: 'drdp-permissions',\r\n  templateUrl: './permissions.component.html',\r\n  styleUrls: ['./permissions.component.scss'],\r\n})\r\nexport class PermissionsComponent implements OnInit {\r\n  show = false;\r\n  originalRolesList?: IRoles[];\r\n  roles?: IRoles[];\r\n  roleIds: number[] = [];\r\n  permissionGroup$?: Observable<IPermissionGroupAssignmentRes[]>;\r\n  roles$?: Observable<IRoles[]>;\r\n  assignmentList?: IPermissionAssignment[];\r\n  uncategorizedList?: IPermission[];\r\n  constructor(\r\n    private permissionService: PermissionService,\r\n    private RoleService: RoleService,\r\n    public dialog: MatDialog,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.getPermissionGroup();\r\n    this.getPermissionAssignment();\r\n    this.getAllRoles();\r\n    this.getUncategorized();\r\n  }\r\n\r\n  getPermissionGroup(): void {\r\n    this.permissionGroup$ = this.permissionService.getSuperPermissionGroups();\r\n  }\r\n\r\n  getPermissionAssignment(): void {\r\n    this.permissionService\r\n      .getPermissionAssignments()\r\n      .subscribe((res: IPermissionAssignment[]) => {\r\n        this.assignmentList = res;\r\n      });\r\n  }\r\n\r\n  getAllRoles(): void {\r\n    this.RoleService.getAllByOrder().subscribe((res: IRoles[]) => {\r\n      this.originalRolesList = res;\r\n      this.roles = res;\r\n    });\r\n  }\r\n\r\n  getUncategorized(): void {\r\n    this.permissionService.getUncategorizedPermission().pipe(\r\n      take(1)\r\n    ).subscribe((res: IPermission[]) => {\r\n      this.uncategorizedList = res;\r\n    });\r\n  }\r\n\r\n  openFilterDialog(): void {\r\n    const dialogRef = this.dialog.open(PermissionsFilterComponent, {\r\n      data: { orignalRolesList: this.originalRolesList, roleId: this.roleIds },\r\n      disableClose: true,\r\n    });\r\n\r\n    dialogRef.afterClosed().subscribe((ids) => {\r\n      if (ids) {\r\n        this.roleIds = ids;\r\n        this.filterRoles(this.roleIds);\r\n      }\r\n    });\r\n  }\r\n\r\n  filterRoles(roleIds: number[]): void {\r\n    this.RoleService.filterRoles(roleIds).subscribe((res: IRoles[]) => {\r\n      this.roles = res;\r\n    });\r\n  }\r\n\r\n  updatePermission(permissionAssignment: any): void {\r\n    this.permissionService\r\n      .updatePermissionAssignment(permissionAssignment, 'Permission Updated')\r\n      .pipe(take(1))\r\n      .subscribe((req) => {\r\n        this.toast.info('Please log out to apply permission changes');\r\n        this.getPermissionAssignment();\r\n      });\r\n  }\r\n\r\n  downloadRoleReport(): void {\r\n    if (!this.roles?.length) {\r\n      return this.toast.warn('No Roles Selected');\r\n    }\r\n\r\n    this.RoleService.downloadRolesReport(this.roles).subscribe((res: any) => {\r\n      const a = document.createElement('a');\r\n      a.href = URL.createObjectURL(res.body);\r\n      a.setAttribute('download', 'Roles.xlsx');\r\n      a.click();\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\nimport { Observable} from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\n\r\nexport class LoginAuditService {\r\n  constructor(private dataService: DataService){}\r\n\r\n  search(request: any, message?: string): Observable<any> {\r\n    return this.dataService.post('auth/audit', request, message);\r\n  }\r\n\r\n  downloadFile(payload:any, message?: string): Observable<any> {\r\n    return this.dataService.postWithOptions('auth/search/download', payload, {\r\n      observe: 'response',\r\n      responseType: 'blob',\r\n      headers: {\r\n        Accept: 'text/csv',\r\n      }\r\n    })\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"mb-5 mr-3\">\r\n    <drdp-title title=\"Login Audits\"></drdp-title>\r\n  </div>\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <drdp-container color=\"lightBlue\" additionClasses=\"min-h-[7rem] w-full\">\r\n      <form [formGroup]=\"searchForm\"\r\n        class=\"flex grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 p-3 gap-2 md:gap-2 flex-row content-center my-auto justify-center\">\r\n\r\n        <div class=\"col-span-full md:col-span-1\">\r\n          <mat-form-field appearance=\"fill\">\r\n            <label class=\"global-font-bold required\" for=\"StartDate\">Start Date</label>\r\n            <input matInput autocomplete=\"off\" name=\"minDatePicker\" [matDatepicker]=\"minPicker\"\r\n              formControlName=\"fromDate\" aria-label=\"Start Date\" (dateChange)=\"resetEndDate()\" placeholder=\"mm/dd/yyyy\">\r\n            <mat-datepicker-toggle matSuffix [for]=\"minPicker\"></mat-datepicker-toggle>\r\n            <mat-datepicker #minPicker></mat-datepicker>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-span-full md:col-span-1\">\r\n          <mat-form-field appearance=\"fill\">\r\n            <label class=\"global-font-bold required\" for=\"EndDate\">End Date</label>\r\n            <input matInput autocomplete=\"off\" name=\"maxDatePicker\" aria-label=\"End Date\" [matDatepicker]=\"maxPicker\"\r\n              formControlName=\"toDate\" placeholder=\"mm/dd/yyyy\">\r\n            <mat-datepicker-toggle matSuffix [for]=\"maxPicker\"></mat-datepicker-toggle>\r\n            <mat-datepicker #maxPicker></mat-datepicker>\r\n            <mat-error *ngIf=\"searchForm.controls['toDate'].errors?.['invalidDates']\"></mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-span-1\">\r\n          <drdp-select-role label=\"Role\" [initialRolesIds]=\"roleIds?.value\" [multiSelect]=\"true\" [clear]=\"clearDropdown\" (role)=\"handleRoles($event)\" [required]=\"true\">\r\n          </drdp-select-role>\r\n        </div>\r\n\r\n        <div\r\n          class=\"flex lg:flex-row md:flex-wrap lg:col-span-2 justify-evenly xl:justify-evenly lg:justify-center md:content-end lg:content-center mt-3 lg:mt-0 xl:mt-9\">\r\n          <drdp-btn [additionalClasses]=\"'lg:m-2 xl:m-0'\" [disabled]=\"!searchForm.valid\" (click)=\"submitSearch()\">\r\n            <span>Search</span>\r\n          </drdp-btn>\r\n          <drdp-btn color=\"outline\" [additionalClasses]=\"'lg:m-2 xl:m-0'\" (click)=\"download()\"\r\n            [disabled]=\"!searchForm.valid\">\r\n            Download <i class=\"uil uil-download-alt\"></i>\r\n          </drdp-btn>\r\n          <drdp-btn type=\"button\" [additionalClasses]=\"'lg:m-2 xl:m-0'\" color=\"outline\" (click)=\"clear()\">\r\n            Clear\r\n          </drdp-btn>\r\n        </div>\r\n      </form>\r\n      <span\r\n        *ngIf=\"searchForm.controls['toDate'].touched && (searchForm.controls['toDate'].errors?.['invalidDates'] || searchForm.controls['toDate'].errors?.['dateRangeNotWithinOneYear'])\"\r\n        class=\"text-sm text-red-700\">\r\n        Starting date must be before the ending date and must not be farther than a year apart.\r\n      </span>\r\n    </drdp-container>\r\n    <drdp-add-edit-table [dataSource]=\"dataSource\" [noDataMessage]=\"'There are no records to display.'\"\r\n      [tableData]=\"tableData\" [columns]=\"tableColumns\">\r\n    </drdp-add-edit-table>\r\n  </drdp-container>\r\n  <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateAgency()\">\r\n  </mat-paginator>","import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { LoginAuditService } from '@core/services/login-audit.service';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { FormGroup, FormBuilder, Validators, AbstractControlOptions } from '@angular/forms';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { formatDate } from '@angular/common';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-login-audits',\r\n  templateUrl: './login-audits.component.html',\r\n  styleUrls: ['./login-audits.component.scss']\r\n})\r\n\r\nexport class LoginAuditsComponent implements OnInit, AfterViewInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  searchForm!: FormGroup;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageSize: number = 10;\r\n  totalData:number = 0;\r\n  pageIndex: number = 0;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  tableData?: any;\r\n  roles: any;\r\n  itemsPerPage: number = 10;\r\n  clearDropdown = false;\r\n\r\n  tableColumns = [\r\n    { columnDef: 'loginDate', header: 'Login Time', type: 'fullDate', isSortable: true },\r\n    { columnDef: 'logoutDate', header: 'Logout Time', type: 'fullDate', isSortable: true },\r\n    { columnDef: 'userEmail', header: 'Email', type: 'text', isSortable: true },\r\n    { columnDef: 'userFullName', header: 'Name', type: 'text', isSortable: true },\r\n    { columnDef: 'roles', header: 'Roles', type: 'text', isSortable: true },\r\n  ];\r\n\r\n  get fromDate() {return this.searchForm.get('fromDate')};\r\n  get toDate() {return this.searchForm.get('toDate')};\r\n  get roleIds() {return this.searchForm.get('roleIds')};\r\n\r\n  constructor(private service: LoginAuditService, private RoleService: RoleService, private fb: FormBuilder, private toastService: ToastService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getRoleOptions();\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm() {\r\n    this.searchForm = this.fb.group({\r\n      fromDate: [null, Validators.required],\r\n      toDate: [null, Validators.required],\r\n      roleIds: [null, Validators.required],\r\n    }, { validator: [this.dateLessThan('fromDate', 'toDate'), this.dateWithinRange('fromDate', 'toDate')]} as AbstractControlOptions);\r\n  }\r\n\r\n  dateLessThan( fromDate: string, toDate: string) {\r\n    return (group: FormGroup) => {\r\n      let startDate = group.controls[fromDate].value;\r\n      let endDate = group.controls[toDate].value;\r\n      const searchForm = group.controls[toDate];\r\n      if (startDate > endDate) {\r\n        return searchForm.setErrors({invalidDates: true});\r\n      }\r\n      return {}\r\n     }\r\n  }\r\n\r\n  dateWithinRange (fromDate: any, toDate: any) {\r\n    return (group: FormGroup) => {\r\n      let startDate = group.controls[fromDate]?.value;\r\n      let endDate = group.controls[toDate]?.value;\r\n      if (fromDate && toDate) {\r\n        const oneYearInMs = 1000 * 60 * 60 * 24 * 365;\r\n        const timeDiff = Math.abs(endDate?.getTime() - startDate?.getTime());\r\n        const diffInYears = timeDiff / oneYearInMs;\r\n  \r\n        if (diffInYears >= 1.004) {\r\n          return this.toDate?.setErrors({ dateRangeNotWithinOneYear: true });\r\n        }\r\n      }\r\n      return {};\r\n     }\r\n    }\r\n\r\n  ngAfterViewInit() {\r\n      this.dataSource.paginator = this.paginator;\r\n      this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  handleRoles(event: IRoles[]): void {\r\n    if (!event.length) {\r\n      this.roleIds!.setValue(null);\r\n      return;\r\n    }\r\n    this.roleIds!.setValue(event.map((e: any) => e.id));\r\n  }\r\n\r\n  submitSearch() {\r\n    if (this.searchForm.invalid || !this.fromDate?.value && !this.toDate?.value) {\r\n      this.toastService.warn('Invalid search.');\r\n      return;\r\n    }\r\n    this.paginateAgency(true);\r\n  }\r\n\r\n  initializeTableData(res: any): void {\r\n    this.dataSource = new MatTableDataSource(res.data);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.data;\r\n  }\r\n\r\n  paginateAgency(resetPage?: boolean): void {\r\n    const payload = {\r\n      fromDate: formatDate(this.fromDate?.value, 'yyyy/MM/dd', 'en-US'),\r\n      toDate: formatDate(this.toDate?.value, 'yyyy/MM/dd', 'en-US'),\r\n      roleIds: this.roleIds?.value,\r\n      pageIndex: resetPage ? 0 : this.paginator.pageIndex + 1,\r\n      itemsPerPage: this.paginator.pageSize\r\n    }\r\n    this.service.search(payload).subscribe((res: any) => {\r\n      if (res) {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(res);\r\n        if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n      }\r\n    })\r\n  }\r\n\r\n  getRoleOptions() {\r\n    this.RoleService.getAllRoles().subscribe((res:[IRoles])=> {\r\n      this.roles = res?.map((item:IRoles) =>  {\r\n        return { key: item.id, value: item.roleName }\r\n      })\r\n      this.roles.push({key: 0, value: 'ALL'});\r\n    })\r\n  }\r\n\r\n  download(resetPage?: boolean) {\r\n    if (this.searchForm.invalid || !this.fromDate?.value && !this.toDate?.value) {\r\n      this.toastService.warn('Download unavailable.');\r\n      return;\r\n    }\r\n\r\n    const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\n    const payload = {\r\n      fromDate: formatDate(this.fromDate?.value, 'yyyy/MM/dd', 'en-US'),\r\n      toDate: formatDate(this.toDate?.value, 'yyyy/MM/dd', 'en-US'),\r\n      roleIds: this.roleIds?.value,\r\n      timeZoneId: timeZone,\r\n      pageIndex: resetPage ? 0 : this.paginator.pageIndex + 1,\r\n      itemsPerPage: resetPage ? 10 : this.paginator.pageSize\r\n    }\r\n\r\n    this.service.downloadFile(payload).subscribe((res: any) => {\r\n      let a = document.createElement('a');\r\n      a.href = window.URL.createObjectURL(res.body);\r\n      a.setAttribute('download', 'login-audits.csv')\r\n      a.click();\r\n    });\r\n  }\r\n\r\n  clear() {\r\n    const empty: any = [];\r\n    this.initializeTableData(empty);\r\n    this.clearDropdown = true;\r\n    this.searchForm.reset();\r\n    this.rerunSearchFormValidation();\r\n    this.paginator.pageSize = 10;\r\n    this.totalData = 0;\r\n  }\r\n\r\n  resetEndDate() {\r\n    if (this.toDate && this.toDate.value) {\r\n      this.toDate?.setValue(null);\r\n      this.toDate?.setErrors({ dateRangeNotWithinOneYear: true });\r\n    }\r\n  }\r\n\r\n  private rerunSearchFormValidation() {\r\n    Object.values(this.searchForm.controls).forEach(control => {\r\n      control.updateValueAndValidity();\r\n    });\r\n  }\r\n}\r\n","<div class=\"fix-action-row modal-body\">\r\n    <div class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[20px] font-bold\">{{user.firstName + ' ' + user.lastName}}'s Profile</h1>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"grid grid-cols-2 gap-4 gap-x-10 mt-5\">\r\n            <div class=\"mb-5\">\r\n                <h3 class=\"font-bold mb-2\">Account Email</h3>\r\n                <p>{{user.emailName}}</p>\r\n            </div>\r\n            <div class=\"mb-5\">\r\n                <h3 class=\"font-bold mb-2\">Account Status</h3>\r\n                <p>{{user.statusTypeName}}</p>\r\n            </div>\r\n        </div>\r\n\r\n        <h2 class=\"text-[20px] font-bold mb-3\">Contact Information</h2>\r\n\r\n        <div class=\"grid grid-cols-2 gap-4 gap-x-10\">\r\n            <div class=\"mb-5\">\r\n                <h3 class=\"font-bold mb-2\">Name</h3>\r\n                <p>{{user.firstName + ' ' + user.lastName}}</p>\r\n            </div>\r\n\r\n            <div class=\"mb-5\">\r\n                <h3 class=\"font-bold mb-2\">Work Title</h3>\r\n                <p>{{user.jobTitle}}</p>\r\n            </div>\r\n\r\n            <div>\r\n                <h3 class=\"font-bold mb-2\">System Roles</h3>\r\n                <p *ngFor=\"let role of user.roles\">{{role}}</p>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div mat-dialog-actions class=\"flex flex-row justify-end\">\r\n        <drdp-btn color=\"outline\" mat-button mat-dialog-close>Close</drdp-btn>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { IUser } from '@core/interfaces/iuser';\r\nimport { AddEditSitesComponent } from '@views/user/configuration/sites/add-edit-sites/add-edit-sites.component';\r\n\r\n@Component({\r\n  selector: 'drdp-view-user',\r\n  templateUrl: './view-user.component.html',\r\n  styleUrls: ['./view-user.component.scss']\r\n})\r\n\r\nexport class ViewUserComponent implements OnInit {\r\n  user: any;\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<AddEditSitesComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public viewData: any) {\r\n    dialogRef.disableClose = true\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.parseViewData()\r\n  }\r\n\r\n  parseViewData(){\r\n    this.user = this.viewData.data;\r\n    this.user.roles = this.user?.roleName?.split(',');\r\n  }\r\n\r\n}\r\n","export enum AccountStatusTable {\r\n    Active = 1,\r\n    Inactive = 2,\r\n    RevokedBySystem = 3,\r\n    RevokedByAgency = 4,\r\n    RevokedByWestEd = 5\r\n}\r\n\r\nexport enum AccountStatusNameTable {\r\n    Active = 'Active',\r\n    Inactive = 'Inactive',\r\n    RevokedBySystem = 'Revoked By System',\r\n    RevokedByAgency = 'Revoked By Agency',\r\n    RevokedByWestEd = 'Revoked By WestEd'\r\n}","<div id=\"userAccountModal\" class=\"rounded-lg fix-action-row modal-body\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 *ngIf=\"userDetails\" class=\"text-[25px] font-bold\">\r\n      Editing {{ userDetails.firstName }} {{ userDetails.lastName }}\r\n    </h1>\r\n    <h1 *ngIf=\"!userDetails\" class=\"text-[25px] font-bold\">Add New User</h1>\r\n    <i\r\n      mat-button\r\n      mat-dialog-close\r\n      class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"\r\n    ></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form\r\n      class=\"grid grid-cols-2 gap-4 gap-x-10 mt-2 pb-3\"\r\n      [formGroup]=\"userForm\"\r\n    >\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label> Work Title </label>\r\n          <input\r\n            matInput\r\n            placeholder=\"Work Title\"\r\n            autocomplete=\"off\"\r\n            type=\"text\"\r\n            formControlName=\"jobTitle\"\r\n            maxlength=\"50\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"required\"> First Name </label>\r\n          <input\r\n            matInput\r\n            placeholder=\"First Name\"\r\n            autocomplete=\"off\"\r\n            type=\"text\"\r\n            formControlName=\"firstName\"\r\n            maxlength=\"50\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label> M.I. </label>\r\n          <input\r\n            matInput\r\n            placeholder=\"M.I.\"\r\n            autocomplete=\"off\"\r\n            type=\"text\"\r\n            formControlName=\"middleName\"\r\n            maxlength=\"1\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"required\"> Last Name </label>\r\n          <input\r\n            matInput\r\n            placeholder=\"Last Name\"\r\n            autocomplete=\"off\"\r\n            type=\"text\"\r\n            formControlName=\"lastName\"\r\n            maxlength=\"50\"\r\n          />\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"required\"> Account Email </label>\r\n          <input\r\n            matInput\r\n            class=\"relative z-50\"\r\n            placeholder=\"Account Email\"\r\n            autocomplete=\"off\"\r\n            type=\"email\"\r\n            formControlName=\"workEmail\"\r\n            maxlength=\"100\"\r\n          />\r\n          <mat-error\r\n            *ngIf=\"workEmail.touched && workEmail.errors?.email\"\r\n            class=\"text-sm text-red-700 pt-4\"\r\n          >\r\n            Input a valid email address.\r\n          </mat-error>\r\n          <mat-error\r\n            *ngIf=\"\r\n              !workEmail.errors?.email && workEmail.duplicateEmail && !editData\r\n            \"\r\n            class=\"text-sm text-red-700 pt-4\"\r\n          >\r\n            Email already taken.\r\n          </mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div *ngIf=\"!editData\" class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <label class=\"required\"> Confirm Email </label>\r\n          <input\r\n            matInput\r\n            class=\"relative z-50\"\r\n            type=\"email\"\r\n            placeholder=\"Confirm Work Email\"\r\n            matInput\r\n            formControlName=\"checkEmail\"\r\n            maxlength=\"100\"\r\n          />\r\n          <mat-error\r\n            *ngIf=\"\r\n              checkEmail.touched &&\r\n              checkEmail.errors?.emailMismatch &&\r\n              !editData\r\n            \"\r\n            class=\"text-sm text-red-700 pt-4\"\r\n          >\r\n            Emails do not match.\r\n          </mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-suffix\r\n          [initialSuffix]=\"selectedSuffix\"\r\n          (suffix)=\"handleDropdown($event, selectType.Suffix)\"\r\n        >\r\n        </drdp-select-suffix>\r\n      </div>\r\n\r\n      <div *ngIf=\"userDetails\" class=\"col-span-1\">\r\n        <div class=\"mt-2\">\r\n          <label> Account Created </label>\r\n          <p>{{ userDetails.createdOn | localDate }}</p>\r\n        </div>\r\n      </div>\r\n\r\n      <div *ngIf=\"userDetails\" class=\"col-span-1\">\r\n        <div class=\"mt-2\">\r\n          <label> Last Login </label>\r\n          <p>{{ userDetails.lastLogin | localDate }}</p>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 select-input flex-col justify-center items-center\">\r\n        <drdp-select-status\r\n          [disabled]=\"!hasStatusEditAccess\"\r\n          [initialStatusId]=\"statusTypeId.value\"\r\n          (status)=\"handleDropdown($event, selectType.Status)\"\r\n          [required]=\"true\"\r\n        >\r\n        </drdp-select-status>\r\n      </div>\r\n\r\n      <div class=\"col-span-2\" *ngIf=\"!activeUser\">\r\n        <label>Reason for Revoking Access</label>\r\n        <mat-form-field appearance=\"outline\">\r\n          <textarea\r\n            formControlName=\"statusReason\"\r\n            matInput\r\n            placeholder=\"Ex. No longer employed\"\r\n            maxlength=\"100\"\r\n          ></textarea>\r\n        </mat-form-field>\r\n      </div>\r\n\r\n      <div *ngIf=\"userDetails\" class=\"col-span-1\">\r\n        <div>\r\n          <label> Account Status Modified Date </label>\r\n          <p>{{ userDetails.modifiedOn | localDate }}</p>\r\n        </div>\r\n      </div>\r\n\r\n      <div *ngIf=\"userDetails\" class=\"col-span-1\">\r\n        <div class=\"mt-2\">\r\n          <label> Account Status Modified By </label>\r\n          <p>{{ userDetails.modifiedName }}</p>\r\n        </div>\r\n      </div>\r\n\r\n      <div *ngIf=\"userDetails\" class=\"col-span-1\">\r\n        <div class=\"mt-2\">\r\n          <label> Password Status </label>\r\n          <p>\r\n            Last Changed On: {{ userDetails.passwordChangedOn | localDate }}\r\n          </p>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"col-span-2 items-center w-[100%]\">\r\n        <p>\r\n          Users must be tied to at least one agency, one region, or one county.\r\n        </p>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-state\r\n          [initialStateId]=\"state.value\"\r\n          (state)=\"handleDropdown($event, selectType.States)\"\r\n          [required]=\"true\"\r\n          [isValid]=\"isDropdownValid.state\"\r\n        >\r\n        </drdp-select-state>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-region\r\n          [stateId]=\"state.value\"\r\n          [initialRegionId]=\"region.value\"\r\n          [multiSelectInitVals]=\"true\"\r\n          [multiSelect]=\"true\"\r\n          (region)=\"handleDropdown($event, selectType.RegionRef)\"\r\n        >\r\n        </drdp-select-region>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-county\r\n          [initialCountyIds]=\"selectedCountyIds\"\r\n          (county)=\"handleDropdown($event, selectType.County)\"\r\n          [stateId]=\"selectedState\"\r\n          [clear]=\"clearDropdown\"\r\n        >\r\n        </drdp-select-county>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-agency\r\n          [initialAgencyId]=\"agencyId.value\"\r\n          (agency)=\"handleDropdown($event, selectType.Agencies)\"\r\n          [stateId]=\"selectedState\"\r\n          [clear]=\"clearDropdown\"\r\n          [isEditDropdown]=\"true\"\r\n        >\r\n        </drdp-select-agency>\r\n      </div>\r\n\r\n      <div class=\"col-span-1 items-center w-[100%]\">\r\n        <drdp-select-site\r\n          [initialSiteIds]=\"sites.value\"\r\n          (site)=\"handleDropdown($event, selectType.Sites)\"\r\n          [agencyId]=\"agencyId.value\"\r\n          [multiSelect]=\"true\"\r\n          [multiSelectInitVals]=\"true\"\r\n          [clear]=\"clearDropdown\"\r\n          [required]=\"agencyId.value\"\r\n          [isValid]=\"sites.valid\"\r\n        >\r\n        </drdp-select-site>\r\n      </div>\r\n\r\n      <div\r\n        *ngIf=\"loggedInUserAccessLevel >= roleGroupAccessLevel.LeadAdminRoles\"\r\n        class=\"col-span-1 items-center w-[100%]\"\r\n      >\r\n        <drdp-select-grantee\r\n          [initialGranteeId]=\"selectedGranteeAgencyId\"\r\n          label=\"Are you an employee of a Head Start Grantee Agency.  If so, please choose agency below.\"\r\n          (agency)=\"handleDropdown($event, selectType.Grantee)\"\r\n          [stateId]=\"state.value\"\r\n        >\r\n        </drdp-select-grantee>\r\n      </div>\r\n\r\n      <div\r\n        *ngIf=\"loggedInUserAccessLevel >= roleGroup.LeadAdminRoles\"\r\n        class=\"col-span-1 items-center w-[100%]\"\r\n      >\r\n        <drdp-select-contractor\r\n          [initialContractorId]=\"selectedContractorAgencyId\"\r\n          label=\"Are you an employee of a State Preschool Contractor Agency? If so, please choose agency below.\"\r\n          (agency)=\"handleDropdown($event, selectType.StatePreschoolContractorRef)\"\r\n          [stateId]=\"state.value\"\r\n        >\r\n        </drdp-select-contractor>\r\n      </div>\r\n\r\n      <div>\r\n        <drdp-select-age-grade\r\n          #ageGroupInstrumentSelect\r\n          [initialageGradeId]=\"excludedAgeGradeIds.value\"\r\n          label=\"Excluded Age/Grade Instruments\"\r\n          [stateId]=\"selectedState\"\r\n          [multiSelect]=\"true\"\r\n          (ageGrade)=\"handleDropdown($event, selectType.AgeInstrument)\"\r\n        >\r\n        </drdp-select-age-grade>\r\n      </div>\r\n\r\n      <div class=\"col-span-2 items-center w-[100%]\">\r\n        <label class=\"required\">Roles</label>\r\n        <div class=\"grid grid-cols-2 gap-4 gap-x-10 mt-2 pb-3\">\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel >= roleGroupAccessLevel.UserRoles\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>User Roles</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.UserRoles\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel >= roleGroupAccessLevel.EnrollmentUser\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>Enrollment User</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.EnrollmentUser\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel > roleGroupAccessLevel.AdministratorRoles || canEditSameLevelNotPromote\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>Administrator Roles</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.AdministratorRoles\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      [disabled]=\"role.id === roleType.AgencyAdministrator && canEditSameLevelNotPromote && (loggedInUserAccessLevel <= roleGroup.AdministratorRoles)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel > roleGroupAccessLevel.LeadAdminRoles\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>Lead Admin Roles</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.LeadAdminRoles\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel > roleGroupAccessLevel.StateUsers\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>State Users\r\n              <i class=\"uil uil-info-circle text-xl ml-2 mb-2 cursor-pointer \"\r\n            matTooltip=\"State Users cannot be combined with any other role.\"\r\n            matTooltipPosition=\"right\" matTooltipClass=\"bg-black text-white custom-tooltip\"></i>\r\n            </label>\r\n\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.StateUsers\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      [disabled]=\"role.id === roleType.AgencyAdministrator && canEditSameLevelNotPromote && (loggedInUserAccessLevel <= roleGroup.AdministratorRoles)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel >= roleGroupAccessLevel.PowerUserRoles && canEditSameLevel\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>Power User Roles</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.PowerUserRoles\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            *ngIf=\"loggedInUserAccessLevel >= roleGroupAccessLevel.SystemPowerUser && canEditSameLevel\"\r\n            class=\"col-span-1 items-center w-[100%]\"\r\n          >\r\n            <label>System Power User</label>\r\n            <div class=\"flex flex-col\">\r\n              <div *ngFor=\"let role of userRoleOptions\">\r\n                <div *ngIf=\"role.roleGroupId === roleGroup.SystemPowerUser\">\r\n                  <p>\r\n                    <mat-checkbox\r\n                      [checked]=\"initializeCheckbox(role)\"\r\n                      (change)=\"handleCheckbox(role)\"\r\n                      color=\"primary\"\r\n                    >\r\n                    </mat-checkbox>\r\n                    {{ role.roleName }}\r\n                    <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                  </p>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</div>\r\n<div mat-dialog-actions class=\"flex justify-end\">\r\n  <drdp-btn color=\"cancel\" mat-button mat-dialog-close>Cancel</drdp-btn>\r\n  <drdp-btn\r\n    class=\"ml-3\"\r\n    mat-button\r\n    (click)=\"onSubmit()\"\r\n    [disabled]=\"userForm.invalid\"\r\n    cdkFocusInitial\r\n    >Save</drdp-btn\r\n  >\r\n</div>\r\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport {\r\n  AbstractControlOptions,\r\n  FormBuilder,\r\n  FormGroup,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { AddEditSitesComponent } from '@views/user/configuration/sites/add-edit-sites/add-edit-sites.component';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { Observable, take, tap } from 'rxjs';\r\nimport { IAdminUserDetails, IUserRequest, RoleGroupFlag } from '@core/interfaces/iuser';\r\nimport {\r\n  AccountStatusNameTable,\r\n  AccountStatusTable,\r\n} from '@core/enums/statusTypes';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { SelectComponent } from '@shared/components/dropdowns/select/select.component';\r\nimport { transformStringToNumArray } from '@core/services/helper.service';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { Role, RoleGroup, RoleGroupAccessLevel } from '@core/enums/roles';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { IAgeGradeInstrument } from '@core/interfaces/iage-grade-instrument';\r\nimport { SelectAgeGradeComponent } from '@shared/components/dropdowns/select-age-grade/select-age-grade.component';\r\n\r\n@Component({\r\n  selector: 'drdp-add-edit-user-accounts',\r\n  templateUrl: './add-edit-user-accounts.component.html',\r\n  styleUrls: ['./add-edit-user-accounts.component.scss'],\r\n})\r\nexport class AddEditUserAccountsComponent implements OnInit {\r\n  @ViewChild('countySelect') countySelect?: SelectComponent | undefined;\r\n  @ViewChild('ageGroupInstrumentSelect') ageGroupInstrumentSelect?: SelectAgeGradeComponent | undefined;\r\n  userForm: FormGroup | any;\r\n  userId?: number | any;\r\n  userDetails?: IAdminUserDetails;\r\n  activeUser?: boolean;\r\n  clearDropdown = false;\r\n  userRoleOptions?: IRoles[];\r\n  hasAccessToAll = this.permissionService.checkPermission(\r\n    Permission.AccessAllAgencies\r\n  );\r\n  hasAccessToAssigned = this.permissionService.checkPermission(\r\n    Permission.AccessAssignedStateAgencies\r\n  );\r\n  canEditSameLevel = this.permissionService.checkPermission(\r\n    Permission.EditSameLevelAccounts\r\n    );\r\n  canEditSameLevelNotPromote = this.permissionService.checkPermission(\r\n    Permission.EditSameLevelNotPromoteSameLevel\r\n    );\r\n  isAdmin = false;\r\n  isLeadAdmin = false;\r\n  isSuperUser = false;\r\n  loggedInUserAccessLevel: number = 1;\r\n  currentUserAccessLevel: number = 1;\r\n  hasStatusEditAccess: boolean = false;\r\n  editSelf: boolean = false;\r\n  loggedUserId: number = this.authService.getCurrentUser().userId;\r\n\r\n  selectedSuffix?: string | null;\r\n  selectedStatus?: number | null;\r\n  selectedState?: number | null;\r\n  selectedAgency?: number | null;\r\n  selectedGranteeAgencyId?: number | null;\r\n  selectedContractorAgencyId?: number | null;\r\n  selectedSiteIds: number[] | null = [];\r\n  selectedRoleIds: number[] | null = [];\r\n  selectedCountyIds: number[] | null = [];\r\n  selectedRegionIds: number[] | null = [];\r\n  originalAgency?: number | null;\r\n  orginalSites: number[] | null = [];\r\n  selectedRoleFlags: RoleGroupFlag[] = [];\r\n\r\n\r\n  isDropdownValid = {\r\n    roles: true,\r\n    state: true,\r\n    agency: true,\r\n    site: true,\r\n    county: true,\r\n  };\r\n\r\n  get selectType() {\r\n    return SelectType;\r\n  }\r\n  get statusType() {\r\n    return AccountStatusTable;\r\n  }\r\n  get statusTypeName() {\r\n    return AccountStatusNameTable;\r\n  }\r\n  get roleGroup() {\r\n    return RoleGroup;\r\n  }\r\n  get roleGroupAccessLevel() {\r\n    return RoleGroupAccessLevel;\r\n  }\r\n  get roleType() {\r\n    return Role\r\n  }\r\n\r\n  get workEmail() {\r\n    return this.userForm.get('workEmail');\r\n  }\r\n  get checkEmail() {\r\n    return this.userForm.get('checkEmail');\r\n  }\r\n  get jobTitle() {\r\n    return this.userForm.get('jobTitle');\r\n  }\r\n  get firstName() {\r\n    return this.userForm.get('firstName');\r\n  }\r\n  get lastName() {\r\n    return this.userForm.get('lastName');\r\n  }\r\n  get middleName() {\r\n    return this.userForm.get('middleName');\r\n  }\r\n  get suffix() {\r\n    return this.userForm.get('suffix');\r\n  }\r\n  get statusTypeId() {\r\n    return this.userForm.get('statusTypeId');\r\n  }\r\n  get statusReason() {\r\n    return this.userForm.get('statusReason');\r\n  }\r\n  get granteeAgencyId() {\r\n    return this.userForm.get('granteeAgencyId');\r\n  }\r\n  get contractorAgencyId() {\r\n    return this.userForm.get('contractorAgencyId');\r\n  }\r\n  get agencyId() {\r\n    return this.userForm.get('agencyId');\r\n  }\r\n  get roles() {\r\n    return this.userForm.get('roles');\r\n  }\r\n  get sites() {\r\n    return this.userForm.get('sites');\r\n  }\r\n  get counties() {\r\n    return this.userForm.get('counties');\r\n  }\r\n  get state() {\r\n    return this.userForm.get('state');\r\n  }\r\n  get region() {\r\n    return this.userForm.get('region');\r\n  }\r\n  get excludedAgeGradeIds() {\r\n    return this.userForm.get('excludedAgeGradeIds');\r\n  }\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    public dialogRef: MatDialogRef<AddEditSitesComponent>,\r\n    private agency: AgencyService,\r\n    public toast: ToastService,\r\n    public lookup: LookupService,\r\n    private userService: UserService,\r\n    private roleService: RoleService,\r\n    private authService: AuthService,\r\n    private permissionService: PermissionService,\r\n    @Inject(MAT_DIALOG_DATA) public editData: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n\r\n    this.roleService\r\n                .getAllByOrder()\r\n                .pipe(take(1))\r\n                .subscribe((res: IRoles[]) => {\r\n                  this.userRoleOptions = res;\r\n                });\r\n\r\n    this.loggedInUserAccessLevel = this.authService.getAccessLevel();\r\n\r\n    if (this.editData) {\r\n      this.userId = this.editData.data.id;\r\n      this.editSelf = this.userId === this.loggedUserId;\r\n      this.userService\r\n        .getAdminUserDetails(this.userId)\r\n        .pipe(\r\n          take(1),\r\n          tap((user: IAdminUserDetails) => {\r\n            this.userDetails = user;\r\n            this.activeUser =\r\n              this.userDetails?.statusTypeId == AccountStatusTable.Active\r\n                ? true\r\n                : false;\r\n            if (this.userDetails) {\r\n              this.initializeDropdownValues(this.userDetails);\r\n              this.selectedRoleFlags = this.userDetails.roleGroupFlags;\r\n\r\n              this.userService\r\n                .getUserHighestAccessLevel(this.userId)\r\n                .pipe(take(1))\r\n                .subscribe((res: number) => {\r\n                  if (res) {\r\n                    this.currentUserAccessLevel = res;\r\n                    this.hasStatusEditAccess =\r\n                      this.loggedInUserAccessLevel >=\r\n                      this.currentUserAccessLevel;\r\n                  }\r\n                });\r\n            }\r\n          })\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.userForm = this.fb.group(\r\n      {\r\n        workEmail: [\r\n          null,\r\n          [Validators.required, Validators.maxLength(100), Validators.email],\r\n        ],\r\n        checkEmail: [null],\r\n        jobTitle: [null, Validators.maxLength(50)],\r\n        firstName: [null, [Validators.required, Validators.maxLength(50)]],\r\n        middleName: [null, Validators.maxLength(1)],\r\n        lastName: [null, [Validators.required, Validators.maxLength(50)]],\r\n        suffix: [null],\r\n        statusTypeId: [AccountStatusTable.Active, [Validators.required]],\r\n        statusReason: [''],\r\n        agencyId: [null],\r\n        granteeAgencyId: [null],\r\n        contractorAgencyId: [null],\r\n        roles: [null, [Validators.required]],\r\n        sites: [null],\r\n        counties: [null],\r\n        state: [null, [Validators.required]],\r\n        region: [null],\r\n        excludedAgeGradeIds: [null],\r\n      },\r\n      {\r\n        validator: this.matchEmail('workEmail', 'checkEmail'),\r\n      } as AbstractControlOptions\r\n    );\r\n\r\n    this.selectedState = this.editData?.data?.stateId ?? this.authService.getUserStateId();\r\n    this.selectedAgency = this.editData?.data?.agencyId ?? this.authService.getCurrentUser().agencyId;\r\n    this.state.setValue(this.selectedState);\r\n    this.agencyId.setValue(this.selectedAgency);\r\n  }\r\n\r\n  matchEmail(emailName: string, confirmEmail: string) {\r\n    return (resetPwForm: FormGroup) => {\r\n      const email = resetPwForm.controls[emailName];\r\n      const confirmedEmail = resetPwForm.controls[confirmEmail];\r\n      if (email.value !== confirmedEmail.value && !this.editData) {\r\n        return confirmedEmail.setErrors({ emailMismatch: true });\r\n      } else {\r\n        return confirmedEmail.setErrors(null);\r\n      }\r\n    };\r\n  }\r\n\r\n  initializeDropdownValues(userDetails: IAdminUserDetails) {\r\n    this.selectedAgency = this.editData?.data?.agencyId ?? userDetails.agencyId;\r\n    this.selectedState = this.editData?.data?.stateId ?? userDetails.stateId;\r\n    this.selectedGranteeAgencyId = userDetails.granteeAgencyId;\r\n    this.selectedContractorAgencyId = userDetails.contractorAgencyId;\r\n    this.selectedSiteIds = transformStringToNumArray(userDetails.sites);\r\n    this.selectedRoleIds = transformStringToNumArray(userDetails.roles);\r\n    this.selectedCountyIds = transformStringToNumArray(userDetails.counties);\r\n    this.selectedRegionIds = transformStringToNumArray(userDetails.regions);\r\n    this.selectedStatus = userDetails.statusTypeId;\r\n    this.selectedSuffix = userDetails.suffix;\r\n    this.originalAgency = this.selectedAgency;\r\n    this.orginalSites = this.selectedSiteIds;\r\n\r\n    this.userForm.patchValue({\r\n      ...userDetails,\r\n      workEmail: userDetails.emailName,\r\n      jobTitle: userDetails.jobTitle,\r\n      state: userDetails.stateId,\r\n      counties: this.selectedCountyIds,\r\n      roles: this.selectedRoleIds,\r\n      sites: this.selectedSiteIds,\r\n      region: this.selectedRegionIds,\r\n      statusTypeId: this.selectedStatus,\r\n      excludedAgeGradeIds:transformStringToNumArray(userDetails.excludedAgeGradeIds)\r\n    });\r\n  }\r\n\r\n  handleDropdown(data: any, type: string): void {\r\n    switch (type) {\r\n      case this.selectType.States:\r\n        this.selectedState = data ? data.id : null;\r\n        if (this.selectedState !== this.state.value) {\r\n          this.excludedAgeGradeIds.setValue(null);\r\n          this.ageGroupInstrumentSelect?.clearSelected();\r\n        }\r\n        this.state.setValue(this.selectedState);\r\n\r\n        if (this.selectedState) {\r\n          this.selectedAgency = null;\r\n          this.agencyId.setValue(this.selectedAgency);\r\n          this.selectedCountyIds = null;\r\n          this.counties.setValue(this.selectedCountyIds);\r\n          this.selectedSiteIds = null;\r\n          this.sites.setValue(this.selectedSiteIds);\r\n        }\r\n        this.isDropdownValid.state = this.selectedState\r\n          ? this.selectedState > 0\r\n          : false;\r\n        break;\r\n      case this.selectType.Agencies:\r\n        this.selectedAgency = data?.id;\r\n        this.agencyId.setValue(this.selectedAgency);\r\n\r\n        if (this.selectedAgency === this.originalAgency) {\r\n          this.sites.setValue(this.orginalSites?.map((site: number) => site));\r\n        }\r\n        if (this.agencyId.value) this.sites.setValidators(Validators.required);\r\n        else this.sites.clearValidators();\r\n        this.sites.updateValueAndValidity();\r\n        break;\r\n      case this.selectType.Sites:\r\n        this.sites.setValue(data?.map((site: ISites) => site?.id));\r\n        break;\r\n      case this.selectType.County:\r\n        this.selectedCountyIds = data\r\n          ? data.map((county: ICounty) => county.id)\r\n          : null;\r\n        this.counties.setValue(this.selectedCountyIds);\r\n        break;\r\n      case this.selectType.Grantee:\r\n        this.selectedGranteeAgencyId = data ? data.id : null;\r\n        this.granteeAgencyId.setValue(this.selectedGranteeAgencyId);\r\n        break;\r\n      case this.selectType.StatePreschoolContractorRef:\r\n        this.selectedContractorAgencyId = data ? data.id : null;\r\n        this.contractorAgencyId.setValue(this.selectedContractorAgencyId);\r\n        break;\r\n      case this.selectType.Status:\r\n        this.selectedStatus = data ? data.id : null;\r\n        this.statusTypeId.setValue(this.selectedStatus);\r\n        if (this.statusTypeId.value === this.statusType.Active) {\r\n          this.activeUser = true;\r\n          this.statusReason.reset();\r\n        } else {\r\n          this.activeUser = false;\r\n        }\r\n        break;\r\n      case this.selectType.Suffix:\r\n        this.selectedSuffix = data ? data.name : null;\r\n        this.suffix.setValue(this.selectedSuffix);\r\n        break;\r\n      case this.selectType.RegionRef:\r\n        this.selectedRegionIds = data ? data : null;\r\n        this.region.setValue(this.selectedRegionIds);\r\n        break;\r\n      case this.selectType.AgeInstrument:\r\n        this.excludedAgeGradeIds.setValue(data \r\n          ? data.map((ageGrade: IAgeGradeInstrument) => ageGrade.id) \r\n          : null);\r\n        break;\r\n    }\r\n  }\r\n\r\n  handleCheckbox(role: IRoles) {\r\n    let roleIncluded = this.selectedRoleIds?.some(\r\n      (roleId: number) => roleId === role.id\r\n    );\r\n\r\n    if (roleIncluded) {\r\n      let roleIndex =\r\n        this.selectedRoleIds?.findIndex(\r\n          (roleId: number) => roleId === role.id\r\n        ) ?? 0;\r\n      this.selectedRoleIds?.splice(roleIndex, 1);\r\n      this.selectedRoleFlags = this.selectedRoleFlags.filter(\r\n        (entry) => entry.roleId !== role.id\r\n      );\r\n    } else {\r\n      this.selectedRoleIds?.push(role.id);\r\n      this.selectedRoleFlags.push({\r\n        roleId: role.id,\r\n        isStandAlone: role.roleGroupStandAlone,\r\n      });\r\n    }\r\n    this.roles.setValue(this.selectedRoleIds);\r\n    this.isDropdownValid.roles = this.selectedRoleIds\r\n      ? this.selectedRoleIds.length > 0\r\n      : false;\r\n  }\r\n\r\n  initializeCheckbox(roles: IRoles) {\r\n    return this.selectedRoleIds?.some((roleId: number) => roleId === roles.id);\r\n  }\r\n\r\n  createUserPayload(): IUserRequest {\r\n    let payload: IUserRequest = {\r\n      id: this.editData ? this.editData.data.id : 0,\r\n      stateId: this.state.value,\r\n      statusTypeId: this.statusTypeId.value,\r\n      statusReason: this.statusReason.value,\r\n      firstName: this.firstName.value,\r\n      middleName: this.middleName.value,\r\n      lastName: this.lastName.value,\r\n      emailName: this.workEmail.value,\r\n      suffix: this.suffix.value,\r\n      agencyId: this.agencyId.value,\r\n      granteeAgencyId: this.granteeAgencyId.value,\r\n      contractorAgencyId: this.contractorAgencyId.value,\r\n      sites: this.sites.value,\r\n      roles: this.roles.value,\r\n      counties: this.counties.value,\r\n      jobTitle: this.jobTitle?.value,\r\n      regions: this.region.value,\r\n      excludedAgeGradeIds: this.excludedAgeGradeIds.value,\r\n    };\r\n    return payload;\r\n  }\r\n\r\n  onSubmit() {\r\n    if (\r\n      !this.userForm.value ||\r\n      this.userForm.invalid ||\r\n      (!this.agencyId.value && !this.region.value && !this.counties.value)\r\n    ) {\r\n      this.toast.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    const standaloneFlags = new Set(this.selectedRoleFlags.map(flag => flag.isStandAlone));\r\n    if(standaloneFlags.size > 1) {\r\n      this.toast.error('Cannot combine stand alone roles with other roles.');\r\n      return;\r\n    }\r\n\r\n    const payload = this.createUserPayload();\r\n    if (this.editData) {\r\n      this.userService\r\n        .updateUser(payload, 'Account has been updated.')\r\n        .pipe(take(1))\r\n        .subscribe((success: boolean) => {\r\n          if (success) {\r\n            this.dialogRef.close({ success: success, payload: payload });\r\n          }\r\n        });\r\n    } else {\r\n      this.userService\r\n        .createUser(\r\n          payload,\r\n          `User account for ${payload.firstName} ${payload.lastName} has been successfully created.`\r\n        )\r\n        .pipe(take(1))\r\n        .subscribe((newUserId: number) => {\r\n          if (newUserId > 0) {\r\n            this.dialogRef.close();\r\n          }\r\n        });\r\n    }\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex flex-row\">\r\n    <div class=\"basis-1/2\">\r\n      <drdp-title title=\"User Account\"></drdp-title>\r\n    </div>\r\n    <div class=\"basis-1/2\">\r\n      <div class=\"flex justify-end items-end\" *ngIf=\"canCreateAccount\">\r\n        <drdp-btn (click)=\"openModalAdd()\">\r\n          <i class=\"uil uil-plus\"></i>\r\n          Add New User\r\n        </drdp-btn>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n    <div class=\"w-full\">\r\n      <drdp-container color=\"lightBlue\">\r\n        <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-8\" [formGroup]=\"userSearch\"\r\n          (ngSubmit)=\"searchAccounts()\">\r\n          <div class=\"self-start my-auto\">\r\n            <label class=\"font-bold\">Search by:</label>\r\n            <div class=\"border-b border-black\">\r\n              <input matInput placeholder=\"Name or Email\" formControlName=\"searchStr\"\r\n                class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\" />\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"handleState($event)\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-state>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-agency #agencySelect [initialAgencyId]=\"agencyId.value\" (agency)=\"handleAgency($event)\"\r\n              [stateId]=\"stateId.value\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-agency>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-site [initialSiteIds]=\"siteIds.value\" (site)=\"handleSites($event)\" [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-status [initialStatusId]=\"userStatusIds.value\" [disabled]=\"false\" (status)=\"handleStatus($event)\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearDropdowns\">\r\n            </drdp-select-status>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-role label=\"Role\" [initialRolesIds]=\"roleIds.value\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearDropdowns\" (role)=\"handleroles($event)\">\r\n            </drdp-select-role>\r\n          </div>\r\n\r\n          <div class=\"lg:col-span-2 flex flex-row md:flex-col-1 gap-5 lg:flex-row lg:justify-start lg:items-end\">\r\n            <div class=\"mb-0 md:mb-2 lg:mb-0\">\r\n              <drdp-btn type=\"submit\" class=\"lg:mr-2\">Search</drdp-btn>\r\n            </div>\r\n            <div>\r\n              <drdp-btn color=\"outline\" type=\"button\" (click)=\"onClear()\">Clear</drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <drdp-add-edit-table tableId=\"userAccount\" [dataSource]=\"dataSource\" [tableData]=\"tableData\"\r\n        [columns]=\"tableColumns\" viewIcon=\"uil uil-user text-drdpblue-300\" (editActionItem)=\"openEditModal($event)\"\r\n        (viewActionItem)=\"openViewModal($event)\">\r\n      </drdp-add-edit-table>\r\n    </div>\r\n  </drdp-container>\r\n\r\n  <mat-paginator [pageSizeOptions]=\"pageSizeOptions\" [pageSize]=\"pageSize\" [length]=\"totalData\" [pageIndex]=\"pageIndex\"\r\n    (page)=\"paginateTable(false)\">\r\n  </mat-paginator>\r\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { AddEditComponent } from '@shared/components/drdp-tables/add-edit/add-edit.component';\r\nimport { ViewUserComponent } from './view-user/view-user.component';\r\nimport { AddEditUserAccountsComponent } from './add-edit-user-accounts/add-edit-user-accounts.component';\r\nimport { FormGroup, FormBuilder } from '@angular/forms';\r\nimport { take } from 'rxjs';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport {\r\n  IAdminSearchUsersRequest,\r\n  IAdminSearchUsersResponseDto,\r\n  IAdminSearchUsersResult,\r\n  IStatusType,\r\n} from '@core/interfaces/iuser';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { PermissionService } from '@core/services/permission.service';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { SelectAgencyComponent } from '@shared/components/dropdowns/select-agency/select-agency.component';\r\nimport { SelectStateComponent } from '@shared/components/dropdowns/select-state/select-state.component';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Role } from '@core/enums/roles';\r\n\r\n@Component({\r\n  selector: 'drdp-user-account',\r\n  templateUrl: './user-account.component.html',\r\n  styleUrls: ['./user-account.component.scss'],\r\n})\r\nexport class UserAccountComponent implements OnInit {\r\n  @ViewChild(AddEditComponent) table?: AddEditComponent;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('siteSelect') siteSelect?: FilterSelectComponent | undefined;\r\n  @ViewChild('stateSelect') stateSelect: SelectStateComponent | undefined;\r\n  @ViewChild('agencySelect') agencySelect: SelectAgencyComponent | undefined;\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  userSearch: FormGroup | any;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex: number = 0;\r\n  pageSize: number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  user = this.authService.getCurrentUser();\r\n  payload: Partial<IAdminSearchUsersRequest> = {};\r\n  canCreateAccount = false;\r\n  modalNewUserConfig = { title: 'Add New Class', editor: 'class' };\r\n  clearDropdowns = false;\r\n  canEditSameLevel: boolean = false;\r\n  canEditSameLevelNotPromote: boolean = false;\r\n\r\n  get searchStr() {\r\n    return this.userSearch.get('searchStr');\r\n  }\r\n  get agencyId() {\r\n    return this.userSearch.get('agencyId');\r\n  }\r\n  get stateId() {\r\n    return this.userSearch.get('stateId');\r\n  }\r\n  get siteIds() {\r\n    return this.userSearch.get('siteIds');\r\n  }\r\n  get userStatusIds() {\r\n    return this.userSearch.get('userStatusIds');\r\n  }\r\n  get roleIds() {\r\n    return this.userSearch.get('roleIds');\r\n  }\r\n\r\n  tableColumns = [\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'emailName', header: 'Email', type: 'text' },\r\n    { columnDef: 'roleName', header: 'Roles', type: 'text' },\r\n    { columnDef: 'statusTypeName', header: 'Account Status', type: 'text' },\r\n    { columnDef: 'preview', header: 'Preview', type: 'view' },\r\n    { columnDef: 'edit', header: 'Edit', type: 'edit' },\r\n  ];\r\n\r\n  constructor(\r\n    private users: UserService,\r\n    public modal: MatDialog,\r\n    private fb: FormBuilder,\r\n    private authService: AuthService,\r\n    private permission: PermissionService,\r\n    private toast: ToastService\r\n  ) {}\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = '';\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.canCreateAccount = this.permission.checkPermission(\r\n      Permission.CreateAccounts\r\n    );\r\n    this.canEditSameLevel = this.permission.checkPermission(\r\n      Permission.EditSameLevelAccounts\r\n    );\r\n    this.canEditSameLevelNotPromote = this.permission.checkPermission(\r\n      Permission.EditSameLevelNotPromoteSameLevel\r\n      );\r\n\r\n    this.initializeForm();\r\n  }\r\n\r\n  handleState(state: ISelectable): void {\r\n    this.stateId.setValue(state?.id);\r\n  }\r\n\r\n  handleAgency(agency: IAgency): void {\r\n    this.agencyId.setValue(agency?.id);\r\n\r\n    if (this.authService.getCurrentUser().agencyId !== this.agencyId.value) {\r\n      this.siteIds.setValue(null);\r\n    }\r\n  }\r\n\r\n  handleSites(sites: ISites[]): void {\r\n    if (!sites) {\r\n      this.siteIds.setValue(null);\r\n      return;\r\n    }\r\n    this.siteIds.setValue(sites.map((e: ISites) => e.id));\r\n  }\r\n\r\n  handleStatus(event: IStatusType[]): void {\r\n    if (!event.length) {\r\n      this.userStatusIds.setValue(null);\r\n      return;\r\n    }\r\n    this.userStatusIds.setValue(event.map((e: any) => e.id));\r\n  }\r\n\r\n  handleroles(event: IRoles[]): void {\r\n    if (!event.length) {\r\n      this.roleIds.setValue(null);\r\n      return;\r\n    }\r\n    this.roleIds.setValue(event.map((e: any) => e.id));\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.userSearch = this.fb.group({\r\n      searchStr: [null],\r\n      agencyId: [null],\r\n      stateId: [null],\r\n      siteIds: [null],\r\n      userStatusIds: [null],\r\n      roleIds: [null]\r\n    });\r\n\r\n    this.userSearch.patchValue({\r\n      stateId: this.authService.getUserStateId(),\r\n      agencyId: this.authService.getCurrentUser().agencyId,\r\n      siteIds: this.authService.getCurrentUser().sites.map((site) => site.siteId)\r\n    });\r\n  }\r\n\r\n  openModalAdd() {\r\n    this.modal.open(AddEditUserAccountsComponent);\r\n  }\r\n\r\n  openViewModal(viewData: IModalEmitData): void {\r\n    const modalRef = this.modal.open(ViewUserComponent, {\r\n      data: viewData ? viewData : undefined,\r\n    });\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n  canEditUser(data: IAdminSearchUsersResponseDto) {\r\n    const sameAccessLevel = this.user.accessLevel === data.accessLevel;\r\n    const isSameUser = this.user.userId === data.id;\r\n    const editRoleIds = data.roleIds.split(',');\r\n\r\n\r\n    return (\r\n      this.user.accessLevel > data.accessLevel ||\r\n      isSameUser ||\r\n      (sameAccessLevel && (this.canEditSameLevel || this.canEditSameLevelNotPromote))\r\n    );\r\n  }\r\n\r\n  openEditModal(editData?: IModalEmitData): void {\r\n    if (editData) {\r\n      const data = editData.data;\r\n\r\n      if (this.canEditUser(data)) {\r\n        const modalRef = this.modal.open(AddEditUserAccountsComponent, {\r\n          data: editData,\r\n        });\r\n\r\n        modalRef.afterClosed().subscribe((result) => {\r\n          if (result.success) {\r\n            if (\r\n              this.user.userId == result.payload.id\r\n            ) {\r\n              this.authService.logout().pipe(take(1)).subscribe();\r\n            } else {\r\n              this.paginateTable(true);\r\n            }\r\n          }\r\n        });\r\n      } else {\r\n        this.toast.error(\"You do not have permission to edit this user's information. Please contact your Lead Agency Administrator for assistance.\");\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  initializeTableData(res: IAdminSearchUsersResult): void {\r\n    this.dataSource = new MatTableDataSource(res.items);\r\n    this.totalData = res.totalData;\r\n    this.tableData = res.items;\r\n  }\r\n\r\n  searchAccounts(): void {\r\n    this.paginateTable(true);\r\n  }\r\n\r\n  paginateTable(resetPage: boolean): void {\r\n    this.users\r\n      .globalSearch(this.createSearchPayload(resetPage))\r\n      .subscribe((res: IAdminSearchUsersResult) => {\r\n        if (resetPage) this.paginator.firstPage();\r\n        this.initializeTableData(res);\r\n        if (res.totalData > 25) this.pageSizeOptions.push(res.totalData);\r\n      });\r\n  }\r\n\r\n  onClear(): void {\r\n    this.clearDropdowns = true;\r\n    this.dataSource = new MatTableDataSource();\r\n    this.userSearch.reset();\r\n    this.userSearch.patchValue({\r\n      stateId: this.authService.getUserStateId(),\r\n      agencyId: this.authService.getCurrentUser().agencyId\r\n    });\r\n    if (!this.stateSelect?.disabled) {\r\n      this.stateId.setValue(null);\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(null);\r\n    }\r\n\r\n  }\r\n\r\n  createSearchPayload(resetPage: boolean): IAdminSearchUsersRequest {\r\n    this.payload = this.userSearch.value;\r\n    resetPage\r\n      ? (this.payload.pageIndex = 0)\r\n      : (this.payload.pageIndex = this.paginator.pageIndex + 1);\r\n    resetPage\r\n      ? (this.payload.itemsPerPage = 10)\r\n      : (this.payload.itemsPerPage = this.paginator.pageSize);\r\n    return this.payload as IAdminSearchUsersRequest;\r\n  }\r\n}\r\n","<div *ngIf=\"!userDetails\">\r\n  <div class=\"flex justify-between h-36\">\r\n    <h1 class=\"text-[25px] font-bold self-center\">User Details loading</h1>\r\n  </div>\r\n</div>\r\n<div *ngIf=\"userDetails\">\r\n  <div class=\"flex justify-between border-b\">\r\n    <h1 class=\"text-[25px] font-bold\">Editing {{userDetails.firstName + ' ' + userDetails.lastName}}</h1>\r\n    <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n  </div>\r\n\r\n  <div mat-dialog-content>\r\n    <form class=\"grid grid-cols-2 gap-4 gap-x-10 mt-5\" [formGroup]=\"editForm\">\r\n      <!-- <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px] mb-2\">Work Email</h3>\r\n        <input formControlName=\"emailName\" type=\"text\" class=\"border-b border-black focus:outline-none w-full\">\r\n        <mat-error *ngIf=\"emailName.touched && emailName.errors?.email\" class=\"text-sm text-red-700 pt-4\">\r\n          Input a valid email address.\r\n        </mat-error>\r\n      </div> -->\r\n      <div class=\"col-span-1\">\r\n        <mat-form-field class=\"bg-white\" appearance=\"fill\">\r\n          <h3 class=\"font-bold text-[16px] required\">Work Email</h3>\r\n          <input matInput formControlName=\"emailName\" type=\"text\"\r\n            class=\"border-b border-black focus:outline-none w-full\">\r\n          <mat-error *ngIf=\"emailName.touched && emailName.errors?.email\" class=\"text-sm text-red-700 pt-4\">\r\n            Input a valid email address.\r\n          </mat-error>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <label>Work Title</label>\r\n        <p>{{userDetails.jobTitle}}</p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px]\">Account Created</h3>\r\n        <p>{{userDetails.createdOn | date: 'M/d/yyyy' }}</p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px]\">Last Login</h3>\r\n        <p>{{userDetails.lastLogin ? (userDetails.lastLogin | localDate | date: 'M/d/yyyy') : '' }}</p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-status [initialStatusId]=\"statusTypeId.value\" (status)=\"handleChosenAccountStatus($event)\"\r\n          [required]=\"true\">\r\n        </drdp-select-status>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px]\">Account Status Modified Date</h3>\r\n        <p>{{userDetails.modifiedOn | date: 'M/d/yyyy'}}</p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px]\">Account Status Modified By</h3>\r\n        <p>{{userDetails.modifiedName}}</p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <h3 class=\"font-bold text-[16px]\">Pasword Status</h3>\r\n        <p>\r\n          Last Changed on {{userDetails.passwordChangedOn ?\r\n          (userDetails.passwordChangedOn | date: 'M/d/yyyy') : ''}}\r\n        </p>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-state [initialStateId]=\"stateId.value\" (state)=\"handleChosenState($event)\" [required]=\"true\">\r\n        </drdp-select-state>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-agency [initialAgencyId]=\"agencyId.value\" (agency)=\"handleChosenAgency($event)\"\r\n          [stateId]=\"stateId.value\">\r\n        </drdp-select-agency>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-site [initialSiteIds]=\"siteIds.value\" (site)=\"handleChosenSites($event)\"\r\n          [agencyId]=\"agencyId.value\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\"\r\n          [required]=\"agencyId.value\" [isValid]=\"siteIds.valid\">\r\n        </drdp-select-site>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-county [initialCountyIds]=\"countyIds.value\" (county)=\"handleChosenCounties($event)\"\r\n          [stateId]=\"stateId.value\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\">\r\n        </drdp-select-county>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-grantee [initialGranteeId]=\"granteeAgencyId.value\" \r\n          (agency)=\"handleChosenGranteeAgency($event)\" [stateId]=\"stateId.value\">\r\n        </drdp-select-grantee>\r\n      </div>\r\n      <div class=\"col-span-1\">\r\n        <drdp-select-contractor [initialContractorId]=\"contractorAgencyId.value\" \r\n          (agency)=\"handleChosenContractorAgency($event)\" [stateId]=\"stateId.value\">\r\n        </drdp-select-contractor>\r\n      </div>\r\n    </form>\r\n    <div class=\"col-span-2 items-center w-[100%]\">\r\n      <label class=\"required\">Roles</label>\r\n      <div class=\"grid grid-cols-2 gap-4 gap-x-10 mt-2 pb-3\">\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>User Roles</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.UserRoles\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\" [value]=\"role.id.toString()\" (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>Enrollment User</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.EnrollmentUser\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\"  [value]=\"role.id.toString()\" (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>Administrator Roles</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.AdministratorRoles\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\"  [value]=\"role.id.toString()\" (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>State Users</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.StateUsers\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\"  [value]=\"role.id.toString()\" (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>Lead Admin Roles</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.LeadAdminRoles\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\" [value]=\"role.id.toString()\"  (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>Power User Roles</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.PowerUserRoles\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm.get(role.id.toString())\" [value]=\"role.id.toString()\"  (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"col-span-1 items-center w-[100%]\">\r\n          <label>System Power User</label>\r\n          <div class=\"flex flex-col\">\r\n            <div *ngFor=\"let role of roleList\">\r\n              <div *ngIf=\"role.roleGroupId === roleGroup.SystemPowerUser\">\r\n                <p>\r\n                  <mat-checkbox #roleCheckbox [formControl]=\"roleForm?.get(role.id.toString())\"  [value]=\"role.id.toString()\" (change)=\"handleChosenRoles(role.id)\"\r\n                    color=\"primary\">\r\n                  </mat-checkbox>\r\n                  {{role.roleName}}\r\n                  <i *ngIf=\"role.tooltipInformation\" class=\"uil uil-info-circle text-xs\" [matTooltip]=\"role.tooltipInformation\"></i>\r\n                </p>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div class=\"flex flex-row justify-end\">\r\n    <drdp-btn mat-button mat-dialog-close [color]=\"'cancel'\">Cancel</drdp-btn>\r\n    <drdp-btn class=\"mx-3\" [color]=\"'red'\" (click)=\"undoChanges()\">Undo Changes</drdp-btn>\r\n    <drdp-btn [disabled]=\"editForm.invalid\" (click)=\"submit()\">Save Edit</drdp-btn>\r\n  </div>\r\n</div>\r\n","import {\r\n  Component,\r\n  Inject,\r\n  OnInit,\r\n  QueryList,\r\n  ViewChildren,\r\n} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport {\r\n  combineLatest,\r\n  map,\r\n  mergeMap,\r\n  Observable,\r\n  Subscription,\r\n} from 'rxjs';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { StateService } from '@core/services/state.service';\r\nimport { AgencyService } from '@core/services/agency.service';\r\nimport { SiteService } from '@core/services/site.service';\r\nimport { RoleService } from '@core/services/role.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { IAgency } from '@core/interfaces/iagency';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { IState } from '@core/interfaces/istate';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { IStatusType } from '@core/interfaces/iuser';\r\nimport { ICounty } from '@core/interfaces/icounty';\r\nimport { RoleGroup } from '@core/enums/roles';\r\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\r\n\r\n@Component({\r\n  selector: 'drdp-edit-user',\r\n  templateUrl: './edit-user.component.html',\r\n  styleUrls: ['./edit-user.component.scss'],\r\n})\r\nexport class EditUserComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n  @ViewChildren('roleCheckbox') roleCheckboxes?: QueryList<MatCheckbox>;\r\n  roleForm: FormGroup | any;\r\n  userId: number = 0;\r\n  userDetails: any;\r\n  userAgencyList: IAgency[] = [];\r\n  userGranteeAgencyList: IAgency[] = [];\r\n  userSiteList: ISites[] = [];\r\n  userCountyList: ICounty[] = [];\r\n  agencyList: IAgency[] = [];\r\n  granteeAgencyList: IAgency[] = [];\r\n  siteList: ISites[] = [];\r\n  stateList: IState[] = [];\r\n  roleList: IRoles[] = [];\r\n  countyList: ICounty[] = [];\r\n  statusTypeList: IStatusType[] = [];\r\n  userStateId: number = 0;\r\n  selectedStateId: number = 0;\r\n  editForm: FormGroup | any;\r\n  accountStatusOptions: any[] = ['Active', 'Inactive'];\r\n  selectedAccountStatus: string = '';\r\n  emitData: any = {};\r\n  originalRoles: number[] = [];\r\n\r\n  selectStates = SelectType.States;\r\n  selectAgencies = SelectType.Agencies;\r\n  selectSites = SelectType.Sites;\r\n  selectCounties = SelectType.County;\r\n\r\n  getUserDetails$: Observable<any> | undefined;\r\n  updateAgencySiteSelection$: Observable<any> | undefined;\r\n\r\n  get emailName() {\r\n    return this.editForm.get('emailName');\r\n  }\r\n  get statusTypeId() {\r\n    return this.editForm.get('statusTypeId');\r\n  }\r\n  get roleIdsToAdd() {\r\n    return this.editForm.get('roleIdsToAdd');\r\n  }\r\n  get roleIdsToDelete() {\r\n    return this.editForm.get('roleIdsToDelete');\r\n  }\r\n  get agencyId() {\r\n    return this.editForm.get('agencyId');\r\n  }\r\n  get granteeAgencyId() {\r\n    return this.editForm.get('granteeAgencyId');\r\n  }\r\n  get contractorAgencyId() {\r\n    return this.editForm.get('contractorAgencyId');\r\n  }\r\n  get siteIdsToAdd() {\r\n    return this.editForm.get('siteIdsToAdd');\r\n  }\r\n  get siteIdsToDelete() {\r\n    return this.editForm.get('siteIdsToDelete');\r\n  }\r\n  get countyIdsToAdd() {\r\n    return this.editForm.get('countyIdsToAdd');\r\n  }\r\n  get countyIdsToDelete() {\r\n    return this.editForm.get('countyIdsToDelete');\r\n  }\r\n  get stateId() {\r\n    return this.editForm.get('stateId');\r\n  }\r\n  get siteIds() {\r\n    return this.editForm.get('siteIds');\r\n  }\r\n  get countyIds() {\r\n    return this.editForm.get('countyIds');\r\n  }\r\n  get roleGroup() {\r\n    return RoleGroup;\r\n  }\r\n  constructor(\r\n    private users: UserService,\r\n    private states: StateService,\r\n    private agencies: AgencyService,\r\n    private toast: ToastService,\r\n    public lookup: LookupService,\r\n    private sites: SiteService,\r\n    private roles: RoleService,\r\n    public dialogRef: MatDialogRef<EditUserComponent>,\r\n    private fb: FormBuilder,\r\n    @Inject(MAT_DIALOG_DATA) public user: any\r\n  ) {\r\n    dialogRef.disableClose = true;\r\n    this.roleForm = new FormGroup({});\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.userId = this.user.id;\r\n\r\n    this.getUserDetails$ = this.users.getAdminUserDetails(this.userId).pipe(\r\n      mergeMap((userDetails) =>\r\n        combineLatest({\r\n          agencies: this.agencies.getAgenciesByState([userDetails.stateId]),\r\n          granteeAgencies: this.agencies.getGranteeAgencies(),\r\n          sites: this.sites.getSitesByAgencyId(userDetails.agencyId),\r\n          states: this.states.getAllStates(),\r\n          roles: this.roles.getAllRoles(),\r\n          statusTypes: this.lookup.getAccountStatusTypes(),\r\n          counties: this.lookup.getCountyByStateId(userDetails.stateId),\r\n        }).pipe(map((selectData) => [userDetails, selectData]))\r\n      )\r\n    );\r\n\r\n    this.subscriptions.add(\r\n      this.getUserDetails$.subscribe((res) => {\r\n        this.userDetails = res[0];\r\n        this.selectedAccountStatus = this.userDetails.statusTypeName;\r\n        this.userAgencyList = [...res[1].agencies];\r\n        this.userGranteeAgencyList = [...res[1].granteeAgencies];\r\n        this.userSiteList = [...res[1].sites];\r\n        this.userSiteList = [...res[1].sites];\r\n        this.userCountyList = [...res[1].counties];\r\n        this.agencyList = res[1].agencies;\r\n        this.granteeAgencyList = res[1].granteeAgencies;\r\n        this.siteList = res[1].sites;\r\n        this.stateList = res[1].states;\r\n        this.roleList = res[1].roles;\r\n        this.statusTypeList = res[1].statusTypes;\r\n        this.countyList = res[1].counties;\r\n        this.processUserDetail();\r\n        this.initializeForms();\r\n      })\r\n    );\r\n  }\r\n\r\n  processUserDetail(): void {\r\n    this.userDetails.roleIds = this.userDetails.roles\r\n      ? this.userDetails.roles.split(',').map(Number)\r\n      : [];\r\n    this.originalRoles = this.userDetails.roles\r\n    ? this.userDetails.roles.split(',').map(Number)\r\n    : [];\r\n    this.userDetails.siteIds = this.userDetails.sites\r\n      ? this.userDetails.sites.split(',').map(Number)\r\n      : [];\r\n    this.userDetails.countyIds = this.userDetails.counties\r\n      ? this.userDetails.counties.split(',').map(Number)\r\n      : [];\r\n    let stateId = this.agencyList.filter(\r\n      (a) => (a.id = this.userDetails.agencyId)\r\n    )[0]?.stateId;\r\n    this.userStateId = stateId ? stateId : this.selectedStateId;\r\n  }\r\n\r\n  initializeForms(): void {\r\n    this.editForm = this.fb.group({\r\n      emailName: [\r\n        this.userDetails.emailName,\r\n        [Validators.required, Validators.email, Validators.maxLength(100)],\r\n      ],\r\n      statusTypeId: [this.userDetails.statusTypeId],\r\n      agencyId: [this.userDetails.agencyId, Validators.required],\r\n      granteeAgencyId: [this.userDetails.granteeAgencyId],\r\n      contractorAgencyId: [this.userDetails.contractorAgencyId],\r\n      roleIdsToAdd: [null, Validators.required],\r\n      siteIdsToAdd: [[]],\r\n      countyIdsToAdd: [[]],\r\n      roleIdsToDelete: [[]],\r\n      siteIdsToDelete: [[]],\r\n      countyIdsToDelete: [[]],\r\n      stateId: [this.userStateId, Validators.required],\r\n      siteIds: [this.userDetails.siteIds],\r\n      countyIds: [this.userDetails.countyIds]\r\n    });\r\n    if (this.userDetails.roleIds) {\r\n      this.roleIdsToAdd.setValue(this.userDetails.roleIds);\r\n\r\n      // Set up role checkbox form controls\r\n      this.roleList.forEach((role: any) => {\r\n        this.roleForm.addControl(role.id.toString(), new FormControl(false));\r\n        if (this.userDetails.roleIds.includes(role.id)) {\r\n          this.roleForm.get(role.id.toString()).patchValue(true);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  handleChosenAccountStatus(value: any): void {\r\n    if (value.id != this.userDetails.statusTypeId) {\r\n      this.statusTypeId.setValue(value.id);\r\n      this.selectedAccountStatus = value.id;\r\n      this.emitData.statusTypeName = value.name;\r\n    }\r\n  }\r\n\r\n  handleChosenState(state: any): void {\r\n    this.stateId.setValue(state?.id)\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    if (this.agencyId.value) this.siteIds.setValidators(Validators.required);\r\n    else this.siteIds.clearValidators();\r\n    this.siteIds.updateValueAndValidity();\r\n  }\r\n\r\n  handleChosenSites(sites: any): void {\r\n    const siteIds = sites?.map((s: any) => s.id);\r\n    this.siteIds.setValue(siteIds)\r\n    this.siteIdsToAdd.setValue(\r\n      this.arrayDiff(siteIds, this.userDetails.siteIds)\r\n    );\r\n    this.siteIdsToDelete.setValue(\r\n      this.arrayDiff(this.userDetails.siteIds, siteIds)\r\n    );\r\n  }\r\n\r\n  handleChosenCounties(counties: any): void {\r\n    var countyIds = counties.map((c: any) => c.id);\r\n    this.countyIds.setValue(countyIds);\r\n    this.countyIdsToAdd.setValue(\r\n      this.arrayDiff(countyIds, this.userDetails.countyIds)\r\n    );\r\n    this.countyIdsToDelete.setValue(\r\n      this.arrayDiff(this.userDetails.countyIds, countyIds)\r\n    );\r\n  }\r\n\r\n  handleChosenGranteeAgency(agency: any): void {\r\n    this.granteeAgencyId.setValue(agency?.id);\r\n  }\r\n\r\n  handleChosenContractorAgency(agency: any): void {\r\n    this.contractorAgencyId.setValue(agency?.id);\r\n  }\r\n\r\n  handleChosenRoles(role: any): void {\r\n    if (this.roleIdsToAdd.value?.includes(role)) {\r\n      const i = this.roleIdsToAdd.value?.indexOf(role);\r\n      const removeId = this.roleIdsToAdd.value.splice(i, 1);\r\n      this.roleIdsToDelete.value\r\n        ? this.roleIdsToDelete.value.push(removeId)\r\n        : this.roleIdsToDelete.setValue([removeId]);\r\n\r\n      if (this.roleIdsToAdd.value.length <= 0) {\r\n        this.roleIdsToAdd.setValue(null);\r\n      }\r\n    } else if (this.roleIdsToDelete.value?.includes(role)) {\r\n      const i = this.roleIdsToDelete.value.indexOf(role);\r\n      const addId = this.roleIdsToDelete.value.splice(i, 1);\r\n      this.roleIdsToAdd.value\r\n        ? this.roleIdsToAdd.value.push(addId)\r\n        : this.roleIdsToAdd.setValue([addId]);\r\n    } else {\r\n      this.roleIdsToAdd.value\r\n        ? this.roleIdsToAdd.value.push(role)\r\n        : this.roleIdsToAdd.setValue([role]);\r\n    }\r\n  }\r\n\r\n  resetRoleCheckboxes(): void {\r\n    this.roleCheckboxes?.forEach((roleCheckbox: MatCheckbox) => {\r\n      const roleValue = roleCheckbox.value;\r\n      const isChecked = this.originalRoles.includes(parseInt(roleValue));\r\n      const formControl = this.roleForm.get(roleValue.toString());\r\n  \r\n      if (isChecked) {\r\n        formControl.setValue(true);\r\n      } else {\r\n        formControl.setValue(false);\r\n      }\r\n    });\r\n  }\r\n\r\n  undoChanges(): void {\r\n    this.stateId.setValue(this.userStateId);\r\n    this.emailName.setValue(this.userDetails.emailName);\r\n    this.statusTypeId.setValue(this.userDetails.statusTypeId);\r\n    this.agencyId.setValue(this.userDetails.agencyId);\r\n    this.granteeAgencyId.setValue(this.userDetails.granteeAgencyId ?? null);\r\n    this.contractorAgencyId.setValue(this.userDetails.contractorAgencyId ?? null);\r\n    this.roleIdsToAdd.setValue(this.userDetails.roleIds ?? null);\r\n    this.roleIdsToDelete.setValue([]);\r\n    this.siteIds.setValue(this.userDetails.siteIds);\r\n    this.siteIdsToAdd.setValue([]);\r\n    this.siteIdsToDelete.setValue([]);\r\n    this.countyIds.setValue(this.userDetails.countyIds);\r\n    this.agencyList = this.userAgencyList;\r\n    this.siteList = this.userSiteList;\r\n    this.countyList = this.userCountyList;\r\n    this.stateList = [...this.stateList]; // Not too proud of this one but it works...\r\n    this.selectedAccountStatus = this.userDetails.statusTypeName;\r\n    var stateId = this.agencyList.filter(\r\n      (a) => (a.id = this.userDetails.agencyId)\r\n    )[0].stateId;\r\n    this.userStateId = stateId ? stateId : this.selectedStateId;\r\n    this.resetRoleCheckboxes();\r\n  }\r\n\r\n  processFormData(): any {\r\n    const payload: any = {};\r\n    const formData = this.editForm.value;\r\n\r\n    Object.entries(formData).map(([key, val]) => {\r\n      if (Array.isArray(formData[key]) && formData[key].length > 0) {\r\n        payload[key] = formData[key].join(', ');\r\n      } else if (\r\n        !Array.isArray(formData[key]) &&\r\n        val != this.userDetails[key]\r\n      ) {\r\n        payload[key] = formData[key];\r\n      }\r\n    });\r\n    payload.agencyId = this.agencyId.value;\r\n    payload.granteeAgencyId = this.granteeAgencyId.value;\r\n    payload.contractorAgencyId = this.contractorAgencyId.value;\r\n\r\n    return payload;\r\n  }\r\n\r\n  processEmitData(): void {\r\n    if (\r\n      this.roleIdsToAdd.value.length > 0 ||\r\n      this.roleIdsToDelete.value.length > 0\r\n    ) {\r\n      var roleIds: any = [];\r\n      roleIds = this.userDetails.roleIds.concat(this.roleIdsToAdd.value);\r\n      roleIds = this.arrayDiff(roleIds, this.roleIdsToDelete.value);\r\n\r\n      var roleNames: string = '';\r\n      this.roleList.forEach((r) => {\r\n        if (roleIds.includes(r.id)) roleNames += r.roleName + ', ';\r\n      });\r\n      this.emitData.roleName = roleNames.replace(/,\\s*$/, '');\r\n    }\r\n\r\n    if (this.editForm.value.emailName != this.userDetails.emailName)\r\n      this.emitData.emailName = this.editForm.value.emailName;\r\n  }\r\n\r\n  submit(): void {\r\n    if (this.editForm.invalid) {\r\n      this.toast.warn('Please complete the form before submitting.');\r\n      return;\r\n    }\r\n    const payload = this.processFormData();\r\n    if (Object.keys(payload).length == 0) {\r\n      this.toast.error('No changes have been made');\r\n    } else {\r\n      payload.userId = this.userDetails.id;\r\n      this.users.adminUpdateUser(payload).subscribe((success) => {\r\n        if (success) {\r\n          this.toast.success('User updated');\r\n          this.processEmitData();\r\n          this.dialogRef.close(this.emitData);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  arrayDiff(arr1: any[], arr2: any[]): any[] {\r\n    return arr1.filter((item) => arr2.indexOf(item) == -1);\r\n  }\r\n\r\n  arrayIncludes(arr1: any[], arr2: any[]): any[] {\r\n    return arr1.filter((item) => arr2.includes(item));\r\n  }\r\n\r\n  initializeCheckbox(roles: IRoles) {\r\n    return this.userDetails.roleIds.some(\r\n      (roleId: number) => roleId === roles.id\r\n    );\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div>\r\n    <div class=\"flex justify-between border-b\">\r\n        <h1 class=\"text-[25px] font-bold\">{{modalHeader}}</h1>\r\n        <i mat-button mat-dialog-close class=\"text-drdpblue-300 cursor-pointer uil uil-times-circle\"></i>\r\n    </div>\r\n\r\n    <div mat-dialog-content>\r\n        <div class=\"content\">\r\n            <p *ngIf=\"!createPassword; else passwordForm\" class=\"pt-5 pb-3\">\r\n              Are you sure you want to reset this user's password?\r\n            </p>\r\n            <ng-template #passwordForm>\r\n                <form [formGroup]=\"resetPwForm\">\r\n                    <div class=\"flex flex-row justify-center\">\r\n                      <div>\r\n                          <div\r\n                            class=\"flex my-6 border rounded-lg border-drdpblue-300 shadow-drdpblue-100\">\r\n                            <div\r\n                              class=\"rounded-l basis-1/12 flex items-center justify-center bg-drdpblue-300 text-white\">\r\n                                <i class=\"uil uil-lock\"></i>\r\n                            </div>\r\n                            <input\r\n                              class=\"form-control basis-11/12 appearance-none w-5/6 py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline\"\r\n                              maxlength=\"250\"\r\n                              placeholder=\"Enter new password\"\r\n                              [type]=\"inputType\"\r\n                              formControlName=\"newPassword\"\r\n                              matTooltip=\"{{ passwordRequirements.join('\\n') }}\"\r\n                              [matTooltipDisabled]=\"resetPwForm.controls['newPassword'].valid\"\r\n                              matTooltipPosition = \"left\"\r\n                              (input)=\"tooltip.show()\"\r\n                              #tooltip=\"matTooltip\">\r\n                            <div class=\"items-center flex\">\r\n                              <i class=\"mx-1 uil\"\r\n                                (click)=\"hidden = !hidden\"\r\n                                [ngClass]=\"{'uil-eye-slash': hidden, 'uil-eye': !hidden }\">\r\n                              </i>\r\n                            </div>\r\n                          </div>\r\n                          <div\r\n                            class=\"flex border rounded-lg border-drdpblue-300 shadow-drdpblue-100\">\r\n                            <div class=\"rounded-l basis-1/12 flex items-center justify-center bg-drdpblue-300 text-white\">\r\n                              <i class=\"uil uil-lock\"></i>\r\n                            </div>\r\n                            <input\r\n                              class=\"form-control basis-11/12 appearance-none w-5/6 py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline\"\r\n                              maxlength=\"250\"\r\n                              placeholder=\"Confirm new password\"\r\n                              [type]=\"confirmInputType\"\r\n                              formControlName=\"confirmPassword\">\r\n                            <div class=\"items-center flex\">\r\n                              <i\r\n                                class=\"mx-1 uil\"\r\n                                (click)=\"confirmHidden = !confirmHidden\"\r\n                                [ngClass]=\"{'uil-eye-slash': confirmHidden, 'uil-eye': !confirmHidden }\">\r\n                              </i>\r\n                            </div>\r\n                          </div>\r\n                          <span *ngIf=\"resetPwForm.controls['newPassword'].touched && resetPwForm.controls['confirmPassword'].errors?.passwordMismatch\"\r\n                            class=\"text-center text-sm text-red-700\">\r\n                            Passwords do not match\r\n                          </span>\r\n                          <div *ngIf=\"resetFailed\" class=\" bg-[#F3DEDE] py-1 text-center\">\r\n                            <p>Failed to reset.</p>\r\n                          </div>\r\n                      </div>\r\n                    </div>\r\n                  </form>\r\n            </ng-template>\r\n        </div>\r\n    </div>\r\n    <div class=\"spacer\"></div>\r\n    <div mat-dialog-actions class=\"flex\">\r\n        <drdp-btn *ngIf=\"!createPassword\" color=\"blue\" mat-button mat-dialog-close (click)=\"resetConfirm()\" cdkFocusInitial>\r\n            Reset and Confirm\r\n        </drdp-btn>\r\n        <drdp-btn class=\"mx-3\" *ngIf=\"!createPassword; else changePassword\" color=\"blue\" mat-button (click)=\"resetCreate()\" cdkFocusInitial>\r\n            Reset and Create New\r\n        </drdp-btn>\r\n        <ng-template #changePassword>\r\n            <drdp-btn color=\"blue\" mat-button mat-dialog-close (click)=\"updatePassword()\"\r\n                [disabled]=\"resetPwForm.invalid\" cdkFocusInitial>\r\n                Change Password\r\n            </drdp-btn>\r\n        </ng-template>\r\n        <drdp-btn color=\"cancel\" class=\"ml-3\" mat-button mat-dialog-close>\r\n            Cancel\r\n        </drdp-btn>\r\n    </div>\r\n</div>\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { Subscription, take } from 'rxjs';\r\nimport { matchPassword } from '@core/validators/auth.validator'\r\nimport { EncryptionService } from '@core/services/encryption.service';\r\n@Component({\r\n  selector: 'drdp-reset-password',\r\n  templateUrl: './reset-password.component.html',\r\n  styleUrls: ['./reset-password.component.scss']\r\n})\r\nexport class ResetPasswordComponent implements OnInit {\r\n  private subscriptions = new Subscription();\r\n\r\n  createPassword: boolean = false;\r\n  modalHeader: string = 'Reset Password?';\r\n  resetPwForm: FormGroup | any;\r\n  hidden: boolean = true;\r\n  resetFailed = false;\r\n  confirmHidden: boolean = true;\r\n  passwordRequirements: string[] = [\"- 8 characters in length\",\r\n                                    \"- Contain at least one capital letter\",\r\n                                    \"- Contain at least one lowercase letter\",\r\n                                    \"- Contain at least one number\",\r\n                                    \"- Contain at least 1 special character (@,$,%,*,!)\"];\r\n\r\n  get newPassword() { return this.resetPwForm.get('newPassword'); }\r\n  get confirmPassword() { return this.resetPwForm.get('confirmPassword'); }\r\n  get inputType() { return this.hidden ? \"password\" : \"text\"; }\r\n  get confirmInputType() { return this.confirmHidden ? \"password\" : \"text\"; }\r\n\r\n\r\n  constructor(\r\n    private auth: AuthService,\r\n    private fb: FormBuilder,\r\n    private toast: ToastService,\r\n    public dialogRef: MatDialogRef<ResetPasswordComponent>,\r\n    @Inject(MAT_DIALOG_DATA) public userId: number,\r\n    private encryptionService: EncryptionService) {\r\n      dialogRef.disableClose = true;\r\n    }\r\n\r\n  ngOnInit(): void {\r\n    this.resetPwForm = this.fb.group({\r\n      newPassword: ['', [\r\n          Validators.required,\r\n          Validators.minLength(8),\r\n          this.patternValidator(/\\d/, { hasNumber: false }),\r\n          this.patternValidator(/[A-Z]/, { hasCapitalCase: false }),\r\n          this.patternValidator(/[a-z]/, { hasSmallCase: false}),\r\n          this.patternValidator(/[!@#\\$%\\^&\\*`~]/, { hasSpecialCharacters: false }),\r\n        ]],\r\n      confirmPassword: ['', [Validators.required]],\r\n    }, { validator: matchPassword('newPassword', 'confirmPassword') });\r\n  }\r\n\r\n  patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n      if (!control.value) {\r\n        // if control is empty return no error\r\n        return null;\r\n      }\r\n      // test the value of the control against the regexp supplied\r\n      const valid = regex.test(control.value);\r\n      // if true, return no error (no error), else return error passed in the second parameter\r\n      return valid ? null : error;\r\n    };\r\n  }\r\n\r\n  resetConfirm(): void {\r\n    this.subscriptions.add(this.auth.adminResetPassword(this.userId).subscribe(success => {\r\n      if (!success) {\r\n        this.toast.error(\"Could not reset password\")\r\n      } else {\r\n        this.toast.success(\"Password has been reset\")\r\n      }\r\n      this.dialogRef.close(success);\r\n    }));\r\n  }\r\n\r\n  resetCreate(): void {\r\n    this.createPassword = true;\r\n    this.modalHeader = \"Change Password\"\r\n  }\r\n\r\n  updatePassword(): void {\r\n    const payload = {\r\n      userId: this.userId,\r\n      oldPassword: this.encryptionService.encryptPassword(\"Reset\"),\r\n      newPassword: this.encryptionService.encryptPassword(this.newPassword.value),\r\n      isAdminUpdate: true,\r\n    }\r\n\r\n    this.auth.updatePassword(payload, 'Password has been updated.').pipe(take(1)).subscribe((success) => {\r\n\r\n    });\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { DrdpLayoutComponent } from '../drdp-layout/drdp-layout.component';\r\nimport { UserRolesComponent } from './user-roles/user-roles.component';\r\nimport { FeaturesComponent } from './features/features.component';\r\nimport { PermissionsComponent } from './permissions/permissions.component';\r\nimport { AuthGuard } from '@core/guards/auth.guard';\r\nimport { LoginAuditsComponent } from './login-audits/login-audits.component';\r\nimport { UserAccountComponent } from './user-account/user-account.component';\r\nimport { GlobalAdminComponent } from './global-admin/global-admin.component';\r\nimport { PermissionGuard } from '@core/guards/permission.guard';\r\nimport { Permission } from '@core/enums/permissions';\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: 'accounts',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      {\r\n        path: 'users',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.SearchAccounts },\r\n        component: UserAccountComponent,\r\n      },\r\n      {\r\n        path: 'user-roles',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewUserRoles },\r\n        component: UserRolesComponent,\r\n      },\r\n      {\r\n        path: 'features',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewFeatures },\r\n        component: FeaturesComponent,\r\n      },\r\n      {\r\n        path: 'permissions',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewPermissions },\r\n        component: PermissionsComponent,\r\n      },\r\n      {\r\n        path: 'login-audits',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewLoginAudits },\r\n        component: LoginAuditsComponent,\r\n      },\r\n      {\r\n        path: 'global-admin',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewGlobalAdmin },\r\n        component: GlobalAdminComponent,\r\n      },\r\n    ],\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class AccountsRoutingModule {}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ISites } from '@core/interfaces/isites';\r\nimport { Subscription } from 'rxjs';\r\nimport { ISelectable } from '@core/interfaces/iselectable';\r\nimport { UserService } from '@core/services/user.service';\r\nimport { IModalEmitData } from '@core/interfaces/imodal';\r\nimport { ViewUserComponent } from '../user-account/view-user/view-user.component';\r\nimport { EditUserComponent } from './edit-user/edit-user.component';\r\nimport { ResetPasswordComponent } from './reset-password/reset-password.component';\r\nimport { setIconDisplayObject } from '@core/services/helper.service';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { IAdminSearchUsersRequest } from '@core/interfaces/iuser';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { IRoles } from '@core/interfaces/iroles';\r\nimport { ToastService } from '@core/services/toast.service';\r\n\r\n@Component({\r\n  selector: 'drdp-global-admin',\r\n  templateUrl: './global-admin.component.html',\r\n  styleUrls: ['./global-admin.component.scss']\r\n})\r\nexport class GlobalAdminComponent implements OnInit {\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('statusSelect') statusSelect: FilterSelectComponent | undefined;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  private subscriptions = new Subscription();\r\n\r\n  title = \"Global Admin\"\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n  pageIndex:number = 0;\r\n  pageSize:number = 10;\r\n  totalData = 0;\r\n  tableData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  userSearch: FormGroup | any;\r\n  clearSharedDropdowns = false;\r\n  siteList: ISites[] = [];\r\n  searchString: string = '';\r\n  searchObj: Partial<IAdminSearchUsersRequest> = {};\r\n  user = this.auth.getCurrentUser();\r\n\r\n  tableColumns = [\r\n    { columnDef: 'firstName', header: 'First Name', type: 'text' },\r\n    { columnDef: 'lastName', header: 'Last Name', type: 'text' },\r\n    { columnDef: 'emailName', header: 'Email', type: 'text' },\r\n    { columnDef: 'roleName', header: 'Roles', type: 'text' },\r\n    { columnDef: 'statusTypeName', header: 'Account Status', type: 'text' },\r\n    { columnDef: 'preview',  icon: 'user', type: 'icon', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' },\r\n    { columnDef: 'editAccount',  icon: 'pen', type: 'icon', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' },\r\n    { columnDef: 'resetPassword', icon: 'key-skeleton', type: 'icon', colorClass: 'text-drdpblue-300', cursorClass: 'cursor-pointer' }\r\n  ];\r\n\r\n  get searchStr() {\r\n    return this.userSearch.get('searchStr');\r\n  }\r\n  get agencyId() {\r\n    return this.userSearch.get('agencyId');\r\n  }\r\n  get stateId() {\r\n    return this.userSearch.get('stateId');\r\n  }\r\n  get siteIds() {\r\n    return this.userSearch.get('siteIds');\r\n  }\r\n  get userStatusIds() {\r\n    return this.userSearch.get('userStatusIds');\r\n  }\r\n  get roleIds() {\r\n    return this.userSearch.get('roleIds');\r\n  }\r\n\r\n  constructor(\r\n    public modal: MatDialog,\r\n    private users: UserService,\r\n    private auth: AuthService,\r\n    private fb: FormBuilder,\r\n    private toast: ToastService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n    this.paginator._intl.itemsPerPageLabel = ''\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.userSearch = this.fb.group({\r\n      searchStr: [null],\r\n      agencyId: [null],\r\n      stateId: [null],\r\n      siteIds: [null],\r\n      userStatusIds: [null],\r\n      roleIds: [null]\r\n    });\r\n\r\n    this.userSearch.patchValue({\r\n      stateId: this.auth.getUserStateId(),\r\n      agencyId: this.auth.getCurrentUser().agencyId,\r\n      siteIds: this.auth.getCurrentUser().sites.map((site) => site.siteId)\r\n    });\r\n\r\n    this.searchObj = this.userSearch.value;\r\n    this.searchObj.pageIndex = 1;\r\n    this.searchObj.itemsPerPage = 10;\r\n  }\r\n\r\n  getUsers(): void {\r\n    this.subscriptions.add(this.users.globalSearch(this.searchObj as IAdminSearchUsersRequest).subscribe((res: any) => {\r\n      res.items = res.items.map((data: any) => ({\r\n        ...data,\r\n        displayIcons: setIconDisplayObject(this.tableColumns, data)\r\n      }));\r\n      this.dataSource = new MatTableDataSource(res.items);\r\n      this.totalData = res.totalData\r\n      this.tableData = res.items;\r\n    }));\r\n  }\r\n\r\n  chosenState(state: ISelectable): void {\r\n    this.stateId.setValue(state?.id);\r\n  }\r\n\r\n  chosenAgency(agency: ISelectable): void {\r\n    this.agencyId.setValue(agency?.id);\r\n\r\n    if (this.auth.getCurrentUser().agencyId !== this.agencyId.value) {\r\n      this.siteIds.setValue(null);\r\n    }\r\n  }\r\n\r\n  chosenSites(sites: ISites[]): void {\r\n    if (!sites) {\r\n      this.siteIds.setValue(null);\r\n      return;\r\n    }\r\n    this.siteIds.setValue(sites.map((e: ISites) => e.id));\r\n  }\r\n\r\n  handleStatus(event: any): void {\r\n    if (!event.length) {\r\n      this.userStatusIds.setValue(null);\r\n      return;\r\n    }\r\n    this.userStatusIds.setValue(event.map((e: any) => e.id));\r\n  }\r\n\r\n  handleroles(event: IRoles[]): void {\r\n    if (!event.length) {\r\n      this.roleIds.setValue(null);\r\n      return;\r\n    }\r\n    this.roleIds.setValue(event.map((e: any) => e.id));\r\n  }\r\n\r\n  clear(): void {\r\n    this.clearSharedDropdowns = true;\r\n    this.dataSource = new MatTableDataSource();\r\n    this.userSearch.reset();\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.stateId.setValue(null);\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(null);\r\n    }\r\n  }\r\n\r\n  search(): void {\r\n    this.searchObj = this.userSearch.value;\r\n    this.searchObj.itemsPerPage = this.paginator.pageSize;\r\n    this.searchObj.pageIndex = this.paginator.pageIndex;\r\n    this.getUsers();\r\n  }\r\n\r\n  pageChange(): void {\r\n    if (this.totalData > 0) {\r\n      if (this.pageSize !== this.paginator.pageSize) {\r\n        this.pageSize = this.paginator.pageSize;\r\n        this.searchObj.itemsPerPage = this.pageSize;\r\n      }\r\n\r\n      if (this.pageIndex !== this.paginator.pageIndex) {\r\n        this.pageIndex = this.paginator.pageIndex;\r\n        this.searchObj.pageIndex = this.pageIndex + 1;\r\n      }\r\n\r\n      this.getUsers();\r\n    }\r\n  }\r\n\r\n  onIconClick(event:any): void {\r\n    switch(event.type) {\r\n      case 'preview':\r\n        this.openPreviewModal(event);\r\n        break;\r\n      case 'editAccount':\r\n        this.openEditModal(event);\r\n        break;\r\n      default:\r\n        this.openResetPasswordModal(event.data.id);\r\n        break;\r\n    }\r\n  }\r\n\r\n  openPreviewModal(event: IModalEmitData): void {\r\n    const modalRef = this.modal.open(ViewUserComponent, { data: event ? event : undefined });\r\n    this.subscriptions.add(modalRef.afterClosed().subscribe());\r\n  }\r\n\r\n  openEditModal(event: any): void {\r\n    if (this.user.accessLevel < event.data.accessLevel) {\r\n      this.toast.error(\"You do not have permission to edit this user's information. Please contact your Lead Agency Administrator for assistance.\");\r\n      return;\r\n    }\r\n    else {\r\n      const modalRef = this.modal.open(EditUserComponent, { data: event.data ? event.data : undefined});\r\n      this.subscriptions.add(modalRef.afterClosed().subscribe((res) => {\r\n        if (Object.keys(res).length > 0) {\r\n          Object.entries(res).map(([key, val]) => {\r\n            this.tableData[event.index][key] = res[key];\r\n          })\r\n          this.dataSource = new MatTableDataSource(this.tableData);\r\n        }\r\n      }));\r\n    }\r\n  }\r\n\r\n  openResetPasswordModal(userId: number): void {\r\n    const modalRef = this.modal.open(ResetPasswordComponent, { data: userId ? userId : undefined });\r\n    this.subscriptions.add(modalRef.afterClosed().subscribe());\r\n  }\r\n\r\n  onDestroy(): void {\r\n    this.subscriptions.unsubscribe();\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n    <div class=\"flex flex-row\">\r\n      <div class=\"basis-1/2\">\r\n        <drdp-title [title]=\"title\"></drdp-title>\r\n      </div>\r\n    </div>\r\n\r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n      <drdp-container color=\"lightBlue\">\r\n        <form class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-8\" [formGroup]=\"userSearch\"\r\n          (ngSubmit)=\"search()\">\r\n          <div class=\"self-start my-auto\">\r\n            <label class=\"font-bold\">Search by:</label>\r\n            <div class=\"border-b border-black\">\r\n              <input matInput placeholder=\"Name or Email\" formControlName=\"searchStr\"\r\n                class=\"w-full bg-drdpblue-200 border-b border-black focus:outline-none focus:border-drdpblue-300\" />\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-state #stateSelect [initialStateId]=\"stateId.value\" (state)=\"chosenState($event)\" [clear]=\"clearSharedDropdowns\">\r\n            </drdp-select-state>\r\n          </div>\r\n          \r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-agency #agencySelect [initialAgencyId]=\"agencyId.value\" (agency)=\"chosenAgency($event)\"\r\n              [stateId]=\"stateId.value\" [clear]=\"clearSharedDropdowns\">\r\n            </drdp-select-agency>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-site [initialSiteIds]=\"siteIds.value\" (site)=\"chosenSites($event)\" [agencyId]=\"agencyId.value\"\r\n              [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearSharedDropdowns\">\r\n            </drdp-select-site>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-status [initialStatusId]=\"userStatusIds.value\" [disabled]=\"false\" (status)=\"handleStatus($event)\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearSharedDropdowns\">\r\n            </drdp-select-status>\r\n          </div>\r\n\r\n          <div class=\"col-span-1 my-auto\">\r\n            <drdp-select-role label=\"Role\" [initialRolesIds]=\"roleIds.value\" [multiSelect]=\"true\" [multiSelectInitVals]=\"true\" [clear]=\"clearSharedDropdowns\" (role)=\"handleroles($event)\">\r\n            </drdp-select-role>\r\n          </div>\r\n\r\n          <div class=\"lg:col-span-2 flex flex-row md:flex-col-1 gap-5 lg:flex-row lg:justify-start lg:items-end\">\r\n            <div class=\"mb-0 md:mb-2 lg:mb-0\">\r\n              <drdp-btn type=\"submit\" class=\"lg:mr-2\">Search</drdp-btn>\r\n            </div>\r\n            <div>\r\n              <drdp-btn color=\"outline\" type=\"button\" (click)=\"clear()\">Clear</drdp-btn>\r\n            </div>\r\n          </div>\r\n        </form>\r\n      </drdp-container>\r\n      <div class=\"p-5\">\r\n        <drdp-add-edit-table\r\n          [dataSource]=\"dataSource\"\r\n          [tableData]=\"tableData\"\r\n          [columns]=\"tableColumns\"\r\n          (iconActionItem)=\"onIconClick($event)\">\r\n        </drdp-add-edit-table>\r\n      </div>\r\n    </drdp-container>\r\n    <mat-paginator\r\n      [pageSizeOptions]=\"pageSizeOptions\"\r\n      [pageSize]=\"pageSize\"\r\n      [length]=\"totalData\"\r\n      [pageIndex]=\"pageIndex\"\r\n      (page)=\"pageChange()\">\r\n    </mat-paginator>\r\n</div>","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\nimport { FeaturesComponent } from './features/features.component'\r\nimport { UserRolesComponent } from './user-roles/user-roles.component'\r\nimport { PermissionsComponent } from './permissions/permissions.component'\r\nimport { PermissionsManagmentComponent } from './permissions/permissions-management/permissions-management.component'\r\nimport { AccountsRoutingModule } from './accounts-routing.module'\r\nimport { SharedModule } from '@shared/shared.module'\r\nimport { FormsModule,ReactiveFormsModule } from '@angular/forms'\r\nimport { CoreModule } from '@core/core.module'\r\nimport { AddEditRolesComponent } from './user-roles/add-edit-roles/add-edit-roles.component'\r\nimport { DeleteRolesComponent } from './user-roles/delete-roles/delete-roles.component'\r\nimport { FeaturesTabsComponent } from './features/features-tabs-add-edit/features-tabs.component'\r\nimport { LoginAuditsComponent } from './login-audits/login-audits.component'\r\nimport { PermissionsFilterComponent } from './permissions/permissions-filter/permissions-filter.component';\r\nimport { UserAccountComponent } from './user-account/user-account.component';\r\nimport { AddEditUserAccountsComponent } from './user-account/add-edit-user-accounts/add-edit-user-accounts.component';\r\nimport { ViewUserComponent } from './user-account/view-user/view-user.component';\r\nimport { FeaturesAddEditComponent } from './features/features-add-edit/features-add-edit.component';\r\nimport { SuperFeaturesEditComponent } from './features/super-features-edit/super-features-edit.component';\r\nimport { SuperFeaturesAddComponent } from './features/super-features-add/super-features-add.component';\r\nimport { GlobalAdminComponent } from './global-admin/global-admin.component';\r\nimport { EditUserComponent } from './global-admin/edit-user/edit-user.component'\r\nimport { PipesModule } from '@core/pipes/pipes.module';\r\nimport { ResetPasswordComponent } from './global-admin/reset-password/reset-password.component'\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FeaturesComponent,\r\n    UserRolesComponent,\r\n    PermissionsComponent,\r\n    PermissionsManagmentComponent,\r\n    AddEditRolesComponent,\r\n    DeleteRolesComponent,\r\n    PermissionsFilterComponent,\r\n    LoginAuditsComponent,\r\n    FeaturesTabsComponent,\r\n    UserAccountComponent,\r\n    AddEditUserAccountsComponent,\r\n    ViewUserComponent,\r\n    FeaturesAddEditComponent,\r\n    SuperFeaturesEditComponent,\r\n    SuperFeaturesAddComponent,\r\n    GlobalAdminComponent,\r\n    EditUserComponent,\r\n    ResetPasswordComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    AccountsRoutingModule,\r\n    SharedModule,\r\n    FormsModule,\r\n    CoreModule,\r\n    ReactiveFormsModule,\r\n    PipesModule.forRoot()\r\n  ],\r\n  providers: [],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class AccountsModule {}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <drdp-title title=\"Roles and Permissions\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex place-content-between py-3\">\r\n    <drdp-container\r\n      color=\"whiteDash\"\r\n      class=\"h-31 w-40\"\r\n      *ngFor=\"let info of downloadFile\"\r\n    >\r\n      <a class=\"flex-col text-center w-full pb-4\" (click)=\"downloadReport()\">\r\n        <i class=\"col-md-4 text-drdpblue-300 text-[60px] {{ info.icon }}\"></i>\r\n        <p class=\"text-[15px]\">{{ info.label }}</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">{{ info.description }}</p>\r\n      </a>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core'\r\nimport { RouterModule, Routes } from '@angular/router'\r\nimport { Permission } from '@core/enums/permissions'\r\nimport { AuthGuard } from '@core/guards/auth.guard'\r\nimport { PermissionGuard } from '@core/guards/permission.guard'\r\nimport { DrdpLayoutComponent } from '@views/user/drdp-layout/drdp-layout.component'\r\n\r\nimport { PermissionAndRolesComponent } from './permission-and-roles/permission-and-roles.component'\r\nimport { UploadTemplatesComponent } from './upload-templates/upload-templates.component'\r\nimport { CompanionDocumentsComponent } from './companion-documents/companion-documents.component'\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: '',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      { \r\n        path: 'permissionAndRoles', \r\n        component: PermissionAndRolesComponent \r\n      },\r\n      { \r\n        path: 'uploadTemplates',\r\n        component: UploadTemplatesComponent \r\n      },\r\n      { \r\n        path: 'companionDocuments',\r\n        component: CompanionDocumentsComponent \r\n      },\r\n    ],\r\n  },\r\n]\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class ResourceRoutingModule {}\r\n","import { Component, OnInit, inject } from '@angular/core'\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { environment } from '@env/environment';\r\n\r\n@Component({\r\n  selector: 'drdp-permission-and-roles',\r\n  templateUrl: './permission-and-roles.component.html',\r\n  styleUrls: ['./permission-and-roles.component.scss'],\r\n})\r\nexport class PermissionAndRolesComponent implements OnInit {\r\n  private storageUrl = environment.storageUrl;\r\n  toastService = inject(ToastService);\r\n  downloadFile = [\r\n    {\r\n      label: 'Roles & Permissions',\r\n      icon: 'uil uil-file-download',\r\n      description: 'Download',\r\n    },\r\n  ]\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadReport(): void {\r\n    const fileUrl = `${this.storageUrl}drdp-rebuild-resources/DRDP Online Roles and Permissionsv15.pdf`;\r\n    this.fetchAndDownloadFile(fileUrl, 'DRDP Roles and Permissions');\r\n  }\r\n\r\n  private fetchAndDownloadFile(fileUrl: string, fileName: string) {\r\n    const link = document.createElement('a');\r\n    link.style.display = 'none';\r\n\r\n    fetch(fileUrl)\r\n      .then(response => {\r\n        if (!response.ok) {\r\n          this.toastService.error('Failed to download file.');\r\n        }\r\n        return response.blob();\r\n      })\r\n      .then(blob => {\r\n        const url = window.URL.createObjectURL(blob);\r\n        link.href = url;\r\n        link.download = fileName;\r\n        link.click();\r\n        window.URL.revokeObjectURL(url);\r\n      })\r\n      .catch(error => {\r\n        this.toastService.error('Failed to download file.');\r\n      })\r\n      .finally(() => {\r\n        document.body.removeChild(link);\r\n      });\r\n\r\n    document.body.appendChild(link);\r\n  }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UploadTypes } from '@core/enums/upload-types';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { DownloadTemplateService } from '@core/services/downloadTemplate.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-upload-templates',\r\n  templateUrl: './upload-templates.component.html',\r\n  styleUrls: ['./upload-templates.component.scss'],\r\n})\r\nexport class UploadTemplatesComponent implements OnInit {\r\n  stateId?: number;\r\n  stateCode = '';\r\n\r\n  public get uploadTypes() { return UploadTypes }\r\n  constructor(\r\n    private downloadTemplateService: DownloadTemplateService,\r\n    private authService: AuthService,\r\n    private toast: ToastService,\r\n    public dialog: MatDialog\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.stateId = this.authService.getUserStateId();\r\n    this.stateCode = this.authService.getUserStateCode();\r\n  }\r\n\r\n  downloadTemplate(uploadType: number) {\r\n    let fileURL = '';\r\n    if (this.stateId) {\r\n      this.downloadTemplateService.downloadTemplate(this.stateId, uploadType, { responseType: 'blob', observe: 'response' }).pipe(\r\n        take(1),\r\n        tap((res: any) => {\r\n          if (res) {\r\n            let fileName = this.getFileName(uploadType);            \r\n            let link = document.createElement('a');\r\n            link.href = window.URL.createObjectURL(res.body);\r\n            link.download = fileName;\r\n            link.click();\r\n          } else {\r\n            this.toast.error('Template Unavailable')\r\n          }\r\n        })\r\n      ).subscribe();\r\n    }\r\n  }\r\n\r\n  getFileName(uploadType: number): string {\r\n    if (uploadType === this.uploadTypes.user) return `User-Upload-${this.stateCode}.xlsx`;\r\n    if (uploadType === this.uploadTypes.class) return `Class-Upload-${this.stateCode}.xlsx`;\r\n    if (uploadType === this.uploadTypes.student) return `All-Instrument-Upload-${this.stateCode}.xlsx`;\r\n    return 'Upload.xlsx'\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <drdp-title title=\"Upload Templates\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex flex-wrap gap-4 py-3\">\r\n    <drdp-container color=\"whiteDash\" class=\"h-31 w-40\">\r\n      <button (click)=\"downloadTemplate(uploadTypes.user)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Download Users Templates\">Upload Users</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n\r\n    <drdp-container color=\"whiteDash\" class=\"h-31 w-40\">\r\n      <button (click)=\"downloadTemplate(uploadTypes.class)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Download Class Templates\">Upload Class</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n\r\n    <drdp-container color=\"whiteDash\" class=\"h-31 w-40\">\r\n      <button (click)=\"downloadTemplate(uploadTypes.student)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Download Child Templates\">Upload Child</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CompanionDocuments, UploadTypes } from '@core/enums/upload-types';\r\nimport { ICompanionDocument } from '@core/interfaces/icompanion-document';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { environment } from '@env/environment';\r\nimport { take, tap } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-companion-documents',\r\n  templateUrl: './companion-documents.component.html',\r\n  styleUrls: ['./companion-documents.component.scss']\r\n})\r\nexport class CompanionDocumentsComponent implements OnInit {\r\n  private storageUrl = environment.storageUrl;\r\n  public get companionTypes() { return CompanionDocuments }\r\n  constructor(public lookupService: LookupService, public toastService: ToastService) { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n  downloadDocument(companionType: number) {\r\n    this.lookupService.getCompanionDocument(companionType)\r\n      .pipe(\r\n        take(1),\r\n        tap((res: ICompanionDocument) => {\r\n          const fileName = res.fileName;\r\n          const fileUrl = `${this.storageUrl}${res.documentLink}`;\r\n  \r\n          this.fetchAndDownloadFile(fileUrl, fileName);\r\n        })\r\n      )\r\n      .subscribe();\r\n  }\r\n  \r\n  private fetchAndDownloadFile(fileUrl: string, fileName: string) {\r\n    const link = document.createElement('a');\r\n    link.style.display = 'none';\r\n  \r\n    fetch(fileUrl)\r\n      .then(response => {\r\n        if (!response.ok) {\r\n          this.toastService.error('Failed to download file.');\r\n        }\r\n        return response.blob();\r\n      })\r\n      .then(blob => {\r\n        const url = window.URL.createObjectURL(blob);\r\n        link.href = url;\r\n        link.download = fileName;\r\n        link.click();\r\n        window.URL.revokeObjectURL(url);\r\n      })\r\n      .catch(error => {\r\n        this.toastService.error('Failed to download file.');\r\n      })\r\n      .finally(() => {\r\n        document.body.removeChild(link);\r\n      });\r\n  \r\n    document.body.appendChild(link);\r\n  }  \r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <drdp-title title=\"Companion Documents\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex flex-wrap gap-4 py-3\">\r\n    <drdp-container color=\"whiteDash\" additionClasses=\"h-11rem w-40 px-1\">\r\n      <button (click)=\"downloadDocument(companionTypes.Guidance_For_DRDP_Domain_Scaled_Scores)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Guidance for DRDP Domain Scaled Scores\">Guidance for DRDP Domain Scaled Scores</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n\r\n    <drdp-container color=\"whiteDash\" additionClasses=\"h-11rem w-40 px-1\">\r\n      <button (click)=\"downloadDocument(companionTypes.Group_Report_Guidance)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Group Report Guidance\">Group Report Guidance</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n\r\n    <drdp-container color=\"whiteDash\" additionClasses=\"h-11rem w-40 px-1\">\r\n      <button (click)=\"downloadDocument(companionTypes.Domain_Scale_Cut_Points_for_Sharing)\" class=\"w-full pb-4\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-download\"></i>\r\n        <p class=\"text-[15px]\" title=\"Domain Scale Cut Points for Sharing\">Domain Scale Cut Points for Sharing</p>\r\n        <p class=\"text-drdpblue-300 text-[15px]\">Download</p>\r\n      </button>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n\r\n\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\n\r\nimport { ResourceRoutingModule } from './resource-routing.module'\r\nimport { PermissionAndRolesComponent } from './permission-and-roles/permission-and-roles.component'\r\nimport { SharedModule } from '@shared/shared.module';\r\nimport { UploadTemplatesComponent } from './upload-templates/upload-templates.component';\r\nimport { CompanionDocumentsComponent } from './companion-documents/companion-documents.component'\r\n\r\n@NgModule({\r\n  declarations: [PermissionAndRolesComponent, UploadTemplatesComponent, CompanionDocumentsComponent],\r\n  imports: [CommonModule, ResourceRoutingModule, SharedModule],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class ResourceModule {}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { DataService } from \"./data.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { IUploadChildSaveResult, IUploadValidateHeaders } from \"@core/interfaces/iupload-center\";\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\n\r\nexport class UploadService {\r\n    private path: string = 'uploadcenter'\r\n    private fileToUpload!: File;\r\n    \r\n    constructor(public dataService: DataService) {\r\n\r\n    }\r\n\r\n    parseExcelToJson(allXlsxData: any[], headers: any[]) {\r\n        \r\n        var xlsxDataArray: any[] = []\r\n\r\n        for (var i = 0; i < allXlsxData.length; i++) {\r\n                var tempXlsxDataArray: any[] = [];\r\n                for (var j = 0; j < headers.length; j++) {\r\n                    var rowvalue = allXlsxData[i][headers[j]];\r\n                    rowvalue = rowvalue || '';\r\n                    var headerValue = headers[j].replaceAll(\" \", \"\");\r\n\r\n                    let xlsxDataObj: any = {};\r\n                    xlsxDataObj['id'] = j;\r\n                    xlsxDataObj['isEditable'] = false;\r\n                    xlsxDataObj['errorMessages'] = [];\r\n                    xlsxDataObj['warningMessages'] = [];\r\n                    xlsxDataObj['header'] = headerValue;\r\n                    xlsxDataObj['data'] = rowvalue.toString().trim();\r\n\r\n                    tempXlsxDataArray.push(xlsxDataObj);\r\n                }\r\n                var rowValueObj: any = {};\r\n                rowValueObj['hasError'] = false;\r\n                rowValueObj['cellValues'] = tempXlsxDataArray;\r\n                xlsxDataArray.push(rowValueObj);\r\n        }\r\n\r\n        return xlsxDataArray;\r\n    }\r\n\r\n    setUploadFile(file: File): void {\r\n        this.fileToUpload = file;\r\n    }\r\n\r\n    getUploadFile(): File {\r\n        return this.fileToUpload;\r\n    }\r\n\r\n    checkFile(rows: any): Observable<any> {\r\n\r\n        const file = this.createFileFromJson(rows);\r\n\r\n        const formData = new FormData();\r\n        formData.append('file', file, 'data.txt');\r\n\r\n        return this.dataService.post(`${this.path}/check-file`, formData);\r\n    }\r\n\r\n    checkFileClass(rows: any): Observable<any> {\r\n\r\n        const file = this.createFileFromJson(rows);\r\n\r\n        const formData = new FormData();\r\n        formData.append('file', file, 'data.txt');\r\n\r\n        return this.dataService.post(`${this.path}/check-file-class`, formData);\r\n    }\r\n\r\n    checkFileUser(rows: any): Observable<any> {\r\n\r\n        const file = this.createFileFromJson(rows);\r\n\r\n        const formData = new FormData();\r\n        formData.append('file', file, 'data.txt');\r\n\r\n        return this.dataService.post(`${this.path}/check-file-user`, formData);\r\n    }\r\n\r\n    validateHeaders(headers: any): Observable<IUploadValidateHeaders> {\r\n        return this.dataService.post(`${this.path}/validate-headers`, headers);\r\n    }\r\n\r\n    validateClassHeaders(headers: any): Observable<IUploadValidateHeaders> {\r\n        return this.dataService.post(`${this.path}/validate-headers-class`, headers);\r\n    }\r\n    \r\n    validateUserHeaders(headers: any): Observable<IUploadValidateHeaders> {\r\n        return this.dataService.post(`${this.path}/validate-headers-user`, headers);\r\n    }\r\n\r\n    save(file: File, rows: any): Observable<IUploadChildSaveResult[]> {\r\n        var formData = new FormData();\r\n        formData.append('file', file);\r\n\r\n        const jsonFile = this.createFileFromJson(rows);\r\n\r\n        formData.append('jsonFile', jsonFile, 'data.txt');\r\n\r\n        return this.dataService.post(`${this.path}/save`, formData);\r\n    }\r\n\r\n    saveMoreChild(file: File) : Observable<boolean> {\r\n        var formData = new FormData();\r\n        formData.append('file', file);\r\n\r\n        return this.dataService.post(`${this.path}/save-more-child`, formData);\r\n    }\r\n\r\n    saveUploadClass(file:File, rows: any) : Observable<any[]> {\r\n        var formData = new FormData();\r\n        formData.append('file', file);\r\n\r\n        const jsonFile = this.createFileFromJson(rows);\r\n\r\n        formData.append('jsonFile', jsonFile, 'data.txt');\r\n        \r\n        return this.dataService.post(`${this.path}/save-upload-class`, formData);\r\n    }\r\n\r\n    saveUploadUser(file:File, rows: any) : Observable<any[]> {\r\n        var formData = new FormData();\r\n        formData.append('file', file);\r\n\r\n        const jsonFile = this.createFileFromJson(rows);\r\n\r\n        formData.append('jsonFile', jsonFile, 'data.txt');\r\n        \r\n        return this.dataService.post(`${this.path}/save-upload-user`, formData);\r\n    }\r\n\r\n    createFileFromJson(jsonObject: any) : File {\r\n        const jsonString = JSON.stringify(jsonObject);\r\n        const blob = new Blob([jsonString], { type: 'text/plain' });\r\n\r\n        // Create a file object from the Blob\r\n        const file = new File([blob], 'data.txt', { type: 'text/plain' });\r\n\r\n        return file;\r\n    }\r\n}\r\n","<div class=\"w-full p-5\">\r\n\r\n    <drdp-title title=\"All Instrument Child\"></drdp-title>\r\n\r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n        <div class=\"w-full \">\r\n            <mat-card [ngClass]=\"cardColor\">\r\n                <mat-card-content>\r\n                    <div class=\"flex justify-between\">\r\n                        <p class=\"pt-2\" [innerHTML]=\"cardText\"></p>\r\n                        <drdp-btn *ngIf=\"!isFormValidated && !isFormValid && isHeaderValid\" (click)=\"checkFile()\">Check\r\n                            File</drdp-btn>\r\n                        <drdp-btn *ngIf=\"isFormValidated && isFormValid\" (click)=\"save()\">Submit</drdp-btn>\r\n                    </div>\r\n                </mat-card-content>\r\n            </mat-card>\r\n            <div class=\"w-full\">\r\n                <drdp-btn class=\"float-right pt-10\" (click)=\"uploadNewFile()\" color=\"cancel\"><i\r\n                        class=\"uil uil-plus text-lg\"></i>Upload New File</drdp-btn>\r\n            </div>\r\n            <drdp-upload-table (onDataChange)=\"onDataChange($event)\" [dataSource]=\"dataSource\" [columns]=\"headerData\">\r\n            </drdp-upload-table>\r\n        </div>\r\n    </drdp-container>\r\n    <div class=\"uploads-pagination\">\r\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\">\r\n        </mat-paginator>\r\n    </div>\r\n</div>","import { Component, OnInit, ViewChild } from \"@angular/core\";\r\nimport * as XLSX from 'xlsx';\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { IUploadChildSaveResult, IUploadValidateHeaders } from \"@core/interfaces/iupload-center\";\r\nimport { UploadService } from \"@core/services/upload.service\";\r\nimport { take } from \"rxjs\";\r\nimport { MatPaginator } from \"@angular/material/paginator\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { ConfirmationModalComponent } from \"@shared/components/confirmation-modal/confirmation-modal.component\";\r\nimport { Modal } from \"@core/enums/modal\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\n@Component({\r\n  selector: 'drdp-upload-center-all-instrument-child',\r\n  templateUrl: './upload-center-all-instrument-child.component.html',\r\n  styleUrls: ['./upload-center-all-instrument-child.component.scss'],\r\n})\r\n\r\n\r\n\r\nexport class UploadCenterAllInstrumentChildComponent implements OnInit {\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  private readonly checkFileMessage: string = \"Press click 'CHECK FILE' button to scan file for errors.\";\r\n  private readonly submitFileMessage: string = \"No errors found. Click the submit button to proceed.\";\r\n  private readonly checkFileHasErrorMessage: string = \"We found some errors in the file, please fix them and check the file again or reupload the updated file.\";\r\n  headerNames?: any;\r\n  xlsxData?: any;\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n  headerData?: any;\r\n  cardText: string = this.checkFileMessage;\r\n  cardColor: string = 'card-info';\r\n  isFormValid: boolean = false;\r\n  isFormValidated: boolean = false;\r\n  isFormHasError: boolean = false;\r\n  isHeaderValid: boolean = true;\r\n  pageSizeOptions: number[] = [10, 25, 50, 100];\r\n\r\n  constructor(\r\n    private uploadService: UploadService,\r\n    private toast: ToastService,\r\n    private router: Router,\r\n    public modal: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.readData();\r\n  }\r\n\r\n  onDataChange(event: any) {\r\n    this.showCheckFileCard(this.checkFileMessage);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.dataSource.paginator = this.paginator;\r\n  }\r\n\r\n  showErrorCard(message: string): void {\r\n    this.isFormHasError = true;\r\n    this.isFormValid = false;\r\n    this.isFormValidated = true;\r\n    this.cardText = message;\r\n    this.cardColor = 'card-warn'\r\n  }\r\n\r\n  showSubmitCard(message: string): void {\r\n    this.isFormHasError = false;\r\n    this.isFormValid = true;\r\n    this.isFormValidated = true;\r\n    this.cardText = message;\r\n    this.cardColor = 'card-success'\r\n  }\r\n\r\n  showSuccessCard(message: string): void {\r\n    this.isFormValidated = false;\r\n    this.isFormHasError = false;\r\n    this.isFormValid = true;\r\n    this.cardText = message;\r\n    this.cardColor = 'card-success'\r\n  }\r\n\r\n  showCheckFileCard(message: string): void {\r\n    this.isFormValidated = false;\r\n    this.isFormHasError = false;\r\n    this.isFormValid = false;\r\n    this.cardText = message;\r\n    this.cardColor = 'card-info'\r\n  }\r\n\r\n  getMatCardClass(): string {\r\n    return this.cardColor;\r\n  }\r\n\r\n  checkFile(): void {\r\n    this.uploadService.checkFile(this.dataSource.data).pipe(take(1)).subscribe((res: any) => {\r\n      if (res) {\r\n        this.setData(res);\r\n\r\n        if (this.dataSource.data.some(e => e.hasError === true)) {\r\n          this.showErrorCard(this.checkFileHasErrorMessage);\r\n        } else {\r\n          this.showSubmitCard(this.submitFileMessage);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  validateHeaders(headers: any): void {\r\n    var message = '';\r\n    this.uploadService.validateHeaders(headers).pipe(take(1)).subscribe((res: IUploadValidateHeaders) => {\r\n      if (!res.isValidUpload) {\r\n        if (res.missingColumns.length > 0) {\r\n          message = `There are [${res.missingColumns.length}] columns that are missing. Please make sure you have [${res.missingColumns.join(',')}] in your upload file.`;\r\n        }\r\n\r\n        if (res.invalidColumns.length > 0) {\r\n          if (message !== '')\r\n            message += '<br><br>';\r\n\r\n          message += `The following columns are not valid columns : [${res.invalidColumns.join(',')}]. Please remove from the upload file.`\r\n        }\r\n        this.showErrorCard(message);\r\n        this.toast.error('Error in headers');\r\n      }\r\n      else {\r\n        this.processData(this.xlsxData);\r\n      }\r\n    });\r\n  }\r\n\r\n  readData(): void {\r\n    const file = this.uploadService.getUploadFile();\r\n\r\n    if (!file) {\r\n      this.toast.error(\"File can't be null\");\r\n      this.router.navigate(['/upload-center'])\r\n      return;\r\n    }\r\n\r\n    const reader = new FileReader();\r\n\r\n    reader.onload = (e: any) => {\r\n\r\n      const bstr = e.target.result;\r\n      const wb = XLSX.read(bstr, { type: 'binary', cellDates: true, dateNF: 'mm/dd/yyyy' });\r\n\r\n      var ratingSheetName = 'Demo_Ratings';\r\n      const ws = wb.Sheets[ratingSheetName];\r\n\r\n      if (!ws) {\r\n        this.toast.error(\"Data worksheet in XLSX file required to be named Demo_Ratings to proceed with the upload.\");\r\n        return;\r\n      }\r\n\r\n      this.headerNames = XLSX.utils.sheet_to_json(ws, { header: 1 })[0];\r\n      this.xlsxData = XLSX.utils.sheet_to_json(ws, { raw: false });\r\n      this.xlsxData = this.xlsxData.filter((data: { allowupload: string; }) => { return data.allowupload && data.allowupload.trim().toLowerCase() == \"yes\" })\r\n\r\n      this.validateHeaders(this.headerNames);\r\n    }\r\n    reader.readAsBinaryString(file);\r\n\r\n  }\r\n\r\n  processData(xlsxData: any): void {\r\n\r\n    if (!xlsxData) {\r\n      this.toast.error(\"Xlsx data can't be null\");\r\n      return;\r\n    }\r\n\r\n    if(xlsxData.length > 100) {\r\n      this.toast.error(\"Rows exceeds the maximum limit of 100.\");\r\n      this.router.navigate(['/upload-center']);\r\n      return;\r\n    }\r\n\r\n    var allXlsxData = xlsxData;\r\n    var headers = this.headerNames;\r\n    var tArr = [];\r\n\r\n    for (var i = 0; i < headers.length; i++) {\r\n      tArr.push({ columnDef: headers[i].replace(/[^a-zA-Z0-9 ]/g, \"\").trim(), data: headers[i].replace(\" \", \"\") });\r\n    }\r\n    this.headerData = tArr;\r\n\r\n    this.setData(this.uploadService.parseExcelToJson(allXlsxData, headers));\r\n\r\n    this.cardText = this.checkFileMessage;\r\n  }\r\n\r\n  setData(data: any) {\r\n    data.sort((a: { hasError: boolean; }, b: { hasError: boolean; }) => {\r\n      if (a.hasError === b.hasError) {\r\n        return 0;\r\n      }\r\n      if (a.hasError) {\r\n        return -1;\r\n      }\r\n      return 1;\r\n    });\r\n    this.dataSource.data = data;\r\n  }\r\n\r\n  save(): void {\r\n    const file : File = this.uploadService.getUploadFile();\r\n    this.uploadService.save(file, this.dataSource.data).pipe(take(1)).subscribe((res: IUploadChildSaveResult[]) => {\r\n      if (res.some((e: { isSuccess: boolean; }) => e.isSuccess === false)) {\r\n        this.toast.error(res[0].errorMessage)\r\n      } else {\r\n        this.openSuccessModal();\r\n      }\r\n    });\r\n  }\r\n\r\n  uploadNewFile() {\r\n      this.router.navigate(['/upload-center']);\r\n  }\r\n\r\n  openSuccessModal(): void {\r\n    var event = {data:{modalInfo:{}}};\r\n    event.data.modalInfo = {\r\n      title: 'Success',\r\n      message: `The file successfully submitted.`,\r\n      primaryBtnClass: 'blue',\r\n      showCancel: false,\r\n      primaryBtnText: Modal.OK\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n    modalRef.afterClosed().subscribe(() => {\r\n      this.router.navigate(['/upload-center']);\r\n    });\r\n  }\r\n\r\n}\r\n","<div class=\"w-full p-5\">\r\n\r\n    <drdp-title title=\"Upload Class\"></drdp-title>\r\n\r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n        <div class=\"w-full \">\r\n            <mat-card [ngClass]=\"cardColor\">\r\n                <mat-card-content>\r\n                    <div class=\"flex justify-between\">\r\n                        <p class=\"pt-2\" [innerHTML]=\"cardText\"></p>\r\n                        <drdp-btn *ngIf=\"!isFormValidated && !isFormValid && isHeaderValid\" (click)=\"checkFile()\">Check\r\n                            File</drdp-btn>\r\n                        <drdp-btn *ngIf=\"isFormValidated && isFormValid\" (click)=\"save()\">Submit</drdp-btn>\r\n                    </div>\r\n                </mat-card-content>\r\n            </mat-card>\r\n            <div class=\"w-full\">\r\n                <drdp-btn class=\"float-right pt-10\" (click)=\"uploadNewFile()\" color=\"cancel\"><i\r\n                        class=\"uil uil-plus text-lg\"></i>Upload New File</drdp-btn>\r\n            </div>\r\n            <drdp-upload-table (onDataChange)=\"onDataChange($event)\" [dataSource]=\"dataSource\" [columns]=\"headerData\">\r\n            </drdp-upload-table>\r\n        </div>\r\n    </drdp-container>\r\n    <div class=\"uploads-pagination\">\r\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\">\r\n        </mat-paginator>\r\n    </div>\r\n</div>","<div class=\"w-full p-5\">\r\n\r\n    <drdp-title title=\"Upload Users\"></drdp-title>\r\n\r\n    <drdp-container [additionClasses]=\"'min-h-[44rem]'\">\r\n        <div class=\"w-full \">\r\n            <mat-card [ngClass]=\"cardColor\">\r\n                <mat-card-content>\r\n                    <div class=\"flex justify-between\">\r\n                        <p class=\"pt-2\" [innerHTML]=\"cardText\"></p>\r\n                        <drdp-btn *ngIf=\"!isFormValidated && !isFormValid && isHeaderValid\" (click)=\"checkFile()\">Check\r\n                            File</drdp-btn>\r\n                        <drdp-btn *ngIf=\"isFormValidated && isFormValid\" (click)=\"save()\">Submit</drdp-btn>\r\n                    </div>\r\n                </mat-card-content>\r\n            </mat-card>\r\n            <div class=\"w-full\">\r\n                <drdp-btn class=\"float-right pt-10\" (click)=\"uploadNewFile()\" color=\"cancel\"><i\r\n                        class=\"uil uil-plus text-lg\"></i>Upload New File</drdp-btn>\r\n            </div>\r\n            <drdp-upload-table (onDataChange)=\"onDataChange($event)\" [dataSource]=\"dataSource\" [columns]=\"headerData\">\r\n            </drdp-upload-table>\r\n        </div>\r\n    </drdp-container>\r\n    <div class=\"uploads-pagination\">\r\n        <mat-paginator [pageSizeOptions]=\"pageSizeOptions\">\r\n        </mat-paginator>\r\n    </div>\r\n</div>","import { NgModule } from '@angular/core'\r\nimport { RouterModule, Routes } from '@angular/router'\r\nimport { Permission } from '@core/enums/permissions'\r\nimport { AuthGuard } from '@core/guards/auth.guard'\r\nimport { PermissionGuard } from '@core/guards/permission.guard'\r\nimport { DrdpLayoutComponent } from '../drdp-layout/drdp-layout.component'\r\nimport { UploadCenterAllInstrumentChildComponent } from './upload-center/upload-center-all-instrument-child/upload-center-all-instrument-child.component'\r\nimport { UploadCenterComponent } from './upload-center/upload-center.component'\r\nimport { UploadCenterClassComponent } from './upload-center/upload-center-class/upload-center-class.component'\r\nimport { UploadCenterUserComponent } from './upload-center/upload-center-user/upload-center-user.component'\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: '',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [ \r\n      { \r\n        path: 'upload-center', \r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.UploadFile },\r\n        component: UploadCenterComponent \r\n      },\r\n      { \r\n        path: 'upload-center/child', \r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewChildTemplates },\r\n        component: UploadCenterAllInstrumentChildComponent \r\n      },\r\n      { \r\n        path: 'upload-center/class', \r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewChildTemplates },\r\n        component: UploadCenterClassComponent \r\n      },\r\n      { \r\n        path: 'upload-center/user', \r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.ViewChildTemplates },\r\n        component: UploadCenterUserComponent \r\n      }\r\n    ],\r\n  },\r\n]\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class UploadRoutingModule {}\r\n","import { Component, ElementRef, OnInit, ViewChild } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Modal } from \"@core/enums/modal\";\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { UploadService } from \"@core/services/upload.service\";\r\nimport { ConfirmationModalComponent } from \"@shared/components/confirmation-modal/confirmation-modal.component\";\r\nimport { take } from \"rxjs\";\r\n\r\n@Component({\r\n  selector: 'drdp-upload-center',\r\n  templateUrl: './upload-center.component.html',\r\n  styleUrls: ['./upload-center.component.scss'],\r\n})\r\nexport class UploadCenterComponent implements OnInit {\r\n\r\n  @ViewChild('moreChildFileInput') moreChildFileInputRef!: ElementRef;\r\n  isUploading: boolean = false;\r\n\r\n  constructor(private uploadService: UploadService, private router: Router, private toast: ToastService,\r\n    public modal: MatDialog) { }\r\n\r\n  ngOnInit(): void {\r\n    window.addEventListener(\"dragover\", e => {\r\n      e && e.preventDefault();\r\n    }, false);\r\n    window.addEventListener(\"drop\", e => {\r\n      e && e.preventDefault();\r\n    }, false);\r\n  }\r\n\r\n  onFileChange(event: any) {\r\n    if (!this.isFileAllowed(event.target.files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    const file = event.target.files[0];\r\n    this.uploadService.setUploadFile(file);\r\n    this.router.navigate(['upload-center/child']);\r\n  }\r\n\r\n  onFileChangeClass(event: any) {\r\n    if (!this.isFileAllowed(event.target.files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    const file = event.target.files[0];\r\n    this.uploadService.setUploadFile(file);\r\n    this.router.navigate(['upload-center/class']);\r\n  }\r\n\r\n\r\n  onFileChangeUser(event: any) {\r\n    if (!this.isFileAllowed(event.target.files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    const file = event.target.files[0];\r\n    this.uploadService.setUploadFile(file);\r\n    this.router.navigate(['upload-center/user']);\r\n  }\r\n\r\n  onFileChangeMoreChildren(event: any) {\r\n\r\n    if (this.isUploading) {\r\n      this.openFailModal();\r\n      return;\r\n    }\r\n\r\n    if (!this.isFileAllowed(event.target.files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n    this.isUploading = true;\r\n    const file = event.target.files[0];\r\n    this.uploadService.saveMoreChild(file).pipe(take(1)).subscribe({\r\n      next: (res: boolean) => this.handleUploadResult(res),\r\n      error: (error: any) => {\r\n        this.isUploading = false;\r\n        this.genericModal();\r\n      }\r\n    });\r\n  }\r\n\r\n  uploadMoreChildDropHandler(event: any) {\r\n    event.preventDefault();\r\n    event.target.classList.remove('drag-over');\r\n\r\n    const files = event.dataTransfer.files;\r\n    if (this.isUploading) {\r\n      this.openFailModal();\r\n      return;\r\n    }\r\n\r\n    if (!this.isFileAllowed(files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n    this.isUploading = true;\r\n\r\n    this.uploadService.saveMoreChild(files[0]).pipe(take(1)).subscribe({\r\n      next: (res: boolean) => this.handleUploadResult(res),\r\n      error: (error: any) => {\r\n        this.isUploading = false;\r\n        this.genericModal();\r\n      }\r\n    })\r\n  }\r\n\r\n  uploadChildDropHandler(event: any) {\r\n    event.preventDefault();\r\n    event.target.classList.remove('drag-over');\r\n\r\n    const files = event.dataTransfer.files;\r\n\r\n    if (!this.isFileAllowed(files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    this.uploadService.setUploadFile(files[0]);\r\n    this.router.navigate(['upload-center/child']);\r\n  }\r\n\r\n  uploadClassDropHandler(event: any) {\r\n    event.preventDefault();\r\n    event.target.classList.remove('drag-over');\r\n\r\n    const files = event.dataTransfer.files;\r\n\r\n    if (!this.isFileAllowed(files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    this.uploadService.setUploadFile(files[0]);\r\n    this.router.navigate(['upload-center/class']);\r\n  }\r\n\r\n  uploadUserDropHandler(event: any) {\r\n    event.preventDefault();\r\n    event.target.classList.remove('drag-over');\r\n\r\n    const files = event.dataTransfer.files;\r\n\r\n    if (!this.isFileAllowed(files)) {\r\n      this.toast.error('Only xlsx files are allowed!');\r\n      return;\r\n    }\r\n\r\n    this.uploadService.setUploadFile(files[0]);\r\n    this.router.navigate(['upload-center/user']);\r\n  }\r\n\r\n  isFileAllowed(files: any): boolean {\r\n    for (let i = 0; i < files.length; i++) {\r\n      if (!files[i].type.match('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') && files[i].name.split('.').pop().toLowerCase() !== 'xlsx') {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  handleUploadResult(res: any): void {\r\n    this.isUploading = false;\r\n    if (res) {\r\n        this.openSuccessModal();\r\n    } else {\r\n        this.genericModal();\r\n    }\r\n    this.moreChildFileInputRef.nativeElement.value = '';\r\n}\r\n\r\n  openSuccessModal(): void {\r\n    var event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Success',\r\n      message: `Your request is being processed. You will receive an email at the address associated with your account as soon as the upload is complete.`,\r\n      primaryBtnClass: 'blue',\r\n      showCancel: false,\r\n      primaryBtnText: Modal.OK\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n  openFailModal(): void {\r\n    var event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Failed',\r\n      message: `You have a pending upload that is processing.  Please wait until you have received your initial upload confirmation email before submitting another upload.`,\r\n      primaryBtnClass: 'blue',\r\n      showCancel: false,\r\n      primaryBtnText: Modal.OK\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n  genericModal(): void{\r\n    var event = { data: { modalInfo: {} } };\r\n    event.data.modalInfo = {\r\n      title: 'Failed',\r\n      message: `Something went wrong with your submission.  Please try again..`,\r\n      primaryBtnClass: 'blue',\r\n      showCancel: false,\r\n      primaryBtnText: Modal.OK\r\n    };\r\n    const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n    modalRef.afterClosed().subscribe();\r\n  }\r\n\r\n}\r\n","<div class=\"p-5\">\r\n  <div class=\"flex justify-between items-center\">\r\n    <drdp-title title=\"Upload Center\"></drdp-title>\r\n  </div>\r\n\r\n  <div class=\"flex flex-wrap gap-4 py-3\">\r\n\r\n    <drdp-container (drop)=\"uploadUserDropHandler($event)\" color=\"whiteDash\" class=\"h-62 w-80\">\r\n      <div class=\"w-full pb-4 text-center\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-upload\"></i>\r\n        <p class=\"text-[15px]\" title=\"Upload Users\">Upload Users</p>\r\n\r\n        <p class=\"text-[15px] pt-11\">Drag and drop here</p>\r\n        <p class=\"text-[15px]\">OR</p>\r\n        <div class=\"form-group\">\r\n          <label class=\"text-drdpblue-300 text-[15px]\" (click)=\"userFileInput.click()\">Browse File</label>\r\n          <input class=\"invisible\" #userFileInput (change)=\"onFileChangeUser($event)\" type=\"file\" id=\"userfileUpload\">\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n\r\n    <drdp-container (drop)=\"uploadClassDropHandler($event)\" color=\"whiteDash\" class=\"h-62 w-80\">\r\n      <div class=\"w-full pb-4 text-center\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-upload\"></i>\r\n        <p class=\"text-[15px]\" title=\"Upload Class\">Upload Class</p>\r\n\r\n        <p class=\"text-[15px] pt-11\">Drag and drop here</p>\r\n        <p class=\"text-[15px]\">OR</p>\r\n        <div class=\"form-group\">\r\n          <label class=\"text-drdpblue-300 text-[15px]\" (click)=\"classFileInput.click()\">Browse File</label>\r\n          <input class=\"invisible\" #classFileInput (change)=\"onFileChangeClass($event)\" type=\"file\" id=\"classfileUpload\">\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n\r\n\r\n    <!-- <drdp-container (drop)=\"uploadChildDropHandler($event)\" color=\"whiteDash\" class=\"h-62 w-80\">\r\n      <div class=\"w-full pb-4 text-center\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-upload\"></i>\r\n        <p class=\"text-[15px]\" title=\"Upload All Instrument Child\">Upload All Instrument Child</p>\r\n        <p class=\"text-[15px]\">(100 or less children)</p>\r\n\r\n        <p class=\"text-[15px] pt-5\">Drag and drop here</p>\r\n        <p class=\"text-[15px]\">OR</p>\r\n        <div class=\"form-group\">\r\n          <label class=\"text-drdpblue-300 text-[15px]\" (click)=\"childFileInput.click()\">Browse File</label>\r\n          <input class=\"invisible\" #childFileInput (change)=\"onFileChange($event)\" type=\"file\" id=\"childfileUpload\">\r\n        </div>\r\n      </div>\r\n    </drdp-container> -->\r\n\r\n    <drdp-container (drop)=\"uploadMoreChildDropHandler($event)\" color=\"whiteDash\" class=\"h-62 w-80\">\r\n      <div class=\"w-full pb-4 text-center\">\r\n        <i class=\"text-drdpblue-300 text-[60px] uil uil-file-upload\"></i>\r\n        <p class=\"text-[15px]\" title=\"Upload All Instrument Child\">Upload All Instrument Child</p>\r\n        <!-- <p class=\"text-[15px]\">(101 or more children)</p> -->\r\n\r\n        <p class=\"text-[15px] pt-11\">Drag and drop here</p>\r\n        <p class=\"text-[15px]\">OR</p>\r\n        <div class=\"form-group\">\r\n          <label class=\"text-drdpblue-300 text-[15px]\" (click)=\"moreChildFileInput.click()\">Browse File</label>\r\n          <input class=\"invisible\" #moreChildFileInput (change)=\"onFileChangeMoreChildren($event)\" type=\"file\" id=\"moreChildfileUpload\">\r\n        </div>\r\n      </div>\r\n    </drdp-container>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\r\nimport * as XLSX from 'xlsx';\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { IUploadChildSaveResult, IUploadValidateHeaders } from \"@core/interfaces/iupload-center\";\r\nimport { UploadService } from \"@core/services/upload.service\";\r\nimport { take } from \"rxjs\";\r\nimport { MatPaginator } from \"@angular/material/paginator\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { ConfirmationModalComponent } from \"@shared/components/confirmation-modal/confirmation-modal.component\";\r\nimport { Modal } from \"@core/enums/modal\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\n@Component({\r\n    selector: 'drdp-upload-center-class',\r\n    templateUrl: './upload-center-class.component.html',\r\n    styleUrls: ['./upload-center-class.component.scss'],\r\n})\r\n\r\n\r\n\r\nexport class UploadCenterClassComponent implements OnInit {\r\n    @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n    private readonly checkFileMessage: string = \"Press click 'CHECK FILE' button to scan file for errors.\";\r\n    private readonly submitFileMessage: string = \"No errors found. Click the submit button to proceed.\";\r\n    private readonly checkFileHasErrorMessage: string = \"We found some errors in the file, please fix them and check the file again or reupload the updated file.\";\r\n    headerNames?: any;\r\n    xlsxData?: any;\r\n    dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n    headerData?: any;\r\n    cardText: string = this.checkFileMessage;\r\n    cardColor: string = 'card-info';\r\n    isFormValid: boolean = false;\r\n    isFormValidated: boolean = false;\r\n    isFormHasError: boolean = false;\r\n    isHeaderValid: boolean = true;\r\n    pageSizeOptions: number[] = [10, 25, 50, 100];\r\n\r\n    constructor(\r\n        private uploadService: UploadService,\r\n        private toast: ToastService,\r\n        private router: Router,\r\n        public modal: MatDialog\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.readData();\r\n    }\r\n\r\n    onDataChange(event: any) {\r\n        this.showCheckFileCard(this.checkFileMessage);\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.dataSource.paginator = this.paginator;\r\n    }\r\n\r\n    showErrorCard(message: string): void {\r\n        this.isFormHasError = true;\r\n        this.isFormValid = false;\r\n        this.isFormValidated = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-warn'\r\n    }\r\n\r\n    showSubmitCard(message: string): void {\r\n        this.isFormHasError = false;\r\n        this.isFormValid = true;\r\n        this.isFormValidated = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-success'\r\n    }\r\n\r\n    showSuccessCard(message: string): void {\r\n        this.isFormValidated = false;\r\n        this.isFormHasError = false;\r\n        this.isFormValid = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-success'\r\n    }\r\n\r\n    showCheckFileCard(message: string): void {\r\n        this.isFormValidated = false;\r\n        this.isFormHasError = false;\r\n        this.isFormValid = false;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-info'\r\n    }\r\n\r\n    getMatCardClass(): string {\r\n        return this.cardColor;\r\n    }\r\n\r\n    checkFile(): void {\r\n        this.uploadService.checkFileClass(this.dataSource.data).pipe(take(1)).subscribe((res: any) => {\r\n            if (res) {\r\n                this.setData(res);\r\n\r\n                if (this.dataSource.data.some(e => e.hasError === true)) {\r\n                    this.showErrorCard(this.checkFileHasErrorMessage);\r\n                } else {\r\n                    this.showSubmitCard(this.submitFileMessage);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    validateHeaders(headers: any): void {\r\n        var message = '';\r\n        this.uploadService.validateClassHeaders(headers).pipe(take(1)).subscribe((res: IUploadValidateHeaders) => {\r\n            if (!res.isValidUpload) {\r\n                if (res.missingColumns.length > 0) {\r\n                    message = `There are [${res.missingColumns.length}] columns that are missing. Please make sure you have [${res.missingColumns.join(',')}] in your upload file.`;\r\n                }\r\n\r\n                if (res.invalidColumns.length > 0) {\r\n                    if (message !== '')\r\n                        message += '<br><br>';\r\n\r\n                    message += `The following columns are not valid columns : [${res.invalidColumns.join(',')}]. Please remove from the upload file.`\r\n                }\r\n                this.showErrorCard(message);\r\n                this.toast.error('Error in headers');\r\n            }\r\n            else {\r\n                this.processData(this.xlsxData);\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    readData(): void {\r\n        const file = this.uploadService.getUploadFile();\r\n\r\n        if (!file) {\r\n            this.toast.error(\"File can't be null\");\r\n            this.router.navigate(['/upload-center'])\r\n            return;\r\n        }\r\n\r\n        const reader = new FileReader();\r\n\r\n        reader.onload = (e: any) => {\r\n\r\n            const bstr = e.target.result;\r\n            const wb = XLSX.read(bstr, { type: 'binary' });\r\n\r\n            const sheetNames = wb.SheetNames;\r\n\r\n            // Assuming the first sheet is the one you want\r\n            const firstSheetName = sheetNames[0];\r\n\r\n            // Access the first sheet\r\n            const ws = wb.Sheets[firstSheetName];\r\n\r\n            if (!ws) {\r\n                this.toast.error(\"Worksheet can't be null\");\r\n                return;\r\n            }\r\n\r\n            this.headerNames = XLSX.utils.sheet_to_json(ws, { header: 1 })[0];\r\n            this.xlsxData = XLSX.utils.sheet_to_json(ws, { raw: false });\r\n\r\n            this.validateHeaders(this.headerNames);\r\n        }\r\n        reader.readAsBinaryString(file);\r\n\r\n    }\r\n\r\n    processData(xlsxData: any): void {\r\n\r\n        if (!xlsxData) {\r\n            this.toast.error(\"Xlsx data can't be null\");\r\n            return;\r\n        }\r\n\r\n        var allXlsxData = xlsxData;\r\n        var headers = this.headerNames;\r\n        var tArr = [];\r\n\r\n        for (var i = 0; i < headers.length; i++) {\r\n            tArr.push({ columnDef: headers[i].replace(/[^a-zA-Z0-9 ]/g, \"\").replaceAll(\" \", \"\").trim(), data: headers[i].replaceAll(\" \", \"\") });\r\n        }\r\n        this.headerData = tArr;\r\n\r\n        this.setData(this.uploadService.parseExcelToJson(allXlsxData, headers));\r\n\r\n        this.cardText = this.checkFileMessage;\r\n    }\r\n\r\n    setData(data: any) {\r\n        data.sort((a: { hasError: boolean; }, b: { hasError: boolean; }) => {\r\n            if (a.hasError === b.hasError) {\r\n                return 0;\r\n            }\r\n            if (a.hasError) {\r\n                return -1;\r\n            }\r\n            return 1;\r\n        });\r\n        this.dataSource.data = data;\r\n    }\r\n\r\n    save(): void {\r\n        const file: File = this.uploadService.getUploadFile();\r\n        this.uploadService.saveUploadClass(file, this.dataSource.data).pipe(take(1)).subscribe((res: any[]) => {\r\n            if (res.some((e: { isSuccess: boolean; }) => e.isSuccess === false)) {\r\n                this.toast.error(res[0].errorMessage)\r\n            } else {\r\n                this.openSuccessModal();\r\n            }\r\n        });\r\n    }\r\n\r\n    uploadNewFile() {\r\n        this.router.navigate(['/upload-center']);\r\n    }\r\n\r\n    openSuccessModal(): void {\r\n        var event = { data: { modalInfo: {} } };\r\n        event.data.modalInfo = {\r\n            title: 'Success',\r\n            message: `The file successfully submitted.`,\r\n            primaryBtnClass: 'blue',\r\n            showCancel: false,\r\n            primaryBtnText: Modal.OK\r\n        };\r\n        const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n        modalRef.afterClosed().subscribe(() => {\r\n            this.router.navigate(['/upload-center']);\r\n        });\r\n    }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\r\nimport * as XLSX from 'xlsx';\r\nimport { ToastService } from \"@core/services/toast.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { UploadService } from \"@core/services/upload.service\";\r\nimport { take } from \"rxjs\";\r\nimport { MatPaginator } from \"@angular/material/paginator\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { ConfirmationModalComponent } from \"@shared/components/confirmation-modal/confirmation-modal.component\";\r\nimport { Modal } from \"@core/enums/modal\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { IUploadValidateHeaders } from \"@core/interfaces/iupload-center\";\r\n@Component({\r\n    selector: 'drdp-upload-center-user',\r\n    templateUrl: './upload-center-user.component.html',\r\n    styleUrls: ['./upload-center-user.component.scss'],\r\n})\r\n\r\n\r\n\r\nexport class UploadCenterUserComponent implements OnInit {\r\n    @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n    private readonly checkFileMessage: string = \"Press click 'CHECK FILE' button to scan file for errors.\";\r\n    private readonly submitFileMessage: string = \"No errors found. Click the submit button to proceed.\";\r\n    private readonly checkFileHasErrorMessage: string = \"We found some errors in the file, please fix them and check the file again or reupload the updated file.\";\r\n    headerNames?: any;\r\n    xlsxData?: any;\r\n    dataSource: MatTableDataSource<any> = new MatTableDataSource();\r\n    headerData?: any;\r\n    cardText: string = this.checkFileMessage;\r\n    cardColor: string = 'card-info';\r\n    isFormValid: boolean = false;\r\n    isFormValidated: boolean = false;\r\n    isFormHasError: boolean = false;\r\n    isHeaderValid: boolean = true;\r\n    pageSizeOptions: number[] = [10, 25, 50, 100];\r\n\r\n    constructor(\r\n        private uploadService: UploadService,\r\n        private toast: ToastService,\r\n        private router: Router,\r\n        public modal: MatDialog\r\n    ) { }\r\n\r\n    ngOnInit(): void {\r\n        this.readData();\r\n    }\r\n\r\n    onDataChange(event: any) {\r\n        this.showCheckFileCard(this.checkFileMessage);\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.dataSource.paginator = this.paginator;\r\n    }\r\n\r\n    showErrorCard(message: string): void {\r\n        this.isFormHasError = true;\r\n        this.isFormValid = false;\r\n        this.isFormValidated = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-warn'\r\n    }\r\n\r\n    showSubmitCard(message: string): void {\r\n        this.isFormHasError = false;\r\n        this.isFormValid = true;\r\n        this.isFormValidated = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-success'\r\n    }\r\n\r\n    showSuccessCard(message: string): void {\r\n        this.isFormValidated = false;\r\n        this.isFormHasError = false;\r\n        this.isFormValid = true;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-success'\r\n    }\r\n\r\n    showCheckFileCard(message: string): void {\r\n        this.isFormValidated = false;\r\n        this.isFormHasError = false;\r\n        this.isFormValid = false;\r\n        this.cardText = message;\r\n        this.cardColor = 'card-info'\r\n    }\r\n\r\n    getMatCardClass(): string {\r\n        return this.cardColor;\r\n    }\r\n\r\n    checkFile(): void {\r\n        this.uploadService.checkFileUser(this.dataSource.data).pipe(take(1)).subscribe((res: any) => {\r\n            if (res) {\r\n                this.setData(res);\r\n\r\n                if (this.dataSource.data.some(e => e.hasError === true)) {\r\n                    this.showErrorCard(this.checkFileHasErrorMessage);\r\n                } else {\r\n                    this.showSubmitCard(this.submitFileMessage);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    validateHeaders(headers: any): void {\r\n        var message = '';\r\n        this.uploadService.validateUserHeaders(headers).pipe(take(1)).subscribe((res: IUploadValidateHeaders) => {\r\n            if (!res.isValidUpload) {\r\n                if (res.missingColumns.length > 0) {\r\n                    message = `There are [${res.missingColumns.length}] columns that are missing. Please make sure you have [${res.missingColumns.join(',')}] in your upload file.`;\r\n                }\r\n\r\n                if (res.invalidColumns.length > 0) {\r\n                    if (message !== '')\r\n                        message += '<br><br>';\r\n\r\n                    message += `The following columns are not valid columns : [${res.invalidColumns.join(',')}]. Please remove from the upload file.`\r\n                }\r\n                this.showErrorCard(message);\r\n                this.toast.error('Error in headers');\r\n            }\r\n            else {\r\n                this.processData(this.xlsxData);\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    readData(): void {\r\n        const file = this.uploadService.getUploadFile();\r\n\r\n        if (!file) {\r\n            this.toast.error(\"File can't be null\");\r\n            this.router.navigate(['/upload-center'])\r\n            return;\r\n        }\r\n\r\n        const reader = new FileReader();\r\n\r\n        reader.onload = (e: any) => {\r\n\r\n            const bstr = e.target.result;\r\n            const wb = XLSX.read(bstr, { type: 'binary' });\r\n\r\n            const sheetNames = wb.SheetNames;\r\n\r\n            // Assuming the first sheet is the one you want\r\n            const firstSheetName = sheetNames[0];\r\n\r\n            // Access the first sheet\r\n            const ws = wb.Sheets[firstSheetName];\r\n\r\n            if (!ws) {\r\n                this.toast.error(\"Worksheet can't be null\");\r\n                return;\r\n            }\r\n\r\n            this.headerNames = XLSX.utils.sheet_to_json(ws, { header: 1 })[0];\r\n            this.xlsxData = XLSX.utils.sheet_to_json(ws, { raw: false });\r\n\r\n            this.validateHeaders(this.headerNames);\r\n        }\r\n        reader.readAsBinaryString(file);\r\n\r\n    }\r\n\r\n    processData(xlsxData: any): void {\r\n\r\n        if (!xlsxData) {\r\n            this.toast.error(\"Xlsx data can't be null\");\r\n            return;\r\n        }\r\n\r\n        var allXlsxData = xlsxData;\r\n        var headers = this.headerNames;\r\n        var tArr = [];\r\n\r\n        for (var i = 0; i < headers.length; i++) {\r\n            tArr.push({ columnDef: headers[i].replace(/[^a-zA-Z0-9 ]/g, \"\").replaceAll(\" \", \"\").trim(), data: headers[i].replaceAll(\" \", \"\") });\r\n        }\r\n        this.headerData = tArr;\r\n\r\n        this.setData(this.uploadService.parseExcelToJson(allXlsxData, headers));\r\n\r\n        this.cardText = this.checkFileMessage;\r\n    }\r\n\r\n    setData(data: any) {\r\n        data.sort((a: { hasError: boolean; }, b: { hasError: boolean; }) => {\r\n            if (a.hasError === b.hasError) {\r\n                return 0;\r\n            }\r\n            if (a.hasError) {\r\n                return -1;\r\n            }\r\n            return 1;\r\n        });\r\n        this.dataSource.data = data;\r\n    }\r\n\r\n    save(): void {\r\n        const file: File = this.uploadService.getUploadFile();\r\n        this.uploadService.saveUploadUser(file, this.dataSource.data).pipe(take(1)).subscribe((res: any[]) => {\r\n            if (res.some((e: { isSuccess: boolean; }) => e.isSuccess === false)) {\r\n                this.toast.error(res[0].errorMessage)\r\n            } else {\r\n                this.openSuccessModal();\r\n            }\r\n        });\r\n    }\r\n\r\n    uploadNewFile() {\r\n        this.router.navigate(['/upload-center']);\r\n    }\r\n\r\n    openSuccessModal(): void {\r\n        var event = { data: { modalInfo: {} } };\r\n        event.data.modalInfo = {\r\n            title: 'Success',\r\n            message: `The file successfully submitted.`,\r\n            primaryBtnClass: 'blue',\r\n            showCancel: false,\r\n            primaryBtnText: Modal.OK\r\n        };\r\n        const modalRef = this.modal.open(ConfirmationModalComponent, { data: event ? event : undefined });\r\n        modalRef.afterClosed().subscribe(() => {\r\n            this.router.navigate(['/upload-center']);\r\n        });\r\n    }\r\n\r\n}\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\n\r\nimport { UploadRoutingModule } from './upload-routing.module'\r\nimport { SharedModule } from '@shared/shared.module';\r\nimport { UploadCenterComponent } from './upload-center/upload-center.component';\r\nimport { UploadCenterAllInstrumentChildComponent } from './upload-center/upload-center-all-instrument-child/upload-center-all-instrument-child.component';\r\nimport { UploadCenterClassComponent } from './upload-center/upload-center-class/upload-center-class.component';\r\nimport { UploadCenterUserComponent } from './upload-center/upload-center-user/upload-center-user.component';\r\n\r\n@NgModule({\r\n  declarations: [UploadCenterComponent, UploadCenterAllInstrumentChildComponent, UploadCenterClassComponent, UploadCenterUserComponent],\r\n  imports: [CommonModule, UploadRoutingModule, SharedModule],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class UploadModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataService } from './data.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DownloadRequestService {\r\n  constructor(private dataService: DataService) {}\r\n\r\n  downloadDemographics(payload: any) {\r\n    return this.dataService.postWithOptions(\r\n      `downloadrequest/demographics`,\r\n      payload,\r\n      {\r\n        responseType: 'blob',\r\n      }\r\n    );\r\n  }\r\n\r\n  saveRequestForRatings(payload: any) {\r\n    return this.dataService.post(\r\n      `downloadrequest/demographics-ratings`,\r\n      payload\r\n    );\r\n  }\r\n  \r\n  saveRequestForRatings2025(payload: any) {\r\n    return this.dataService.post(\r\n      `downloadrequest/demographics-ratings-2025`,\r\n      payload\r\n    );\r\n  }\r\n\r\n  saveRequestForScores(payload: any) {\r\n    return this.dataService.post(\r\n      `downloadrequest/demographics-scores`,\r\n      payload\r\n    );\r\n  }\r\n\r\n  saveRequestForRatingsAndScore(payload: any) {\r\n    return this.dataService.post(`downloadrequest/demographics-all`, payload);\r\n  }\r\n\r\n  saveRequestForSPHDRatingsAndScore(payload: any) {\r\n    return this.dataService.post(`downloadrequest/demographics-all-sp-hd`, payload);\r\n  }\r\n}\r\n","<drdp-container additionClasses=\"w-full mt-4\">\r\n  <drdp-container color=\"lightBlue\">\r\n    <form [formGroup]=\"searchForm\" #ngForm=\"ngForm\">\r\n      <div *ngIf=\"isPilot\" class=\"pl-2\">\r\n        <mat-checkbox\r\n          color=\"primary\"\r\n          formControlName=\"isAllPilot\"\r\n        >\r\n        </mat-checkbox>\r\n        <label class=\"inline\">\r\n          All Pilot\r\n        </label>\r\n      </div>\r\n      <div\r\n        class=\"flex grid grid-cols-1 grid-rows-2 md:grid-cols-2 lg:grid-cols-5 p-2 gap-2 md:gap-3 flex-row content-center\">\r\n        <div class=\"col-span-1 self-end\">\r\n          <drdp-select-state [initialStateId]=\"initStateId\" (state)=\"handleState($event)\" [required]=\"true\"\r\n            [clear]=\"clearDropdown\" [invalid]=\"true\" #stateSelect>\r\n          </drdp-select-state>\r\n        </div>\r\n        <div *ngIf=\"!isAllPilot.value\" class=\"col-span-1 self-end\">\r\n            <div *ngIf=\"!disableDropdown\">\r\n              <drdp-select-agency (agency)=\"handleChosenAgency($event)\" [stateId]=\"stateId.value\"\r\n                [initialAgencyId]=\"initAgencyId\" [required]=\"true\" [clear]=\"clearDropdown\" #agencySelect>\r\n              </drdp-select-agency>\r\n            </div>\r\n            <div *ngIf=\"disableDropdown\">\r\n              <drdp-select-agency (agency)=\"handleChosenAgencies($event)\" [stateId]=\"stateId.value\"\r\n                [required]=\"true\" [clear]=\"clearDropdown\" [multiSelect]=\"true\" #agencySelect>\r\n              </drdp-select-agency>\r\n            </div>\r\n        </div>\r\n        <div class=\"col-span-1 self-end\">\r\n          <div *ngIf=\"!disableDropdown && !isAllPilot.value\">\r\n            <drdp-select-rating-period #ratingPeriodSelect (ratingPeriod)=\"handleChosenRatingPeriod($event)\"\r\n            [initialRatingPeriodId]=\"ratingPeriodId.value\" [agencyId]=\"agencyId.value\" [required]=\"true\" [showPilotRps]=\"isPilot\" [default2025]=\"isPilot\"\r\n            [clear]=\"clearDropdown\">\r\n          </drdp-select-rating-period>\r\n          </div>\r\n          <div *ngIf=\"disableDropdown || isAllPilot.value\">\r\n            <drdp-select-global-rating (ratingPeriod)=\"handleChosenRatingPeriod($event)\" \r\n                                      [required]=\"true\"\r\n                                      [showAll]=\"!isPilot\"\r\n                                      [showPilotRps]=\"isPilot\">\r\n            </drdp-select-global-rating>\r\n          </div>\r\n        </div>\r\n        <div *ngIf=\"!disableDropdown && !isAllPilot.value\" class=\"col-span-1 self-end\">\r\n          <drdp-select-site (site)=\"handleChosenSite($event)\" [agencyId]=\"agencyId.value\" [multiSelect]=\"true\"\r\n            [required]=\"true\" [multiSelectInitVals]=\"false\" [clear]=\"clearDropdown\" #sitesSelect>\r\n          </drdp-select-site>\r\n        </div>\r\n\r\n        <div *ngIf=\"!disableDropdown && !isAllPilot.value\" class=\"col-span-1 self-end\">\r\n          <drdp-filter-select #classroomSelect label=\"Classroom\" [options]=\"classroomList\" [selectType]=\"select.Class\"\r\n            [required]=\"true\" (onSelected)=\"handleChosenClassroom($event)\" [multiSelect]=\"true\">\r\n          </drdp-filter-select>\r\n        </div>\r\n\r\n        <div *ngIf=\"!isAllPilot.value\" class=\"col-span-1 self-end\">\r\n          <drdp-select-age-grade #ageGroupInstrumentSelect [initialageGradeId]=\"ageGradeInstrumentId.value\"\r\n            (ageGrade)=\"handleAgeGroupInstrument($event)\" [stateId]=\"stateId.value\" [multiSelect]=\"false\"\r\n            [clear]=\"clearDropdown\" [required]=\"true\" label=\"Age Group\" [isPilot]=\"isPilot\">\r\n          </drdp-select-age-grade>\r\n\r\n        </div>\r\n        <div *ngIf=\"!disableDropdown && !isAllPilot\" class=\"hidden lg:block lg:col-span-3 xl:col-span-3 self-end\"></div>\r\n        <div class=\"flex flex-row justify-evenly pt-10 lg:col-span-2 xl:col-span-1 md:self-end xl:my-auto mt-2 md:mt-0\">\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn type=\"submit\">\r\n              <span class=\"px-2\" (click)=\"search()\">Download</span>\r\n            </drdp-btn>\r\n          </div>\r\n          <div class=\"col-span-1\">\r\n            <drdp-btn color=\"outline\" (click)=\"clear()\"> Clear </drdp-btn>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </drdp-container>\r\n</drdp-container>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n  inject,\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { SelectType } from '@core/enums/select';\r\nimport { IClassroomAssignment } from '@core/interfaces/iclasses';\r\nimport { AuthService } from '@core/services/auth.service';\r\nimport { ClassService } from '@core/services/class.service';\r\nimport { LookupService } from '@core/services/lookup.service';\r\nimport { RatingPeriodService } from '@core/services/rating-period.service';\r\nimport { ToastService } from '@core/services/toast.service';\r\nimport { FilterSelectComponent } from '@shared/components/dropdowns/filter-select/filter-select.component';\r\nimport { take } from 'rxjs';\r\n@Component({\r\n  selector: 'drdp-download-search',\r\n  templateUrl: './download-search.component.html',\r\n  styleUrls: ['./download-search.component.scss'],\r\n})\r\nexport class DownloadSearchComponent implements OnInit {\r\n  @Output() searchClicked = new EventEmitter();\r\n  @Input() set disableDropdown(value: boolean) {\r\n    this._disableDropdown = value;\r\n    if (this.searchForm) {\r\n      this.updateFormValidation();\r\n    }\r\n  }\r\n  \r\n  get disableDropdown(): boolean {\r\n    return this._disableDropdown;\r\n  }\r\n  \r\n  private _disableDropdown = false;\r\n\r\n  @ViewChild('classroomSelect') classroomSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('agencySelect') agencySelect: FilterSelectComponent | undefined;\r\n  @ViewChild('sitesSelect') sitesSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ratingPeriodSelect') ratingPeriodSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @ViewChild('stateSelect') stateSelect: FilterSelectComponent | undefined;\r\n  @ViewChild('ageGroupInstrumentSelect') ageGroupInstrumentSelect:\r\n    | FilterSelectComponent\r\n    | undefined;\r\n  @Input() isPilot = false;\r\n\r\n  get stateId() {\r\n    return this.searchForm.get('stateId');\r\n  }\r\n  get agencyId() {\r\n    return this.searchForm.get('agencyId');\r\n  }\r\n  get agencyIds() {\r\n    return this.searchForm.get('agencyIds');\r\n  }\r\n  get siteIds() {\r\n    return this.searchForm.get('siteIds');\r\n  }\r\n  get ratingPeriodId() {\r\n    return this.searchForm.get('ratingPeriodId');\r\n  }\r\n  get classIds() {\r\n    return this.searchForm.get('classIds');\r\n  }\r\n  get ageGradeInstrumentId() {\r\n    return this.searchForm.get('ageGradeInstrumentId');\r\n  }\r\n  get isAllPilot() {\r\n    return this.searchForm.get('isAllPilot');\r\n  }\r\n\r\n  auth = inject(AuthService);\r\n  fb = inject(FormBuilder);\r\n  ratingPeriodService = inject(RatingPeriodService);\r\n  lookup = inject(LookupService);\r\n  classService = inject(ClassService);\r\n  toastService = inject(ToastService);\r\n\r\n  user = this.auth.getCurrentUser();\r\n  initStateId: number | null = this.user.stateId;\r\n  initAgencyId: number | null = this.user.agencyId;\r\n  searchForm: FormGroup | any;\r\n  classroomList: IClassroomAssignment[] = [];\r\n  clearDropdown = false;\r\n  select = SelectType;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {\r\n    this.initializeForm();\r\n  }\r\n\r\n  initializeForm(): void {\r\n    this.searchForm = this.fb.group({\r\n      stateId: [this.user.stateId ?? null, [Validators.required]],\r\n      agencyId: [this.user.agencyId ?? null],\r\n      agencyIds: [null],\r\n      ratingPeriodId: [null, [Validators.required]],\r\n      siteIds: [null],\r\n      classIds: [null],\r\n      ageGradeInstrumentId: [null, [Validators.required]],\r\n      isAllPilot: [false],\r\n    });\r\n  \r\n    // Add listener to isAllPilot control\r\n    this.searchForm.get('isAllPilot')?.valueChanges.subscribe((isAllPilot: boolean) => {\r\n      this.updateValidators(isAllPilot);\r\n    });\r\n  }\r\n  \r\n  updateValidators(isAllPilot: boolean): void {\r\n    const controlsToUpdate = ['agencyId', 'agencyIds', 'siteIds', 'classIds', 'ageGradeInstrumentId'];\r\n    \r\n    controlsToUpdate.forEach(controlName => {\r\n      const control = this.searchForm.get(controlName);\r\n      if (control) {\r\n        if (this.isPilot && isAllPilot) {\r\n          control.clearValidators();\r\n        } else {\r\n          this.agencyId.setValue(this.user.agencyId);\r\n          this.updateFormValidation();\r\n        }\r\n        control.updateValueAndValidity();\r\n      }\r\n    });\r\n  }\r\n  \r\n  updateFormValidation(): void {\r\n    if (this.disableDropdown) {\r\n      this.searchForm.get('agencyId').clearValidators();\r\n      this.searchForm.get('siteIds').clearValidators();\r\n      this.searchForm.get('classIds').clearValidators();\r\n      this.searchForm.get('agencyIds').setValidators([Validators.required]);\r\n    } else {\r\n      this.searchForm.get('agencyId').setValidators([Validators.required]);\r\n      this.searchForm.get('siteIds').setValidators([Validators.required]);\r\n      this.searchForm.get('classIds').setValidators([Validators.required]);\r\n      this.searchForm.get('agencyIds').clearValidators();\r\n    }\r\n  \r\n    this.searchForm.get('agencyId').updateValueAndValidity();\r\n    this.searchForm.get('siteIds').updateValueAndValidity();\r\n    this.searchForm.get('classIds').updateValueAndValidity();\r\n    this.searchForm.get('agencyIds').updateValueAndValidity();\r\n  }\r\n\r\n  handleState(state: any) {\r\n    this.stateId.setValue(state?.id);\r\n    this.agencyId.setValue(null);\r\n    this.ageGradeInstrumentId.setValue(null);\r\n  }\r\n\r\n  handleChosenAgency(agency: any): void {\r\n    this.agencyId.setValue(agency?.id);\r\n    this.classIds.setValue(null);\r\n    this.classroomList = [];\r\n  }\r\n\r\n  handleChosenAgencies(agency: any): void {\r\n    const selectedAgencyIds =\r\n      agency?.length > 0 ? agency.map((c: { id: number }) => c.id) : null;\r\n    this.agencyIds.setValue(selectedAgencyIds);\r\n    this.agencyId.setValue(null);\r\n  }\r\n\r\n  handleChosenSite(sites: any): void {\r\n    const selectedSiteIds =\r\n      sites.length > 0 ? sites.map((c: { id: number }) => c.id) : null;\r\n    this.siteIds.setValue(selectedSiteIds);\r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  handleChosenClassroom(classrooms: any): void {\r\n    const selectedClassIds =\r\n      classrooms.length > 0\r\n        ? classrooms.map((c: { id: number }) => c.id)\r\n        : null;\r\n    this.classIds.setValue(selectedClassIds);\r\n  }\r\n\r\n  handleAgeGroupInstrument(ageGroupInstrument: any): void {\r\n    this.ageGradeInstrumentId.setValue(ageGroupInstrument?.id);\r\n  }\r\n\r\n  handleChosenRatingPeriod(ratingPeriod: any): void {\r\n    if (ratingPeriod) {\r\n      this.ratingPeriodId.setValue(ratingPeriod?.id);\r\n    }\r\n    \r\n    this.updateClassroomDropdown();\r\n  }\r\n\r\n  updateClassroomDropdown(): void {\r\n    this.classroomList = [];\r\n    const payload: any = {};\r\n    payload.siteIds = this.siteIds.value ?? null;\r\n    payload.ratingPeriodId = this.ratingPeriodId.value ?? '';\r\n    payload.useClassId = true;\r\n\r\n    if (payload.siteIds?.length > 0 && payload.ratingPeriodId > 0) {\r\n      this.classService\r\n        .getClassesBySitesAndRatingPeriod(payload)\r\n        .pipe(take(1))\r\n        .subscribe((res: any) => {\r\n          this.classroomList = res.filter(\r\n            (value: any, index: any, self: any) =>\r\n              index === self.findIndex((t: any) => t.id === value.id && (value.isPilot ==  this.isPilot))\r\n          );\r\n        });\r\n    }\r\n  }\r\n\r\n  clear(): void {\r\n    this.ageGradeInstrumentId.setValue(null);\r\n    this.ratingPeriodId.setValue(null);\r\n    this.classIds.setValue(null);\r\n    this.siteIds.setValue(null);\r\n    this.classroomSelect?.clear();\r\n    this.clearDropdown = true;\r\n    this.classroomList = [];\r\n\r\n    if (!this.stateSelect?.disabled) {\r\n      this.initStateId = 0;\r\n      this.stateId.setValue(null);\r\n    }\r\n\r\n    if (!this.agencySelect?.disabled) {\r\n      this.agencyId.setValue(null);\r\n    }\r\n  }\r\n\r\n  search() {\r\n    if (this.searchForm.invalid) {\r\n      this.toastService.error('Please enter all required fields.');\r\n      return;\r\n    }\r\n\r\n    if (this.isAllPilot.value) {\r\n      const payload = {\r\n        stateId: this.stateId.value,\r\n        isAllPilot: true\r\n      };\r\n      this.searchClicked.emit(payload);\r\n    } else {\r\n      this.searchClicked.emit(this.searchForm.value);\r\n    }\r\n  }\r\n}\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics',\r\n  templateUrl: './download-demographics.component.html',\r\n  styleUrls: ['./download-demographics.component.scss'],\r\n})\r\nexport class DownloadDemographicsComponent implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any) {\r\n    this.downloadService\r\n      .downloadDemographics(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        const file = new Blob([res], { type: 'text/csv' });\r\n        const fileUrl = URL.createObjectURL(file);\r\n        const link = document.createElement('a');\r\n        link.href = fileUrl;\r\n        let fileName = 'demographics';\r\n        link.download = `${fileName.replace(/ /g, '_')}.csv`;\r\n        link.click();\r\n      });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Download Demographics\"></drdp-title>\r\n    <div>\r\n      <p>Select a rating period and classroom to generate a report for all the children in the classroom. \r\n        The report will display demographic information for the selected children. \r\n        The file will be available in your download folder.</p>\r\n    </div>\r\n  </div>\r\n\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\"></drdp-download-search>\r\n  </div>\r\n","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics-ratings',\r\n  templateUrl: './download-demographics-ratings.component.html',\r\n  styleUrls: ['./download-demographics-ratings.component.scss'],\r\n})\r\nexport class DownloadDemographicsRatingsComponent implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  dialog = inject(MatDialog);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any) {\r\n    this.downloadService\r\n      .saveRequestForRatings(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.displaySuccessMessage();\r\n        }\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage() {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n\r\n    this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Download Demographics Include Ratings\"></drdp-title>\r\n    <div>\r\n      <p>Select a rating period and classroom to generate a report for all the children in the classroom. \r\n        The report will display demographic and ratings information for the selected children. \r\n        The file will be sent to the email associated with the user account. </p>\r\n    </div>\r\n  </div>\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\"></drdp-download-search>\r\n</div>","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics-scores',\r\n  templateUrl: './download-demographics-scores.component.html',\r\n  styleUrls: ['./download-demographics-scores.component.scss'],\r\n})\r\nexport class DownloadDemographicsScoresComponent implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  dialog = inject(MatDialog);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any) {\r\n    this.downloadService\r\n      .saveRequestForScores(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.displaySuccessMessage();\r\n        }\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage() {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n\r\n    this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Download Demographics Include Scores\"></drdp-title>\r\n    <div>\r\n      <p>Select a rating period and classroom to generate a report for all the children in the classroom. \r\n        The report will display demographic and scores information for the children. \r\n        The file will be sent to the email associated with the user account.</p>\r\n    </div>\r\n  </div>\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\"></drdp-download-search>\r\n</div>","import { Component, OnInit, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics-all',\r\n  templateUrl: './download-demographics-all.component.html',\r\n  styleUrls: ['./download-demographics-all.component.scss'],\r\n})\r\nexport class DownloadDemographicsAllComponent implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  dialog = inject(MatDialog);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any) {\r\n    this.downloadService\r\n      .saveRequestForRatingsAndScore(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.displaySuccessMessage();\r\n        }\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage() {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n\r\n    this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Download Demographics Include Ratings & Scores\"></drdp-title>\r\n    <div>\r\n      <p>Select a rating period and classroom to generate a report for all the children in the classroom. \r\n        The report will display demographic and ratings plus scores information for the selected children. \r\n        The file will be sent to the email associated with the user account.</p>\r\n    </div>\r\n  </div>\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\"></drdp-download-search>\r\n</div>","import { Component, inject, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics-all-sp-hs',\r\n  templateUrl: './download-demographics-all-sp-hs.component.html',\r\n  styleUrls: ['./download-demographics-all-sp-hs.component.scss']\r\n})\r\nexport class DownloadDemographicsAllSPHSComponent implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  dialog = inject(MatDialog);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any): void {\r\n    this.downloadService\r\n      .saveRequestForSPHDRatingsAndScore(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.displaySuccessMessage();\r\n        }\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage(): void {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready.',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n\r\n    this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"Download Demographics Include Ratings & Scores\"></drdp-title>\r\n    <div>\r\n      <p>Select a rating period and classroom to generate a report for all the children in the classroom. \r\n        The report will display demographic and ratings plus scores information for the selected children. \r\n        The file will be sent to the email associated with the user account.</p>\r\n    </div>\r\n  </div>\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\" [disableDropdown]=\"true\"></drdp-download-search>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { DrdpLayoutComponent } from '../drdp-layout/drdp-layout.component';\r\nimport { AuthGuard } from '@core/guards/auth.guard';\r\nimport { PermissionGuard } from '@core/guards/permission.guard';\r\nimport { Permission } from '@core/enums/permissions';\r\nimport { DownloadDemographicsComponent } from './download-demographics/download-demographics.component';\r\nimport { DownloadDemographicsRatingsComponent } from './download-demographics-ratings/download-demographics-ratings.component';\r\nimport { DownloadDemographicsScoresComponent } from './download-demographics-scores/download-demographics-scores.component';\r\nimport { DownloadDemographicsAllComponent } from './download-demographics-all/download-demographics-all.component';\r\nimport { DownloadDemographicsAllSPHSComponent } from './download-demographics-all-sp-hs/download-demographics-all-sp-hs.component';\r\nimport { DownloadDemographicsRatings2025Component } from './download-demographics-ratings2025/download-demographics-ratings2025.component';\r\n\r\nconst routes: Routes = [\r\n  {\r\n    path: 'downloads',\r\n    canActivateChild: [AuthGuard],\r\n    component: DrdpLayoutComponent,\r\n    children: [\r\n      {\r\n        path: 'demographics',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.DownloadDemographics },\r\n        component: DownloadDemographicsComponent,\r\n      },\r\n      {\r\n        path: 'demographics-ratings',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.DownloadDemographicsInclRatings },\r\n        component: DownloadDemographicsRatingsComponent,\r\n      },\r\n      {\r\n        path: '2025-demographics-ratings',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.PilotIncludeRatings },\r\n        component: DownloadDemographicsRatings2025Component,\r\n      },\r\n      {\r\n        path: 'demographics-scores',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.DownloadDemographicsInclScores },\r\n        component: DownloadDemographicsScoresComponent,\r\n      },\r\n      {\r\n        path: 'demographics-all',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.DownloadDemographicsInclRatingsandScores },\r\n        component: DownloadDemographicsAllComponent,\r\n      },\r\n      {\r\n        path: 'demographics-all-sp-hs',\r\n        canActivate: [PermissionGuard],\r\n        data: { permission: Permission.SharedChildAccessDemographicsReport },\r\n        component: DownloadDemographicsAllSPHSComponent,\r\n      }\r\n    ],\r\n  },\r\n];\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class DownloadsRoutingModule {}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DownloadRequestService } from '@core/services/download-request.service';\r\nimport { ConfirmationModalComponent } from '@shared/components/confirmation-modal/confirmation-modal.component';\r\nimport { take } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'drdp-download-demographics-ratings2025',\r\n  templateUrl: './download-demographics-ratings2025.component.html',\r\n  styleUrls: ['./download-demographics-ratings2025.component.scss']\r\n})\r\nexport class DownloadDemographicsRatings2025Component implements OnInit {\r\n  downloadService = inject(DownloadRequestService);\r\n  dialog = inject(MatDialog);\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  downloadDemographics(searchValues: any) {\r\n    this.downloadService\r\n      .saveRequestForRatings2025(searchValues)\r\n      .pipe(take(1))\r\n      .subscribe((res) => {\r\n        if (res) {\r\n          this.displaySuccessMessage();\r\n        }\r\n      });\r\n  }\r\n\r\n  displaySuccessMessage() {\r\n    const modal = {\r\n      data: {\r\n        modalInfo: {\r\n          title: 'Success',\r\n          message:\r\n            'Your request is being processed. You will receive an email at the address associated with your account as soon as the report is ready',\r\n          primaryBtnClass: 'blue',\r\n          primaryBtnText: 'OK',\r\n          showCancel: false,\r\n        },\r\n      },\r\n    };\r\n\r\n    this.dialog.open(ConfirmationModalComponent, {\r\n      data: modal,\r\n    });\r\n  }\r\n}\r\n","<div class=\"p-5\">\r\n  <div>\r\n    <drdp-title title=\"2025 Download Demographics Include Ratings\"></drdp-title>\r\n    <div>\r\n      <p> Select a rating period and classroom to generate a report for all the children in the classroom. The report\r\n        will display demographic information for the students. </p>\r\n    </div>\r\n  </div>\r\n  <drdp-download-search (searchClicked)=\"downloadDemographics($event)\" [isPilot]=\"true\"></drdp-download-search>\r\n</div>\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\nimport { DownloadsRoutingModule } from './downloads-routing.module'\r\nimport { SharedModule } from '@shared/shared.module'\r\nimport { FormsModule,ReactiveFormsModule } from '@angular/forms'\r\nimport { CoreModule } from '@core/core.module'\r\nimport { PipesModule } from '@core/pipes/pipes.module';\r\nimport { DownloadDemographicsAllComponent } from './download-demographics-all/download-demographics-all.component'\r\nimport { DownloadDemographicsScoresComponent } from './download-demographics-scores/download-demographics-scores.component'\r\nimport { DownloadDemographicsRatingsComponent } from './download-demographics-ratings/download-demographics-ratings.component'\r\nimport { DownloadDemographicsComponent } from './download-demographics/download-demographics.component';\r\nimport { DownloadSearchComponent } from './download-search/download-search.component';\r\nimport { DownloadDemographicsAllSPHSComponent } from './download-demographics-all-sp-hs/download-demographics-all-sp-hs.component';\r\nimport { DownloadDemographicsRatings2025Component } from './download-demographics-ratings2025/download-demographics-ratings2025.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    DownloadDemographicsComponent,\r\n    DownloadDemographicsRatingsComponent,\r\n    DownloadDemographicsScoresComponent,\r\n    DownloadDemographicsAllComponent,\r\n    DownloadSearchComponent,\r\n    DownloadDemographicsAllSPHSComponent,\r\n    DownloadDemographicsRatings2025Component\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    DownloadsRoutingModule,\r\n    SharedModule,\r\n    FormsModule,\r\n    CoreModule,\r\n    ReactiveFormsModule,\r\n    PipesModule.forRoot()\r\n  ],\r\n  providers: [],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class DownloadsModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { AppComponent } from './app.component';\r\nimport { PathInterceptorService } from '@core/interceptors/path-interceptor.service';\r\nimport { AuthInterceptorService } from '@core/interceptors/auth-interceptor.service';\r\nimport { CoreModule } from '@core/core.module';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { UserModule } from '@views/user/user.module';\r\nimport { ConfigurationModule } from '@views/user/configuration/configuration.module';\r\nimport { AccountsModule } from '@views/user/accounts/accounts.module';\r\nimport { ResourceModule } from '@views/resource/resource.module';\r\nimport { UploadModule } from '@views/user/upload/upload.module';\r\nimport { DownloadsModule } from '@views/user/downloads/downloads.module';\r\nimport { RecaptchaV3Module, RECAPTCHA_V3_SITE_KEY, RecaptchaSettings } from 'ng-recaptcha';\r\nimport { environment } from '@env/environment';\r\n\r\nconst recaptchaSettings: RecaptchaSettings = { siteKey: environment.recaptcha };\r\n\r\n@NgModule({\r\n  declarations: [AppComponent],\r\n  imports: [\r\n    FormsModule,\r\n    BrowserModule,\r\n    AppRoutingModule,\r\n    CoreModule,\r\n    BrowserAnimationsModule,\r\n    HttpClientModule,\r\n    UserModule,\r\n    ConfigurationModule,\r\n    AccountsModule,\r\n    ResourceModule,\r\n    UploadModule,\r\n    DownloadsModule,\r\n    RecaptchaV3Module\r\n  ],\r\n  providers: [\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: AuthInterceptorService,\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useClass: PathInterceptorService,\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: RECAPTCHA_V3_SITE_KEY,\r\n      useValue: recaptchaSettings.siteKey,\r\n    },\r\n  ],\r\n  bootstrap: [AppComponent],\r\n})\r\nexport class AppModule {}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n  enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n  .catch(err => console.error(err));\r\n"]}