{"version":3,"file":"main.faa3a286fa9bfe1d.js","mappings":"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NACAA,8PACAA,yJACAA,6LACAA,6LACAA,kJACAA,gNACAA,6HACAA,+NACAA,+KACAA,0JACAA,6NACAA,wHACAA,mQACAA,oKACAA,sLACAA,kQACAA,2PACAA,wHACAA,oUACAA,mDACAA,iGACAA,iGACAA,qIACAA,uJACAA,6GACAA,qOACAA,uTACAA,mRACAA,yQACAA,iPACAA,iPACAA,yJACAA,wIACAA,uDACAA,oGACAA,iLACAA,4QACAA,+KACAA,0OACAA,mIACAA,6NACAA,uLACAA,uWACAA,uNACAA,2GACAA,2LACAA,oKACAA,gIACAA,+LACAA,uKACAA,kFACAA,8MACAA,8JACAA,+KACAA,ocACAA,iNACAA,4JACAA,yFACAA,gEACAA,0LACAA,qJACAA,oHACAA,sEACAA,6IACAA,6RACAA,oSACAA,sHACAA,oMACAA,oMACAA,2MACAA,4KACAA,qKACAA,gLACAA,wGACAA,wMACAA,6MACAA,0KACAA,4JACAA,+LACAA,mCACAA,uIACAA,uFACAA,+EACAA,4DACAA,2IACAA,iCACAA,yFACAA,gCACAA,wFACAA,2BACAA,8BACAA,wDACAA,gHACAA,0IACAA,qGACAA,oHACAA,gEACAA,wHACAA,qDACAA,yCACAA,wGACAA,8FACAA,2GACAA,0HACAA,0IACAA,uHACAA,gGACAA,6OACF,CAvJA,CAAYA,QAAgB,KCEI3tC,OAAO4tC,KAAKD,IAArC,MAEME,GAAmB,IAAIrtC,IAAIR,OAAOmsB,QAAQwhB,IACpDluC,IAAI,EAAEkY,EAAKzX,KAAW,CAACyX,EAAKzX,KCL/B,IAAY4tC,IAAZ,SAAYA,GAEVA,iCAEAA,2EAEAA,2BAEAA,mBAEAA,uBAEAA,6CAEAA,6BAEAA,+BAEAA,iCAEAA,oCAEAA,8BAEAA,gDAEAA,4BAEAA,0CAEAA,oCAEAA,oCAEAA,uCACF,CAnCA,CAAYA,QAAgB,KCSrB,MAAMC,GAGX9iD,YAAoBC,eAFZC,aAAU,GAAG9H,gBAA0BA,gDAEP,CAEjCu2C,SACL,OAAOzuC,KAAKD,KAAKG,IAAcF,KAAKG,QACtC,yCAPWyiD,IAAqB3hD,yCAArB2h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CA,eACA,WACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,cACA,iBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,qBACA,kBACA,qBACA,YACA,eACA,YACA,eACA,WACA,cACA,WACA,cACA,YACA,eACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,UACA,aACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,eACA,kBACA,cACA,YACA,eACA,eACA,kBACA,cACA,iBACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,iBACA,oBACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,YACA,kBACA,qBACA,eACA,cACA,iBACA,YACA,eACA,YACA,eACA,YACA,iBACA,oBACA,eACA,YACA,eACA,kBACA,qBACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,mBAIA,cACA,WACA,WACA,CACA,cACA,eACA,8CACA,gCACAmK,CACA,CACA,YACA,CACAisC,kBACA,sBACA,EACAA,YACAC,aACAD","names":["CommonStatusEnumList","CommonStatusEnum","environment","production","window","env","prod","demo","searchBotDisallow","baseHref","apiEndpoint","apiUrl","trustedNetClientId","clientId","trustedVersion","authEndPoint","authUrl","allowedDomains","fileServerEndpoint","announcementApiEndpoint","supportEmail","infoMessage","lkoEducation","iot","lkoStudyProgress","invalidTokenMessage","headerTitle","full","fullHeader","short","shortHeader","apiPaths","ExamList","Student","DictOrganization","DictStudentAcademicState","DictStudentBudget","DictStudentBudgetSubCategory","EduGroup","Languages","OrdersStudyPeriod","StudEduGroup","StudentAcademicState","StudentBudgetState","StudPerson","Personal","EducationProgram","EducationIntensityData","EducationBUP","BudgetTime","DirectionActivity","StudPlan","MiddleControl","CurrentControl","DictAttestation","WorkScheduleType","studentcarddisplaysetting","displaysettingcategory","displaysystemsettingcategory","displaysystemsetting","systemsettingnotification","emailnotification","dictEmailType","dictPhoneType","dictSocialNetworkType","email","phone","socialNetwork","currentcontrolext","services","menuItems","projecting","daysInWeek","LKApi","standard","standardtype","studylevel","qualification","oop","faculty","kafedra","trainingLevel","dictcycle","dictCycleType","dictComponent","dictComponentType","dictLessonType","dictLessonForm","dictAcceleratedStudyBase","dictFormDesignerDataType","dictWorkCategorySchedule","dictWorkScheduleStudyProcessType","dictWorkStudyPlanType","educationPrograms","competenceMatrixService","eStandardTypes","dictEducationLevel","dictQualification","dictTrainingLevel","mfc","home","dict","externalDict","education","student","application","applicationConstructor","applicationComments","commonApplicationConstructor","oferta","userSignature","dictRegulationType","regulation","regulationFile","portfolio","maxFileSize","portfolio_maxFileSize","document","achievement","portfolioDict","announcement","commentMaxFileSize","announcement_commentMaxFileSize","employment","dictEmployerPost","LKEducationPlanService","constructor","http","this","getAllEducationPlans","get","baseUrl","getEducationPlanByStudentId","studentId","pipe","catchError","handleError","error","errorMessage","ErrorEvent","message","status","console","log","throwError","core","factory","LKStudPlanService","getAllStudPlans","getStudPlan","LKStudEduGroupService","getStudEduGroup","getStudEduGroupById","getAllStudEduGroups","getGroupEducationPlanByStudentId","getEducationProgramByStudentId","getStudyFormByStudentId","LKStudentService","getStudent","getTokenForExternalServices","responseType","getStudentByLogin","getCurrentStudent","GetStudentInfo","getStudents","DictWorkScheduleStudyProcessTypeService","getAllDictWorkSchedule","dictWorkCategoryScheduleEnumList","dictWorkCategoryScheduleEnum","EducationalProcessScheduleCellComponent","semestrBeginWeekNumber","installationSessionBeginDayNumber","installationSessionEndDayNumber","days","weekNumber","getDefaultDays","weekInfo","ngOnInit","daysAmount","symbol","backgroundColor","isSemesterBegin","includes","currentWeekNumber","isInstallationSession","isInstallationSessionBegin","installationSessionBeginWeekNumber","isInstallationSessionEnd","installationSessionEndWeekNumber","length","isWholeWeek","fillStart","forEach","dayInfo","fill","cell","Array","selectors","AddElectiveDisciplineStudentCommand","electiveDisciplineId","studyYear","DeleteElectiveDisciplineStudentCommand","electiveDisciplineStudentId","SignStatementCommand","DateFromUTCAsLocal","date","Date","replace","TimeZoneFix","isStringDate","moment_moment","utc","DateToString","format","common","transform","NotificationsService","notificationService","showSuccess","show","content","hideAfter","width","position","horizontal","vertical","animation","type","duration","style","icon","showError","getErrorMessage","detail","Message","IotService","getStudentElectiveDisciplines","post","getStudentStudyYears","addStudentElectiveDiscipline","command","deleteStudentElectiveDiscipline","delete","body","signStatement","IotEmailSubscriptionService","subscribeStudentToEmail","unsubscribeStudentFromEmail","getStudentSubscriptionEmailStatus","IotComponent","iotService","iotEmailSubscriptionService","context","dataItem","hasEnrolled","gray","subscribe","next","studentStudyYears","yearAdmission","studentElectiveDisciplines","deadlineDateEnd","find","sed","isCurrentYear","x","isCurrentStudyYear","today","dateEnd","showDecanMessage","checkIfCanSign","checkIfSigned","checkStudentDeadlines","hasLoaded","LoadStudentElectiveDiscipline","hasAnyEnrolled","electiveDisciplineDto","some","item","hasChosenElectiveDiscipline","getElectiveDisciplineName","edd","electiveDisciplineName","getElectiveDisciplineLocation","disciplineLocation","getElectiveDisciplinePersonInfo","enrolled","fio","phoneNumber","hasDeadline","cantSign","every","dpv","discipline","signed","closeDialog","openedDialog","closeEmailDialog","openedEmailDialog","openEmailDialog","checkForSameElectiveDisciplineInStudyYear","addElectiveDisciplineStudentCommand","hasSameElectiveDisciplineInStudyYear","enroll","unroll","deleteElectiveDisciplineStudentCommand","signStatementCommand","studentEnabledEmailNotifications","subscribeOrUnsubscribeStudentToEmail","i0","ctx","EducationComponent","educationPlanService","studPlanService","studEduGroupService","studentService","dictWorkScheduleStudyProcessTypeService","router","route","String","snapshot","paramMap","firstName","lastName","middleName","isMale","birthday","studyFormName","studyFormSName","cipher","name","shortName","dictStandardTypeId","dictEducationLevelId","dictTrainingLevelId","qualificationName","qualificationSName","lkEducationProgramId","lkEducationProgramExternalId","shortname","educationStandardId","educationStandard","dictQualificationId","departmentId","graduatingDepartment","department","educationPlanId","educationPlanExternalId","jsonData","educationProgramId","educationProgram","dictStudyFormId","dictStudyForm","studyForm","courseNum","groupName","facultyId","studPersonId","fullName","eduGroupId","eduGroup","educationPlan","field","dir","bupData","color","dataLevel","Level","planLevel0","planLevel1","planLevel2","noActive","Active","semester","dates","semesterBegin","findWeek","installationSessionBegin","semesterEnd","installationSessionEnd","IsTabSelected","id","undefined","tabNumber","toString","hasProfile","profilingCourseNumber","studEduGroup","response","_this","studPlan","studEducationPlan","planId","delay","ms","Promise","resolve","setTimeout","plan","educationProgramName","studGroupEducationProgram","trainingLevelId","filialId","mapLegend","filterScheduleLegend","emptyCell","dictWorkCategoryScheduleId","isInvolvedCalculating","arr","JSON","parse","profileValue","studyTechnologyName","DictStudyTechnology","Name","yearsLength","StudyYears","monthsLength","StudyMonths","studyFormValue","toLowerCase","currentComponent","planData","currentCycleId","Disciplines","DictCycleId","push","Id","Cipher","DictCycleSName","DictDisciplineName","DictCycleName","DepartmentName","ControllingActions","TotalNumberHours","sumHours","TotalLaborIntensity","sumIntensity","DictComponent","ParentDictComponent","CommonStatus","commonStatus","HiddenCipher","SName","HiddenTitle","DepartmentSName","ChildrenDiscipline","el","ElectiveDisciplines","SerialNumber","gridData","semesterNumbers","Set","Semesters","map","Number","totalColumns","title","totalData","tmp","col","Object","defineProperty","value","sumContactWork","actionsArr","filter","flatMap","actions","Map","DictControlActionName","DictControlActionId","values","sort","a","b","localeCompare","action","countActions","cnt","tmpRes","defaultDate","YearAdmission","semesterDates","sem","StartTraining","semesterNumber","semesterBeginWeekNumber","courseNumber","CourseNumber","InstallationSessionBegin","InstallationSessionEnd","distinctDates","getMonth","getDate","minDate","Math","min","s","getTime","maxDate","max","setDate","moment","diff","courseDatesStatistic","reduce","course","count","averageMinDate","dateYearEnd","setFullYear","getFullYear","yearEndOffset","leapYear","graphDates","i","leapOffset","tmpDate","leapOffsetEnd","tmpStartDate","tmpEndDate","start","end","round","getTableHeaderData","getTableData","groupBy","orderBy","EducationalProcessSchedules","legend","year","processScheduleData","sourceSemesters","templateTableData","tableData","sourceItem","items","SemesterNumber","sortCourse","workTypes","semesters","courseDateMin","week","WeekNumber","weeksNumber","weeks","SerialNumberWeek","currentWeek","DaysAmount","WorkType","Symbol","Color","currentSemester","installationSessionBeginWeek","installationSessionEndWeek","InstallationSession","getWeekDayNumber","CategoryId","sortEmpty","tableHeaderData","templateHeaderData","dateStart","at","month","getStudGroupEducationProgramByStudentId","removeDuplicateSemesters","result","DictControlActionAbbreviation","res","slice","displayCompetenceMatrix","string","t","Code","groupEducationPlan","students","getDictWorkScheduleStudyProcessType","disciplineCellClick","navigate","competenceMatrixCellClick","selectedDisciplineId","navigateToCompetenceMatrix","onTabSelect","event","index","url","open","startWeekDate","firstDayNumber","getDay","secondDayNumber","disciplines","cycleId","componentId","HiddenLaborIntensity","sum","current","HoursContactWork","controlActionId","isCourseWork","isCourseProject","HasCourseProject","HasCourseWork","ExamListComponent","subject","data","location","DisplaySettingEnumList","DisplaySettingEnum","DisplaySystemSettingEnumList","DisplaySystemSettingEnum","PhoneTypeList","PhoneType","SystemSettingNotification","StudentCardDisplaySettingService","BehaviorSubject","getStudentCardDisplaySettings","getAllStudentCardDisplaySettings","editStudentCardDisplaySetting","request","isHidden","displaySettings$","tokenStore","TokenStorageService","setToken","localStorage","removeItem","setItem","stringify","getAuthToken","tokens","getToken","accessToken","getAuthTokenType","tokenType","tokensJson","getItem","deleteToken","DisplaySystemSettingService","GetDisplaySettings","GetAllSystemDisplaySettings","EditSystemSetting","DictPhoneTypesService","getAllPhoneTypes","DictEmailTypesService","getAllEmailTypes","DictSocialNetworkService","getAllSocialNetworks","SystemSettingNotificationService","GetSystemsSettingContactNotification","EditSystemsSettingContactNotification","text","path","SettingsComponent","phone_r17","phone_r23","email_r29","socialNetwork_r35","HomeComponent","displaySettingService","jwtHelper","displaySystemSettingService","dictPhoneTypesService","dictEmailTypesService","dictSocialNetworkService","systemSettingNotificationService","channel","conversion","users","author","annotation","externalId","studentNumber","studPerson","day","dayName","token","user","decodeToken","studentModel","student_id","photoUrl","getDisplaySettings","getDisplaySystemSettings","getDisplaySystemSetting","getSystemsSettingContactNotification","getStudentInfo","studentInfo","displaySystemSetting","systemSettingContactNotification","showUsedFiltersBySetting","showFilter","arrowButton","systemSettingIsHidden","phoneFormat","input","startsWith","substring","getMobilePhones","phones","dictPhoneTypeId","phoneType","city","isMain","getCityPhones","getStudentEmails","emails","getPhoneTypeName","phoneTypeId","phoneTypes","phoneTypeName","getEmailTypeName","emailTypeId","emailTypes","emailType","emailTypeName","getDictSocialNetworkName","dictSocialNetworkId","socialNetworksTypes","socialType","socialNetworkName","getDomainFromUrl","socialNetworkUrl","split","getAllDictSocialNetworks","toAddContactPage","then","isCanAddContact","isDisplay","toEditContactPage","contactTypeName","contactId","shouldShowEditButton","addedByStudent","canEditDeaneryContacts","systemEnum","student_can_edit_deanery_contacts","canEditCurrentContactType","adminInitialize","role","isAdmin","StatusesListEnum","AttendedEnum","LessonType","CurrentControlService","getCurrentControlsByStudentSemester","studentSemesterId","MiddleControlService","getMiddleControlsByStudentId","getMiddleControlsByStudentSemester","getStudentMarksAverageScore","getStudentMarksByStudentSemester","getStudentSemesters","getMiddleControlById","DictAttestationService","GetDictAttestations","CurrentControlExtService","getDisciplines","getLesson","controllingActionExternalId","lessonType","checkAttended","qrId","getByStudentInSemester","physTrainingId","getPhysSubjectByStudentInSemester","getSemestersByPhysTrainingMarkByStudent","ProgressComponent","currentControlService","middleControlService","dictAttestationService","currentControlExtService","fesm2020_forms","semestrBegin","semestrEnd","semestrNum","pathParts","pathname","isStatementPhysDiscipline","isStatementDiscipline","getDictAttestations","dictAttestations","getMarkValue","getMiddleControlStudentMarksByStudentSemester","studentSemester","loading","middleControls","currentControlLoading","currentControls","valueChange","history","pushState","hideCurrentControl","getMarksCurrentControlExt","lastSemester","currentControlMarks","dictAttestationId","fieldName","att","attestations","hoursAbsent","ball","studentSemesters","semesterForm","lecture","dictDiscipline","concat","practice","getIcon","openStatement","controllingActionId","openStatementPhysical","statementDisciplines","statementLessons","average","formatNumber","back","physicalSports","physTrainingMarks","physAverage","TimeTableComponent","time","CallBackComponent","tokenStoreService","httpClient","queryParams","params","getTokenUrl","tokenUrl","first","switchMap","invalidLogin","lastUrl","href","err","getTokenUrlTrusted_3_0","getTokenUrlTrusted_1_5","code","state","key","codeVerifier","LoginpageComponent","login","_this2","authUrlGenerate","_this3","getAuthUrlTrusted_3_0","getAuthUrlTrusted_1_5","random","challenge","pkceChallenge","code_verifier","GetAuthCodeUrlParams","client_id","redirect_uri","origin","response_type","scope","code_challenge","code_challenge_method","prompt","urlParams","URLSearchParams","_this4","encodeURIComponent","protocol","host","AuthGuard","canActivate","isTokenExpired","stud_person_id","person_id","alert","navigateByUrl","EducationDisciplineComponent","returnToEducation","additionalHours","workTypeName","workAdditionalName","work","additionalWorks","contactWorkName","TypeWorks","ClassroomWork","Calc","Value","typeWork","intensityCount","counter","contactWorkHours","selfWorkHours","hoursCredited","controlHours","g","controllingActions","number","HoursSelfWork","HoursCredited","Control","j","activeSemesters","getActiveSemesters","findValue","workName","rassredPracticeName","IsDistributed","totalCount","filtered","idNumber","disciplineName","departmentName","typeWorks","dictControlWorks","controlActionsData","labourHours","splice","AdditionalWorks","controlActionNameArr","semesterArr","controlActionUniqueChars","semesterUniqueChars","controlActionIterator","semesterIterator","controlActionLetter","controlActionUnique","letter","semestersUnique","controlSum","contactSum","hoursCreditedSum","selfWorkSum","CompetenceMatrixComponent","cdRef","ngAfterViewChecked","detectChanges","DistributionCompetences","competenceMatrixData","ShowService","Subject","observer","asObservable","getShow","Badge","badge","CommentsService","getComments","message_id","deleteComments","file_r8","fileName","CommentsComponent","activatedroute","commentsService","comments","quantityComments","messageId","getFile","fileid","filename","dataType","binaryData","downloadLink","createElement","URL","createObjectURL","Blob","setAttribute","appendChild","click","removeChild","deleteComment","comment_id","getCurrentPerson","ngOnChanges","file_r4","ShowComponent","showService","allowedExtensions","userId","authorId","authorFio","published","attachments","message_type","messageType","tags","refreshBadge","sendComment","commentAttachments","text_comment","trim","formData","FormData","append","element","refreshComments","selectEventHandler","e","files","validationErrors","rawFile","removeFile","AlertService","getSearchMessages","page","query","tag","finish","AlertStatisticsService","getAlertStatistics","AlertComponent","alertService","alertStatisticsServise","total","firstParametr","calculatedParametr","notpress","press","notpresstatus","presstatus","clearAllFilters","skip","startdate","finishdate","findMessage","toISOString","alerts","messages","messageCount","str","indexOf","i1","i2","pageSize","onPageChange","SwitchUserService","tokenService","switchStudent","switchCurrentStudent","SwitchuserComponent","switchUserService","FormGroup","FormControl","Validators","itemHeight","caseSensitive","operator","getStudEduGroups","currentToken","studEduGroups","formGroup","reload","onCancel","AdminGuard","roles","ElectroResourcesComponent","decls","openRemoveDialog","dialogService","deleteTarget","height","minWidth","themeColor","openDialog","EmploymentService","getEmployments","getEmploymentById","addEmployment","updateEmployment","put","deleteEmployment","getEmploymentFile","employmentId","LKDictOrganizationService","getDictOrganizations","DictEmployerPostService","getAllEmployerPosts","EmploymentComponent","activateRoute","employmentService","organizationService","employerPostService","getAllOrganizations","getAllStudentEmployments","isInEditingMode","editedRowIndex","toLocalDatetime","dt","nameOrganization","organizations","organizationName","nameEmployerPost","employerPosts","postName","toPromise","reason","employments","moveToInfo","cancelHandler","closeEditor","grid","editHandler","saveCurrent","valid","isLine","saveRow","rowIndex","closeRow","removeHandler","DialogCloseResult","opened","downloadFile","scanFile","fileFullName","blob","saveAs","GridComponent","EmploymentInfoComponent","getFormGroup","onSave","employmentForm","setValue","updateValueAndValidity","markAllAsTouched","preventDefault","saveEmployment","dateFinish","dictOrganizationId","dictEmployerPostId","isCurrent","scanFileFullName","isEditingMode","getParamsFromRoute","file","SpecialModuleGuard","DisplaySystemSettingCategoryEnum","DisplaySystemSettingCaregoryEnum","EmailNotification","DisplaySettingCategoryService","getDisplaySettingCategories","DisplaySystemSettingCategoryService","EmailNotificationService","GetEmailNotification","EditEmailNotification","StudentcardsettingsComponent","displaySettingCategoryService","dictDisplaySystemSettingCategory","emailNotificationService","getDisplaySettingCategory","getDisplaySystemSettingCategory","getEmailNotification","displaySettings","displayCategory","applyHandlerDisplaySetting","applyHandlerSystemSetting","emailNotification","closeHandler","displaySystemSettingCategory","onValueChange","target","category","systemCategoryEnum","contacts","isCantEditSelected","systemSetting","CreateQuery","queryModel","entries","isArray","appendAll","n","PortfolioService","getDocuments","documentUrl","postDocument","putDocument","deleteDocument","downloadDocumentFile","getSimpleAchievements","achievementUrl","getAdvancedAchievements","postAchievement","putAchievement","deleteAchievement","downloadAchievementFile","postStatus","DictService","getDirectionActivities","getDocumentTypes","getStatuses","getTypes","SimpleAchievementsComponent","portfolioService","dictService","minFileSize","UntypedFormGroup","UntypedFormControl","directionActivityId","getAchievements","achievements","_","achievementList","complete","directionActivities","getDirectionActivitiesByFilter","directionActivitiesByFilter","displayDirectionActivityName","removeAchievement","editAchievement","editMode","resetForm","editForm","fileUploadedList","fileUploaded","addAchievement","closeEditForm","saveAchievement","achievementStatusReturned","fileUploads","reset","fileSelected","fileRemoved","AchievementStatusEnumList","DictAchievementStatusEnumList","AchievementStatusEnum","DictAchievementStatusEnum","OpenOnFocusDateDirective","onFocus","openOnFocus","toggle","onBlur","ctx_r18","hideAchievements","AdvancedAchievementsComponent","dictWorkTypeId","coefficient","markWithCoefficient","mark","comment","dictAchievementStatusName","dictAchievementStatusId","of","getWorkTypes","achievementPeriod","pretendentStartDate","listItem","hide","filteredAchievements","statuses","types","getWorkTypesByFilter","typesByFilter","workTypesTree","processFlatData","activityId","CheckRightsForEditing","showDeleteButton","getAchievementsByActivityId","formChanged","edited","saveReturnedAchievement","openRemoveApprovalDialog","changeStatus","statusEnum","achievementId","achievementStatusDate","isMigrationData","valueChangeDirectionActivity","valueChangeType","calculateMark","onChangeCoefficient","viewHandler","dictAchievementStatusDate","selectedWorkTypesTree","findWorkTypeTreeById","CheckForAchievementReturnedStatus","tree","node","found","editable","neededAchievementStatusForEditing","added","returned_for_revision","parentId","child","cancelEdit","hidePast","deepCopy","getUTCDate","monthWord","getUTCFullYear","AchievementsHomeComponent","getAchievementsSetting","lastValueFrom","isAdvancedVersion","portfolioSetting","ContactTypeEnumList","ContactTypeEnum","ApplicationStatusesEnum","EmailService","getById","emailId","addEmail","updateEmail","deleteEmail","sendActivateCode","toEmail","checkActivationCode","PhoneService","getPhoneById","updatePhone","addPhone","deletePhone","phoneId","SocialNetworkService","getSocialNetworkById","addSocialNetwork","updateSocialNetwork","socialNetworkId","deleteSocialNetwork","socialId","ContactComponent","emailService","phoneService","socialNetworksService","getEmailFormGroup","getSocialFormGroup","getPhoneFormGroup","getEmailById","onContactTypeChange","getCityPhoneById","initializeDictContactTypes","dictContactTypes","mobile_phone","dictContactTypeName","city_phone","socialnetwork","phoneForm","currentActive","phoneCityForm","emailForm","dictEmailTypeId","socialForm","setDefaultMainOptions","isCodeValid","isCodeSent","phoneFormatted","contactType","socialMode","emailMode","phoneMode","phoneCityMode","sendCodeToEmail","isWaitingServerResponse","finalize","checkValidCode","toProfile","onDeleteContact","contactTypeEnum","mobilePhone","cityPhone","social","deleteSocial","onSaveContact","saveEmail","savePhone","saveSocial","checkURLFormat","isFormInvalid","invalid","test","canBeDeleted","sortModeValues","ElementRefHelper","className","RegExp","parentElement","hasClass","ApplicationCategoryService","getApplicationCategories","hidden","ApplicationTypeService","getApplicationTypes","ApplicationStatusService","getAll","ApplicationService","timeZoneFix","createdAt","statusDate","getApplications","options","FilterMultiselectComponent","kendo_angular_grid","filterService","super","selectedValue","filterByField","valueField","onChange","onFilterChange","emit","filters","gridField","logic","DateRangeFilterComponent","popupService","popupClass","popupSubscription","onClose","activeElement","predicate","parentNode","closest","nativeElement","hasFilter","startDate","endDate","clearFilter","removeFilter","findByOperator","add_days","onStartChange","filterRange","onEndChange","root","op","filtersByField","AfterValueChangedDirective","subscription","stream","debounceTime","valueChangeDelay","afterValueChanged","ngOnDestroy","unsubscribe","MFCHomeComponent","applicationCategoryService","applicationTypeService","applicationStatusService","applicationService","pageStorageKey","take","buttonCount","pageSizes","info","previousNext","size","sortParameters","patchSort","getDicts","applicationCategories","applicationTypes","filterApplicationTypes","applicationStatuses","statusMap","set","applicationStatusEnum","totalApplicationCount","applications","pageChange","columnName","toUpperCase","mode","sortChange","filterChange","categoryChange","categoryIds","dictApplicationCategoryId","addApplication","navigateToSelectedApplication","originalEvent","onMouseUp","parent","gridRowIndex","getAttribute","button","onMouseDown","editableStatuses","displayFIOStatuses","statusActions","ApplicationTabsEnum","tabs","selector","displayInAddForm","hideOnStatuses","DocumentTypes","DocumentTypeStrings","AllowedActions","ReceiptTypesEnum","EnableDisciplineTable","CreateApplicationMainForm","EditApplicationMainForm","ApplicationDocumentList","createMap","textField","KendoProperties","ApplicationTypeSelectService","getCategoriesTree","tap","categories","d","ApplicationConstructorDocumentService","getDocument","constructorId","documentId","DocumentsService","notificationsService","errorHandler","downloadDocument","applicationId","getApplicationDocumentByPdf","getCompletedTemplate","PropertiesService","mapFormPropertyValue","applicationConstructorPropertyId","propertyType","propertyTypeEnum","propertyValue","mapPropertyValueForRequest","mapPropertyValuesByType","properties","boolProperties","intProperties","decimalProperties","dateProperties","dateRangeProperties","dictGuidProperties","dictGuidArrayProperties","fileProperties","tableProperties","stringProperties","capitalize","valueViewConverter","defaultValue","stringValue","intValue","int","decimalValue","decimal","dateValue","dateTime","dateRangeValue","boolValue","fileValue","File","dictGuidValue","dynamicDictValueIds","dictGuidArrayValue","tableValue","mapPropertyValue","getPropertyAccess","isEditableForAll","isEditableForInitiator","mapFormValues","form","group","getFormData","applicationPropertiesValueDto","property","valuesKey","arrayValue","itemKey","itemValue","itemKeyName","arrayItemKey","arrayItemValue","arrayItemKeyName","objectItemKey","objectItemValue","objectItemKeyName","ApplicationEditFormService","propertiesService","mapTabsValues","startIndex","tab","groupProperties","standardProperties","additionalProperties","setTabsData","tabsData","getTabsValues","saveTabData","tabIndex","findIndex","getTabValues","clearTabsData","setHasChanges","hasChanges","resetHasChanges","hasFormChanges","checkChanges$","mapApprovalSettings","settings","completedApprovalStep","approvalResult","lastIndexOf","currentStage","numberInApprovalSequence","currentIndex","isCurrentStage","isApplicationEditable","isAdd","ApplicationConstructorService","mapData","mapProperty","dictProperty","prop","dictPropertyEnum","dictValues","getApplicationConstructor","typeId","ApplicationFormService","relatedApplications","mapApplicationNumbers","applicationNumber","createApplication","updateApplication","getApplicationById","getApplicationNumbers","saveApplication","deleteApplication","downloadDocumentSign","downloadPropertyFile","TypeReceiptService","OpenOnFocusDirective","ApprovalStatusService","getApprovalStatuses","getApprovalStatus","RoleService","getRoles","getRole","SignatoryRoleService","getSignatoryRoles","ApplicationFormApprovalListComponent","cdr","approvalStatusService","dictRoleService","dictSignatoryRoleService","editFormService","changes","approvalSettings","dictRolesMap","dictSignatoryRolesMap","dictApprovalStatuses","comments_service_CommentsService","getCommentFile","commentId","commentFileId","addComment","MfcNotificationService","getNotificationCount","ApplicationFormCommentsComponent","activatedRoute","mfcNotificationService","applicationFormId","nonNullable","validators","accept","join","maxCount","fileRestrictions","getRawValue","es2015_main","filesChanged","filesValid","ApplicationApprovalTypeEnum","TypedTemplateDirective","static","_dir","_ctx","ApplicationFormDocumentsComponent","documentsService","signatoryRoleService","roleService","applicationFormService","documentGroups","signatoryRoles","signatoryRolesMap","rolesMap","documentItems","signDate","enhancedSignatureInfo","expirationDate","certificateExpirationDate","documents","applicationConstructorDocumentId","statusName","yesText","noText","onApprovalText","notMarkedText","isSignatoryRequired","groupDocuments","docs","statusGroups","groups","acc","approvalType","downloadDocumentByPdf","downloadReadyDocument","download","objectUrl","revokeObjectURL","StudentFieldCode","keys","studentFieldsMap","DictPropertyEnum","SpecializationService","AttachedFileService","fileId","CostTableRow","StudentTableRow","CostTableComponent","addRow","gridView","removeRow","FacultyService","getFaculties","StudentTableComponent","facultyService","faculties","DateRangeFieldComponent","tmp_b_0","property_r14","$event","DynamicPropertiesComponent","specializationService","attachedFileService","createGroupFormGroup","groupsFormGroup","patchFormValues","specializations","unshift","saveSubscription$","save$","isValid","saveChanges","checkChangesSubscription$","mapGroupFormArray","formArr","createFormGroup","mapFormArrayProperties","patchFormArrayData","disabled","required","controls","patchValue","formValues","formProperties","dateRangeChange","control","setErrors","notCorrect","getDuration","getDateDiff","firstDate","secondDate","abs","fileChange","filesControl","downloadFiles","DownloadFile","fileNameHeader","headers","decodeURIComponent","tableValueChanged","val","downloadAttachedFile","nameOnDisk","ControlAction","controlActions","NoControlAction","Credit","CreditWithMark","Exam","DisciplineTable","DisciplineTableByCycleType","DisciplineTableBySemester","DictCycleType","dictCycleTypes","Practices","ScienceResearches","Gia","CourseWork","FacultyDisciplines","ScienceComponent","DisciplineTableService","baseURL","getRowsByCycleType","getRowByCycleType","rowId","getRowsBySemester","getRowBySemester","StudentService","getSemesters","DictMarkValue","DictMarkService","getMarks","DisciplineTableComponent","disciplineTableService","dictMarkService","isSemester","enableDisciplineTable","getStudentCurrentSemester","processData","process","createGrouping","disciplineTableBySemester","disciplineTableByCycleType","marksMap","courses","onSemesterChange","disciplineTableSemesters","filterData","isCorrectSemester","isNotGroup","isGroup","isCorrectCycleType","dictCycleTypeEnum","courseWorkOrCourseProject","sortNumber","handleGroupData","groupData","filteredData","groupTotalValues","hours","laborIntensity","getTotalValues","groupCycleTypes","totalValues","facultyIndex","sumItem","groupSemesters","cycleData","all","equalDisciplines","dictDisciplineId","notFaculty","isUnique","onCellClick","column","getSelection","begin","studentPeriod","toLocaleDateString","ApplicationFormTabComponent","dynamicTab","tabId","ApplicationFormHomeComponent","applicationTypeSelectService","constructorDocumentService","applicationConstructorService","typeReceiptService","currentTab","createAddFormGroup","getTypeReceipts","allowedActions","patchApplicationForm","categoryId","getApplication","querySelectorAll","typeReceiptChanged","receiptTypeExplanation","basicSettings","typeReceiptExplanations","typeReceipt","dictTypeReceiptId","applicationCategoriesTree","dictTypeReceipts","filteredTypeReceipt","applicationNumbers","applicationNumbersMap","_ref","_this5","statusText","typeReceiptName","dictReceiptType","setAllowedActions","inWork","inWorkInfo","lastInWorkInfo","o","createEditFormGroup","patchTabs","dynamicStartIndex","refreshNotificationCount","notificationCount","dictTypeReceiptIds","hasDisciplineSemesters","disciplineTab","relatedApplicationIds","clear","patchCategory","typeTooltip","getTooltip","typeChange","tabsSettings","approvalDocuments","signature","doc","ready","documentType","commentsIndex","applicationCategory","dictApplicationTypes","tooltip","resetField","resetCategory","applicationConstructorId","goToApplication","onTabChange","source","goBack","isSaved","send","receiptType","onDelete","ToWithDrawn","AppicationTypeSelectComponent","getTree","DisciplineTableFormComponent","disciplineid","checkDiscipline","fetchRowData","call","fields","mapFields","commonFields","dictDisciplineTypeName","dictDisciplineName","printName","controlActionEnum","semesterFields","cycleTypeFields","hoursContactWork","parseInt","trackByFn","MfcRoutes","component","AttendedModel","VisitLessonComponent","param","information","startTime","toLocaleString","endTime","successfully","errorObject","IsWarning","isWarning","textError","Text","routes","redirectTo","pathMatch","AppRoutingModule","fesm2020_router","breadcrumbItemsMap","SignatureTypeEnum","Service","AuthService","isUserAuthenticated","UserSignatureService","studPersonHasSignature","joinStudPersonToRegulation","SimpleModulesEnum","RegulationService","getRegulation","dictRegulationTypeId","simpleModuleEnum","DictRegulationTypeService","getAllRegulationTypes","RegulationFileService","getRegulationFile","JoiningStudPersonToRegulationComponent","userSignatureService","regulationService","regulationTypeService","regulationFileService","simpleRegulationType","userSignatureTypeEnum","onAbort","simpleInfoVisible","abortVisible","onConfirmation","regulationId","joinStudPersonToSimpleRegulation","getFileObserver","is","ext","UniversalStrategy","valueProvider","getValue","menuExpanded","AppComponent","titleService","authService","Subscription","user_login","url$","replacePlaceholders","strategies","return","selected","expandedIndices","externalLinks","events","splitURL","prevSelected","newSelected","initRoutes","iconClass","updateStudentName","currentStudents","onSelect","ev","expanded","sender","link","updatedUrl","subscriber$","getMfcNotificationCount","isSwitchActive","routerState","routeTitle","firstChild","setTitle","mfcNotificationCount","isAlertEnabled","service","getBadgeCount","userHasSimpleSignature","sportsIconUrl","imageName","baseSportsIconUrl","iconUrl","baseIconUrl","routesData","menuClick","switchUser","onItemClick","selectedItemIndex","breadcrumbitems","segment","showLoginPage","showCallbackPage","changeStudent","activeItem","stopUserPreview","onMenuClick","activeClass","parseParameters","paramString","regex","match","exec","observables","strategy","matches","forkJoin","p1","results","resultGroup","TokenInterceptor","tokenStorageService","intercept","handle","ru","rtl","kendo","groupPanelEmpty","noRecords","pagerFirstPage","pagerPreviousPage","pagerNextPage","pagerLastPage","pagerPage","pagerOf","pagerItems","pagerItemsPerPage","pagerPageNumberInputTitle","filterEqOperator","filterNotEqOperator","filterIsNullOperator","filterIsNotNullOperator","filterIsEmptyOperator","filterIsNotEmptyOperator","filterStartsWithOperator","filterContainsOperator","filterNotContainsOperator","filterEndsWithOperator","filterGteOperator","filterGtOperator","filterLteOperator","filterLtOperator","filterIsTrue","filterIsFalse","filterBooleanAll","filterAfterOrEqualOperator","filterAfterOperator","filterBeforeOperator","filterBeforeOrEqualOperator","filterFilterButton","filterClearButton","filterAndLogic","filterOrLogic","filterDateToggle","filterDateToday","filterNumericDecrement","filterNumericIncrement","columns","lock","unlock","stick","unstick","setColumnPosition","sortAscending","sortDescending","columnsApply","columnsReset","sortable","sortedAscending","sortedDescending","sortedDefault","filterInputLabel","filterMenuTitle","filterMenuOperatorsDropDownLabel","filterMenuLogicDropDownLabel","columnMenu","selectionCheckboxLabel","selectAllCheckboxLabel","pagerLabel","gridLabel","groupCollapse","groupExpand","detailCollapse","detailExpand","upload","cancel","clearSelectedFiles","dropFilesHere","headerStatusUploaded","headerStatusUploading","invalidFileExtension","invalidMaxFileSize","invalidMinFileSize","remove","retry","select","uploadSelectedFiles","externalDropFilesHere","filesBatchStatus","filesBatchStatusFailed","filesBatchStatusUploaded","fileStatusFailed","fileStatusUploaded","headerStatusPaused","fileselect","chat","messagePlaceholder","dropdownlist","noDataText","datepicker","prevButtonTitle","nextButtonTitle","combobox","datetimepicker","dateTab","timeTab","en","MyMessageService","kendo_angular_l10n","language","lang","localeId","notify","AppModule","bootstrap","provide","useClass","multi","useValue","imports","platform_browser","kendo_angular_dateinputs","kendo_angular_dropdowns","kendo_angular_buttons","animations","kendo_angular_menu","kendo_angular_notification","kendo_angular_inputs","kendo_angular_label","kendo_angular_layout","kendo_angular_charts","kendo_angular_navigation","kendo_angular_listbox","kendo_angular_listview","kendo_angular_icons","kendo_angular_upload","kendo_angular_dialog","kendo_angular_tooltip","kendo_angular_pager","auth0_angular_jwt","jwtOptionsProvider","useFactory","jwtOptionsFactory","tokenGetter","deps","kendo_angular_indicators","kendo_angular_editor","meta","querySelector","bootstrapModule","catch","webpackContext","module"],"sourceRoot":"webpack:///","sources":["./src/app/models/enums/common-status.enum.ts","./src/environments/environment.ts","./src/app/services/LKEducation/LKEducationBUP/lkeducationPlan.service.ts","./src/app/services/LKStudent/lkstud-plan.service.ts","./src/app/services/LKStudent/lkstud-edu-group.service.ts","./src/app/services/LKStudent/lkstudent.service.ts","./src/app/services/LKEducation/DictWorkScheduleStudyProcessType/dict-work-schedule-study-process-type.service.ts","./src/app/models/education/dictWorkCategorySchedule.enum.ts","./src/app/components/education/educational-process-schedue-cell/educational-process-schedule-cell.component.html","./src/app/components/education/educational-process-schedue-cell/educational-process-schedule-cell.component.ts","./src/app/models/iot/student-elective-discipline.model.ts","./src/app/helpers/date-helper.ts","./src/app/services/Notifications/notifications.service.ts","./src/app/helpers/errorHandle-helper.ts","./src/app/services/iot/iot.service.ts","./src/app/services/iot/iot-email.subscription.service.ts","./src/app/components/education/iot/iot/iot.component.html","./src/app/components/education/iot/iot/iot.component.ts","./src/app/components/education/education.component.html","./src/app/components/education/education.component.ts","./src/app/components/exam-list/exam-list.component.ts","./src/app/models/home/enums/display-setting.enum.ts","./src/app/components/exam-list/exam-list.component.html","./src/app/models/home/enums/display-system-setting.enum.ts","./src/app/models/enums/phoneTypeEnumList.enum.ts","./src/app/models/home/systemsettingnotification.model.ts","./src/app/services/LKStudent/student-card-display-setting.service.ts","./src/options/settings.ts","./src/app/services/token.service.ts","./src/app/services/LKStudent/display-system-setting.service.ts","./src/app/services/contacts/phoneTypes.service.ts","./src/app/services/contacts/emailTypes.service.ts","./src/app/services/contacts/dictSocialNetwork.service.ts","./src/app/services/LKStudent/system-setting-notification.service.ts","./src/app/models/home/menu-items.ts","./src/app/components/home/settings/settings.component.html","./src/app/components/home/settings/settings.component.ts","./src/app/components/home/home.component.html","./src/app/components/home/home.component.ts","./src/app/models/enums/currentcontrolext.enum.ts","./src/app/services/LKStudyProgress/current-control.service.ts","./src/app/services/LKStudyProgress/middle-control.service.ts","./src/app/services/LKStudyProgress/dict-attestation.service.ts","./src/app/services/LKStudyProgress/currentcontrolext.service.ts","./src/app/components/progress/progress.component.html","./src/app/components/progress/progress.component.ts","./src/app/components/timetable/timetable.component.html","./src/app/components/timetable/timetable.component.ts","./src/app/components/auth/callback.component.ts","./src/app/components/auth/loginpage.component.ts","./src/app/guards/authguard.ts","./src/app/components/education/education-discipline/education-discipline.component.html","./src/app/components/education/education-discipline/education-discipline.component.ts","./src/app/components/education/competence-matrix/competence-matrix.component.html","./src/app/components/education/competence-matrix/competence-matrix.component.ts","./src/app/services/announcement/show.service.ts","./src/app/services/announcement/comments.service.ts","./src/app/components/announcement/show/comments/comments.component.html","./src/app/components/announcement/show/comments/comments.component.ts","./src/app/components/announcement/show/show.component.html","./src/app/components/announcement/show/show.component.ts","./src/app/services/announcement/alert.service.ts","./src/app/services/announcement/alert-statistics.service.ts","./src/app/components/announcement/alert/alert.component.html","./src/app/components/announcement/alert/alert.component.ts","./src/app/services/switchuser/switch-user.service.ts","./src/app/components/switchuser/switchuser.component.html","./src/app/components/switchuser/switchuser.component.ts","./src/app/guards/admin.guard.ts","./src/app/components/electro-resources/electro-resources.component.ts","./src/app/components/electro-resources/electro-resources.component.html","./src/app/helpers/dialog-helper.ts","./src/app/services/employment/employment.service.ts","./src/app/services/LKStudent/dictionaries/lkdict-organization.service.ts","./src/app/services/employment/dictEmployerPost.service.ts","./src/app/components/employment/employment.component.html","./src/app/components/employment/employment.component.ts","./src/app/components/employment/employment-info/employment-info.component.html","./src/app/components/employment/employment-info/employment-info.component.ts","./src/app/guards/specialmodule.guard.ts","./src/app/models/home/enums/display-system-setting-category.enum.ts","./src/app/models/home/emailnotification.model.ts","./src/app/services/LKStudent/display-setting-category.service.ts","./src/app/services/LKStudent/display-system-setting-category.service.ts","./src/app/services/LKStudent/dictionaries/email-notification.service.ts","./src/app/components/home/studentcardsettings/studentcardsettings.component.html","./src/app/components/home/studentcardsettings/studentcardsettings.component.ts","./src/app/helpers/createQuery-helper.ts","./src/app/services/LKPortfolio/portfolio.service.ts","./src/app/services/LKPortfolio/dict.service.ts","./src/app/components/achivements/simple/simple-achievements.component.html","./src/app/components/achivements/simple/simple-achievements.component.ts","./src/app/models/portfolio/dict.model.ts","./src/app/models/portfolio/enums/dict-achievement-status-enum.ts","./src/app/directives/open-on-focus-date.directive.ts","./src/app/components/achivements/advanced/advanced-achievements.component.html","./src/app/components/achivements/advanced/advanced-achievements.component.ts","./src/app/components/achivements/home/achievements-home.component.html","./src/app/components/achivements/home/achievements-home.component.ts","./src/app/models/profile/enums/contacttype.enum.ts","./src/app/models/mfc/enums/application-statuses.enum.ts","./src/app/services/contacts/email.service.ts","./src/app/services/contacts/phone.service.ts","./src/app/services/contacts/socialNetwork.service.ts","./src/app/components/home/contact/contact.component.html","./src/app/components/home/contact/contact.component.ts","./src/app/models/mfc/home/application.model.ts","./src/app/helpers/elementRef-helper.ts","./src/app/services/mfc/dicts/applicationCategory.service.ts","./src/app/services/mfc/dicts/applicationType.service.ts","./src/app/services/mfc/dicts/application-status.service.ts","./src/app/services/mfc/application.service.ts","./src/app/common/filter-multiselect/filter-multiselect.component.html","./src/app/common/filter-multiselect/filter-multiselect.component.ts","./src/app/common/date-range-filter/date-range-filter.component.html","./src/app/common/date-range-filter/date-range-filter.component.ts","./src/app/directives/after-value-changed.directive.ts","./src/app/components/mfc/home/mfc-home.component.html","./src/app/components/mfc/home/mfc-home.component.ts","./src/app/models/mfc/dicts/application-status.model.ts","./src/app/models/mfc/enums/application-tabs.enum.ts","./src/app/models/mfc/applicationForm/application-tabs.model.ts","./src/app/models/mfc/enums/document-types.enum.ts","./src/app/models/mfc/enums/allowed-actions.enum.ts","./src/app/models/mfc/enums/receipt-types.enum.ts","./src/app/models/mfc/enums/enable-discipline-table.enum.ts","./src/app/models/mfc/applicationForm/application-form.model.ts","./src/app/models/mfc/applicationForm/document.model.ts","./src/app/helpers/map-helper.ts","./src/app/models/mfc/enums/kendo-properties.enum.ts","./src/app/services/mfc/application-type-select.service.ts","./src/app/services/mfc/application-constructor-document.service.ts","./src/app/services/mfc/documents.service.ts","./src/app/services/mfc/properties.service.ts","./src/app/services/mfc/application-edit-form.service.ts","./src/app/services/mfc/application-constructor.service.ts","./src/app/services/mfc/application-form.service.ts","./src/app/services/mfc/dicts/type-receipt.service.ts","./src/app/directives/open-on-focus.directive.ts","./src/app/services/mfc/dicts/approval-status.service.ts","./src/app/services/mfc/dicts/role.service.ts","./src/app/services/mfc/dicts/signatory-role.service.ts","./src/app/components/mfc/applicationForm/approvalList/approval-list.component.html","./src/app/components/mfc/applicationForm/approvalList/approval-list.component.ts","./src/app/services/mfc/comments.service.ts","./src/app/services/mfc/mfc-notification.service.ts","./src/app/components/mfc/applicationForm/comments/comments.component.html","./src/app/components/mfc/applicationForm/comments/comments.component.ts","./src/app/models/mfc/enums/application-approval-type.enum.ts","./src/app/directives/typed-template.directive.ts","./src/app/components/mfc/applicationForm/documents/documents.component.html","./src/app/components/mfc/applicationForm/documents/documents.component.ts","./src/app/helpers/downloadFile-helper.ts","./src/app/models/mfc/enums/student-field-codes.enum.ts","./src/app/models/mfc/student-fields.ts","./src/app/models/mfc/enums/dict-property-enum.ts","./src/app/services/mfc/dicts/specialization.service.ts","./src/app/services/mfc/attached-file.service.ts","./src/app/models/mfc/applicationForm/tables.model.ts","./src/app/components/mfc/applicationForm/dynamicProperties/table/cost/cost-table.component.html","./src/app/components/mfc/applicationForm/dynamicProperties/table/cost/cost-table.component.ts","./src/app/services/mfc/dicts/faculty.service.ts","./src/app/components/mfc/applicationForm/dynamicProperties/table/student/student-table.component.html","./src/app/components/mfc/applicationForm/dynamicProperties/table/student/student-table.component.ts","./src/app/components/mfc/applicationForm/dynamicProperties/date-range/date-range-field.component.ts","./src/app/components/mfc/applicationForm/dynamicProperties/dynamic-properties.component.html","./src/app/components/mfc/applicationForm/dynamicProperties/date-range/date-range-field.component.html","./src/app/components/mfc/applicationForm/dynamicProperties/dynamic-properties.component.ts","./src/app/models/mfc/enums/control-action.enum.ts","./src/app/models/mfc/applicationForm/discipline-table.model.ts","./src/app/models/mfc/enums/cycle-type.enum.ts","./src/app/services/mfc/discipline-table.service.ts","./src/app/services/mfc/dicts/student.service.ts","./src/app/models/enums/markvalue.enum.ts","./src/app/services/mfc/dicts/mark.service.ts","./src/app/components/mfc/applicationForm/discipline/discipline-table.component.html","./src/app/components/mfc/applicationForm/discipline/discipline-table.component.ts","./src/app/components/mfc/applicationForm/tab/application-form-tab.component.html","./src/app/components/mfc/applicationForm/tab/application-form-tab.component.ts","./src/app/components/mfc/applicationForm/home/application-form-home.component.html","./src/app/components/mfc/applicationForm/home/application-form-home.component.ts","./src/app/components/mfc/applicationTypeSelect/application-type-select.component.html","./src/app/components/mfc/applicationTypeSelect/application-type-select.component.ts","./src/app/components/mfc/applicationForm/discipline/form/discipline-table-form.component.html","./src/app/components/mfc/applicationForm/discipline/form/discipline-table-form.component.ts","./src/app/routes/mfc-routes.ts","./src/app/models/progress/visitLesson.model.ts","./src/app/components/visitlesson/visitlesson.component.html","./src/app/components/visitlesson/visitlesson.component.ts","./src/app/app-routing.module.ts","./src/app/models/home/breadcrumb-items.model.ts","./src/app/models/menuItems.model.ts","./src/app/models/oferta/enums/dictSignatureType.enum.ts","./src/app/models/enums/service.enum.ts","./src/app/services/auth.service.ts","./src/app/services/oferta/user-signature.service.ts","./src/app/models/oferta/enums/simpleModuleEnum.enum.ts","./src/app/services/oferta/regulation.service.ts","./src/app/services/oferta/dictRegulationType.service.ts","./src/app/services/oferta/regulationFile.service.ts","./src/app/components/oferta/joining-stud-person-to-regulation/joining-stud-person-to-regulation.component.html","./src/app/components/oferta/joining-stud-person-to-regulation/joining-stud-person-to-regulation.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/interceptors/token.interceptor.ts","./src/app/message-service.service.ts","./src/app/app.module.ts","./src/main.ts","./src/app/services/jwt.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["enum CommonStatusEnumList {\n Active = 1,\n Archived = 2,\n Closed = 3,\n}\n\nexport const CommonStatusEnum = CommonStatusEnumList;\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport interface Environment {\n production: Window|boolean;\n demo: Window|boolean;\n searchBotDisallow: Window|boolean;\n baseHref: any;\n apiEndpoint: Window|string;\n allowedDomains: any;\n trustedNetClientId: Window|string;\n trustedVersion: Window|string;\n authEndPoint: Window|string;\n announcementApiEndpoint: Window|string,\n fileServerEndpoint: Window|string,\n supportEmail: Window|string,\n infoMessage: Window|string,\n lkoEducation: Window|string,\n iot: Window|boolean,\n lkoStudyProgress: Window|string,\n headerTitle: any;\n apiPaths: any;\n services: any;\n menuItems: any;\n projecting: any;\n portfolio: any;\n announcement: any;\n employment: any;\n invalidTokenMessage: any;\n oferta: any;\n mfc: any;\n}\n\nexport const environment: Environment = {\n production: window[\"env\"][\"prod\"] || false,\n demo: window[\"env\"][\"demo\"] || false,\n searchBotDisallow: window[\"env\"][\"searchBotDisallow\"] || false,\n baseHref: window['env']['baseHref'] || '/',\n apiEndpoint: window[\"env\"][\"apiUrl\"],\n trustedNetClientId: window[\"env\"][\"clientId\"],\n trustedVersion: window[\"env\"][\"trustedVersion\"],\n authEndPoint: window[\"env\"][\"authUrl\"],\n allowedDomains: [window[\"env\"][\"allowedDomains\"]],\n fileServerEndpoint: window[\"env\"][\"apiUrl\"],\n announcementApiEndpoint: window[\"env\"][\"apiUrl\"],\n //announcementApiEndpoint: 'http://localhost:8086/api/v1/',\n supportEmail: window[\"env\"][\"supportEmail\"],\n infoMessage: window[\"env\"][\"infoMessage\"],\n lkoEducation: window[\"env\"][\"lkoEducation\"],\n iot: window[\"env\"][\"iot\"],\n lkoStudyProgress: window[\"env\"][\"lkoStudyProgress\"],\n invalidTokenMessage: window['env']['invalidTokenMessage'],\n headerTitle: {\n full: window[\"env\"][\"fullHeader\"],\n short: window[\"env\"][\"shortHeader\"]\n },\n\n apiPaths: {\n ExamList: \"lkstudent/exam\",\n Student: \"lkstudent/student\",\n DictOrganization: \"lkstudent/dictorganization\",\n DictStudentAcademicState: \"lkstudent/dictstudentacademicstate\",\n DictStudentBudget: \"lkstudent/dictstudentbudget\",\n DictStudentBudgetSubCategory: \"lkstudent/dictstudentbudgetsubcategory\",\n EduGroup: \"lkstudent/edugroup\",\n Languages: \"lkstudent/languages\",\n OrdersStudyPeriod: \"lkstudent/ordersstudyperiod\",\n StudEduGroup: \"lkstudent/studedugroup\",\n StudentAcademicState: \"lkstudent/studentacademicstate\",\n StudentBudgetState: \"lkstudent/studentbudgetstate\",\n StudPerson: \"lkstudent/studperson\",\n Personal: \"person\",\n EducationProgram: \"lkstudent/eprogram\",\n EducationIntensityData: \"lkstudent/intensity\",\n EducationBUP: \"lkstudent/bup\",\n BudgetTime: \"lkstudent/btime\",\n DirectionActivity: \"lkstudent/directionactivity\",\n //Portfolio: \"portfolio\",\n StudPlan: \"lkstudent/studplan\",\n MiddleControl: \"lkstudent/middlecontrol\",\n CurrentControl: \"lkstudent/currentcontrol\",\n DictAttestation: \"lkstudent/dictattestation\",\n WorkScheduleType: \"lkstudent/d/workscheduletype\",\n studentcarddisplaysetting: \"lkstudent/displaysetting\",\n displaysettingcategory: \"lkstudent/d/displaysettingcategory\",\n displaysystemsettingcategory: \"lkstudent/d/displaysystemsettingcategory\",\n displaysystemsetting: \"lkstudent/displaysystemsetting\",\n systemsettingnotification: \"lkstudent/systemsettingnotification\",\n emailnotification: \"lkstudent/emailnotification\",\n dictEmailType: \"lkstudent/d/dictemailtype\",\n dictPhoneType: \"lkstudent/d/dictphonetype\",\n dictSocialNetworkType: \"lkstudent/d/dictsocialnetwork\",\n email: \"lkstudent/email\",\n phone: \"lkstudent/phone\",\n socialNetwork: \"lkstudent/socialnetwork\",\n iot: \"iot/lks\",\n currentcontrolext: \"lkcurrentcontrolext\",\n },\n services: window[\"env\"][\"services\"],\n menuItems: window[\"env\"][\"menuItems\"],\n projecting: {\n daysInWeek: 6,\n apiEndpoint: window[\"env\"][\"LKApi\"],\n apiPaths: {\n standard: \"EducationStandards\",\n standardtype: \"EducationStandardTypes\",\n studylevel: \"EducationLevels\",\n qualification: \"Qualifications\",\n oop: \"EducationPrograms\",\n faculty: \"Faculty\",\n kafedra: \"Department\",\n trainingLevel: \"TrainingLevels\",\n dictcycle: \"DictCycle\",\n dictCycleType: \"DictCycleType\",\n dictComponent: \"DictComponent\",\n dictComponentType: \"DictComponentType\",\n dictLessonType: \"DictLessonType\",\n dictLessonForm: \"DictLessonForm\",\n dictAcceleratedStudyBase: \"DictAcceleratedStudyBase\",\n dictFormDesignerDataType: \"DictFormDesignerDataType\",\n dictWorkCategorySchedule: \"DictWorkCategorySchedule\",\n dictWorkScheduleStudyProcessType: \"DictWorkScheduleStudyProcessType\",\n dictWorkStudyPlanType: \"DictWorkStudyPlanType\",\n educationPrograms: \"educationPrograms\",\n competenceMatrixService: \"competenceMatrix\",\n eStandardTypes: \"dict/educationStandardTypes\",\n dictEducationLevel: \"dict/EducationLevels\",\n dictQualification: \"dict/qualifications\",\n dictTrainingLevel: \"dict/trainingLevels\"\n }\n },\n mfc: {\n apiPaths: {\n home: 'mfc',\n dict: 'mfc/dict',\n externalDict: 'mfc/dict/external',\n education: 'mfc/education',\n student: 'mfc',\n application: 'mfc/application',\n applicationConstructor: 'mfc/applicationConstructor',\n applicationComments: 'mfc/application/comments',\n commonApplicationConstructor: 'mfc/common/applicationconstructor'\n }\n },\n oferta: {\n apiPaths: {\n userSignature: 'oferta/usersignature',\n dictRegulationType: 'oferta/d/dictregulationtype',\n regulation: 'oferta/regulation',\n regulationFile: 'oferta/regulationfile'\n }\n },\n portfolio: {\n maxFileSize: window[\"env\"][\"portfolio_maxFileSize\"] || 4194304,//4194304,\n apiPaths: {\n document: \"portfolio/document\",\n achievement: \"portfolio/achievement\",\n portfolioDict: \"portfolio/dict\"\n }\n },\n announcement: {\n commentMaxFileSize: window[\"env\"][\"announcement_commentMaxFileSize\"] || 5242880,//5242880,\n },\n employment: {\n apiPaths: {\n employment: \"lkstudent/employment\",\n dictEmployerPost: \"lkstudent/dictemployerpost\"\n }\n }\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LKEducationPlanService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.EducationBUP}`;\n\n constructor(private http: HttpClient) { }\n\n //Get all EducationPlans\n public getAllEducationPlans(): Observable {\n return this.http.get(this.baseUrl + '/GetEducationPlans/');\n }\n\n //Get EducationPlan by StudentId\n public getEducationPlanByStudentId(studentId: string) {\n return this.http.get(this.baseUrl + '/GetEducationPlanByStudentID/' + studentId)\n .pipe(\n catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LKStudPlanService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudPlan}`;\n\n constructor(private http: HttpClient) { }\n\n //Get all Stud Plans\n public getAllStudPlans(): Observable {\n return this.http.get(this.baseUrl + '/GetStudPlans/')\n .pipe(\n catchError(this.handleError));\n }\n\n //Get Stud Plan\n public getStudPlan(): Observable {\n return this.http.get(this.baseUrl + '/GetStudPlan')\n .pipe(\n catchError(this.handleError));\n }\n\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LKStudEduGroupService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudEduGroup}`;\n\n constructor(private http: HttpClient) { }\n\n //Get StudEduGroup\n public getStudEduGroup(): Observable {\n return this.http.get(this.baseUrl + '/GetStudEduGroup')\n .pipe(\n catchError(this.handleError));\n }\n\n public getStudEduGroupById(studentId? : string): Observable {\n return this.http.get(this.baseUrl + '/GetStudEduGroupById/' + studentId)\n .pipe(\n catchError(this.handleError));\n }\n\n //Get StudEduGroup\n public getAllStudEduGroups(): Observable {\n return this.http.get(this.baseUrl + '/GetAllStudEduGroups/')\n .pipe(\n catchError(this.handleError));\n }\n\n //Get GroupEducationPlan by StudentId\n public getGroupEducationPlanByStudentId(studentId: string): Observable {\n return this.http.get(this.baseUrl + '/GetGroupEducationPlan/' + studentId)\n .pipe(\n catchError(this.handleError));\n }\n\n //Get EducationProgram by StudentId\n public getEducationProgramByStudentId(): Observable {\n return this.http.get(this.baseUrl + '/GetEducationProgramByStudentId')\n .pipe(\n catchError(this.handleError));\n }\n\n //Get StudyForm by StudentId\n public getStudyFormByStudentId(): Observable {\n return this.http.get(this.baseUrl + '/GetStudyFormByStudentId' )\n .pipe(\n catchError(this.handleError));\n }\n\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { environment } from 'src/environments/environment';\nimport {StudentInfoDto} from \"../../models/home/StudentInfoDto.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LKStudentService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.Student}`;\n\n constructor(private http: HttpClient) { }\n\n /**\n * Get Student by Id\n */\n public getStudent(): Observable {\n return this.http.get(this.baseUrl + '/GetCurrentStudent')\n .pipe(\n catchError(this.handleError));\n }\n //Get Token For External Service\n public getTokenForExternalServices(): Observable {\n return this.http.get(`${this.baseUrl}/GetTokenForExternalService`, { responseType: 'text' as 'json' });\n }\n\n /**\n * Get Student by login\n */\n public getStudentByLogin(): Observable {\n return this.http.get(this.baseUrl + '/GetAllStudentsByLogin')\n .pipe(\n catchError(this.handleError));\n }\n\n /**\n * Получение текущего студента\n */\n public getCurrentStudent(): Observable {\n return this.http.get(this.baseUrl + '/GetAllCurrentStudents')\n .pipe(\n catchError(this.handleError));\n }\n\n public GetStudentInfo(): Observable {\n return this.http.get(this.baseUrl + '/GetStudentInfo/')\n .pipe(\n catchError(this.handleError));\n }\n\n // Получение всех студентов\n public getStudents(): Observable {\n return this.http.get(this.baseUrl + '/GetStudents/')\n .pipe(\n catchError(this.handleError));\n }\n\n /**\n * Обработчик ошибок\n * @param error\n */\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { EducationGraphLegend } from 'src/app/models/education/LKEducationPlan.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictWorkScheduleStudyProcessTypeService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.WorkScheduleType}`;\n\n constructor(private http: HttpClient) { }\n\n //Get all BudgetTimes\n public getAllDictWorkSchedule(): Observable {\n return this.http.get(this.baseUrl + '/GetWorkScheduleStudyProcessTypes');\n }\n}\n","enum dictWorkCategoryScheduleEnumList {\n weekend = \"d8ec9fa5-bc26-4487-8942-d111bda5c759\",\n holiday = \"d36da979-6286-4a9f-8476-aedfe22cd374\",\n }\n \n export var dictWorkCategoryScheduleEnum: any = dictWorkCategoryScheduleEnumList\n ","\n \n {{ weekInfo.days[0].symbol }}\n \n \n = weekInfo.installationSessionBeginDayNumber\n || isInstallationSessionEnd && idx <= weekInfo.installationSessionEndDayNumber\n || isInstallationSession && !isInstallationSessionBegin && !isInstallationSessionEnd)\n && day.dictWorkScheduleStudyProcessType?.CategoryId != holidaysEnum.holiday\n && day.dictWorkScheduleStudyProcessType?.CategoryId != holidaysEnum.weekend\n }\"\n style=\"background-color:{{ day.backgroundColor }}\"\n >\n {{ day.symbol }}\n \n \n \n\n","import {\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { dictWorkCategoryScheduleEnum } from 'src/app/models/education/dictWorkCategorySchedule.enum';\nimport {\n CellDataType,\n CellDayType,\n} from 'src/app/models/education/education-plan-schedule.model';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n selector: 'educational-process-schedule-cell',\n templateUrl: './educational-process-schedule-cell.component.html',\n styleUrls: ['./educational-process-schedule-cell.component.scss'],\n})\nexport class EducationalProcessScheduleCellComponent implements OnInit {\n @Input() weekInfo: CellDataType = {\n semestrBeginWeekNumber: [],\n installationSessionBeginDayNumber: 0,\n installationSessionEndDayNumber: 0,\n days: [],\n weekNumber: 0,\n };\n @Input() currentWeekNumber: number = 0;\n @Input() course: number = 0;\n @Input() isChoosedCells: boolean = false;\n @Input() isDisplayDot: boolean = false;\n\n days: CellDayType[] = this.getDefaultDays(this.weekInfo.days[0] || {});\n\n isWholeWeek: boolean = true;\n isSelectedCell: boolean = false;\n isSemesterBegin: boolean = false;\n isInstallationSession: boolean = false;\n isInstallationSessionBegin: boolean = false;\n isInstallationSessionEnd: boolean = false;\n currentDay: number = 0;\n public holidaysEnum: any = dictWorkCategoryScheduleEnum;\n\n constructor() {}\n\n ngOnInit(): void {\n if (this.weekInfo === undefined) {\n this.weekInfo = {\n semestrBeginWeekNumber: [],\n installationSessionBeginDayNumber: 0,\n installationSessionEndDayNumber: 0,\n days: [\n {\n daysAmount: environment.projecting.daysInWeek,\n symbol: '',\n backgroundColor: '#ffffff',\n } as CellDayType,\n ],\n weekNumber: 0,\n };\n }\n\n this.isSemesterBegin = !!this.weekInfo.semestrBeginWeekNumber?.includes(\n this.currentWeekNumber\n );\n\n this.isInstallationSession = this.weekInfo.isInstallationSession ? this.weekInfo.isInstallationSession: false\n this.isInstallationSessionBegin = this.weekInfo.installationSessionBeginWeekNumber === this.currentWeekNumber;\n this.isInstallationSessionEnd = this.weekInfo.installationSessionEndWeekNumber === this.currentWeekNumber;\n\n if (this.weekInfo.days.length > 1) {\n this.isWholeWeek = false;\n let fillStart = 0;\n this.weekInfo.days.forEach((dayInfo) => {\n this.days.fill(\n { ...dayInfo, daysAmount: 1 },\n fillStart,\n fillStart + dayInfo.daysAmount\n );\n fillStart += dayInfo.daysAmount;\n });\n }\n\n if (this.isWholeWeek)\n this.days = this.getDefaultDays(this.weekInfo.days[0] || {});\n }\n\n public getDefaultDays(cell?: CellDayType) {\n return Array(environment.projecting.daysInWeek).fill({\n ...cell,\n daysAmount: 1,\n symbol: cell?.symbol || '',\n backgroundColor: cell?.backgroundColor || '#ffffff',\n });\n }\n}\n","export interface StudentElectiveDiscipline {\n disciplineInfo: string;\n deadlineDateEnd?: Date;\n electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]\n}\n\nexport interface GetStudentsElectiveDisciplineDto {\n electiveDisciplineName: string;\n electiveDisciplineId: string;\n cathedraName: string;\n studentsLeftToEnroll: number;\n hasSameElectiveDisciplineInStudyYear: boolean;\n hasSameElectiveDisciplineInPreviousStudyYear: boolean;\n canMakeChoises: boolean;\n hasEnrolled: boolean;\n signed: boolean;\n hasLimit: boolean;\n hasDeadline: boolean;\n electiveDisciplineStudentId: string;\n disciplineLocation: string;\n fio: string;\n phoneNumber: string;\n}\n\nexport class AddElectiveDisciplineStudentCommand {\n public electiveDisciplineId: string;\n public studyYear: number;\n\n constructor(electiveDisciplineId: string, studyYear: number) {\n this.electiveDisciplineId = electiveDisciplineId;\n this.studyYear = studyYear;\n }\n}\n\nexport class DeleteElectiveDisciplineStudentCommand {\n public electiveDisciplineStudentId: string;\n\n constructor(electiveDisciplineStudentId: string) {\n this.electiveDisciplineStudentId = electiveDisciplineStudentId;\n }\n}\n\nexport class SignStatementCommand {\n public studyYear: number;\n\n constructor(studyYear: number) {\n this.studyYear = studyYear;\n }\n}\n","import * as moment from 'moment';\nimport {Moment, unitOfTime} from 'moment';\nimport {DatePipe} from '@angular/common';\n\n//нужна для получения данных с сервера, чтобы не съехало время из-за часового пояса\nexport function DateFromUTCAsLocal(date: any): Date {\n if(date == null) return date;\n return new Date(typeof date == 'string' ? `${date}`.replace('Z','') : date)\n}\n\n//для отправки данных на сервер, чтобы время ушло как UTC\nexport function TimeZoneFix(date: any, isStringDate?: boolean): Moment {\n return isStringDate ? moment(date, 'YYYY-MM-DD').utc(true) : moment(date).utc(true);\n}\n\n// Конвертирование даты в строку\nexport function DateToString(date: Date, format?: string) {\n const datepipe: DatePipe = new DatePipe('ru-Ru');\n return datepipe.transform(date, format != null ? format:'dd.MM.yyyy');\n}\n\nexport function CurrentDayEnd(): Date{\n return moment(new Date()).endOf('day').toDate();\n}\n\nexport function getDayEnd(date: Date): Date{\n return moment(date).endOf('day').toDate();\n}\n\nexport function getDateDiff(firstDate: Date, secondDate: Date, format?: unitOfTime.Diff) {\n return Math.abs(moment(secondDate).diff(firstDate, format));\n}\n\nexport function getDayStart(date: Date): Date{\n return moment(date).startOf('day').toDate();\n}\n\nexport function DisableWheelEvent() {\n const elements = document.querySelectorAll('.k-datepicker input');\n for (let i = 0; i < elements.length; i++) {\n elements[i].addEventListener('wheel', (e) => {\n e.stopImmediatePropagation();\n });\n }\n}\n\nexport function monthWord(value: number) {\n let month = \"\";\n switch(value) {\n case 0:\n month = \"января\";\n break;\n case 1:\n month = \"февраля\";\n break;\n case 2:\n month = \"марта\";\n break;\n case 3:\n month = \"апреля\";\n break;\n case 4:\n month = \"мая\";\n break;\n case 5:\n month = \"июня\";\n break;\n case 6:\n month = \"июля\";\n break;\n case 7:\n month = \"августа\";\n break;\n case 8:\n month = \"сентября\";\n break;\n case 9:\n month = \"октября\";\n break;\n case 10:\n month = \"ноября\";\n break;\n case 11:\n month = \"декабря\";\n break;\n default:\n break;\n }\n return month;\n}\n","import { Injectable } from '@angular/core';\nimport { NotificationService } from '@progress/kendo-angular-notification';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationsService {\n\n constructor(private notificationService: NotificationService) { }\n\n public showSuccess(message: string): void {\n this.notificationService.show({\n content: message ?? '',\n hideAfter: 1500,\n width: 500,\n position: { horizontal: \"center\", vertical: \"top\" },\n animation: { type: \"fade\", duration: 300 },\n type: { style: \"success\", icon: true },\n });\n }\n\n public showError(message: any): void {\n this.notificationService.show({\n content: typeof message == 'string' ? message : this.getErrorMessage(message),\n hideAfter: 1500,\n width: 500,\n position: { horizontal: \"center\", vertical: \"top\" },\n animation: { type: \"slide\", duration: 300 },\n type: { style: \"error\", icon: true },\n });\n }\n\n private getErrorMessage(error: any): string {\n console.log(error);\n\n let message;\n\n switch (error?.status) {\n case 500:\n //message = 'Произошла непредвиденная ошибка (Internal Server Error).';\n message = 'Произошла непредвиденная ошибка.';\n break;\n case 501:\n //message = 'Метод запроса не поддерживается сервером (Not Implemented).';\n message = 'Метод запроса не поддерживается сервером.';\n break;\n case 502:\n //message = 'Сервер получил недействительный ответ (Bad Gateway).';\n message = 'Сервер получил недействительный ответ.';\n break;\n case 503:\n //message = 'Сервис недоступен (Service Unavailable).';\n message = 'Сервис недоступен.';\n break;\n case 504:\n //message = 'Сервер не получил ответ вовремя (Gateway Timeout).';\n message = 'Сервер не получил ответ вовремя.';\n break;\n case 505:\n //message = 'HTTP-версия, используемая в запросе, не поддерживается сервером (HTTP Version Not Supported).';\n message = 'HTTP-версия, используемая в запросе, не поддерживается сервером.';\n break;\n default:\n if (typeof error?.error === 'string')\n message = error.error;\n else if (typeof (error)?.detail === 'string')\n message = (error).detail;\n else if (typeof error?.error?.detail === 'string')\n message = error.error.detail;\n break;\n }\n\n return message ?? 'Произошла непредвиденная ошибка';\n }\n}\n","import {HttpErrorResponse} from \"@angular/common/http\";\nimport {throwError} from \"rxjs\";\n\n//TODO: объединить с publications\\errorHandle-helper.ts\nexport function handleError(error: HttpErrorResponse) {\n let errorMessage: string;\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else if (error.error.Message) {\n errorMessage = error.error.Message;\n } else {\n // Handle server error\n console.log(`Error Code: ${error.status}\\nMessage: ${error.message}`);\n }\n\n return throwError(() => {\n return errorMessage ?? error;\n });\n}\n\nexport function getErrorMessage(error: any): string {\n\n let message;\n\n switch (error?.status) {\n case 500:\n //message = 'Произошла непредвиденная ошибка (Internal Server Error).';\n message = 'Произошла непредвиденная ошибка.';\n break;\n case 501:\n //message = 'Метод запроса не поддерживается сервером (Not Implemented).';\n message = 'Метод запроса не поддерживается сервером.';\n break;\n case 502:\n //message = 'Сервер получил недействительный ответ (Bad Gateway).';\n message = 'Сервер получил недействительный ответ.';\n break;\n case 503:\n //message = 'Сервис недоступен (Service Unavailable).';\n message = 'Сервис недоступен.';\n break;\n case 504:\n //message = 'Сервер не получил ответ вовремя (Gateway Timeout).';\n message = 'Сервер не получил ответ вовремя.';\n break;\n case 505:\n //message = 'HTTP-версия, используемая в запросе, не поддерживается сервером (HTTP Version Not Supported).';\n message = 'HTTP-версия, используемая в запросе, не поддерживается сервером.';\n break;\n default:\n if (typeof error?.error === 'string')\n message = error.error;\n else if (typeof (error)?.detail === 'string')\n message = (error).detail;\n else if (typeof error?.error?.detail === 'string')\n message = error.error.detail;\n break;\n }\n\n return message ?? 'Произошла непредвиденная ошибка';\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {\n AddElectiveDisciplineStudentCommand, DeleteElectiveDisciplineStudentCommand, SignStatementCommand,\n StudentElectiveDiscipline\n} from \"../../models/iot/student-elective-discipline.model\";\nimport {catchError} from \"rxjs\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\nimport {StudentStudyYear} from \"../../models/iot/student-study-year.model\";\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class IotService {\n private baseUrl = `${environment.apiEndpoint}${environment.apiPaths.iot}`;\n\n constructor(private http: HttpClient) { }\n\n public getStudentElectiveDisciplines(studyYear: number) {\n return this.http.post(`${this.baseUrl}/GetStudentElectiveDisciplines/`, {studyYear: studyYear})\n .pipe(catchError(handleError));\n }\n\n public getStudentStudyYears() {\n return this.http.get(`${this.baseUrl}/GetStudentStudyYears`)\n .pipe(catchError(handleError));\n }\n\n public addStudentElectiveDiscipline(command: AddElectiveDisciplineStudentCommand) {\n return this.http.post(`${this.baseUrl}/AddStudentElectiveDiscipline/`, command);\n }\n\n public deleteStudentElectiveDiscipline(command: DeleteElectiveDisciplineStudentCommand) {\n return this.http.delete(`${this.baseUrl}/DeleteStudentElectiveDiscipline/`, { body: command });\n }\n\n public signStatement(command: SignStatementCommand) {\n return this.http.post(`${this.baseUrl}/SignStatement/`, command);\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class IotEmailSubscriptionService {\n private baseUrl = `${environment.apiEndpoint}${environment.apiPaths.iot}`;\n\n constructor(private http: HttpClient) { }\n\n public subscribeStudentToEmail() {\n return this.http.post(`${this.baseUrl}/SubscribeStudentToEmail`, {});\n }\n\n public unsubscribeStudentFromEmail() {\n return this.http.post(`${this.baseUrl}/UnsubscribeStudentFromEmail`, {});\n }\n\n public getStudentSubscriptionEmailStatus() {\n return this.http.get(`${this.baseUrl}/GetStudentSubscriptionEmailStatus`);\n }\n}\n","
\n \n\n
\n \n Учебный год\n \n \n \n
\n\n

Нет доступных дисциплин для выбора

\n\n
\n

Важно!

\n

Выберите дисциплины по выбору, которые будете осваивать в следующем учебном году по {{ deadlineDateEnd ? DateToString(deadlineDateEnd, 'dd.MM.yyyy') : '' }}.
\n Обучающиеся, не выбравшие дисциплины в этот срок, будут распределены деканатами по наличию свободных мест в группах.

\n
\n\n
\n

\n Выбранные дисциплины на учебный год. По вопросам закрепления или смены выборной дисциплины обращайтесь в ваш деканат.\n

\n
\n\n
\n

Сроки записи на данный момент не определены, выбор дисциплин станет доступен после установки сроков.

\n
\n\n
\n

{{studentEnabledEmailNotifications\n ? 'По кнопке “Отписаться от рассылки” вы больше не будете получать информацию об окончании сроков дисциплин на электронную почту.'\n : 'Рекомендуем подписаться на рассылку (кнопка \"Подписаться на рассылку\"),' +\n ' чтобы своевременно получать уведомления (за 2 дня, 1 день и 6 часов) на электронную почту о завершении выбора дисциплин.'}}

\n \n
\n\n
\n
\n
{{studentElectiveDiscipline.disciplineInfo}}
\n\n
\n

Выбранная дисциплина: {{getElectiveDisciplineName(studentElectiveDiscipline.electiveDisciplineDto)}}
\n \n Место проведений занятий: {{getElectiveDisciplineLocation(studentElectiveDiscipline.electiveDisciplineDto)}}
\n
\n \n Ответственный сотрудник: {{getElectiveDisciplinePersonInfo(studentElectiveDiscipline.electiveDisciplineDto)}}\n \n

\n
\n\n
\n

\n Дисциплина по выбору \"{{ discipline.electiveDisciplineName }}\" изучалась в прошлом учебном году.

\n
\n\n \n \n \n \n Выбрать\n \n \n \n \n \n \n \n \n {{dataItem.electiveDisciplineName}}\n \n \n \n \n {{dataItem.cathedraName}}\n \n \n \n \n \n {{ '-' }}\n \n \n {{ dataItem.studentsLeftToEnroll }}\n \n \n \n \n
\n
\n\n
\n\n\n
\n

Внимание! Дисциплина изучается в нескольких семестрах.
Хотите записаться?

\n
\n \n \n \n \n
\n\n\n
\n

\n {{studentEnabledEmailNotifications\n ? 'Вы действительно хотите отписаться от рассылки?'\n : 'Вы действительно хотите получать уведомления на электронную почту?'}}\n

\n
\n \n \n \n \n
\n","import { Component, OnInit } from '@angular/core';\nimport {NotificationsService} from \"../../../../services/Notifications/notifications.service\";\nimport {IotService} from \"../../../../services/iot/iot.service\";\nimport {StudentStudyYear} from \"../../../../models/iot/student-study-year.model\";\nimport {\n AddElectiveDisciplineStudentCommand, DeleteElectiveDisciplineStudentCommand,\n GetStudentsElectiveDisciplineDto, SignStatementCommand,\n StudentElectiveDiscipline\n} from \"../../../../models/iot/student-elective-discipline.model\";\nimport {environment} from \"../../../../../environments/environment\";\nimport {DateToString} from \"../../../../helpers/date-helper\";\nimport {IotEmailSubscriptionService} from \"../../../../services/iot/iot-email.subscription.service\";\nimport {RowClassArgs} from \"@progress/kendo-angular-grid\";\n\n@Component({\n selector: 'app-iot',\n templateUrl: './iot.component.html',\n styleUrls: ['./iot.component.scss']\n})\nexport class IotComponent implements OnInit {\n\n constructor(private notificationService: NotificationsService,\n private iotService: IotService,\n private iotEmailSubscriptionService: IotEmailSubscriptionService\n ) { }\n\n public iot = environment.iot;\n protected studentStudyYears: StudentStudyYear[] = [];\n protected studentElectiveDisciplines: StudentElectiveDiscipline[] = [];\n protected addElectiveDisciplineStudentCommand: AddElectiveDisciplineStudentCommand | undefined;\n protected studentEnabledEmailNotifications = false;\n public yearAdmission!: number;\n public isCurrentYear = false;\n public hasLoaded = false;\n public hasDeadline = false;\n public cantSign = true;\n public signed = false;\n public openedDialog = false;\n public openedEmailDialog = false;\n public deadlineDateEnd: Date | undefined;\n public showDecanMessage = false;\n\n ngOnInit(): void {\n if (this.iot) {\n this.getStudentStudyYears();\n }\n }\n\n private getStudentStudyYears() {\n this.iotService.getStudentStudyYears().subscribe(\n (next) => {\n this.studentStudyYears = next;\n this.yearAdmission = this.studentStudyYears[0].studyYear;\n this.getStudentElectiveDisciplines(this.yearAdmission);\n }\n )\n }\n\n private getStudentElectiveDisciplines(studyYear: number){\n this.iotService.getStudentElectiveDisciplines(studyYear).subscribe(\n (next) => {\n this.studentElectiveDisciplines = next;\n this.deadlineDateEnd = this.studentElectiveDisciplines.find(sed => sed.deadlineDateEnd)?.deadlineDateEnd;\n this.isCurrentYear = this.studentStudyYears.find(x => x.studyYear == this.yearAdmission)?.isCurrentStudyYear === true;\n let today = DateToString(new Date(),'dd.MM.yyyy')\n let dateEnd = DateToString(this.deadlineDateEnd!,'dd.MM.yyyy')\n if (today && dateEnd) {\n this.showDecanMessage = today > dateEnd\n }\n this.checkIfCanSign();\n this.checkIfSigned();\n this.checkStudentDeadlines();\n this.getStudentSubscriptionEmailStatus();\n this.hasLoaded = true;\n }\n )\n }\n\n public LoadStudentElectiveDiscipline(studyYear: number) {\n this.hasLoaded = false;\n this.getStudentElectiveDisciplines(studyYear);\n }\n\n hasAnyEnrolled(electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]): boolean {\n return electiveDisciplineDto.some(item => item.hasEnrolled);\n }\n\n hasChosenElectiveDiscipline(electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]): boolean {\n return electiveDisciplineDto.some(item => item.hasEnrolled);\n }\n\n getElectiveDisciplineName(electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]): string {\n return electiveDisciplineDto.find(edd => edd.hasEnrolled)?.electiveDisciplineName ?? '';\n }\n\n getElectiveDisciplineLocation(electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]): string {\n return electiveDisciplineDto.find(edd => edd.hasEnrolled)?.disciplineLocation ?? '';\n }\n\n getElectiveDisciplinePersonInfo(electiveDisciplineDto: GetStudentsElectiveDisciplineDto[]): string {\n const enrolled = electiveDisciplineDto.find(edd => edd.hasEnrolled);\n if (!enrolled) return '';\n\n const fio = enrolled.fio ?? '';\n const phoneNumber = enrolled.phoneNumber ? `конт. тел. ${enrolled.phoneNumber}` : '';\n\n return fio && phoneNumber\n ? `${fio}, ${phoneNumber}`\n : fio || phoneNumber;\n }\n\n public rowCallback = (context: RowClassArgs) => {\n if (context.dataItem.hasEnrolled) {\n return { gray: true };\n } else {\n return { };\n }\n };\n\n checkStudentDeadlines() {\n this.hasDeadline = this.studentElectiveDisciplines\n .some(item => item.electiveDisciplineDto\n .some(x => x.hasDeadline));\n }\n\n checkIfCanSign(): void {\n if(this.studentElectiveDisciplines.length > 0 )\n this.cantSign = !this.studentElectiveDisciplines.every(dpv =>\n dpv.electiveDisciplineDto.some(discipline => discipline.hasEnrolled) &&\n !dpv.electiveDisciplineDto.some(discipline => discipline.signed)\n );\n }\n\n checkIfSigned(): void {\n if(this.studentElectiveDisciplines.length > 0 )\n this.signed = this.studentElectiveDisciplines.every(dpv =>\n dpv.electiveDisciplineDto.some(discipline => discipline.signed)\n );\n }\n\n closeDialog() {\n this.openedDialog = false;\n }\n\n closeEmailDialog() {\n this.openedEmailDialog = false;\n }\n\n openEmailDialog() {\n this.openedEmailDialog = true;\n }\n\n public checkForSameElectiveDisciplineInStudyYear(dataItem: GetStudentsElectiveDisciplineDto) {\n this.addElectiveDisciplineStudentCommand = new AddElectiveDisciplineStudentCommand(dataItem.electiveDisciplineId, this.yearAdmission);\n if (dataItem.hasSameElectiveDisciplineInStudyYear) {\n this.openedDialog = true;\n } else {\n this.enroll();\n }\n }\n\n public enroll() {\n this.iotService.addStudentElectiveDiscipline(this.addElectiveDisciplineStudentCommand!).subscribe(\n (next) => {\n this.openedDialog = false;\n this.getStudentElectiveDisciplines(this.yearAdmission);\n this.notificationService.showSuccess('Сохранено');\n }\n )\n }\n\n public unroll(dataItem: GetStudentsElectiveDisciplineDto) {\n const deleteElectiveDisciplineStudentCommand = new DeleteElectiveDisciplineStudentCommand(dataItem.electiveDisciplineStudentId);\n this.iotService.deleteStudentElectiveDiscipline(deleteElectiveDisciplineStudentCommand).subscribe(\n (next) => {\n this.getStudentElectiveDisciplines(this.yearAdmission);\n this.notificationService.showSuccess('Сохранено');\n }\n )\n }\n\n public signStatement() {\n const signStatementCommand = new SignStatementCommand(this.yearAdmission);\n this.iotService.signStatement(signStatementCommand).subscribe(\n (next) => {\n this.getStudentElectiveDisciplines(this.yearAdmission);\n this.notificationService.showSuccess('Сохранено');\n this.signed = true;\n }\n )\n }\n\n private getStudentSubscriptionEmailStatus() {\n this.iotEmailSubscriptionService.getStudentSubscriptionEmailStatus().subscribe(\n (next) => {\n this.studentEnabledEmailNotifications = next;\n }\n )\n }\n\n protected subscribeOrUnsubscribeStudentToEmail() {\n const method = this.studentEnabledEmailNotifications\n ? this.iotEmailSubscriptionService.unsubscribeStudentFromEmail()\n : this.iotEmailSubscriptionService.subscribeStudentToEmail()\n method.subscribe(\n (next) => {\n this.notificationService.showSuccess('Сохранено');\n this.closeEmailDialog();\n this.getStudentSubscriptionEmailStatus();\n }\n )\n }\n\n protected readonly DateToString = DateToString;\n}\n","
\n \n \n \n

Образовательная программа

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Направление подготовки{{educationProgramName}}
Профиль{{profileValue}}
Квалификация{{qualificationName}}
Форма обучения{{studyFormValue}}
Технология обучения{{studyTechnologyName}}
Длительность обучения\n
\n
{{yearsLength}} {{yearConversion[yearsLength] ?? 'лет'}}
\n
 
\n
{{monthsLength}} {{monthConversion[monthsLength] ?? 'месяцев'}}
\n
\n
\n \n \n \n \n\n\n \n \n \n
\n
\n Мес.\n
\n
\n Числа\n
\n
\n Нед.\n
\n
\n
\n \n {{ dataItem.courseNumber }} курс\n \n \n \n \n \n \n
\n
\n {{ day.title }}\n
\n
{{ day.days }}
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n {{ column.title }}\n
\n
{{ column.days }}
\n
\n
\n \n \n
\n \n \n \n\n \n

Условные обозначения

\n \n \n \n
\n

{{dataItem.name}}

\n
\n
\n
\n \n \n
\n

{{dataItem.symbol}}

\n
\n
\n
\n
\n
\n
Установочная сессия
\n
\n
\n \n
\n\n\n \n \n \n \n \n \n \n {{dataItem.Cipher}}\n \n \n \n \n \n \n {{dataItem.DictDisciplineName}}\n \n \n \n \n \n \n {{dataItem.DepartmentName}}\n \n \n \n \n \n
\n
\n {{removeDuplicateSemesters(dataItem.ControllingActions)}}\n
\n
\n
\n
\n \n \n \n \n {{dataItem.TotalNumberHours}}\n \n \n \n \n \n \n {{dataItem.TotalLaborIntensity}}\n \n \n \n \n
\n\n\n \n

Сводные данные по нагрузке студента

\n \n \n \n \n {{dataItem.name}}\n \n \n \n \n \n \n {{dataItem[column.field] && dataItem[column.field] > 0 ? dataItem[column.field] : null}}\n \n \n \n \n\n \n \n
\n
\n\n \n\n \n \n \n \n \n \n {{dataItem.Cipher}}\n \n \n \n \n \n \n \n \n {{dataItem.DictComponentName}}\n \n \n \n \n \n \n {{dataItem.DictDisciplineName}}\n \n \n \n \n \n \n {{dataItem.TotalLaborIntensity}}\n \n \n \n \n \n \n {{displayCompetenceMatrix(dataItem.DistributionCompetences)}}\n \n \n \n \n \n \n\n \n\n \n \n \n\n \n\n
\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport * as moment from \"moment\";\nimport { CellClickEvent, RowClassArgs } from '@progress/kendo-angular-grid';\nimport {SortDescriptor, groupBy, orderBy} from '@progress/kendo-data-query';\nimport {\n EducationGraphLegend,\n EducationPlanDiscipline,\n LKEducationPlan\n} from 'src/app/models/education/LKEducationPlan.model';\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\nimport { LKEducationPlanService } from 'src/app/services/LKEducation/LKEducationBUP/lkeducationPlan.service';\nimport { EducationStandard } from 'src/app/models/education/EducationStandard.model';\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\nimport { Faculty } from 'src/app/models/profile/external/faculty.model';\nimport { Department } from 'src/app/models/profile/external/department.model';\nimport { LKStudPlanService } from 'src/app/services/LKStudent/lkstud-plan.service';\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\nimport { LKStudEduGroupService } from 'src/app/services/LKStudent/lkstud-edu-group.service';\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\nimport { LKEduGroup } from 'src/app/models/profile/lkEduGroup.model';\nimport { DictQualification } from 'src/app/models/education/DictQualification.model';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {\n CellDataType, ScheduleCourseData,\n TableDataType,\n TableHeaderType,\n WorkType\n} from 'src/app/models/education/education-plan-schedule.model';\nimport { DictWorkScheduleStudyProcessTypeService } from 'src/app/services/LKEducation/DictWorkScheduleStudyProcessType/dict-work-schedule-study-process-type.service';\nimport {CommonStatusEnum} from \"../../models/enums/common-status.enum\";\nimport {environment} from \"../../../environments/environment\";\n\n\n@Component({\n selector: 'app-education',\n templateUrl: './education.component.html',\n styleUrls: ['./education.component.scss']\n})\nexport class EducationComponent implements OnInit {\n\n public totalData: any[] = [];\n public totalColumns: any[] = [];\n public tableData: TableDataType[] = [];\n public tableHeaderData: TableHeaderType[] = [];\n private emptyCell?: EducationGraphLegend;\n\n public dictMonth: { [key: string]: string } = {\n 0: 'Январь',\n 1: 'Февраль',\n 2: 'Март',\n 3: 'Апрель',\n 4: 'Май',\n 5: 'Июнь',\n 6: 'Июль',\n 7: 'Август',\n 8: 'Сентябрь',\n 9: 'Октябрь',\n 10: 'Ноябрь',\n 11: 'Декабрь',\n };\n\n public commonStatus = CommonStatusEnum;\n public hasLoaded = false;\n public isInstallationSession = false;\n private selectedDisciplineId = \"\";\n private tabNumber = String(this.route.snapshot.paramMap.get('tab'));\n public lkoEducation = environment.lkoEducation;\n public iot = environment.iot;\n public IsTabSelected(id:number)\n {\n if(this.tabNumber==undefined || this.tabNumber=='null' || this.tabNumber=='') this.tabNumber='4';\n return this.tabNumber == id.toString();\n }\n\n // Конвертация года или месяцев\n yearConversion?: any = {1: 'год', 2: 'года', 3: 'года', 4: 'года', 5: 'лет', 6: 'лет', 7: 'лет', 8: 'лет', 9: 'лет', 10: 'лет', 11: 'лет' };\n monthConversion?: any = {1: 'месяц', 2: 'месяца', 3: 'месяца', 4: 'месяца', 5: 'месяцев', 6: 'месяцев', 7: 'месяцев', 8: 'месяцев', 9: 'месяцев',\n 10: 'месяцев', 11: 'месяцев', 12: 'месяцев'}\n\n // Для проверки планов из группы и из студента\n public groupEducationPlan? = \"\"\n public studEducationPlan? = \"\"\n\n // Table values\n // Направление подготовки\n public educationProgramName? = \"\";\n public trainingLevelId?: string;\n public filialId?: string;\n // Технология обучения\n public studyTechnologyName? = \"\";\n // Профиль\n public profilingCourseNumber = 1;\n public hasProfile():boolean { return this.profilingCourseNumber <= (this.studEduGroup?.eduGroup?.courseNum ?? 1)}\n public profileValue? = \"\";\n // Форма обучения\n public studyFormValue? = \"\";\n // Длительность обучения\n public yearsLength = 0;\n public monthsLength = 0;\n // Квалификация\n public qualificationName? = \"\";\n\n // Условные обозначения\n public mapLegend: EducationGraphLegend[] = [\n /*{ Name: 'Каникулы', Symbol: 'К', Color: '#FFEB38'},\n { Name: 'Учебные занятия по дисциплинам (модулям)', Symbol: '^', Color: '#FFFFFF'},\n { Name: 'Неучебная неделя', Symbol: '/', Color: '#FFFFFF'},\n { Name: 'Промежуточная аттестация', Symbol: '::', Color: '#FF0000'},\n { Name: 'Государственная итоговая аттестация', Symbol: 'Г', Color: '#D65EEA'},\n { Name: 'Производственная практика', Symbol: 'X', Color: '#D9D9D9'},\n { Name: 'Преддипломная практика', Symbol: 'П', Color: '#FAFAFA'}*/\n ]\n\n // StudPerson\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n\n public studyForm: DictStudyForm = {\n studyFormName: '',\n studyFormSName: ''\n }\n\n public educationStandard: EducationStandard = {\n cipher: '',\n name: '',\n shortName: '',\n dictStandardTypeId: '',\n dictEducationLevelId: '',\n dictTrainingLevelId: ''\n }\n\n public faculty: Faculty = {\n name: '-',\n shortName: '-'\n }\n\n public department: Department = {\n name: '-',\n shortName: '-',\n faculty: this.faculty\n }\n\n public dictQualification: DictQualification = {\n qualificationName: '',\n qualificationSName: ''\n }\n\n public studGroupEducationProgram: LKEducationProgram = {\n lkEducationProgramId: 0,\n lkEducationProgramExternalId: '',\n cipher: '',\n name: '',\n shortname: '',\n educationStandardId: '',\n educationStandard: this.educationStandard,\n dictQualificationId: '',\n dictQualification: this.dictQualification,\n departmentId: '',\n graduatingDepartment: this.department,\n faculty: this.faculty\n }\n\n public educationProgram: LKEducationProgram = {\n lkEducationProgramId: 0,\n lkEducationProgramExternalId: '',\n cipher: '',\n name: '',\n shortname: '',\n educationStandardId: '',\n educationStandard: this.educationStandard,\n dictQualificationId: '',\n dictQualification: this.dictQualification,\n departmentId: '',\n graduatingDepartment: this.department,\n faculty: this.faculty\n }\n\n public educationPlan: LKEducationPlan = {\n educationPlanId: 0,\n educationPlanExternalId: \"\",\n jsonData: \"\",\n educationProgramId: '',\n educationProgram: this.educationProgram,\n dictStudyFormId: '',\n dictStudyForm: this.studyForm\n }\n\n public eduGroup?: LKEduGroup = {\n courseNum: 0,\n groupName: \"-\",\n faculty: this.faculty,\n facultyId: \"\"\n }\n\n public studEduGroup?: LKStudEduGroup = {\n studPersonId: '',\n studentId: '',\n fullName: '',\n eduGroupId: '',\n eduGroup: this.eduGroup\n }\n\n public studPlan?: LKStudPlan = {\n studentId: '',\n educationPlan: this.educationPlan,\n department: this.department\n }\n\n public sort: SortDescriptor[] = [\n {\n field: \"CourseNumber\",\n dir: \"asc\",\n },\n ];\n\n public sortCourse: SortDescriptor[] = [\n {\n field: \"WeekNumber\",\n dir: \"asc\",\n },\n {\n field: \"SerialNumberWeek\",\n dir: \"asc\",\n },\n ];\n\n public sortEmpty: SortDescriptor[] = [\n {\n field: \"weekNumber\",\n dir: \"asc\",\n },\n ];\n\n public bupData: EducationPlanDiscipline[] = [];\n\n //public budgetTimesData: any = []; //столбцы аудиторки для сводных данных по бюджету\n //сводные данные по бюджету времени\n /*public budget: any[] = [\n {\n Hours: 0,\n Intensity: 0,\n ControlHours: 0,\n ControlIntensity: 0,\n ContactWorkHours: 0,\n ContactWorkIntensity: 0,\n SelfWorkHours: 0,\n SelfWorkIntensity: 0,\n }\n ]*/\n\n\n public gridData: any = this.bupData; //данные для основного грида\n\n constructor(private educationPlanService: LKEducationPlanService,\n private studPlanService: LKStudPlanService,\n private studEduGroupService: LKStudEduGroupService,\n private studentService: LKStudentService,\n private dictWorkScheduleStudyProcessTypeService: DictWorkScheduleStudyProcessTypeService,\n private router: Router,\n private route: ActivatedRoute\n ) { }\n\n public getStudPlan() {\n this.studPlanService.getStudPlan()\n .subscribe(\n async response => {\n this.studPlan = response;\n this.studEducationPlan = this.studPlan?.planId;\n await delay(500);\n this.hasLoaded = true;\n\n // Вывод базового учебного плана в таблицу (если есть StudPlan)\n\n let plan:LKEducationPlan|undefined = this.studPlan?.educationPlan;\n if(plan == null) {\n plan = this.studEduGroup?.eduGroup?.educationPlan ?? undefined;\n this.educationProgramName = this.studGroupEducationProgram?.educationStandard?.cipher + \" - \" + this.studGroupEducationProgram?.educationStandard?.name;\n this.qualificationName = this.studGroupEducationProgram?.dictQualification?.qualificationName;\n this.trainingLevelId = this.studGroupEducationProgram?.educationStandard?.dictTrainingLevelId;\n this.filialId = this.studGroupEducationProgram?.filialId;\n }\n else {\n this.educationProgramName = this.studPlan?.educationPlan?.educationProgram?.educationStandard?.cipher + \" - \" + this.studPlan?.educationPlan?.educationProgram?.educationStandard?.name;\n this.qualificationName = this.studPlan?.educationPlan?.educationProgram?.dictQualification?.qualificationName;\n this.trainingLevelId = this.studPlan?.educationPlan?.educationProgram?.educationStandard?.dictTrainingLevelId;\n this.filialId = this.studPlan?.educationPlan?.educationProgram?.filialId;\n }\n\n this.mapLegend = this.filterScheduleLegend(this.mapLegend);\n this.emptyCell = this.mapLegend.find((x) => x.dictWorkCategoryScheduleId == null && !x.isInvolvedCalculating)\n\n if(plan?.jsonData != null || plan?.jsonData != undefined)\n {\n const arr = JSON.parse(plan?.jsonData);\n // Pass values to HTML\n this.profilingCourseNumber = plan?.educationProgram?.profilingCourseNumber ?? 1;\n this.profileValue = plan?.educationProgram?.name;\n this.studyTechnologyName = arr.DictStudyTechnology.Name;\n this.yearsLength = arr.StudyYears ?? 0;\n this.monthsLength = arr.StudyMonths ?? 0;\n this.studyFormValue = plan?.dictStudyForm?.studyFormName;\n\n this.isInstallationSession = this.studyFormValue.toLowerCase().includes(\"заоч\")\n\n //сформируем собственную таблицу с дисциплинами и компонентами\n let planData = [];\n let currentCycleId = '', currentComponent:any;\n for(let discipline of arr.Disciplines)\n {\n if(currentCycleId!=discipline.DictCycleId) {\n planData.push({\n Id: null,\n Cipher: discipline.DictCycleSName,\n DictDisciplineName: discipline.DictCycleName,\n DepartmentName: '',\n ControllingActions: [],\n TotalNumberHours: sumHours(arr.Disciplines, discipline.DictCycleId, null),\n TotalLaborIntensity: sumIntensity(arr.Disciplines, discipline.DictCycleId, null),\n Level: 0\n });\n currentCycleId = discipline.DictCycleId;\n }\n if(currentComponent==undefined || currentComponent.Id!=discipline.DictComponent.Id) {\n if((currentComponent==undefined || currentComponent.ParentDictComponent?.Id!=discipline.DictComponent.ParentDictComponent?.Id)\n && discipline.DictComponent.ParentDictComponent != null)\n planData.push({\n Active: discipline.CommonStatus === this.commonStatus.Active,\n Id: null,\n Cipher: !discipline.DictComponent.ParentDictComponent.HiddenCipher\n ? discipline.DictCycleSName + '.' + discipline.DictComponent.ParentDictComponent.SName\n : '',\n DictDisciplineName: discipline.DictComponent.ParentDictComponent.Name,\n DepartmentName: '',\n ControllingActions: [],\n TotalNumberHours: sumHours(arr.Disciplines, discipline.DictCycleId, discipline.DictComponent.ParentDictComponent.Id),\n TotalLaborIntensity: sumIntensity(arr.Disciplines, discipline.DictCycleId, discipline.DictComponent.ParentDictComponent.Id),\n Level: 1\n });\n if(!discipline.DictComponent.HiddenTitle)\n planData.push({\n Active: discipline.CommonStatus === this.commonStatus.Active,\n Id: null,\n Cipher: !discipline.DictComponent.HiddenCipher\n ? discipline.DictCycleSName + '.' + discipline.DictComponent.SName\n : '',\n DictDisciplineName: discipline.DictComponent.Name,\n DepartmentName: '',\n ControllingActions: [],\n TotalNumberHours: sumHours(arr.Disciplines, discipline.DictCycleId, discipline.DictComponent.Id),\n TotalLaborIntensity: sumIntensity(arr.Disciplines, discipline.DictCycleId, discipline.DictComponent.Id),\n Level: 1\n });\n currentComponent = discipline.DictComponent;\n }\n planData.push({\n Active: discipline.CommonStatus === this.commonStatus.Active,\n Id: discipline.Id,\n Cipher: discipline.Cipher,\n DictDisciplineName: discipline.DictDisciplineName,\n DepartmentName: discipline.DepartmentSName,\n ControllingActions: discipline.ControllingActions,\n TotalNumberHours: discipline.ChildrenDiscipline && discipline.ChildrenDiscipline.length !== 0 ? sumHours(discipline.ChildrenDiscipline, discipline.DictCycleId, discipline.DictComponent.Id) : discipline.TotalNumberHours,\n TotalLaborIntensity: discipline.ChildrenDiscipline && discipline.ChildrenDiscipline.length !== 0 ? sumIntensity(discipline.ChildrenDiscipline, discipline.DictCycleId, discipline.DictComponent.Id) : discipline.TotalLaborIntensity,\n Level: 2\n });\n for(let el = 0; el < discipline.ElectiveDisciplines.length; el++) {\n planData.push({\n Active: discipline.ElectiveDisciplines[el].CommonStatus === this.commonStatus.Active,\n Id: discipline.Id,\n Cipher: discipline.Cipher + \".\" + discipline.ElectiveDisciplines[el].SerialNumber,\n DictDisciplineName: discipline.ElectiveDisciplines[el].DictDisciplineName,\n DepartmentName: discipline.ElectiveDisciplines[el].DepartmentSName,\n ControllingActions: [],\n Level: 3\n });\n }\n }\n\n //посчитаем сводные данные\n this.bupData = arr.Disciplines;\n this.gridData = planData;\n\n let semesterNumbers = [...new Set(arr.Semesters.map((item:any) => item.Number))] as number[];\n this.totalColumns = [...semesterNumbers.map((item:number) => ({field: '_'+item, title: item}))];\n this.totalData = [];\n\n let tmp = {name: \"Аудиторная нагрузка, ак.ч.\"};\n for (let col of this.totalColumns) {\n Object.defineProperty(tmp, col.field, { value: sumContactWork(arr.Disciplines, col.title) });\n }\n this.totalData.push(tmp);\n\n let actionsArr = arr.Disciplines\n .filter((item: any) => item.Cipher && item.CommonStatus === this.commonStatus.Active)\n .flatMap((item:any) => item.ControllingActions);\n let actions = [...new Map(actionsArr\n .map((item:any) => ([item.DictControlActionName, {id: item.DictControlActionId, name: item.DictControlActionName}])))\n .values()].sort((a:any, b:any) => a.name.localeCompare(b.name)) as any[];\n for(let action of actions) {\n tmp = {name: action.name + ', шт.'};\n for (let col of this.totalColumns) {\n Object.defineProperty(tmp, col.field, { value: countActions(actionsArr, col.title, action.id, null, null) });\n }\n this.totalData.push(tmp);\n }\n let cnt = 0;\n tmp = {name: \"Курсовая работа, шт.\"};\n for (let col of this.totalColumns) {\n let tmpRes = countActions(actionsArr, col.title, null, true, false);\n cnt += tmpRes;\n Object.defineProperty(tmp, col.field, { value: tmpRes });\n }\n //если вся строка нулевая - скроем\n if(cnt > 0)\n this.totalData.push(tmp);\n cnt = 0;\n tmp = {name: \"Курсовой проект, шт.\"};\n for (let col of this.totalColumns) {\n let tmpRes = countActions(actionsArr, col.title, null, false, true)\n cnt += tmpRes;\n Object.defineProperty(tmp, col.field, { value: tmpRes });\n }\n //если вся строка нулевая - скроем\n if(cnt > 0)\n this.totalData.push(tmp);\n\n\n /*this.budget[0].Hours= sumHours(arr.Disciplines, null, null);\n this.budget[0].Intensity= sumIntensity(arr.Disciplines, null, null);\n this.budget[0].ControlHours= sumControl(arr.Disciplines, null);\n this.budget[0].ControlIntensity= this.budget[0].ControlHours / this.IntensityMeasure;\n this.budget[0].ContactWorkHours= sumContactWork(arr.Disciplines, null);\n this.budget[0].ContactWorkIntensity= this.budget[0].ContactWorkHours / this.IntensityMeasure;\n this.budget[0].SelfWorkHours= sumSelfWork(arr.Disciplines, null);\n this.budget[0].SelfWorkIntensity= this.budget[0].SelfWorkHours / this.IntensityMeasure;\n if(arr.Disciplines.length > 0) {\n this.budgetTimesData = arr.Disciplines[0].ControllingActions[0].TypeWorks\n .filter((item:any) => item.ClassroomWork)\n .map((item:any) => ({\n name: item.SName,\n value: sumTypeWorkHours(arr.Disciplines, item.Name)\n }));\n }*/\n\n //данные для графика\n //легенда\n /*this.mapLegend = [...new Map(arr.EducationalProcessSchedules.map((item:any) => ([item.WorkType.Name, {\n Color: item.WorkType.Color,\n Symbol: item.WorkType.DisplayedValue,\n Name: item.WorkType.Name\n }]))).values()] as EducationGraphLegend[];*/\n\n let defaultDate = new Date(arr.YearAdmission,8,1);\n //заголовки для графика - нужен массив дат, от минимальной за курс до максимальной\n let semesterDates = arr.Semesters\n .filter((sem: any) => sem.StartTraining != null)\n .map((item: any) => ({\n semesterNumber: item.Number,\n semesterBeginWeekNumber: null,\n courseNumber: item.CourseNumber,\n installationSessionBegin: item.InstallationSessionBegin,\n installationSessionEnd: item.InstallationSessionEnd,\n //все даты начала семестра преобразуем в текущий учебный год для равенства\n StartTraining: item.StartTraining != null\n ? DateFromUTCAsLocal(item.StartTraining)\n : null\n }));\n //уникальные даты, без пустых\n let distinctDates = [...new Set(arr.Semesters.map((item:any) => new Date(arr.YearAdmission, new Date(item.StartTraining).getMonth(), new Date(item.StartTraining).getDate())))] as Date[];\n\n //let minDate = new Date(Math.min(...distinctDates.map((item) => item.getTime())));\n\n let minDate = new Date(Math.min(...semesterDates.map((s: any) => s.StartTraining.getTime())));\n\n const maxDate = new Date(Math.max(...distinctDates.map((x: Date) => new Date(x).setDate(x.getDate() + 52 * 7)))); //+ 1 год\n semesterDates.forEach((x: any) => {\n x.semesterBeginWeekNumber = moment(minDate).diff(moment(x.StartTraining), 'week') + 1\n });\n\n //посчитаем дату начала обучения для всего плана (какая дата чаще больше по курсам - та и главная)\n //минимальные даты по курсам\n let courseDates = semesterDates.reduce((arr: any[], sem: any) => {\n if(arr.filter(x => x.courseNumber == sem.courseNumber).length == 0) {\n arr.push({\n courseNumber: sem.courseNumber,\n minDate: new Date(Math.min(...semesterDates\n .filter((s: any) => s.StartTraining != null && sem.courseNumber == s.courseNumber)\n .map((s: any) => s.StartTraining.getTime())))\n })\n }\n return arr;\n }, []);\n //агрегирование для подсчета самой частой даты\n let courseDatesStatistic = courseDates.reduce((arr: any[], course: any) => {\n let item = arr.find(x => x.minDate.getTime() == course.minDate.getTime())\n if(item) item.count ++;\n else arr.push({ count: 1, minDate: course.minDate });\n return arr;\n }, []).sort((a: any, b: any) => a.count < b.count ? 1 : -1);\n //если у нас 2 победителя - тогда добавим дефолтную дату, чтобы внести ясность\n if(courseDatesStatistic.length>1 && courseDatesStatistic[0].count == courseDatesStatistic[1].count){\n let item = courseDatesStatistic.find((x: any) => x.minDate.getTime() == defaultDate.getTime())\n if(item) item.count++;\n courseDatesStatistic = courseDatesStatistic.sort((a: any, b: any) => a.count < b.count ? 1 : -1);\n }\n //и вот и нас есть дата начала обучения по плану\n let averageMinDate = courseDatesStatistic.length > 0 ? courseDatesStatistic[0].minDate : defaultDate;\n\n let dateYearEnd = new Date(minDate);\n dateYearEnd.setFullYear(minDate.getFullYear() + 1);\n dateYearEnd.setDate(minDate.getDate() - 1);\n\n let yearEndOffset = moment(dateYearEnd).diff(moment(new Date(minDate).setDate(minDate.getDate() + 52 * 7)), 'days');\n\n if(!this.leapYear(minDate.getFullYear() + 1))\n yearEndOffset++;\n\n dateYearEnd.setDate(dateYearEnd.getDate() - 6);\n\n let graphDates:any[] = [];\n let i = 1;\n //массив начал и концов недели в диапазоне от minDate до maxDate\n //считаем, что minDate - эталонное начало недели\n while(minDate < maxDate) {\n let leapOffset = this.leapYear(minDate.getFullYear()) && (minDate.getMonth() >= 2 || minDate.getMonth() == 1 && minDate.getDate() == 29) ? 1 : 0;\n\n let tmpDate = new Date(minDate);\n tmpDate.setDate(tmpDate.getDate() + 6);\n\n let leapOffsetEnd = this.leapYear(tmpDate.getFullYear()) && (tmpDate.getMonth() >= 2 || tmpDate.getMonth() == 1 && tmpDate.getDate() == 29) ? 1 : 0;\n\n const tmpStartDate = new Date(new Date(minDate).setDate(minDate.getDate() + leapOffset));\n const tmpEndDate = new Date(new Date(tmpDate).setDate(tmpDate.getDate() + leapOffsetEnd));\n\n graphDates.push({\n start: new Date(new Date(minDate).setDate(minDate.getDate() + leapOffset + (tmpStartDate > dateYearEnd ? yearEndOffset : 0))),\n end: new Date(new Date(tmpDate).setDate(tmpDate.getDate() + leapOffsetEnd + (tmpEndDate > dateYearEnd ? yearEndOffset : 0))),\n weekNumber: i,\n title: (Math.round(moment(minDate).diff(moment(new Date(averageMinDate.getFullYear(), 8, 1)), 'days') / 7) % 52 + 52) % 52 + 1\n });\n minDate.setDate(minDate.getDate() + 7);\n i++;\n }\n this.getTableHeaderData(graphDates);\n\n //сам график\n this.getTableData(\n groupBy(orderBy(arr.EducationalProcessSchedules, this.sort), [{field:\"CourseNumber\"}]),\n semesterDates,\n graphDates\n );\n }\n },\n error => {\n this.hasLoaded = true;\n }\n )\n }\n\n private filterScheduleLegend(legend: EducationGraphLegend[]) : EducationGraphLegend[]{\n return legend.filter((item) =>\n item.dictTrainingLevelId === this.trainingLevelId &&\n item.filialId === this.filialId)\n }\n\n public leapYear(year: number)\n {\n return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);\n }\n\n public getTableData(processScheduleData: any[], sourceSemesters: any[], graphDates: any[]) {\n if(sourceSemesters.length === 0 || graphDates.length === 0)\n return;\n let templateTableData: TableDataType[] = [];\n this.tableData = [];\n\n //пройдем по каждому курсу\n processScheduleData.forEach((sourceItem: any) => {\n\n let semesterNumber = sourceItem.items[0]?.SemesterNumber\n ? sourceItem.items[0].SemesterNumber\n : 1;\n\n sourceItem.items = orderBy(sourceItem.items, this.sortCourse)\n\n let item = {\n workTypes: sourceItem.items,\n courseNumber: sourceItem.value,\n semesters: sourceSemesters.filter((x: any)=> x.courseNumber == sourceItem.value),\n } as ScheduleCourseData;\n\n //сдвиг для курса целиком, если начало курса отличается от остальных\n let courseDateMin = new Date(Math.min(...item.semesters.map((sem:any) => sem.StartTraining)));\n let minDate = new Date(Math.min(...sourceSemesters.map((s: any) => s.StartTraining.getTime())));\n item.workTypes.forEach(week => week.WeekNumber += moment(courseDateMin).diff(moment(new Date(minDate)), 'week'))\n\n /* {\n \"CourseNumber\": 1,\n \"SemesterNumber\": null,\n \"DaysAmount\": 6,\n \"SerialNumberWeek\": 0,\n \"WeekNumber\": 49,\n \"WorkType\": {\n \"CategoryId\": \"d36da979-6286-4a9f-8476-aedfe22cd374\",\n \"Name\": \"Каникулы\",\n \"ShortName\": \"\",\n \"Symbol\": \"К\",\n \"SymbolMMIS\": \"К\",\n \"DisplayedValue\": \"К\",\n \"Color\": \"#FFFF00\",\n \"Calc\": true\n }\n }*/\n\n /*let semesterNumber = item.workTypes[0]?.SemesterNumber\n ? item.workTypes[0].SemesterNumber\n : 1;\n let isNextSemester = false;\n let nextSemesterIndex = 1;\n let semestrBeginWeekNumber = item.semesters.map((semester) =>\n semester.semesterBeginWeekNumber ? semester.semesterBeginWeekNumber : 0\n );*/\n //this.educationPlanScheduleService.semestersByCourse[item.courseNumber] = JSON.parse(JSON.stringify(item.semesters));\n\n const weeksNumber = item.workTypes.reduce(\n (weeks: CellDataType[], type: WorkType) => {\n if (!type.SerialNumberWeek) {\n /*if (\n isNextSemester &&\n semesterNumber !==\n item.semesters[nextSemesterIndex]?.semesterNumber &&\n (type.WorkType.DictWorkCategoryScheduleId === '55c9b980-e214-4e28-9d3d-7da90a625f05' ||\n type.WorkType.DictWorkCategoryScheduleId === '0c39ac39-3920-41bc-83ba-9f996976f6ba' ||\n type.WorkType.DictWorkCategoryScheduleId === '1c860063-aab3-4acd-a958-ec58d2551927' ||\n type.WorkType.DictWorkCategoryScheduleId === 'e920e5a5-34fd-453b-9c36-185cb47e923b' ||\n type.WorkType.DictWorkCategoryScheduleId === 'cc5e1966-5c83-412c-81d6-36f968d38ce8')\n ) {\n isNextSemester = false;\n\n if (item.semesters[nextSemesterIndex]?.semesterBegin === null) {\n semesterNumber =\n item.semesters[nextSemesterIndex]?.semesterNumber;\n //semestrBeginWeekNumber.push(type.WeekNumber);\n //this.educationPlanScheduleService.semestersByCourse[item.courseNumber][nextSemesterIndex].semesterBeginWeekNumber = type.WeekNumber;\n }\n\n if (nextSemesterIndex < item.semesters.length - 1)\n nextSemesterIndex++;\n }\n\n if (\n type.WorkType.DictWorkCategoryScheduleId === 'd36da979-6286-4a9f-8476-aedfe22cd374'\n ) {\n isNextSemester = true;\n }*/\n\n const currentSemesterNumber = type.SemesterNumber ?? semesterNumber;\n const currentSemester = item.semesters.find((semester) =>\n semester.semesterBeginWeekNumber! <= type.WeekNumber);\n\n const installationSessionBeginWeek = this.findWeek(currentSemester?.installationSessionBegin, graphDates);\n const installationSessionEndWeek = this.findWeek(currentSemester?.installationSessionEnd, graphDates);\n\n const isInstallationSession = item.semesters.some((x) => this.InstallationSession(x, graphDates, type.WeekNumber))\n\n const installationSessionBeginDayNumber = this.getWeekDayNumber(installationSessionBeginWeek?.start, currentSemester?.installationSessionBegin);\n const installationSessionEndDayNumber = this.getWeekDayNumber(installationSessionEndWeek?.start, currentSemester?.installationSessionEnd);\n\n weeks.push({\n installationSessionBeginWeekNumber: installationSessionBeginWeek?.weekNumber,\n installationSessionEndWeekNumber: installationSessionEndWeek?.weekNumber,\n isInstallationSession: isInstallationSession,\n installationSessionBeginDayNumber,\n installationSessionEndDayNumber,\n\n //semestrBeginWeekNumber,\n weekNumber: type.WeekNumber,\n //semesterNumber,\n days: [\n {\n daysAmount: type.DaysAmount,\n symbol: type.WorkType.Symbol,\n backgroundColor: type.WorkType.Color,\n dictWorkScheduleStudyProcessType: type.WorkType,\n semesterNumber: type.SemesterNumber,\n },\n ],\n });\n } else {\n const currentWeek = weeks.find(\n (item) => item.weekNumber === type.WeekNumber\n );\n if (currentWeek)\n currentWeek.days[type.SerialNumberWeek] = {\n daysAmount: type.DaysAmount,\n symbol: type.WorkType.Symbol,\n backgroundColor: type.WorkType.Color,\n dictWorkScheduleStudyProcessType: type.WorkType,\n semesterNumber: type.SemesterNumber,\n };\n }\n return weeks;\n },\n []\n );\n let offset = weeksNumber[0].weekNumber - 1; //сделать неактивные ячейки\n /*while (offset && this.emptyCell) {\n weeksNumber.unshift({\n weekNumber: offset,\n semesterNumber: 0,\n days: [\n {\n daysAmount: 6,\n semesterNumber: 0,\n backgroundColor: this.emptyCell.Color,\n dictWorkScheduleStudyProcessType: {\n ...this.emptyCell,\n //id: this.emptyCell.DictWorkScheduleStudyProcessTypeExternalId,\n DictWorkCategoryScheduleId: this.emptyCell.DictWorkCategoryScheduleId,\n },\n symbol: this.emptyCell.Symbol,\n },\n ],\n });\n offset--;\n }*/\n /*var offsetWeek = Math.min(...weeksNumber.map((week) => week.weekNumber)) - 1;\n if(offsetWeek != 0)\n weeksNumber.forEach((x, index) => x.weekNumber = index - offsetWeek + 1)*/\n\n if (this.emptyCell)\n for (var i = 1; i <= graphDates.length; i++)\n {\n if (!weeksNumber.some((s) => s.weekNumber == i)) {\n weeksNumber.push({\n weekNumber: i,\n semesterNumber: 0,\n installationSessionBeginDayNumber: 0,\n installationSessionEndDayNumber: 0,\n days: [\n {\n daysAmount: 6,\n semesterNumber: 0,\n backgroundColor: this.emptyCell.color,\n dictWorkScheduleStudyProcessType: {\n Color: this.emptyCell.color,\n Symbol: this.emptyCell.symbol,\n Id: this.emptyCell.dictWorkCategoryScheduleId,\n //id: this.emptyCell.DictWorkScheduleStudyProcessTypeExternalId,\n CategoryId:\n this.emptyCell.dictWorkCategoryScheduleId,\n },\n symbol: this.emptyCell.symbol,\n },\n ],\n });\n }\n if(weeksNumber.length == graphDates.length)\n break;\n }\n\n /*offset = Math.max(...weeksNumber.map(week => week.weekNumber))\n while(offset < graphDates.length && this.emptyCell)\n {\n weeksNumber.push({\n weekNumber: offset,\n semesterNumber: 0,\n days: [\n {\n daysAmount: 6,\n semesterNumber: 0,\n backgroundColor: this.emptyCell.color,\n dictWorkScheduleStudyProcessType: {\n Color: this.emptyCell.color,\n Symbol: this.emptyCell.symbol,\n //id: this.emptyCell.DictWorkScheduleStudyProcessTypeExternalId,\n DictWorkCategoryScheduleId: this.emptyCell.dictWorkCategoryScheduleId,\n },\n symbol: this.emptyCell.symbol,\n },\n ],\n })\n offset++;\n }*/\n templateTableData.push({ courseNumber: item.courseNumber, weeksNumber: orderBy(weeksNumber, this.sortEmpty) });\n });\n this.tableData = templateTableData;\n }\n\n public getTableHeaderData(dates: any[]) {\n this.tableHeaderData = [];\n let templateHeaderData: TableHeaderType[] = [];\n\n dates.forEach((date) => {\n const dateStart = new Date(date.start);\n const dateEnd = new Date(date.end);\n\n if (dateStart.getMonth() !== dateEnd.getMonth()) {\n templateHeaderData.push({\n days: `${dateStart.getDate()} - ${dateEnd.getDate()}`,\n title: date.title,\n });\n } else {\n if (\n templateHeaderData.at(-1)?.month !== undefined &&\n templateHeaderData.at(-1)?.month === dateStart.getMonth().toString()\n ) {\n templateHeaderData.at(-1)?.weeks?.push({\n days: `${dateStart.getDate()} - ${dateEnd.getDate()}`,\n title: date.title,\n });\n } else {\n templateHeaderData.push({\n month: dateStart.getMonth().toString(),\n weeks: [\n {\n days: `${dateStart.getDate()} - ${dateEnd.getDate()}`,\n title: date.title,\n },\n ],\n });\n }\n }\n });\n\n this.tableHeaderData = templateHeaderData;\n }\n\n public getStudGroupEducationProgramByStudentId() {\n this.studEduGroupService.getEducationProgramByStudentId()\n .subscribe(\n response => {\n this.studGroupEducationProgram = response;\n }\n )\n }\n\n removeDuplicateSemesters(dataItem: any) {\n let result = [...new Set(dataItem.map((x:any) => x.SemesterNumber + \"(\" + x.DictControlActionAbbreviation + \")\"))]\n .reduce((res, item:any) => res + ', ' + item.toString(), '') as string;\n if(result.length > 0)\n result = result.slice(2)\n return result;\n }\n\n displayCompetenceMatrix(dataItem: any) {\n let string = \"\"\n for (let t = 0; t < dataItem.length; t++) {\n string = string + dataItem[t].Code + ', ';\n }\n string = string.slice(0, -2);\n return string;\n }\n\n public getStudyFormByStudentId() {\n this.studEduGroupService.getStudyFormByStudentId()\n .subscribe(\n response => {\n this.studyForm = response;\n }\n )\n }\n\n public getStudEduGroup() {\n this.studEduGroupService.getStudEduGroup()\n .subscribe(\n response => {\n this.studEduGroup = response;\n this.groupEducationPlan = this.studEduGroup?.eduGroup?.planId;\n }\n );\n }\n\n //Getting student by login\n public getCurrentStudent() {\n this.studentService.getCurrentStudent()\n .subscribe(\n response => {\n this.students = response;\n this.getStudGroupEducationProgramByStudentId();\n this.getStudyFormByStudentId();\n this.getStudEduGroup();\n this.getStudPlan();\n },\n error => {\n this.hasLoaded = true;\n }\n );\n }\n\n public getDictWorkScheduleStudyProcessType() {\n this.dictWorkScheduleStudyProcessTypeService.getAllDictWorkSchedule()\n .subscribe({\n next: (response) => {\n this.mapLegend = this.trainingLevelId\n ? this.filterScheduleLegend(response)\n : response;\n }}\n );\n }\n\n // Change cell color depending on value\n public cellStyle = (color:string) => {\n return 'background-color: ' + color;\n }\n public rowClassCallback = (context: RowClassArgs) => {\n const dataLevel = context.dataItem.Level;\n return {\n planLevel0: dataLevel === 0,\n planLevel1: dataLevel === 1,\n planLevel2: dataLevel > 1,\n noActive: context.dataItem.Active == false,\n };\n }\n\n public disciplineCellClick(cell: CellClickEvent): void {\n if(cell.dataItem.Id!=null)\n this.router.navigate(['education/discipline/' + cell.dataItem.Id]);\n }\n\n public competenceMatrixCellClick(cell: CellClickEvent): void {\n this.selectedDisciplineId = cell.dataItem.Id;\n }\n\n public navigateToCompetenceMatrix() {\n setTimeout(() => this.router.navigate(['education/competenceMatrix/' + this.selectedDisciplineId]), 50 )\n }\n\n public onTabSelect(event: any): void {\n const selectedIndex = event.index;\n\n if (selectedIndex === 3 && !this.iot) { // Индекс зависит от порядка вкладок, начиная с 0\n const url = this.lkoEducation.toString();\n if (url.length) {\n window.open(url, '_blank');\n }\n }\n }\n\n ngOnInit(): void {\n //this.getEducationPlans();\n this.getCurrentStudent();\n this.getDictWorkScheduleStudyProcessType();\n }\n\n public InstallationSession = (semester: any, dates: any, weekNumber: any) => {\n const semesterBegin = this.findWeek(semester?.installationSessionBegin, dates)\n const semesterEnd = this.findWeek(semester?.installationSessionEnd, dates)\n return (semesterBegin?.weekNumber && semesterEnd?.weekNumber\n ? weekNumber >= semesterBegin?.weekNumber\n && weekNumber <= semesterEnd?.weekNumber : false);\n }\n\n private findWeek(date: string | null | undefined, weeks: any[]) {\n return !date ? null :\n weeks.find(\n (week) => DateFromUTCAsLocal(week.start) <= DateFromUTCAsLocal(date)\n && DateFromUTCAsLocal(week.end) >= DateFromUTCAsLocal(date));\n }\n\n private getWeekDayNumber(startWeekDate: string | null | undefined, date: string | null | undefined) {\n if (startWeekDate && date) {\n const firstDayNumber = new Date(startWeekDate).getDay();\n let secondDayNumber = new Date(date).getDay();\n\n secondDayNumber += secondDayNumber < firstDayNumber ? 7 : 0;\n return secondDayNumber - firstDayNumber;\n }\n\n return 0;\n }\n}\n\nfunction delay(ms: number) {\n return new Promise( resolve => setTimeout(resolve, ms) );\n}\n\nfunction sumTypeWorkHours(disciplines: [], typeWorkName:string): number {\n return disciplines.filter((item: any) => !item.DictComponent.HiddenLaborIntensity)\n .flatMap((item:any) => item.ControllingActions)\n .flatMap((item:any) => item.TypeWorks)\n .filter((item: any) => item.Name == typeWorkName)\n .reduce((sum, current:any) => sum + current.Value, 0);\n}\n\nfunction sumHours(disciplines: [], cycleId:string|null, componentId:string|null): number {\n return disciplines.filter((item: any) =>\n item.Cipher &&\n !item.DictComponent.HiddenLaborIntensity &&\n (cycleId == null || item.DictCycleId == cycleId) &&\n (componentId == null || item.DictComponent.Id == componentId || item.DictComponent.ParentDictComponent?.Id == componentId)\n ).reduce((sum, current:any) => sum + current.TotalNumberHours, 0);\n}\n\nfunction sumIntensity(disciplines: [], cycleId:string|null, componentId:string|null): number {\n return disciplines.filter((item: any) =>\n item.Cipher &&\n !item.DictComponent.HiddenLaborIntensity &&\n (cycleId == null || item.DictCycleId == cycleId) &&\n (componentId == null || item.DictComponent.Id == componentId || item.DictComponent.ParentDictComponent?.Id == componentId)\n ).reduce((sum, current:any) => sum + current.TotalLaborIntensity, 0);\n}\n\nfunction sumContactWork(disciplines: [], semester:number|null): number {\n let dataArr = disciplines.filter((item: any) => item.Cipher && !item.DictComponent.HiddenLaborIntensity)\n .flatMap((item:any) => item.ControllingActions)\n .filter((item: any) => semester == null || item.SemesterNumber == semester);\n return dataArr.reduce((sum, item:any) => sum + item.HoursContactWork, 0);\n}\nfunction sumSelfWork(disciplines: [], semester:number|null): number {\n let dataArr = disciplines.filter((item: any) => !item.DictComponent.HiddenLaborIntensity)\n .flatMap((item:any) => item.ControllingActions)\n .filter((item: any) => semester == null || item.SemesterNumber == semester);\n return dataArr.reduce((sum, item:any) => sum + item.HoursSelfWork, 0);\n}\nfunction sumControl(disciplines: [], semester:number|null): number {\n let dataArr = disciplines.filter((item: any) => !item.DictComponent.HiddenLaborIntensity)\n .flatMap((item:any) => item.ControllingActions)\n .filter((item: any) => semester == null || item.SemesterNumber == semester);\n return dataArr.reduce((sum, item:any) => sum + item.Control, 0);\n}\n\nfunction countActions(actions: [], semester:number, controlActionId:string|null, isCourseWork:boolean|null, isCourseProject:boolean|null): number {\n return actions.filter((item: any) =>\n item.SemesterNumber == semester &&\n (controlActionId==null || item.DictControlActionId == controlActionId) &&\n (isCourseProject==null || item.HasCourseProject==isCourseProject) &&\n (isCourseWork==null || item.HasCourseWork==isCourseWork)\n ).length;\n}\n\nexport function DateFromUTCAsLocal(date: any): Date {\n if(date == null) return date;\n return new Date(typeof date == \"string\" ? `${date}`.replace('Z','') : date)\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-exam-list',\n templateUrl: './exam-list.component.html',\n styleUrls: ['./exam-list.component.scss']\n})\nexport class ExamListComponent implements OnInit {\n\n constructor() { }\n\n public gridData = [\n { subject: \"Психологическое сопровождение пациентов в общей медицинской практике\", data: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n { subject: \"Психология, психопатология и психотерапия зависимостей\", data: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n { subject: \"Типология личностных расстройств\", data: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n ];\n\n public coursesData = [\n {id: 1, name: \"1 курс\"},\n {id: 2, name: \"2 курс\"},\n {id: 3, name: \"3 курс\"},\n ]\n\n ngOnInit(): void {\n }\n\n}\n","export enum DisplaySettingEnumList {\n //Личные данные\n fio = 1,\n student_number = 2,\n\n // Информация об обучении\n // Факультет\n faculty,\n // Курс\n course,\n // Группа\n group,\n // Направление подготовки\n education_standard,\n // Форма обучения\n study_form,\n // Уровень подготовки\n training_level,\n // Кафедра\n department,\n // Учебный план\n education_plan,\n // Профиль (программа)\n education_program,\n // Академический статус\n academic_state,\n\n // Сведения о финансировании\n budget,\n budget_category,\n budget_sub_category,\n paid_training_agreement,\n\n // Контакты\n phone,\n city_phone,\n email,\n socialnetwork,\n\n // Прочее\n languages,\n elder,\n score_number,\n pedagogical_head,\n external_id,\n scientific_adviser_tutor,\n diploma_average,\n average_score_semester,\n admission_year,\n graduate_year,\n // Целевое обучение\n target_training_name,\n target_training_customer,\n}\n\nexport const DisplaySettingEnum = DisplaySettingEnumList\n","
\n

Этот раздел находится в разработке!

\n
","export enum DisplaySystemSettingEnumList {\n //Настройки контактов\n mobile_phone = 1,\n city_phone,\n email,\n socialnetwork,\n student_can_edit_deanery_contacts,\n\n //Настройки портфолио\n portfolio\n}\n\nexport const DisplaySystemSettingEnum = DisplaySystemSettingEnumList\n","enum PhoneTypeList {\n city = '641352ca-86d0-451d-a27d-1b4accc9151b',\n mobile = 'e6d8fb45-51ed-4525-a54f-ffff58064400',\n}\n\nexport const PhoneType = PhoneTypeList;\n","export class SystemSettingNotification {\n public externalId!: string;\n public systemsSettingContactNotification?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {environment} from \"../../../environments/environment\";\nimport {BehaviorSubject, catchError, Observable, throwError} from \"rxjs\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {\n AllStudentCardDisplaySetting,\n StudentCardDisplaySetting\n} from \"../../models/home/studentcarddisplaysetting.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StudentCardDisplaySettingService {\n\n public displaySettings$= new BehaviorSubject([]);\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.studentcarddisplaysetting}`;\n\n constructor(private http: HttpClient) { }\n\n public getStudentCardDisplaySettings(): Observable {\n return this.http.get(this.baseUrl + '/GetStudentCardDisplaySettings');\n }\n\n public getAllStudentCardDisplaySettings(): Observable {\n return this.http.get(this.baseUrl + '/GetAllStudentCardDisplaySettings');\n }\n\n public editStudentCardDisplaySetting(request: AllStudentCardDisplaySetting[]): Observable {\n return this.http.post(this.baseUrl + '/EditDisplaySetting/', request)\n .pipe(catchError(this.handleError));\n }\n\n public isHidden(field: number): boolean {\n return !this.displaySettings$.value.find((x) => x.type === field);\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n return throwError(error);}\n}\n","'use strinct';\n\nexport const tokenStore = 'lks_service'\n","import {Injectable} from \"@angular/core\";\nimport {tokenStore} from \"../../options/settings\"\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenStorageService {\n constructor() {\n }\n\n setToken(data: any) : void {\n localStorage.removeItem(tokenStore);\n localStorage.setItem(tokenStore, JSON.stringify(data));\n }\n\n getAuthToken() : string | null {\n //return this.cookieService.get(access_token_key);\n let tokens = this.getToken();\n if (tokens == null)\n return null;\n return tokens.accessToken;\n }\n\n getAuthTokenType() : string | null {\n //return this.cookieService.get(access_token_type);\n let tokens = this.getToken();\n if (tokens == null)\n return null;\n return tokens.tokenType;\n }\n\n getToken() : any | null {\n let tokensJson = localStorage.getItem(tokenStore);\n if (tokensJson == null)\n return null;\n\n return JSON.parse(tokensJson);\n }\n\n deleteToken() : void {\n localStorage.removeItem(tokenStore);\n\n }\n}\n\n\n","import { Injectable } from '@angular/core';\nimport {BehaviorSubject, catchError, Observable, throwError} from \"rxjs\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {AllDisplaySystemSetting, DisplaySystemSetting} from \"../../models/home/displaysystemsetting.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DisplaySystemSettingService {\n\n public displaySettings$= new BehaviorSubject([]);\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.displaysystemsetting}`;\n\n constructor(private http: HttpClient) { }\n\n public GetDisplaySettings(): Observable {\n return this.http.get(this.baseUrl + '/GetDisplaySettings');\n }\n\n public GetAllSystemDisplaySettings(): Observable {\n return this.http.get(this.baseUrl + '/GetAllSystemDisplaySettings');\n }\n\n public EditSystemSetting(request: AllDisplaySystemSetting[]): Observable {\n return this.http.post(this.baseUrl + '/EditSystemSetting/', request)\n .pipe(catchError(this.handleError));\n }\n\n public isHidden(field: number): boolean {\n return !this.displaySettings$.value.find((x) => x.type === field);\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n return throwError(error);}\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {DictPhoneType} from \"../../models/profile/dictionaries/dictPhoneType.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictPhoneTypesService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.dictPhoneType}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getAllPhoneTypes(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {DictEmailType} from \"../../models/profile/dictionaries/dictEmailType.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictEmailTypesService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.dictEmailType}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getAllEmailTypes(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {SocialNetworkType} from \"../../models/profile/dictionaries/socialNetworkType.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictSocialNetworkService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.dictSocialNetworkType}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getAllSocialNetworks(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {catchError, Observable, throwError} from \"rxjs\";\nimport {SystemSettingNotification} from \"../../models/home/systemsettingnotification.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SystemSettingNotificationService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.systemsettingnotification}`;\n\n constructor(private http: HttpClient) { }\n\n public GetSystemsSettingContactNotification(): Observable {\n return this.http.get(this.baseUrl + '/GetSystemsSettingContactNotification/');\n }\n\n public EditSystemsSettingContactNotification(request: SystemSettingNotification) {\n return this.http.post(this.baseUrl + '/EditSystemsSettingContactNotification/', request)\n .pipe(catchError(this.handleError));\n }\n\n handleError(error: HttpErrorResponse) {\n return throwError(error);}\n}\n","export const items = [\n {\n text: \"Настройки\",\n icon: \"cog\",\n items: [\n {\n text: \"Настройки отображения полей\",\n path: \"/home/studentcardsettings\"\n }\n ]\n }\n];\n","
\n
\n \n \n \n {{ item.text }}\n \n \n \n \n \n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { items } from 'src/app/models/home/menu-items';\n\n@Component({\n selector: 'home-settings',\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss']\n})\nexport class SettingsComponent implements OnInit {\n //Menu items\n public items = items;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","\n\n
\n \n \n
\n
\n

\n {{studentInfo?.fio ?? \"\"}}\n

\n \n
\n \n

\n Основная информация\n

\n \n \n \n \n \n \n
Номер зачетной книжки{{studentInfo?.studentNumber ?? \"-\"}}
\n
\n \n
\n

Контакты\n \n \n

\n \n
\n \n \n \n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n
\n \n \n
Мобильный телефон\n

{{ phone.phoneNumber }}

\n
\n

{{ getPhoneTypeName(phone.dictPhoneTypeId) }}

\n \n
\n
Городской телефон\n

{{ phone.phoneNumber }}

\n \n
E-mail\n {{ email.email }}\n
\n

{{ getEmailTypeName(email.dictEmailTypeId) }}

\n \n
\n
Соц. сети\n \n {{ socialNetwork.dictSocialNetworkId\n ? getDictSocialNetworkName(socialNetwork.dictSocialNetworkId)\n : getDomainFromUrl(socialNetwork.socialNetwork) }}\n \n \n
\n
\n \n
\n

Информация об обучении

\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Академический статус{{ studentInfo?.academicStateName ?? \"-\" }}
Институт/факультет{{ studentInfo?.facultyName ?? \"-\" }}
Курс{{ studentInfo?.courseNum ?? \"-\" }}
Группа{{ studentInfo?.groupName ?? \"-\" }}
Направление подготовки{{ studentInfo?.educationStandardName ?? \"-\" }}
Форма обучения{{ studentInfo?.studyFormName ?? \"-\" }}
Уровень подготовки{{ studentInfo?.trainingLevelName ?? \"-\" }}
Кафедра{{ studentInfo?.departmentName ?? \"-\" }}
Учебный план{{ studentInfo?.educationPlanName ?? \"-\" }}
Профиль (программа){{ studentInfo?.educationProgramName ?? \"-\" }}
\n
\n
\n \n
\n

Сведения о финансировании

\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Источник финансирования{{ studentInfo?.studentBudgetName ?? \"-\" }}
Целевое обучение{{studentInfo?.targetTrainingName}}
Заказчик целевого обучения{{studentInfo?.targetTrainingCustomer}}
Категория финансирования{{ studentInfo?.budgetCategoryName ?? \"-\" }}
Подкатегория финансирования{{ studentInfo?.budgetSubCategoryName ?? \"-\" }}
Договор на платное обучение{{ studentInfo?.paidContractNum ?? \"-\" }}
\n
\n
\n \n
\n

Прочее

\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Изучаемые языки{{studentInfo?.languages ?? \"-\"}}
Староста{{ studentInfo?.elder ? \"Да\" : \"Нет\" }}
Номер счета{{ studentInfo?.buhCode ?? \"-\" }}
Руководитель педагогической практики{{ studentInfo?.practicePersonName ?? \"-\" }}
Внутренний номер (для тех.поддержки){{ studentInfo?.studentId ?? \"-\" }}
Научный руководитель (куратор){{ studentInfo?.scientificPersonName ?? \"-\" }}
Средний балл (общий){{ studentInfo?.diplomaAverage ?? \"-\" }}
Средний балл по итогам семестра{{ studentInfo?.semesterResult ?? \"-\" }}
Год начала обучения{{ studentInfo?.dateStart | date:'yyyy' ?? \"-\" }}
Год выпуска{{ studentInfo?.dateFinish | date:'yyyy' ?? \"-\" }}
\n
\n
\n \n \n

{{showFilter ? \"Свернуть данные\" : \"Все данные\"}}

\n \n
\n
\n
\n \n \n

\n

\n
\n \n

\n Расписание занятий на сегодня - {{currentDate | date:'dd.MM.YYYY'}} {{\"(\" + dayName + \")\"}}\n

\n
\n
\n
\n \n

10:00 - 11:00

\n

чётная неделя

\n
\n

Психологическое сопровождение пациентов в общей медицинской практике

\n
\n

Преподаватель: Иванов Иван Иванович

\n

Расположение: 403 (III)

\n

Тип занятия: лекция

\n
\n
\n
\n
\n \n

10:00 - 11:00

\n

чётная неделя

\n
\n

Психологическое сопровождение пациентов в общей медицинской практике

\n
\n

Преподаватель: Иванов Иван Иванович

\n

Расположение: 403 (III)

\n

Тип занятия: лекция

\n
\n
\n
\n
\n \n

10:00 - 11:00

\n

чётная неделя

\n
\n

Психологическое сопровождение пациентов в общей медицинской практике

\n
\n

Преподаватель: Иванов Иван Иванович

\n

Расположение: 403 (III)

\n

Тип занятия: лекция

\n
\n
\n
\n

\n Объявления\n

\n
\n
\n

Перевод на дистанционное обучение

\n
\n

Группа 615 переводится на дистанционное обучение с 26 октября и до окончания цикла 6\n ноября.\n так как 25 октября у студентки Залетовой был получен положительный анализ на COVID-19

\n

Курникова Анна Александровна, 20.03.2022

\n
\n
\n
\n

Перевод на дистанционное обучение

\n
\n

Группа 615 переводится на дистанционное обучение с 26 октября и до окончания цикла 6\n ноября.\n так как 25 октября у студентки Залетовой был получен положительный анализ на COVID-19

\n

Курникова Анна Александровна, 20.03.2022

\n
\n
\n
\n

Перевод на дистанционное обучение

\n
\n

Группа 615 переводится на дистанционное обучение с 26 октября и до окончания цикла 6\n ноября.\n так как 25 октября у студентки Залетовой был получен положительный анализ на COVID-19

\n

Курникова Анна Александровна, 20.03.2022

\n
\n
\n
\n
\n \n\n","import {Component, OnInit} from '@angular/core';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\nimport {AlignSettings} from \"@progress/kendo-angular-layout/layouts/models\";\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\nimport {environment} from \"../../../environments/environment\";\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\nimport {TokenStorageService} from \"../../services/token.service\";\nimport {EmailDto, PhonesDto, StudentInfoDto} from \"../../models/home/StudentInfoDto.model\";\nimport {StudentCardDisplaySettingService} from \"../../services/LKStudent/student-card-display-setting.service\";\nimport {DisplaySettingEnum} from \"../../models/home/enums/display-setting.enum\";\nimport {Router} from \"@angular/router\";\nimport {DisplaySystemSettingService} from \"../../services/LKStudent/display-system-setting.service\";\nimport {\n DisplaySystemSettingEnum,\n DisplaySystemSettingEnumList\n} from \"../../models/home/enums/display-system-setting.enum\";\nimport {PhoneType} from \"../../models/enums/phoneTypeEnumList.enum\";\nimport {DictPhoneType} from \"../../models/profile/dictionaries/dictPhoneType.model\";\nimport {DictEmailType} from \"../../models/profile/dictionaries/dictEmailType.model\";\nimport {DictPhoneTypesService} from \"../../services/contacts/phoneTypes.service\";\nimport {DictEmailTypesService} from \"../../services/contacts/emailTypes.service\";\nimport {AllDisplaySystemSetting} from \"../../models/home/displaysystemsetting.model\";\nimport {SocialNetworkType} from \"../../models/profile/dictionaries/socialNetworkType.model\";\nimport {DictSocialNetworkService} from \"../../services/contacts/dictSocialNetwork.service\";\nimport {SystemSettingNotification} from \"../../models/home/systemsettingnotification.model\";\nimport {SystemSettingNotificationService} from \"../../services/LKStudent/system-setting-notification.service\";\n\n@Component({\n selector: 'client-apps-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss'],\n})\nexport class HomeComponent implements OnInit {\n\n public phoneType = PhoneType;\n public phoneTypes: DictPhoneType[] = [];\n public emailTypes: DictEmailType[] = [];\n public socialNetworksTypes: SocialNetworkType[] = [];\n public displaySystemSetting: AllDisplaySystemSetting[] = [];\n public systemSettingContactNotification: SystemSettingNotification = new SystemSettingNotification();\n\n public photoUrl = '';\n public supportEmail = environment.supportEmail;\n public infoMessage = environment.infoMessage;\n public hidden = true;\n public isAdmin = false;\n\n // Изучаемые языки\n public studentInfo?: StudentInfoDto;\n public enum = DisplaySettingEnum;\n public systemEnum = DisplaySystemSettingEnum;\n public arrowButton: {[key: string]: boolean} = {};\n public showFilter = false;\n\n // Выставить true после появления расписания занятий\n public shortInformation = false;\n public align: AlignSettings = {vertical: \"top\"}\n public currentDate = new Date();\n public dayName = \"\";\n\n constructor(\n private studentService: LKStudentService,\n private displaySettingService: StudentCardDisplaySettingService,\n private jwtHelper: JwtHelperService,\n private tokenStore: TokenStorageService,\n private displaySystemSettingService: DisplaySystemSettingService,\n private dictPhoneTypesService: DictPhoneTypesService,\n private dictEmailTypesService: DictEmailTypesService,\n private dictSocialNetworkService: DictSocialNetworkService,\n private systemSettingNotificationService: SystemSettingNotificationService,\n private router: Router,\n ) {\n // Получить текущее название дня недели\n let daysArray = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];\n let day = new Date().getDay();\n this.dayName = daysArray[day]\n }\n\n public gridData = [\n { channel: \"Работников всего\", conversion: 8232, users: 1539 },\n { channel: \"ППС\", conversion: 6574, users: 935 },\n { channel: \"АУП\", conversion: 4932, users: 150 },\n { channel: \"Прочие\", conversion: 1172, users: 454 },\n ];\n public eventsData = [\n { id: 1, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\n { id: 2, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\n { id: 3, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\n { id: 4, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\n ];\n\n public examsData = [\n { id: 1, subject: \"Психологическое сопровождение пациентов в общей медицинской практике\", author: \"Курникова Анна Александровна\",\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\n { id: 2, subject: \"Психология, психопатология и психотерапия зависимостей\", author: \"Курникова Анна Александровна\",\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\n { id: 3, subject: \"Типология личностных расстройств\", author: \"Курникова Анна Александровна\",\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\n ];\n\n // StudPerson\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"-\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n public getCurrentStudent() {\n const token = this.tokenStore.getAuthToken();\n\n this.studentService.getCurrentStudent()\n .subscribe(\n async response => {\n this.students = response;\n\n if (token !== null) {\n const user = this.jwtHelper.decodeToken(token);\n this.studentModel = response.filter(student => student.externalId === user.student_id)[0];\n }\n\n this.photoUrl = `url('${environment.apiEndpoint}studperson/GetStudPersonPhoto/${this.studentModel.studPersonId}')`;\n this.getDisplaySettings();\n this.getDisplaySystemSettings();\n this.getDisplaySystemSetting();\n this.getSystemsSettingContactNotification();\n this.getStudentInfo();\n }\n );\n }\n\n public getStudentInfo() {\n this.studentService.GetStudentInfo()\n .subscribe(\n response => {\n this.studentInfo = response;\n }\n );\n }\n\n public getDisplaySettings() {\n this.displaySettingService.getStudentCardDisplaySettings()\n .subscribe(\n response => {\n this.displaySettingService.displaySettings$.next(response);\n }\n );\n }\n\n public getDisplaySystemSettings() {\n this.displaySystemSettingService.GetDisplaySettings()\n .subscribe(\n response => {\n this.displaySystemSettingService.displaySettings$.next(response);\n }\n );\n }\n\n public getDisplaySystemSetting() {\n this.displaySystemSettingService.GetAllSystemDisplaySettings()\n .subscribe(\n response => {\n this.displaySystemSetting = response;\n }\n );\n }\n\n public getSystemsSettingContactNotification() {\n this.systemSettingNotificationService.GetSystemsSettingContactNotification()\n .subscribe(\n response => {\n this.systemSettingContactNotification = response;\n }\n )\n }\n\n public showUsedFiltersBySetting(): void {\n this.showFilter = !this.showFilter;\n this.arrowButton = {\n 'rotate-arrow-180': this.showFilter,\n 'rotate-arrow-0': !this.showFilter\n };\n }\n\n public isHidden(field: number): boolean {\n let isHidden = false;\n return this.displaySettingService.isHidden(field) || isHidden;\n }\n\n public systemSettingIsHidden(field: number): boolean {\n let isHidden = false;\n return this.displaySystemSettingService.isHidden(field) || isHidden;\n }\n\n phoneFormat(input:any) {\n if(input.startsWith(9)) {\n input = \"+7\" + input;\n }\n if(input.startsWith(8)) {\n input = input.substring(1);\n input = \"+7\" + input;\n }\n if(input!=null)return input.replace(/^\\+?(\\d)(\\d{3})(\\d{3})(\\d{2})(\\d{2})$/, '+$1 ($2) $3-$4-$5');\n }\n\n public getMobilePhones(): PhonesDto[] {\n return this.studentInfo?.phones?.filter(phone => phone.dictPhoneTypeId !== this.phoneType.city)\n .sort((a, b) => Number(b.isMain) - Number(a.isMain)) || [];\n }\n\n public getCityPhones(): PhonesDto[] {\n return this.studentInfo?.phones?.filter(phone => phone.dictPhoneTypeId === this.phoneType.city) || [];\n }\n\n public getStudentEmails(): EmailDto[] {\n return this.studentInfo?.emails?.sort((a, b) => Number(b.isMain) - Number(a.isMain)) || [];\n }\n\n public getPhoneTypeName(phoneTypeId?: string): string {\n return this.phoneTypes?.find(phoneType => phoneType.id === phoneTypeId)?.phoneTypeName.toLowerCase() || '';\n }\n\n public getEmailTypeName(emailTypeId?: string): string {\n return this.emailTypes?.find(emailType => emailType.id === emailTypeId)?.emailTypeName.toLowerCase() || '';\n }\n\n public getDictSocialNetworkName(dictSocialNetworkId?: string): string {\n return this.socialNetworksTypes?.find(socialType => socialType.dictSocialNetworkId === dictSocialNetworkId)?.socialNetworkName || '';\n }\n\n public getDomainFromUrl(socialNetworkUrl: string): string {\n return socialNetworkUrl.replace(/https?:\\/\\//, '').split('/')[0]\n || socialNetworkUrl.replace(/http?:\\/\\//, '').split('/')[0];\n }\n\n public getAllPhoneTypes() {\n this.dictPhoneTypesService.getAllPhoneTypes()\n .subscribe(response => {\n this.phoneTypes = response;\n })\n }\n\n public getAllEmailTypes() {\n this.dictEmailTypesService.getAllEmailTypes()\n .subscribe(response => {\n this.emailTypes = response;\n })\n }\n\n public getAllDictSocialNetworks() {\n this.dictSocialNetworkService.getAllSocialNetworks()\n .subscribe(\n response => {\n this.socialNetworksTypes = response;\n }\n );\n }\n\n public toAddContactPage() {\n this.router.navigate(['/addcontact']).then();\n }\n\n public isCanAddContact(): boolean {\n return this.displaySystemSetting.filter(\n x => x.type === DisplaySystemSettingEnum.email ||\n x.type === DisplaySystemSettingEnum.mobile_phone ||\n x.type === DisplaySystemSettingEnum.city_phone ||\n x.type === DisplaySystemSettingEnum.socialnetwork\n ).some(x => x.isDisplay === true);\n }\n\n public toEditContactPage(contactTypeName: string, contactId: string) {\n this.router.navigate(['/editcontact', contactTypeName, contactId]).then();\n }\n\n public shouldShowEditButton(addedByStudent: boolean, type: DisplaySystemSettingEnumList): boolean {\n if (!this.isCanAddContact())\n return false;\n\n const canEditDeaneryContacts = !this.systemSettingIsHidden(this.systemEnum.student_can_edit_deanery_contacts);\n const canEditCurrentContactType = !this.systemSettingIsHidden(type);\n\n return ((canEditDeaneryContacts || addedByStudent) && canEditCurrentContactType);\n }\n\n ngOnInit(): void {\n this.getCurrentStudent();\n this.adminInitialize();\n this.getAllPhoneTypes();\n this.getAllEmailTypes();\n this.getAllDictSocialNetworks();\n }\n\n private adminInitialize(): void {\n let role = [] as string[];\n const token = this.tokenStore.getAuthToken();\n if(token !== null)\n {\n const user = this.jwtHelper.decodeToken(token);\n if (user.role)\n role = user.role;\n }\n\n if(role.includes('admin'))\n this.isAdmin = true;\n }\n\n protected readonly DisplaySystemSettingEnum = DisplaySystemSettingEnum;\n}\n","export const StatusesListEnum = [\n {id: 0, icon: 'k-i-success'},\n {id: 1, icon: 'k-i-exception'},\n {id: 2, icon: 'k-i-error'},\n {id: 3, icon: 'k-i-minus-outline'},\n]\n\nexport enum AttendedEnum {\n not = 0,\n absence = 1,\n attend = 2\n}\n\nexport enum LessonType {\n Practice,\n Lecture,\n}","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { CurrentControl } from 'src/app/models/progress/currentControl.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CurrentControlService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.CurrentControl}`;\n\n constructor(private http: HttpClient) { }\n\n //Get CurrentControls by student semester\n public getCurrentControlsByStudentSemester(studentSemesterId: number): Observable {\n return this.http.get(this.baseUrl + '/GetCurrentControlsByStudentSemester/' + studentSemesterId)\n .pipe(catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { MiddleControl } from 'src/app/models/progress/middleControl.model';\nimport { StudentMark } from 'src/app/models/progress/studentMark.model';\nimport { StudentSemester } from 'src/app/models/progress/studentSemester.model';\nimport { environment } from 'src/environments/environment';\nimport { LKAverageStudentMarks } from '../../models/profile/lkAverageStudentMarks.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MiddleControlService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.MiddleControl}`;\n\n constructor(private http: HttpClient) { }\n\n //Get MiddleControls by student Id\n public getMiddleControlsByStudentId(studentId: string): Observable {\n return this.http.get(this.baseUrl + '/GetMiddleControls/' + studentId)\n .pipe(catchError(this.handleError));\n }\n\n //Get MiddleControls by student semester\n public getMiddleControlsByStudentSemester(studentId: string, studentSemesterId: number): Observable {\n return this.http.get(this.baseUrl + '/GetMiddleControlsByStudentSemester/' + studentId + '/' + studentSemesterId)\n .pipe(catchError(this.handleError));\n }\n\n public getStudentMarksAverageScore(studentId: string): Observable {\n return this.http.get(this.baseUrl + '/GetStudentMarksAverageScore/' + studentId)\n .pipe(catchError(this.handleError));\n }\n\n //Get StudentMarks by student semester\n public getStudentMarksByStudentSemester(studentSemesterId: number): Observable {\n return this.http.get(this.baseUrl + '/GetStudentMarksByStudentSemester/' + studentSemesterId)\n .pipe(catchError(this.handleError));\n }\n\n //Get MiddleControls by student Id\n public getStudentSemesters(): Observable {\n return this.http.get(this.baseUrl + '/GetStudentSemesters/')\n .pipe(catchError(this.handleError));\n }\n\n //Get MiddleControl by Id\n public getMiddleControlById(id: string): Observable {\n return this.http.get(this.baseUrl + '/GetMiddleControlByID/' + id)\n .pipe(\n catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { DictAttestation } from 'src/app/models/progress/dictAttestation.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictAttestationService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.DictAttestation}`;\n\n constructor(private http: HttpClient) { }\n\n //Get DictAttestation\n public GetDictAttestations(): Observable {\n return this.http.get(this.baseUrl + '/GetDictAttestations/')\n .pipe(catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport {LessonModel, AttendedModel, PhysTrainingMarkModel, PhysSubject} from '../../models/progress/visitLesson.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CurrentControlExtService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.currentcontrolext}`;\n\n constructor(private http: HttpClient) { }\n\n public getDisciplines(semester: number) {\n const data = {semester: semester};\n return this.http.post<{lecture: [], practice: []}>(this.baseUrl + '/LkoQuery', data);\n }\n\n public getLesson(controllingActionExternalId: string | undefined, lessonType: number) {\n const data = {\n controllingActionExternalId: controllingActionExternalId,\n lessonType: lessonType\n }\n return this.http.post(this.baseUrl + '/LkoLessonSelectQuery', data);\n }\n\n public checkAttended(qrId: string) {\n return this.http.get(this.baseUrl + '/MarkItself/' + qrId);\n }\n\n /**\n * Получить все оценки физкультуры по студенту и семестру и дисциплине\n *\n * @param physTrainingId ид физкультуры\n * @returns Физическая подготовка по студенту и семестру и дисциплине\n */\n public getByStudentInSemester(physTrainingId: string): Observable {\n return this.http.get(this.baseUrl + `/GetByStudentInSemester/${physTrainingId}`);\n }\n\n /**\n * Получить все дисциплины физкультуры по студенту и семестру\n *\n * @param semester Номер семестра\n * @returns Физический предмет по студенту и семестру\n */\n public getPhysSubjectByStudentInSemester(semester: number): Observable {\n return this.http.get(this.baseUrl + `/GetPhysSubjectByStudentInSemester/${semester}`);\n }\n\n /**\n * Получить все семестры физкультуры по студенту\n *\n * @returns Семестры по физической подготовке студента\n */\n public getSemestersByPhysTrainingMarkByStudent(): Observable {\n return this.http.get(this.baseUrl + `/GetSemestersByPhysTrainingMarkByStudent`);\n }\n}\n","
\n \n \n \n
\n
\n
\n

Выбрать период

\n
\n
\n \n \n
\n
\n
\n \n
\n

Промежуточный контроль

\n \n \n \n \n {{dataItem.disciplineName + ' (' + dataItem.controlActionName + ')'}}\n \n \n\n \n \n \n \n \n {{dataItem.markView}}\n \n \n \n \n \n \n {{dataItem.ratingScore}}\n \n \n \n \n \n \n {{dataItem.markDate | date:'dd.MM.YYYY':'GMT'}}\n \n \n \n \n \n \n {{dataItem.retakeCount}}\n \n \n \n \n \n \n \n\n \n
\n

Текущий контроль

\n \n \n \n \n \n \n \n {{ dataItem.dictDiscipline }}\n \n \n \n \n \n 0}\">\n {{ dataItem.two }}\n \n \n \n \n \n 0}\">\n {{ dataItem.missing }}\n \n \n \n \n \n \n {{ dataItem.average ? formatNumber(dataItem.average) : '' }}\n \n \n \n \n\n \n \n \n {{ dataItem.subjectName }}\n \n \n \n \n \n {{ dataItem.average ? formatNumber(dataItem.average) : '' }}\n \n \n \n \n
\n
\n\n
\n

Лист текущего контроля по дисциплине \"{{ discipline }}\"

\n \n \n \n \n {{ dataItem.name }}\n \n \n \n \n \n \n {{ dataItem.date | date: \"dd.MM.yyyy\" }}\n \n \n \n \n \n \n +\n нб\n \n \n \n \n Cредний балл\n \n \n \n \n \n \n {{ dataItem.marks.join() }}\n \n \n \n \n {{ average }}\n \n \n \n \n
\n \n
\n
\n\n
\n

Лист текущего контроля по дисциплине \"{{ discipline }}\"

\n \n \n \n \n {{ dataItem.moduleName }}\n \n \n \n \n \n \n {{ dataItem.modulePartName }}\n \n \n \n \n \n \n {{ dataItem.date | date: \"dd.MM.yyyy\" }}\n \n \n \n \n \n \n +\n нб\n \n \n \n \n \n \n {{ dataItem.ball ? formatNumber(dataItem.ball) : '' }}\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {LKStudent} from 'src/app/models/profile/lkstudent.model';\nimport {LKStudPerson} from 'src/app/models/profile/lkStudPerson.model';\nimport {CurrentControl} from 'src/app/models/progress/currentControl.model';\nimport {StudentMark} from 'src/app/models/progress/studentMark.model';\nimport {StudentSemester} from 'src/app/models/progress/studentSemester.model';\nimport {LKStudentService} from 'src/app/services/LKStudent/lkstudent.service';\nimport {CurrentControlService} from 'src/app/services/LKStudyProgress/current-control.service';\nimport {MiddleControlService} from 'src/app/services/LKStudyProgress/middle-control.service';\nimport {DictAttestationService} from 'src/app/services/LKStudyProgress/dict-attestation.service';\nimport {DictAttestation} from 'src/app/models/progress/dictAttestation.model';\nimport {environment} from '../../../environments/environment';\n\nimport {CurrentControlExtService} from '../../services/LKStudyProgress/currentcontrolext.service';\nimport {\n DisciplinesModel,\n PhysSubject,\n PhysTrainingMarkModel,\n StatementLessonsModel,\n} from '../../models/progress/visitLesson.model';\nimport {StatusesListEnum, AttendedEnum, LessonType} from '../../models/enums/currentcontrolext.enum';\n\n@Component({\n selector: 'lkprogress',\n templateUrl: './progress.component.html',\n styleUrls: ['./progress.component.scss'],\n})\nexport class ProgressComponent implements OnInit {\n public lastSemester: number = 0;\n public physTrainingId: string = '';\n public hideCurrentControl: boolean = false;\n public loading: boolean = false;\n public currentControlLoading: boolean = false;\n public lkoStudyProgress = environment.lkoStudyProgress;\n\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date(),\n };\n\n public students: LKStudent[] = [];\n\n public currentControls: CurrentControl[] = [];\n public dictAttestations: DictAttestation[] = [];\n public middleControls: StudentMark[] = [];\n public studentSemesters: StudentSemester[] = [];\n\n public semesterForm: FormGroup = new FormGroup({\n id: new FormControl(),\n externalId: new FormControl(),\n studentId: new FormControl(),\n semestrBegin: new FormControl(),\n semestrEnd: new FormControl(),\n semestrNum: new FormControl(),\n courseNum: new FormControl(),\n });\n\n //Текущий контроль ext\n public disciplines: DisciplinesModel[] = [];\n public disciplinesLoading: boolean = false;\n public isStatementDiscipline: boolean = false;\n public isStatementPhysDiscipline: boolean = false;\n public statementDisciplines: StatementLessonsModel[] = [];\n public statementLoading: boolean = false;\n public physicalSports: PhysSubject[] = [];\n public physTrainingMarks: PhysTrainingMarkModel[] = [];\n public physicalLoading: boolean = false;\n\n public discipline: string = '';\n public attendedEnum = AttendedEnum;\n public average: number = 0;\n public physAverage: number = 0;\n public lessonType: number = 0;\n public lessonTypeEnum = LessonType;\n\n constructor(\n private currentControlService: CurrentControlService,\n private middleControlService: MiddleControlService,\n private studentService: LKStudentService,\n private dictAttestationService: DictAttestationService,\n\n private currentControlExtService: CurrentControlExtService\n ) {\n const pathParts = window.location.pathname.split('/');\n\n if (pathParts[2] === 'Phys') {\n this.isStatementPhysDiscipline = true;\n this.getByStudentInSemester(pathParts[3]);\n this.physTrainingId = pathParts[3];\n } else if (pathParts[2] && +pathParts[3]) {\n this.isStatementDiscipline = true;\n this.lessonType = +pathParts[3];\n this.getLesson(pathParts[2], +pathParts[3]);\n }\n }\n\n ngOnInit(): void {\n this.getDictAttestations();\n this.getCurrentStudent();\n }\n\n //Getting student by login\n private getCurrentStudent() {\n this.studentService.getCurrentStudent().subscribe((response) => {\n this.students = response;\n this.getStudentSemesters();\n });\n }\n\n // Get DictAttestations\n private getDictAttestations() {\n this.dictAttestationService.GetDictAttestations().subscribe((response) => {\n this.dictAttestations = response;\n });\n }\n\n public getMarkValue(dataItem: any) {\n switch (dataItem) {\n case 0:\n return 'Не зачтено';\n case -1:\n return 'Неявка по уважительной причине';\n case -2:\n return 'Неявка по неуважительной причине';\n case -3:\n return 'Не допущен';\n case 6:\n return 'V';\n default:\n return dataItem;\n }\n }\n\n // Получение оценок промежуточного контроля\n private getMiddleControlStudentMarksByStudentSemester(studentSemester: number) {\n this.loading = true;\n this.middleControlService.getStudentMarksByStudentSemester(studentSemester).subscribe(\n (response) => {\n this.middleControls = response;\n this.loading = false;\n },\n (error) => {\n this.loading = false;\n }\n );\n }\n // Получение оценок текущего контроля\n private getCurrentControlsByStudentSemester(studentSemester: number) {\n this.currentControlLoading = true;\n this.currentControlService.getCurrentControlsByStudentSemester(studentSemester).subscribe(\n (response) => {\n this.currentControls = response;\n this.currentControlLoading = false;\n },\n (error) => {\n this.currentControlLoading = false;\n }\n );\n }\n\n public valueChange(value: any): void {\n history.pushState(\n null,\n '',\n `/studyProgress}`\n );\n this.isStatementDiscipline = false;\n this.isStatementPhysDiscipline = false;\n this.getCurrentControlsByStudentSemester(value);\n this.getMiddleControlStudentMarksByStudentSemester(value);\n /*const filtered = this.studentSemesters.filter(item => item.externalId === value);\n if(filtered[0].courseNum >= 3)\n {\n this.hideCurrentControl = true;\n }\n else*/\n {\n this.hideCurrentControl = false;\n }\n\n //currentcontrolext\n this.getMarksCurrentControlExt();\n this.getPhysSubjectByStudentInSemester(this.lastSemester);\n }\n\n public currentControlMarks(dictAttestationId: string, dataItem: any, fieldName: string) {\n // Проверяем совпадает ли Id контрольной недели\n let att = dataItem.attestations.filter((item: any) => item.dictAttestationId == dictAttestationId);\n if (att.length > 0) {\n // Выводим данные в завимости от названия поля\n switch (fieldName) {\n case 'hoursAbsent':\n return att[0].hoursAbsent;\n case 'ball':\n return att[0].ball;\n default:\n return '-';\n }\n }\n\n return '-';\n }\n\n // Get student semesters\n private getStudentSemesters() {\n this.middleControlService.getStudentSemesters().subscribe((response) => {\n this.studentSemesters = response;\n if (response.length !== 0) {\n this.semesterForm.value.id = response[response.length - 1].id;\n this.semesterForm.value.externalId = response[response.length - 1].externalId;\n this.lastSemester = response[response.length - 1].semestrNum;\n\n if (this.lastSemester !== 0) {\n this.getCurrentControlsByStudentSemester(this.lastSemester);\n this.getMiddleControlStudentMarksByStudentSemester(this.lastSemester);\n this.getPhysSubjectByStudentInSemester(this.lastSemester);\n this.getMarksCurrentControlExt();\n }\n }\n });\n }\n\n //Текущий контроль ext\n private getMarksCurrentControlExt() {\n this.disciplines = [];\n this.currentControlExtService.getDisciplines(this.lastSemester).subscribe((response) => {\n if (response.lecture.length > 0) {\n this.disciplines.push({dictDiscipline: 'Лекции', lessonType: 1});\n this.disciplines = this.disciplines.concat(response.lecture);\n }\n if (response.practice.length > 0) {\n this.disciplines.push({dictDiscipline: 'Практики', lessonType: 0});\n this.disciplines = this.disciplines.concat(response.practice);\n }\n });\n }\n\n public getIcon(id: number) {\n return StatusesListEnum.find((el) => el.id == id)?.icon;\n }\n\n public openStatement(dataItem: DisciplinesModel) {\n if (!dataItem.controllingActionId) return;\n\n history.pushState(null, '', `/studyProgress/${dataItem.controllingActionId}/${dataItem.lessonType}`);\n this.isStatementDiscipline = true;\n this.getLesson(dataItem.controllingActionId, dataItem.lessonType);\n this.lessonType = dataItem.lessonType;\n }\n\n public openStatementPhysical(name: string, physTrainingId: string) {\n this.physTrainingId = physTrainingId;\n history.pushState(\n null,\n '',\n `/studyProgress/Phys/${this.physTrainingId}}`\n );\n this.isStatementPhysDiscipline = true;\n this.discipline = name;\n this.getByStudentInSemester(this.physTrainingId);\n }\n\n private getLesson(controllingActionId: string, lessonType: number) {\n this.currentControlExtService.getLesson(controllingActionId, lessonType).subscribe((response) => {\n this.statementDisciplines = response.statementLessons;\n this.discipline = response.discipline;\n this.average = response.average;\n });\n }\n\n public formatNumber(value: number) {\n return Math.round(value * 100) / 100;\n }\n\n public back() {\n this.isStatementDiscipline = false;\n this.isStatementPhysDiscipline = false;\n this.discipline = '';\n history.pushState(null, '', `/studyProgress`);\n }\n\n private getPhysSubjectByStudentInSemester(lastSemester: number) {\n this.currentControlExtService\n .getPhysSubjectByStudentInSemester(lastSemester)\n .subscribe((response) => {\n this.physicalSports = response;\n });\n }\n\n private getByStudentInSemester(physTrainingId: string) {\n this.currentControlExtService\n .getByStudentInSemester(physTrainingId)\n .subscribe((response) => {\n this.physTrainingMarks = response;\n this.physAverage = this.formatNumber(\n this.physTrainingMarks.reduce((a: any, b: any) => (b.ball != null ? a + b.ball : a), 0) /\n this.physTrainingMarks.filter((item) => item.ball != null).length\n );\n });\n }\n}\n","
\n \n \n \n
\n
\n

Выберите неделю:

\n
\n
\n \n \n
\n
\n \n \n \n \n \n {{dataItem.date + \" \" + dataItem.time}}\n \n \n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport { CategoryBaseUnit, LabelRotation, SeriesType } from '@progress/kendo-angular-charts';\n\n@Component({\n selector: 'app-timetable',\n templateUrl: './timetable.component.html',\n styleUrls: ['./timetable.component.scss']\n})\nexport class TimeTableComponent implements OnInit {\n\n constructor() { }\n\n public gridData = [\n { id: 1, subject: \"Психологическое сопровождение пациентов в общей медицинской практике\", time: \"9:00\", date: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n { id: 2, subject: \"Психология, психопатология и психотерапия зависимостей\", time: \"9:00\", date: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n { id: 3, subject: \"Типология личностных расстройств\", date: \"23.01.2022\", time: \"9:00\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\n ];\n\n public coursesData = [\n {id: 1, name: \"1 курс\"},\n {id: 2, name: \"2 курс\"},\n {id: 3, name: \"3 курс\"},\n ]\n\n ngOnInit(): void {\n }\n\n}","import {Component, OnInit} from \"@angular/core\"\nimport {HttpClient} from \"@angular/common/http\";\nimport {ActivatedRoute, Params} from \"@angular/router\";\nimport {environment} from \"../../../environments/environment\";\nimport {TokenStorageService} from \"../../services/token.service\";\nimport {map, filter, first, switchMap} from \"rxjs\";\n\n@Component(\n {\n template: \"\",\n selector: \"callback\"\n }\n)\n\nexport class CallBackComponent implements OnInit {\n invalidLogin?: boolean;\n\n constructor(private tokenStoreService: TokenStorageService, private httpClient: HttpClient, private route: ActivatedRoute) {\n }\n\n ngOnInit() {\n this.route.queryParams\n .pipe(\n map((params) => this.getTokenUrl(params)),\n filter((tokenUrl): tokenUrl is string => tokenUrl !== undefined),\n first(),\n switchMap((tokenUrl) => this.httpClient.get(tokenUrl))\n )\n .subscribe({\n next: (response) => {\n const token = response;\n this.tokenStoreService.setToken(token)\n this.invalidLogin = false\n\n // window.location.href = environment.baseHref;\n const lastUrl = localStorage.getItem('last_url')\n if (lastUrl && lastUrl!='/login') {\n window.location.href = lastUrl;\n localStorage.removeItem('last_url')\n }\n else {\n window.location.href = environment.baseHref;\n }\n },\n error: (err) => {\n console.error(err);\n this.invalidLogin = true;\n },\n });\n }\n\n private getTokenUrl(params: Params) {\n return environment.trustedVersion === '3.0'\n ? this.getTokenUrlTrusted_3_0(params)\n : this.getTokenUrlTrusted_1_5(params);\n }\n\n private getTokenUrlTrusted_3_0(params: Params) {\n const code = params['code'] as string | undefined;\n const state = params['state'] as string | undefined;\n\n const key = 'code_verifier_' + state;\n const codeVerifier = localStorage.getItem(key);\n localStorage.removeItem(key);\n\n if (code == undefined || state == undefined || codeVerifier == null || code.length <= 0) {\n return undefined;\n }\n\n return `${environment.apiEndpoint}auth/gettoken?code=${code}&clientId=${environment.trustedNetClientId}&codeVerifier=${codeVerifier}`;\n }\n\n private getTokenUrlTrusted_1_5(params: Params) {\n const code = params['code'] as string | undefined;\n\n if (code === undefined || code.length <= 0) {\n return undefined;\n }\n\n return `${environment.apiEndpoint}auth/gettoken?code=${code}&clientId=${environment.trustedNetClientId}`;\n }\n}","import {Component, OnInit} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {Location} from '@angular/common';\nimport pkceChallenge from \"pkce-challenge\";\n\n@Component(\n {\n templateUrl: \"loginpage.component.html\",\n styleUrls: [\"loginpage.component.scss\"],\n selector: \"login-page\"\n }\n)\n\nexport class LoginpageComponent implements OnInit{\n\n constructor(private location: Location) {}\n\n async ngOnInit() {\n this.login();\n }\n\n public async login() {\n localStorage.setItem('last_url', this.location.path());\n window.location.href = await this.authUrlGenerate();\n }\n\n private async authUrlGenerate() {\n return environment.trustedVersion === '3.0' ? this.getAuthUrlTrusted_3_0() : this.getAuthUrlTrusted_1_5();\n }\n\n private async getAuthUrlTrusted_3_0() {\n const state = Math.random().toString(36).substring(2, 7);\n const challenge = await pkceChallenge(128);\n\n localStorage.setItem('code_verifier_' + state, challenge.code_verifier);\n\n const GetAuthCodeUrlParams = {\n client_id: environment.trustedNetClientId as string,\n redirect_uri: window.location.origin + '/callback',\n response_type: 'code',\n scope: 'openid profile email',\n code_challenge: challenge.code_challenge,\n code_challenge_method: 'S256',\n prompt: 'consent',\n state: state,\n };\n\n const urlParams = new URLSearchParams(GetAuthCodeUrlParams);\n const url = `${environment.authEndPoint}/api/oidc/auth?${urlParams.toString()}`;\n\n localStorage.setItem('last_url', this.location.path());\n return url;\n }\n\n private async getAuthUrlTrusted_1_5() {\n const baseHref = environment.baseHref !== '/' ? environment.baseHref : '';\n const url =\n `${environment.authEndPoint}/idp/sso/oauth` +\n '?client_id=' +\n environment.trustedNetClientId +\n '&redirect_uri=' +\n encodeURIComponent(`${window.location.protocol}//${window.location.host}${baseHref}/callback`) +\n '&scope=userprofile';\n\n return url;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {CanActivate, Router} from \"@angular/router\";\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport {TokenStorageService} from \"../services/token.service\";\nimport {environment} from '../../environments/environment';\nimport {Location} from '@angular/common';\n\n@Injectable()\nexport class AuthGuard implements CanActivate{\n constructor(private jwtHelper: JwtHelperService, private router: Router, private tokenStore: TokenStorageService, private location: Location,\n ) {\n\n }\n\n canActivate(){\n const token = this.tokenStore.getAuthToken()\n let user;\n let role;\n if (token !== null) {\n user = this.jwtHelper.decodeToken(token);\n role = user.role;\n }\n\n if (token && !this.jwtHelper.isTokenExpired(token) &&\n user.stud_person_id !== undefined){\n return true\n }\n\n if (!token || this.jwtHelper.isTokenExpired(token) || !user.person_id) {\n localStorage.setItem('last_url', this.location.path());\n }\n\n if(role?.includes('admin'))\n return true;\n\n if (user.stud_person_id === undefined) {\n alert(environment.invalidTokenMessage);\n }\n\n localStorage.removeItem('switchStudent');\n\n this.router.navigateByUrl(\"/login\")\n return false;\n }\n}\n","
\n
\n

{{disciplineName}}

\n

{{departmentName}}

\n
\n \n
\n\n

Распределение контрольных акций

\n\n \n \n \n \n {{dataItem}}\n \n \n \n \n \n \n \n \n \n \n\n

Распределение нагрузки (в часах)

\n\n \n \n \n \n {{dataItem.Name}}\n \n \n \n \n \n \n {{intensityCount(dataItem, semester)}}\n \n \n \n \n \n \n {{additionalHours(dataItem.Name, work.Name)}}\n \n \n \n \n \n \n {{totalCount(dataItem)}}\n \n \n {{controlSum}}\n {{contactSum}}\n {{hoursCreditedSum}}\n {{selfWorkSum}}\n \n \n \n \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { keyBy, orderBy } from 'lodash';\nimport { DictQualification } from 'src/app/models/education/DictQualification.model';\nimport { EducationStandard } from 'src/app/models/education/EducationStandard.model';\nimport { LKEducationBudgetTime } from 'src/app/models/education/LKEducationBudgetTime.model';\nimport { LKEducationInternsityData } from 'src/app/models/education/LKEducationIntensityData.model';\nimport {\n LKEducationPlan,\n EducationPlanDiscipline,\n EducationPlanControllingAction,\n EducationPlanSemesters,\n EducationPlanTypeWorks,\n EducationPlanAdditionalWorks\n} from 'src/app/models/education/LKEducationPlan.model';\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\nimport { Department } from 'src/app/models/profile/external/department.model';\nimport { Faculty } from 'src/app/models/profile/external/faculty.model';\nimport { LKEduGroup } from 'src/app/models/profile/lkEduGroup.model';\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\nimport { LKEducationPlanService } from 'src/app/services/LKEducation/LKEducationBUP/lkeducationPlan.service';\nimport { LKStudEduGroupService } from 'src/app/services/LKStudent/lkstud-edu-group.service';\nimport { LKStudPlanService } from 'src/app/services/LKStudent/lkstud-plan.service';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\n\n@Component({\n selector: 'app-education-discipline',\n templateUrl: './education-discipline.component.html',\n styleUrls: ['./education-discipline.component.scss']\n})\nexport class EducationDisciplineComponent implements OnInit {\n\n public rassredPracticeName = 'Распределенная практика';\n public contactWorkName = 'Контактная работа';\n public controlActionsData: string[] = [];\n public totalArr: any[] = [];\n private maxColumnNumber = 0;\n public contactSum = 0;\n public selfWorkSum = 0;\n public controlSum = 0;\n public hoursCreditedSum = 0;\n\n // Название дисциплины\n public disciplineName? = \"-\";\n public departmentName? = \"-\";\n private idNumber = String(this.route.snapshot.paramMap.get('id'));\n\n // StudPerson\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"-\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n public studyForm: DictStudyForm = {\n studyFormName: '',\n studyFormSName: ''\n }\n\n public educationStandard: EducationStandard = {\n cipher: '',\n name: '',\n shortName: '',\n dictStandardTypeId: '',\n dictEducationLevelId: '',\n dictTrainingLevelId: ''\n }\n\n public faculties: Faculty[] = [];\n public faculty: Faculty = {\n name: '-',\n shortName: '-'\n }\n\n public department: Department = {\n name: '-',\n shortName: '-',\n faculty: this.faculty\n }\n\n public dictQualification: DictQualification = {\n qualificationName: '',\n qualificationSName: ''\n }\n\n public studGroupEducationProgram: LKEducationProgram = {\n lkEducationProgramId: 0,\n lkEducationProgramExternalId: '',\n cipher: '',\n name: '',\n shortname: '',\n educationStandardId: '',\n educationStandard: this.educationStandard,\n dictQualificationId: '',\n dictQualification: this.dictQualification,\n departmentId: '',\n graduatingDepartment: this.department,\n faculty: this.faculty\n }\n\n public educationPrograms: LKEducationProgram[] = [];\n public educationProgram: LKEducationProgram = {\n lkEducationProgramId: 0,\n lkEducationProgramExternalId: '',\n cipher: '',\n name: '',\n shortname: '',\n educationStandardId: '',\n educationStandard: this.educationStandard,\n dictQualificationId: '',\n dictQualification: this.dictQualification,\n departmentId: '',\n graduatingDepartment: this.department,\n faculty: this.faculty\n }\n\n public educationPlans: LKEducationPlan[] = [];\n public educationPlan: LKEducationPlan = {\n educationPlanId: 0,\n educationPlanExternalId: \"\",\n jsonData: \"\",\n educationProgramId: '',\n educationProgram: this.educationProgram,\n dictStudyFormId: '',\n dictStudyForm: this.studyForm\n }\n\n public eduGroup?: LKEduGroup = {\n courseNum: 0,\n groupName: \"-\",\n faculty: this.faculty,\n facultyId: \"\"\n }\n\n public studEduGroup?: LKStudEduGroup = {\n studPersonId: '',\n studentId: '',\n fullName: '',\n eduGroupId: '',\n eduGroup: this.eduGroup\n }\n\n public studPlan?: LKStudPlan = {\n studentId: '',\n educationPlan: this.educationPlan,\n department: this.department\n }\n\n //public disciplineData: EducationPlanDiscipline[] = [];\n public controllingActions: EducationPlanControllingAction[] = [];\n public semesters: EducationPlanSemesters[] = [];\n public controlActionUnique: {name: string;}[] = [];\n public semestersUnique: {name: string;}[] = [];\n public typeWorks: EducationPlanTypeWorks[] = [];\n public additionalWorks: EducationPlanAdditionalWorks[] = [];\n public labourHours: any[] = [];\n public controlActionsDistribution: string[] = [];\n activeSemesters: any [] = [];\n\n constructor(private router: Router,\n private educationPlanService: LKEducationPlanService,\n private studPlanService: LKStudPlanService,\n private studEduGroupService: LKStudEduGroupService,\n private studentService: LKStudentService,\n private route: ActivatedRoute)\n { }\n\n ngOnInit(): void {\n this.getCurrentStudent();\n }\n\n returnToEducation() {\n this.router.navigate(['education']);\n }\n\n //Getting student by login\n public getCurrentStudent() {\n this.studentService.getCurrentStudent()\n .subscribe(\n response => {\n this.students = response;\n this.getStudEduGroup();\n this.getStudPlan();\n }\n );\n }\n\n public getStudEduGroup() {\n this.studEduGroupService.getStudEduGroup()\n .subscribe(\n response => {\n this.studEduGroup = response;\n }\n );\n }\n\n additionalHours(workTypeName: string, workAdditionalName: string) {\n let work = this.additionalWorks.filter(x => x.Name == workAdditionalName);\n if(work.length>0)\n {\n if(workTypeName == this.contactWorkName)\n return work[0].TypeWorks\n .filter(x => x.ClassroomWork && x.Calc)\n .reduce((sum, current:EducationPlanTypeWorks) => sum + current.Value, 0);\n\n let typeWork = work[0].TypeWorks.filter(x=>x.Name==workTypeName);\n return typeWork.length > 0 && typeWork[0].Value > 0 ? typeWork[0].Value : null;\n }\n return null;\n }\n\n intensityCount(dataItem: any, semester: any) {\n const name = dataItem.Name;\n let counter = 0;\n let contactWorkHours = 0;\n let selfWorkHours = 0;\n let hoursCredited = 0;\n let controlHours = 0;\n // Вывод контактной работы, самостоятельной работы, перезачтенных часов\n for (var g=0; g < this.controllingActions.length; g++)\n {\n if(this.controllingActions[g].SemesterNumber == semester.number) {\n switch(name) {\n case this.contactWorkName:\n if(this.controllingActions[g].HoursContactWork != undefined)\n {\n contactWorkHours += this.controllingActions[g].HoursContactWork;\n }\n return contactWorkHours > 0 ? contactWorkHours : null;\n case 'Самостоятельная работа':\n if(this.controllingActions[g].HoursSelfWork != undefined)\n {\n selfWorkHours += this.controllingActions[g].HoursSelfWork;\n }\n return selfWorkHours > 0 ? selfWorkHours : null;\n case 'Перезачтенные часы':\n hoursCredited += this.controllingActions[g].HoursCredited;\n return hoursCredited > 0 ? hoursCredited : null;\n case 'Контроль':\n controlHours += this.controllingActions[g].Control;\n return controlHours > 0 ? controlHours : null;\n }\n }\n }\n // Вывод других данных из TypeWorks\n for (var j=0; j < this.activeSemesters.length; j++)\n {\n for (var i=0; i < this.controllingActions.length; i++)\n {\n for(var t=0; t < this.controllingActions[i].TypeWorks.length; t++)\n {\n if(this.controllingActions[i].TypeWorks[t].Name === name && this.controllingActions[i].SemesterNumber == semester.number)\n {\n counter = this.controllingActions[i].TypeWorks[t].Value\n return counter > 0 ? counter : null;\n }\n }\n }\n }\n return null;\n }\n\n getActiveSemesters() {\n const activeSemesters: any = []\n for (var i = 0; i < this.semesters.length; i++) {\n for (var t = 0; t < this.controllingActions.length; t++)\n {\n if (this.controllingActions[t].SemesterNumber === this.semesters[i].Number) {\n activeSemesters.push({\n number: 0 + this.controllingActions[t].SemesterNumber,\n })\n }\n }\n }\n this.activeSemesters = orderBy(activeSemesters, 'name')\n }\n\n findValue(action: EducationPlanControllingAction, workName: any) {\n const icon = '';\n if(workName==this.rassredPracticeName){\n return action.IsDistributed ? icon : \"\";\n }\n if(action.DictControlActionName == workName)\n return icon;\n let work = action.TypeWorks.filter(item => item.Name == workName);\n return (work.length > 0 && work[0].Value > 0) ? work[0].Value : \"\";\n }\n\n totalCount(dataItem: any) {\n let sum = 0;\n for (var i=0; i < this.controllingActions.length; i++)\n {\n for(var t=0; t < this.controllingActions[i].TypeWorks.length; t++)\n {\n if(this.controllingActions[i].TypeWorks[t].Name == dataItem.Name)\n {\n sum += this.controllingActions[i].TypeWorks[t].Value\n }\n }\n }\n //вытащим все доп. работы для расчета, из них вытащим всю контактную работу для расчета\n sum += this.additionalWorks.filter(x => x.Calc).map(x => x.TypeWorks\n .filter(x => x.ClassroomWork && x.Calc)\n .reduce((res, current:EducationPlanTypeWorks) => res + current.Value, 0))\n .reduce((res, current:number) => res + current, 0);\n if (sum == 0) {\n return null\n }\n return sum ;\n }\n\n public getStudPlan() {\n this.studPlanService.getStudPlan()\n .subscribe(\n async response => {\n this.studPlan = response;\n await delay(500);\n\n // Вывод базового учебного плана в таблицу\n const arr = (this.studPlan?.educationPlan?.jsonData != null || this.studPlan?.educationPlan?.jsonData != undefined)\n ? JSON.parse(this.studPlan?.educationPlan?.jsonData)\n : JSON.parse(this.studEduGroup!.eduGroup!.educationPlan!.jsonData);\n\n const disciplines = arr.Disciplines;\n const filtered = disciplines.filter((item: { Id: string; }) => item.Id === this.idNumber);\n // Вывод названия дисциплины\n this.disciplineName = (filtered[0].Cipher != '' ? filtered[0].Cipher + '. ' : '') + filtered[0].DictDisciplineName;\n this.departmentName = filtered[0].DepartmentName;\n this.controllingActions = filtered[0].ControllingActions;\n this.typeWorks = this.controllingActions[0].TypeWorks;\n this.typeWorks = this.controllingActions[0].TypeWorks;\n\n let dictControlWorks = this.typeWorks.filter(item => !item.Calc && !item.ClassroomWork).map(item => item.Name);\n this.controlActionsData = [\n ...new Set(this.controllingActions.map(item => item.DictControlActionName)),\n ...dictControlWorks\n ];\n if(this.controllingActions.filter(item => item.IsDistributed).length > 0)\n this.controlActionsData.push(this.rassredPracticeName);\n\n this.labourHours = [\n { Name: this.contactWorkName, Value: 0 },\n ...this.typeWorks.filter(item => item.ClassroomWork), //детализация аудиторной работы\n { Name: 'Самостоятельная работа', Value: 0 },\n { Name: 'Контроль', Value: 0 }\n ]\n if(this.controllingActions.filter(item => item.HoursCredited > 0).length > 0)\n this.labourHours.splice(this.labourHours.length - 1, 0,\n { Name: 'Перезачтенные часы', Value: 0 }\n );\n\n this.additionalWorks = filtered[0].AdditionalWorks;\n\n // Parse semesters\n this.semesters = arr.Semesters;\n this.semesters.sort((a, b) => { return a.Number - b.Number; });\n\n // Убираем дубликаты\n let controlActionNameArr = [];\n let semesterArr = [];\n for (var t = 0; t < this.controllingActions.length; t++)\n {\n controlActionNameArr.push(this.controllingActions[t].DictControlActionName);\n semesterArr.push(this.controllingActions[t].SemesterNumber)\n }\n let controlActionUniqueChars = [...new Set(controlActionNameArr)];\n let semesterUniqueChars = [...new Set(semesterArr)];\n const controlActionIterator = controlActionUniqueChars.values();\n const semesterIterator = semesterUniqueChars.values();\n for (const controlActionLetter of controlActionIterator) {\n this.controlActionUnique.push({\n name: `${controlActionLetter}`,\n })\n }\n for (const letter of semesterIterator) {\n this.semestersUnique.push({\n name: `${letter}`,\n })\n }\n\n this.getActiveSemesters();\n /////// Вывод итоговой суммы в таблицу ///////////\n for (let g=0; g < this.controllingActions.length; g++) {\n this.controlSum += this.controllingActions[g].Control;\n this.contactSum += this.controllingActions[g].HoursContactWork;\n this.hoursCreditedSum += this.controllingActions[g].HoursCredited;\n this.selfWorkSum += this.controllingActions[g].HoursSelfWork;\n }\n for (let g=0; g < this.additionalWorks.length; g++) {\n if(this.additionalWorks[g].Calc && this.additionalWorks[g].ClassroomWork)\n this.contactSum += this.additionalWorks[g].TypeWorks\n .filter(x => x.ClassroomWork && x.Calc)\n .reduce((sum, current:EducationPlanTypeWorks) => sum + current.Value, 0);\n }\n })\n }\n }\n\n function delay(ms: number) {\n return new Promise( resolve => setTimeout(resolve, ms) );\n }\n","
\n

Перечень компетенций для дисциплины

\n \n
\n
\n \n
\n\n \n \n \n {{disciplineName}}\n \n \n \n \n \n \n {{dataItem.Code}}\n \n \n \n \n \n \n {{dataItem.Description}}\n \n \n \n\n","import { AfterViewChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { DictQualification } from 'src/app/models/education/DictQualification.model';\nimport { EducationStandard } from 'src/app/models/education/EducationStandard.model';\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\nimport { Department } from 'src/app/models/profile/external/department.model';\nimport { Faculty } from 'src/app/models/profile/external/faculty.model';\nimport { LKEduGroup } from 'src/app/models/profile/lkEduGroup.model';\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\nimport { LKStudEduGroupService } from 'src/app/services/LKStudent/lkstud-edu-group.service';\nimport { LKStudPlanService } from 'src/app/services/LKStudent/lkstud-plan.service';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\n\n@Component({\n selector: 'app-competence-matrix',\n templateUrl: './competence-matrix.component.html',\n styleUrls: ['./competence-matrix.component.scss']\n})\nexport class CompetenceMatrixComponent implements OnInit, AfterViewChecked {\n\n // Название дисциплины\n public disciplineName? = \"-\";\n private idNumber = String(this.route.snapshot.paramMap.get('id'));\n public loading = false;\n\n // StudPerson\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studyForm: DictStudyForm = {\n studyFormName: '',\n studyFormSName: ''\n }\n\n public educationStandard: EducationStandard = {\n cipher: '',\n name: '',\n shortName: '',\n dictStandardTypeId: '',\n dictEducationLevelId: '',\n dictTrainingLevelId: ''\n }\n\n public faculty: Faculty = {\n name: '-',\n shortName: '-'\n }\n\n public department: Department = {\n name: '-',\n shortName: '-',\n faculty: this.faculty\n }\n\n public dictQualification: DictQualification = {\n qualificationName: '',\n qualificationSName: ''\n }\n\n public educationProgram: LKEducationProgram = {\n lkEducationProgramId: 0,\n lkEducationProgramExternalId: '',\n cipher: '',\n name: '',\n shortname: '',\n educationStandardId: '',\n educationStandard: this.educationStandard,\n dictQualificationId: '',\n dictQualification: this.dictQualification,\n departmentId: '',\n graduatingDepartment: this.department,\n faculty: this.faculty\n }\n\n public educationPlans: LKEducationPlan[] = [];\n public educationPlan: LKEducationPlan = {\n educationPlanId: 0,\n educationPlanExternalId: \"\",\n jsonData: \"\",\n educationProgramId: '',\n educationProgram: this.educationProgram,\n dictStudyFormId: '',\n dictStudyForm: this.studyForm\n }\n\n public eduGroup?: LKEduGroup = {\n courseNum: 0,\n groupName: \"-\",\n faculty: this.faculty,\n facultyId: \"\"\n }\n\n public studEduGroup?: LKStudEduGroup = {\n studPersonId: '',\n fullName: '',\n studentId: '',\n eduGroupId: '',\n eduGroup: this.eduGroup\n }\n\n public studPlan?: LKStudPlan = {\n studentId: '',\n educationPlan: this.educationPlan,\n department: this.department\n }\n\n public competenceMatrixData: any[] = [];\n\n constructor(private router: Router,\n private studPlanService: LKStudPlanService,\n private studEduGroupService: LKStudEduGroupService,\n private studentService: LKStudentService,\n private route: ActivatedRoute,\n private cdRef: ChangeDetectorRef) { }\n\n ngAfterViewChecked(): void {\n this.cdRef.detectChanges();\n }\n\n ngOnInit(): void {\n this.getCurrentStudent();\n }\n\n returnToEducation() {\n this.router.navigate(['education/3']);\n }\n\n\n //Getting student by login\n private getCurrentStudent() {\n this.studentService.getCurrentStudent()\n .subscribe(\n response => {\n this.students = response;\n this.getStudEduGroup();\n this.getStudPlan();\n }\n );\n }\n\n private getStudEduGroup() {\n this.studEduGroupService.getStudEduGroup()\n .subscribe(\n response => {\n this.studEduGroup = response;\n }\n );\n }\n\n private getStudPlan() {\n this.loading = true;\n this.studPlanService.getStudPlan()\n .subscribe(\n async response => {\n this.studPlan = response;\n await delay(500);\n this.loading = false;\n\n // Вывод базового учебного плана в таблицу\n if (this.studPlan?.educationPlan?.jsonData != null || this.studPlan?.educationPlan?.jsonData != undefined) {\n const arr = JSON.parse(this.studPlan?.educationPlan?.jsonData);\n const disciplines = arr.Disciplines;\n const filtered = disciplines.filter((item: { Id: string; }) => item.Id === this.idNumber);\n\n // Вывод названия дисциплины\n this.disciplineName = filtered[0].DictDisciplineName;\n\n for (var i = 0; i < filtered.length; i++) {\n for (var t = 0; t < filtered[i].DistributionCompetences.length; t++) {\n this.competenceMatrixData.push(filtered[i].DistributionCompetences[t])\n }\n }\n } else if (this.studEduGroup?.eduGroup?.educationPlan?.jsonData != null) {\n const arr = JSON.parse(this.studEduGroup!.eduGroup!.educationPlan!.jsonData);\n //console.log(\"JSON:\", arr);\n const disciplines = arr.Disciplines;\n const filtered = disciplines.filter((item: { Id: string; }) => item.Id === this.idNumber);\n\n // Вывод названия дисциплины\n this.disciplineName = filtered[0].DictDisciplineName;\n\n for (var i = 0; i < filtered.length; i++) {\n for (var t = 0; t < filtered[i].DistributionCompetences.length; t++) {\n this.competenceMatrixData.push(filtered[i].DistributionCompetences[t])\n }\n }\n }\n },\n error => {\n this.loading = false;\n })\n }\n}\n\nfunction delay(ms: number) {\n return new Promise( resolve => setTimeout(resolve, ms) );\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { Show } from '../../models/announcement/show.model';\nimport { PostComment } from '../../models/announcement/post-comment.model';\nimport { environment } from '../../../environments/environment';\nimport { Subject, BehaviorSubject } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n })\n\n export class ShowService {\n //baseUrl = 'https://test-lks-api.uni-systems.ru/announcement';\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n\n constructor(private http: HttpClient) { }\n\n public getShow(Id: number) {\n return this.http.get(this.baseUrl + '/message/' + Id)\n .pipe(\n catchError(this.handleError));\n }\n\n observer = new Subject();\n public subscriber$ = this.observer.asObservable();\n public Badge(badge: number){\n this.observer.next(badge); \n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { Comments } from '../../models/announcement/comments.model';\nimport { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Subject } from 'rxjs';\nimport { environment } from '../../../environments/environment';\n\n@Injectable({\n providedIn: 'root'\n })\n\n export class CommentsService {\n\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n //baseUrl = 'https://test-lks-api.uni-systems.ru/announcement';\n\n\n constructor(private http: HttpClient) { }\n\n public getComments(message_id: number) {\n \n return this.http.get(this.baseUrl + '/message/' + message_id + '/comments' )\n .pipe(\n catchError(this.handleError));\n }\n\n public deleteComments(id: number){\n return this.http.delete(this.baseUrl + '/comments/' + id, {responseType: 'text' as 'text'});\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}","
0\">Комментарии
\n\n
\n
\n
\n {{comment.text}}\n
\n
\n
Удалить
\n
x
\n
\n
\n \n \n \n {{file[\"fileName\"]}}\n \n \n
\n {{comment.fio}}, {{comment.post}} {{comment.date | date:'dd.MM.yyyy HH:mm'}}\n
\n
\n\n","import { Component, Input, OnInit} from '@angular/core';\nimport { Router, ActivatedRoute} from '@angular/router';\nimport { Comments } from 'src/app/models/announcement/comments.model';\nimport { CommentsService } from 'src/app/services/announcement/comments.service';\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { PostComment } from 'src/app/models/announcement/post-comment.model';\nimport { paperclipIcon } from \"@progress/kendo-svg-icons\";\nimport { environment } from 'src/environments/environment';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\n\n@Component({\n selector: 'app-comments',\n templateUrl: './comments.component.html',\n styleUrls: ['./comments.component.scss']\n})\n\n\nexport class CommentsComponent implements OnInit{\n @Input() refreshComments : number = 0;\n @Input() authorId : number = 0;\n\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n\n public comments: Comments[] = [];\n public userId: number = 0;\n public messageId: number = 0;\n\n public post: string = \"\";\n public commentAttachments: [] = [];\n\n public externalId: string = \"\";\n public quantityComments: number = 0;\n \n constructor(\n private activatedroute: ActivatedRoute,\n private commentsService: CommentsService,\n private studentService: LKStudentService,\n private http: HttpClient,\n private router: Router,\n ) { }\n\n public getComments(id: number) {\n this.commentsService.getComments(id)\n .subscribe(response => {\n this.comments = response;\n this.quantityComments = this.comments.length;\n this.messageId = +id;\n });\n }\n\n public getFile(fileid: string, filename: string){\n var url = this.baseUrl + \"/getfile?fileid=\" + fileid + \"&filename=\" + filename;\n this.http.get(url, { responseType: 'blob' })\n .subscribe((response) => {\n let dataType = response.type;\n let binaryData = [];\n binaryData.push(response);\n let downloadLink = document.createElement('a');\n downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, { type: dataType }));\n if (filename) {\n downloadLink.setAttribute('download', filename);\n }\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink)\n });\n }\n\n public deleteComment(comment_id: number){\n this.commentsService.deleteComments(comment_id)\n .subscribe(() => {\n this.getComments(this.activatedroute.snapshot.params['id']);\n }); \n }\n\n public getCurrentPerson(){\n this.studentService.getCurrentStudent()\n .subscribe(response => {\n let data: any = response;\n this.externalId = data[\"0\"].externalId;\n });\n }\n\n ngOnInit() {\n this.getComments(this.activatedroute.snapshot.params['id']);\n\n this.getCurrentPerson();\n } \n\n ngOnChanges(){\n this.getComments(this.activatedroute.snapshot.params['id']);\n }\n}\n","
\n
\n < Вернуться к списку новостей и объявлений\n
\n\n
\n
\n
{{title}}
\n
\n
{{authorFio}}
\n
{{published | date:'dd.MM.yyyy HH:mm'}}
\n \n \n \n
\n \n
\n
\n {{file[\"name\"]}}\n
\n
\n
\n
\n
\n #{{teg[\"title\"]}}\n
\n
\n
\n\n\n
Добавить новый комментарий
\n\n
\n \n
\n \n \n

До 5 файлов формата .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .jpg, .jpeg, .gif, .tif, .bmp, .png, .zip, .txt с ограничением в 5Мб)

\n
\n
\n \n \n {{file['name']}} x\n \n \n
\n
\n
\n \n
\n\n
\n \n
\n \n
\n","import { Component, OnInit, Injectable} from '@angular/core';\nimport { ActivatedRoute} from '@angular/router';\nimport { Show } from 'src/app/models/announcement/show.model';\nimport { ShowService } from 'src/app/services/announcement/show.service';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { PostComment } from 'src/app/models/announcement/post-comment.model';\nimport {Router, RouterLink} from \"@angular/router\";\nimport { CommentsService } from 'src/app/services/announcement/comments.service';\nimport { FileRestrictions, SelectEvent, FileSelectComponent } from \"@progress/kendo-angular-upload\";\nimport { NgTemplateOutlet } from '@angular/common';\nimport { environment } from 'src/environments/environment';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { TokenStorageService } from 'src/app/services/token.service';\nimport { Role } from 'src/app/models/useraccess/role';\nimport { NotificationsService } from \"../../../services/Notifications/notifications.service\";\n\n@Component({\n selector: 'app-show',\n templateUrl: './show.component.html',\n styleUrls: ['./show.component.scss'],\n\n})\n\n@Injectable()\nexport class ShowComponent implements OnInit{\n\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n\n public id: number | undefined;\n public messageId: number = 0;\n\n public show: Show | undefined;\n\n public title: string = \"\";\n public content: string = \"\";\n public authorFio: string = \"\";\n public userId: number = 0;\n public authorId: number = 0;\n public published : Date = new Date();\n public attachments: [] = [];\n public message_type : number = 0;\n public tags: Show[\"tags\"] = [];\n public post: string = \"\";\n public refreshComments: number = 0;\n public refreshBadge: number = 0;\n\n public myRestrictions: FileRestrictions = {\n maxFileSize: environment.announcement.commentMaxFileSize,\n allowedExtensions: [\".pdf\", \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".jpg\", \".jpeg\", \".gif\", \".tif\", \".bmp\", \".png\", \".zip\", \".txt\"],\n };\n\n constructor(\n private activatedroute: ActivatedRoute,\n private showService: ShowService,\n private http: HttpClient,\n private router: Router,\n private commentsService: CommentsService,\n private jwtHelper: JwtHelperService,\n private tokenStore: TokenStorageService,\n private notificationService: NotificationsService,\n ) {\n }\n\n public getShow(id: number) {\n this.showService.getShow(id)\n .subscribe(\n response => {\n this.show = response;\n this.userId = this.show.userId;\n this.authorId = this.show.authorId;\n this.title = this.show.title;\n this.content = this.show.content;\n this.authorFio = this.show.authorFio;\n this.published = this.show.published;\n this.attachments = this.show.attachments;\n this.message_type = this.show.messageType;\n this.tags = this.show.tags;\n this.post = this.show.post;\n this.messageId = +id;\n\n let refreshBadge = 0;\n this.showService.Badge(refreshBadge + 1);\n }\n );\n }\n\n public text_comment: string = \"\";\n public commentAttachments = new Array();\n\n public sendComment(){\n if(this.commentAttachments.length == 0 && this.text_comment.trim() == \"\"){\n this.notificationService.showError(\"Комментарий не должен быть пустым\");\n }\n else{\n var formData = new FormData();\n formData.append('messageId', this.messageId.toString());\n formData.append('text', this.text_comment);\n this.commentAttachments.forEach(element => {\n formData.append('commentAttachments', element);\n });\n\n this.http.post(this.baseUrl + '/student/comment', formData).subscribe(() => {\n this.refreshComments++;\n });\n\n this.text_comment = \"\";\n this.commentAttachments.length = 0;\n }\n }\n\n public selectEventHandler(e: SelectEvent){\n\n for (let i = 0; i < e.files.length; i++){\n if(e.files[i].validationErrors == undefined) this.commentAttachments.push(e.files[i].rawFile)\n else this.notificationService.showError(\"Файл данного формата добавить нельзя\");\n }\n if(this.commentAttachments.length > 5){\n this.notificationService.showError(\"Можно добавить не более 5 файлов\");\n this.commentAttachments.length = 5;\n }\n }\n\n public removeFile(i : number) {\n this.commentAttachments.splice(i, 1);\n return false;\n }\n\n public getFile(fileid: string, filename: string){\n\n var url = this.baseUrl + \"/getfile?fileid=\" + fileid + \"&filename=\" + filename;\n this.http.get(url, { responseType: 'blob' }).subscribe(\n (response) => {\n let dataType = response.type;\n let binaryData = [];\n binaryData.push(response);\n let downloadLink = document.createElement('a');\n downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, { type: dataType }));\n if (filename) {\n downloadLink.setAttribute('download', filename);\n }\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink)\n }\n )\n }\n\n ngOnInit() {\n this.getShow(this.activatedroute.snapshot.params['id']);\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { AlertAnnouncement } from '../../models/announcement/alert.model';\nimport { environment } from '../../../environments/environment';\nimport urlJoin from 'url-join';\n\n@Injectable({\n providedIn: 'root'\n })\n\n export class AlertService {\n // baseUrl = urlJoin(environment.announcementApiEndpoint, environment.apiPaths.announcement.base);\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n\n//baseUrl = 'https://test-lks-api.uni-systems.ru/announcement';\n\n\n constructor(private http: HttpClient) { }\n\n public getSearchMessages(page: number, type: number, status: number, query: string, tag: string, start: string, finish: string): Observable{\n let params = new HttpParams();\n if (page !== undefined){\n params = params.append('page', page);\n }\n if (type !== 2){\n params = params.append('type', type);\n }\n if (status !== 0){\n params = params.append('status', status);\n }\n if (query !== \"\"){\n params = params.append('query', query);\n }\n if (tag !== \"\"){\n params = params.append('tag', tag);\n }\n if ( start !== \"\"){\n params = params.append('start', start);\n }\n if ( start !== \"\"){\n params = params.append('finish', finish);\n }\n return this.http.get(this.baseUrl + '/get', {params});\n }\n\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { AlertStatistics } from '../../models/announcement/alert-statistics.model';\nimport { environment } from '../../../environments/environment';\n\n@Injectable({\n providedIn: 'root'\n })\n\n export class AlertStatisticsService {\n\n baseUrl = environment.announcementApiEndpoint + 'announcement';\n //baseUrl = 'https://test-lks-api.uni-systems.ru/announcement';\n\n\n constructor(private http: HttpClient) { }\n\n public getAlertStatistics() {\n return this.http.get(this.baseUrl + '/statistics' )\n .pipe(\n catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}","
\n
\n
\n Объявления и новости\n
\n
\n\n
\n
Всего объявлений и новостей для меня: {{ total }}
\n
Прочитано: {{ firstParametr }}
\n
Не прочитано: {{ calculatedParametr }}
\n
\n\n
\n \n \n

Поиск новостей и объявлений

\n
\n\n
\n
\n
Тип
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
Статус прочтения
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
Запрос
\n
\n \n \n
\n
\n\n
\n
Тег для поиска
\n
\n \n \n
\n
\n\n
\n
Период публикации
\n
\n
\n \n \n \n -\n \n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
{{ element.title}}
\n
\n
\n \n \n \n
\n
{{ element.authorFio}}
\n
{{ element.published | date:'dd.MM.yyyy HH:mm'}}
\n
\n
\n
\n
\n 1\"\n [total]=\"messageCount\"\n [pageSize]=\"pageSize\"\n [pageSizeValues]=\"pageSizes\"\n [info]=\"info\"\n [skip]=\"skip\"\n (pageChange)=\"onPageChange($event)\"\n >\n \n
\n
\n\n","import { Component, OnInit } from '@angular/core';\nimport {dataIcon} from \"@progress/kendo-svg-icons\";\nimport {Router} from \"@angular/router\";\nimport { AlertAnnouncement } from 'src/app/models/announcement/alert.model';\nimport { AlertService } from 'src/app/services/announcement/alert.service';\nimport { AlertStatistics } from 'src/app/models/announcement/alert-statistics.model';\nimport { AlertStatisticsService } from 'src/app/services/announcement/alert-statistics.service';\nimport { PagerModule, PageChangeEvent, PagerType } from \"@progress/kendo-angular-pager\";\n\n@Component({\n selector: 'app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\n\nexport class AlertComponent implements OnInit{\n public expandedState = false;\n public press: boolean = true;\n public presstatus: boolean = true;\n\n public alerts: AlertAnnouncement[\"messages\"] = [];\n public alert: Array = [];\n public messageCount: number = 0;\n public total: AlertStatistics[\"total\"] = [] ;\n public firstParametr: AlertStatistics[\"firstParametr\"] = [] ;\n public calculatedParametr: AlertStatistics[\"calculatedParametr\"] = [] ;\n\n public skip = 0;\n public pageSize = 10;\n public pageSizes = false;\n public info = false;\n\n constructor(\n private alertService: AlertService,\n private alertStatisticsServise: AlertStatisticsService,\n )\n { }\n\n public getAlertStatistics() {\n this.alertStatisticsServise.getAlertStatistics()\n .subscribe(\n response => {\n this.total = response[\"total\"];\n this.firstParametr = response[\"firstParametr\"];\n this.calculatedParametr = response[\"calculatedParametr\"];\n }\n );\n }\n\n public page: number = 1;\n public type: number = 2;\n public status: number = 0;\n public query: string = \"\";\n public tag: string = \"\";\n public start: Date | undefined;\n public finish: Date | undefined;\n\n public notpress(){\n this.press = false;\n }\n\n public notpresstatus(){\n this.presstatus = false;\n }\n\npublic clearAllFilters(){\n this.page = 1;\n this.skip = 0;\n this.press = true;\n this.presstatus = true;\n this.type = 2;\n this.status = 0;\n this.query = \"\";\n this.tag = \"\";\n this.start = undefined;\n this.finish = undefined;\n this.startdate = \"\";\n this.finishdate = \"\";\n this.findMessage();\n}\n\npublic startdate: string = \"\";\npublic finishdate: string = \"\";\n\npublic findMessage(page?: number){\n if (this.start != undefined ){\n this.startdate = this.start.toISOString();\n }\n if (this.finish != undefined ){\n this.finishdate = this.finish.toISOString();\n }\n if(page != undefined){\n this.page = page;\n }\n this.alertService.getSearchMessages(this.page, this.type, this.status, this.query, this.tag, this.startdate, this.finishdate)\n .subscribe({next:(data:any) => {\n if(data != null){\n this.alerts = data[\"messages\"];\n this.alert = [];\n for (let i = 0; i < this.alerts.length; i++) {\n this.alert.push(this.alerts[i]); \n }\n this.messageCount = data[\"messageCount\"];\n\n for (let element of this.alert){\n let str = \"\";\n if (element.content !== null){\n while (element.content.indexOf('', i1);\n if (i1 !== -1) {\n str = element.content.slice(0, i1) + '[ Фотография ]'+ element.content.slice(i2 + 1);\n element.content = str;\n }\n }\n } \n }\n \n for (let element of this.alert){\n let str = \"\";\n if (element.content !== null){\n while (element.content.indexOf('', i1);\n if (i1 !== -1) {\n str = element.content.slice(0, i1) + '[ Таблица ]' + element.content.slice(i2 + 7);\n element.content = str;\n }\n }\n }\n }\n }\n else{\n this.page = 1;\n this.alert = [];\n this.messageCount = 0;\n }\n this.skip = (this.page -1) * this.pageSize;\n }});\n}\n\npublic onPageChange(e: any): void {\n this.skip = e.skip;\n this.page = (e.skip + this.pageSize) / this.pageSize;\n this.findMessage();\n}\n\nngOnInit() {\n this.getAlertStatistics();\n this.findMessage();\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { SwitchUser } from 'src/app/models/switchuser/switchuser.model';\nimport { environment } from 'src/environments/environment';\nimport { TokenStorageService } from '../token.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SwitchUserService {\n baseUrl = `${environment.apiEndpoint}`;\n\n constructor(private http: HttpClient, private tokenService: TokenStorageService) { }\n\n //Switch student for admins\n public switchStudent(studPersonId: string, studentId: string) {\n return this.http.get(this.baseUrl + 'auth/studentpreview/' + studPersonId + '/' + studentId)\n .pipe(\n catchError(this.handleError));\n }\n\n public switchCurrentStudent(studentId: string) {\n return this.http.get(this.baseUrl + 'auth/switchcurrentstudent/' + studentId)\n .pipe(\n catchError(this.handleError));\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","

Просмотр от другого лица

\n\n\n \n \n

Поиск студента

\n
\n

ФИО

\n \n \n \n {{ dataItem.fullName + \" \"}}\n {{dataItem.facultyName}}, {{dataItem.groupName}}\n \n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { DropDownFilterSettings } from '@progress/kendo-angular-dropdowns';\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\nimport { Location } from '@angular/common'\nimport { LKStudEduGroupService } from 'src/app/services/LKStudent/lkstud-edu-group.service';\nimport { LKStudPlanService } from 'src/app/services/LKStudent/lkstud-plan.service';\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\nimport { SwitchUserService } from 'src/app/services/switchuser/switch-user.service';\nimport { TokenStorageService } from 'src/app/services/token.service';\nimport { Router } from '@angular/router';\nimport { tokenStore } from 'src/options/settings';\n\n@Component({\n selector: 'switchuser',\n templateUrl: './switchuser.component.html',\n styleUrls: ['./switchuser.component.scss']\n})\nexport class SwitchuserComponent implements OnInit {\n\n public currentToken = \"\";\n public students: LKStudent[] = [];\n public formGroup: FormGroup = new FormGroup({\n studentId: new FormControl('', Validators.required),\n });\n public virtual: any = {\n itemHeight: 28,\n };\n\n public studEduGroups: LKStudEduGroup[] = [];\n public studPlans: LKStudPlan[] = [];\n\n constructor(\n private location: Location,\n private studentService: LKStudentService,\n private studEduGroupService: LKStudEduGroupService,\n private studPlanService: LKStudPlanService,\n private switchUserService: SwitchUserService,\n private tokenService: TokenStorageService,\n private router: Router) { }\n\n ngOnInit(): void {\n this.getStudEduGroups();\n this.currentToken = this.tokenService.getToken();\n }\n\n public switchStudent() {\n const filter = this.studEduGroups.filter((x) => x.studentId === this.formGroup.value.studentId);\n const studentId = filter[0].studentId;\n const studPersonId = filter[0].studPersonId;\n this.switchUserService.switchStudent(studPersonId, studentId)\n .subscribe(\n response => {\n localStorage.setItem('currentToken', JSON.stringify(this.currentToken));\n localStorage.setItem('switchStudent', 'true');\n localStorage.removeItem(tokenStore);\n localStorage.setItem(tokenStore, JSON.stringify(response));\n this.router.navigate(['/home/'])\n .then(() => {\n window.location.reload();\n });\n }\n );\n }\n\n public filterSettings: DropDownFilterSettings = {\n caseSensitive: false,\n operator: \"contains\",\n };\n\n // Get stud edugroups\n public getStudEduGroups() {\n this.studEduGroupService.getAllStudEduGroups()\n .subscribe(\n async response => {\n this.studEduGroups = response;\n this.studEduGroups = this.studEduGroups.sort((a, b) => a.fullName.localeCompare(b.fullName));\n }\n );\n }\n\n onCancel(): void {\n this.location.back()\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { Observable } from 'rxjs';\nimport { TokenStorageService } from '../services/token.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdminGuard implements CanActivate {\n constructor(private tokenStore: TokenStorageService,\n private jwtHelper: JwtHelperService) {\n }\n \n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree {\n\n const token = this.tokenStore.getAuthToken();\n if(token !== null)\n {\n const user = this.jwtHelper.decodeToken(token);\n const roles = user?.role;\n if (token && !this.jwtHelper.isTokenExpired(token) && roles?.includes('admin'))\n return true;\n alert('Недостаточно прав для доступа на эту страницу');\n }\n return false;\n }\n \n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-electro-resources',\n templateUrl: './electro-resources.component.html',\n styleUrls: ['./electro-resources.component.scss'],\n providers: []\n})\n\nexport class ElectroResourcesComponent implements OnInit {\n\nconstructor(){}\n\nngOnInit(): void {}\n\n}","
\n

Электронный каталог научно-технической библиотеки НГТУ

\n\n

Издания электронных библиотечных систем (ЭБС):

\n
Индивидуальный авторизованный доступ из сети \"Интернет\", в том числе с мобильных устройств, предварительно необходимо зарегистрировать свой личный кабинет, находясь внутри локальной сети вуза
\n\n

Консультант студента

\n

ИД \"Лань\"

\n

ЭБС \"Лань\"

\n

ЭБС \"Юрайт\" (раздел \"Легендарные книги\")

\n
\n","import {DialogCloseResult, DialogResult, DialogService} from '@progress/kendo-angular-dialog';\nimport {Observable} from \"rxjs\";\nimport {NotificationsService} from \"../services/Notifications/notifications.service\";\n\n/**\n * Открывает диалоговое окно с подтверждением удаления записи\n *\n * @param dialogService - сервис вызова диалогового окна\n * @param deleteTarget - объект, который мы хотим удалить\n * @param width - ширина диалогового окна\n * @param height - высота диалогового окна\n * @param minWidth - минимальная ширина диалогового окна\n */\nexport function openRemoveDialog(dialogService: DialogService, deleteTarget: string, width?: number, height?: number, minWidth?: number) {\n return dialogService.open({\n title: \"Пожалуйста, подтвердите\",\n content: `Вы действительно хотите удалить: ${deleteTarget}?`,\n actions: [ {text:\"Нет\"},{ text: \"Да\", themeColor: \"primary\" }],\n width: width ? width : 450,\n height: height ? height : 200,\n minWidth: minWidth ? minWidth : 250,\n })\n}\n\nexport function openRemoveApprovalDialog(\n dialogService: DialogService,\n deleteTarget: string,\n width?: number,\n height?: number,\n minWidth?: number\n) {\n return dialogService.open({\n title: 'Пожалуйста, подтвердите',\n content: `Вы уверены, что хотите отправить достижение на проверку? После отправки вы не сможете его отредактировать`,\n actions: [{text: 'Нет'}, {text: 'Да', themeColor: 'primary'}],\n width: width ? width : 450,\n height: height ? height : 200,\n minWidth: minWidth ? minWidth : 250,\n });\n}\n\n/**\n * Открывает диалоговое окно с подтверждением действия\n *\n * @param dialogService - сервис вызова диалогового окна\n * @param deleteTarget - объект, который мы хотим удалить\n * @param width - ширина диалогового окна\n * @param height - высота диалогового окна\n * @param minWidth - минимальная ширина диалогового окна\n */\nexport function openDialog(dialogService: DialogService, deleteTarget: string, width?: number, height?: number, minWidth?: number) {\n return dialogService.open({\n title: \"Пожалуйста, подтвердите\",\n content: `${deleteTarget}`,\n actions: [{text: \"Нет\"}, { text: \"Да\", themeColor: \"primary\" }],\n width: width ? width : 450,\n height: height ? height : 200,\n minWidth: minWidth ? minWidth : 250,\n });\n}\n\n/**\n * Выполнение сервиса после подтверждения диалогового окна\n * @param dialogResult - результат выбора в диалоговом окне\n * @param service - сервис на удаление данных\n * @param notificationService - сервис уведомления\n */\nexport function dialogResultHelper(dialogResult: Observable, service: Observable,\n notificationService: NotificationsService) {\n dialogResult.subscribe((result ) => {\n if (result instanceof DialogCloseResult) {}\n else {\n if (result.text == \"Да\") {\n service.subscribe({\n next: () => {\n notificationService.showSuccess('Успешно');\n },\n error: () => notificationService.showError('Произошла ошибка')\n })\n }\n }\n })\n return false;\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {catchError, Observable, throwError} from \"rxjs\";\nimport {Employment} from \"../../models/employment/employment.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmploymentService {\n baseUrl = `${environment.apiEndpoint}${environment.employment.apiPaths.employment}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n\n public getEmployments() : Observable {\n return this.http.get(`${this.baseUrl}`)\n .pipe(catchError(this.handleError));\n }\n\n public getEmploymentById(id: string) : Observable {\n return this.http.get(`${this.baseUrl}/getEmploymentById/${id}`)\n .pipe(catchError(this.handleError));\n }\n\n public addEmployment(data: FormData) : Observable {\n return this.http.post(this.baseUrl, data)\n .pipe(catchError(this.handleError));\n }\n\n public updateEmployment(id: string, data: FormData) : Observable {\n return this.http.put(`${this.baseUrl}/${id}`, data)\n .pipe(catchError(this.handleError));\n }\n\n public deleteEmployment(id: string) : Observable {\n return this.http.delete(`${this.baseUrl}/${id}`)\n .pipe(catchError(this.handleError));\n }\n\n public getEmploymentFile(employmentId: string) {\n return this.http.get(`${this.baseUrl}/downloadfile/${employmentId}`, {responseType: 'blob'})\n .pipe(catchError(this.handleError));\n }\n\n public handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { LKDictOrganization } from 'src/app/models/profile/dictionaries/lkDictOrganization.model';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LKDictOrganizationService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.DictOrganization}`;\n\n constructor(private http: HttpClient) { }\n\n //Get DictOrganizations\n public getDictOrganizations(): Observable {\n return this.http.get(this.baseUrl + '/GetDictOrganizations/')\n .pipe(\n catchError(this.handleError));\n }\n\n\n // Error\n handleError(error: HttpErrorResponse) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // Handle client error\n errorMessage = error.error.message;\n } else {\n // Handle server error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n console.log(errorMessage);\n return throwError(() => {\n errorMessage;\n });\n }\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {DictEmployerPost} from \"../../models/employment/dictEmployerPost.model\";\nimport {Observable} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictEmployerPostService {\n baseUrl = `${environment.apiEndpoint}${environment.employment.apiPaths.dictEmployerPost}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getAllEmployerPosts(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","

Трудовая деятельность

\n\n
\n
\n \n
\n \n \n \n \n {{ nameOrganization(dataItem.dictOrganizationId) }}\n \n \n \n\n \n \n \n {{ nameEmployerPost(dataItem.dictEmployerPostId) }}\n \n \n \n\n \n \n {{ toLocalDatetime(dataItem.dateStart) }}\n \n \n\n \n \n {{ toLocalDatetime(dataItem.dateFinish) }}\n \n \n\n \n \n \n {{ dataItem.isCurrent ? 'Да' : 'Нет' }}\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n\n
\n
\n","import {Component, OnInit, ViewChild} from \"@angular/core\";\nimport {EmploymentService} from \"../../services/employment/employment.service\";\nimport {NotificationsService} from \"../../services/Notifications/notifications.service\";\nimport {Employment} from \"../../models/employment/employment.model\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {LKStudentService} from \"../../services/LKStudent/lkstudent.service\";\nimport {LKStudPerson} from \"../../models/profile/lkStudPerson.model\";\nimport {LKStudent} from \"../../models/profile/lkstudent.model\";\nimport {UntypedFormGroup} from \"@angular/forms\";\nimport {CellClickEvent, GridComponent, RemoveEvent} from \"@progress/kendo-angular-grid\";\nimport {DialogCloseResult, DialogRef, DialogService} from \"@progress/kendo-angular-dialog\";\nimport {LKDictOrganizationService} from \"../../services/LKStudent/dictionaries/lkdict-organization.service\";\nimport {LKDictOrganization} from \"../../models/profile/dictionaries/lkDictOrganization.model\";\nimport {DictEmployerPost} from \"../../models/employment/dictEmployerPost.model\";\nimport {DictEmployerPostService} from \"../../services/employment/dictEmployerPost.service\";\nimport {DateToString} from \"../../helpers/date-helper\";\nimport {saveAs} from \"@progress/kendo-file-saver\";\nimport {openRemoveDialog} from \"../../helpers/dialog-helper\";\n\n@Component({\n selector: 'employment',\n templateUrl: './employment.component.html',\n styleUrls: ['./employment.component.scss']\n})\nexport class EmploymentComponent implements OnInit {\n\n public studPersonId!: string;\n\n public loading = false;\n public editMode = false;\n public skip = 0;\n public formGroup: UntypedFormGroup | undefined;\n public editable?: boolean = true\n\n public employments: Employment[] = [];\n public organizations: LKDictOrganization[] = [];\n public employerPosts: DictEmployerPost[] = [];\n\n @ViewChild(GridComponent) private grid!: GridComponent;\n private editedRowIndex: number | undefined;\n private isLine = false;\n public opened = false;\n\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n async ngOnInit() {\n await this.getStudentByLogin();\n this.getAllOrganizations();\n this.getAllEmployerPosts();\n this.getAllStudentEmployments();\n }\n\n constructor(\n private activateRoute: ActivatedRoute,\n private studentService: LKStudentService,\n private employmentService: EmploymentService,\n private organizationService: LKDictOrganizationService,\n private employerPostService: DictEmployerPostService,\n private notificationService: NotificationsService,\n private dialogService: DialogService,\n private router: Router\n ) { }\n\n public get isInEditingMode(): boolean {\n return this.editedRowIndex !== undefined;\n }\n\n public toLocalDatetime(dt: Date) {\n return dt != undefined ? DateToString(dt,'dd.MM.yyyy') : '-';\n }\n\n public nameOrganization(value: string) {\n return this.organizations.find((x) => x.id === value)?.organizationName ?? \"\";\n }\n\n public nameEmployerPost(value: string) {\n return this.employerPosts.find((x) => x.id === value)?.postName ?? \"\";\n }\n\n private getAllOrganizations() {\n this.organizationService.getDictOrganizations().subscribe({\n next: response => this.organizations = response,\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n private getAllEmployerPosts() {\n this.employerPostService.getAllEmployerPosts().subscribe({\n next: response => this.employerPosts = response,\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n public async getStudentByLogin() {\n await this.studentService.getCurrentStudent().toPromise().then(response => {\n if (!response) return;\n\n this.students = response;\n this.studentModel = this.students[0];\n this.studPersonId = this.studentModel.studPersonId;\n }, reason => {\n this.notificationService.showError('Не удалось загрузить информацию о студенте для просмотра');\n });\n }\n\n public getAllStudentEmployments() : void {\n this.employmentService.getEmployments().subscribe({\n next: response => this.employments = response,\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n public moveToInfo() : void {\n this.router.navigate(['employment/employmentInfo']);\n }\n\n public cancelHandler(): void {\n this.closeEditor(this.grid, this.editedRowIndex);\n }\n\n public editHandler({ dataItem }: CellClickEvent): void {\n this.router.navigate(['employment/employmentInfo' + `/${dataItem.id}`]);\n }\n\n public saveCurrent(): void {\n if (this.formGroup && !this.formGroup.valid) {\n return;\n }\n\n this.isLine = false;\n this.saveRow();\n }\n\n private saveRow(): void {\n if (this.isInEditingMode) {\n //Update dictionary\n if (this.formGroup !== undefined) {\n this.formGroup.value.studPersonId = this.studPersonId;\n this.employmentService.updateEmployment(this.formGroup.value.id, this.formGroup.value)\n .subscribe({\n next:() => {\n this.getAllStudentEmployments();\n this.notificationService.showSuccess(\"Сохранено\");\n },\n error:() => {\n this.notificationService.showError('Не удалось сохранить изменения');\n }}\n );\n }\n }\n this.closeEditor(this.grid);\n }\n\n private closeEditor(grid: GridComponent, rowIndex: number | undefined = this.editedRowIndex): void\n {\n grid.closeRow(rowIndex);\n this.editedRowIndex = undefined;\n this.formGroup = undefined;\n }\n\n public removeHandler({ dataItem }: RemoveEvent): void {\n const dialog: DialogRef = openRemoveDialog(this.dialogService, \"запись о трудовой деятельности\");\n\n dialog.result.subscribe((result) => {\n if (!(result instanceof DialogCloseResult)) {\n this.opened = false;\n if (result.text == \"Да\") {\n this.employmentService.deleteEmployment(dataItem.id)\n .subscribe({\n next: () => {\n this.getAllStudentEmployments();\n this.notificationService.showSuccess(\"Удалено\");\n },\n error: (error) => {\n this.notificationService.showError(error.error);\n }\n }\n );\n }\n }\n });\n }\n\n public downloadFile(id: string) {\n const fileName = this.employments.find((employment: Employment) => employment.scanFile.id == id)?.scanFile.fileFullName;\n if(fileName) {\n this.employmentService.getEmploymentFile(id).subscribe(\n (response: BlobPart) => {\n const blob: any = new Blob([response], { type: `Content-Type', 'application/octet-stream` });\n\n saveAs(blob, fileName);\n }\n );\n }\n }\n}\n","

{{isEditingMode ? 'Редактировать место работы' : 'Добавить место работы'}}

\n\n
\n
\n
\n
\n
\n \n
\n \n \n \n *\n Ошибка: Заполните необходимое поле\n \n
\n
\n\n
\n \n
\n \n \n \n *\n Ошибка: Заполните необходимое поле\n \n
\n
\n\n
\n \n
\n \n \n \n *\n Ошибка: Заполните необходимое поле\n \n
\n
\n\n
\n \n
\n \n \n \n \n
\n
\n\n
\n \n
\n \n \n \n
\n
\n\n
\n \n
\n \n \n \n \n \n *\n Ошибка: Заполните необходимое поле\n \n \n {{ employmentForm?.value?.scanFileFullName }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n","import {Component, OnInit} from \"@angular/core\";\nimport {FormControl, FormGroup, UntypedFormGroup, Validators} from \"@angular/forms\";\nimport {LKDictOrganization} from \"../../../models/profile/dictionaries/lkDictOrganization.model\";\nimport {DictEmployerPost} from \"../../../models/employment/dictEmployerPost.model\";\nimport {FileRestrictions} from \"@progress/kendo-angular-upload\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {EmploymentService} from \"../../../services/employment/employment.service\";\nimport {Employment} from \"../../../models/employment/employment.model\";\nimport {TimeZoneFix} from \"../../../helpers/date-helper\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {LKStudPerson} from \"../../../models/profile/lkStudPerson.model\";\nimport {LKStudent} from \"../../../models/profile/lkstudent.model\";\nimport {LKStudentService} from \"../../../services/LKStudent/lkstudent.service\";\nimport {LKDictOrganizationService} from \"../../../services/LKStudent/dictionaries/lkdict-organization.service\";\nimport {DictEmployerPostService} from \"../../../services/employment/dictEmployerPost.service\";\nimport {DropDownFilterSettings} from \"@progress/kendo-angular-dropdowns\";\nimport {saveAs} from \"@progress/kendo-file-saver\";\n\n@Component({\n selector: 'employment-info',\n templateUrl: './employment-info.component.html',\n styleUrls: ['./employment-info.component.scss']\n})\nexport class EmploymentInfoComponent implements OnInit {\n\n public studPersonId!: string;\n public employmentId: string | null = null;\n public isEditingMode: boolean = false;\n\n public employmentForm: UntypedFormGroup = this.getFormGroup();\n public employment?: Employment = undefined;\n public isCurrent: boolean = false;\n\n public organizations: LKDictOrganization[] = [];\n public employerPosts: DictEmployerPost[] = [];\n\n public files?: Array;\n\n public restrictions: FileRestrictions = {\n allowedExtensions: [\".docx\", \".pdf\"],\n };\n\n public filterSettings: DropDownFilterSettings = {\n caseSensitive: false,\n operator: 'contains',\n };\n\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n async ngOnInit() {\n await this.getStudentByLogin();\n this.getAllOrganizations();\n this.getAllEmployerPosts();\n }\n\n constructor( private router: Router,\n private studentService: LKStudentService,\n private employmentService: EmploymentService,\n private organizationService: LKDictOrganizationService,\n private employerPostService: DictEmployerPostService,\n private notificationService: NotificationsService,\n private route: ActivatedRoute,\n ) { }\n\n public moveToInfo() : void {\n this.router.navigate(['employment']);\n }\n\n public onSave(e: PointerEvent): void {\n if (this.files && this.files.length > 0) {\n this.employmentForm.get('scanFileFullName')?.setValue(this.files[0].name);\n this.employmentForm.get('scanFileFullName')?.updateValueAndValidity();\n }\n\n if (!this.employmentForm.valid) {\n this.employmentForm.markAllAsTouched();\n this.notificationService.showError('Не все обязательные поля заполнены');\n return;\n }\n e.preventDefault();\n this.saveEmployment();\n }\n\n public saveEmployment() {\n this.employmentForm.value.dateStart = TimeZoneFix(this.employmentForm.value.dateStart);\n if (this.employmentForm?.value.dateFinish) {\n this.employmentForm.value.dateFinish = TimeZoneFix(this.employmentForm.value.dateFinish);\n }\n if (this.employmentForm?.value.dateStart &&\n this.employmentForm?.value.dateFinish &&\n this.employmentForm?.value.dateStart > this.employmentForm?.value.dateFinish) {\n this.notificationService.showError(\"Дата трудоустройства должна быть меньше даты увольнения.\");\n } else {\n this.employmentForm.value.studPersonId = this.studPersonId;\n const formData = new FormData();\n formData.append(`StudPersonId`, this.employmentForm?.value.studPersonId)\n formData.append(`DictOrganizationId`, this.employmentForm?.value.dictOrganizationId)\n formData.append(`DictEmployerPostId`, this.employmentForm?.value.dictEmployerPostId)\n formData.append(`DateStart`, this.employmentForm?.value.dateStart?.toISOString())\n formData.append(`IsCurrent`, this.employmentForm?.value.isCurrent)\n if (this.employmentForm?.value.dateFinish) {\n formData.append(`DateFinish`, this.employmentForm?.value.dateFinish?.toISOString())\n }\n if (this.files && this.files.length > 0) {\n formData.append(`ScanFileFullName`, this.files[0].name);\n formData.append(`ScanFile`, this.files[0], this.files[0].name);\n }\n else {\n formData.append(`ScanFileFullName`, this.employmentForm?.value.scanFileFullName);\n }\n\n this.isEditingMode\n ? this.employmentService.updateEmployment(this.employmentId!, formData)\n .subscribe({\n next:() => {\n this.notificationService.showSuccess(\"Сохранено\");\n this.moveToInfo();\n },\n error:() => {\n this.notificationService.showError('Не удалось сохранить изменения');\n }}\n )\n : this.employmentService.addEmployment(formData)\n .subscribe({\n next: () => {\n this.notificationService.showSuccess('Трудовая деятельность была успешно добавлена!');\n this.moveToInfo();\n },\n error: () => {\n this.notificationService.showError('Не удалось добавить трудовую деятельность');\n },\n });\n }\n }\n\n public getParamsFromRoute() {\n this.route.params.subscribe(params => {\n this.employmentId = params['id'] || null;\n\n if (this.employmentId) {\n this.isEditingMode = true;\n this.getEmploymentById(this.employmentId);\n }\n\n });\n }\n\n private getEmploymentById(id: string) {\n this.employmentService.getEmploymentById(id).subscribe({\n next: response => {\n this.employment = response;\n this.employmentForm = this.getFormGroup();\n },\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n public async getStudentByLogin() {\n await this.studentService.getCurrentStudent().toPromise().then(response => {\n if (!response) return;\n\n this.students = response;\n this.studentModel = this.students[0];\n this.studPersonId = this.studentModel.studPersonId;\n }, reason => {\n this.notificationService.showError('Не удалось загрузить информацию о студенте для просмотра');\n });\n\n this.getParamsFromRoute();\n }\n\n private getAllOrganizations() {\n this.organizationService.getDictOrganizations().subscribe({\n next: response => this.organizations = response,\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n public downloadFile(id: string) {\n const fileName = this.employment?.scanFile.fileFullName;\n if(fileName) {\n this.employmentService.getEmploymentFile(id).subscribe(\n (response: BlobPart) => {\n const blob: any = new Blob([response], { type: `Content-Type', 'application/octet-stream` });\n\n saveAs(blob, fileName);\n }\n );\n }\n }\n\n private getAllEmployerPosts() {\n this.employerPostService.getAllEmployerPosts().subscribe({\n next: response => this.employerPosts = response,\n error: err => {\n this.notificationService.showError(err);\n }\n })\n }\n\n private getFormGroup() {\n return new FormGroup({\n employmentId: new FormControl(this.employment?.id ?? null),\n studPersonId: new FormControl(this.studPersonId),\n dictOrganizationId: new FormControl(this.employment?.dictOrganizationId ?? null, Validators.required),\n dictEmployerPostId: new FormControl(this.employment?.dictEmployerPostId ?? null, Validators.required),\n dateStart: new FormControl(this.employment?.dateStart ? new Date(this.employment.dateStart) : null, Validators.required),\n dateFinish: new FormControl(this.employment?.dateFinish ? new Date(this.employment.dateFinish) : null),\n scanFileFullName: new FormControl(this.employment?.scanFile.fileFullName ?? null, Validators.required),\n file: new FormControl(null),\n isCurrent: new FormControl(this.employment?.isCurrent ?? false, Validators.required)\n });\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {CanActivate, Router} from \"@angular/router\";\nimport {TokenStorageService} from \"../services/token.service\";\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\nimport {Location} from \"@angular/common\";\nimport {environment} from \"../../environments/environment\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpecialModuleGuard implements CanActivate {\n\n constructor(private tokenStore: TokenStorageService,\n private jwtHelper: JwtHelperService,\n private location: Location,\n private router: Router) {\n }\n\n canActivate() {\n const token = this.tokenStore.getAuthToken()\n if (token !== null) {\n const user = this.jwtHelper.decodeToken(token);\n\n if ( !environment.services.includes('electroresources'))\n {\n this.router.navigate(['/home']);\n return false;\n }\n\n return true;\n }\n\n localStorage.setItem('last_url', this.location.path())\n return false;\n }\n}\n","enum DisplaySystemSettingCategoryEnum {\n //Личные данные\n contacts = 1,\n portfolio = 2,\n}\n\nexport const DisplaySystemSettingCaregoryEnum = DisplaySystemSettingCategoryEnum\n","export class EmailNotification {\n public externalId!: string;\n public notificationText?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {Observable, throwError} from \"rxjs\";\nimport {DictDisplaySettingCategory} from \"../../models/home/dictdisplaysettingcategory.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DisplaySettingCategoryService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.displaysettingcategory}`;\n\n constructor(private http: HttpClient) { }\n\n public getDisplaySettingCategories(): Observable {\n return this.http.get(this.baseUrl);\n }\n\n // Error\n handleError(error: HttpErrorResponse) {\n return throwError(error);}\n}\n","import { Injectable } from '@angular/core';\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {DictDisplaySettingCategory} from \"../../models/home/dictdisplaysettingcategory.model\";\nimport {DictDisplaySystemSettingCategory} from \"../../models/home/dictdisplaysystemsettingcategory\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DisplaySystemSettingCategoryService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.displaysystemsettingcategory}`;\n\n constructor(private http: HttpClient) { }\n\n public getDisplaySettingCategories(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../../environments/environment\";\nimport {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\nimport {catchError, Observable, throwError} from \"rxjs\";\nimport {EmailNotification} from \"../../../models/home/emailnotification.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmailNotificationService {\n\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.emailnotification}`;\n\n constructor(private http: HttpClient) { }\n\n public GetEmailNotification(): Observable {\n return this.http.get(this.baseUrl + '/GetEmailNotification/');\n }\n\n public EditEmailNotification(request: EmailNotification) {\n return this.http.put(this.baseUrl + '/EditEmailNotification/', request)\n .pipe(catchError(this.handleError));\n }\n\n handleError(error: HttpErrorResponse) {\n return throwError(error);}\n}\n","

Настройки отображения полей

\n\n\n \n \n\n
\n\n
\n

Выбор полей для отображения

\n
\n \n \n
\n
\n\n \n
\n

{{category.name}}

\n
\n \n
\n \n {{item.name}}\n
\n
\n
\n
\n\n \n
\n\n
\n\n
\n\n
\n

{{category.name}}

\n
\n
\n \n
\n
\n

Обучающийся не может добавлять, редактировать и удалять контакты

\n

Текст пометки для студента:

\n \n
\n
\n
\n
\n \n
\n
\n
\n

Обучающийся может добавлять, редактировать и удалять контакты:

\n
\n
\n
\n \n {{item.name}}\n
\n
\n
\n
\n \n
\n \n {{item.name}}\n
\n

\n * Настройка включает возможность смены “основной” электронной почты студента. Основной почтой считается электронная почта, на которую приходят уведомления и письма подтверждения.
\n Добавление основной почты студентом происходит только с подтверждением почты по проверочному коду. Остальные контакты добавляются без проверки.

\n
\n
\n

Текст письма с проверочным кодом:

\n \n

\n * Текст обязательно должен содержать параметр #код\n

\n
\n
\n
\n\n
\n\n
\n

{{category.name}}

\n \n
\n \n {{item.name}}\n
\n

\n * Настройка функции отправки обучающимся достижений на проверку, обработка достижений сотрудником деканата/дирекции,
\n расчет суммы баллов за достижения. Возможность отправить данные для расчета стипендии во внешние системы.\n

\n
\n
\n\n
\n\n\n\n
\n \n \n
\n
\n\n
\n
\n\n
\n\n\n\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from \"@angular/router\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {StudentCardDisplaySettingService} from \"../../../services/LKStudent/student-card-display-setting.service\";\nimport {AllStudentCardDisplaySetting} from \"../../../models/home/studentcarddisplaysetting.model\";\nimport {DictDisplaySettingCategory} from \"../../../models/home/dictdisplaysettingcategory.model\";\nimport {DisplaySettingCategoryService} from \"../../../services/LKStudent/display-setting-category.service\";\nimport {DisplaySystemSettingCategoryService} from \"../../../services/LKStudent/display-system-setting-category.service\";\nimport {DisplaySystemSettingService} from \"../../../services/LKStudent/display-system-setting.service\";\nimport {AllDisplaySystemSetting} from \"../../../models/home/displaysystemsetting.model\";\nimport {DictDisplaySystemSettingCategory} from \"../../../models/home/dictdisplaysystemsettingcategory\";\nimport {DisplaySystemSettingCaregoryEnum} from \"../../../models/home/enums/display-system-setting-category.enum\";\nimport {DisplaySystemSettingEnum} from \"../../../models/home/enums/display-system-setting.enum\";\nimport {SystemSettingNotificationService} from \"../../../services/LKStudent/system-setting-notification.service\";\nimport {SystemSettingNotification} from \"../../../models/home/systemsettingnotification.model\";\nimport {EmailNotification} from \"../../../models/home/emailnotification.model\";\nimport {EmailNotificationService} from \"../../../services/LKStudent/dictionaries/email-notification.service\";\n\n@Component({\n selector: 'app-studentcardsettings',\n templateUrl: './studentcardsettings.component.html',\n styleUrls: ['./studentcardsettings.component.scss']\n})\nexport class StudentcardsettingsComponent implements OnInit {\n\n constructor(private router: Router,\n private displaySettingService: StudentCardDisplaySettingService,\n private displaySettingCategoryService: DisplaySettingCategoryService,\n private notificationService: NotificationsService,\n private displaySystemSettingService: DisplaySystemSettingService,\n private dictDisplaySystemSettingCategory: DisplaySystemSettingCategoryService,\n private systemSettingNotificationService: SystemSettingNotificationService,\n private emailNotificationService: EmailNotificationService,\n )\n { }\n\n ngOnInit(): void {\n this.getDisplaySettings();\n this.getDisplaySettingCategory();\n this.getDisplaySystemSetting();\n this.getDisplaySystemSettingCategory();\n this.getSystemsSettingContactNotification();\n this.getEmailNotification();\n }\n\n public displaySettings: AllStudentCardDisplaySetting[] = [];\n public displayCategory: DictDisplaySettingCategory[] = [];\n public displaySystemSetting: AllDisplaySystemSetting[] = [];\n public displaySystemSettingCategory: DictDisplaySystemSettingCategory[] = [];\n public systemCategoryEnum = DisplaySystemSettingCaregoryEnum;\n public systemSetting = DisplaySystemSettingEnum;\n public systemSettingContactNotification: SystemSettingNotification = new SystemSettingNotification();\n public emailNotification: EmailNotification = new EmailNotification();\n public selected = 0;\n public tabItems = [\n { title: \"Поля для отображения\", },\n { title: \"Настройки системы\", },\n ];\n\n public getDisplaySettings() {\n this.displaySettingService.getAllStudentCardDisplaySettings()\n .subscribe(\n response => { \n this.displaySettings = response;\n }\n );\n }\n\n public getDisplaySettingCategory() {\n this.displaySettingCategoryService.getDisplaySettingCategories()\n .subscribe(\n response => {\n this.displayCategory = response;\n }\n );\n }\n\n public applyHandlerDisplaySetting(){\n this.displaySettingService.editStudentCardDisplaySetting(this.displaySettings)\n .subscribe({\n next:() => {\n this.notificationService.showSuccess(\"Сохранено\");\n },\n error: (error) => {\n this.notificationService.showError(error.error);\n }});\n }\n\n public applyHandlerSystemSetting(){\n this.displaySystemSettingService.EditSystemSetting(this.displaySystemSetting)\n .subscribe({\n error: (error) => {\n this.notificationService.showError(error.error);\n }});\n\n this.systemSettingNotificationService.EditSystemsSettingContactNotification(this.systemSettingContactNotification)\n .subscribe({\n error: (error) => {\n this.notificationService.showError(error.error);\n }});\n\n this.emailNotificationService.EditEmailNotification(this.emailNotification)\n .subscribe({\n next:() => {\n this.notificationService.showSuccess(\"Сохранено\");\n },\n error: (error) => {\n this.notificationService.showError(error.error);\n }});\n }\n\n public closeHandler(){\n this.router.navigateByUrl(`/home`).then();\n };\n\n public getDisplaySystemSetting() {\n this.displaySystemSettingService.GetAllSystemDisplaySettings()\n .subscribe(\n response => {\n this.displaySystemSetting = response;\n }\n );\n }\n\n public getDisplaySystemSettingCategory() {\n this.dictDisplaySystemSettingCategory.getDisplaySettingCategories()\n .subscribe(\n response => {\n this.displaySystemSettingCategory = response;\n }\n )\n }\n\n public getSystemsSettingContactNotification() {\n this.systemSettingNotificationService.GetSystemsSettingContactNotification()\n .subscribe(\n response => {\n this.systemSettingContactNotification = response;\n }\n )\n }\n\n public getEmailNotification() {\n this.emailNotificationService.GetEmailNotification()\n .subscribe(\n response => {\n this.emailNotification = response;\n }\n )\n }\n\n onValueChange(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n const value = inputElement.value;\n\n if (value === 'canNotEdit') {\n this.displaySystemSetting.filter(x => x.category === this.systemCategoryEnum.contacts).forEach(x => x.isDisplay = false);\n } else if (value === 'canEdit') {\n this.displaySystemSetting.filter(x => x.category === this.systemCategoryEnum.contacts).forEach(x => x.isDisplay = true);\n }\n }\n\n isCantEditSelected(): boolean {\n return this.displaySystemSetting.filter(x => x.type !== this.systemSetting.portfolio).every(x => x.isDisplay === false);\n }\n}\n","import {HttpParams} from \"@angular/common/http\";\n\n// Works for GET requests\nexport function CreateQuery(queryModel: any) {\n let query = new HttpParams();\n for (const [key, value] of Object.entries(queryModel)) {\n // Value is array\n if(Array.isArray(value) && value != null && !value.includes('')) {\n query = query.appendAll({[key]: value});\n }\n // Value is object\n else if (value != null && !Array.isArray(value)) {\n query = query.append(key, `${value}`);\n }\n }\n return query;\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {DocumentGet} from '../../models/portfolio/document.model';\nimport {Achievement, AchievementGet} from '../../models/portfolio/achievement.model';\nimport {environment} from '../../../environments/environment';\nimport {CreateQuery} from \"../../helpers/createQuery-helper\";\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PortfolioService {\n documentUrl = `${environment.apiEndpoint}${environment.portfolio.apiPaths.document}`;\n achievementUrl = `${environment.apiEndpoint}${environment.portfolio.apiPaths.achievement}`;\n\n constructor(private http: HttpClient) {}\n\n //#region Documents\n\n /**\n * Документы\n * @param filter Фильтры\n */\n getDocuments(filter: {studentId?: string | null; typeId?: string | null}): Observable {\n const query = CreateQuery(filter);\n\n return this.http.get(this.documentUrl, {params: query});\n }\n\n /**\n * Сохранение документа\n * @param data Информауия о документе\n */\n postDocument(data: FormData): Observable {\n return this.http.post(this.documentUrl, data);\n }\n\n /**\n * Обновление документа\n * @param data Информауия о документе\n */\n putDocument(data: FormData): Observable {\n return this.http.put(this.documentUrl, data);\n }\n\n /**\n * Удаление документа\n * @param id ID документа\n */\n deleteDocument(id: string): Observable {\n return this.http.delete(`${this.documentUrl}/${id}`);\n }\n\n //Download file\n downloadDocumentFile(id: string) {\n return this.http.get(`${this.documentUrl}/File/${id}`, {responseType: 'blob'});\n }\n\n //#endregion\n\n //#region Achievements\n\n /**\n * Документы\n * @param filter Фильтры\n */\n getSimpleAchievements(filter: {\n studentId?: string | null;\n directionActivityId?: string | null;\n }): Observable {\n const query = CreateQuery(filter);\n\n return this.http.get(this.achievementUrl, {\n params: query,\n });\n }\n\n getAdvancedAchievements(filter: { studentId?: string | null; directionActivityId?: string | null }): Observable {\n const query = CreateQuery(filter);\n\n return this.http.get(this.achievementUrl, { params: query });\n }\n\n /**\n * Сохранение достижения\n * @param data Информауия о документе\n */\n postAchievement(data: FormData): Observable {\n return this.http.post(this.achievementUrl, data);\n }\n\n /**\n * Обновление достижения\n * @param data Информауия о достижении\n */\n putAchievement(data: FormData): Observable {\n return this.http.put(this.achievementUrl, data);\n }\n\n /**\n * Удаление достижения\n * @param id ID документа\n */\n deleteAchievement(id: string): Observable {\n return this.http.delete(`${this.achievementUrl}/${id}`);\n }\n\n downloadAchievementFile(id: string) {\n return this.http.get(`${this.achievementUrl}/File/${id}`, {responseType: 'blob'});\n }\n\n //#endregion\n\n //#region status\n\n //Сохранение достижения\n postStatus(status: any): Observable {\n return this.http.post(this.achievementUrl + '/AddStatus', status);\n }\n\n //#endregion\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {\n DictAchievementStatus,\n DictDirectionActivity,\n DictDocumentType,\n WorkType\n} from '../../models/portfolio/dict.model';\nimport {environment} from '../../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DictService {\n baseUrl = `${environment.apiEndpoint}${environment.portfolio.apiPaths.portfolioDict}`;\n\n constructor(private http: HttpClient) {}\n\n getDirectionActivities(): Observable {\n return this.http.get(`${this.baseUrl}/DirectionActivity`);\n }\n\n getDocumentTypes(): Observable {\n return this.http.get(`${this.baseUrl}/DocumentType`);\n }\n\n getStatuses(): Observable {\n return this.http.get(this.baseUrl + '/DictAchievementStatus');\n }\n\n getTypes(): Observable {\n return this.http.get(this.baseUrl + '/WorkType');\n }\n}\n","
Достижения
\n
\n \n Добавить\n \n\n
\n Нет загруженных достижений\n
\n 0\"\n [data]=\"achievements\"\n [loading]=\"loading\"\n >\n \n
\n
\n \n
\n
\n \n

\n {{ displayDirectionActivityName(dataItem.directionActivityId) }}\n

\n \n \n \n {{ dataItem.name }}\n \n \n \n \n \n {{\n dataItem?.updateAt == null\n ? ''\n : (dataItem.updateAt | date: 'dd.MM.yy HH:mm')\n }}\n \n \n \n \n \n
\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n
\n

Название деятельности

\n \n \n
\n Ошибка: Заполните необходимое поле\n
\n \n
\n

\n Название работы/мероприятия/достижения\n

\n \n
\n Ошибка: Заполните необходимое поле\n
\n \n
\n

Сканированная копия

\n
\n \n \n \n \n \n \n

{{file.name}}

\n
\n
\n
\n
\n \n

\n {{ maxFilePdfMessage }}\n

\n
\n \n \n Сохранить\n \n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {saveAs} from '@progress/kendo-file-saver';\nimport {FileRestrictions} from '@progress/kendo-angular-upload';\nimport {FormControl, FormGroup, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\nimport {DialogCloseResult, DialogRef, DialogService} from '@progress/kendo-angular-dialog';\nimport {environment} from '../../../../environments/environment';\nimport {AchievementList} from '../../../models/portfolio/achievement.model';\nimport {DictDirectionActivity} from '../../../models/portfolio/dict.model';\nimport {EditEvent, RemoveEvent} from '@progress/kendo-angular-grid';\nimport {Guid} from 'guid-typescript';\nimport {PortfolioService} from \"../../../services/LKPortfolio/portfolio.service\";\nimport {DictService} from \"../../../services/LKPortfolio/dict.service\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {getErrorMessage} from \"../../../helpers/errorHandle-helper\";\nimport {LKStudentService} from \"../../../services/LKStudent/lkstudent.service\";\nimport {LKStudPerson} from \"../../../models/profile/lkStudPerson.model\";\nimport {LKStudent} from \"../../../models/profile/lkstudent.model\";\nimport {openRemoveDialog} from \"../../../helpers/dialog-helper\";\n\n@Component({\n selector: 'app-simple-achievements',\n templateUrl: './simple-achievements.component.html',\n styleUrls: ['./simple-achievements.component.scss'],\n})\nexport class SimpleAchievementsComponent implements OnInit {\n\n //#region VAR\n\n public loading = false;\n public editMode = false;\n public achievementStatusReturned = false;\n\n //#region File\n\n public restrictions: FileRestrictions = {\n minFileSize: 10,\n maxFileSize: environment.portfolio.maxFileSize,\n allowedExtensions: ['.pdf'],\n };\n public maxFileSizeMessage = `Размер файла должен быть не более ${Math.round(\n environment.portfolio.maxFileSize / 1024 / 1024\n )} МБ`;\n public maxFilePdfMessage = `* Загрузите скан.копию (.pdf файл не более ${Math.round(\n environment.portfolio.maxFileSize / 1024 / 1024\n )} мб) для добавления нового достижения`;\n public fileUploaded = false;\n public fileUploadedList: {id: string; name: string}[] = [];\n public fileUploads?: Array;\n\n //#endregion\n\n public achievements: {\n directionActivityId: string;\n data: AchievementList[];\n }[] = [];\n public directionActivities: DictDirectionActivity[] = [];\n public directionActivitiesByFilter: DictDirectionActivity[] = [];\n\n public editForm: UntypedFormGroup = new UntypedFormGroup({\n id: new UntypedFormControl(),\n name: new UntypedFormControl(),\n directionActivityId: new UntypedFormControl(),\n });\n\n // StudPerson\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"-\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n //#endregion\n\n constructor(\n private studentService: LKStudentService,\n private portfolioService: PortfolioService,\n private dictService: DictService,\n private activateRoute: ActivatedRoute,\n private notificationService: NotificationsService,\n private dialogService: DialogService,\n ) { }\n\n //#region Lifecycle methods\n\n async ngOnInit() {\n await this.getCurrentStudent();\n }\n\n public async getCurrentStudent() {\n this.studentService.getStudent()\n .subscribe(\n async response => {\n this.studentModel = response;\n this.getDirectionActivities();\n this.getAchievements();\n }\n );\n }\n\n public getAchievements() {\n this.loading = true;\n this.portfolioService.getSimpleAchievements({studentId: this.studentModel.externalId}).subscribe({\n next: (response) => {\n this.achievements = [];\n\n if (response == null || response.length == 0) return;\n\n for (let i = 0; i < response.length; i++) {\n let achievement = this.achievements.find(\n (_) => _.directionActivityId == response[i].directionActivityId\n );\n\n if (achievement == null) {\n achievement = {\n directionActivityId: response[i].directionActivityId,\n data: [],\n };\n this.achievements.push(achievement);\n }\n\n achievement.data = response[i].achievementList;\n }\n },\n error: (err) => {\n this.notificationService.showError(getErrorMessage(err));\n },\n complete: () => (this.loading = false),\n });\n }\n\n public getDirectionActivities() {\n this.dictService.getDirectionActivities().subscribe((response) => {\n this.directionActivities = response;\n this.getDirectionActivitiesByFilter();\n }\n );\n }\n\n public getDirectionActivitiesByFilter() {\n this.directionActivitiesByFilter = this.directionActivities.filter((x: DictDirectionActivity) => x.filialId == this.studentModel.filialId);\n }\n\n //#endregion\n\n //#region AchievementListView\n\n //#region Display\n\n public displayDirectionActivityName(id: string): string {\n const directionActivity = this.directionActivities.find((_) => _.id == id);\n\n return directionActivity?.name ?? '';\n }\n\n //#endregion\n\n //#region Handlers\n\n public removeAchievement({dataItem}: RemoveEvent): void {\n\n const dialog: DialogRef = openRemoveDialog(this.dialogService, `${dataItem.name}`);\n\n dialog.result.subscribe((result) => {\n if (!(result instanceof DialogCloseResult) && result.text == 'Да') {\n this.portfolioService.deleteAchievement(dataItem.id).subscribe({\n next: () => {\n this.notificationService.showSuccess('Успешно');\n this.getAchievements();\n },\n error: (err) => this.notificationService.showError(getErrorMessage(err)),\n });\n }\n });\n }\n\n public editAchievement({dataItem}: EditEvent): void {\n\n this.editMode = true;\n this.resetForm();\n\n this.editForm = new FormGroup({\n id: new FormControl(dataItem.id),\n name: new FormControl(dataItem.name),\n directionActivityId: new FormControl(dataItem.directionActivityId),\n });\n\n this.fileUploadedList = dataItem.files;\n this.fileUploaded = dataItem.files?.length > 0;\n }\n\n //#endregion\n\n //#endregion\n\n //#region Download\n\n public downloadFile(file: {id: string; name: string}) {\n this.portfolioService.downloadAchievementFile(file.id).subscribe({\n next: (response) => {\n const blob = new Blob([response], {\n type: `application/pdf; charset=utf-8`,\n });\n\n saveAs(blob, file.name);\n },\n error: (err) =>\n this.notificationService.showError(err.status == 404 ? 'Файл не найден' : getErrorMessage(err)),\n });\n }\n\n //#endregion\n\n //#region EditForm\n\n public addAchievement() {\n\n this.editMode = true;\n this.resetForm();\n }\n\n public closeEditForm() {\n this.editMode = false;\n this.resetForm();\n }\n\n public saveAchievement() {\n\n const formData = new FormData();\n\n if (this.editForm.value.id) formData.append(`Id`, this.editForm.value.id);\n formData.append(`Name`, this.editForm.value.name);\n formData.append(`StudentId`, this.studentModel.externalId);\n formData.append(`DirectionActivityId`, this.editForm.value.directionActivityId);\n formData.append(`InReturnedStatus`, this.achievementStatusReturned.toString());\n\n this.fileUploads?.forEach((_) => {\n formData.append(`Files`, _, _.name);\n });\n\n this.editForm.value.id\n ? this.portfolioService.putAchievement(formData).subscribe({\n next: () => {\n this.getAchievements();\n this.closeEditForm();\n this.notificationService.showSuccess('Обновлено');\n },\n error: () => this.notificationService.showError('Не удалось обновить достижение'),\n })\n : this.portfolioService.postAchievement(formData).subscribe({\n next: () => {\n this.getAchievements();\n this.closeEditForm();\n this.notificationService.showSuccess('Сохранено');\n },\n error: () => this.notificationService.showError('Не удалось сохранить изменения'),\n });\n\n //this.editMode = false;\n //this.resetForm();\n }\n\n public resetForm() {\n this.fileUploaded = false;\n this.fileUploadedList = [];\n this.fileUploads = [];\n this.editForm.reset();\n }\n\n //#region File\n\n public fileSelected() {\n this.fileUploaded = true;\n }\n\n public fileRemoved() {\n this.fileUploaded = false;\n }\n\n //#endregion\n}\n","export interface DictDirectionActivity {\n id: string;\n name: string;\n filialId?: string;\n}\n\nexport interface DictDocumentType {\n id: string;\n name: string;\n order: number | null;\n}\n\nexport interface DictAchievementStatus{\n id: string;\n name: string;\n color: string;\n order: number | null;\n statusEnum: number;\n}\n\nenum AchievementStatusEnumList {\n approved = 1,\n rejected,\n returned_for_revision,\n added,\n sended,\n corrected,\n}\n\nexport var AchievementStatusEnum: any = AchievementStatusEnumList\n\nexport interface WorkType{\n id: string;\n parentId?: string;\n name: string;\n mark: number;\n order: number | null;\n directionActivityId: string;\n}\n\n\nexport interface WorkTypeTree {\n id: string;\n name: string;\n mark: number;\n items?: WorkTypeTree[];\n}","enum DictAchievementStatusEnumList {\n approved = 1,\n rejected,\n returned_for_revision,\n added,\n sended ,\n corrected\n}\n\nexport const DictAchievementStatusEnum = DictAchievementStatusEnumList\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { DatePickerComponent } from '@progress/kendo-angular-dateinputs';\n\n@Directive({\n selector: 'kendo-datepicker[openOnFocus]'\n})\nexport class OpenOnFocusDateDirective {\n\n @Input() openOnFocus!: DatePickerComponent;\n\n @HostListener('focus') onFocus() {\n this.openOnFocus.toggle(true);\n }\n\n @HostListener('blur') onBlur() {\n this.openOnFocus.toggle(false);\n }\n}\n","
Портфолио
\n
\n
\n
{{activity.name}}
\n \n
0; else noAchievements\">\n
\n
\n

Подача заявлений обучающимися: \n {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.receiptionStartDate) }} - {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.receiptionEndDate)}}\n

\n

Утверждение портфолио в деканате (дирекции): \n {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.checkingStartDate) }} - {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.checkingEndDate)}}\n

\n

Период действия нового рейтинга: \n {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.pretendentStartDate) }} - {{ getDate(getAchievementsByActivityId(activity.id)[0].achievementPeriod.pretendentEndDate)}}\n

\n
\n
\n

Общий балл (балл в рейтинг ПГАС)

\n
\n
\n
{{totalMark.mark}}
\n
\n
\n
\n
\n
\n {{getAchievementsByActivityId(activity.id)[0].hideAchievements ? \"Отобразить истекшие\" : \"Скрыть истекшие\"}}\n
\n \n \n \n

{{dataItem.dictAchievementStatusName}}

\n
\n
\n \n \n

{{dataItem.name}}

\n
\n
\n \n \n

{{dataItem.dictWorkTypeName}}

\n
\n
\n \n \n

{{dataItem.mark}}

\n
\n
\n \n \n \n

{{dataItem.dateStart | date:'dd.MM.yyyy'}}

\n
\n
\n \n \n

{{dataItem.dateEnd | date:'dd.MM.yyyy'}}

\n
\n
\n
\n \n \n

{{dataItem.comment}}

\n
\n
\n \n \n \n \n \n
\n
\n \n

В данной категории нет добавленных достижений

\n
\n
\n
\n\n\n
\n
\n
Редактирование работы
\n \n
\n

Статус

\n \n \n
\n
\n\n \n
\n

Направление деятельности

\n \n \n
\n
\n\n \n
\n

Название работы/мероприятия/достижения

\n \n *\n
\n Ошибка: Заполните необходимое поле\n
\n\n \n
\n

Тип работы

\n \n \n
\n
\n\n \n
\n

Балл

\n \n \n
\n
\n\n \n
\n

Коэффициент

\n
\n \n \n *\n
\n
\n Ошибка: Заполните необходимое поле\n
\n\n \n
\n

Балл с учетом коэффициента

\n \n \n
\n
\n\n \n
\n

Действует с

\n \n \n *\n
\n Ошибка: Заполните необходимое поле\n
\n\n \n
\n

Действует до

\n \n \n *\n
\n Ошибка: Заполните необходимое поле\n
\n\n \n
\n

Примечание

\n \n \n
\n
\n\n \n
\n

Сканированная копия

\n
\n \n \n \n \n \n \n

{{file.name}}

\n
\n
\n
\n
\n

\n {{ maxFilePdfMessage }}\n

\n
\n
\n \n \n \n \n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { FileRestrictions } from \"@progress/kendo-angular-upload\";\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { DialogCloseResult, DialogRef, DialogService } from '@progress/kendo-angular-dialog';\nimport { CellClickEvent } from '@progress/kendo-angular-grid';\nimport {AchievementStatusEnum, DictAchievementStatus, DictDirectionActivity, WorkType, WorkTypeTree} from '../../../models/portfolio/dict.model';\nimport { Achievement, AchievementFile, AchievementList } from '../../../models/portfolio/achievement.model';\nimport { environment } from \"../../../../environments/environment\";\nimport { deepCopy } from '@angular-devkit/core/src/utils/object';\nimport {Guid} from \"guid-typescript\";\nimport {Observable, of} from \"rxjs\";\nimport {PortfolioService} from \"../../../services/LKPortfolio/portfolio.service\";\nimport {DictService} from \"../../../services/LKPortfolio/dict.service\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {DateFromUTCAsLocal, DateToString, monthWord, TimeZoneFix} from '../../../helpers/date-helper';\nimport {getErrorMessage} from \"../../../helpers/errorHandle-helper\";\nimport {LKStudentService} from \"../../../services/LKStudent/lkstudent.service\";\nimport {LKStudPerson} from \"../../../models/profile/lkStudPerson.model\";\nimport {LKStudent} from \"../../../models/profile/lkstudent.model\";\nimport {DictAchievementStatusEnum} from \"../../../models/portfolio/enums/dict-achievement-status-enum\";\nimport {openRemoveApprovalDialog, openRemoveDialog} from \"../../../helpers/dialog-helper\";\n\n@Component({\n selector: 'app-advanced-achievements',\n templateUrl: './advanced-achievements.component.html',\n styleUrls: ['./advanced-achievements.component.scss']\n})\nexport class AdvancedAchievementsComponent implements OnInit {\n\n //#region VAR\n\n public editable = false;\n public achievementStatusReturned = false;\n public loading = false;\n public editMode = false;\n public edited = false;\n public achievements: Achievement[] = [];\n public filteredAchievements: any[] = [];\n public directionActivities: DictDirectionActivity[] = [];\n public directionActivitiesByFilter: DictDirectionActivity[] = [];\n public statuses: DictAchievementStatus[] = [];\n public types: WorkType[] = [];\n public typesByFilter: WorkType[] = [];\n public workTypesTree: WorkTypeTree[] = [];\n public selectedWorkTypesTree?: WorkTypeTree;\n public achievementStatusEnum = AchievementStatusEnum;\n public mark = 0;\n public markWithCoefficient = 0;\n public coefficient = 1;\n public invalidFileExtensionText = 'Недопустимый формат файла. Используйте только .pdf файлы';\n public statusEnum = DictAchievementStatusEnum;\n\n //#region File\n\n public restrictions: FileRestrictions = {\n minFileSize: 10,\n maxFileSize: environment.portfolio.maxFileSize,\n allowedExtensions: [\".pdf\"],\n };\n public maxFileSizeMessage = `Размер файла должен быть не более ${Math.round(environment.portfolio.maxFileSize/1024/1024)} МБ`;\n public maxFilePdfMessage = `* Загрузите скан.копию (.pdf файл не более ${Math.round(environment.portfolio.maxFileSize / 1024 / 1024)} мб) для добавления нового достижения`;\n public fileUploaded = false;\n public fileUploadedList: AchievementFile[] = [];\n public fileUploads?: Array;\n\n //#endregion\n\n public editForm: UntypedFormGroup = new UntypedFormGroup({\n id: new UntypedFormControl(),\n name: new UntypedFormControl(),\n dictWorkTypeId: new UntypedFormControl(),\n coefficient: new UntypedFormControl(1),\n dateEnd: new UntypedFormControl(),\n dateStart: new UntypedFormControl(),\n markWithCoefficient: new UntypedFormControl(),\n mark: new UntypedFormControl(),\n comment: new UntypedFormControl(),\n dictAchievementStatusName: new UntypedFormControl(),\n dictAchievementStatusId: new UntypedFormControl(),\n directionActivityId: new UntypedFormControl(),\n files: new UntypedFormControl(),\n });\n\n // StudPerson\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"-\",\n studPersonId: \"\",\n studPerson: this.studPerson,\n filialId: \"\"\n }\n\n //#endregion\n\n constructor(private portfolioService: PortfolioService,\n private studentService: LKStudentService,\n private dictService: DictService,\n private activateRoute: ActivatedRoute,\n private notificationService: NotificationsService,\n private dialogService: DialogService\n )\n { }\n\n //#region Lifecycle methods\n\n ngOnInit(): void {\n this.getCurrentStudent();\n }\n\n public async getCurrentStudent() {\n this.studentService.getStudent()\n .subscribe(\n async response => {\n this.studentModel = response;\n\n this.getDirectionActivities();\n this.getAchievements();\n this.getWorkTypes();\n this.getStatuses();\n }\n );\n }\n\n //#endregion\n\n //#region Data\n\n public getAchievements() {\n this.loading = true;\n this.portfolioService.getAdvancedAchievements({ studentId: this.studentModel.externalId }).subscribe({\n next: response => {\n this.achievements = response?.map((item: Achievement) => {\n item.hideAchievements = item.achievementList.filter((achievement: AchievementList) =>\n achievement.dateEnd && achievement.dateEnd < item.achievementPeriod.pretendentStartDate)?.length > 0 ? false : undefined;\n item.achievementList.map((listItem: AchievementList) => {\n listItem.hide = listItem.dateEnd != undefined && listItem.dateEnd <= item.achievementPeriod.pretendentStartDate;\n listItem.dateEnd = DateFromUTCAsLocal(listItem.dateEnd);\n listItem.dateStart = DateFromUTCAsLocal(listItem.dateStart);\n return listItem;\n });\n return item;\n });\n this.filteredAchievements = this.achievements;\n },\n error: err => {\n this.notificationService.showError(getErrorMessage(err));\n },\n complete: () => this.loading = false\n });\n }\n\n public getDirectionActivities() {\n this.dictService.getDirectionActivities().subscribe(\n response => {\n this.directionActivities = response;\n this.getDirectionActivitiesByFilter();\n }\n );\n }\n\n public getStatuses() {\n this.dictService.getStatuses().subscribe(\n response => {\n this.statuses = response;\n })\n }\n\n public getWorkTypes() {\n this.dictService.getTypes().subscribe(\n response => {\n this.types = response ?? [];\n })\n }\n\n public getDirectionActivitiesByFilter() {\n this.directionActivitiesByFilter = this.directionActivities.filter((x: DictDirectionActivity) => x.filialId == this.studentModel.filialId);\n }\n\n public getWorkTypesByFilter(directionActivityId: string) {\n this.typesByFilter = this.types.filter((item: WorkType) => item.directionActivityId == directionActivityId);\n this.workTypesTree = this.processFlatData();\n }\n\n //#endregion\n\n //#region Handlers\n\n public deleteAchievement(): void {\n const dialog: DialogRef = openRemoveDialog(this.dialogService, `${this.editForm.value.name}`);\n dialog.result.subscribe((result ) => {\n if (result instanceof DialogCloseResult) {}\n else {\n if (result.text == \"Да\") {\n this.portfolioService.deleteAchievement(this.editForm.value.id).subscribe({\n next: () => {\n this.notificationService.showSuccess('Успешно')\n this.getAchievements();\n this.closeEditForm();\n },\n error: err => this.notificationService.showError(getErrorMessage(err))\n })\n }\n }\n });\n }\n //#endregion\n\n //#region Download\n\n public downloadFile(file: { id: string, name: string }) {\n this.portfolioService.downloadAchievementFile(file.id).subscribe({\n next: response => {\n const blob:any = new Blob([response], { type: `application/pdf; charset=utf-8` });\n\n saveAs(blob, file.name);\n },\n error: err => this.notificationService.showError(err.status == 404 ? 'Файл не найден' : getErrorMessage(err))\n });\n }\n\n //#endregion\n\n //#region EditForm\n\n public addAchievement(activityId: string) {\n\n this.editMode = true;\n this.getDirectionActivitiesByFilter();\n this.getWorkTypesByFilter(this.editForm.value.directionActivityId);\n this.resetForm();\n this.editForm.reset();\n this.editForm.get('directionActivityId')?.setValue(activityId);\n this.editForm.get('dateStart')?.setValue(new Date());\n this.getWorkTypesByFilter(activityId);\n this.CheckRightsForEditing();\n }\n\n public showDeleteButton(){\n if (this.editForm.value.dictAchievementStatusName == undefined){\n return false;\n }\n let statusName = this.editForm.value.dictAchievementStatusName.split(\" \")[0];\n if (statusName == \"Добавлено\")\n return true;\n return false;\n }\n\n getAchievementsByActivityId(activityId: string): any {\n if (this.filteredAchievements != undefined) {\n return this.filteredAchievements.filter(achievement => achievement.directionActivityId === activityId);\n }\n return [];\n }\n\n public closeEditForm() {\n this.editMode = false;\n this.resetForm();\n }\n\n public formChanged()\n {\n this.edited = true;\n }\n\n public saveReturnedAchievement() {\n if (!this.fileUploaded || !this.editForm.valid) {\n this.notificationService.showError('Заполните обязательные поля');\n return;\n }\n\n const formData = new FormData();\n\n if (this.editForm.value.id) formData.append(`Id`, this.editForm.value.id);\n formData.append(`Name`, this.editForm.value.name);\n formData.append(`StudentId`, this.studentModel.externalId);\n formData.append(`DirectionActivityId`, this.editForm.value.directionActivityId);\n formData.append(`DictWorkTypeId`, this.editForm.value.dictWorkTypeId ?? '');\n formData.append(`Coefficient`, this.editForm.value.coefficient);\n formData.append(`DateStart`, TimeZoneFix(this.editForm.value.dateStart).toISOString());\n formData.append(`DateEnd`, TimeZoneFix(this.editForm.value.dateEnd).toISOString());\n formData.append(`Comment`, this.editForm.value.comment ?? '');\n formData.append(`InReturnedStatus`, this.achievementStatusReturned.toString());\n\n this.fileUploads?.forEach((_) => {\n formData.append(`Files`, _, _.name);\n });\n\n const dialog: DialogRef = openRemoveApprovalDialog(this.dialogService, `${this.editForm.value.name}`);\n dialog.result.subscribe((result ) => {\n if (result instanceof DialogCloseResult) {}\n else {\n if (result.text == \"Да\") {\n this.portfolioService.putAchievement(formData).subscribe({\n next: () => {\n this.getAchievements();\n this.closeEditForm();\n this.notificationService.showSuccess(\"Обновлено\");\n },\n error: () => this.notificationService.showError('Не удалось обновить достижение')\n })\n }\n }\n });\n }\n\n public saveAchievement() {\n\n if (!this.fileUploaded || !this.editForm.valid) {\n this.notificationService.showError('Заполните обязательные поля');\n return;\n }\n\n const formData = new FormData();\n\n if (this.editForm.value.id) formData.append(`Id`, this.editForm.value.id);\n formData.append(`Name`, this.editForm.value.name);\n formData.append(`StudentId`, this.studentModel.externalId);\n formData.append(`DirectionActivityId`, this.editForm.value.directionActivityId);\n formData.append(`DictWorkTypeId`, this.editForm.value.dictWorkTypeId ?? '');\n formData.append(`Coefficient`, this.editForm.value.coefficient);\n formData.append(`DateStart`, TimeZoneFix(this.editForm.value.dateStart).toISOString());\n formData.append(`DateEnd`, TimeZoneFix(this.editForm.value.dateEnd).toISOString());\n formData.append(`Comment`, this.editForm.value.comment ?? '');\n formData.append(`InReturnedStatus`, false.toString());\n\n this.fileUploads?.forEach((_) => {\n formData.append(`Files`, _, _.name);\n });\n\n this.editForm.value.id\n ? this.portfolioService.putAchievement(formData).subscribe({\n next: () => {\n this.getAchievements();\n this.closeEditForm();\n this.notificationService.showSuccess(\"Обновлено\");\n },\n error: () => this.notificationService.showError('Не удалось обновить достижение')\n })\n : this.portfolioService.postAchievement(formData).subscribe({\n next:() => {\n this.getAchievements();\n this.closeEditForm();\n this.notificationService.showSuccess(\"Сохранено\");\n },\n error:() => this.notificationService.showError('Не удалось сохранить изменения')\n });\n }\n\n public changeStatus(statusEnum: number) {\n if(this.edited) {\n this.notificationService.showError('Необходимо сохранить изменения!');\n } else {\n const status = {\n dictAchievementStatusId: this.statuses.find((item:any) => item.statusEnum===statusEnum)?.id,\n achievementId: this.editForm.get('id')?.value,\n achievementStatusDate: null,\n isMigrationData: false\n };\n this.portfolioService.postStatus(status).subscribe({\n next: () => {\n this.getAchievements();\n this.closeEditForm()\n this.notificationService.showSuccess(\"Статус изменен\");\n },\n error: () => this.notificationService.showError('Не удалось изменить статус')\n })\n }\n }\n\n public resetForm() {\n this.edited = false;\n this.fileUploaded = false;\n this.fileUploadedList = [];\n this.fileUploads = [];\n this.editForm.reset();\n }\n\n //#region File\n\n public fileSelected() {\n this.edited = true;\n this.fileUploaded = true;\n this.fileUploadedList = [];\n }\n\n public fileRemoved() {\n this.edited = true;\n this.fileUploaded = false;\n }\n\n //#endregion\n\n public children = (dataItem: any): Observable => {\n return of(dataItem.items)\n };\n public hasChildren = (dataItem: any) : boolean => {\n return !!dataItem.items;\n }\n\n public valueChangeDirectionActivity(value: string) {\n this.edited = true;\n this.getWorkTypesByFilter(value);\n }\n\n public valueChangeType(value: string) {\n this.edited = true;\n this.mark = this.typesByFilter.find((el: WorkType) => el.id == value)?.mark || 0;\n this.calculateMark();\n }\n\n public onChangeCoefficient(): void {\n this.calculateMark()\n this.edited = true;\n }\n\n public achievement = {\n dateEnd: new Date(),\n dateStart: new Date(),\n dictAchievementStatusName: \"\",\n coefficient: 1,\n mark: 0,\n };\n\n public viewHandler({dataItem}: CellClickEvent): void {\n if (dataItem.files && dataItem.files.length) {\n this.fileUploaded = true;\n this.fileUploadedList = dataItem.files;\n }\n this.getDirectionActivitiesByFilter();\n this.getWorkTypesByFilter(dataItem.directionActivityId);\n this.editMode = true;\n this.achievement = JSON.parse(JSON.stringify(dataItem));\n if (dataItem.dictAchievementStatusName) {\n const date = dataItem.dictAchievementStatusDate ? `(${DateToString(dataItem.dictAchievementStatusDate, 'dd.MM.yyyy HH:mm')})`: '';\n this.achievement.dictAchievementStatusName = `${dataItem.dictAchievementStatusName} ${date}`;\n }\n this.achievement.dateEnd = new Date(dataItem.dateEnd);\n this.achievement.dateStart = new Date(dataItem.dateStart);\n this.coefficient = this.achievement.coefficient;\n this.mark = this.achievement.mark;\n this.calculateMark();\n this.editForm.reset(this.achievement);\n this.selectedWorkTypesTree = this.findWorkTypeTreeById(this.editForm.value.dictWorkTypeId);\n this.CheckRightsForEditing();\n this.CheckForAchievementReturnedStatus();\n }\n\n private findWorkTypeTreeById(id: string, tree: WorkTypeTree[] = this.workTypesTree): WorkTypeTree | undefined {\n for (const node of tree) {\n if (node.id === id) {\n return node;\n }\n if (node.items) {\n const found = this.findWorkTypeTreeById(id, node.items);\n if (found) {\n return found;\n }\n }\n }\n return undefined;\n }\n\n private CheckRightsForEditing() {\n this.editable = false;\n if (this.editForm.value.dictAchievementStatusName == undefined)\n this.editable = true;\n\n let neededAchievementStatusForEditing = this.statuses.filter(_ => _.id == this.editForm.value.dictAchievementStatusId)[0];\n\n if (neededAchievementStatusForEditing?.statusEnum == this.statusEnum.added || neededAchievementStatusForEditing?.statusEnum == this.statusEnum.returned_for_revision)\n this.editable = true;\n }\n\n private CheckForAchievementReturnedStatus() {\n this.achievementStatusReturned = false;\n let currentAchievement = this.statuses.filter(_ => _.id == this.editForm.value.dictAchievementStatusId)[0];\n\n if (currentAchievement.statusEnum == this.statusEnum.returned_for_revision)\n this.achievementStatusReturned = true;\n }\n\n private processFlatData(id: string | null = null): WorkTypeTree[] {\n const tree: WorkTypeTree[] = [];\n this.typesByFilter.filter(item => item.parentId === id)\n .forEach(child => {\n const data: WorkTypeTree = {\n id: child.id,\n name: child.name,\n mark: child.mark,\n };\n if (this.typesByFilter.find(item => item.parentId === child.id)) {\n data.items = this.processFlatData(data.id);\n }\n\n if (id || data.items?.length) {\n tree.push(data);\n }\n });\n return tree;\n }\n\n public calculateMark() {\n this.markWithCoefficient = Math.round(this.mark * this.coefficient * 100) / 100;\n }\n\n public cancelEdit() {\n this.editForm.reset();\n this.editMode = false;\n }\n\n public hidePast(directionActivityId: any, hideAchievements: boolean) {\n this.achievements.map((item: Achievement) => {\n if (item.directionActivityId == directionActivityId)\n item.hideAchievements = !hideAchievements;\n return item;\n });\n this.filteredAchievements = deepCopy(this.achievements);\n this.filteredAchievements = this.filteredAchievements.map((item: Achievement) => {\n if (item.hideAchievements)\n item.achievementList = item.achievementList.filter((listItem: AchievementList) => !listItem.hide) ?? [];\n return item;\n });\n }\n\n public getDate(value: string) {\n const date = new Date(value);\n return date.getUTCDate() + \" \" + monthWord(date.getMonth()) + \" \" + date.getUTCFullYear();\n }\n}\n","\n\n","import {Component, OnInit} from '@angular/core';\nimport {lastValueFrom} from \"rxjs\";\nimport {DisplaySystemSettingService} from \"../../../services/LKStudent/display-system-setting.service\";\nimport {DisplaySystemSettingEnum} from \"../../../models/home/enums/display-system-setting.enum\";\n\n@Component({\n selector: 'app-achievements-home',\n templateUrl: './achievements-home.component.html',\n styleUrls: ['./achievements-home.component.scss'],\n})\nexport class AchievementsHomeComponent implements OnInit {\n\n public systemSetting = DisplaySystemSettingEnum;\n protected isSimple = false;\n public enum = DisplaySystemSettingEnum;\n\n constructor(private displaySystemSettingService: DisplaySystemSettingService) {}\n\n async ngOnInit() {\n await this.getAchievementsSetting();\n }\n\n private async getAchievementsSetting() {\n await lastValueFrom(this.displaySystemSettingService.GetAllSystemDisplaySettings()).then((value) => {\n this.displaySystemSettingService.displaySettings$.next(value);\n });\n }\n\n public isAdvancedVersion(field: number): boolean {\n let portfolioSetting = this.displaySystemSettingService.displaySettings$.value.find((x) => x.type === field);\n if (portfolioSetting != undefined) {\n return portfolioSetting.isDisplay;\n }\n return false;\n }\n}\n","enum ContactTypeEnumList {\n mobilePhone = 1,\n email = 2,\n social = 3,\n cityPhone = 4,\n}\n\nexport const ContactTypeEnum = ContactTypeEnumList;\n","export enum ApplicationStatusesEnum {\n Draft = 1,\n Sent,\n InProgress,\n Revision = 5,\n Rejected,\n Withdrawn,\n Ready,\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {Email} from \"../../models/profile/contacts/emails.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EmailService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.email}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getById(studPersonId: string, emailId: string): Observable {\n return this.http.get(this.baseUrl + `/${studPersonId}/${emailId}`);\n }\n\n public addEmail(email: Email): Observable {\n return this.http.post(this.baseUrl, email);\n }\n\n public updateEmail(emailId: string, email: Email): Observable {\n return this.http.put(this.baseUrl + `/${emailId}`, email);\n }\n\n public deleteEmail(studPersonId: string, emailId: string) {\n return this.http.delete(this.baseUrl + `/${studPersonId}/${emailId}`);\n }\n\n public sendActivateCode(email: string) {\n return this.http.post(this.baseUrl + `/sendActivateCode/`, { toEmail: email });\n }\n\n public checkActivationCode(email: string, code: string) {\n return this.http.post(this.baseUrl + `/checkCode/`, { email: email, code: code });\n }\n}\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {Phone} from \"../../models/profile/contacts/phones.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PhoneService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.phone}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getPhoneById(studPersonId: string, id: string): Observable {\n return this.http.get(`${this.baseUrl}/${studPersonId}/${id}`);\n }\n\n public updatePhone(id: string, phone: Phone): Observable {\n return this.http.put(`${this.baseUrl}/${id}`, phone);\n }\n\n public addPhone(phone: Phone): Observable {\n return this.http.post(`${this.baseUrl}`, phone);\n }\n\n public deletePhone(studPersonId: string, phoneId: string) {\n return this.http.delete(`${this.baseUrl}/${studPersonId}/${phoneId}`);\n }\n}\n\n","import {EventEmitter, Injectable, Output} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {SocialNetwork} from \"../../models/profile/contacts/socialnetworks.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SocialNetworkService {\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.socialNetwork}`;\n\n constructor(private http: HttpClient) { }\n\n progress?: number;\n message?: string;\n @Output() public onUploadFinished = new EventEmitter();\n\n public getSocialNetworkById(studPersonId: string, id: string): Observable {\n return this.http.get(`${this.baseUrl}/${studPersonId}/${id}`);\n }\n\n public addSocialNetwork(socialNetwork: SocialNetwork): Observable {\n return this.http.post(`${this.baseUrl}`, socialNetwork);\n }\n\n public updateSocialNetwork(socialNetworkId: string, socialNetwork: SocialNetwork): Observable {\n return this.http.put(`${this.baseUrl}/${socialNetworkId}`, socialNetwork);\n }\n\n public deleteSocialNetwork(studPersonId: string, socialId: string) {\n return this.http.delete(`${this.baseUrl}/${studPersonId}/${socialId}`);\n }\n}\n\n","

{{isEditingMode ? 'Редактировать контакт' : 'Добавить новый контакт'}}

\n\n
\n
\n
\n \n
\n
\n \n \n *\n
\n
\n
\n\n \n
\n
\n \n
\n \n \n \n *\n \n
\n
\n\n
\n \n
\n \n \n *\n \n \n Ошибка: Некорректный формат e-mail.\n \n
\n
\n\n
\n \n
\n \n \n \n \n

\n Мы отправили письмо с кодом на введенную электронную почту. Введите код подтверждения в поле ниже и нажмите кнопку “Подтвердить”.\n

\n

\n Почта подтверждена\n

\n
\n \n \n
\n\n
\n \n
\n
\n \n \n \n \n \n
\n \n
\n
\n\n
\n\n
\n\n
\n \n
\n \n \n \n *\n \n
\n
\n\n
\n \n
\n \n
\n \n *\n
\n Ошибка: Некорректный формат ссылки на соц. сеть.\n
\n
\n
\n\n
\n\n
\n\n
\n \n
\n \n \n \n *\n \n
\n
\n\n
\n \n
\n \n \n *\n \n \n Ошибка: Некорректный формат номера телефона.\n \n
\n
\n\n
\n \n
\n \n \n \n
\n
\n\n
\n\n
\n\n
\n \n
\n \n \n *\n \n \n Ошибка: Некорректный формат номера телефона.\n \n
\n
\n\n
\n\n
\n \n \n \n
\n\n
\n
\n","import {Component, OnInit} from \"@angular/core\";\nimport {EmailService} from \"../../../services/contacts/email.service\";\nimport {PhoneService} from \"../../../services/contacts/phone.service\";\nimport {DictPhoneTypesService} from \"../../../services/contacts/phoneTypes.service\";\nimport {DictEmailTypesService} from \"../../../services/contacts/emailTypes.service\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {DictPhoneType} from \"../../../models/profile/dictionaries/dictPhoneType.model\";\nimport {DictEmailType} from \"../../../models/profile/dictionaries/dictEmailType.model\";\nimport {FormControl, FormGroup, Validators} from \"@angular/forms\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {ContactTypeEnum} from \"../../../models/profile/enums/contacttype.enum\";\nimport {LKStudent} from \"../../../models/profile/lkstudent.model\";\nimport {LKStudPerson} from \"../../../models/profile/lkStudPerson.model\";\nimport {Email} from \"../../../models/profile/contacts/emails.model\";\nimport {LKStudentService} from \"../../../services/LKStudent/lkstudent.service\";\nimport {Phone} from \"../../../models/profile/contacts/phones.model\";\nimport {SocialNetwork} from \"../../../models/profile/contacts/socialnetworks.model\";\nimport {DisplaySystemSettingEnum} from \"../../../models/home/enums/display-system-setting.enum\";\nimport {DisplaySystemSettingService} from \"../../../services/LKStudent/display-system-setting.service\";\nimport {PhoneType} from \"../../../models/enums/phoneTypeEnumList.enum\";\nimport {SocialNetworkType} from \"../../../models/profile/dictionaries/socialNetworkType.model\";\nimport {DictSocialNetworkService} from \"../../../services/contacts/dictSocialNetwork.service\";\nimport {SocialNetworkService} from \"../../../services/contacts/socialNetwork.service\";\nimport {finalize} from \"rxjs\";\n\n@Component({\n selector: \"add-contact\",\n templateUrl: \"./contact.component.html\",\n styleUrls: [\"./contact.component.scss\"]\n})\nexport class ContactComponent implements OnInit {\n\n public tooltip = \"На основную почту будут приходить электронные письма, а также почта будет использоваться для восстановления доступа к учетной записи.\";\n\n public contactTypeName: string | null = null;\n public contactId: string | null = null;\n\n public phoneType = PhoneType;\n\n public phoneNumberMask = '+9 (999) 000-00-00';\n\n public contactType: number | null = null;\n public contactTypeEnum = ContactTypeEnum;\n public systemEnum = DisplaySystemSettingEnum;\n\n public isEditingMode: boolean = false;\n public isMain: boolean = false;\n public currentActive: boolean = false;\n\n public phoneMode: boolean = false;\n public phoneCityMode: boolean = false;\n public emailMode: boolean = false;\n public socialMode: boolean = false;\n\n public phoneTypes: DictPhoneType[] = [];\n public emailTypes: DictEmailType[] = [];\n public socialNetworksTypes: SocialNetworkType[] = [];\n\n public isCodeSent: boolean = false;\n public isCodeValid: boolean = false;\n\n public isWaitingServerResponse: boolean = false;\n\n public emailForm: FormGroup = this.getEmailFormGroup();\n public socialForm: FormGroup = this.getSocialFormGroup();\n public phoneForm: FormGroup = this.getPhoneFormGroup();\n public phoneCityForm: FormGroup = this.getPhoneFormGroup();\n\n public dictContactTypes: Array<{ dictContactTypeName: string; type: number }> = [];\n\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"-\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n constructor(\n private studentService: LKStudentService,\n private emailService: EmailService,\n private phoneService: PhoneService,\n private socialNetworksService: SocialNetworkService,\n private dictPhoneTypesService: DictPhoneTypesService,\n private dictEmailTypesService: DictEmailTypesService,\n private notificationService: NotificationsService,\n private router: Router,\n private route: ActivatedRoute,\n private displaySystemSettingService: DisplaySystemSettingService,\n private dictSocialNetworkService: DictSocialNetworkService,\n ) { }\n\n async ngOnInit() {\n await this.getCurrentStudent();\n }\n\n public getParamsFromRoute() {\n this.route.params.subscribe(params => {\n this.contactTypeName = params['contactTypeName'] || null;\n this.contactId = params['contactId'] || null;\n\n if (this.contactTypeName && this.contactId) {\n this.isEditingMode = true;\n\n switch (this.contactTypeName) {\n case 'email':\n this.getEmailById(this.contactId);\n this.onContactTypeChange(ContactTypeEnum.email);\n break;\n case 'phone':\n this.getPhoneById(this.contactId);\n this.onContactTypeChange(ContactTypeEnum.mobilePhone);\n break;\n case 'cityPhone':\n this.getCityPhoneById(this.contactId);\n this.onContactTypeChange(ContactTypeEnum.cityPhone);\n break;\n case 'social':\n this.getSocialNetworkById(this.contactId);\n this.onContactTypeChange(ContactTypeEnum.social);\n break;\n }\n }\n });\n }\n\n private initializeDictContactTypes() {\n this.dictContactTypes = [\n !this.systemSettingIsHidden(this.systemEnum.mobile_phone) ? { dictContactTypeName: 'Мобильный телефон', type: ContactTypeEnum.mobilePhone } : null,\n !this.systemSettingIsHidden(this.systemEnum.city_phone) ? { dictContactTypeName: 'Городской телефон', type: ContactTypeEnum.cityPhone } : null,\n !this.systemSettingIsHidden(this.systemEnum.email) ? { dictContactTypeName: 'E-mail', type: ContactTypeEnum.email } : null,\n !this.systemSettingIsHidden(this.systemEnum.socialnetwork) ? { dictContactTypeName: 'Соц. сеть', type: ContactTypeEnum.social } : null,\n ].filter((item): item is { dictContactTypeName: string; type: number } => item !== null);\n }\n\n private getPhoneById(id: string) {\n this.phoneService.getPhoneById(this.studentModel.studPersonId!, id)\n .subscribe(response => {\n this.phoneForm = new FormGroup({\n phoneId: new FormControl(response.phoneId!),\n studPersonId: new FormControl(response.studPersonId),\n phoneNumber: new FormControl(this.phoneFormat(response.phoneNumber)),\n dictPhoneTypeId: new FormControl(response.dictPhoneTypeId),\n isMain: new FormControl(response.isMain),\n });\n\n this.isMain = response.isMain;\n this.currentActive = response.isMain;\n })\n }\n\n private getCityPhoneById(id: string) {\n this.phoneService.getPhoneById(this.studentModel.studPersonId!, id)\n .subscribe(response => {\n this.phoneCityForm = new FormGroup({\n phoneId: new FormControl(response.phoneId!),\n studPersonId: new FormControl(response.studPersonId),\n phoneNumber: new FormControl(this.phoneFormat(response.phoneNumber)),\n dictPhoneTypeId: new FormControl(response.dictPhoneTypeId),\n });\n })\n }\n\n private getEmailById(id: string) {\n this.emailService.getById(this.studentModel.studPersonId!, id)\n .subscribe(response => {\n this.emailForm = new FormGroup({\n emailId: new FormControl(response.emailId!),\n studPersonId: new FormControl(response.studPersonId),\n email: new FormControl(response.email),\n dictEmailTypeId: new FormControl(response.dictEmailTypeId),\n isMain: new FormControl(response.isMain),\n code: new FormControl(''),\n });\n\n this.isMain = response.isMain;\n this.currentActive = response.isMain;\n })\n }\n\n private getSocialNetworkById(id: string) {\n this.socialNetworksService.getSocialNetworkById(this.studentModel.studPersonId!, id)\n .subscribe(response => {\n this.socialForm = new FormGroup({\n id: new FormControl(response.id),\n studPersonId: new FormControl(response.studPersonId),\n socialNetwork: new FormControl(response.socialNetwork),\n dictSocialNetworkId: new FormControl(response.dictSocialNetworkId),\n });\n })\n }\n\n public setDefaultMainOptions() {\n this.isCodeValid = false;\n this.isCodeSent = false;\n }\n\n public phoneFormat(phoneNumber: string): string {\n if (phoneNumber !== null) {\n let phoneFormatted = phoneNumber.replace(/[-()+\\s]/g, \"\");\n\n if (phoneFormatted.length === 10) {\n phoneFormatted = \"7\" + phoneFormatted;\n }\n\n if (phoneFormatted.length === 11) {\n phoneFormatted = phoneFormatted.substring(1);\n phoneFormatted = phoneFormatted.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{2})/, \"+7 ($1) $2-$3-$4\");\n }\n\n return phoneFormatted;\n }\n\n return phoneNumber;\n }\n\n public getDisplaySystemSettings() {\n this.displaySystemSettingService.GetDisplaySettings()\n .subscribe(\n response => {\n this.displaySystemSettingService.displaySettings$.next(response);\n this.initializeDictContactTypes(); // Инициализируем dictContactTypes после загрузки данных\n }\n );\n }\n\n public systemSettingIsHidden(field: number): boolean {\n let isHidden = false;\n return this.displaySystemSettingService.isHidden(field) || isHidden;\n }\n\n public getAllPhoneTypes() {\n this.dictPhoneTypesService.getAllPhoneTypes()\n .subscribe(response => {\n this.phoneTypes = response;\n })\n }\n\n public getAllDictSocialNetworks() {\n this.dictSocialNetworkService.getAllSocialNetworks()\n .subscribe(\n response => {\n this.socialNetworksTypes = response;\n }\n );\n }\n\n public getAllEmailTypes() {\n this.dictEmailTypesService.getAllEmailTypes()\n .subscribe(response => {\n this.emailTypes = response;\n })\n }\n\n public async getCurrentStudent() {\n this.studentService.getCurrentStudent()\n .subscribe(\n async response => {\n this.students = response;\n this.studentModel = this.students[0];\n\n this.getDisplaySystemSettings();\n this.getParamsFromRoute();\n this.getAllPhoneTypes();\n this.getAllDictSocialNetworks();\n this.getAllEmailTypes();\n }\n );\n }\n\n public onContactTypeChange(type: number): void {\n this.contactType = type;\n this.socialMode = false;\n this.emailMode = false;\n this.phoneMode = false;\n this.phoneCityMode = false;\n this.emailForm = this.getEmailFormGroup();\n this.socialForm = this.getSocialFormGroup();\n this.phoneForm = this.getPhoneFormGroup();\n this.phoneCityForm = this.getPhoneFormGroup();\n switch (type) {\n case 1:\n this.phoneMode = true;\n break;\n case 2:\n this.emailMode = true;\n break;\n case 3:\n this.socialMode = true;\n break;\n case 4:\n this.phoneCityMode = true;\n break;\n }\n }\n\n public sendCodeToEmail() {\n this.isWaitingServerResponse = true;\n\n this.emailService.sendActivateCode(this.emailForm.value.email).pipe(\n finalize(() => this.isWaitingServerResponse = false)\n ).subscribe({\n next: () => {\n this.isCodeSent = true;\n },\n error: err => {\n this.notificationService.showError(err);\n }\n });\n }\n\n public checkValidCode() {\n this.isWaitingServerResponse = true;\n\n this.emailService.checkActivationCode(this.emailForm.value.email, this.emailForm.value.code).pipe(\n finalize(() => this.isWaitingServerResponse = false)\n ).subscribe({\n next: () => {\n this.isCodeValid = true;\n },\n error: err => {\n this.notificationService.showError(err);\n }\n });\n }\n\n public toProfile() {\n this.router.navigate(['/home']);\n }\n\n public onDeleteContact() {\n switch (this.contactType) {\n case this.contactTypeEnum.email:\n this.deleteEmail();\n break;\n case this.contactTypeEnum.mobilePhone:\n this.deletePhone();\n break;\n case this.contactTypeEnum.cityPhone:\n this.deletePhone();\n break;\n case this.contactTypeEnum.social:\n this.deleteSocial();\n break;\n }\n }\n\n private deleteEmail() {\n this.emailService.deleteEmail(this.studentModel.studPersonId, this.emailForm.value.emailId).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно удален\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n }\n });\n }\n\n private deletePhone() {\n this.phoneService.deletePhone(this.studentModel.studPersonId, this.phoneForm.value.phoneId || this.phoneCityForm.value.phoneId).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно удален\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n }\n });\n }\n\n private deleteSocial() {\n this.socialNetworksService.deleteSocialNetwork(this.studentModel.studPersonId, this.socialForm.value.id).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно удален\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n }\n });\n }\n\n public onSaveContact(e: PointerEvent) {\n this.isWaitingServerResponse = true;\n\n e.preventDefault();\n switch (this.contactType) {\n case this.contactTypeEnum.email:\n this.saveEmail();\n break;\n case this.contactTypeEnum.mobilePhone:\n this.savePhone();\n break;\n case this.contactTypeEnum.cityPhone:\n this.savePhone();\n break;\n case this.contactTypeEnum.social:\n this.saveSocial();\n break;\n }\n }\n\n private saveEmail() {\n const email: Email = {\n emailId: this.emailForm.value.emailId,\n studPersonId: this.emailForm.value.studPersonId,\n dictEmailTypeId: this.emailForm.value.dictEmailTypeId,\n email: this.emailForm.value.email,\n isMain: this.emailForm.value.isMain\n }\n\n if (this.isEditingMode) {\n this.emailService.updateEmail(this.emailForm.value.emailId, email).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно изменен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n else {\n this.emailService.addEmail(email).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно добавлен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n }\n\n private savePhone() {\n const phone: Phone = {\n phoneId: this.phoneForm.value.phoneId || this.phoneCityForm.value.phoneId,\n studPersonId: this.phoneForm.value.studPersonId,\n dictPhoneTypeId: this.phoneForm.value.dictPhoneTypeId || this.phoneType.city,\n phoneNumber: this.phoneForm.value.phoneNumber || this.phoneCityForm.value.phoneNumber,\n isMain: this.phoneForm.value.isMain || false\n }\n\n if (this.isEditingMode) {\n this.phoneService.updatePhone(phone.phoneId!, phone).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно изменен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n else {\n this.phoneService.addPhone(phone).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно добавлен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n }\n\n private saveSocial() {\n const socialNetwork: SocialNetwork = {\n id: this.socialForm.value.id,\n socialNetwork: this.socialForm.value.socialNetwork,\n studPersonId: this.socialForm.value.studPersonId,\n dictSocialNetworkId: this.socialForm.value.dictSocialNetworkId\n }\n\n if (!this.checkURLFormat(socialNetwork.socialNetwork)) {\n this.notificationService.showError('Неверный формат ссылки');\n return;\n }\n\n if (this.isEditingMode) {\n this.socialNetworksService.updateSocialNetwork(this.socialForm.value.id, socialNetwork).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно изменен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n else {\n this.socialNetworksService.addSocialNetwork(socialNetwork).subscribe({\n next: () => {\n this.notificationService.showSuccess(\"Контакт успешно добавлен\");\n this.toProfile();\n },\n error: err => {\n this.notificationService.showError(err);\n this.isWaitingServerResponse = false;\n }\n });\n }\n }\n\n public isFormInvalid(): boolean {\n if (this.emailMode) {\n if (this.emailForm.invalid) return true;\n\n if (!this.systemSettingIsHidden(this.systemEnum.student_can_edit_deanery_contacts)) {\n return this.isMain ? !this.isCodeValid : false;\n }\n\n return false;\n } else if (this.socialMode) {\n if (this.socialForm.invalid) return true;\n\n return !this.checkURLFormat(this.socialForm.value.socialNetwork);\n } else if (this.phoneMode) {\n return this.phoneForm.invalid;\n } else if (this.phoneCityMode) {\n return this.phoneCityForm.invalid;\n }\n return true;\n }\n\n public checkURLFormat(value: string): boolean {\n const pattern = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})[\\/\\w .-]*\\/?$/;\n return pattern.test(value);\n }\n\n public canBeDeleted(): boolean {\n return this.isEditingMode && (this.emailMode ? this.isMain === false : true);\n }\n\n private getEmailFormGroup() {\n return new FormGroup({\n emailId: new FormControl(''),\n studPersonId: new FormControl(this.studentModel?.studPersonId),\n dictEmailTypeId: new FormControl('', Validators.required),\n email: new FormControl('', Validators.required),\n isMain: new FormControl(false),\n code: new FormControl(''),\n });\n }\n\n private getSocialFormGroup() {\n return new FormGroup({\n id: new FormControl(''),\n studPersonId: new FormControl(this.studentModel?.studPersonId),\n socialNetwork: new FormControl('', [\n Validators.required,\n Validators.pattern('(https?://)([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?')\n ]),\n dictSocialNetworkId: new FormControl('', Validators.required),\n });\n }\n\n private getPhoneFormGroup() {\n return new FormGroup({\n phoneId: new FormControl(''),\n studPersonId: new FormControl(this.studentModel?.studPersonId),\n phoneNumber: new FormControl('', Validators.required),\n dictPhoneTypeId: new FormControl(''),\n isMain: new FormControl(false),\n });\n }\n}\n","import {ApplicationStatusesEnum} from '../enums/application-statuses.enum';\nimport {Dict} from '../dict.model';\nimport {Moment} from 'moment';\n\nexport interface ApplicationList {\n applications: Application[];\n totalApplicationCount: number;\n}\n\nexport interface Application {\n id: string;\n number: string;\n createdAt: Date;\n category: Dict;\n type: Dict;\n status: ApplicationStatusesEnum;\n statusDate: Date;\n notificationCount: number;\n}\n\nexport interface QueryOptions {\n page: Page;\n filter: Filter;\n sortParameters: Sort|null;\n // sortParameters: Sort[]|null; //TODO\n}\n\nexport interface Page {\n number: number;\n size: number;\n}\n\nexport interface Filter {\n [key: string]: unknown;\n number: string|null;\n createdAt: DateRange|null;\n category: string[]|null;\n type: string[]|null;\n statuses: ApplicationStatusesEnum[]|null;\n statusDate: DateRange|null;\n}\n\nexport type SortMode = 'ASC' | 'DESC';\n\nexport const sortModeValues = new Map([\n ['asc', 'ASC'],\n ['desc', 'DESC'],\n]);\n\nexport interface Sort {\n columnName: string;\n mode: SortMode;\n}\n\nexport interface DateRange {\n start?: Date|Moment;\n end?: Date|Moment;\n}\n","export class ElementRefHelper {\n static hasClass = (el: HTMLElement, className: string) => new RegExp(className).test(el.className);\n\n static isChildOf = (el: HTMLElement, className: string) => {\n while (el && el.parentElement) {\n if (ElementRefHelper.hasClass(el.parentElement, className)) {\n return true;\n }\n el = el.parentElement;\n }\n return false;\n };\n\n static getParentElement = (el: HTMLElement, className: string) => {\n while (el && el.parentElement) {\n if (ElementRefHelper.hasClass(el.parentElement, className)) {\n return el.parentElement as HTMLElement;\n }\n el = el.parentElement;\n }\n return null;\n };\n}\n","import {Injectable} from '@angular/core';\nimport {map, Observable} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {environment} from '../../../../environments/environment';\nimport {ApplicationCategory} from '../../../models/mfc/dicts/application-category.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationCategoryService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/ApplicationCategory/`;\n\n constructor(private http: HttpClient) { }\n\n public getApplicationCategories(): Observable {\n return this.http.get(this.baseUrl)\n .pipe(map((data) => data.filter(a => !a.hidden) ?? []));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {environment} from '../../../../environments/environment';\nimport {ApplicationType} from '../../../models/mfc/dicts/application-type.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationTypeService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/ApplicationType/`;\n\n constructor(private http: HttpClient) { }\n\n public getApplicationTypes(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {ApplicationStatus} from '../../../models/mfc/dicts/application-status.model';\nimport {map} from 'rxjs/operators';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationStatusService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/ApplicationStatus/`;\n\n constructor(private http: HttpClient) { }\n\n public getAll(): Observable {\n return this.http.get(this.baseUrl).pipe(map((data) => data ?? []));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ApplicationList, Filter, QueryOptions} from '../../models/mfc/home/application.model';\nimport {HttpClient} from '@angular/common/http';\nimport {TimeZoneFix} from '../../helpers/date-helper';\nimport {catchError, Observable} from 'rxjs';\nimport {environment} from '../../../environments/environment';\nimport {handleError} from '../../helpers/errorHandle-helper';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.application}/`;\n\n constructor(private http: HttpClient) { }\n\n private timeZoneFix(filter: Filter) {\n if (filter.createdAt) {\n if (filter.createdAt.start) filter.createdAt.start = TimeZoneFix(filter.createdAt.start);\n if (filter.createdAt.end) filter.createdAt.end = TimeZoneFix(filter.createdAt.end);\n }\n\n if (filter.statusDate) {\n if (filter.statusDate.start) filter.statusDate.start = TimeZoneFix(filter.statusDate.start);\n if (filter.statusDate.end) filter.statusDate.end = TimeZoneFix(filter.statusDate.end);\n }\n }\n\n public getApplications(options: QueryOptions): Observable {\n this.timeZoneFix(options.filter);\n return this.http.post(`${this.baseUrl}GetAll`, options)\n .pipe(catchError(handleError));\n }\n}\n","\n \n {{ dataItems.length }} выбрано\n \n\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {BaseFilterCellComponent, FilterService} from \"@progress/kendo-angular-grid\";\n\n@Component({\n selector: 'filter-multiselect',\n templateUrl: './filter-multiselect.component.html',\n styleUrls: ['./filter-multiselect.component.scss']\n})\nexport class FilterMultiselectComponent extends BaseFilterCellComponent {\n constructor(filterService: FilterService) {\n super(filterService);\n }\n\n @Input() public data: any[] = [];\n @Input() public textField!: string;\n @Input() public valueField!: string;\n @Input() public checkboxes: boolean = false;\n @Input() public listHeight: number = 200;\n @Input() public gridField!: string;\n\n @Output() onFilterChange = new EventEmitter();\n\n public get selectedValue(): any {\n const filter = this.filterByField(this.valueField);\n return filter ? filter.value : null;\n }\n\n public onChange(values: any[]): void {\n this.onFilterChange.emit(values);\n this.filterService.filter({\n filters: values.map(value => ({\n field: this.gridField ?? this.valueField,\n operator: 'contains',\n value\n })),\n logic: 'or'\n });\n }\n}\n","
\n \n \n\n \n\n
\n","import {Component, Input, ElementRef, Output, EventEmitter} from '@angular/core';\nimport {\n FilterService,\n SinglePopupService,\n PopupCloseEvent, BaseFilterCellComponent,\n} from \"@progress/kendo-angular-grid\";\nimport { PopupSettings } from \"@progress/kendo-angular-dateinputs\";\nimport { FilterDescriptor } from \"@progress/kendo-data-query\";\nimport { addDays } from \"@progress/kendo-date-math\";\nimport { Subscription } from \"rxjs\";\n\n/**\n * NOTE: Interface declaration here is for demo compilation purposes only!\n * In the usual case include it as an import from the data query package:\n *\n * import { CompositeFilterDescriptor } from '@progress/kendo-data-query';\n */\ninterface CompositeFilterDescriptor {\n logic: \"or\" | \"and\";\n filters: Array;\n}\n\nconst closest = (\n node: HTMLElement,\n predicate: (node: HTMLElement) => boolean\n): HTMLElement => {\n while (node && !predicate(node)) {\n node = node.parentNode as HTMLElement;\n }\n\n return node;\n};\n\n@Component({\n selector: \"date-range-filter\",\n templateUrl: './date-range-filter.component.html',\n styleUrls: ['./date-range-filter.component.scss']\n})\nexport class DateRangeFilterComponent extends BaseFilterCellComponent {\n @Input() public override filter!: CompositeFilterDescriptor;\n @Input() public field!: string;\n\n @Output() onFilterChange = new EventEmitter<{start?: Date; end?: Date}|null>();\n private startDate?: Date;\n private endDate?: Date;\n\n private popupSubscription: Subscription;\n\n constructor(filterService: FilterService,\n private element: ElementRef,\n private popupService: SinglePopupService) {\n super(filterService);\n this.popupSubscription = popupService.onClose.subscribe(\n (e: PopupCloseEvent) => {\n if (\n document.activeElement &&\n closest(\n document.activeElement as HTMLElement,\n (node) =>\n node === this.element.nativeElement ||\n String(node.className).indexOf(\"date-range-filter\") >= 0\n )\n ) {\n e.preventDefault();\n }\n }\n );\n }\n\n public get hasFilter(): boolean {\n return (this.startDate || this.endDate) !== undefined;\n }\n\n public clearFilter(): void {\n this.startDate = undefined;\n this.endDate = undefined;\n this.onFilterChange.emit(null);\n this.filterService.filter(this.removeFilter(this.field));\n }\n\n public get start(): Date {\n const first = this.findByOperator(\"gte\");\n return (first || {}).value || this.startDate;\n }\n\n public get end(): Date {\n const end = this.findByOperator(\"lte\");\n return (end || {}).value || this.endDate;\n }\n\n public get min(): Date | null {\n return this.start ? addDays(this.start, 1) : null;\n }\n\n public get max(): Date | null {\n return this.end ? addDays(this.end, -1) : null;\n }\n\n public popupSettings: PopupSettings = {\n popupClass: \"date-range-filter\",\n };\n\n public onStartChange(value: Date): void {\n this.startDate = value;\n this.filterRange(value, this.endDate);\n }\n\n public onEndChange(value: Date): void {\n this.endDate = value;\n this.filterRange(this.startDate, value);\n }\n\n public filterRange(start?: Date, end?: Date): void {\n this.onFilterChange.emit({start, end});\n this.filter = this.removeFilter(this.field);\n\n const filters = [];\n\n if (start) {\n filters.push({\n field: this.field,\n operator: \"gte\",\n value: start,\n });\n }\n\n if (end) {\n filters.push({\n field: this.field,\n operator: \"lte\",\n value: end,\n });\n }\n\n const root = this.filter || {\n logic: \"and\",\n filters: [],\n };\n\n if (filters.length) {\n root.filters.push(...filters);\n }\n\n this.filterService.filter(root);\n }\n\n private findByOperator(op: string): FilterDescriptor {\n return this.filtersByField(this.field).filter(\n ({ operator }) => operator === op\n )[0];\n }\n}\n","import {\n Directive,\n Input,\n HostListener,\n OnDestroy,\n Output,\n EventEmitter\n} from '@angular/core';\n\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\n@Directive({\n selector: '[afterValueChanged]'\n})\nexport class AfterValueChangedDirective implements OnDestroy {\n @Input() public valueChangeDelay = 300;\n @Output() public afterValueChanged: EventEmitter = new EventEmitter();\n\n private stream: Subject = new Subject();\n private subscription: Subscription;\n\n constructor() {\n this.subscription = this.stream\n .pipe(debounceTime(this.valueChangeDelay))\n .subscribe((value: unknown) => this.afterValueChanged.next(value));\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n @HostListener('valueChange', ['$event'])\n public onValueChange(value: unknown) {\n this.stream.next(value);\n }\n}\n","

МФЦ

\n\n\n\n\n \n
\n
\n \n
\n
\n\n \n \n \n \n \n \n {{ dataItem[column.field] }}\n \n \n\n \n \n \n \n \n \n {{ dataItem[column.field] | date:'dd.MM.yyyy HH:mm' }}\n \n \n\n \n \n \n \n \n \n {{ dataItem[column.field].name }}\n \n \n\n \n \n \n \n \n \n {{ dataItem[column.field].name }}\n \n \n\n \n \n \n \n \n \n
\n \n 0\">\n {{ dataItem.notificationCount }}\n \n \n {{ statusMap.get(dataItem[column.field]) }}\n
\n
\n
\n\n \n \n \n \n \n \n {{ dataItem[column.field] | date:'dd.MM.yyyy HH:mm' }}\n \n \n
\n","import {Component, HostListener, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {CellClickEvent, GridDataResult, PagerSettings} from '@progress/kendo-angular-grid';\nimport {SortDescriptor, State} from '@progress/kendo-data-query';\nimport {PageChangeEvent} from '@progress/kendo-angular-pager';\nimport {ApplicationStatusesEnum} from '../../../models/mfc/enums/application-statuses.enum';\nimport {\n Application,\n Filter,\n QueryOptions,\n Sort,\n sortModeValues\n} from '../../../models/mfc/home/application.model';\nimport {ApplicationService} from '../../../services/mfc/application.service';\nimport {ApplicationCategory} from '../../../models/mfc/dicts/application-category.model';\nimport {ApplicationType} from '../../../models/mfc/dicts/application-type.model';\nimport {ApplicationStatus} from '../../../models/mfc/dicts/application-status.model';\nimport {ApplicationCategoryService} from '../../../services/mfc/dicts/applicationCategory.service';\nimport {ApplicationTypeService} from '../../../services/mfc/dicts/applicationType.service';\nimport {ApplicationStatusService} from '../../../services/mfc/dicts/application-status.service';\nimport {NotificationsService} from '../../../services/Notifications/notifications.service';\nimport {ElementRefHelper} from \"../../../helpers/elementRef-helper\";\n\n\n@Component({\n selector: 'app-mfc-home',\n templateUrl: './mfc-home.component.html',\n styleUrls: ['./mfc-home.component.scss']\n})\n\nexport class MFCHomeComponent implements OnInit {\n\n protected loading = false;\n protected skip = 0;\n private readonly pageStorageKey = 'mfc-main-pageSize';\n\n protected pageSize = Number(localStorage.getItem(this.pageStorageKey)) || 20;\n protected state: State = {\n skip: this.skip,\n take: this.pageSize,\n };\n protected pagerSettings: PagerSettings = {\n type: 'numeric',\n buttonCount: 5,\n pageSizes: [10, 20, 50],\n info: true,\n previousNext: true,\n position: 'bottom'\n };\n\n protected sort: SortDescriptor[] = [\n {\n field: 'createdAt',\n dir: 'desc',\n },\n ];\n\n // TODO\n // protected sortSettings: MultipleSortSettings = {\n // mode: 'multiple',\n // initialDirection: 'desc',\n // allowUnsort: true,\n // showIndexes: true,\n // };\n\n protected options: QueryOptions = {\n page: {number: 1, size: this.pageSize},\n sortParameters: this.patchSort(this.sort[0]),\n filter: {\n number: null,\n createdAt: null,\n category: null,\n type: null,\n statuses: null,\n statusDate: null,\n }\n };\n\n protected applicationCategories: ApplicationCategory[] = [];\n protected applicationTypes: ApplicationType[] = [];\n protected filterApplicationTypes: ApplicationType[] = [];\n protected applicationStatuses: ApplicationStatus[] = [];\n\n protected totalCount = 0;\n protected gridData: GridDataResult = {\n data: [],\n total: this.totalCount\n };\n\n protected readonly StatusEnum = ApplicationStatusesEnum;\n //TODO: Убрать после подключения изменений на беке\n protected statusMap = new Map([]);\n\n constructor(\n private router: Router,\n private notificationService: NotificationsService,\n private applicationCategoryService: ApplicationCategoryService,\n private applicationTypeService: ApplicationTypeService,\n private applicationStatusService: ApplicationStatusService,\n private applicationService: ApplicationService,\n ) { }\n\n ngOnInit() {\n this.getDicts();\n this.getApplications();\n }\n\n private getDicts() {\n this.applicationCategoryService.getApplicationCategories().subscribe((response) =>\n this.applicationCategories = response);\n this.applicationTypeService.getApplicationTypes().subscribe((response) => {\n this.applicationTypes = response;\n this.filterApplicationTypes = response;\n });\n this.applicationStatusService.getAll().subscribe((response) => {\n this.applicationStatuses = response;\n this.applicationStatuses.forEach((item) => {\n this.statusMap.set(item.applicationStatusEnum, item.name);\n });\n });\n }\n\n private getApplications() {\n this.loading = true;\n this.applicationService.getApplications(this.options).subscribe({\n next: (response) => {\n this.totalCount = response.totalApplicationCount;\n this.gridData = {\n data: response.applications,\n total: this.totalCount\n };\n\n this.loading = false;\n },\n error: (error) => {\n this.notificationService.showError(error);\n this.loading = false;\n }\n });\n }\n\n protected pageChange(event: PageChangeEvent) {\n this.state = {\n skip: event.skip,\n take: event.take\n }\n\n this.options.page = {\n number: event.skip / event.take + 1,\n size: event.take\n };\n localStorage.setItem(this.pageStorageKey, event.take.toString());\n this.getApplications();\n }\n\n private patchSort(sort: SortDescriptor): Sort {\n return {\n columnName: `${sort.field[0].toUpperCase()}${sort.field.slice(1)}`,\n mode: sortModeValues.get(sort.dir ?? '')\n } as Sort;\n }\n\n protected sortChange(sort: SortDescriptor[]) {\n this.sort = sort;\n this.options.sortParameters = this.sort\n .map((item) => this.patchSort(item))\n .find((item) => !!item.mode) ?? null;\n this.getApplications();\n }\n\n protected filterChange(value: unknown, filter: keyof Filter) {\n this.options.filter[filter] = Array.isArray(value) && !value.length ? null : value;\n\n this.state = {\n skip: this.skip,\n take: this.pageSize\n }\n this.pageChange({skip: this.skip, take: this.pageSize});\n }\n\n protected categoryChange(value: string[]) {\n if (value.length) {\n const categoryIds = this.applicationCategories.filter((item) =>\n value.includes(item.id)).map((item) => item.id);\n this.filterApplicationTypes = this.applicationTypes.filter((item) =>\n categoryIds.includes(item.dictApplicationCategoryId));\n this.options.filter.type = this.options.filter.type?.filter((id) =>\n this.filterApplicationTypes.some((item) => item.id === id)) ?? null;\n } else {\n this.filterApplicationTypes = this.applicationTypes;\n }\n this.filterChange(value, 'category');\n }\n\n protected addApplication() {\n this.router.navigateByUrl('/mfc/applicationTypeSelect');\n }\n\n protected navigateToSelectedApplication({dataItem, originalEvent}: CellClickEvent) {\n this.router.navigate([`mfc/applicationForm/${dataItem.id}`]);\n originalEvent.preventDefault();\n }\n\n protected rowCallback = () => {\n return {'mfc-row': true};\n };\n\n @HostListener('mouseup', ['$event']) onMouseUp(event: MouseEvent){\n const target = event.target as HTMLElement;\n const parent = ElementRefHelper.getParentElement(target, 'mfc-row');\n const gridRowIndex = Number(parent?.getAttribute('data-kendo-grid-item-index')) - (this.state.skip || 0);\n\n if (gridRowIndex != undefined && event.button === 1 && ElementRefHelper.isChildOf(target, 'mfc-row')) {\n const dataItem: Application = this.gridData.data[gridRowIndex];\n if (!dataItem) {\n return;\n }\n window.open(`mfc/applicationForm/${dataItem.id}`, '_blank');\n }\n }\n\n @HostListener('mousedown', ['$event']) onMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (event.button === 1 && ElementRefHelper.isChildOf(target, 'mfc-row')) {\n event.preventDefault();\n }\n }\n}\n","import {ApplicationStatusesEnum} from '../enums/application-statuses.enum';\n\nexport interface ApplicationStatus {\n id: string;\n name: string;\n applicationStatusEnum: ApplicationStatusesEnum;\n sortNumber?: number;\n}\n\nexport const editableStatuses: ApplicationStatusesEnum[] = [\n ApplicationStatusesEnum.Draft,\n ApplicationStatusesEnum.Revision,\n ApplicationStatusesEnum.Withdrawn\n];\n\nexport const displayFIOStatuses: ApplicationStatusesEnum[] = [\n ApplicationStatusesEnum.Sent,\n ApplicationStatusesEnum.Revision,\n ApplicationStatusesEnum.Rejected,\n];\n\nexport const statusActions = new Map([\n [ApplicationStatusesEnum.Sent, 'Send'],\n [ApplicationStatusesEnum.Withdrawn, 'ToWithdrawn'],\n]);\n","export enum ApplicationTabsEnum {\n Documents = 'documents',\n ReadyDocuments = 'readyDocuments',\n List = 'list',\n Comments = 'comments',\n Dynamic = 'dynamic',\n Discipline = 'discipline'\n}\n","import {ApplicationTabsEnum} from '../enums/application-tabs.enum';\nimport {ApplicationStatusesEnum} from '../enums/application-statuses.enum';\n\nexport interface Tab {\n id?: string;\n name: string;\n selector: ApplicationTabsEnum;\n displayInAddForm: boolean;\n hideOnStatuses?: ApplicationStatusesEnum[];\n}\n\nexport const tabs: Tab[] = [\n {\n name: 'Лист согласования',\n selector: ApplicationTabsEnum.List,\n displayInAddForm: false,\n hideOnStatuses: [ApplicationStatusesEnum.Draft, ApplicationStatusesEnum.Withdrawn]\n },\n {name: 'Документы на подпись', selector: ApplicationTabsEnum.Documents, displayInAddForm: false},\n {name: 'Документы', selector: ApplicationTabsEnum.ReadyDocuments, displayInAddForm: false},\n {\n name: 'Список дисциплин',\n selector: ApplicationTabsEnum.Discipline,\n displayInAddForm: false\n },\n {\n name: 'Комментарии',\n selector: ApplicationTabsEnum.Comments,\n displayInAddForm: false,\n hideOnStatuses: [ApplicationStatusesEnum.Draft, ApplicationStatusesEnum.Withdrawn]\n },\n];\n","export enum DocumentTypes {\n Document = 1,\n Statement\n}\n\nexport enum DocumentTypeStrings {\n Document = 'documents',\n Statement = 'statements'\n}\n","export enum AllowedActions {\n Save,\n Delete,\n Withdrawn\n}\n","export enum ReceiptTypesEnum {\n InThePersonalAccount = 1,\n InTheDeansOffice,\n NotProvided,\n}\n","export enum EnableDisciplineTable {\n No,\n CycleType,\n BySemester,\n BySemesterPractice\n}","import {ApplicationStatusesEnum} from '../enums/application-statuses.enum';\nimport {ConstructorDocument} from '../applicationConstructor/constructor-document.model';\nimport {TabsSettings} from '../applicationConstructor/tabs-settings.model';\nimport {KendoProperties} from '../enums/kendo-properties.enum';\nimport {PropertyValue} from './application-property-value.model';\nimport {Dict} from \"../dict.model\";\nimport {ApplicationApprovalSettings} from './approvalList.model';\nimport {EnableDisciplineTable} from \"../enums/enable-discipline-table.enum\";\n\nexport class CreateApplicationMainForm {\n category: string = '';\n type: string = '';\n dictTypeReceiptId: string = '';\n relatedApplicationIds: string[] = [];\n}\n\nexport class EditApplicationMainForm {\n relatedApplicationIds?: string[] = [];\n}\n\nexport interface GetApplication {\n externalId: string;\n applicationNumber: number;\n applicationConstructorId: string;\n dictReceiptType: Dict;\n receiptTypeExplanation: string;\n student: Student;\n statusEnum: ApplicationStatusesEnum;\n applicationStatusInfo: StatusInfo;\n notificationCount: number;\n registrationNumber?: RegistrationNumber;\n issueDate?: Date;\n applicationCategoryName: string;\n applicationTypeName: string;\n approvalSettings: ApplicationApprovalSettings[];\n relatedApplications: RelatedApplication[];\n documents: ConstructorDocument[];\n tabs: TabsSettings[];\n enableDisciplineTable: EnableDisciplineTable;\n disciplineTableSemesters: number[];\n}\n\nexport interface TypeReceiptExplanation {\n dictTypeReceiptId: string;\n text: string;\n}\n\nexport interface StatusInfo {\n statusUpdatedAt: Date;\n statusChangePersonId?: string;\n personFIO?: string;\n statusChangeStudentId?: string;\n studentFIO?: string;\n}\n\nexport interface Student {\n id?: string;\n fio: string;\n}\n\nexport interface RegistrationNumber {\n registrationNumber?: number;\n registrationNumberLitera?: string;\n}\n\nexport interface RelatedApplication {\n id: string;\n applicationNumber: string;\n}\n\nexport interface ApplicationNumber {\n applicationId: string;\n applicationNumber: string;\n}\n\nexport interface ApplicationForm {\n applicationConstructorId?: string;\n dictTypeReceiptId?: string;\n relatedApplicationIds?: string[];\n disciplineTableSemesters?: number[];\n applicationPropertiesValueDto: ApplicationFormProperty[];\n}\n\nexport interface ApplicationTabData {\n index: number;\n applicationPropertiesValueDto: ApplicationFormProperty[];\n}\n\nexport interface ApplicationFormProperty {\n applicationConstructorPropertyId: string;\n propertyType: KendoProperties;\n value: PropertyValue|File[]|null;\n}\n\nexport interface GroupPropertyForm {\n properties: PropertyForm[];\n}\n\nexport interface PropertyForm {\n externalId: string;\n propertyTypeEnum: KendoProperties;\n propertyValue: PropertyValue|File[]|null;\n}\n","import {ApplicationApprovalSettings} from \"./approvalList.model\";\n\nexport interface DocumentGroup {\n statusName: string;\n items: ApplicationApprovalSettings[];\n}\n\nexport interface ApplicationDocument {\n externalId?: string;\n name: string;\n documentType?: number;\n expirationDate?: Date;\n}\n\nexport interface DocumentItem extends ApplicationApprovalSettings {\n statusName: string;\n document?: ApplicationDocument;\n expirationDate?: Date;\n signDate?: Date;\n}\n\nexport class ApplicationDocumentList {\n signature: ApplicationDocument[] = [];\n ready: ApplicationDocument[] = [];\n}\n","export function createMap(input: {value: T[], valueField: keyof T, textField: keyof T}) {\n return new Map(input.value.map((item) => [item[input.valueField], item[input.textField]]));\n}","export enum KendoProperties {\n Textbox = 1,\n Textarea,\n Number,\n Date,\n Boolean,\n File,\n Dropdown,\n Multiselect,\n Combobox,\n Table,\n Files,\n DateRange,\n Decimal,\n // Text,\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {NotificationsService} from '../Notifications/notifications.service';\nimport {map, tap} from 'rxjs/operators';\nimport {Observable} from 'rxjs';\nimport {ApplicationCategoriesTree, ApplicationCategoryTree} from '../../models/mfc/application-categories-tree.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationTypeSelectService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.student}/GetCategoriesAndApplicationTypes/`;\n\n constructor(\n private http: HttpClient,\n private notificationService: NotificationsService\n ) { }\n\n getCategoriesTree(): Observable {\n return this.http.get(this.baseUrl)\n .pipe(\n tap((response) => {\n if (!response || !response.categories.length) {\n this.notificationService.showError('Не удалось найти доступные категории и типы заявок');\n }\n }),\n map((d) => d.categories)\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {catchError} from 'rxjs';\nimport {environment} from '../../../environments/environment';\nimport {handleError} from '../../helpers/errorHandle-helper';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationConstructorDocumentService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.applicationConstructor}/`;\n\n constructor(private http: HttpClient) { }\n\n public getDocument(constructorId: string, documentId: string) {\n return this.http.get(`${this.baseUrl}GetClearDocument/${constructorId}/${documentId}`, {responseType: 'blob'})\n .pipe(catchError(handleError));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {catchError, OperatorFunction} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {environment} from '../../../environments/environment';\nimport {NotificationsService} from '../Notifications/notifications.service';\nimport {handleError} from '../../helpers/errorHandle-helper';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentsService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.application}/`;\n\n constructor(private http: HttpClient, private notificationsService: NotificationsService) { }\n\n private errorHandler(): OperatorFunction {\n return catchError((err) => {\n this.notificationsService.showError(err ?? err.error);\n return handleError(err);\n });\n }\n\n public downloadDocument(applicationId: string, documentId: string) {\n return this.http.get(`${this.baseUrl}GetGeneratedFile/${applicationId}/${documentId}`, {responseType: 'blob'})\n .pipe(this.errorHandler());\n }\n\n public getApplicationDocumentByPdf(applicationId: string, documentId: string) {\n return this.http.get(`${this.baseUrl}GetApplicationDocumentByPdf/${applicationId}/${documentId}`, {responseType: 'blob'})\n .pipe(this.errorHandler());\n }\n\n public getCompletedTemplate(applicationId: string, documentId: string) {\n return this.http.get(`${this.baseUrl}GetCompletedTemplate/${applicationId}/${documentId}`, {responseType: 'blob'})\n .pipe(this.errorHandler());\n }\n}\n","import {Injectable} from '@angular/core';\nimport {DateFromUTCAsLocal, TimeZoneFix} from '../../helpers/date-helper';\nimport {KendoProperties} from '../../models/mfc/enums/kendo-properties.enum';\nimport {\n ApplicationFormPropertyValue, ApplicationPropertyValueDto, DateRangeValue, ExternalFile,\n FilePropertyValue,\n PropertyValue\n} from '../../models/mfc/applicationForm/application-property-value.model';\nimport {\n ApplicationForm,\n ApplicationFormProperty,\n GroupPropertyForm,\n PropertyForm\n} from '../../models/mfc/applicationForm/application-form.model';\nimport {Property} from '../../models/mfc/applicationConstructor/tabs-settings.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PropertiesService {\n\n private mapFormPropertyValue(item: PropertyForm): ApplicationFormProperty {\n return {\n applicationConstructorPropertyId: item.externalId,\n propertyType: item.propertyTypeEnum,\n value: item.propertyValue\n };\n }\n\n private mapPropertyValueForRequest(item: ApplicationFormProperty): ApplicationFormPropertyValue {\n let value;\n switch (item.propertyType) {\n case KendoProperties.Date:\n value = TimeZoneFix(item.value).toISOString();\n break;\n case KendoProperties.DateRange:\n value = {} as DateRangeValue;\n if ((item.value).dateStart)\n value.dateStart = TimeZoneFix((item.value).dateStart).toISOString();\n if ((item.value).dateEnd)\n value.dateEnd = TimeZoneFix((item.value).dateEnd).toISOString();\n break;\n case KendoProperties.File:\n case KendoProperties.Files:\n value = (item.value)?.map((item) => {\n const file: FilePropertyValue = {fileName: item.name};\n if (item?.size) file.file = item;\n return file;\n });\n break;\n default:\n value = item.value;\n }\n return {...item, value: value};\n }\n\n private mapPropertyValuesByType(properties: ApplicationFormProperty[]): ApplicationPropertyValueDto {\n const values: ApplicationPropertyValueDto = {};\n properties.forEach((item) => {\n switch (item.propertyType) {\n case KendoProperties.Boolean:\n if (!values.boolProperties) values.boolProperties = [];\n values.boolProperties.push(item);\n break;\n case KendoProperties.Number:\n if (!values.intProperties) values.intProperties = [];\n values.intProperties.push(item);\n break;\n case KendoProperties.Decimal:\n if (!values.decimalProperties) values.decimalProperties = [];\n values.decimalProperties.push(item);\n break;\n case KendoProperties.Date:\n if (!values.dateProperties) values.dateProperties = [];\n values.dateProperties.push(item);\n break;\n case KendoProperties.DateRange:\n if (!values.dateRangeProperties) values.dateRangeProperties = [];\n values.dateRangeProperties.push(item);\n break;\n case KendoProperties.Dropdown:\n case KendoProperties.Combobox:\n if (!values.dictGuidProperties) values.dictGuidProperties = [];\n values.dictGuidProperties.push(item);\n break;\n case KendoProperties.Multiselect:\n if (!values.dictGuidArrayProperties) values.dictGuidArrayProperties = [];\n values.dictGuidArrayProperties.push(item);\n break;\n case KendoProperties.File:\n case KendoProperties.Files:\n if (!values.fileProperties) values.fileProperties = [];\n values.fileProperties.push(item);\n break;\n case KendoProperties.Table:\n if (!values.tableProperties) values.tableProperties = [];\n values.tableProperties.push(item);\n break;\n default:\n if (!values.stringProperties) values.stringProperties = [];\n values.stringProperties.push(item);\n }\n });\n return values;\n }\n\n private capitalize(key: string) {\n return `${key[0].toUpperCase()}${key.slice(1)}`;\n }\n\n public valueViewConverter(item: Property, editable: boolean) {\n const defaultValue = editable && item.defaultValue ? item.defaultValue : null;\n switch (item.propertyTypeEnum) {\n case KendoProperties.Textbox:\n case KendoProperties.Textarea:\n return (item.value ? item.value?.stringValue?.value : defaultValue?.string) ?? null;\n case KendoProperties.Number:\n return (item.value ? item.value?.intValue?.value : defaultValue?.int) ?? null;\n case KendoProperties.Decimal:\n return (item.value ? item.value?.decimalValue?.value : defaultValue?.decimal) ?? null;\n case KendoProperties.Date:\n return DateFromUTCAsLocal(item.value ? item.value?.dateValue?.value : defaultValue?.dateTime) ?? null;\n case KendoProperties.DateRange:\n return {\n dateStart: DateFromUTCAsLocal(item.value?.dateRangeValue?.dateStart) ?? null,\n dateEnd: DateFromUTCAsLocal(item.value?.dateRangeValue?.dateEnd) ?? null\n };\n case KendoProperties.Boolean:\n return item.value?.boolValue?.value ?? null;\n case KendoProperties.File:\n case KendoProperties.Files:\n return item.value?.fileValue?.value\n ? item.value?.fileValue?.value.map((item) => {\n const file: ExternalFile = new File([''], item.fileName);\n file.id = item.id;\n return file;\n })\n : null;\n case KendoProperties.Dropdown:\n case KendoProperties.Combobox:\n return (item.value\n ? item.value?.dictGuidValue?.value\n : defaultValue?.dynamicDictValueIds?.length ? defaultValue?.dynamicDictValueIds[0] : null) ?? null;\n case KendoProperties.Multiselect:\n return (item.value\n ? item.value?.dictGuidArrayValue?.value.map((item) => item.value)\n : item.defaultValue?.dynamicDictValueIds) ?? null;\n case KendoProperties.Table:\n return item.value?.tableValue?.value ?? [];\n default:\n return null;\n }\n }\n\n public mapPropertyValue(item: Property, editable: boolean = false): ApplicationFormProperty {\n return {\n applicationConstructorPropertyId: item.externalId,\n propertyType: item.propertyTypeEnum,\n value: this.valueViewConverter(item, editable && this.getPropertyAccess(item))\n };\n }\n\n public getPropertyAccess(item: Property) {\n return item.isEditableForAll || item.isEditableForInitiator;\n }\n\n public mapFormValues(form: GroupPropertyForm[]) {\n return form.flatMap(group => group.properties).map(this.mapFormPropertyValue);\n }\n\n public getFormData(form: ApplicationForm) {\n form.applicationPropertiesValueDto = form.applicationPropertiesValueDto\n .filter((property) =>\n property.value !== undefined\n && property.value !== null\n && property.value !== ''\n && (property.value instanceof Date\n || typeof property.value !== 'object' || Object.values(property.value).filter((i) => i != null).length)\n && (!Array.isArray(property.value) || property.value.length))\n .map((property) => this.mapPropertyValueForRequest(property));\n\n const values = this.mapPropertyValuesByType(form.applicationPropertiesValueDto);\n\n const data = new FormData();\n let valuesKey = '';\n Object.entries(form).forEach(([key, value]) => {\n if (key !== 'applicationPropertiesValueDto') {\n if (['relatedApplicationIds', 'disciplineTableSemesters'].includes(key)) {\n value.forEach((arrayValue: string, i: number) => {\n data.append(`${key}[${i}]`, arrayValue);\n });\n return;\n }\n if (value) data.append(key, value);\n } else {\n valuesKey = this.capitalize(key);\n }\n });\n\n Object.entries(values).forEach(([key, value]) => {\n (value).forEach((item, i) => {\n Object.entries(item).forEach(([itemKey, itemValue]) => {\n const itemKeyName = `${valuesKey}.${this.capitalize(key)}[${i}].${this.capitalize(itemKey)}`;\n if (Array.isArray(itemValue)) {\n itemValue.forEach((arrayValue, j) => {\n if (typeof arrayValue === 'object') {\n Object.entries(arrayValue).forEach(([arrayItemKey, arrayItemValue]) => {\n const arrayItemKeyName = `${itemKeyName}[${j}].${this.capitalize(arrayItemKey)}`;\n if (arrayItemValue instanceof File) {\n data.append(arrayItemKeyName, arrayItemValue, arrayItemValue.name);\n } else {\n data.append(arrayItemKeyName, arrayItemValue);\n }\n });\n } else {\n data.append(`${itemKeyName}[${j}]`, arrayValue);\n }\n });\n } else if (typeof itemValue === 'object') {\n const itemKeyName = `${valuesKey}.${this.capitalize(key)}[${i}]`;\n Object.entries(itemValue).forEach(([objectItemKey, objectItemValue]) => {\n const objectItemKeyName = `${itemKeyName}.${this.capitalize(objectItemKey)}`;\n data.append(objectItemKeyName, objectItemValue);\n });\n } else {\n data.append(itemKeyName, itemValue);\n }\n });\n });\n });\n return data;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {BehaviorSubject} from 'rxjs';\nimport {PropertiesService} from './properties.service';\nimport {ApplicationFormProperty, ApplicationTabData} from '../../models/mfc/applicationForm/application-form.model';\nimport {TabsSettings} from '../../models/mfc/applicationConstructor/tabs-settings.model';\nimport {ApplicationApprovalSettings} from '../../models/mfc/applicationForm/approvalList.model';\nimport {KendoProperties} from \"../../models/mfc/enums/kendo-properties.enum\";\nimport {EnableDisciplineTable} from \"../../models/mfc/enums/enable-discipline-table.enum\";\nimport {editableStatuses} from '../../models/mfc/dicts/application-status.model';\nimport {ApplicationStatusesEnum} from '../../models/mfc/enums/application-statuses.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationEditFormService {\n\n private tabsData: ApplicationTabData[] = [];\n private hasChanges = false;\n private isAdd = true;\n\n public isValid = true;\n public disciplineTableSemesters: number[] = [];\n public enableDisciplineTable?: EnableDisciplineTable;\n public studentId?: string;\n public currentTab = 0;\n public editable?: boolean;\n public inWork = false;\n\n public save$ = new BehaviorSubject(null);\n public checkChanges$ = new BehaviorSubject(null);\n\n constructor(\n private propertiesService: PropertiesService\n ) { }\n\n private mapTabsValues(tabs: TabsSettings[], startIndex: number): ApplicationTabData[] {\n const data: ApplicationTabData[] = [];\n tabs.forEach((tab, index) => {\n const values: ApplicationFormProperty[] = [];\n tab.groupProperties.forEach((group) => {\n group.standardProperties.forEach((property) => {\n values.push(this.propertiesService.mapPropertyValue(property, this.editable));\n });\n group.additionalProperties.forEach((property) => {\n values.push(this.propertiesService.mapPropertyValue(property, this.editable));\n });\n });\n data.push({index: index + startIndex, applicationPropertiesValueDto: values});\n });\n return data;\n }\n\n public setTabsData(tabs: TabsSettings[], startIndex: number) {\n this.tabsData = this.mapTabsValues(tabs, startIndex);\n }\n\n public getTabsValues(): ApplicationFormProperty[] {\n return this.tabsData.flatMap((item) => item.applicationPropertiesValueDto)\n .map(item => ({\n ...item,\n value: item.propertyType === KendoProperties.Table\n ? JSON.stringify(item.value ?? [])\n : item.value\n }));\n }\n\n public saveTabData(index: number, data: ApplicationFormProperty[]) {\n const tabIndex = this.tabsData.findIndex((item) => item.index === index);\n if (tabIndex >= 0) {\n this.tabsData[tabIndex].applicationPropertiesValueDto = data;\n } else {\n this.tabsData.push({index, applicationPropertiesValueDto: data});\n }\n }\n\n public getTabValues(index: number) {\n return this.tabsData.find((item) => item.index === index)?.applicationPropertiesValueDto;\n }\n\n public clearTabsData() {\n this.tabsData = [];\n }\n\n public setHasChanges(value: boolean) {\n this.hasChanges = this.hasChanges || value;\n }\n\n public resetHasChanges() {\n this.hasChanges = false;\n }\n\n public hasFormChanges(index: number) {\n this.checkChanges$.next(index);\n return this.hasChanges;\n }\n\n public mapApprovalSettings(settings: ApplicationApprovalSettings[]) {\n let index = settings.map(a =>\n a.completedApprovalStep?.approvalResult).lastIndexOf(true);\n\n if (index < 0) {\n index = 0;\n }\n\n let currentStage = settings[index].numberInApprovalSequence;\n\n const allApproved = settings.filter(a => a.numberInApprovalSequence\n === currentStage && !a.completedApprovalStep?.approvalResult).length === 0;\n\n if (allApproved) {\n const currentIndex = settings.map(item => item.numberInApprovalSequence).lastIndexOf(currentStage) + 1;\n currentStage = settings[currentIndex] ? settings[currentIndex].numberInApprovalSequence : currentStage++;\n }\n\n settings.forEach((item) => {\n item.isCurrentStage = (item.numberInApprovalSequence === currentStage && !item.completedApprovalStep?.approvalResult);\n });\n\n return settings;\n }\n\n public isApplicationEditable(status: ApplicationStatusesEnum) {\n this.isAdd = false;\n this.editable = editableStatuses.includes(status);\n return this.editable;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from '../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {catchError, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {handleError} from '../../helpers/errorHandle-helper';\nimport {ApplicationConstructorSettings} from '../../models/mfc/applicationConstructor/application-constructor-settings.model';\nimport {Property} from '../../models/mfc/applicationConstructor/tabs-settings.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationConstructorService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.applicationConstructor}/`;\n\n constructor(private http: HttpClient) { }\n\n //TODO: временно\n private mapData(data: any): ApplicationConstructorSettings {\n const tabs = data.tabs.map((tab: any) => ({...tab, externalId: tab.id}));\n tabs.forEach((tab: any) =>\n tab.groupProperties.forEach((group: any) => {\n group.externalId = group.id;\n group.standardProperties = group.properties.map((property: any) => this.mapProperty(property));\n group.additionalProperties = group.additionalProperties.map((property: any) => this.mapProperty(property));\n }));\n return {...data, tabs: tabs};\n }\n\n private mapProperty(property: any): Property {\n const dictProperty = property.dictProperty;\n const prop = {\n ...property,\n externalId: property.id,\n name: dictProperty.name,\n propertyTypeEnum: dictProperty.propertyTypeEnum,\n dictPropertyEnum: dictProperty.dictPropertyEnum\n };\n if (dictProperty.dict?.dictValues) prop.dict = dictProperty.dict?.dictValues;\n return prop;\n }\n\n\n public getApplicationConstructor(typeId: string): Observable {\n return this.http.get(`${this.baseUrl}${typeId}/`)\n .pipe(map((data) => this.mapData(data)), catchError(handleError));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {handleError} from '../../helpers/errorHandle-helper';\nimport {catchError, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {Property} from '../../models/mfc/applicationConstructor/tabs-settings.model';\nimport {ApplicationStatusesEnum} from '../../models/mfc/enums/application-statuses.enum';\nimport {\n ApplicationForm,\n ApplicationNumber,\n GetApplication, RelatedApplication\n} from '../../models/mfc/applicationForm/application-form.model';\nimport {statusActions} from '../../models/mfc/dicts/application-status.model';\nimport {PropertiesService} from './properties.service';\nimport {NotificationsService} from '../Notifications/notifications.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationFormService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.application}/`;\n\n constructor(\n private http: HttpClient,\n private notificationsService: NotificationsService,\n private propertiesService: PropertiesService\n ) { }\n\n //TODO: временно\n private mapData(data: any): GetApplication {\n const tabs = data.application.tabs;\n const relatedApplications = this.mapApplicationNumbers(data.application.relatedApplications ?? []);\n tabs.forEach((tab: any) => tab.groupProperties.forEach((group: any) => {\n group.standardProperties = group.standardProperties.map((property: any) => this.mapProperty(property));\n group.additionalProperties = group.additionalProperties.map((property: any) => this.mapProperty(property));\n }));\n return {...data.application, tabs: tabs, relatedApplications: relatedApplications};\n }\n\n private mapProperty(property: any): Property {\n const dict = property.dict?.dictValues;\n const prop = property;\n if (dict) prop.dict = dict;\n return prop;\n }\n\n private mapApplicationNumbers(data: ApplicationNumber[]|RelatedApplication[]) {\n const result = data;\n data.forEach((item) => item.applicationNumber = `Заявка ${item.applicationNumber}`);\n return result as ApplicationNumber[] & RelatedApplication[];\n }\n\n private createApplication(application: ApplicationForm) {\n return this.http.post(this.baseUrl, this.propertiesService.getFormData(application))\n .pipe(catchError(handleError));\n }\n\n private updateApplication(applicationId: string, application: ApplicationForm) {\n return this.http.put(`${this.baseUrl}${applicationId}`, this.propertiesService.getFormData(application))\n .pipe(catchError(handleError));\n }\n\n public getApplicationById(applicationId: string): Observable {\n return this.http.get(`${this.baseUrl}${applicationId}`)\n .pipe(map((d) => this.mapData(d)), catchError(handleError));\n }\n\n public getApplicationNumbers(): Observable {\n return this.http.get(`${this.baseUrl}GetStudentApplicationNumberList/`)\n .pipe(map((d) => this.mapApplicationNumbers(d ?? [])), catchError(handleError));\n }\n\n public saveApplication(application: ApplicationForm, applicationId?: string) {\n if (applicationId) {\n return this.updateApplication(applicationId, application);\n } else {\n return this.createApplication(application);\n }\n }\n\n public deleteApplication(applicationId: string) {\n return this.http.delete(`${this.baseUrl}${applicationId}`)\n .pipe(catchError(handleError));\n }\n\n public changeStatus(id: string, status: ApplicationStatusesEnum) {\n return this.http.put(`${this.baseUrl}${id}/${statusActions.get(status)}`, {})\n .pipe(catchError(handleError));\n }\n\n public downloadDocumentSign(applicationId: string, documentId: string) {\n return this.http.get(`${this.baseUrl}${applicationId}/document/${documentId}/sign`, {responseType: 'blob'})\n .pipe(\n catchError((err) => {\n this.notificationsService.showError(err.error.Message ?? err.error);\n return handleError(err);\n }));\n }\n\n public downloadPropertyFile(documentId: string) {\n return this.http.get(`${this.baseUrl}DownloadPropertyFile/${documentId}`, {responseType: 'blob'})\n .pipe(\n catchError((err) => {\n this.notificationsService.showError(err.error.Message ?? 'Не удалось скачать файл');\n return handleError(err);\n }));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {TypeReceipt} from '../../../models/mfc/dicts/type-receipt.model';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TypeReceiptService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/TypeReceipt/`;\n\n constructor(private http: HttpClient) { }\n\n public getAll(): Observable {\n return this.http.get(this.baseUrl);\n }\n\n public getById(id: string): Observable {\n return this.http.get(`${this.baseUrl}${id}`);\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { ComboBoxComponent } from '@progress/kendo-angular-dropdowns';\n\n@Directive({\n selector: 'kendo-combobox[openOnFocus]'\n})\nexport class OpenOnFocusDirective {\n\n @Input() openOnFocus!: ComboBoxComponent;\n\n @HostListener('focus') onFocus() {\n this.openOnFocus.toggle(true);\n }\n\n @HostListener('blur') onBlur() {\n this.openOnFocus.toggle(false);\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {ApprovalStatus} from '../../../models/mfc/dicts/approval-status.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApprovalStatusService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/ApprovalStatus/`;\n\n constructor(private http: HttpClient) { }\n\n public getApprovalStatuses(): Observable {\n return this.http.get(this.baseUrl).pipe(map((data) => data ?? []));\n }\n\n public getApprovalStatus(id: string): Observable {\n return this.http.get(`${this.baseUrl}${id}`);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {Role} from '../../../models/mfc/dicts/role.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RoleService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/Role/`;\n\n constructor(private http: HttpClient) { }\n\n public getRoles(): Observable {\n return this.http.get(this.baseUrl);\n }\n\n public getRole(id: string): Observable {\n return this.http.get(`${this.baseUrl}${id}`);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '../../../../environments/environment';\nimport {HttpClient} from '@angular/common/http';\nimport {DictSignatoryRole} from '../../../models/mfc/dicts/signatory-role.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SignatoryRoleService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.dict}/DictSignatoryRole/`;\n\n constructor(private http: HttpClient) { }\n\n public getSignatoryRoles() {\n return this.http.get(this.baseUrl);\n }\n}\n","\n \n \n {{ dataItem[column.field]\n ? dictRolesMap.get(dataItem[column.field])\n : dictSignatoryRolesMap.get(dataItem.dictSignatoryRoleId)}}\n (исполнитель)\n \n \n \n \n \n {{dataItem.completedApprovalStep?.approvalDateTime || dataItem.inWorkInfo?.dateTime | date:'dd.MM.yyyy (HH:mm)'}}\n \n \n \n \n \n \n \n {{dataItem.completedApprovalStep\n ? dataItem.completedApprovalStep.approvalResult ? dataItem.yesText : dataItem.noText\n : dataItem.isCurrentStage ? dataItem.onApprovalText : dataItem.notMarkedText\n }}\n \n \n ({{dataItem.completedApprovalStep.personName}}, {{dataItem.completedApprovalStep.post}})\n \n \n ({{dataItem.inWorkInfo.lastName}} {{dataItem.inWorkInfo.firstName}} {{dataItem.inWorkInfo.middleName}}, {{dataItem.inWorkInfo.post}})\n \n \n \n \n \n\n","import {ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\nimport {lastValueFrom} from 'rxjs';\nimport {createMap} from '../../../../helpers/map-helper';\nimport {ApplicationApprovalSettings} from '../../../../models/mfc/applicationForm/approvalList.model';\nimport {ApprovalStatus} from '../../../../models/mfc/dicts/approval-status.model';\nimport {ApprovalStatusService} from '../../../../services/mfc/dicts/approval-status.service';\nimport {SignatoryRoleService} from '../../../../services/mfc/dicts/signatory-role.service';\nimport {RoleService} from '../../../../services/mfc/dicts/role.service';\nimport {ApplicationEditFormService} from '../../../../services/mfc/application-edit-form.service';\n\n@Component({\n selector: 'mfc-approval-list',\n templateUrl: './approval-list.component.html',\n styleUrls: ['./approval-list.component.scss']\n})\nexport class ApplicationFormApprovalListComponent implements OnInit, OnChanges {\n\n @Input() public approvalSettings: ApplicationApprovalSettings[] = [];\n\n protected dictApprovalStatuses: ApprovalStatus[] = [];\n protected dictRolesMap: Map = new Map([]);\n protected dictSignatoryRolesMap: Map = new Map([]);\n\n public loading = false;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private approvalStatusService: ApprovalStatusService,\n private dictRoleService: RoleService,\n private dictSignatoryRoleService: SignatoryRoleService,\n private editFormService: ApplicationEditFormService\n ) { }\n\n async ngOnInit() {\n await this.getRoles();\n await this.getSignatoryRoles();\n this.getApprovalStatuses();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.approvalSettings = this.editFormService.mapApprovalSettings(this.approvalSettings);\n }\n\n private async getRoles() {\n await lastValueFrom(this.dictRoleService.getRoles()).then((response) => {\n this.dictRolesMap = createMap({value: response, valueField: 'id', textField: 'name'});\n });\n }\n\n private async getSignatoryRoles() {\n await lastValueFrom(this.dictSignatoryRoleService.getSignatoryRoles()).then((response) => {\n this.dictSignatoryRolesMap = createMap({value: response, valueField: 'externalId', textField: 'name'});\n });\n }\n\n protected getApprovalStatuses() {\n this.approvalStatusService.getApprovalStatuses().subscribe((response) => {\n this.dictApprovalStatuses = response;\n this.cdr.detectChanges();\n });\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {Comment, CommentReadDto, CommentRequest} from \"../../models/mfc/applicationForm/comment.model\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {NotificationsService} from \"../Notifications/notifications.service\";\nimport {catchError} from \"rxjs\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\nimport {tap} from \"rxjs/operators\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommentsService {\n\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.applicationComments}/`;\n\n constructor(private http: HttpClient, private notificationsService: NotificationsService) {}\n\n getComments(applicationId: string) {\n return this.http.get(`${this.baseUrl}${applicationId}`)\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n\n getCommentFile(commentId: string, commentFileId: string) {\n return this.http.get(`${this.baseUrl}${commentId}/${commentFileId}`, {responseType: 'blob'})\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n\n addComment(comment: FormData) {\n return this.http.post(this.baseUrl, comment)\n .pipe(\n tap(() => this.notificationsService.showSuccess('Успешно')),\n catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n\n deleteComment(commentId: string) {\n return this.http.delete(`${this.baseUrl}${commentId}`)\n .pipe(\n tap(() => this.notificationsService.showSuccess('Успешно')),\n catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n}","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable, Subject} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MfcNotificationService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.student}/GetNotificationsCount`;\n\n private observer = new Subject();\n public subscriber$ = this.observer.asObservable();\n\n constructor(private http: HttpClient) {}\n\n public refreshBadge() {\n this.observer.next(0);\n }\n\n public getNotificationCount(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","
\n
\n \n \n \n
\n
Вы закрепили больше {{fileRestrictions.maxCount}} файлов
\n
\n
{{fileNotes}}
\n \n
\n
\n \n
\n \n \n
{{comment.text}}
\n
\n Удалить\n
\n
\n \n \n \n
{{file.fileName}}
\n
\n
\n
{{comment.author}}, {{comment.sentAt | date:'dd.MM.yyyy HH:mm'}}
\n
\n
\n
\n
\n
\n","import {ChangeDetectorRef, Component, OnInit} from '@angular/core';\nimport {FormControl, FormGroup, Validators} from \"@angular/forms\";\nimport {CommentsService} from \"../../../../services/mfc/comments.service\";\nimport {Comment, CommentFile, CommentRequest} from \"../../../../models/mfc/applicationForm/comment.model\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {saveAs} from \"@progress/kendo-file-saver\";\nimport {MfcNotificationService} from \"../../../../services/mfc/mfc-notification.service\";\n\n@Component({\n selector: 'mfc-comments',\n templateUrl: './comments.component.html',\n styleUrls: ['./comments.component.scss']\n})\nexport class ApplicationFormCommentsComponent implements OnInit {\n\n protected comments: Comment[] = [];\n\n private applicationFormId: string = this.activatedRoute.snapshot.paramMap.get('id') ?? '';\n protected filesValid = true;\n\n protected formGroup = new FormGroup({\n applicationId: new FormControl(this.applicationFormId, {nonNullable: true, validators: Validators.required}),\n text: new FormControl('', {nonNullable: true}),\n files: new FormControl([], {nonNullable: true})\n })\n\n protected readonly allowedExtensions = ['.docx', '.doc', '.pdf', '.gif', '.jpg', '.png', '.tif', '.xls', '.xlsx'];\n protected readonly fileRestrictions = {\n allowedExtensions: this.allowedExtensions,\n accept: this.allowedExtensions.join(', '),\n maxCount: 10\n };\n protected readonly fileNotes = `До ${this.fileRestrictions.maxCount} файлов форматов ${this.fileRestrictions.accept}`;\n\n constructor(\n private commentsService: CommentsService,\n private activatedRoute: ActivatedRoute,\n private cdr: ChangeDetectorRef,\n private mfcNotificationService: MfcNotificationService\n ) { }\n\n ngOnInit(): void {\n this.getComments();\n }\n\n private getComments() {\n this.commentsService.getComments(this.applicationFormId).subscribe(data => {\n this.comments = data.comments;\n this.cdr.detectChanges();\n this.mfcNotificationService.refreshBadge();\n });\n }\n\n protected onSave() {\n const formData = this.getFormData(this.formGroup.getRawValue());\n this.commentsService.addComment(formData).subscribe(() => {\n this.formGroup.reset();\n this.getComments();\n });\n }\n\n private getFormData(body: CommentRequest) {\n const data = new FormData();\n Object.entries(body).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.filter(a => a instanceof File).forEach((item) => {\n data.append(`files`, item);\n });\n } else {\n data.append(key, value);\n }\n });\n return data;\n }\n\n protected deleteComment(comment: Comment) {\n this.commentsService.deleteComment(comment.id).subscribe(() => this.getComments());\n }\n\n protected getFile(commentId: string, file: CommentFile) {\n this.commentsService.getCommentFile(commentId, file.id).subscribe((response) =>\n saveAs(response, file.fileName)\n );\n }\n\n protected filesChanged(files: File[]) {\n this.filesValid = files ? files.length < this.fileRestrictions.maxCount : true;\n }\n}\n","export enum ApplicationApprovalTypeEnum {\n // Отправка на подпись\n SendingForSignature = 1,\n // Отправка на согласования\n SendingForApproval,\n // Согласование по кнопке\n ButtonApproval,\n // Подписание физической подписью\n SigningAPhysicalSignature,\n // Подписание простой ЭП\n SigningASimpleElectronicSignature,\n // Подписание усиленной ЭП\n SigningOfAnEnhancedElectronicSignature,\n // Без согласования\n WithoutApproval\n}\n","import {Directive, Input} from '@angular/core';\n\n@Directive({\n selector: 'ng-template[typedTemplate]'\n})\nexport class TypedTemplateDirective {\n\n @Input('typedTemplate')\n typeToken?: TypeToken;\n\n static ngTemplateContextGuard(\n _dir: TypedTemplateDirective,\n _ctx: unknown\n ): _ctx is TypeToken {\n return true;\n }\n}","
0\">\n \n
\n

{{group.statusName}}

\n
\n \n \n
\n
\n
\n \n
\n
\n
{{doc.name}}
\n \n \n\n \n
\n
\n
\n
\n\n\n
\n
{{approvalSettings.document.name}}
\n \n \n
Печатная форма справки с введенными и сохраненными в форме заявки данными.
\n
\n
\n\n \n \n
\n\n\n\n \n
\n
Файл с открепленной электронной подписью
\n \n
\n
\n
{{approvalSettings.document?.name}} со штампом об эл.подписи и эл. печати
\n \n
\n
\n\n
Статус подписи
\n
\n \n
{{signatoryRolesMap.get(approvalSettings.dictSignatoryRoleId) ?? rolesMap.get(approvalSettings.dictRoleId)}}
\n \n
{{approvalSettings.approvalType ? signingsMap.get(approvalSettings.approvalType) : ''}}
\n\n

\n {{approvalSettings.completedApprovalStep?.personName}}, подписано {{approvalSettings.completedApprovalStep.enhancedSignatureInfo?.signDate ?? approvalSettings.completedApprovalStep.approvalDateTime | date:'dd.MM.yyyy HH:mm' }}\n

\n\n

\n Действителен до {{approvalSettings.completedApprovalStep?.enhancedSignatureInfo?.certificateExpirationDate | date:'dd.MM.yyyy HH:mm'}}\n

\n
\n
\n \n \n
{{approvalSettings.statusName}}
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit\n} from '@angular/core';\nimport {lastValueFrom} from 'rxjs';\nimport {createMap} from '../../../../helpers/map-helper';\nimport {DocumentsService} from '../../../../services/mfc/documents.service';\nimport {ApplicationApprovalSettings} from '../../../../models/mfc/applicationForm/approvalList.model';\nimport {ApplicationDocument, DocumentGroup, DocumentItem} from '../../../../models/mfc/applicationForm/document.model';\nimport {DictSignatoryRole} from '../../../../models/mfc/dicts/signatory-role.model';\nimport {ApplicationApprovalTypeEnum} from 'src/app/models/mfc/enums/application-approval-type.enum';\nimport {SignatoryRoleService} from '../../../../services/mfc/dicts/signatory-role.service';\nimport {RoleService} from '../../../../services/mfc/dicts/role.service';\nimport {Role} from '../../../../models/mfc/dicts/role.model';\nimport {saveAs} from '@progress/kendo-file-saver';\nimport {ApplicationFormService} from '../../../../services/mfc/application-form.service';\nimport {ApplicationEditFormService} from '../../../../services/mfc/application-edit-form.service';\n\n@Component({\n selector: 'mfc-documents',\n templateUrl: './documents.component.html',\n styleUrls: ['./documents.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ApplicationFormDocumentsComponent implements OnInit, OnChanges {\n\n @Input() approvalSettings: ApplicationApprovalSettings[] = [];\n @Input() documents: ApplicationDocument[] = [];\n @Input() applicationId = '';\n\n protected documentGroups: DocumentGroup[] = [];\n protected signatoryRoles: DictSignatoryRole[] = [];\n protected roles: Role[] = [];\n\n // Ng-Templates\n protected readonly signatureTemplate?: {approvalSettings: DocumentItem};\n protected readonly documentTemplate?: {approvalSettings: DocumentItem};\n\n protected signatoryRolesMap = new Map([]);\n protected rolesMap = new Map([]);\n protected signingsMap = new Map([\n [ApplicationApprovalTypeEnum.SigningOfAnEnhancedElectronicSignature, 'Подписано усиленной ЭП'],\n [ApplicationApprovalTypeEnum.SigningASimpleElectronicSignature, 'Подписано простой ЭП'],\n [ApplicationApprovalTypeEnum.SigningAPhysicalSignature, 'Подписано физической подписью'],\n ]);\n\n protected readonly ApplicationApprovalTypeEnum = ApplicationApprovalTypeEnum;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private documentsService: DocumentsService,\n private signatoryRoleService: SignatoryRoleService,\n private roleService: RoleService,\n private applicationFormService: ApplicationFormService,\n private editFormService: ApplicationEditFormService\n ) { }\n\n async ngOnInit() {\n await this.getSignatoryRoles();\n await this.getRoles();\n this.cdr.detectChanges();\n }\n\n ngOnChanges(): void {\n if (this.approvalSettings.length) {\n this.documentGroups = this.mapApprovalSettings(this.approvalSettings);\n }\n }\n\n private async getSignatoryRoles() {\n await lastValueFrom(this.signatoryRoleService.getSignatoryRoles()).then((response) => {\n this.signatoryRoles = response;\n this.signatoryRolesMap = createMap({value: response, valueField: 'externalId', textField: 'name'});\n });\n }\n\n private async getRoles() {\n await lastValueFrom(this.roleService.getRoles()).then((response) => {\n this.roles = response;\n this.rolesMap = createMap({value: response, valueField: 'id', textField: 'name'});\n });\n }\n\n private mapApprovalSettings(approvalSettings: ApplicationApprovalSettings[]) {\n approvalSettings = this.editFormService.mapApprovalSettings(approvalSettings);\n\n const documentItems = approvalSettings.map((item) => {\n return {\n ...item,\n signDate: item.completedApprovalStep?.enhancedSignatureInfo?.signDate,\n expirationDate: item.completedApprovalStep?.enhancedSignatureInfo?.certificateExpirationDate,\n document: this.documents.find(a => a.externalId === item.applicationConstructorDocumentId),\n statusName: (item.completedApprovalStep\n ? item.completedApprovalStep.approvalResult ? item.yesText : item.noText\n : item.isCurrentStage ? item.onApprovalText : item.notMarkedText) ?? ''\n } as DocumentItem;\n }).filter((a) => a.isSignatoryRequired);\n\n return this.groupDocuments(documentItems);\n }\n\n private groupDocuments(docs: DocumentItem[]) {\n const statusGroups: DocumentGroup[] = [];\n const groups = docs.reduce((acc, item) => {\n acc[item.statusName] = acc[item.statusName] ?? [];\n acc[item.statusName].push(item);\n return acc;\n }, {} as Record);\n Object.entries(groups).forEach(([key, value]) => {\n statusGroups.push({statusName: key, items: value});\n });\n return statusGroups;\n }\n\n protected downloadDocument(item: DocumentItem) {\n if (!item.document) {\n return;\n }\n\n if (item.completedApprovalStep) {\n item.approvalType === ApplicationApprovalTypeEnum.SigningOfAnEnhancedElectronicSignature\n ? this.getCompletedTemplate(item.document)\n : this.downloadDocumentByPdf(item.document);\n return;\n }\n\n if (item.applicationConstructorDocumentId) {\n this.documentsService.downloadDocument(this.applicationId, item.applicationConstructorDocumentId).subscribe((response) => {\n saveAs(response, item.document?.name ?? '');\n });\n }\n }\n\n protected getCompletedTemplate(document?: ApplicationDocument) {\n if (document?.externalId) {\n this.documentsService.getCompletedTemplate(this.applicationId, document.externalId).subscribe((response) => {\n saveAs(response, document.name);\n });\n }\n }\n\n protected downloadReadyDocument(document: ApplicationDocument) {\n if (document.externalId) {\n this.documentsService.downloadDocument(this.applicationId, document.externalId).subscribe((response) => {\n saveAs(response, document.name);\n });\n }\n }\n\n protected downloadDocumentSign(document?: ApplicationDocument) {\n if (document?.externalId) {\n this.applicationFormService.downloadDocumentSign(this.applicationId, document.externalId).subscribe((response) => {\n saveAs(response, `${document.name}.docx.sig`);\n });\n }\n }\n\n protected downloadDocumentByPdf(document?: ApplicationDocument) {\n if (document?.externalId) {\n this.documentsService.getApplicationDocumentByPdf(this.applicationId, document.externalId).subscribe((response) => {\n saveAs(response, document.name);\n });\n }\n }\n}\n","import {HttpResponse} from \"@angular/common/http\";\n\n// Загрузка файла для экспорта\nexport function DownloadFile(response: HttpResponse | File) {\n if (response instanceof File) {\n download(response.name, response);\n } else {\n const depositionHeader = response.headers.get('content-disposition');\n const fileNameHeader = depositionHeader?.split(\"''\").at(-1);\n if (fileNameHeader && response.body?.size) {\n const fileName = decodeURIComponent(fileNameHeader);\n download(fileName, response.body);\n }\n }\n}\n\nfunction download(fileName: string, file: any) {\n const a = document.createElement('a');\n const objectUrl = URL.createObjectURL(file);\n a.href = objectUrl;\n a.download = fileName;\n a.click();\n URL.revokeObjectURL(objectUrl);\n}\n","export enum StudentFieldCode {\n AchievementsCount = 'Кол-во достижений',\n ActualAddress = 'Фактический адрес проживания',\n ActualBuilding = 'Строение (фактический адрес проживания)',\n ActualCity = 'Населенный пункт (фактический адрес проживания)',\n ActualCorpus = 'Корпус (фактический адрес проживания)',\n ActualCountry = 'Страна (фактический адрес проживания)',\n ActualDistrict = 'Район (фактический адрес проживания)',\n ActualFlat = 'Квартира (фактический адрес проживания)',\n ActualHouse = 'Дом (фактический адрес проживания)',\n ActualState = 'Регион (фактический адрес проживания)',\n ActualStreet = 'Улица (фактический адрес проживания)',\n ActualZipCode = 'Индекс (фактический адрес проживания)',\n Address = 'Адрес по прописке',\n Building = 'Строение (адрес по прописке)',\n City = 'Населенный пункт (адрес по прописке)',\n Corpus = 'Корпус (адрес по прописке)',\n AddressCountry = 'Страна (адрес по прописке)',\n District = 'Район (адрес по прописке)',\n Flat = 'Квартира (адрес по прописке)',\n House = 'Дом (адрес по прописке)',\n State = 'Регион (адрес по прописке)',\n Street = 'Улица (адрес по прописке)',\n ZipCode = 'Индекс (адрес по прописке)',\n AdmissionStudentId = 'Идентификатор студента в ПК',\n Ball = 'Средний балл',\n Benefit = 'Льготы',\n CardReesterNumber = 'Номер реестра выгрузки в банк',\n CitizenshipType = 'Тип гражданства',\n Compatriot = 'Соотечественник',\n CourseNum = 'Курс',\n DateFinish = 'Дата окончания обучения',\n DateStart = 'Дата начала обучения',\n DiplomaNumber = 'Номер диплома выпускника (оригинал)',\n DiplomaRegNumber = 'Рег. номер диплома выпускника (оригинал)',\n DiplomaSeries = 'Серия диплома выпускника (оригинал)',\n DuplicateNumber = 'Номер диплома выпускника (дубликат)',\n DuplicateRegNumber = 'Рег. номер диплома выпускника (дубликат)',\n DuplicateSeries = 'Серия диплома выпускника (дубликат)',\n ApproveVAK = 'Дата утверждения ВАК',\n EducationDocTypeName = 'Тип документа об образовании',\n EducationDocGraduateYear = 'Год получения документа о предыдущем образовании',\n EducationDocIssueDate = 'Дата выдачи документа об образовании',\n EducationDocIssueOrganization = 'Название предыдущего учебного заведения',\n KandidateDisserDate = 'Дата защиты диссертации',\n EducationDocNumber = 'Номер документа об образовании',\n EducationDocSerial = 'Серия документа об образовании',\n EducationDoc = 'Документ об образовании',\n EducationDocStudyLevelName = 'Уровень предыдущего образования',\n EducationProgramName = 'Профиль (программа)',\n EducationStandard = 'Наименование направления подготовки',\n EducationStandardCipher = 'Код направления подготовки',\n EducationStandardName = 'Направление подготовки',\n EnlargedGroupSpecialization = 'Укрупненная группа специальностей',\n FacultyName = 'Институт/факультет',\n FamilyAddress = 'Информация о родственниках (адрес проживания)',\n FamilyMember = 'Информация о родственниках',\n FamilyFio = 'Информация о родственниках (ФИО)',\n FamilyMemberStatus = 'Информация о родственниках (степень родства)',\n FamilyPhoneNumber = 'Информация о родственниках (номер телефона)',\n FamilyState = 'Семейное положение',\n GraduateThis = 'Предыдущее образование получено в этом учебном заведении',\n GroupName = 'Группа',\n Health = 'Группа здоровья',\n Hostel = 'Номер общежития',\n HostelAvailability = 'Проживает общежитии',\n HostelRoom = 'Номер комнаты в общежитии',\n IdentificationBirthPlace = 'Место рождения',\n IdentificationTypeName = 'Тип документа удостоверения личности',\n IdentificationIssueCode = 'Код подразделения документа (удостоверение личности)',\n IdentificationIssueDate = 'Дата выдачи документа (удостоверение личности)',\n IdentificationIssueOrganization = 'Кем выдан документ (удостоверение личности)',\n IdentificationNumber = 'Номер документа (удостоверение личности)',\n IdentificationSerial = 'Серия документа (удостоверение личности)',\n IdentificationString = 'Удостоверение личности',\n IdentificationsVisaDateEnd = 'Срок действия визы',\n Kafedra = 'Кафедра',\n Languages = 'Изучаемые языки',\n MedicalAvailability = 'Наличие медицинской справки',\n MedicalDate = 'Справка о медицинском осмотре действительна до',\n MilitaryComment = 'Дополнительные сведения (ВУС)',\n MilitaryCommissariatAddress = 'Почтовый адрес военного комиссариата',\n CommissariatName = 'Военный комиссариат',\n MilitaryIssue = 'Дата выдачи документа воинского учета',\n IssueMilitaryFinishDate = 'Дата снятия с воинского учета',\n IssueMilitaryStartDate = 'Дата регистрации сведений, направленных в военный комиссариат',\n MilitaryIssueOrganization = 'Кем выдан документ воинского учета',\n MilitaryRankName = 'Воинское звание',\n MilitarySpecialtyNumber = 'Военно-учетная специальность',\n MilitaryStatusName = 'Категория воинского учета',\n MilitaryStockCategoryName = 'Военная категория',\n MilitaryNumber = 'Номер документа воинского учета',\n MilitaryEnlistmentCategory = 'Годность к военной службе',\n MilitaryProfileName = 'Состав (ВУС)',\n MilitaryRegistrationDocSerial = 'Серия документа воинского учета',\n MilitaryStateName = 'Состоит на воинском учете',\n MilitaryEnlistmentStatusName = 'Отношение к военной службе',\n MilitaryOutgoingRegistryNumber = 'Исходящий регистрационный номер сведений, направленных в военный комиссариат',\n MilitaryReasonForDeregistration = 'Причина снятия с воинского учета',\n NeedHostel = 'Необходимость в общежитии',\n OrganizationName = 'Место работы',\n Post = 'Должность',\n ScientificPersonName = 'Научный руководитель (куратор)',\n SecondHigherEducation = 'Получает второй высшее',\n SportCategory = 'Спортивный разряд',\n SportType = 'Вид спорта',\n StudentAcademicState = 'Академический статус',\n DictOrganizationEmployerKpp = 'КПП работодателя по договору о целевом обучении',\n DictOrganizationEmployerOgrn = 'ОГРН работодателя по договору о целевом обучении',\n DictOrganizationEmployerOrganizationName = 'Работодатель',\n DictOrganizationInn = 'ИНН заказчика целевого обучения',\n DictOrganizationKpp = 'КПП заказчика целевого обучения',\n DictOrganizationOgrn = 'ОГРН заказчика целевого обучения',\n DictOrganizationName = 'Заказчик целевого обучения',\n PaidContract = 'Договор на платное обучение',\n PaidContractCostFull = 'Стоимость обучения в год, руб.',\n PaidContractCostYear = 'Стоим. в сем., руб',\n PaidContractDate = 'Дата договора на платное обучение',\n PaidContractNum = 'Номер договора на платное обучение',\n StudentBudgetCategoryName = 'Категория финансирования',\n StudentBudgetName = 'Источник финансирования',\n StudentBudgetSubCategoryName = 'Подкатегория финансирования',\n StudentId = '№ п/п',\n StudentNumber = 'Номер зачетной книжки',\n Birthday = 'Дата рождения',\n Country = 'Гражданство',\n CountryCode = 'Код ОКСМ',\n Email = 'Адрес электронной почты',\n FirstName = 'Имя',\n FirstNameLatin = 'Имя (латиница)',\n FullName = 'ФИО',\n FullNameLatin = 'ФИО (латиница)',\n Inn = 'ИНН',\n IsMale = 'Пол',\n LastName = 'Фамилия',\n LastNameLatin = 'Фамилия (латиница)',\n Login = 'Идентификатор студента',\n MaidenName = 'Прежняя фамилия',\n MedicalCertificate = 'Данные о справках',\n MiddleName = 'Отчество',\n MiddleNameLatin = 'Отчество (латиница)',\n Phone = 'Телефон',\n SNILS = 'СНИЛС',\n SocialNetwork = 'Социальная сеть',\n StudyForm = 'Форма обучения',\n StudyLevel = 'Уровень обучения',\n TrainingLevel = 'Уровень подготовки',\n YearFinish = 'Год окончания обучения',\n YearStart = 'Год начала обучения',\n OrdersStudyPeriod = 'Срок обучения',\n EducationDocIssueCountry = 'Страна выдачи документа об образовании',\n}\n","import {StudentFieldCode} from './enums/student-field-codes.enum';\n\nexport const studentFieldKeys = Object.keys(StudentFieldCode);\n\nexport const studentFieldsMap = new Map(Object.entries(StudentFieldCode)\n .map(([key, value]) => [key, value]));\n","export enum DictPropertyEnum {\n // Предполагаемый профили трудовой деятельности\n WorkProfile = 1,\n // Планируете ли вы обучение в ординатуре/аспирантуре?\n PlansForResidencyOrGraduateStudy,\n // Статьи ТК РФ для справки-вызов\n Articles,\n // Дата\n Date,\n // Номер\n Number,\n // Места для предоставления справки\n PresentationPlace,\n // Фамилия в родительном падеже\n RLastName,\n // Имя в родительном падеже\n RFirstName,\n // Отчество в родительном падеже\n RMiddleName,\n // Обучающиеся\n StudentTable,\n // Затраты\n CostTable,\n // Документ о смене ФИО\n ChangeNameDocument,\n // Продолжительность\n Duration,\n // Причина отчисления\n DeductionReason,\n // Наименование организации, в которой планируете работать\n Organization,\n // Предполагаемая должность\n ProposedPost,\n // Выберите наименование специальности, по которой Вы планируете обучаться\n Specialization,\n}\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {environment} from '../../../../environments/environment';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpecializationService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.education}/GetAllSpecializations`;\n\n constructor(private http: HttpClient) { }\n\n public getAll(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {environment} from \"../../../environments/environment\";\nimport {catchError} from \"rxjs\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AttachedFileService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.commonApplicationConstructor}/AttachedFile/`;\n\n constructor(private http: HttpClient) { }\n\n public downloadFile(fileId: string) {\n return this.http.get(`${this.baseUrl}${fileId}`, {responseType: 'blob'})\n .pipe(catchError(handleError));\n }\n}","export class CostTableRow {\n expenseType = '';\n quantity = '';\n costPerStudent = 0;\n costPerGroup = 0;\n totalCost = 0;\n}\n\nexport class StudentTableRow {\n fullName = '';\n facultyId = '';\n eduGroupName = '';\n}","\n\n \n \n \n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n \n \n
","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output} from \"@angular/core\";\nimport {RemoveEvent} from \"@progress/kendo-angular-grid\";\nimport {CostTableRow} from \"../../../../../../models/mfc/applicationForm/tables.model\";\n\n@Component({\n selector: 'mfc-cost-table',\n templateUrl: './cost-table.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CostTableComponent implements OnInit {\n @Input() editable = false;\n @Input() data: CostTableRow[] = [];\n\n @Output() value = new EventEmitter();\n\n protected gridView: CostTableRow[] = [];\n\n ngOnInit(): void {\n if (!this.data.length) {\n this.addRow();\n }\n this.gridView = this.data;\n }\n\n protected addRow() {\n this.data.push(new CostTableRow());\n this.onValueChange();\n }\n\n protected removeRow({rowIndex}: RemoveEvent) {\n this.data.splice(rowIndex, 1);\n this.onValueChange();\n }\n\n protected onValueChange() {\n this.value.emit(this.data);\n }\n}","import {Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {environment} from \"../../../../environments/environment\";\nimport {Faculty} from \"../../../models/mfc/dicts/faculty.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FacultyService {\n private baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.externalDict}/Faculty/`;\n\n constructor(private http: HttpClient) {}\n\n public getFaculties() {\n return this.http.get(this.baseUrl);\n }\n}\n","\n\n \n \n \n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
*
\n
\n
\n
\n\n \n \n \n \n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output} from \"@angular/core\";\nimport {RemoveEvent} from \"@progress/kendo-angular-grid\";\nimport {StudentTableRow} from \"../../../../../../models/mfc/applicationForm/tables.model\";\nimport {FacultyService} from \"../../../../../../services/mfc/dicts/faculty.service\";\nimport {Faculty} from \"../../../../../../models/mfc/dicts/faculty.model\";\nimport {DropDownFilterSettings} from \"@progress/kendo-angular-dropdowns\";\n\n@Component({\n selector: 'mfc-student-table',\n templateUrl: './student-table.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StudentTableComponent implements OnInit {\n @Input() editable = false;\n @Input() data: StudentTableRow[] = [];\n\n @Output() value = new EventEmitter();\n\n protected gridView: StudentTableRow[] = [];\n protected faculties: Faculty[] = [];\n protected readonly filterSettings: DropDownFilterSettings = {\n caseSensitive: false,\n operator: 'contains',\n };\n\n constructor(\n private facultyService: FacultyService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n if (!this.data.length) {\n this.addRow();\n }\n this.gridView = this.data;\n this.getFaculties();\n }\n\n protected getFaculties() {\n this.facultyService.getFaculties().subscribe(response => {\n this.faculties = response;\n this.cdr.detectChanges();\n });\n }\n\n protected addRow() {\n this.data.push(new StudentTableRow());\n this.onValueChange();\n }\n\n protected removeRow({rowIndex}: RemoveEvent) {\n this.data.splice(rowIndex, 1);\n this.onValueChange();\n }\n\n protected onValueChange() {\n this.value.emit(this.data);\n }\n}","import {Component, Output, EventEmitter, Input, OnInit} from '@angular/core';\n\n\n@Component({\n selector: 'date-range-field',\n templateUrl: './date-range-field.component.html',\n styleUrls: ['./date-range-field.component.scss'],\n})\nexport class DateRangeFieldComponent implements OnInit {\n @Input() value?: {dateStart?: Date; dateEnd?: Date};\n @Input() required = false;\n @Input() editable = false;\n @Output() valueChange = new EventEmitter<{dateStart?: Date; dateEnd?: Date}|null>();\n protected startDate?: Date;\n protected endDate?: Date;\n\n ngOnInit() {\n if (this.value) {\n this.startDate = this.value.dateStart;\n this.endDate = this.value.dateEnd;\n }\n }\n\n protected get min(): Date|null {\n return this.startDate ?? null;\n }\n\n protected get max(): Date|null {\n return this.endDate ?? null;\n }\n\n protected onStartChange(value?: Date): void {\n this.startDate = value;\n this.valueChange.emit({dateStart: value, dateEnd: this.endDate});\n }\n\n protected onEndChange(value?: Date): void {\n this.endDate = value;\n this.valueChange.emit({dateStart: this.startDate, dateEnd: value});\n }\n}\n","
\n \n

{{group.name}}

\n
\n \n \n

{{attachedFile.name}}

\n
\n \n \n \n
\n
\n
\n \n \n

{{studentFieldsMap.get(fieldCode.code) ?? fieldCode.code}}

\n

{{fieldCode.value}}

\n
\n
\n
\n {{order.orderName}}\n
\n \n \n

{{property.value.name}}

\n \n \n

{{property.get('propertyValue')?.value}}

\n\n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n продолжительность\n {{getDuration(property.get('propertyValue')?.value)}}\n дня(-ей)\n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n\n \n \n \n
{{ files[0].name }}
\n
\n
\n До {{\n property.value.propertyTypeEnum === KendoProperties.Files ? fileRestrictions.maxCount + ' файлов' : '1 файла'\n }} форматов {{fileRestrictions.accept}}\n \n Скачать {{property.value.propertyTypeEnum === KendoProperties.Files ? 'все' : ''}}\n \n
\n\n \n \n \n {{ dataItem.name }}\n \n \n \n\n \n \n \n \n \n \n \n\n
\n *\n \n \n
\n
\n
\n
\n
\n
\n","
\n \n \n
\n","import {ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {AbstractControl, FormArray, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {NotificationsService} from '../../../../services/Notifications/notifications.service';\nimport {DownloadFile} from '../../../../helpers/downloadFile-helper';\nimport {ApplicationEditFormService} from '../../../../services/mfc/application-edit-form.service';\nimport {DropDownFilterSettings} from '@progress/kendo-angular-dropdowns';\nimport {KendoProperties} from '../../../../models/mfc/enums/kendo-properties.enum';\nimport {GroupProperty, Property} from '../../../../models/mfc/applicationConstructor/tabs-settings.model';\nimport {PropertiesService} from '../../../../services/mfc/properties.service';\nimport {GroupPropertyForm} from '../../../../models/mfc/applicationForm/application-form.model';\nimport {studentFieldsMap} from '../../../../models/mfc/student-fields';\nimport {ApplicationFormService} from '../../../../services/mfc/application-form.service';\nimport {saveAs} from '@progress/kendo-file-saver';\nimport {ExternalFile} from '../../../../models/mfc/applicationForm/application-property-value.model';\nimport {CostTableRow, StudentTableRow} from '../../../../models/mfc/applicationForm/tables.model';\nimport {DictPropertyEnum} from '../../../../models/mfc/enums/dict-property-enum';\nimport {AttachedFile} from '../../../../models/mfc/applicationForm/attachedfile.model';\nimport {AttachedFileService} from '../../../../services/mfc/attached-file.service';\nimport {getDateDiff} from '../../../../helpers/date-helper';\nimport {SpecializationService} from '../../../../services/mfc/dicts/specialization.service';\n\n@Component({\n selector: 'mfc-dynamic',\n templateUrl: './dynamic-properties.component.html',\n styleUrls: ['./dynamic-properties.component.scss']\n})\nexport class DynamicPropertiesComponent implements OnInit, OnDestroy {\n @Input() groups?: GroupProperty[] = [];\n @Input() editable = false;\n @Input() index = 0;\n @Input() isAdd = false;\n\n private hasChanges = false;\n protected editMode = false;\n protected specializations: string[] = [];\n\n protected readonly KendoProperties = KendoProperties;\n protected readonly DictProperty = DictPropertyEnum;\n protected readonly filterSettings: DropDownFilterSettings = {\n caseSensitive: false,\n operator: 'contains',\n };\n\n private allowedExtensions = ['.docx', '.doc', '.pdf', '.gif', '.jpg', '.png', '.tif', '.xls', '.xlsx'];\n protected readonly fileRestrictions = {\n allowedExtensions: this.allowedExtensions,\n accept: this.allowedExtensions.join(', '),\n maxCount: 10\n };\n\n private saveSubscription$!: Subscription;\n private checkChangesSubscription$!: Subscription;\n\n protected groupsFormGroup = this.createGroupFormGroup();\n protected readonly studentFieldsMap = studentFieldsMap;\n\n constructor(\n private cdRef: ChangeDetectorRef,\n private notificationsService: NotificationsService,\n private propertiesService: PropertiesService,\n private editFormService: ApplicationEditFormService,\n private applicationFormService: ApplicationFormService,\n private specializationService: SpecializationService,\n private attachedFileService: AttachedFileService\n ) { }\n\n ngOnInit(): void {\n this.getDicts();\n this.groupsFormGroup = this.createGroupFormGroup(this.groups);\n this.patchFormValues();\n this.subscribe();\n }\n\n private getDicts() {\n const hasSpecializationField = this.groups?.some((item) =>\n item.standardProperties.some((item) => item.dictPropertyEnum === DictPropertyEnum.Specialization));\n\n if (hasSpecializationField) {\n this.specializationService.getAll().subscribe((data) => {\n this.specializations = data;\n this.specializations.unshift('Не планирую', 'Нет в списке');\n this.cdRef.detectChanges();\n });\n }\n }\n\n private subscribe() {\n this.saveSubscription$ = this.editFormService.save$.subscribe(value => {\n if (this.index === value) {\n this.editFormService.isValid = this.groupsFormGroup.valid;\n this.editFormService.setHasChanges(this.hasChanges);\n this.saveChanges();\n }\n });\n this.checkChangesSubscription$ = this.editFormService.checkChanges$.subscribe(value => {\n if (this.index === value) {\n this.editFormService.setHasChanges(this.hasChanges);\n }\n });\n }\n\n private mapGroupFormArray(groups?: GroupProperty[]) {\n const formArr = new FormArray([]);\n groups?.forEach((item) => {\n formArr.push(this.createFormGroup(item));\n });\n return formArr;\n }\n\n private createGroupFormGroup(groups?: GroupProperty[]) {\n return new FormGroup({\n groups: this.mapGroupFormArray(groups)\n });\n }\n\n private createFormGroup(group: GroupProperty) {\n const properties = [...group.standardProperties, ...group.additionalProperties];\n return new FormGroup({\n properties: this.mapFormArrayProperties(properties)\n });\n }\n\n private mapFormArrayProperties(properties: Property[]) {\n const formArr = new FormArray([]);\n properties.forEach((item) => {\n formArr.push(this.patchFormArrayData(item));\n });\n return formArr;\n }\n\n private patchFormArrayData(item: Property) {\n const arr: { [key: string]: AbstractControl } = {};\n Object.keys(item).forEach((key) => {\n arr[key] = new FormControl(item[key as keyof Property]);\n });\n\n const editable = this.editable && this.propertiesService.getPropertyAccess(item);\n arr['propertyValue'] = new FormControl({\n value: item.value || item.defaultValue ? this.propertiesService.valueViewConverter(item, editable) : null,\n disabled: !editable\n }, (item.required ? Validators.required : null));\n\n arr['editable'] = new FormControl(editable);\n\n return new FormGroup(arr);\n }\n\n private patchFormValues() {\n const data = this.editFormService.getTabValues(this.index);\n if (data) {\n this.groupsFormGroup.controls.groups.controls.forEach((group) => {\n (group.controls['properties']).controls.forEach((property) => {\n const value = data.find((item) =>\n item.applicationConstructorPropertyId === property.value.externalId)?.value;\n property.get('propertyValue')?.patchValue(value ?? null);\n });\n });\n }\n }\n\n private saveChanges() {\n const formValues = this.propertiesService.mapFormValues(this.groupsFormGroup.value.groups);\n this.editFormService.saveTabData(this.index, formValues);\n }\n\n protected formProperties(index: number) {\n return this.groupsFormGroup.get('groups')?.get(`${index}`)?.get('properties');\n }\n\n protected valueChange() {\n this.hasChanges = true;\n }\n\n protected dateRangeChange(value: {dateStart?: Date, dateEnd?: Date}|null, control: AbstractControl) {\n control.patchValue({propertyValue: value});\n const isValid = (!control.get('required')?.value || value?.dateStart)\n && (value?.dateStart || !value?.dateEnd) && (!value?.dateStart || value?.dateEnd) && (value?.dateStart! <= value?.dateEnd!);\n control.setErrors(isValid ? null : { notCorrect: true });\n this.valueChange();\n }\n\n protected getDuration(value: {dateStart?: Date, dateEnd?: Date}|null) {\n return value?.dateStart && value?.dateEnd && (value.dateStart <= value.dateEnd)\n ? getDateDiff(value.dateStart, value.dateEnd, 'day') + 1\n : 0;\n }\n\n protected fileChange(filesControl: AbstractControl|null, files?: File[]) {\n if (files?.length && files?.length > this.fileRestrictions.maxCount) {\n this.notificationsService.showError('Нельзя загрузить больше 10 файлов');\n if (filesControl) {\n filesControl.value.splice(this.fileRestrictions.maxCount, files.length - this.fileRestrictions.maxCount);\n filesControl.patchValue(filesControl.value);\n }\n }\n this.valueChange();\n }\n\n protected downloadFiles(files?: ExternalFile[]) {\n files?.forEach((file) => {\n if (file.id) {\n this.applicationFormService.downloadPropertyFile(file.id).subscribe((response) => {\n saveAs(response, file.name);\n });\n } else {\n DownloadFile(file);\n }\n });\n }\n\n private unsubscribe() {\n this.saveSubscription$.unsubscribe();\n this.checkChangesSubscription$.unsubscribe();\n }\n\n protected tableValueChanged(value: StudentTableRow[] | CostTableRow[], control: AbstractControl) {\n const isValid = !(value.some((element) => Object.values(element).some(val => val == null || val === '')));\n control.patchValue({propertyValue: value});\n control.setErrors(isValid ? null : { notCorrect: true });\n this.valueChange();\n }\n\n protected downloadAttachedFile(file: AttachedFile) {\n this.attachedFileService.downloadFile(file.id)\n .subscribe((response) => saveAs(response, file.nameOnDisk));\n }\n\n ngOnDestroy() {\n this.unsubscribe();\n }\n}\n","export enum ControlAction {\n // Без контрольной акции\n NoControlAction = 1,\n // Зачет\n Credit,\n // Зачет с оценкой\n CreditWithMark,\n // Экзамен\n Exam\n}\n\nexport const controlActions = [\n {id: ControlAction.NoControlAction, name: 'Без контрольной акции'},\n {id: ControlAction.Credit, name: 'Зачет'},\n {id: ControlAction.CreditWithMark, name: 'Зачет с оценкой'},\n {id: ControlAction.Exam, name: 'Экзамен'}\n]","import {ControlAction} from \"../enums/control-action.enum\";\nimport {DictCycleType} from \"../enums/cycle-type.enum\";\nimport {DictDisciplineTypeEnum} from \"../../enums/discipline-type.enum\";\n\nexport class DisciplineTable {\n id = '';\n dictDisciplineId = '';\n name? = '';\n printName? = '';\n hours = 0;\n dictMarkId? = '';\n sortNumber? = 0;\n canEditMark? = false;\n laborIntensity = 0;\n isGroup? = false;\n controlActionEnum?: ControlAction = ControlAction.NoControlAction;\n dictCycleTypeEnum?: DictCycleType = 0;\n dictDisciplineTypeEnum?: DictDisciplineTypeEnum;\n dictDisciplineName?: string;\n dictDisciplineTypeName?: string;\n}\n\nexport class DisciplineTableByCycleType extends DisciplineTable {\n courseWorkOrCourseProject = false;\n faculty = false;\n hoursContactWork = 0;\n}\n\nexport class DisciplineTableBySemester extends DisciplineTable {\n semester = 0;\n}\n\nexport class DisciplineTableFull extends DisciplineTableByCycleType {\n semester?: number;\n}","export enum DictCycleType {\n // Дисциплины\n Disciplines = 1,\n // Практики\n Practices,\n // Научные исследования\n ScienceResearches,\n // Государственная итоговая аттестация\n Gia,\n // Факультативные дисциплины\n FacultyDisciplines,\n // Научный компонент\n ScienceComponent,\n // Образовательный компонент\n EducationComponent,\n // Курсовые работы (Локальный enum)\n CourseWork = 100\n}\n\nexport const dictCycleTypes = [\n {id: DictCycleType.Disciplines, text: 'Дисциплины'},\n {id: DictCycleType.Practices, text: 'Практики'},\n {id: DictCycleType.ScienceResearches, text: 'Научные исследования'},\n {id: DictCycleType.Gia, text: 'Государственная итоговая аттестация'},\n {id: DictCycleType.CourseWork, text: 'Курсовые работы'},\n {id: DictCycleType.FacultyDisciplines, text: 'Факультативные дисциплины'},\n {id: DictCycleType.ScienceComponent, text: 'Научный компонент'},\n {id: DictCycleType.EducationComponent, text: 'Образовательный компонент'},\n];","import {Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {environment} from \"../../../environments/environment\";\nimport {DisciplineTableByCycleType, DisciplineTableBySemester} from \"../../models/mfc/applicationForm/discipline-table.model\";\nimport {catchError} from \"rxjs\";\nimport {NotificationsService} from \"../Notifications/notifications.service\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DisciplineTableService {\n public applicationId? = '';\n\n private get baseURL() {\n return `${environment.apiEndpoint}${environment.mfc.apiPaths.application}/${this.applicationId}/discipline-table`;\n }\n\n constructor(private http: HttpClient, private notificationsService: NotificationsService) {}\n\n public getRowsByCycleType() {\n return this.http.get(`${this.baseURL}/by-cycle-type/row`)\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n\n public getRowByCycleType(rowId: string) {\n return this.http.get(`${this.baseURL}/by-cycle-type/row/${rowId}`)\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n\n public getRowsBySemester() {\n return this.http.get(`${this.baseURL}/by-semester/row`)\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err)\n }));\n }\n\n public getRowBySemester(rowId: string) {\n return this.http.get(`${this.baseURL}/by-semester/row/${rowId}`)\n .pipe(catchError(err => {\n this.notificationsService.showError(err.error);\n return handleError(err);\n }));\n }\n}","import {environment} from \"../../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Injectable} from \"@angular/core\";\nimport {catchError} from \"rxjs\";\nimport {handleError} from \"../../../helpers/errorHandle-helper\";\nimport {StudentSemester} from \"../../../models/mfc/student-semester.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StudentService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.student}`;\n\n constructor(private http: HttpClient,) { }\n\n getSemesters(studentId: string) {\n return this.http.get(`${this.baseUrl}/GetSemesters`, {params: {studentId}})\n .pipe(catchError(handleError));\n }\n}","export enum DictMarkValue {\n // Прослушано\n None = 0,\n // Удовлетворительно\n Satisfactory = 3,\n // Хорошо\n Good = 4,\n // Отлично\n Great = 5,\n // Зачтено\n Passed = 6\n}","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {map} from \"rxjs/operators\";\nimport {DictMark} from \"../../../models/mfc/dicts/mark.model\";\nimport {DictMarkValue} from \"../../../models/enums/markvalue.enum\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictMarkService {\n private readonly baseUrl = `${environment.apiEndpoint}${environment.mfc.apiPaths.externalDict}/DictMark/`;\n\n constructor(private http: HttpClient) {}\n\n public getMarks() {\n return this.http.get(this.baseUrl).pipe(\n map(data => [{id: null, name: 'Прослушано', value: DictMarkValue.None}, ...data])\n );\n }\n}","
\n \n
\n

Семестры

\n \n \n
\n
\n

Выбранный период

\n

{{studentPeriod}}

\n
\n
\n\n \n\n \n \n \n {{dataItem.sortNumber}}\n \n \n \n\n \n \n \n {{dataItem[column.field]}}\n \n \n \n\n \n \n \n {{dataItem[column.field]}}\n \n \n \n\n \n \n \n {{dataItem[column.field]}}\n \n \n \n\n \n \n \n {{marksMap.get(dataItem[column.field])}}\n \n \n \n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit} from \"@angular/core\";\nimport {\n DisciplineTable,\n DisciplineTableByCycleType,\n DisciplineTableBySemester\n} from \"../../../../models/mfc/applicationForm/discipline-table.model\";\nimport {CellClickEvent, GridDataResult, PageChangeEvent} from \"@progress/kendo-angular-grid\";\nimport {EnableDisciplineTable} from \"../../../../models/mfc/enums/enable-discipline-table.enum\";\nimport {process, State} from \"@progress/kendo-data-query\";\nimport {DictCycleType, dictCycleTypes} from \"../../../../models/mfc/enums/cycle-type.enum\";\nimport {DisciplineTableService} from \"../../../../services/mfc/discipline-table.service\";\nimport {StudentService} from \"../../../../services/mfc/dicts/student.service\";\nimport {lastValueFrom} from \"rxjs\";\nimport {DictMarkService} from \"../../../../services/mfc/dicts/mark.service\";\nimport {createMap} from \"../../../../helpers/map-helper\";\nimport {ApplicationEditFormService} from \"../../../../services/mfc/application-edit-form.service\";\nimport {Router} from \"@angular/router\";\nimport {CourseSemester, StudentSemester} from \"../../../../models/mfc/student-semester.model\";\n\n@Component({\n selector: 'mfc-discipline-table',\n templateUrl: './discipline-table.component.html',\n styleUrls: ['./discipline-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DisciplineTableComponent implements OnInit {\n @Input() editable = false;\n @Input() applicationId? = '';\n @Input() tabIndex = 0;\n @Input() studentId = '';\n\n protected gridView: GridDataResult = {data: [], total: 0};\n\n protected disciplineTableByCycleType: DisciplineTableByCycleType[] = [];\n protected disciplineTableBySemester: DisciplineTableBySemester[] = [];\n protected semesters: {id: number, name: string}[] = [];\n protected courses: CourseSemester[] = [];\n\n protected marksMap = new Map([]);\n\n protected dictCycleTypes = dictCycleTypes;\n\n protected isSemester = false;\n protected studentSemesters: StudentSemester[] = [];\n protected studentPeriod: string = '';\n\n protected skip = 0;\n protected state: State = {\n skip: 0,\n take: 18\n };\n\n constructor(private cdr: ChangeDetectorRef,\n private disciplineTableService: DisciplineTableService,\n private studentService: StudentService,\n private dictMarkService: DictMarkService,\n protected editFormService: ApplicationEditFormService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n this.isSemester = [EnableDisciplineTable.BySemester, EnableDisciplineTable.BySemesterPractice].includes(\n this.editFormService.enableDisciplineTable ?? EnableDisciplineTable.No);\n this.disciplineTableService.applicationId = this.applicationId;\n await this.getStudentCurrentSemester();\n\n if (this.applicationId) {\n this.getMarks();\n this.getDisciplines();\n }\n }\n\n protected pageChange(event: PageChangeEvent): void {\n this.state = event;\n this.processData();\n }\n\n private processData() {\n this.gridView = process(\n [...this.createGrouping(this.isSemester ? this.disciplineTableBySemester : this.disciplineTableByCycleType)],\n this.state\n );\n this.cdr.detectChanges();\n }\n\n private getMarks() {\n this.dictMarkService.getMarks().subscribe((response) => {\n this.marksMap = createMap({value: response, valueField: 'id', textField: 'name'});\n });\n }\n\n private getDisciplines() {\n this.isSemester ? this.getRowsBySemester() : this.getRowsByCycleType();\n }\n\n private getRowsByCycleType() {\n this.disciplineTableService.getRowsByCycleType().subscribe((response) => {\n this.disciplineTableByCycleType = response;\n this.processData();\n });\n }\n\n private getRowsBySemester() {\n this.disciplineTableService.getRowsBySemester().subscribe((response) => {\n this.disciplineTableBySemester = response;\n this.processData();\n })\n }\n\n private async getStudentCurrentSemester() {\n await lastValueFrom(this.studentService.getSemesters(this.studentId)).then(response => {\n this.semesters = response.map(item => ({name: `${item.number} семестр`, id: item.number}));\n this.courses = [\n ...new Set(response.map(item => item.course))\n ].map(item => ({\n courseNumber: item,\n semesters: response.filter(semester => semester.course === item)\n .map(item => item.number)\n }));\n this.studentSemesters = response;\n this.onSemesterChange(this.editFormService.disciplineTableSemesters);\n });\n }\n\n private filterData\n (input: {\n data: T[];\n course?: CourseSemester;\n dictCycleTypeEnum?: number;\n }) {\n return input.data.filter((item) => {\n const isCorrectSemester = input.course ? input.course.semesters.includes(item.semester ?? 0) : true;\n const isNotGroup = !item.isGroup;\n const isCorrectCycleType = (input.dictCycleTypeEnum === DictCycleType.CourseWork)\n ? item.courseWorkOrCourseProject\n : item.dictCycleTypeEnum === input.dictCycleTypeEnum && !item.courseWorkOrCourseProject;\n\n return isCorrectSemester && isNotGroup && isCorrectCycleType;\n }).sort((a, b) => (a.sortNumber ?? 0) - (b.sortNumber ?? 0));\n }\n\n private handleGroupData(input: {data: T[], dictCycleTypeEnum?: number, course?: CourseSemester}) {\n const groupData = this.filterData(input);\n if (!groupData.length) {\n return {groupData: [], groupTotalValues: {laborIntensity: 0, hours: 0}};\n }\n return {filteredData: groupData, groupTotalValues: input.course ? {hours: 0, laborIntensity: 0} : this.getTotalValues(groupData)};\n }\n\n private groupCycleTypes(data: DisciplineTableByCycleType[]) {\n const groupData: DisciplineTableByCycleType[] = [];\n\n this.dictCycleTypes.forEach((item) => {\n const {filteredData, groupTotalValues} = this.handleGroupData({data: data, dictCycleTypeEnum: item.id});\n if (!filteredData?.length) {\n return;\n }\n\n groupData.push(...[\n {\n ...new DisciplineTableByCycleType(),\n dictCycleTypeEnum: item.id,\n name: item.text,\n laborIntensity: groupTotalValues.laborIntensity,\n hours: groupTotalValues.hours,\n isGroup: true\n }, ...filteredData]);\n });\n\n const totalValues = this.getTotalValues(groupData, true);\n\n const facultyIndex = groupData.findIndex((item) =>\n item.dictCycleTypeEnum === DictCycleType.FacultyDisciplines && item.isGroup);\n\n const sumItem = {\n ...new DisciplineTableByCycleType(),\n laborIntensity: totalValues.laborIntensity,\n hours: totalValues.hours,\n name: 'Итого',\n isGroup: true\n };\n\n facultyIndex >= 0 ? groupData.splice(facultyIndex, 0, sumItem) : groupData.push(sumItem);\n\n return groupData;\n }\n\n private groupSemesters(data: DisciplineTableBySemester[]) {\n const groupData: DisciplineTableBySemester[] = [];\n this.courses.forEach((course) => {\n const {filteredData} = this.handleGroupData({data: data, course: course});\n if (!filteredData?.length) {\n return;\n }\n\n groupData.push(...[\n {\n ...new DisciplineTableBySemester(),\n name: `${course.courseNumber} курс ${course.semesters.join(', ')} семестр`,\n isGroup: true\n }, ...filteredData]);\n });\n\n return groupData;\n }\n\n private createGrouping(data: unknown[]) {\n if (!data.length) {\n return [];\n }\n\n if (this.isSemester) {\n return this.groupSemesters(data as DisciplineTableBySemester[]);\n } else {\n return this.groupCycleTypes(data as DisciplineTableByCycleType[]);\n }\n }\n\n private getTotalValues(cycleData: T[], all: boolean = false) {\n return cycleData.filter((item) => {\n if (!all) return true;\n\n const equalDisciplines = cycleData.some((a) => a.dictDisciplineId === item.dictDisciplineId\n && (a.dictCycleTypeEnum !== DictCycleType.FacultyDisciplines && !a.courseWorkOrCourseProject)\n );\n const notFaculty = item.dictCycleTypeEnum !== DictCycleType.FacultyDisciplines;\n const isUnique = item.courseWorkOrCourseProject ? !equalDisciplines : true;\n const isValid = !item.isGroup && notFaculty;\n\n return isUnique && isValid;\n }).reduce((a, b) => ({\n hours: a.hours + b.hours,\n laborIntensity: Math.round((a.laborIntensity + b.laborIntensity) * 100) / 100\n }), {hours: 0, laborIntensity: 0});\n }\n\n protected onCellClick({dataItem, column}: CellClickEvent) {\n if (column.field === 'name' && dataItem.id && !window.getSelection()?.toString()) {\n localStorage.setItem('mfcDisciplineIndex', this.tabIndex.toString());\n this.router.navigate([`mfc/applicationForm/${this.applicationId}/discipline/${dataItem.id}`]);\n }\n }\n\n protected onSemesterChange(value?: number[]) {\n const dates = this.studentSemesters.filter(item => value?.includes(item.number))\n .map(item => ({begin: new Date(item.begin), end: new Date(item.end)}));\n\n if (!dates.length) {\n this.studentPeriod = '';\n return;\n }\n\n const minDate = Math.min(...dates.map(date => date.begin.getTime()));\n const maxDate = Math.max(...dates.map(date => date.end.getTime()));\n\n this.studentPeriod = `с ${new Date(minDate).toLocaleDateString()} по ${new Date(maxDate).toLocaleDateString()}`;\n }\n\n}","
\n \n \n \n \n \n \n \n \n \n \n \n
\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\nimport {ApplicationStatusesEnum} from '../../../../models/mfc/enums/application-statuses.enum';\nimport {\n ApplicationConstructorSettings\n} from '../../../../models/mfc/applicationConstructor/application-constructor-settings.model';\nimport {GetApplication} from '../../../../models/mfc/applicationForm/application-form.model';\nimport {TabsSettings} from '../../../../models/mfc/applicationConstructor/tabs-settings.model';\nimport {ApplicationTabsEnum} from 'src/app/models/mfc/enums/application-tabs.enum';\nimport {ApplicationDocumentList} from '../../../../models/mfc/applicationForm/document.model';\nimport {EnableDisciplineTable} from \"../../../../models/mfc/enums/enable-discipline-table.enum\";\n\n@Component({\n selector: 'mfc-application-form-tab',\n templateUrl: './application-form-tab.component.html',\n styleUrls: ['./application-form-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ApplicationFormTabComponent implements OnInit {\n\n @Input() tabId?: string = '';\n @Input() tabSelector = '';\n @Input() index = 0;\n @Input() status?: ApplicationStatusesEnum;\n @Input() editable = false;\n @Input() settings?: ApplicationConstructorSettings;\n @Input() application?: GetApplication;\n @Input() documents: ApplicationDocumentList = new ApplicationDocumentList();\n\n protected dynamicTab?: TabsSettings;\n\n protected readonly ApplicationTabsEnum = ApplicationTabsEnum;\n protected readonly EnableDisciplineTable = EnableDisciplineTable;\n\n constructor() { }\n\n ngOnInit(): void {\n this.dynamicTab = (this.settings ?? this.application)?.tabs\n .find((item: TabsSettings) => item.externalId === this.tabId);\n }\n}\n","
\n

Заявка {{!isAdd && application?.applicationNumber ? '№' + application?.applicationNumber : ''}}

\n
\n \n\n \n\n \n \n \n \n\n \n
\n
\n \n

Статус

\n

\n {{statusText}}\n \n ({{lastInWorkInfo.lastName}} {{lastInWorkInfo.firstName}} {{lastInWorkInfo.middleName}} {{lastInWorkInfo.dateTime | date:'dd.MM.yyyy HH:mm'}})\n \n\n \n \n ({{\n application?.applicationStatusInfo?.personFIO ?? application?.applicationStatusInfo?.studentFIO\n }} {{application?.applicationStatusInfo?.statusUpdatedAt | date:'dd.MM.yyyy HH:mm'}})\n \n \n\n

\n
\n \n

Категория

\n \n \n {{application?.applicationCategoryName}}\n
\n \n

Тип

\n \n \n \n \n \n \n {{application?.applicationTypeName}}\n
\n \n \n \n

\n Пример документа\n Шаблон заявления\n \"{{ file.name }}\"\n

\n \n
\n
\n
\n \n \n

Вариант получения

\n 1; else text\">\n \n \n \n
*
\n
\n \n \n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n

Связанные заявки

\n \n \n \n \n \n \n \n \n {{applicationNumbersMap.get(id)}}\n \n \n
\n \n \n

Рег. номер

\n {{application?.registrationNumber?.registrationNumber}}/{{application?.registrationNumber?.registrationNumberLitera}}\n
\n \n

Дата выдачи

\n {{application?.issueDate | date:'dd.MM.yyyy'}}\n
\n
\n
\n\n \n \n \n \n {{tab.name}}\n \n {{application?.notificationCount}}\n \n \n \n \n \n \n \n \n \n
\n\n
\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport {AbstractControl, FormControl, FormGroup} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {DropDownFilterSettings} from '@progress/kendo-angular-dropdowns';\nimport {ApplicationStatusesEnum} from '../../../../models/mfc/enums/application-statuses.enum';\nimport {lastValueFrom} from 'rxjs';\nimport {ApplicationTypeSelectService} from '../../../../services/mfc/application-type-select.service';\nimport {ApplicationCategoryTree} from '../../../../models/mfc/application-categories-tree.model';\nimport {ApplicationStatusService} from '../../../../services/mfc/dicts/application-status.service';\nimport {\n ApplicationStatus,\n displayFIOStatuses\n} from '../../../../models/mfc/dicts/application-status.model';\nimport {Tab, tabs} from '../../../../models/mfc/applicationForm/application-tabs.model';\nimport {ApplicationTabsEnum} from '../../../../models/mfc/enums/application-tabs.enum';\nimport {\n ApplicationConstructorSettings\n} from '../../../../models/mfc/applicationConstructor/application-constructor-settings.model';\nimport {TabsSettings} from '../../../../models/mfc/applicationConstructor/tabs-settings.model';\nimport {SelectEvent} from '@progress/kendo-angular-layout';\nimport {DocumentTypes} from '../../../../models/mfc/enums/document-types.enum';\nimport {ConstructorDocument} from '../../../../models/mfc/applicationConstructor/constructor-document.model';\nimport {saveAs} from '@progress/kendo-file-saver';\nimport {\n ApplicationForm,\n ApplicationNumber,\n CreateApplicationMainForm,\n EditApplicationMainForm,\n GetApplication\n} from '../../../../models/mfc/applicationForm/application-form.model';\nimport {DialogCloseResult, DialogService} from '@progress/kendo-angular-dialog';\nimport {ApplicationConstructorDocumentService} from '../../../../services/mfc/application-constructor-document.service';\nimport {NotificationsService} from '../../../../services/Notifications/notifications.service';\nimport {ApplicationConstructorService} from '../../../../services/mfc/application-constructor.service';\nimport {openDialog} from '../../../../helpers/dialog-helper';\nimport {ApplicationFormService} from '../../../../services/mfc/application-form.service';\nimport {ApplicationEditFormService} from '../../../../services/mfc/application-edit-form.service';\nimport {AllowedActions} from '../../../../models/mfc/enums/allowed-actions.enum';\nimport {TypeReceipt} from '../../../../models/mfc/dicts/type-receipt.model';\nimport {TypeReceiptService} from '../../../../services/mfc/dicts/type-receipt.service';\nimport {ApplicationDocumentList} from '../../../../models/mfc/applicationForm/document.model';\nimport {DocumentsService} from '../../../../services/mfc/documents.service';\nimport {ReceiptTypesEnum} from '../../../../models/mfc/enums/receipt-types.enum';\nimport {createMap} from '../../../../helpers/map-helper';\nimport {EnableDisciplineTable} from \"../../../../models/mfc/enums/enable-discipline-table.enum\";\nimport {InWorkInfo} from \"../../../../models/mfc/applicationForm/approvalList.model\";\n\n\n@Component({\n selector: 'mfc-application-form-home',\n templateUrl: './application-form-home.component.html',\n styleUrls: ['./application-form-home.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ApplicationFormHomeComponent implements OnInit, OnDestroy, AfterViewChecked {\n\n private id = this.activatedRoute.snapshot.params['id'];\n protected editable = false;\n protected isAdd = !this.id;\n\n protected currentTab = this.editFormService.currentTab;\n private hasChanges = false;\n\n protected statusText = '';\n protected typeTooltip = '';\n protected tabs: Tab[] = [];\n protected application?: GetApplication;\n protected applicationConstructor?: ApplicationConstructorSettings;\n protected documents: ApplicationDocumentList = new ApplicationDocumentList();\n protected typeReceiptName?: string;\n protected receiptTypeExplanation?: string;\n protected readonly relatedApplicationsDescription =\n `В данном поле при необходимости можно выбрать связанные с данной заявкой заявки.\n В заявке будут указаны ссылки на указанные в данном поле заявки.`;\n\n protected applicationCategoriesTree: ApplicationCategoryTree[] = [];\n protected applicationCategory?: ApplicationCategoryTree;\n protected statuses: ApplicationStatus[] = [];\n protected dictTypeReceipts: TypeReceipt[] = [];\n protected filteredTypeReceipt: TypeReceipt[] = [];\n protected applicationNumbers: ApplicationNumber[] = [];\n protected applicationNumbersMap: Map = new Map([]);\n private hasDisciplineSemesters = false;\n protected inWork = false;\n protected lastInWorkInfo?: InWorkInfo;\n\n protected formGroup = new FormGroup({});\n protected filterSettings: DropDownFilterSettings = {\n caseSensitive: false,\n operator: 'contains',\n };\n\n protected allowedActions = new Map([\n [AllowedActions.Save, false],\n [AllowedActions.Delete, false],\n [AllowedActions.Withdrawn, false]\n ]);\n\n protected readonly DocumentTypes = DocumentTypes;\n protected readonly AllowedActions = AllowedActions;\n protected readonly ApplicationTabsEnum = ApplicationTabsEnum;\n protected readonly ReceiptTypesEnum = ReceiptTypesEnum;\n protected readonly displayFIOStatuses = displayFIOStatuses;\n protected readonly ApplicationStatusesEnum = ApplicationStatusesEnum;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private router: Router,\n private cdRef: ChangeDetectorRef,\n private dialogService: DialogService,\n private notificationsService: NotificationsService,\n private applicationTypeSelectService: ApplicationTypeSelectService,\n private applicationStatusService: ApplicationStatusService,\n private constructorDocumentService: ApplicationConstructorDocumentService,\n private documentsService: DocumentsService,\n private editFormService: ApplicationEditFormService,\n private applicationConstructorService: ApplicationConstructorService,\n private applicationFormService: ApplicationFormService,\n private typeReceiptService: TypeReceiptService\n ) {\n if (this.isAdd) this.formGroup = this.createAddFormGroup();\n }\n\n async ngOnInit() {\n await this.getApplicationNumbers();\n if (this.isAdd) {\n this.getTypeReceipts();\n this.editable = true;\n this.allowedActions.set(AllowedActions.Save, this.editable);\n await this.getCategoriesTree();\n this.activatedRoute.queryParams.subscribe((params) => {\n this.patchApplicationForm(params['categoryId'], params['typeId']);\n });\n } else {\n await this.getStatuses();\n this.getApplication();\n }\n }\n\n ngAfterViewChecked() {\n document.querySelectorAll('input.k-input-inner').forEach((el) => {\n el.setAttribute('autocomplete', 'none');\n });\n }\n\n public typeReceiptChanged(id?: string) {\n this.receiptTypeExplanation = this.applicationConstructor?.basicSettings?.typeReceiptExplanations.\n find(typeReceipt => typeReceipt.dictTypeReceiptId === id)?.text;\n }\n\n private async getCategoriesTree() {\n await lastValueFrom(this.applicationTypeSelectService.getCategoriesTree()).then((response) => {\n this.applicationCategoriesTree = response;\n });\n }\n\n private async getStatuses() {\n await lastValueFrom(this.applicationStatusService.getAll()).then((response) => {\n this.statuses = response;\n });\n }\n\n private getTypeReceipts() {\n this.typeReceiptService.getAll().subscribe((response) => {\n this.dictTypeReceipts = response;\n this.filteredTypeReceipt = response;\n });\n }\n\n private async getApplicationNumbers() {\n await this.applicationFormService.getApplicationNumbers().subscribe( (response) => {\n this.applicationNumbers = response;\n this.applicationNumbersMap = createMap(\n {value: response, valueField: 'applicationId', textField: 'applicationNumber'});\n });\n }\n\n private getApplication() {\n this.applicationFormService.getApplicationById(this.id).subscribe({\n next: async (response) => {\n this.application = response;\n this.receiptTypeExplanation = response.receiptTypeExplanation;\n this.statusText = this.statuses.find((item) =>\n item.applicationStatusEnum === this.application?.statusEnum)?.name ?? '';\n this.typeReceiptName = response.dictReceiptType.name;\n this.editFormService.disciplineTableSemesters = response.disciplineTableSemesters\n this.editable = this.editFormService.isApplicationEditable(this.application.statusEnum);\n this.editFormService.enableDisciplineTable = response.enableDisciplineTable;\n this.editFormService.studentId = response.student.id;\n this.setAllowedActions(this.application.statusEnum);\n\n this.editFormService.inWork = response.approvalSettings.some(item => item.inWorkInfo);\n this.inWork = this.editFormService.inWork;\n\n this.lastInWorkInfo = response.approvalSettings\n .flatMap(item => item.inWorkInfo)\n .filter((o): o is InWorkInfo => !!o)\n .map(item => ({...item, dateTime: new Date(item.dateTime)}))\n .find(item => Math.max(item.dateTime.getTime()));\n\n this.formGroup = this.createEditFormGroup();\n\n this.patchTabs();\n const dynamicStartIndex = this.tabs.findIndex((tab) => tab.selector === ApplicationTabsEnum.Dynamic);\n this.editFormService.setTabsData(this.application.tabs, dynamicStartIndex);\n this.cdRef.detectChanges();\n },\n error: (error) => {\n this.notificationsService.showError(error);\n this.router.navigateByUrl('/mfc');\n },\n });\n }\n\n private refreshNotificationCount() {\n if (this.application?.notificationCount) this.application.notificationCount = 0;\n }\n\n private getApplicationConstructor(typeId: string) {\n this.applicationConstructorService.getApplicationConstructor(typeId).subscribe({\n next: (response) => {\n this.applicationConstructor = response;\n const dictTypeReceiptIds = response.basicSettings.dictTypeReceiptIds;\n if (dictTypeReceiptIds.length === 1) {\n (this.formGroup.get('dictTypeReceiptId')).patchValue(dictTypeReceiptIds[0]);\n }\n this.filteredTypeReceipt = this.dictTypeReceipts.filter((item) => dictTypeReceiptIds.includes(item.id));\n this.typeReceiptName = this.dictTypeReceipts\n .find(typeReceipt => typeReceipt.id === dictTypeReceiptIds[0])?.name;\n this.receiptTypeExplanation = this.applicationConstructor.basicSettings.typeReceiptExplanations\n .find((item) => item.dictTypeReceiptId === this.filteredTypeReceipt[0].id)?.text ?? '';\n this.hasDisciplineSemesters = [EnableDisciplineTable.BySemester, EnableDisciplineTable.BySemesterPractice]\n .includes(this.applicationConstructor?.basicSettings.enableDisciplineTable ?? EnableDisciplineTable.No);\n this.editFormService.enableDisciplineTable = this.applicationConstructor?.basicSettings.enableDisciplineTable;\n\n const disciplineTab = tabs.find((tab) => tab.selector === ApplicationTabsEnum.Discipline);\n if (disciplineTab) {\n disciplineTab.displayInAddForm = this.hasDisciplineSemesters;\n }\n\n this.patchTabs();\n this.cdRef.detectChanges();\n },\n error: () => this.notificationsService.showError('Вы не можете создать заявку такого типа'),\n });\n }\n\n private setAllowedActions(status: ApplicationStatusesEnum) {\n this.allowedActions = new Map([\n [AllowedActions.Save, this.editable],\n [AllowedActions.Delete, [ApplicationStatusesEnum.Draft, ApplicationStatusesEnum.Withdrawn].includes(status)],\n [AllowedActions.Withdrawn, [ApplicationStatusesEnum.Sent, ApplicationStatusesEnum.Revision].includes(status)]\n ]);\n }\n\n private createAddFormGroup() {\n const form = new CreateApplicationMainForm();\n const arr: {[key: string]: AbstractControl} = {};\n Object.keys(form).forEach((key) => {\n arr[key] = new FormControl({\n value: form[key as keyof typeof form],\n disabled: !this.isAdd\n });\n });\n return new FormGroup(arr);\n }\n\n private createEditFormGroup() {\n const form = new EditApplicationMainForm();\n\n if (this.application?.relatedApplications?.length) {\n form.relatedApplicationIds = this.application.relatedApplications.map((item) => item.id);\n this.applicationNumbersMap = createMap(\n {value: this.application.relatedApplications, valueField: 'id', textField: 'applicationNumber'});\n } else if (this.application?.statusEnum !== ApplicationStatusesEnum.Draft\n && this.application?.statusEnum !== ApplicationStatusesEnum.Revision) {\n this.applicationNumbersMap.clear();\n }\n\n const arr: {[key: string]: AbstractControl} = {};\n Object.keys(form).forEach((key) => {\n arr[key] = new FormControl(form[key as keyof typeof form]);\n });\n return new FormGroup(arr);\n }\n\n private patchApplicationForm(categoryId?: string, typeId?: string) {\n if (categoryId) {\n this.patchCategory(categoryId);\n }\n if (typeId) {\n (>this.formGroup.get('type'))?.patchValue(typeId);\n this.typeTooltip = this.getTooltip(typeId);\n this.typeChange(typeId);\n }\n }\n\n private patchCategory(id?: string) {\n (>this.formGroup.get('category'))?.patchValue(id);\n this.categoryChange(id);\n }\n\n private patchTabs() {\n let tabsSettings;\n if (this.isAdd) {\n this.tabs = [...tabs.filter(tab => tab.displayInAddForm)];\n tabsSettings = this.applicationConstructor?.tabs;\n } else {\n if (this.application?.documents) {\n const approvalDocuments = this.application.approvalSettings.map((item) =>\n item.applicationConstructorDocumentId).filter((id) => id) ?? [];\n this.documents.signature = this.application.documents.filter((doc) =>\n approvalDocuments.includes(doc.externalId)) ?? [];\n this.documents.ready = this.application.documents.filter((doc) =>\n doc.documentType === DocumentTypes.Document &&\n !approvalDocuments.includes(doc.externalId)) ?? [];\n }\n this.tabs = [...tabs.filter((tab) =>\n !tab.hideOnStatuses?.includes(this.application?.statusEnum ?? 0) &&\n (tab.selector !== ApplicationTabsEnum.Documents || this.documents.signature.length) &&\n (tab.selector !== ApplicationTabsEnum.ReadyDocuments || this.documents.ready.length) &&\n (tab.selector !== ApplicationTabsEnum.Discipline || this.application?.enableDisciplineTable !== EnableDisciplineTable.No))\n ];\n tabsSettings = this.application?.tabs;\n }\n tabsSettings?.forEach((tab: TabsSettings, index) => {\n const commentsIndex = this.tabs.findIndex((tab) => tab.selector === ApplicationTabsEnum.Comments);\n this.tabs.splice(commentsIndex > -1 ? commentsIndex : index, 0,\n {\n id: tab.externalId,\n name: tab.name,\n selector: ApplicationTabsEnum.Dynamic,\n displayInAddForm: true,\n });\n });\n }\n\n private getTooltip(typeId?: string) {\n return this.applicationCategory?.dictApplicationTypes.find(a => a.externalId === typeId)?.tooltip ?? '';\n }\n\n private resetField(resetCategory: boolean = false) {\n this.formGroup.get(resetCategory ? 'category' : 'type')?.reset();\n resetCategory ? this.categoryChange() : this.typeChange();\n }\n\n protected categoryChange(id?: string) {\n this.applicationCategory = this.applicationCategoriesTree.find((item) => item.externalId === id);\n const typeMatch = this.applicationCategory?.dictApplicationTypes.some((item) =>\n item.externalId === this.formGroup.get('type')?.value);\n if (!typeMatch) {\n this.resetField();\n }\n }\n\n protected typeChange(id?: string) {\n this.typeTooltip = this.getTooltip(id);\n if (id) {\n this.getApplicationConstructor(id);\n } else {\n this.applicationConstructor = undefined;\n this.typeReceiptName = undefined;\n this.tabs = [];\n }\n }\n\n protected downloadFile(document: ConstructorDocument) {\n this.constructorDocumentService.getDocument(\n this.applicationConstructor?.externalId ?? this.application?.applicationConstructorId ?? '',\n document.externalId\n ).subscribe({\n next: (response: Blob) => saveAs(response, document.name),\n error: (error) => this.notificationsService.showError(error.error.Message ?? error),\n });\n }\n\n protected goToApplication(id: string) {\n window.open(`/mfc/applicationForm/${id}`, '_blank');\n }\n\n protected onTabChange(source: SelectEvent) {\n if (this.currentTab === source.index) {\n return;\n }\n\n if (this.tabs[this.currentTab].selector === ApplicationTabsEnum.Dynamic) {\n this.editFormService.save$.next(this.currentTab);\n }\n\n this.currentTab = source.index;\n if (this.tabs[this.currentTab].selector === ApplicationTabsEnum.Comments) {\n this.refreshNotificationCount();\n }\n }\n\n protected goBack() {\n const isSaved = !(this.hasChanges || this.editFormService.hasFormChanges(this.currentTab));\n if (this.isAdd || isSaved) {\n this.editFormService.clearTabsData();\n this.router.navigateByUrl('/mfc');\n } else {\n const dialog = openDialog(this.dialogService, `Вы хотите закрыть форму без сохранения изменений?`);\n dialog.result.subscribe((result) => {\n if (!(result instanceof DialogCloseResult) && result.text == 'Да') {\n this.editFormService.clearTabsData();\n this.editFormService.resetHasChanges();\n this.router.navigateByUrl('/mfc');\n }\n });\n }\n }\n\n protected onSave(send: boolean = false) {\n const receiptType = this.formGroup.get('dictTypeReceiptId')?.value;\n if (this.isAdd && !receiptType) {\n this.notificationsService.showError('Выберите вариант получения');\n return;\n }\n\n this.editFormService.save$.next(this.currentTab);\n const form: ApplicationForm = {applicationPropertiesValueDto: this.editFormService.getTabsValues()};\n\n if (!this.editFormService.isValid) {\n this.notificationsService.showError('Заполните все обязательные поля');\n return\n }\n\n const relatedApplications = this.formGroup.get('relatedApplicationIds')?.value;\n if (relatedApplications?.length) {\n form.relatedApplicationIds = relatedApplications;\n }\n\n if (this.isAdd) {\n form.dictTypeReceiptId = receiptType;\n form.applicationConstructorId = this.applicationConstructor?.externalId;\n }\n\n form.disciplineTableSemesters = this.editFormService.disciplineTableSemesters ?? [];\n\n this.applicationFormService.saveApplication(form, this.id).subscribe({\n next: (response) => {\n this.editFormService.clearTabsData();\n this.editFormService.resetHasChanges();\n\n if (send) {\n this.id = this.id ?? response;\n this.send();\n } else {\n this.notificationsService.showSuccess('Успешно');\n if (this.isAdd) {\n this.router.navigateByUrl(`/mfc`);\n } else {\n this.getApplication();\n }\n }\n },\n error: (error) => this.notificationsService.showError(error),\n });\n }\n\n private send() {\n this.applicationFormService.changeStatus(this.id, ApplicationStatusesEnum.Sent).subscribe({\n next: () => {\n this.notificationsService.showSuccess('Успешно');\n this.router.navigateByUrl(`/mfc`);\n },\n error: (error) => this.notificationsService.showError(error.error.error)\n });\n }\n\n protected onDelete() {\n const dialog = openDialog(this.dialogService, 'Удалить заявку?');\n dialog.result.subscribe((result) => {\n if (!(result instanceof DialogCloseResult) && result.text == 'Да') {\n this.applicationFormService.deleteApplication(this.id).subscribe({\n next: () => {\n this.notificationsService.showSuccess('Успешно');\n this.editFormService.clearTabsData();\n this.editFormService.resetHasChanges();\n this.router.navigateByUrl('/mfc');\n },\n error: (error) => this.notificationsService.showError(error)\n });\n }\n });\n }\n\n protected ToWithDrawn() {\n const isSaved = !(this.hasChanges || this.editFormService.hasFormChanges(this.currentTab));\n if (isSaved) {\n const dialog = openDialog(this.dialogService,\n `Вы действительно хотите отозвать заявку? Заявка станет недоступна операторам для взятия в работу.`);\n dialog.result.subscribe((result) => {\n if (!(result instanceof DialogCloseResult) && result.text == 'Да') {\n this.applicationFormService.changeStatus(this.id, ApplicationStatusesEnum.Withdrawn).subscribe({\n next: () => {\n this.notificationsService.showSuccess('Успешно');\n this.getApplication();\n },\n error: (error) => this.notificationsService.showError(error)\n });\n }\n });\n } else {\n this.notificationsService.showError('Сохраните изменения');\n }\n }\n\n ngOnDestroy(): void {\n this.editFormService.disciplineTableSemesters = [];\n }\n}\n","

Заявка

\n\n
\n \n
\n
\n

{{ category.name }}

\n
\n
\n \n {{ type.name }}\n \n
\n
\n Другие типы\n {{ category.tooltip }}\n Подать заявку\n
\n
\n
\n
\n \n
\n","import {Component, OnInit} from '@angular/core';\nimport {Location} from '@angular/common';\nimport {ApplicationCategoryTree} from '../../../models/mfc/application-categories-tree.model';\nimport {Router} from '@angular/router';\nimport {ApplicationTypeSelectService} from '../../../services/mfc/application-type-select.service';\n\n\n@Component({\n selector: 'mfc-application-type-select',\n templateUrl: './application-type-select.component.html',\n styleUrls: ['./application-type-select.component.scss']\n})\nexport class AppicationTypeSelectComponent implements OnInit {\n //Добавляется вторая кнопка Назад, если при прокрутке скрывается первая\n protected contentHeightCoefficient = 0.9;\n protected data: ApplicationCategoryTree[] = [];\n\n protected readonly window = window;\n\n constructor(\n private location: Location,\n private router: Router,\n private applicationTypeSelectService: ApplicationTypeSelectService\n ) { }\n\n ngOnInit() {\n this.getTree();\n }\n\n private getTree() {\n this.applicationTypeSelectService.getCategoriesTree().subscribe((response) => {\n this.data = response;\n this.data.forEach((category) =>\n category.dictApplicationTypes = category.dictApplicationTypes.filter((type) => type.displayInAddForm));\n });\n }\n\n protected createApplication(categoryId: string, typeId?: string) {\n this.router.navigate(['/mfc/applicationForm'], {queryParams: {categoryId: categoryId, typeId: typeId}});\n }\n\n protected goBack() {\n this.location.back();\n }\n}\n","
\n

Дисциплина

\n \n \n
\n

{{field.name}}

\n

{{field.value}}

\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit} from \"@angular/core\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {ControlAction, controlActions} from \"../../../../../models/mfc/enums/control-action.enum\";\nimport {ApplicationEditFormService} from \"../../../../../services/mfc/application-edit-form.service\";\nimport {DisciplineTableService} from \"../../../../../services/mfc/discipline-table.service\";\nimport {EnableDisciplineTable} from \"../../../../../models/mfc/enums/enable-discipline-table.enum\";\nimport {DisciplineTableFull} from \"../../../../../models/mfc/applicationForm/discipline-table.model\";\nimport {ApplicationFormService} from \"../../../../../services/mfc/application-form.service\";\nimport {lastValueFrom, Observable} from \"rxjs\";\nimport {createMap} from \"../../../../../helpers/map-helper\";\n\n@Component({\n selector: 'mfc-discipline-table-form',\n templateUrl: './discipline-table-form.component.html',\n styleUrls: ['./discipline-table-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DisciplineTableFormComponent implements OnInit {\n private rowId = this.activatedRoute.snapshot.params['disciplineid'];\n private applicationId = this.activatedRoute.snapshot.params['id'];\n private isSemester = false;\n\n private readonly controlActions = createMap({value: controlActions, valueField: 'id', textField: 'name'});\n protected fields: { name: string, value: string }[] = [];\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private router: Router,\n private editFormService: ApplicationEditFormService,\n private disciplineTableService: DisciplineTableService,\n private cdr: ChangeDetectorRef,\n private applicationService: ApplicationFormService,\n ) {}\n\n async ngOnInit() {\n this.disciplineTableService.applicationId = this.applicationId;\n this.isSemester = await this.checkDiscipline();\n\n this.fetchRowData(this.rowId);\n }\n\n private async checkDiscipline() {\n if (!this.editFormService.studentId) {\n const application = await lastValueFrom(this.applicationService.getApplicationById(this.applicationId));\n this.editFormService.enableDisciplineTable = application.enableDisciplineTable;\n }\n\n return [EnableDisciplineTable.BySemester, EnableDisciplineTable.BySemesterPractice]\n .includes(this.editFormService.enableDisciplineTable ?? EnableDisciplineTable.No);\n }\n\n private fetchRowData(rowId: string) {\n const serviceMethod = this.isSemester\n ? this.disciplineTableService.getRowBySemester\n : this.disciplineTableService.getRowByCycleType;\n (serviceMethod as (rowId: string) => Observable).call(this.disciplineTableService, rowId)\n .subscribe((response) => {\n this.fields = this.mapFields(response);\n this.cdr.detectChanges();\n });\n }\n\n private mapFields(discipline: DisciplineTableFull) {\n const commonFields = [\n {name: 'Тип', value: discipline.dictDisciplineTypeName ?? ''},\n {name: 'Дисциплина', value: discipline.dictDisciplineName ?? ''},\n {name: 'Дисциплина (печатное название)', value: discipline.printName ?? '-'},\n {\n name: 'Тип промежуточного контроля',\n value: this.controlActions.get(discipline.controlActionEnum ?? ControlAction.NoControlAction)\n ?.toString() ?? ''\n },\n {name: 'Трудоемкость (общее количество часов), ч.', value: discipline.hours?.toString() ?? ''},\n {name: 'Трудоемкость, з.ед.', value: discipline.laborIntensity?.toString() ?? ''},\n ];\n\n const semesterFields = [\n {name: 'Семестр', value: discipline.semester?.toString() ?? ''},\n ];\n\n const cycleTypeFields = [\n {name: 'Факультатив', value: discipline.faculty ? 'Да' : 'Нет'},\n {name: 'Курсовая работа', value: discipline.courseWorkOrCourseProject ? 'Да' : 'Нет'},\n {name: 'Трудоемкость (количество аудиторных часов), ч.', value: discipline.hoursContactWork?.toString() ?? ''},\n ];\n\n return [...commonFields, ...(this.isSemester ? semesterFields : cycleTypeFields)];\n }\n\n protected onCancel() {\n this.editFormService.currentTab = parseInt(localStorage.getItem('mfcDisciplineIndex') ?? '0');\n this.router.navigate([`mfc/applicationForm/${this.applicationId}`]);\n }\n\n protected trackByFn(index: number, item: { name: string, value: string }) {\n return item.name;\n }\n}","import {Routes} from \"@angular/router\";\nimport {Type} from '@angular/core';\nimport {MFCHomeComponent} from \"../components/mfc/home/mfc-home.component\";\nimport {AuthGuard} from \"../guards/authguard\";\nimport {ApplicationFormHomeComponent} from \"../components/mfc/applicationForm/home/application-form-home.component\";\nimport {ApplicationFormTabComponent} from \"../components/mfc/applicationForm/tab/application-form-tab.component\";\nimport {ApplicationFormApprovalListComponent} from \"../components/mfc/applicationForm/approvalList/approval-list.component\";\nimport {ApplicationFormCommentsComponent} from \"../components/mfc/applicationForm/comments/comments.component\";\nimport {AppicationTypeSelectComponent} from '../components/mfc/applicationTypeSelect/application-type-select.component';\nimport {ApplicationFormDocumentsComponent} from \"../components/mfc/applicationForm/documents/documents.component\";\nimport {TypedTemplateDirective} from \"../directives/typed-template.directive\";\nimport {\n DateRangeFieldComponent\n} from '../components/mfc/applicationForm/dynamicProperties/date-range/date-range-field.component';\nimport {DynamicPropertiesComponent} from \"../components/mfc/applicationForm/dynamicProperties/dynamic-properties.component\";\nimport {StudentTableComponent} from \"../components/mfc/applicationForm/dynamicProperties/table/student/student-table.component\";\nimport {CostTableComponent} from \"../components/mfc/applicationForm/dynamicProperties/table/cost/cost-table.component\";\nimport {DisciplineTableComponent} from \"../components/mfc/applicationForm/discipline/discipline-table.component\";\nimport {\n DisciplineTableFormComponent\n} from \"../components/mfc/applicationForm/discipline/form/discipline-table-form.component\";\n\nexport const MfcRoutes: Routes = [\n {path: 'mfc', component: MFCHomeComponent, canActivate: [AuthGuard]},\n {path: 'mfc/applicationTypeSelect', component: AppicationTypeSelectComponent, canActivate: [AuthGuard]},\n {path: 'mfc/applicationForm', component: ApplicationFormHomeComponent, canActivate: [AuthGuard]},\n {path: 'mfc/applicationForm/:id', component: ApplicationFormHomeComponent, canActivate: [AuthGuard]},\n {path: 'mfc/applicationForm/:id/discipline/:disciplineid', component: DisciplineTableFormComponent, canActivate: [AuthGuard]},\n];\n\nexport const MFCComponents: Type[] = [\n MFCHomeComponent,\n AppicationTypeSelectComponent,\n ApplicationFormHomeComponent,\n ApplicationFormTabComponent,\n ApplicationFormApprovalListComponent,\n ApplicationFormCommentsComponent,\n ApplicationFormDocumentsComponent,\n DynamicPropertiesComponent,\n CostTableComponent,\n StudentTableComponent,\n TypedTemplateDirective,\n DateRangeFieldComponent,\n DisciplineTableComponent,\n DisciplineTableFormComponent\n];\n","export class DisciplinesModel {\n average?: number;\n controllingActionId?: string;\n dictDiscipline!: string;\n dictDisciplineId?: string;\n missing?: number;\n status?: {color: string, attendanceStatus: number, text: string};\n two?: number;\n lessonType!: number;\n}\n\nexport class LessonModel {\n average!: number;\n discipline!: string;\n statementLessons!: StatementLessonsModel[];\n}\n\nexport class StatementLessonsModel {\n attendedType!: number;\n date!: Date | string;\n lessonExternalId!: string;\n marks!: number[];\n name!: string;\n sortNumber!: number;\n}\n\nexport class AttendedModel {\n discipline!: string;\n date!: string;\n statementLesson!: string;\n group!: string;\n startTime!: string;\n endTime!: string;\n}\n\nexport class PhysTrainingMarkModel {\n modulePartName!: string;\n subjectName!: string;\n moduleName?: string;\n date?: Date;\n isVisit?: boolean;\n ball?: number;\n}\n\nexport class PhysSubject {\n externalId!: string;\n subjectName!: string;\n average?: number;\n}\n","
\n
\n
\n \n

Вы успешно отмечены

\n
\n \n
\n

Дисциплина:

\n

{{ information.discipline }}

\n
\n \n
\n

Тема:

\n

{{ information.statementLesson }}

\n
\n \n
\n

Дата занятия:

\n

{{ information.date }}, {{ information.startTime.slice(12, 17) }} - {{ information.endTime.slice(12, 17) }}

\n
\n\n
\n \n
\n
\n \n
\n
\n \n \n

{{ this.textError }}

\n \n
\n
\n
","import {Component, OnInit} from '@angular/core';\nimport {CurrentControlExtService} from '../../services/LKStudyProgress/currentcontrolext.service';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {AttendedModel} from '../../models/progress/visitLesson.model';\n\n@Component({\n selector: 'lkvisitlesson',\n templateUrl: './visitlesson.component.html',\n styleUrls: ['./visitlesson.component.scss']\n })\n\n export class VisitLessonComponent implements OnInit {\n\n public qrId: string = '';\n public information: AttendedModel = new AttendedModel();\n\n public successfully: boolean = false;\n public error: boolean = false;\n public isWarning: boolean = false;\n public textError: string = \"\";\n\n constructor(\n private currentControlExtService: CurrentControlExtService,\n private activatedRoute: ActivatedRoute,\n private router: Router,\n ) { \n this.activatedRoute.params.subscribe((param) => {\n this.qrId = param['qrId'];\n })\n }\n \n ngOnInit(): void {\n this.checkAttended();\n }\n\n public checkAttended() {\n this.currentControlExtService.checkAttended(this.qrId)\n .subscribe(response => {\n this.information = response;\n this.information.startTime = new Date(response.startTime).toLocaleString();\n this.information.endTime = new Date(response.endTime).toLocaleString();\n this.successfully = true;\n },\n error => {\n const errorObject = JSON.parse(error.error.error);\n if (errorObject.IsWarning) this.isWarning = true;\n this.error = true;\n this.textError = errorObject.Text;\n })\n }\n\n public route() {\n this.router.navigateByUrl(`/home`);\n }\n}","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { EducationComponent } from './components/education/education.component';\nimport { ExamListComponent } from './components/exam-list/exam-list.component';\nimport { HomeComponent } from './components/home/home.component';\nimport { ProgressComponent } from './components/progress/progress.component';\nimport { TimeTableComponent } from './components/timetable/timetable.component';\nimport {CallBackComponent} from \"./components/auth/callback.component\";\nimport {LoginpageComponent} from \"./components/auth/loginpage.component\";\nimport {AuthGuard} from \"./guards/authguard\";\nimport { EducationDisciplineComponent } from './components/education/education-discipline/education-discipline.component';\nimport { CompetenceMatrixComponent } from './components/education/competence-matrix/competence-matrix.component';\nimport { ShowComponent } from './components/announcement/show/show.component';\nimport { AlertComponent } from \"./components/announcement/alert/alert.component\";\nimport { SwitchuserComponent } from './components/switchuser/switchuser.component';\nimport { AdminGuard } from './guards/admin.guard';\nimport { ElectroResourcesComponent } from \"./components/electro-resources/electro-resources.component\";\nimport {EmploymentComponent} from \"./components/employment/employment.component\";\nimport {EmploymentInfoComponent} from \"./components/employment/employment-info/employment-info.component\";\nimport {SpecialModuleGuard} from \"./guards/specialmodule.guard\";\nimport {StudentcardsettingsComponent} from \"./components/home/studentcardsettings/studentcardsettings.component\";\nimport {AchievementsHomeComponent} from \"./components/achivements/home/achievements-home.component\";\nimport {ContactComponent} from \"./components/home/contact/contact.component\";\nimport {MfcRoutes} from \"./routes/mfc-routes\";\nimport {VisitLessonComponent} from './components/visitlesson/visitlesson.component';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'home', pathMatch: 'full', data: {title: 'Моя страница'} },\n { path: 'login', component: LoginpageComponent},\n { path: 'callback', component: CallBackComponent},\n { path: 'home', component: HomeComponent, data: {title: 'Моя страница'}, canActivate: [AuthGuard] },\n { path: 'home/studentcardsettings', component: StudentcardsettingsComponent, data: {title: 'Настройки отображения полей'}, canActivate: [AdminGuard] },\n { path: 'ExamList', component: ExamListComponent, data: {title: 'Расписание экзаменов'}, canActivate: [AuthGuard] },\n { path: 'TimeTable', component: TimeTableComponent, data: {title: 'Расписание занятий'}, canActivate: [AuthGuard] },\n { path: 'studyProgress', component: ProgressComponent, data: {title: 'Успеваемость'}, canActivate: [AuthGuard] },\n { path: 'education', component: EducationComponent, data: {title: 'Образование'} , canActivate: [AuthGuard] },\n { path: 'education/:tab', component: EducationComponent, data: {title: 'Образование'} , canActivate: [AuthGuard] },\n { path: 'portfolio', component: AchievementsHomeComponent, data: {title: 'Портфолио'} , canActivate: [AuthGuard] },\n { path: 'WIP', component: ExamListComponent, data: {title: 'В разработке'}, canActivate: [AuthGuard] },\n { path: 'education/discipline/:id', component: EducationDisciplineComponent, data: {title: 'Дисциплина'}, canActivate: [AuthGuard] },\n { path: 'education/competenceMatrix/:id', component: CompetenceMatrixComponent, data: {title: 'Перечень компетенций для дисциплины'}, canActivate: [AuthGuard] },\n { path: 'show/:id', component: ShowComponent, data: {title: 'Название новости'}, canActivate: [AuthGuard] },\n { path: 'alert', component: AlertComponent, data: {title: 'Объявления и новости'}, canActivate: [AuthGuard] },\n { path: 'switchuser', component: SwitchuserComponent, canActivate: [AdminGuard] },\n { path: 'electroresources', component: ElectroResourcesComponent, canActivate: [SpecialModuleGuard] },\n { path: 'employment', component: EmploymentComponent, data: {title: 'Трудовая деятельность'}, canActivate: [AuthGuard] },\n { path: 'employment/employmentInfo', component: EmploymentInfoComponent, data: {title: 'Добавить место работы'}, canActivate: [AuthGuard] },\n { path: 'employment/employmentInfo/:id', component: EmploymentInfoComponent, data: {title: 'Редактировать место работы'}, canActivate: [AuthGuard] },\n { path: 'addcontact', component: ContactComponent, data: {title: 'Добавить контакт'}, canActivate: [AuthGuard] },\n { path: 'editcontact/:contactTypeName/:contactId', component: ContactComponent, data: {title: 'Редактировать контакт'}, canActivate: [AuthGuard] },\n { path: 'visitlesson/:qrId', component: VisitLessonComponent, data: {title: ''}, canActivate: [AuthGuard] },\n { path: 'studyProgress/:disciplineId/:lessonType', component: ProgressComponent, data: {title: 'Успеваемость'}, canActivate: [AuthGuard] },\n { path: 'studyProgress/Phys/:semester/:subjectId', component: ProgressComponent, data: {title: 'Успеваемость'}, canActivate: [AuthGuard] },\n ...MfcRoutes\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","export const breadcrumbItemsMap = new Map([\n [\"\", \"Личный кабинет студента\"],\n [\"studentcardsettings\", \"Настройки отображения полей\"],\n [\"studyProgress\", \"Успеваемость\"],\n [\"education\", \"Образование\"],\n [\"portfolio\", \"Портфолио\"],\n ['switchuser', 'Просмотр от другого лица'],\n ['alert', \"Объявления и новости\"],\n ['show',\"Объявления и новости\"],\n ['electroresources', \"Электронные образовательные ресурсы и ЭБС\"],\n ['employment', \"Трудовая деятельность\"],\n ['employmentInfo', \"Добавление трудовой деятельности\"],\n ['addcontact', \"Добавление нового контакта\"],\n ['editcontact', \"Редактирование контакта\"],\n ['mfc', 'МФЦ'],\n ['constructorForm', 'Форма заявки'],\n ['applicationTypeSelect', 'Заявка'],\n ['applicationForm', 'Заявка'],\n])\n","var studentName=\"N/A\";\n\nexport const menuItems: any[] = [\n {\n text: `${studentName}`,\n items: [\n { text: \"Личный кабинет\", icon: \"k-icon k-i-user\" },\n //{ text: \"Настройки\", icon: \"k-icon k-i-gear\"},\n //{ text: \"Сменить пользователя\", icon: \"k-icon k-i-circle\"},\n { text: \"Выход\", icon: \"k-icon k-i-logout\"}\n ],\n }\n]\n","export enum SignatureTypeEnum {\n Simple = 1,\n Reinforced = 2,\n}\n","export enum Service {\n Announcements = 'announcements',\n Portfolio = 'portfolio',\n Education = 'education',\n StudyProgress = 'studyProgress',\n ElectroResources = 'electroresources',\n Employment = 'employment',\n Mfc = 'mfc',\n}\n","import {Injectable} from \"@angular/core\";\nimport {TokenStorageService} from \"./token.service\";\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\n\n@Injectable({\n providedIn: \"root\"\n})\n\nexport class AuthService {\n constructor(private tokenStoreService : TokenStorageService,\n protected jwtHelper : JwtHelperService ) {\n\n\n }\n\n public isUserAuthenticated() {\n const token = this.tokenStoreService.getAuthToken();\n if (token && !this.jwtHelper.isTokenExpired(token)) {\n return true;\n } else {\n return false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {JoinStudPersonCommand} from \"../../models/oferta/usersignature/commands/joinStudPersonCommand\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSignatureService {\n\n baseUrl = `${environment.apiEndpoint}${environment.oferta.apiPaths.userSignature}`\n\n constructor(private http: HttpClient) { }\n\n studPersonHasSignature(query: HttpParams): Observable {\n return this.http.get(this.baseUrl + '/StudPersonHasUserSignature', {params: query});\n }\n\n joinStudPersonToRegulation(command: JoinStudPersonCommand) {\n return this.http.post(this.baseUrl + '/JoinStudPerson', command)\n }\n}\n","export enum SimpleModulesEnum {\n LKS = 1,\n LKP = 2,\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient, HttpParams} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {Regulation} from \"../../models/oferta/regulation/regulation.model\";\nimport {SimpleModulesEnum} from \"../../models/oferta/enums/simpleModuleEnum.enum\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegulationService {\n baseUrl = `${environment.apiEndpoint}${environment.oferta.apiPaths.regulation}`\n\n constructor(private http: HttpClient) { }\n\n public getRegulation(dictRegulationTypeId: string, simpleModuleEnum: SimpleModulesEnum) : Observable {\n let params = new HttpParams();\n params = params.append('dictRegulationTypeId', dictRegulationTypeId);\n params = params.append('simpleModuleEnum', simpleModuleEnum);\n return this.http.get(`${this.baseUrl}/GetByEnumAndDictId`, {params});\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\nimport {DictRegulationType} from \"../../models/oferta/dicts/dictRegulationType.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DictRegulationTypeService {\n\n baseUrl = `${environment.apiEndpoint}${environment.oferta.apiPaths.dictRegulationType}`\n\n constructor(private http: HttpClient) { }\n\n getAllRegulationTypes(): Observable {\n return this.http.get(this.baseUrl);\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {environment} from \"../../../environments/environment\";\nimport {catchError} from \"rxjs/operators\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {handleError} from \"../../helpers/errorHandle-helper\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegulationFileService {\n\n baseUrl = `${environment.apiEndpoint}${environment.oferta.apiPaths.regulationFile}`\n\n constructor(private http: HttpClient) { }\n\n public getRegulationFile(id: string) {\n return this.http.get(`${this.baseUrl}/File/${id}`, {responseType: 'blob'})\n .pipe(catchError(handleError));\n }\n}\n","
\n
\n
\n

{{regulation?.regulationName}}

\n \n
\n\n
\n

Нажимая кнопку «Присоединиться к Положению», Вы принимаете изложенные в настоящей оферте условия и акцептуете настоящую оферту.

\n
\n\n
\n \n \n
\n
\n
\n
\n

{{this.regulation?.notificationText}}

\n
\n\n
\n \n
\n
\n
\n
\n

В случае отказа от присоединения к Положению работа в информационной системе будет невозможна! Для продолжения работы необходимо присоединиться к Положению.

\n
\n\n
\n \n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {Regulation} from \"../../../models/oferta/regulation/regulation.model\";\nimport {SimpleModulesEnum} from \"../../../models/oferta/enums/simpleModuleEnum.enum\";\nimport {NotificationsService} from \"../../../services/Notifications/notifications.service\";\nimport {TokenStorageService} from \"../../../services/token.service\";\nimport {UserSignatureService} from \"../../../services/oferta/user-signature.service\";\nimport {RegulationService} from \"../../../services/oferta/regulation.service\";\nimport {DictRegulationTypeService} from \"../../../services/oferta/dictRegulationType.service\";\nimport {RegulationFileService} from \"../../../services/oferta/regulationFile.service\";\nimport {saveAs} from \"@progress/kendo-file-saver\";\nimport {SignatureTypeEnum} from \"../../../models/oferta/enums/dictSignatureType.enum\";\nimport {GetRegulationFile} from \"../../../models/oferta/regulationFile/getRegulationFile.model\";\n\n@Component({\n selector: 'joining-stud-person-to-regulation',\n templateUrl: './joining-stud-person-to-regulation.component.html',\n styleUrls: ['./joining-stud-person-to-regulation.component.scss']\n})\nexport class JoiningStudPersonToRegulationComponent implements OnInit {\n\n public regulation?: Regulation = undefined;\n public simpleInfoVisible: boolean = false;\n public abortVisible: boolean = false;\n constructor(\n private notificationsService: NotificationsService,\n private userSignatureService: UserSignatureService,\n private regulationService: RegulationService,\n private regulationTypeService: DictRegulationTypeService,\n private regulationFileService: RegulationFileService,\n private tokenStore: TokenStorageService,\n ) { }\n\n ngOnInit(): void {\n this.getRegulation();\n }\n\n private getRegulation() {\n this.regulationTypeService.getAllRegulationTypes()\n .subscribe(\n response => {\n let simpleRegulationType = response.find(a => a.userSignatureTypeEnum == SignatureTypeEnum.Simple);\n if (simpleRegulationType)\n {\n this.regulationService.getRegulation(simpleRegulationType.id, SimpleModulesEnum.LKS)\n .subscribe(\n response => {\n this.regulation = response;\n },\n error => {\n this.notificationsService.showError(error);\n }\n );\n }\n }\n );\n }\n\n public onAbort() {\n this.simpleInfoVisible = false;\n this.abortVisible = true;\n }\n\n public onCancel() {\n this.simpleInfoVisible = false;\n this.abortVisible = false;\n }\n\n public logOut = () => {\n localStorage.removeItem('switchPerson');\n localStorage.removeItem('last_url');\n this.tokenStore.deleteToken();\n window.location.reload();\n }\n\n public onConfirmation() {\n this.userSignatureService.joinStudPersonToRegulation({\n regulationId: this.regulation!.id,\n })\n .subscribe(response => {\n window.location.reload();\n });\n }\n\n public joinStudPersonToSimpleRegulation() {\n this.simpleInfoVisible = true;\n }\n\n private getFileObserver(fileName?: string) {\n return {\n next: (response: Blob) => fileName && saveAs(response, fileName),\n error: (error: unknown) => this.notificationsService.showError(error)\n };\n }\n\n public getRegulationFile(file?: GetRegulationFile) {\n file && this.regulationFileService.getRegulationFile(file.id)\n .subscribe(this.getFileObserver(file.fileName));\n }\n\n}\n","\n \n \n

ЮНИВУЗ-3

\n
\n \n \n
\n

{{fullTitle}}

\n

{{shortTitle}}

\n
\n\n
\n \n \n \n \n
\n

{{fullName}}

\n
\n
\n \n \n
\n

Просмотр от другого лица

\n
\n
\n
\n \n \n
\n

Остановить просмотр

\n
\n
\n
\n 1\">\n \n \n
\n

{{item.text}}

\n
\n
\n
\n
\n \n \n
\n

Выход

\n
\n
\n
\n
\n
\n
\n\n \n \n \n
\n \n \n \n {{getBadgeCount(item.id)}}\n \n {{ item.text }}\n
\n
\n
\n \n\n \n \n \n \n
\n\n\n\n","import {\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {catchError, filter, forkJoin, map, Observable, of, Subscription} from \"rxjs\";\nimport {ActivatedRoute, NavigationEnd, Router} from \"@angular/router\";\nimport {DrawerItemExpandedFn, DrawerSelectEvent} from '@progress/kendo-angular-layout';\nimport {BreadCrumbItem} from '@progress/kendo-angular-navigation';\nimport {breadcrumbItemsMap} from \"./models/home/breadcrumb-items.model\";\nimport {Title} from '@angular/platform-browser';\nimport {menuItems} from './models/menuItems.model';\nimport {LKStudentService} from './services/LKStudent/lkstudent.service';\nimport {LKStudent} from './models/profile/lkstudent.model';\nimport {LKStudPerson} from './models/profile/lkStudPerson.model';\nimport {TokenStorageService} from \"./services/token.service\";\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\nimport {AuthService} from \"./services/auth.service\";\nimport {environment} from \"../environments/environment\";\nimport {tokenStore} from 'src/options/settings';\nimport {AlertStatisticsService} from './services/announcement/alert-statistics.service';\nimport {AlertStatistics} from './models/announcement/alert-statistics.model';\nimport {ShowService} from './services/announcement/show.service';\nimport {LKStudEduGroupService} from \"./services/LKStudent/lkstud-edu-group.service\";\nimport {UserSignatureService} from \"./services/oferta/user-signature.service\";\nimport {CreateQuery} from \"./helpers/createQuery-helper\";\nimport {SignatureTypeEnum} from \"./models/oferta/enums/dictSignatureType.enum\";\nimport {MfcNotificationService} from \"./services/mfc/mfc-notification.service\";\nimport {Service} from \"./models/enums/service.enum\";\nimport {SwitchUserService} from \"./services/switchuser/switch-user.service\";\n\nconst is = (fileName: string, ext: string) =>\n new RegExp(`.${ext}\\$`).test(fileName);\ninterface PlaceholderStrategy {\n key: string;\n getValue(params?: Record): Observable;\n}\nclass UniversalStrategy implements PlaceholderStrategy {\n constructor(public key: string, private valueProvider: (params: Record) => Observable) {}\n\n getValue(params: Record = {}): Observable {\n return this.valueProvider(params);\n }\n}\ninterface Item {\n text?: string;\n icon?: string;\n path?: string;\n selected?: boolean,\n separator?: boolean,\n id?: string,\n parentId?: string,\n url?: string\n disabled?: boolean,\n return?: boolean,\n url$?: Observable,\n}\nconst menuExpanded: string = \"menuExpanded\"\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n providers: []\n})\nexport class AppComponent implements OnInit, OnDestroy {\n\n\n title = 'Личный кабинет студента';\n public fullName? = \"\"\n public isAdmin = false;\n public isSwitchActive = false;\n protected readonly baseHref = environment.baseHref;\n public fullTitle = environment.headerTitle.full;\n public shortTitle = environment.headerTitle.short;\n public userHasSimpleSignature: boolean = true;\n private token = this.jwtHelper.decodeToken(this.tokenStore.getAuthToken() ?? \"\");\n public photoUrl = ''\n public selected = \"Inbox\";\n public expanded: boolean = (localStorage.getItem(menuExpanded) ?? \"true\") == \"true\";\n private routesData: Subscription = new Subscription;\n private services: Array = [\n {text: \"Новости и объявления\", icon:\"k-i-parameter-date-time\", url:\"/alert\", path: \"/alert\", id: Service.Announcements},\n {text: \"Портфолио\", icon: \"k-i-inherited\", url: \"/portfolio\", path:\"/portfolio\", id: Service.Portfolio},\n {text: \"Образование\", icon: \"k-i-chart-rose\", url: \"/education\", path: \"/education\", id: Service.Education},\n {text: \"Успеваемость\", icon:\"k-i-graph\", url: \"/studyProgress\", path: \"/studyProgress\", id: Service.StudyProgress},\n {text: \"Электронные образовательные ресурсы и ЭБС\", icon:\"k-i-dictionary-add\", url: \"/electroresources\", path: \"/electroresources\", id: Service.ElectroResources},\n {text: \"Трудовая деятельность\", icon:\"icon-briefcase\", url: \"/employment\", path: \"/employment\", id: Service.Employment},\n {text: \"МФЦ\", icon: \"k-i-file-txt\", url: \"/mfc\", path: \"/mfc\", id: Service.Mfc},\n //{text: \"Расписание занятий\", icon: \"k-i-calendar-date\", path: \"/WIP\", disabled: true, id: \"wip\"},\n //{text: \"Расписание экзаменов\", icon: \"k-i-calendar\", path: \"/WIP\", disabled: true, id: \"wip\"},\n //{text: \"Стипендии\", icon:\"k-i-calculator\", path: \"/WIP\", disabled: true, id: \"wip\"},\n //{text: \"Социальные документы\", icon:\"k-i-files-error\", disabled: true, path: \"/WIP\", id: \"wip\"}\n ];\n private strategies: PlaceholderStrategy[] = [\n new UniversalStrategy('user_id', () => {\n return of(this.token?.person_id);\n }),\n new UniversalStrategy('login', () => {\n console.error(this.token)\n return of(this.token?.user_login);\n }),\n new UniversalStrategy('md5', () => {\n return this.studentService.getTokenForExternalServices();\n })\n ];\n private externalLinks: Array = environment.menuItems.map((item: any) => ({\n ...item,\n url$: this.replacePlaceholders(item.url, this.strategies, {}),\n return: true}));\n public items: Array = [\n {icon: \"k-i-menu\"},\n {text: \"Профиль\", icon: \"k-i-user\", url:\"/home\", selected: true, path: \"/home\", id: \"home\"},\n ];\n\n public menuItems: any[] = menuItems;\n public currentStudents: any[] = [];\n\n public iconClass({ text, items }: any): any {\n return {\n \"k-i-file-pdf\": is(text, \"pdf\"),\n \"k-i-folder\": items !== undefined,\n \"k-i-html\": is(text, \"html\"),\n \"k-i-image\": is(text, \"jpg|png\"),\n \"k-icon\": true,\n };\n }\n\n public updateStudentName() {\n const test = this.menuItems.find(item => item.text);\n menuItems[0].text;\n }\n\n public studPersons: LKStudPerson[] = [];\n public studPerson: LKStudPerson = {\n firstName: '',\n lastName: '',\n middleName: '',\n isMale: false,\n birthday: new Date()\n }\n\n // Student\n public students: LKStudent[] = [];\n public studentModel: LKStudent = {\n externalId: \"\",\n studentNumber: \"\",\n studPersonId: \"\",\n studPerson: this.studPerson\n }\n\n public getStudEduGroup(studentId: string, id: number) {\n this.studEduGroupService.getStudEduGroupById(studentId)\n .subscribe(\n response => {\n this.currentStudents.push({\n text: `Студент ${response.eduGroup?.groupName}`,\n studentId: response.studentId,\n id: id + 1\n })\n this.currentStudents = this.currentStudents.sort((a:any, b:any) => a.id - b.id);\n }\n );\n }\n\n //Getting student by login\n public getCurrentStudent() {\n this.studentService.getCurrentStudent( )\n .subscribe(\n response => {\n menuItems[0].text = response[0].studPerson.lastName + \" \" + response[0].studPerson.firstName + \" \" + response[0].studPerson.middleName;\n this.studentModel.studPerson.firstName = response[0].studPerson.firstName + \" \" + response[0].studPerson.lastName + \" \" + response[0].studPerson.middleName;\n this.fullName = response[0].studPerson.lastName + \" \" + response[0].studPerson.firstName + \" \" + response[0].studPerson.middleName;\n this.photoUrl = `url('${environment.apiEndpoint}studperson/GetStudPersonPhoto/${response[0].studPersonId}')`;\n\n // Add switch method\n for (let i = 0; i < response.length; i++) {\n this.getStudEduGroup(response[i].externalId, i);\n }\n }\n );\n }\n\n public onSelect(ev: DrawerSelectEvent): void {\n if (ev.index === 0) {\n this.expanded = !this.expanded;\n localStorage.setItem(menuExpanded, ev.sender.expanded ? 'false' : 'true');\n }\n if (ev.item.icon == \"k-i-menu\") {\n ev.preventDefault();\n }\n else if (ev.item.path != undefined)\n this.router.navigate([ev.item.path]);\n\n }\n\n\n public breadcrumbitems: BreadCrumbItem[] = [\n {\n text: \"Главная\",\n title: \"home\",\n\n },\n {\n text: \"Моя страница\",\n title: \"studentPersonalPage\",\n }\n ];\n\n public expandedIndices = [2];\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\n return this.expandedIndices.indexOf(item.id) >= 0;\n };\n\n constructor(private router: Router,\n private titleService: Title,\n private studentService: LKStudentService,\n private studEduGroupService: LKStudEduGroupService,\n private alertStatisticsServise: AlertStatisticsService,\n private showService: ShowService,\n private jwtHelper: JwtHelperService,\n private tokenStore: TokenStorageService,\n public authService : AuthService,\n private cdRef : ChangeDetectorRef,\n private userSignatureService: UserSignatureService,\n private mfcNotificationService: MfcNotificationService,\n private switchUserService: SwitchUserService,\n\n ) {\n this.items.splice(2, 0, ...this.externalLinks);\n this.items.splice(2, 0, ...this.services.filter(item => environment.services.includes(item.id)));\n router.events.subscribe((e) => {\n if (e instanceof NavigationEnd) {\n const splitURL = e.url.split('/', 3);\n const prevSelected = this.items.find((i) => i.selected);\n if (prevSelected) {\n prevSelected.selected = false;\n }\n const newSelected = this.items.find((i) =>\n i.path === `/${splitURL[1]}` || i.path === `/${splitURL[1]}/${splitURL[2]}`);\n if (newSelected) {\n newSelected.selected = true;\n } else {\n this.items[0].selected = true;\n }\n this.items = [...this.items];\n }\n });\n this.initRoutes();\n }\n\n public mfcNotificationCount = 0;\n public calculatedParametr: AlertStatistics[\"calculatedParametr\"] = [] ;\n public getAlertStatistics() {\n this.alertStatisticsServise.getAlertStatistics()\n .subscribe(\n response => {\n this.calculatedParametr = response[\"calculatedParametr\"];\n }\n );\n }\n\n ngOnInit(): void {\n if (this.authService.isUserAuthenticated()) {\n this.getCurrentStudent();\n this.externalLinks.forEach(link => {\n link?.url$?.subscribe(updatedUrl => {\n link.url = updatedUrl;\n });\n });\n this.studPersonHasSignature();\n if (this.items.find(item => item.id === Service.Mfc)) {\n this.mfcNotificationService.subscriber$.subscribe(() => {\n this.getMfcNotificationCount();\n })\n this.getMfcNotificationCount();\n }\n }\n\n let role = [] as string[];\n const token = this.tokenStore.getAuthToken();\n if(token !== null)\n {\n const user = this.jwtHelper.decodeToken(token);\n if (user.role)\n role = user.role;\n }\n\n const switchUser = localStorage.getItem('switchStudent');\n if(switchUser === 'true')\n this.isSwitchActive = true;\n\n if(role.includes('admin'))\n this.isAdmin = true;\n\n this.cdRef.detectChanges();\n\n if (this.items.find(item => item.id === Service.Announcements)) {\n this.getAlertStatistics();\n this.showService.subscriber$.subscribe(() => {\n this.getAlertStatistics();\n });\n }\n\n // Add page titles to components\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => {\n let route: ActivatedRoute = this.router.routerState.root;\n let routeTitle = '';\n while (route!.firstChild) {\n route = route.firstChild;\n }\n if (route.snapshot.data['title']) {\n routeTitle = route!.snapshot.data['title'];\n }\n return routeTitle;\n })\n )\n .subscribe((title: string) => {\n if (title) {\n this.titleService.setTitle(`${title} – личный кабинет студента`);\n }\n });\n\n }\n\n public getMfcNotificationCount() {\n this.mfcNotificationService.getNotificationCount().subscribe((response) => {\n this.mfcNotificationCount = response;\n })\n }\n\n public isAlertEnabled(service: Service) {\n return (\n (service === Service.Announcements && this.calculatedParametr !== 0) ||\n (service === Service.Mfc && this.mfcNotificationCount !== 0)\n );\n }\n\n public getBadgeCount(service: Service) {\n switch (service) {\n case Service.Announcements:\n return this.calculatedParametr;\n case Service.Mfc:\n return this.mfcNotificationCount;\n default:\n return 0;\n }\n }\n\n public studPersonHasSignature() {\n\n if (localStorage.getItem('switchStudent') === 'true')\n return;\n\n const query = CreateQuery({\n userSignatureTypeEnum: SignatureTypeEnum.Simple\n });\n\n this.userSignatureService.studPersonHasSignature(query)\n .subscribe(response => {\n this.userHasSimpleSignature = response;\n })\n }\n\n public baseSportsIconUrl =\n \"https://demos.telerik.com/kendo-ui/content/shared/icons/sports/\";\n public baseIconUrl =\n \"https://demos.telerik.com/kendo-ui/content/shared/icons/16/\";\n\n public sportsIconUrl(imageName: string): string {\n return this.baseSportsIconUrl + imageName + \".png\";\n }\n\n public iconUrl(imageName: string): string {\n return this.baseIconUrl + imageName + \".png\";\n }\n\n public ngOnDestroy(): void {\n this.routesData.unsubscribe();\n }\n\n public menuClick(value: any) {\n return !!value.return;\n }\n\n switchUser() {\n this.router.navigate(['/switchuser']);\n }\n\n public onItemClick(item: BreadCrumbItem): void {\n const selectedItemIndex = this.breadcrumbitems.findIndex((i) => i.title === item.title);\n const url = this.breadcrumbitems\n .slice(0, selectedItemIndex + 1)\n .map((i) => `${i.title?.toLowerCase()}` );\n this.router.navigate(url);\n }\n\n private initRoutes(): void {\n this.routesData = this.router.events.subscribe(() => {\n // Exclude query parameters from URL\n const route = this.router.url;\n this.breadcrumbitems = route\n .substring(0, route.indexOf('?') !== -1 ? route.indexOf('?') : route.length)\n .split('/')\n .filter((segment)=> breadcrumbItemsMap.has(segment))\n .map((segment) => {\n return {\n text: breadcrumbItemsMap.get(segment),\n title: segment\n };\n });\n\n this.breadcrumbitems = [\n // {\n // text: 'Главная',\n // title: ''\n // },\n ...this.breadcrumbitems\n ];\n });\n }\n\n\n showLoginPage(){\n let route = window.location.pathname//this.router.url\n return !this.authService.isUserAuthenticated() && !route.includes('/callback');\n }\n\n showCallbackPage(){\n let route = window.location.pathname//this.router.url\n return !this.authService.isUserAuthenticated() && route.includes('/callback');\n }\n\n public changeStudent(studentId: string) {\n this.switchUserService.switchCurrentStudent(studentId)\n .subscribe(\n response => {\n localStorage.removeItem(tokenStore);\n localStorage.setItem(tokenStore, JSON.stringify(response));\n window.location.reload();\n }\n );\n }\n\n public activeItem(id: string) {\n return this.token?.student_id === id;\n }\n\n stopUserPreview() {\n let currentToken = localStorage.getItem('currentToken');\n localStorage.setItem('switchStudent', 'false');\n if(currentToken !== null)\n {\n localStorage.setItem(tokenStore, currentToken);\n localStorage.removeItem('currentToken');\n window.location.reload();\n }\n }\n\n public logOut = () => {\n window.location.reload();\n localStorage.removeItem('switchStudent');\n this.tokenStore.deleteToken()\n }\n\n public activeClass!: boolean;\n\n public onMenuClick() {\n this.activeClass = !this.activeClass;\n }\n\n private parseParameters(paramString: string): Record {\n const params: Record = {};\n const regex = /(\\w+)='([^']*)'/g;\n let match;\n\n while ((match = regex.exec(paramString)) !== null) {\n params[match[1]] = match[2];\n }\n\n return params;\n }\n\n private replacePlaceholders(\n url: string, // Исходный URL с плейсхолдерами\n strategies: PlaceholderStrategy[], // Массив стратегий для получения значений плейсхолдеров\n params: Record // Параметры, которые могут быть использованы в стратегиях\n ): Observable {\n let updatedUrl = url;\n\n // Создание массива Observables для каждой стратегии\n const observables = strategies.map(strategy => {\n // Регулярное выражение для поиска плейсхолдеров в формате {key}\n const regex = new RegExp(`\\\\{${strategy.key}(.*?)\\\\}`, 'g');\n const matches = updatedUrl.match(regex) || [];\n // Если совпадений нет, возвращаем пустой Observable\n if (matches.length === 0) {\n return of([]);\n }\n // Если есть совпадения, обрабатываем каждое через forkJoin (одновременная обработка всех плейсхолдеров)\n return forkJoin(\n matches.map(match => {\n // Извлекаем параметры из плейсхолдера\n const p1 = match.replace(/[{}]/g, '');\n const paramMap = this.parseParameters(p1);\n // Вызываем стратегию для получения значения плейсхолдера\n return strategy.getValue({ ...params, ...paramMap }).pipe(\n map(value => ({\n match,\n value\n })),\n catchError((error: any) => {\n console.error(`Error processing key '${strategy.key}' with match '${match}':`, error);\n return of({ match, value: '' }); // Возвращаем пустое значение в случае ошибки\n })\n );\n })\n );\n });\n\n // Обрабатываем массив Observables и заменяем плейсхолдеры на значения\n return forkJoin(observables).pipe(\n map(results => {\n results.forEach(resultGroup => {\n resultGroup.forEach(({ match, value }) => {\n if (value) {\n // Заменяем плейсхолдер в URL на значение\n updatedUrl = updatedUrl.replace(match, value);\n }\n });\n });\n return updatedUrl; // Возвращаем обновленный URL\n }),\n catchError((error: any) => {\n console.error('Error in replacePlaceholders:', error);\n return of(updatedUrl); // В случае ошибки возвращаем исходный URL\n })\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor, HttpErrorResponse\n} from '@angular/common/http';\nimport {BehaviorSubject, filter, Observable, switchMap, take, throwError} from 'rxjs';\nimport {Router} from \"@angular/router\";\nimport {catchError} from \"rxjs/operators\";\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\nimport {TokenStorageService} from \"../services/token.service\";\n\n@Injectable()\nexport class TokenInterceptor implements HttpInterceptor {\n constructor( private route: Router, private tokenStorageService: TokenStorageService) {\n }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n\n\n return next.handle(request).pipe(\n catchError(err => {\n if (err instanceof HttpErrorResponse) {\n //console.log('status code ' + err.status);\n switch ((err).status) {\n case 401:\n this.route.navigateByUrl('login');\n return throwError(() => err);\n\n break;\n default:\n //this.notification.showNotification(\"error\",\n // err?.error?.message ?? \"Произошла ошибка при обработке запроса\");\n return throwError(() => err);\n }\n }\n else return throwError(() => err);\n })\n );\n }\n\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { MessageService } from '@progress/kendo-angular-l10n';\n\nconst data = {\n ru: {\n /**\n * Отображение текста. По умолчанию Слева направо\n */\n rtl: false,\n messages: {\n kendo: {\n grid: {\n groupPanelEmpty: \"Перетаскивайте сюда заголовки колонок, чтобы сгруппировать по ним\",\n noRecords: \"Нет записей.\",\n pagerFirstPage: \"Перейти на первую страницу\",\n pagerPreviousPage: \"Перейти на предыдущую страницу\",\n pagerNextPage: \"Перейти на следующую страницу\",\n pagerLastPage: \"Перейти на последнюю страницу\",\n pagerPage: \"Страница\",\n pagerOf: \"из\",\n pagerItems: \"элементов\",\n pagerItemsPerPage: \"элементов на странице\",\n pagerPageNumberInputTitle: \"Page Number\",\n filter: \"Фильтр\",\n filterEqOperator: \"Равно\",\n filterNotEqOperator: \"Не равно\",\n filterIsNullOperator: \"Нет значения\",\n filterIsNotNullOperator: \"Есть значение\",\n filterIsEmptyOperator: \"Пусто\",\n filterIsNotEmptyOperator: \"Не пусто\",\n filterStartsWithOperator: \"Начинается с\",\n filterContainsOperator: \"Содержит\",\n filterNotContainsOperator: \"Не содержит\",\n filterEndsWithOperator: \"Заканчивается на\",\n filterGteOperator: \"Больше или равно\",\n filterGtOperator: \"Больше чем\",\n filterLteOperator: \"Меньше или равно\",\n filterLtOperator: \"Меньше чем\",\n filterIsTrue: \"Да\",\n filterIsFalse: \"Нет\",\n filterBooleanAll: \"(Все)\",\n filterAfterOrEqualOperator: \"Позже или равна\",\n filterAfterOperator: \"Позже чем\",\n filterBeforeOperator: \"Раньше чем\",\n filterBeforeOrEqualOperator: \"Раньше или равна\",\n filterFilterButton: \"Отфильтровать\",\n filterClearButton: \"Сбросить\",\n filterAndLogic: \"И\",\n filterOrLogic: \"ИЛИ\",\n filterDateToggle: \"Переключить календарь.\",\n filterDateToday: \"Сегодня\",\n filterNumericDecrement: \"Уменьшить значение\",\n filterNumericIncrement: \"Увеличить значение\",\n loading: \"Загрузка\",\n columns: \"Колонки\",\n lock: \"Заблокировать\",\n unlock: \"Разблокировать\",\n stick: \"Прикрепить\",\n unstick: \"Открепить\",\n setColumnPosition: \"Установить положение столбца\",\n sortAscending: \"Отсортировать по возрастанию\",\n sortDescending: \"Отсортировать по убыванию\",\n columnsApply: \"Применить\",\n columnsReset: \"Сбросить\",\n sortable: \"Можно сортировать\",\n sortedAscending: \"Отсортировано по возрастанию\",\n sortedDescending: \"Отсортировано по убыванию\",\n sortedDefault: \"Сортировка сброшена\",\n filterInputLabel: '{columnName} Filter',\n filterMenuTitle: '{columnName} Filter Menu',\n filterMenuOperatorsDropDownLabel: '{columnName} Filter Operators',\n filterMenuLogicDropDownLabel: '{columnName} Filter Logic',\n columnMenu: '{columnName} Column Menu',\n selectionCheckboxLabel: \"Выберите строку\",\n selectAllCheckboxLabel: \"Выбрать все строки\",\n pagerLabel: 'Навигация по страницам, страница {currentPage} из {totalPages}',\n gridLabel: \"Таблица данных\",\n groupCollapse: \"Свернуть группу\",\n groupExpand: \"Развернуть группу\",\n detailCollapse: \"Свернуть детали\",\n detailExpand: \"Развернуть детали\"\n },\n upload: {\n cancel: \"Отменить загрузку\",\n clearSelectedFiles: \"Очистить\",\n dropFilesHere: \"перетащите сюда файлы для загрузки\",\n headerStatusUploaded: \"Готово\",\n headerStatusUploading: \"Загружается...\",\n invalidFileExtension: \"Не разрешенный тип файла.\",\n invalidMaxFileSize: \"Размер файла слишком большой.\",\n invalidMinFileSize: \"Размер файла слишком маленький.\",\n remove: \"Удалить\",\n retry: \"Повторить\",\n select: \"Выбрать...\",\n uploadSelectedFiles: \"Загрузить выбранные файлы\",\n externalDropFilesHere: \"Перетащите файлы сюда для загрузки\",\n filesBatchStatus: \"файлы\",\n filesBatchStatusFailed: \"Не удалось загрузить файлы.\",\n filesBatchStatusUploaded: \"Файлы загружены.\",\n fileStatusFailed: \"Не удалось загрузить файл.\",\n fileStatusUploaded: \"Файл загружен.\",\n headerStatusPaused: \"Приостановлено\"\n },\n fileselect: {\n dropFilesHere: \"Или перетащите сюда файлы для загрузки\",\n invalidFileExtension: \"Не разрешенный тип файла.\",\n invalidMaxFileSize: \"Размер файла слишком большой.\",\n invalidMinFileSize: \"Размер файла слишком маленький.\",\n remove: \"Удалить\",\n select: \"Выбрать...\"\n },\n chat: {\n messagePlaceholder: \"Введите сообщение...\",\n send: \"Отправить\"\n },\n dropdownlist: {\n noDataText: \"Нет данных\",\n // selectButtonText: \"\"\n },\n datepicker: {\n toggle: 'Переключить всплывающее окно',\n today: 'Сегодня',\n prevButtonTitle: 'Перейти к предыдущему виду',\n nextButtonTitle: 'Перейти к следующему виду'\n },\n combobox: {\n noDataText: 'Нет данных'\n },\n datetimepicker: {\n dateTab: 'Дата',\n timeTab: 'Время',\n today: 'Сегодня',\n cancel: 'Отмена',\n accept: 'Назначить'\n }\n }\n }\n },\n en: {\n rtl: false,\n messages: {\n \"kendo.grid.noRecords\": \"No records available.\"\n },\n },\n};\n\n\n\n@Injectable()\nexport class MyMessageService extends MessageService {\n /**\n * Язык по умолчанию\n * @private\n */\n private localeId = \"ru\";\n\n public set language(value: string) {\n const lang = data[value as keyof typeof data];\n if (lang) {\n this.localeId = value;\n this.notify(lang.rtl);\n }\n }\n \n public get language(): string {\n return this.localeId;\n }\n \n private get messages(): any {\n const lang = data[this.localeId as keyof typeof data];\n \n if (lang) {\n return lang.messages;\n }\n }\n \n public override get(key: string): string {\n try {\n let keys = key.split('.');\n return this.messages[keys[0]][keys[1]][keys[2]];\n }\n catch (e) {\n return this.messages[key];\n }\n }\n}","import { LOCALE_ID, NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport {\n HttpClientModule,\n HttpClientJsonpModule,\n HttpClient, HTTP_INTERCEPTORS,\n} from \"@angular/common/http\";\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { GridModule, ExcelModule } from '@progress/kendo-angular-grid';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MenuModule } from '@progress/kendo-angular-menu';\nimport { NotificationModule } from '@progress/kendo-angular-notification';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { LabelModule } from '@progress/kendo-angular-label';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\nimport { ChartsModule } from '@progress/kendo-angular-charts';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport 'hammerjs';\nimport { NavigationModule } from '@progress/kendo-angular-navigation';\nimport { ListBoxModule } from '@progress/kendo-angular-listbox';\nimport { ListViewModule } from '@progress/kendo-angular-listview';\nimport \"@progress/kendo-angular-intl/locales/ru/all\"\nimport {registerLocaleData} from '@angular/common';\nimport localeRu from '@angular/common/locales/ru';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IconsModule } from '@progress/kendo-angular-icons';\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\nimport { DropDownsModule, DropDownListModule } from '@progress/kendo-angular-dropdowns';\nimport {HomeComponent} from \"./components/home/home.component\";\nimport { TimeTableComponent } from './components/timetable/timetable.component';\nimport { ExamListComponent } from './components/exam-list/exam-list.component';\nimport { ProgressComponent } from './components/progress/progress.component';\nimport { FilterDropdownComponent } from './components/filter-dropdown/filter-dropdown.component';\nimport { EducationComponent } from './components/education/education.component';\nimport { EventsComponent } from './components/home/events/events/events.component';\nimport { ExamsComponent } from './components/home/exams/exams.component';\nimport { StudentComponent } from './components/home/student/student.component';\nimport { UploadsModule } from '@progress/kendo-angular-upload';\nimport { DialogsModule } from '@progress/kendo-angular-dialog';\nimport {CallBackComponent} from \"./components/auth/callback.component\";\nimport {LoginpageComponent} from \"./components/auth/loginpage.component\";\nimport {JWT_OPTIONS, JwtModule} from \"@auth0/angular-jwt\";\nimport {TokenStorageService} from \"./services/token.service\";\nimport {jwtOptionsFactory} from \"./services/jwt\";\nimport {AuthGuard} from \"./guards/authguard\";\nimport {TokenInterceptor} from \"./interceptors/token.interceptor\";\nimport { IndicatorsModule } from '@progress/kendo-angular-indicators';\nimport { EducationDisciplineComponent } from './components/education/education-discipline/education-discipline.component';\nimport { FilterUniquePipe } from './pipes/filter-unique.pipe';\nimport { CompetenceMatrixComponent } from './components/education/competence-matrix/competence-matrix.component';\nimport { MessageService } from '@progress/kendo-angular-l10n';\nimport { MyMessageService } from './message-service.service';\nimport { ShowComponent } from './components/announcement/show/show.component';\nimport { CommentsComponent } from './components/announcement/show/comments/comments.component';\nimport { EducationalProcessScheduleCellComponent } from './components/education/educational-process-schedue-cell/educational-process-schedule-cell.component';\nimport { AlertComponent} from \"./components/announcement/alert/alert.component\";\nimport { PagerModule } from '@progress/kendo-angular-pager';\nimport { SwitchuserComponent } from './components/switchuser/switchuser.component';\nimport { EditorModule } from '@progress/kendo-angular-editor';\nimport { ElectroResourcesComponent } from \"./components/electro-resources/electro-resources.component\";\nimport {EmploymentComponent} from \"./components/employment/employment.component\";\nimport {EmploymentInfoComponent} from \"./components/employment/employment-info/employment-info.component\";\nimport { SettingsComponent } from './components/home/settings/settings.component';\nimport { StudentsettingsComponent } from './components/home/studentsettings/studentsettings.component';\nimport { StudentcardsettingsComponent } from './components/home/studentcardsettings/studentcardsettings.component';\nimport {AchievementsHomeComponent} from \"./components/achivements/home/achievements-home.component\";\nimport {SimpleAchievementsComponent} from \"./components/achivements/simple/simple-achievements.component\";\nimport {AdvancedAchievementsComponent} from \"./components/achivements/advanced/advanced-achievements.component\";\nimport {OpenOnFocusDateDirective} from \"./directives/open-on-focus-date.directive\";\nimport { TooltipsModule } from '@progress/kendo-angular-tooltip';\nimport {ContactComponent} from \"./components/home/contact/contact.component\";\nimport {\n JoiningStudPersonToRegulationComponent\n} from \"./components/oferta/joining-stud-person-to-regulation/joining-stud-person-to-regulation.component\";\nimport {OpenOnFocusDirective} from \"./directives/open-on-focus.directive\";\nimport {OpenOnFocusMultiselectDirective} from \"./directives/open-on-focus-multiselect.directive\";\nimport {OpenOnFocusAutocompleteDirective} from \"./directives/open-on-focus-autocomplete.directive\";\nimport {AfterValueChangedDirective} from \"./directives/after-value-changed.directive\";\nimport {MFCComponents} from \"./routes/mfc-routes\";\nimport {FilterMultiselectComponent} from \"./common/filter-multiselect/filter-multiselect.component\";\nimport {DateRangeFilterComponent} from \"./common/date-range-filter/date-range-filter.component\";\nimport { IotComponent } from './components/education/iot/iot/iot.component';\nimport {VisitLessonComponent} from './components/visitlesson/visitlesson.component';\n\n\n\n\n\n\nregisterLocaleData(localeRu)\n\n\n@NgModule({\n declarations: [\n AppComponent,\n HomeComponent,\n TimeTableComponent,\n ExamListComponent,\n ProgressComponent,\n FilterDropdownComponent,\n FilterMultiselectComponent,\n DateRangeFilterComponent,\n EducationComponent,\n EventsComponent,\n ExamsComponent,\n StudentComponent,\n LoginpageComponent,\n CallBackComponent,\n EducationDisciplineComponent,\n FilterUniquePipe,\n CompetenceMatrixComponent,\n ShowComponent,\n CommentsComponent,\n EducationalProcessScheduleCellComponent,\n AlertComponent,\n SwitchuserComponent,\n ElectroResourcesComponent,\n JoiningStudPersonToRegulationComponent,\n EmploymentComponent,\n EmploymentInfoComponent,\n SettingsComponent,\n StudentsettingsComponent,\n StudentcardsettingsComponent,\n AchievementsHomeComponent,\n SimpleAchievementsComponent,\n ContactComponent,\n AdvancedAchievementsComponent,\n OpenOnFocusDirective,\n OpenOnFocusMultiselectDirective,\n OpenOnFocusAutocompleteDirective,\n OpenOnFocusDateDirective,\n AfterValueChangedDirective,\n ...MFCComponents,\n IotComponent,\n VisitLessonComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n DateInputsModule,\n DropDownsModule,\n DropDownListModule,\n ButtonsModule,\n GridModule,\n BrowserAnimationsModule,\n MenuModule,\n FormsModule,\n ReactiveFormsModule,\n NotificationModule,\n InputsModule,\n LabelModule,\n LayoutModule,\n ChartsModule,\n NavigationModule,\n ListBoxModule,\n ListViewModule,\n HttpClientModule,\n IconsModule,\n ExcelModule,\n UploadsModule,\n DialogsModule,\n TooltipsModule,\n PagerModule,\n JwtModule.forRoot({\n jwtOptionsProvider: {\n provide: JWT_OPTIONS,\n useFactory: jwtOptionsFactory,\n deps: [TokenStorageService]\n }\n }),\n IndicatorsModule,\n EditorModule,\n ],\n providers: [\n AuthGuard,\n {provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true},\n { provide: MessageService, useClass: MyMessageService },\n { provide: LOCALE_ID, useValue: 'ru' }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nif (environment.searchBotDisallow) {\n const meta = document.querySelector('meta') ?? document.createElement('meta');\n meta.setAttribute('name', 'robots');\n meta.setAttribute('content', 'none');\n}\n\nconst base = document.querySelector('base') ?? document.createElement('base');\nbase.href = environment.baseHref;\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","import {TokenStorageService} from \"./token.service\";\nimport {environment} from \"../../environments/environment\";\n\n\nexport function jwtOptionsFactory(tokenStorageService: TokenStorageService) {\n return {\n tokenGetter: () => {\n return tokenStorageService.getAuthToken();\n },\n allowedDomains: environment.allowedDomains\n }\n}\n","var map = {\n\t\"./af\": 8685,\n\t\"./af.js\": 8685,\n\t\"./ar\": 254,\n\t\"./ar-dz\": 4312,\n\t\"./ar-dz.js\": 4312,\n\t\"./ar-kw\": 2614,\n\t\"./ar-kw.js\": 2614,\n\t\"./ar-ly\": 8630,\n\t\"./ar-ly.js\": 8630,\n\t\"./ar-ma\": 8674,\n\t\"./ar-ma.js\": 8674,\n\t\"./ar-sa\": 9032,\n\t\"./ar-sa.js\": 9032,\n\t\"./ar-tn\": 4730,\n\t\"./ar-tn.js\": 4730,\n\t\"./ar.js\": 254,\n\t\"./az\": 3052,\n\t\"./az.js\": 3052,\n\t\"./be\": 150,\n\t\"./be.js\": 150,\n\t\"./bg\": 3069,\n\t\"./bg.js\": 3069,\n\t\"./bm\": 3466,\n\t\"./bm.js\": 3466,\n\t\"./bn\": 8516,\n\t\"./bn-bd\": 557,\n\t\"./bn-bd.js\": 557,\n\t\"./bn.js\": 8516,\n\t\"./bo\": 6273,\n\t\"./bo.js\": 6273,\n\t\"./br\": 9588,\n\t\"./br.js\": 9588,\n\t\"./bs\": 9815,\n\t\"./bs.js\": 9815,\n\t\"./ca\": 3331,\n\t\"./ca.js\": 3331,\n\t\"./cs\": 1320,\n\t\"./cs.js\": 1320,\n\t\"./cv\": 2219,\n\t\"./cv.js\": 2219,\n\t\"./cy\": 8266,\n\t\"./cy.js\": 8266,\n\t\"./da\": 6427,\n\t\"./da.js\": 6427,\n\t\"./de\": 7435,\n\t\"./de-at\": 2871,\n\t\"./de-at.js\": 2871,\n\t\"./de-ch\": 2994,\n\t\"./de-ch.js\": 2994,\n\t\"./de.js\": 7435,\n\t\"./dv\": 2357,\n\t\"./dv.js\": 2357,\n\t\"./el\": 5649,\n\t\"./el.js\": 5649,\n\t\"./en-au\": 9961,\n\t\"./en-au.js\": 9961,\n\t\"./en-ca\": 9878,\n\t\"./en-ca.js\": 9878,\n\t\"./en-gb\": 3924,\n\t\"./en-gb.js\": 3924,\n\t\"./en-ie\": 864,\n\t\"./en-ie.js\": 864,\n\t\"./en-il\": 1579,\n\t\"./en-il.js\": 1579,\n\t\"./en-in\": 940,\n\t\"./en-in.js\": 940,\n\t\"./en-nz\": 6181,\n\t\"./en-nz.js\": 6181,\n\t\"./en-sg\": 4301,\n\t\"./en-sg.js\": 4301,\n\t\"./eo\": 5291,\n\t\"./eo.js\": 5291,\n\t\"./es\": 4529,\n\t\"./es-do\": 3764,\n\t\"./es-do.js\": 3764,\n\t\"./es-mx\": 2584,\n\t\"./es-mx.js\": 2584,\n\t\"./es-us\": 3425,\n\t\"./es-us.js\": 3425,\n\t\"./es.js\": 4529,\n\t\"./et\": 5203,\n\t\"./et.js\": 5203,\n\t\"./eu\": 678,\n\t\"./eu.js\": 678,\n\t\"./fa\": 3483,\n\t\"./fa.js\": 3483,\n\t\"./fi\": 6262,\n\t\"./fi.js\": 6262,\n\t\"./fil\": 2521,\n\t\"./fil.js\": 2521,\n\t\"./fo\": 4555,\n\t\"./fo.js\": 4555,\n\t\"./fr\": 3131,\n\t\"./fr-ca\": 8239,\n\t\"./fr-ca.js\": 8239,\n\t\"./fr-ch\": 1702,\n\t\"./fr-ch.js\": 1702,\n\t\"./fr.js\": 3131,\n\t\"./fy\": 267,\n\t\"./fy.js\": 267,\n\t\"./ga\": 3821,\n\t\"./ga.js\": 3821,\n\t\"./gd\": 1753,\n\t\"./gd.js\": 1753,\n\t\"./gl\": 4074,\n\t\"./gl.js\": 4074,\n\t\"./gom-deva\": 2762,\n\t\"./gom-deva.js\": 2762,\n\t\"./gom-latn\": 5969,\n\t\"./gom-latn.js\": 5969,\n\t\"./gu\": 2809,\n\t\"./gu.js\": 2809,\n\t\"./he\": 5402,\n\t\"./he.js\": 5402,\n\t\"./hi\": 315,\n\t\"./hi.js\": 315,\n\t\"./hr\": 410,\n\t\"./hr.js\": 410,\n\t\"./hu\": 8288,\n\t\"./hu.js\": 8288,\n\t\"./hy-am\": 7928,\n\t\"./hy-am.js\": 7928,\n\t\"./id\": 1334,\n\t\"./id.js\": 1334,\n\t\"./is\": 6959,\n\t\"./is.js\": 6959,\n\t\"./it\": 4864,\n\t\"./it-ch\": 1124,\n\t\"./it-ch.js\": 1124,\n\t\"./it.js\": 4864,\n\t\"./ja\": 6141,\n\t\"./ja.js\": 6141,\n\t\"./jv\": 9187,\n\t\"./jv.js\": 9187,\n\t\"./ka\": 2136,\n\t\"./ka.js\": 2136,\n\t\"./kk\": 4332,\n\t\"./kk.js\": 4332,\n\t\"./km\": 8607,\n\t\"./km.js\": 8607,\n\t\"./kn\": 4305,\n\t\"./kn.js\": 4305,\n\t\"./ko\": 234,\n\t\"./ko.js\": 234,\n\t\"./ku\": 6003,\n\t\"./ku.js\": 6003,\n\t\"./ky\": 5061,\n\t\"./ky.js\": 5061,\n\t\"./lb\": 2786,\n\t\"./lb.js\": 2786,\n\t\"./lo\": 6183,\n\t\"./lo.js\": 6183,\n\t\"./lt\": 29,\n\t\"./lt.js\": 29,\n\t\"./lv\": 4169,\n\t\"./lv.js\": 4169,\n\t\"./me\": 8577,\n\t\"./me.js\": 8577,\n\t\"./mi\": 8177,\n\t\"./mi.js\": 8177,\n\t\"./mk\": 337,\n\t\"./mk.js\": 337,\n\t\"./ml\": 5260,\n\t\"./ml.js\": 5260,\n\t\"./mn\": 2325,\n\t\"./mn.js\": 2325,\n\t\"./mr\": 4695,\n\t\"./mr.js\": 4695,\n\t\"./ms\": 5334,\n\t\"./ms-my\": 7151,\n\t\"./ms-my.js\": 7151,\n\t\"./ms.js\": 5334,\n\t\"./mt\": 3570,\n\t\"./mt.js\": 3570,\n\t\"./my\": 7963,\n\t\"./my.js\": 7963,\n\t\"./nb\": 8028,\n\t\"./nb.js\": 8028,\n\t\"./ne\": 6638,\n\t\"./ne.js\": 6638,\n\t\"./nl\": 302,\n\t\"./nl-be\": 6782,\n\t\"./nl-be.js\": 6782,\n\t\"./nl.js\": 302,\n\t\"./nn\": 3501,\n\t\"./nn.js\": 3501,\n\t\"./oc-lnc\": 563,\n\t\"./oc-lnc.js\": 563,\n\t\"./pa-in\": 869,\n\t\"./pa-in.js\": 869,\n\t\"./pl\": 5302,\n\t\"./pl.js\": 5302,\n\t\"./pt\": 9687,\n\t\"./pt-br\": 4884,\n\t\"./pt-br.js\": 4884,\n\t\"./pt.js\": 9687,\n\t\"./ro\": 9107,\n\t\"./ro.js\": 9107,\n\t\"./ru\": 3627,\n\t\"./ru.js\": 3627,\n\t\"./sd\": 355,\n\t\"./sd.js\": 355,\n\t\"./se\": 3427,\n\t\"./se.js\": 3427,\n\t\"./si\": 1848,\n\t\"./si.js\": 1848,\n\t\"./sk\": 4590,\n\t\"./sk.js\": 4590,\n\t\"./sl\": 184,\n\t\"./sl.js\": 184,\n\t\"./sq\": 6361,\n\t\"./sq.js\": 6361,\n\t\"./sr\": 8965,\n\t\"./sr-cyrl\": 1287,\n\t\"./sr-cyrl.js\": 1287,\n\t\"./sr.js\": 8965,\n\t\"./ss\": 5456,\n\t\"./ss.js\": 5456,\n\t\"./sv\": 451,\n\t\"./sv.js\": 451,\n\t\"./sw\": 7558,\n\t\"./sw.js\": 7558,\n\t\"./ta\": 1356,\n\t\"./ta.js\": 1356,\n\t\"./te\": 3693,\n\t\"./te.js\": 3693,\n\t\"./tet\": 1243,\n\t\"./tet.js\": 1243,\n\t\"./tg\": 2500,\n\t\"./tg.js\": 2500,\n\t\"./th\": 5768,\n\t\"./th.js\": 5768,\n\t\"./tk\": 7761,\n\t\"./tk.js\": 7761,\n\t\"./tl-ph\": 5780,\n\t\"./tl-ph.js\": 5780,\n\t\"./tlh\": 9590,\n\t\"./tlh.js\": 9590,\n\t\"./tr\": 3807,\n\t\"./tr.js\": 3807,\n\t\"./tzl\": 3857,\n\t\"./tzl.js\": 3857,\n\t\"./tzm\": 654,\n\t\"./tzm-latn\": 8806,\n\t\"./tzm-latn.js\": 8806,\n\t\"./tzm.js\": 654,\n\t\"./ug-cn\": 845,\n\t\"./ug-cn.js\": 845,\n\t\"./uk\": 9232,\n\t\"./uk.js\": 9232,\n\t\"./ur\": 7052,\n\t\"./ur.js\": 7052,\n\t\"./uz\": 7967,\n\t\"./uz-latn\": 2233,\n\t\"./uz-latn.js\": 2233,\n\t\"./uz.js\": 7967,\n\t\"./vi\": 8615,\n\t\"./vi.js\": 8615,\n\t\"./x-pseudo\": 2320,\n\t\"./x-pseudo.js\": 2320,\n\t\"./yo\": 1313,\n\t\"./yo.js\": 1313,\n\t\"./zh-cn\": 4490,\n\t\"./zh-cn.js\": 4490,\n\t\"./zh-hk\": 5910,\n\t\"./zh-hk.js\": 5910,\n\t\"./zh-mo\": 8262,\n\t\"./zh-mo.js\": 8262,\n\t\"./zh-tw\": 4223,\n\t\"./zh-tw.js\": 4223\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6700;"],"x_google_ignoreList":[209]}