{"version":3,"file":"main.af95d5a0b93cfeee.js","mappings":"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CAC,MACAC,MACAC,KACAC,MACAC,MACAC,MACAC,MACA7gC,KACA8gC,MACAX,KACAY,MACAC,MACAC,MACAC,aAAkB,CAChBC,mBAAmB,CACjBzB,QAASwB,KACTE,WEzHD,SAASC,GAAkBrJ,GAChC,MAAO,CACLsJ,YAAa,IACJtJ,EAAoBvR,eAE7B3rB,eAAgBb,iBAEpB,EFmHQsnC,KAAM,CAACnb,MAGXob,MACAC,SC5HAxnC,iBACFiH,SAGEjH,oBAA+B,CACjC,MAAMynC,EAAOniC,SAASoiC,cAAc,SAAWpiC,SAAS2uB,cAAc,QACtEwT,EAAKrT,aAAa,OAAQ,UAC1BqT,EAAKrT,aAAa,UAAW,QAG/B0R,OAAyB6B,gBAAgBpC,IACtCqC,MAAMtgB,GAAOxgB,QAAQL,MAAM6gB,GAAI,kBEjBlC,OACA,YACA,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,cACA,8CACA,gCACA0O,CACA,CACA,WACA,CACA6R,kBACA,qBACA,EACAA,YACAC,YACAD","names":["CommonStatusEnumList","CommonStatusEnum","environment","production","window","env","prod","demo","searchBotDisallow","apiEndpoint","apiUrl","trustedNetClientId","clientId","authEndPoint","authUrl","allowedDomains","fileServerEndpoint","announcementApiEndpoint","supportEmail","infoMessage","invalidTokenMessage","headerTitle","full","fullHeader","short","shortHeader","apiPaths","ExamList","Student","DictOrganization","DictStudentAcademicState","DictStudentBudget","DictStudentBudgetSubCategory","EduGroup","Email","Languages","OrdersStudyPeriod","Phone","StudEduGroup","StudentAcademicState","StudentBudgetState","StudPerson","Personal","EducationProgram","TimeTable","StudyProgress","EducationIntensityData","EducationBUP","BudgetTime","DirectionActivity","StudPlan","MiddleControl","CurrentControl","DictAttestation","WorkScheduleType","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","educationPlan","competenceMatrixService","eStandardTypes","dictEducationLevel","dictQualification","dictTrainingLevel","portfolio","dict","document","achievement","maxFileSize","portfolio_maxFileSize","announcement","commentMaxFileSize","announcement_commentMaxFileSize","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","getAllStudEduGroups","getGroupEducationPlanByStudentId","getEducationProgramByStudentId","getStudyFormByStudentId","LKStudentService","getStudentById","id","getStudentByLogin","getCurrentStudent","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","i0","selectors","EducationComponent","educationPlanService","studPlanService","studEduGroupService","studentService","dictWorkScheduleStudyProcessTypeService","router","route","String","snapshot","paramMap","firstName","lastName","middleName","isMale","birthday","Date","externalId","studentNumber","studPersonId","studPerson","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","fullName","eduGroupId","eduGroup","field","dir","bupData","color","context","dataLevel","dataItem","Level","planLevel0","planLevel1","planLevel2","noActive","Active","semester","dates","semesterBegin","findWeek","installationSessionBegin","semesterEnd","installationSessionEnd","IsTabSelected","undefined","tabNumber","toString","hasProfile","profilingCourseNumber","studEduGroup","subscribe","response","_this","studPlan","studEducationPlan","planId","delay","ms","Promise","resolve","setTimeout","hasLoaded","plan","educationProgramName","studGroupEducationProgram","trainingLevelId","mapLegend","filterScheduleLegent","emptyCell","find","x","dictWorkCategoryScheduleId","isInvolvedCalculating","arr","JSON","parse","profileValue","studyTechnologyName","DictStudyTechnology","Name","yearsLength","StudyYears","monthsLength","StudyMonths","studyFormValue","toLowerCase","currentComponent","planData","currentCycleId","discipline","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","item","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","DateFromUTCAsLocal","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","type","SerialNumberWeek","currentWeek","DaysAmount","WorkType","Symbol","Color","currentSemester","installationSessionBeginWeek","installationSessionEndWeek","some","InstallationSession","getWeekDayNumber","CategoryId","sortEmpty","tableHeaderData","templateHeaderData","date","dateStart","dateEnd","at","month","getStudGroupEducationProgramByStudentId","removeDuplicateSemesters","result","DictControlActionAbbreviation","res","slice","displayCompetenceMatrix","string","t","Code","groupEducationPlan","changeStudent","localStorage","getItem","students","studentModel","getDictWorkScheduleStudyProcessType","next","disciplineCellClick","navigate","competenceMatrixCellClick","selectedDisciplineId","navigateToCompetenceMatrix","startWeekDate","firstDayNumber","getDay","secondDayNumber","disciplines","cycleId","componentId","HiddenLaborIntensity","sum","current","HoursContactWork","controlActionId","isCourseWork","isCourseProject","HasCourseProject","HasCourseWork","replace","ExamListComponent","subject","data","location","fio","LKEmailService","getEmails","LKLanguagesService","getLanguages","LKOrdersStudyPeriodService","getOrdersStudyPeriods","LKPhoneService","getPhones","LKStudentAcademicStateService","getStudentAcademicStates","LKStudentBudgetStateService","getStudentBudgetStates","MiddleControlService","getMiddleControlsByStudentId","getMiddleControlsByStudentSemester","studentSemesterId","getStudentMarksAverageScore","getStudentMarksByStudentSemester","getStudentSemesters","getMiddleControlById","HomeComponent","emailService","languagesService","ordersStudyPeriodService","phoneService","studentAcademicStateService","studentBudgetStateService","middleControlService","vertical","channel","conversion","users","author","annotation","organizationName","academicStateName","studentBudgetName","studentBudgetSName","isBudget","dictStudentBudgetId","dictStudentBudget","budgetSubCategoryName","dictStudentAcademicStateId","dictStudentAcademicState","dictOrganization","dictStudentBudgetSubCategory","phoneNumber","dateFinish","levelName","languageName","dictLanguageId","dictLanguage","dictLanguageLevelId","dictLanguageLevel","email","day","dayName","studentNumberValue","photoUrl","getEmail","getStudentAcademicStatus","getOrdersStudyPeriod","getStudentBudgetState","getMarksAverageScore","emailValue","facultyValue","courseValue","groupNameValue","phone","phoneValue","orderStudyPeriod","endDateParse","startDateParse","endYear","startYear","dateEndValue","dateStartValue","languages","languagesValue","studentAcademicState","academicStatusValue","studentBudgetState","budgetStateValue","organizationValue","hideOrganizationValue","studyDirection","profile","_this2","departmentStudPlan","departmentValue","_this3","averageScoreValue","averageSemesterResult","showStudentInformation","shortInformation","phoneFormat","input","startsWith","substring","LKPortfolioService","getAchievements","query","CreateQuery","params","postAchievement","post","putAchievement","put","deleteAchievement","delete","downloadAchievementFile","responseType","queryModel","key","entries","isArray","appendAll","append","DictService","getDirectionActivities","NotificationsService","notificationService","showSuccess","show","content","hideAfter","width","position","horizontal","animation","duration","style","icon","showError","getErrorMessage","detail","PortfolioComponent","portfolioService","dictService","activateRoute","dialogService","minFileSize","allowedExtensions","UntypedFormGroup","UntypedFormControl","directionActivityId","filialId","toPromise","then","getDirectionActivitiesByFilter","reason","loading","achievements","err","complete","directionActivities","directionActivitiesByFilter","displayDirectionActivityName","_","removeAchievement","editable","openRemoveDialog","deleteTarget","height","minWidth","open","text","themeColor","DialogCloseResult","editAchievement","editMode","resetForm","editForm","FormGroup","FormControl","fileUploadedList","files","fileUploaded","downloadFile","file","blob","Blob","saveAs","addAchievement","closeEditForm","saveAchievement","formData","FormData","fileUploads","reset","fileSelected","fileRemoved","openDialog","opened","closeDialog","CurrentControlService","getCurrentControlsByStudentSemester","DictAttestationService","GetDictAttestations","ProgressComponent","currentControlService","dictAttestationService","fesm2020_forms","semestrBegin","semestrEnd","semestrNum","getDictAttestations","dictAttestations","getMarkValue","getMiddleControlStudentMarksByStudentSemester","studentSemester","middleControls","currentControlLoading","currentControls","valueChange","hideCurrentControl","currentControlMarks","dictAttestationId","fieldName","att","attestations","hoursAbsent","ball","studentSemesters","semesterForm","lastSemester","ctx","TimeTableComponent","time","tokenStore","TokenStorageService","setToken","removeItem","setItem","stringify","getAuthToken","tokens","getToken","accessToken","getAuthTokenType","tokenType","tokensJson","deleteToken","CallBackComponent","tokenStoreService","httpClient","queryParams","code","token","invalidLogin","href","LoginpageComponent","authUrlGenerate","login","url","encodeURIComponent","protocol","host","AuthGuard","jwtHelper","canActivate","user","role","decodeToken","isTokenExpired","stud_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","setAttribute","body","appendChild","click","removeChild","deleteComment","comment_id","getCurrentPerson","ngOnChanges","file_r4","ShowComponent","showService","userId","authorId","authorFio","published","attachments","message_type","messageType","tags","refreshBadge","sendComment","commentAttachments","text_comment","trim","element","refreshComments","selectEventHandler","e","validationErrors","rawFile","removeFile","AlertService","getSearchMessages","page","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","SwitchuserComponent","switchUserService","Validators","itemHeight","caseSensitive","operator","getStudEduGroups","currentToken","studEduGroups","formGroup","reload","onCancel","back","AdminGuard","state","roles","ElectroResourcesComponent","decls","routes","path","redirectTo","pathMatch","component","AppRoutingModule","fesm2020_router","breadcrumbItemsMap","AuthService","isUserAuthenticated","is","ext","RegExp","test","menuExpanded","AppComponent","titleService","renderer","authService","Subscription","return","selected","expandedIndices","externalLinks","events","splitURL","split","prevSelected","newSelected","initRoutes","iconClass","updateStudentName","currentStudents","currentId","onSelect","ev","expanded","preventDefault","isSwitchActive","isAdmin","subscriber$","event","routerState","root","routeTitle","firstChild","setTitle","sportsIconUrl","imageName","baseSportsIconUrl","iconUrl","baseIconUrl","ngOnDestroy","routesData","unsubscribe","menuClick","switchUser","onItemClick","selectedItemIndex","breadcrumbitems","findIndex","segment","showLoginPage","pathname","showCallbackPage","activeItem","stopUserPreview","onMenuClick","activeClass","TokenInterceptor","tokenStorageService","intercept","request","handle","ru","rtl","kendo","grid","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","send","dropdownlist","noDataText","datepicker","toggle","today","prevButtonTitle","nextButtonTitle","combobox","datetimepicker","dateTab","timeTab","accept","en","MyMessageService","kendo_angular_l10n","language","lang","localeId","notify","keys","common","AppModule","bootstrap","provide","useClass","multi","useValue","imports","platform_browser","kendo_angular_dateinputs","kendo_angular_dropdowns","kendo_angular_buttons","kendo_angular_grid","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_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/components/education/education.component.html","./src/app/components/education/education.component.ts","./src/app/components/exam-list/exam-list.component.ts","./src/app/components/exam-list/exam-list.component.html","./src/app/services/LKStudent/lkemail.service.ts","./src/app/services/LKStudent/lklanguages.service.ts","./src/app/services/LKStudent/lkorders-study-period.service.ts","./src/app/services/LKStudent/lkphone.service.ts","./src/app/services/LKStudent/lkstudent-academic-state.service.ts","./src/app/services/LKStudent/lkstudent-budget-state.service.ts","./src/app/services/LKStudyProgress/middle-control.service.ts","./src/app/components/home/home.component.html","./src/app/components/home/home.component.ts","./src/app/services/LKPortfolio/lkportfolio.service.ts","./src/app/services/LKPortfolio/dict.service.ts","./src/app/services/Notifications/notifications.service.ts","./src/app/components/portfolio/portfolio.component.html","./src/app/components/portfolio/portfolio.component.ts","./src/helpers/dialog-helper.ts","./src/app/services/LKStudyProgress/current-control.service.ts","./src/app/services/LKStudyProgress/dict-attestation.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/options/settings.ts","./src/app/services/token.service.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/app-routing.module.ts","./src/app/models/home/breadcrumb-items.model.ts","./src/app/models/menuItems.model.ts","./src/app/services/auth.service.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 {\r\n Active = 1,\r\n Archived = 2,\r\n Closed = 3,\r\n}\r\n\r\nexport const CommonStatusEnum = CommonStatusEnumList;\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport interface Environment {\r\n production: Window|boolean;\r\n demo: Window|boolean;\r\n searchBotDisallow: Window|boolean;\r\n apiEndpoint: Window|string;\r\n allowedDomains: any;\r\n trustedNetClientId: Window|string;\r\n authEndPoint: Window|string;\r\n announcementApiEndpoint: Window|string,\r\n fileServerEndpoint: Window|string,\r\n supportEmail: Window|string,\r\n infoMessage: Window|string,\r\n headerTitle: any;\r\n apiPaths: any;\r\n services: any;\r\n menuItems: any;\r\n projecting: any;\r\n portfolio: any;\r\n announcement: any;\r\n invalidTokenMessage: any;\r\n}\r\n\r\nexport const environment: Environment = {\r\n production: window[\"env\"][\"prod\"] || false,\r\n demo: window[\"env\"][\"demo\"] || false,\r\n searchBotDisallow: window[\"env\"][\"searchBotDisallow\"] || false,\r\n apiEndpoint: window[\"env\"][\"apiUrl\"],\r\n trustedNetClientId: window[\"env\"][\"clientId\"],\r\n authEndPoint: window[\"env\"][\"authUrl\"],\r\n allowedDomains: [window[\"env\"][\"allowedDomains\"]],\r\n fileServerEndpoint: window[\"env\"][\"apiUrl\"],\r\n announcementApiEndpoint: window[\"env\"][\"apiUrl\"],\r\n //announcementApiEndpoint: 'http://localhost:8086/api/v1/',\r\n supportEmail: window[\"env\"][\"supportEmail\"],\r\n infoMessage: window[\"env\"][\"infoMessage\"],\r\n invalidTokenMessage: window['env']['invalidTokenMessage'],\r\n headerTitle: {\r\n full: window[\"env\"][\"fullHeader\"],\r\n short: window[\"env\"][\"shortHeader\"]\r\n },\r\n\r\n apiPaths: {\r\n ExamList: \"exam\",\r\n Student: \"student\",\r\n DictOrganization: \"dictorganization\",\r\n DictStudentAcademicState: \"dictstudentacademicstate\",\r\n DictStudentBudget: \"dictstudentbudget\",\r\n DictStudentBudgetSubCategory: \"dictstudentbudgetsubcategory\",\r\n EduGroup: \"edugroup\",\r\n Email: \"email\",\r\n Languages: \"languages\",\r\n OrdersStudyPeriod: \"ordersstudyperiod\",\r\n Phone: \"phone\",\r\n StudEduGroup: \"studedugroup\",\r\n StudentAcademicState: \"studentacademicstate\",\r\n StudentBudgetState: \"studentbudgetstate\",\r\n StudPerson: \"studperson\",\r\n Personal: \"person\",\r\n EducationProgram: \"eprogram\",\r\n TimeTable: \"timetable\",\r\n StudyProgress: \"study\",\r\n EducationIntensityData: \"intensity\",\r\n EducationBUP: \"bup\",\r\n BudgetTime: \"btime\",\r\n DirectionActivity: \"directionactivity\",\r\n //Portfolio: \"portfolio\",\r\n StudPlan: \"studplan\",\r\n MiddleControl: \"middlecontrol\",\r\n CurrentControl: \"currentcontrol\",\r\n DictAttestation: \"dictattestation\",\r\n WorkScheduleType: \"d/workscheduletype\",\r\n },\r\n services: window[\"env\"][\"services\"],\r\n menuItems: window[\"env\"][\"menuItems\"],\r\n projecting: {\r\n daysInWeek: 6,\r\n apiEndpoint: window[\"env\"][\"LKApi\"],\r\n apiPaths: {\r\n standard: \"EducationStandards\",\r\n standardtype: \"EducationStandardTypes\",\r\n studylevel: \"EducationLevels\",\r\n qualification: \"Qualifications\",\r\n oop: \"EducationPrograms\",\r\n faculty: \"Faculty\",\r\n kafedra: \"Department\",\r\n trainingLevel: \"TrainingLevels\",\r\n dictcycle: \"DictCycle\",\r\n dictCycleType: \"DictCycleType\",\r\n dictComponent: \"DictComponent\",\r\n dictComponentType: \"DictComponentType\",\r\n dictLessonType: \"DictLessonType\",\r\n dictLessonForm: \"DictLessonForm\",\r\n dictAcceleratedStudyBase: \"DictAcceleratedStudyBase\",\r\n dictFormDesignerDataType: \"DictFormDesignerDataType\",\r\n dictWorkCategorySchedule: \"DictWorkCategorySchedule\",\r\n dictWorkScheduleStudyProcessType: \"DictWorkScheduleStudyProcessType\",\r\n dictWorkStudyPlanType: \"DictWorkStudyPlanType\",\r\n educationPrograms: \"educationPrograms\",\r\n educationPlan: \"educationPlans\",\r\n competenceMatrixService: \"competenceMatrix\",\r\n eStandardTypes: \"dict/educationStandardTypes\",\r\n dictEducationLevel: \"dict/EducationLevels\",\r\n dictQualification: \"dict/qualifications\",\r\n dictTrainingLevel: \"dict/trainingLevels\"\r\n }\r\n },\r\n portfolio: {\r\n apiPaths: {\r\n dict: \"portfolio/dict\",\r\n document: \"portfolio/document\",\r\n achievement: \"portfolio/achievement\"\r\n },\r\n maxFileSize: window[\"env\"][\"portfolio_maxFileSize\"] || 4194304,//4194304\r\n },\r\n announcement: {\r\n commentMaxFileSize: window[\"env\"][\"announcement_commentMaxFileSize\"] || 5242880,//5242880,\r\n },\r\n};\r\n\r\n/*\r\n * For easier debugging in development mode, you can import the following file\r\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\r\n *\r\n * This import should be commented out in production mode because it will have a negative impact\r\n * on performance if an error is thrown.\r\n */\r\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKEducationPlanService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.EducationBUP}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get all EducationPlans\r\n public getAllEducationPlans(): Observable {\r\n return this.http.get(this.baseUrl + '/GetEducationPlans/');\r\n }\r\n\r\n //Get EducationPlan by StudentId\r\n public getEducationPlanByStudentId(studentId: string) {\r\n return this.http.get(this.baseUrl + '/GetEducationPlanByStudentID/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKStudPlanService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudPlan}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get all Stud Plans\r\n public getAllStudPlans(): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudPlans/')\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n //Get Stud Plan\r\n public getStudPlan(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudPlan/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\r\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\r\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\r\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKStudEduGroupService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudEduGroup}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get StudEduGroup\r\n public getStudEduGroup(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudEduGroup/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n //Get StudEduGroup\r\n public getAllStudEduGroups(): Observable {\r\n return this.http.get(this.baseUrl + '/GetAllStudEduGroups/')\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n //Get GroupEducationPlan by StudentId\r\n public getGroupEducationPlanByStudentId(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetGroupEducationPlan/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n //Get EducationProgram by StudentId\r\n public getEducationProgramByStudentId(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetEducationProgramByStudentId/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n //Get StudyForm by StudentId\r\n public getStudyFormByStudentId(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudyFormByStudentId/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKStudentService {\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.Student}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Get Student by Id\r\n * @param id StudentId\r\n */\r\n public getStudentById(id: number): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentByID/' + id)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n /**\r\n * Get Student by login\r\n */\r\n public getStudentByLogin(): Observable {\r\n return this.http.get(this.baseUrl + '/GetAllStudentsByLogin')\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n /**\r\n * Получение текущего студента\r\n */\r\n public getCurrentStudent(): Observable {\r\n return this.http.get(this.baseUrl + '/GetAllCurrentStudents')\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n // Получение всех студентов\r\n public getStudents(): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudents/')\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n /**\r\n * Обработчик ошибок\r\n * @param error\r\n */\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { EducationGraphLegend } from 'src/app/models/education/LKEducationPlan.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DictWorkScheduleStudyProcessTypeService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.WorkScheduleType}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get all BudgetTimes\r\n public getAllDictWorkSchedule(): Observable {\r\n return this.http.get(this.baseUrl + '/GetWorkScheduleStudyProcessTypes');\r\n }\r\n}\r\n","enum dictWorkCategoryScheduleEnumList {\r\n weekend = \"d8ec9fa5-bc26-4487-8942-d111bda5c759\",\r\n holiday = \"d36da979-6286-4a9f-8476-aedfe22cd374\",\r\n }\r\n \r\n export var dictWorkCategoryScheduleEnum: any = dictWorkCategoryScheduleEnumList\r\n ","\r\n \r\n {{ weekInfo.days[0].symbol }}\r\n \r\n \r\n = weekInfo.installationSessionBeginDayNumber\r\n || isInstallationSessionEnd && idx <= weekInfo.installationSessionEndDayNumber\r\n || isInstallationSession && !isInstallationSessionBegin && !isInstallationSessionEnd)\r\n && day.dictWorkScheduleStudyProcessType?.CategoryId != holidaysEnum.holiday\r\n && day.dictWorkScheduleStudyProcessType?.CategoryId != holidaysEnum.weekend\r\n }\"\r\n style=\"background-color:{{ day.backgroundColor }}\"\r\n >\r\n {{ day.symbol }}\r\n \r\n \r\n \r\n\r\n","import {\r\n Component,\r\n Input,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { dictWorkCategoryScheduleEnum } from 'src/app/models/education/dictWorkCategorySchedule.enum';\r\nimport {\r\n CellDataType,\r\n CellDayType,\r\n} from 'src/app/models/education/education-plan-schedule.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Component({\r\n selector: 'educational-process-schedule-cell',\r\n templateUrl: './educational-process-schedule-cell.component.html',\r\n styleUrls: ['./educational-process-schedule-cell.component.scss'],\r\n})\r\nexport class EducationalProcessScheduleCellComponent implements OnInit {\r\n @Input() weekInfo: CellDataType = {\r\n semestrBeginWeekNumber: [],\r\n installationSessionBeginDayNumber: 0,\r\n installationSessionEndDayNumber: 0,\r\n days: [],\r\n weekNumber: 0,\r\n };\r\n @Input() currentWeekNumber: number = 0;\r\n @Input() course: number = 0;\r\n @Input() isChoosedCells: boolean = false;\r\n @Input() isDisplayDot: boolean = false;\r\n\r\n days: CellDayType[] = this.getDefaultDays(this.weekInfo.days[0] || {});\r\n\r\n isWholeWeek: boolean = true;\r\n isSelectedCell: boolean = false;\r\n isSemesterBegin: boolean = false;\r\n isInstallationSession: boolean = false;\r\n isInstallationSessionBegin: boolean = false;\r\n isInstallationSessionEnd: boolean = false;\r\n currentDay: number = 0;\r\n public holidaysEnum: any = dictWorkCategoryScheduleEnum;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.weekInfo === undefined) {\r\n this.weekInfo = {\r\n semestrBeginWeekNumber: [],\r\n installationSessionBeginDayNumber: 0,\r\n installationSessionEndDayNumber: 0,\r\n days: [\r\n {\r\n daysAmount: environment.projecting.daysInWeek,\r\n symbol: '',\r\n backgroundColor: '#ffffff',\r\n } as CellDayType,\r\n ],\r\n weekNumber: 0,\r\n };\r\n }\r\n\r\n this.isSemesterBegin = !!this.weekInfo.semestrBeginWeekNumber?.includes(\r\n this.currentWeekNumber\r\n );\r\n\r\n this.isInstallationSession = this.weekInfo.isInstallationSession ? this.weekInfo.isInstallationSession: false\r\n this.isInstallationSessionBegin = this.weekInfo.installationSessionBeginWeekNumber === this.currentWeekNumber;\r\n this.isInstallationSessionEnd = this.weekInfo.installationSessionEndWeekNumber === this.currentWeekNumber;\r\n\r\n if (this.weekInfo.days.length > 1) {\r\n this.isWholeWeek = false;\r\n let fillStart = 0;\r\n this.weekInfo.days.forEach((dayInfo) => {\r\n this.days.fill(\r\n { ...dayInfo, daysAmount: 1 },\r\n fillStart,\r\n fillStart + dayInfo.daysAmount\r\n );\r\n fillStart += dayInfo.daysAmount;\r\n });\r\n }\r\n\r\n if (this.isWholeWeek)\r\n this.days = this.getDefaultDays(this.weekInfo.days[0] || {});\r\n }\r\n\r\n public getDefaultDays(cell?: CellDayType) {\r\n return Array(environment.projecting.daysInWeek).fill({\r\n ...cell,\r\n daysAmount: 1,\r\n symbol: cell?.symbol || '',\r\n backgroundColor: cell?.backgroundColor || '#ffffff',\r\n });\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n

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

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

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

\r\n \r\n \r\n \r\n
\r\n

{{dataItem.name}}

\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n

{{dataItem.symbol}}

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

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

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

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

\r\n
","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKEmail } from 'src/app/models/profile/lkEmail.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKEmailService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.Email}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get Emails\r\n public getEmails(studPersonId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetEmails/' + studPersonId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKLanguages } from 'src/app/models/profile/lkLanguages.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKLanguagesService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.Languages}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get Languages\r\n public getLanguages(studPersonId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetLanguages/' + studPersonId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKOrdersStudyPeriod } from 'src/app/models/profile/lkOrdersStudyPeriod.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKOrdersStudyPeriodService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.OrdersStudyPeriod}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get OrdersStudyPeriods\r\n public getOrdersStudyPeriods(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetOrderStudyPeriod/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKPhone } from 'src/app/models/profile/lkPhone.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKPhoneService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.Phone}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get Phones\r\n public getPhones(studPersonId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetPhones/' + studPersonId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKStudentAcademicState } from 'src/app/models/profile/lkStudentAcademicState.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKStudentAcademicStateService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudentAcademicState}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get StudentAcademicState\r\n public getStudentAcademicStates(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentAcademicStates/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { LKStudentBudgetState } from 'src/app/models/profile/lkStudentBudgetState.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKStudentBudgetStateService {\r\n\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.StudentBudgetState}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get StudentBudgetStates\r\n public getStudentBudgetStates(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentBudgetStates/' + studentId)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { MiddleControl } from 'src/app/models/progress/middleControl.model';\r\nimport { StudentMark } from 'src/app/models/progress/studentMark.model';\r\nimport { StudentSemester } from 'src/app/models/progress/studentSemester.model';\r\nimport { environment } from 'src/environments/environment';\r\nimport { LKAverageStudentMarks } from '../../models/profile/lkAverageStudentMarks.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MiddleControlService {\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.MiddleControl}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get MiddleControls by student Id\r\n public getMiddleControlsByStudentId(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetMiddleControls/' + studentId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n //Get MiddleControls by student semester\r\n public getMiddleControlsByStudentSemester(studentId: string, studentSemesterId: number): Observable {\r\n return this.http.get(this.baseUrl + '/GetMiddleControlsByStudentSemester/' + studentId + '/' + studentSemesterId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n public getStudentMarksAverageScore(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentMarksAverageScore/' + studentId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n //Get StudentMarks by student semester\r\n public getStudentMarksByStudentSemester(studentId: string, studentSemesterId: number): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentMarksByStudentSemester/' + studentId + '/' + studentSemesterId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n //Get MiddleControls by student Id\r\n public getStudentSemesters(studentId: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetStudentSemesters/' + studentId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n //Get MiddleControl by Id\r\n public getMiddleControlById(id: string): Observable {\r\n return this.http.get(this.baseUrl + '/GetMiddleControlByID/' + id)\r\n .pipe(\r\n catchError(this.handleError));\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","
\r\n \r\n \r\n
\r\n
\r\n

\r\n {{studentModel.studPerson.lastName + \" \" + studentModel.studPerson.firstName + \" \" + studentModel.studPerson.middleName}}\r\n

\r\n
\r\n

Контакты

\r\n
\r\n \r\n \r\n \r\n \r\n
E-mail
\r\n \r\n \r\n \r\n \r\n
{{emailValue}}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
Телефон
\r\n \r\n \r\n \r\n \r\n
{{phoneFormat(phoneValue)}}
\r\n
\r\n
\r\n

Техническая поддержка ЛК

\r\n \r\n \r\n \r\n \r\n
E-mail {{supportEmail}}
\r\n
\r\n
\r\n
\r\n \r\n

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

\r\n \r\n
\r\n \r\n

Заголовок

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Кафедра{{departmentValue}}
Академический статус\r\n {{academicStatusValue}}\r\n
Заказчик целевого обучения\r\n {{organizationValue}}\r\n
Изучаемые языки{{languagesValue}}
Средний балл{{!averageScoreValue ? '-' : (averageScoreValue | number) }}
Средний балл по итогам семестра{{!averageSemesterResult ? '-' : (averageSemesterResult | number)}}
Дата начала обучения\r\n
{{dateStartValue}}
\r\n
Год выпуска\r\n
{{dateEndValue}}
\r\n
\r\n
\r\n \r\n
\r\n

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

\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Номер зачетной книжки{{studentNumberValue}}
Источник финансирования\r\n {{budgetStateValue}}\r\n
Форма обучения{{studyFormValue}}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Номер зачетной книжки{{studentNumberValue}}
Источник финансирования{{budgetStateValue}}
Форма обучения{{studyFormValue}}
Институт/факультет{{facultyValue}}
Курс{{courseValue}}
Группа{{groupNameValue}}
Направление обучения{{studyDirection}}
Профиль (программа){{profile}}
\r\n
\r\n
\r\n \r\n

\r\n

\r\n
\r\n \r\n

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

\r\n
\r\n
\r\n
\r\n \r\n

10:00 - 11:00

\r\n

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

\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n
\r\n \r\n

10:00 - 11:00

\r\n

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

\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n
\r\n \r\n

10:00 - 11:00

\r\n

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

\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n

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

\r\n
\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n

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

\r\n
\r\n

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

\r\n

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

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\r\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\r\nimport {AlignSettings} from \"@progress/kendo-angular-layout/layouts/models\";\r\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\r\nimport { LKEmail } from 'src/app/models/profile/lkEmail.model';\r\nimport { LKLanguages } from 'src/app/models/profile/lkLanguages.model';\r\nimport { LKOrdersStudyPeriod } from 'src/app/models/profile/lkOrdersStudyPeriod.model';\r\nimport { LKPhone } from 'src/app/models/profile/lkPhone.model';\r\nimport { LKStudEduGroup } from 'src/app/models/profile/lkStudEduGroup.model';\r\nimport { LKEduGroup } from 'src/app/models/profile/lkEduGroup.model';\r\nimport { LKDictOrganization } from 'src/app/models/profile/dictionaries/lkDictOrganization.model';\r\nimport { LKDictStudentAcademicState } from 'src/app/models/profile/dictionaries/lkDictStudentAcademicState.model';\r\nimport { LKDictStudentBudgetSubCategory } from 'src/app/models/profile/dictionaries/lkDictStudentBudgetSubCategory.model';\r\nimport { LKDictStudentBudget } from 'src/app/models/profile/dictionaries/lkDictStudentBudget.model';\r\nimport { LKStudentAcademicState } from 'src/app/models/profile/lkStudentAcademicState.model';\r\nimport { LKStudentBudgetState } from 'src/app/models/profile/lkStudentBudgetState.model';\r\nimport { LKEmailService } from 'src/app/services/LKStudent/lkemail.service';\r\nimport { LKLanguagesService } from 'src/app/services/LKStudent/lklanguages.service';\r\nimport { LKOrdersStudyPeriodService } from 'src/app/services/LKStudent/lkorders-study-period.service';\r\nimport { LKPhoneService } from 'src/app/services/LKStudent/lkphone.service';\r\nimport { LKStudEduGroupService } from 'src/app/services/LKStudent/lkstud-edu-group.service';\r\nimport { LKStudentAcademicStateService } from 'src/app/services/LKStudent/lkstudent-academic-state.service';\r\nimport { LKStudentBudgetStateService } from 'src/app/services/LKStudent/lkstudent-budget-state.service';\r\nimport { LKDictLanguages } from 'src/app/models/profile/dictionaries/LkDictLanguages.model';\r\nimport { LKDictLanguageLevels } from 'src/app/models/profile/dictionaries/lkDictLanguageLevels.model';\r\nimport { LKEducationPlan } from 'src/app/models/education/LKEducationPlan.model';\r\nimport { Department } from 'src/app/models/profile/external/department.model';\r\nimport { Faculty } from 'src/app/models/profile/external/faculty.model';\r\nimport { LKEducationProgram } from 'src/app/models/education/LKEducationProgram.model';\r\nimport { EducationStandard } from 'src/app/models/education/EducationStandard.model';\r\nimport { DictStudyForm } from 'src/app/models/profile/dictionaries/DictStudyForm.model';\r\nimport { LKStudPlanService } from 'src/app/services/LKStudent/lkstud-plan.service';\r\nimport { LKStudPlan } from 'src/app/models/education/LKStudPlan.model';\r\nimport { DictQualification } from 'src/app/models/education/DictQualification.model';\r\nimport {environment} from \"../../../environments/environment\";\r\nimport {MiddleControlService} from \"../../services/LKStudyProgress/middle-control.service\";\r\n@Component({\r\n selector: 'client-apps-home',\r\n templateUrl: './home.component.html',\r\n styleUrls: ['./home.component.scss'],\r\n})\r\nexport class HomeComponent implements OnInit {\r\n\r\n public hasLoaded = false;\r\n public photoUrl = '';\r\n public supportEmail = environment.supportEmail;\r\n public infoMessage = environment.infoMessage;\r\n public hidden = true;\r\n ///////// Переменные профиля: /////////////\r\n\r\n // ФИО\r\n public fullName? = \"-\"\r\n // Номер студента\r\n public studentNumberValue? = \"-\"\r\n // Источник финансирования\r\n public budgetStateValue? = \"-\"\r\n // Форма обучения\r\n public studyFormValue? = \"-\"\r\n // Факультет (институт)\r\n public facultyValue? = \"-\"\r\n // Курс\r\n public courseValue? = \"-\"\r\n // Группа\r\n public groupNameValue? = \"-\"\r\n // Направление обучения\r\n public studyDirection? = \"-\"\r\n // Направленность (профиль)\r\n public hasProfile():boolean { return (this.educationProgram?.profilingCourseNumber ?? 1) <= (this.studEduGroup?.eduGroup?.courseNum ?? 1)}\r\n public profile? = \"-\";\r\n // Кафедра\r\n public departmentValue? = \"-\"\r\n // Академический статус\r\n public academicStatusValue? = \"-\"\r\n // Заказчик целевого обучения\r\n public organizationValue? = \"-\"\r\n public hideOrganizationValue = true;\r\n // Изучаемые языки\r\n public languagesValue? = \"-\"\r\n // Средний балл\r\n public markAverageValue? = \"-\"\r\n // Дата начала обучения\r\n public dateStartValue? = \"-\"\r\n // Год выпуска\r\n public dateEndValue? = \"-\"\r\n // Email\r\n public emailValue? = \"-\"\r\n // Телефон\r\n public phoneValue? = \"-\"\r\n // Средний балл\r\n public averageScoreValue? : number | null = null; \r\n // Средний балл по итогам семестра\r\n public averageSemesterResult? : number | null = null; \r\n\r\n ///////////////////////////////////////////\r\n\r\n // Для проверки планов из группы и из студента\r\n public groupEducationPlan? = \"\"\r\n public studEducationPlan? = \"\"\r\n public departmentStudPlan? = \"\"\r\n\r\n // Выставить true после появления расписания занятий\r\n public shortInformation = false;\r\n public align: AlignSettings = {vertical: \"top\"}\r\n public currentDate = new Date();\r\n public dayName = \"\";\r\n\r\n constructor(\r\n private studentService: LKStudentService,\r\n private emailService: LKEmailService,\r\n private languagesService: LKLanguagesService,\r\n private ordersStudyPeriodService: LKOrdersStudyPeriodService,\r\n private phoneService: LKPhoneService,\r\n private studEduGroupService: LKStudEduGroupService,\r\n private studentAcademicStateService: LKStudentAcademicStateService,\r\n private studentBudgetStateService: LKStudentBudgetStateService,\r\n private studPlanService: LKStudPlanService,\r\n private middleControlService: MiddleControlService) {\r\n // Получить текущее название дня недели\r\n let daysArray = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];\r\n let day = new Date().getDay();\r\n this.dayName = daysArray[day]\r\n }\r\n\r\n public gridData = [\r\n { channel: \"Работников всего\", conversion: 8232, users: 1539 },\r\n { channel: \"ППС\", conversion: 6574, users: 935 },\r\n { channel: \"АУП\", conversion: 4932, users: 150 },\r\n { channel: \"Прочие\", conversion: 1172, users: 454 },\r\n ];\r\n public eventsData = [\r\n { id: 1, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\r\n { id: 2, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\r\n { id: 3, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\r\n { id: 4, title: \"LIST FOR THE ALIMENTARY CONTROL ON PREPARATIONS\", author: \"Курникова Анна Александровна\", date: \"20.03.2022\", annotation: \"List for the alimentary control on preparations\" },\r\n ];\r\n\r\n public examsData = [\r\n { id: 1, subject: \"Психологическое сопровождение пациентов в общей медицинской практике\", author: \"Курникова Анна Александровна\",\r\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\r\n { id: 2, subject: \"Психология, психопатология и психотерапия зависимостей\", author: \"Курникова Анна Александровна\",\r\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\r\n { id: 3, subject: \"Типология личностных расстройств\", author: \"Курникова Анна Александровна\",\r\n date: \"20.03.2022\", location: \"List for the alimentary control on preparations\" },\r\n ];\r\n\r\n public studyForm: DictStudyForm = {\r\n studyFormName: '',\r\n studyFormSName: ''\r\n }\r\n\r\n public faculty: Faculty = {\r\n name: '-',\r\n shortName: '-'\r\n }\r\n\r\n public department: Department = {\r\n name: '-',\r\n shortName: '-',\r\n faculty: this.faculty\r\n }\r\n\r\n public educationStandard: EducationStandard = {\r\n cipher: '',\r\n name: '',\r\n shortName: '',\r\n dictStandardTypeId: '',\r\n dictEducationLevelId: '',\r\n dictTrainingLevelId: ''\r\n }\r\n\r\n public dictQualification: DictQualification = {\r\n qualificationName: '',\r\n qualificationSName: ''\r\n }\r\n\r\n public educationPrograms: LKEducationProgram[] = [];\r\n public educationProgram: LKEducationProgram = {\r\n lkEducationProgramId: 0,\r\n lkEducationProgramExternalId: '',\r\n cipher: '',\r\n name: '',\r\n shortname: '',\r\n educationStandardId: '',\r\n educationStandard: this.educationStandard,\r\n dictQualificationId: '',\r\n dictQualification: this.dictQualification,\r\n departmentId: '',\r\n graduatingDepartment: this.department,\r\n faculty: this.faculty\r\n }\r\n\r\n public educationPlans: LKEducationPlan[] = [];\r\n public educationPlan: LKEducationPlan = {\r\n educationPlanId: 0,\r\n educationPlanExternalId: \"\",\r\n jsonData: \"\",\r\n educationProgramId: '',\r\n educationProgram: this.educationProgram,\r\n dictStudyFormId: '',\r\n dictStudyForm: this.studyForm\r\n }\r\n\r\n\r\n // StudPerson\r\n public studPersons: LKStudPerson[] = [];\r\n public studPerson: LKStudPerson = {\r\n firstName: '',\r\n lastName: '',\r\n middleName: '',\r\n isMale: false,\r\n birthday: new Date()\r\n }\r\n\r\n // Student\r\n public students: LKStudent[] = [];\r\n public studentModel: LKStudent = {\r\n externalId: \"\",\r\n studentNumber: \"-\",\r\n studPersonId: \"\",\r\n studPerson: this.studPerson\r\n }\r\n\r\n public eduGroup?: LKEduGroup = {\r\n courseNum: 0,\r\n groupName: \"-\",\r\n faculty: this.faculty,\r\n facultyId: \"\"\r\n }\r\n\r\n public dictOrganization: LKDictOrganization = {\r\n organizationName: ''\r\n }\r\n\r\n public dictStudentAcademicState: LKDictStudentAcademicState = {\r\n academicStateName: '-'\r\n }\r\n\r\n public dictStudentBudget?: LKDictStudentBudget = {\r\n studentBudgetName: '-',\r\n studentBudgetSName: '-',\r\n isBudget: false\r\n }\r\n\r\n public dictStudentBudgetSubCategory: LKDictStudentBudgetSubCategory = {\r\n dictStudentBudgetId: '',\r\n dictStudentBudget: this.dictStudentBudget,\r\n budgetSubCategoryName: '-'\r\n }\r\n\r\n public studentAcademicState: LKStudentAcademicState = {\r\n studentId: '',\r\n dictStudentAcademicStateId: '',\r\n dictStudentAcademicState: this.dictStudentAcademicState\r\n }\r\n\r\n public studentBudgetState: LKStudentBudgetState = {\r\n studentId: '',\r\n dictStudentBudgetId: '',\r\n dictStudentBudget: this.dictStudentBudget,\r\n dictOrganization: this.dictOrganization,\r\n dictStudentBudgetSubCategory: this.dictStudentBudgetSubCategory\r\n }\r\n\r\n public studEduGroup?: LKStudEduGroup = {\r\n studentId: '',\r\n eduGroupId: '',\r\n studPersonId: '',\r\n fullName: '',\r\n eduGroup: this.eduGroup\r\n }\r\n\r\n public phone?: LKPhone = {\r\n studPersonId: '',\r\n phoneNumber: '-'\r\n }\r\n\r\n public orderStudyPeriod: LKOrdersStudyPeriod = {\r\n studentId: '',\r\n dateStart: new Date(),\r\n dateFinish: new Date()\r\n }\r\n\r\n public dictLanguageLevel?: LKDictLanguageLevels = {\r\n levelName: '-'\r\n }\r\n\r\n public dictLanguage?: LKDictLanguages = {\r\n languageName: '-'\r\n }\r\n\r\n public languages: LKLanguages[] = [];\r\n public language?: LKLanguages = {\r\n studPersonId: '',\r\n dictLanguageId: '',\r\n dictLanguage: this.dictLanguage,\r\n dictLanguageLevelId: '',\r\n dictLanguageLevel: this.dictLanguageLevel\r\n }\r\n\r\n public email?: LKEmail = {\r\n studPersonId: '',\r\n email: '-'\r\n }\r\n\r\n public studPlan?: LKStudPlan = {\r\n studentId: '',\r\n educationPlan: this.educationPlan,\r\n department: this.department\r\n }\r\n\r\n public getCurrentStudent() {\r\n const changeStudent = Number(localStorage.getItem('changeStudent'));\r\n this.studentService.getCurrentStudent()\r\n .subscribe(\r\n async response => {\r\n this.students = response;\r\n if(changeStudent) {\r\n this.studentModel = this.students[changeStudent-1];\r\n }\r\n else {\r\n this.studentModel = this.students[0];\r\n }\r\n this.studentNumberValue = this.studentModel.studentNumber;\r\n this.fullName = this.studentModel.studPerson.lastName + \" \" + this.studentModel.studPerson.firstName + \" \" + this.studentModel.studPerson.middleName;\r\n this.photoUrl = `url('${environment.apiEndpoint}studperson/GetStudPersonPhoto/${this.studentModel.studPersonId}')`;\r\n //console.log(this.studentModel);\r\n this.getEmail(`${this.studentModel.studPersonId}`);\r\n this.getPhones(`${this.studentModel.studPersonId}`);\r\n this.getLanguages(`${this.studentModel.studPersonId}`);\r\n this.getStudentAcademicStatus(`${this.studentModel.externalId}`);\r\n this.getOrdersStudyPeriod(`${this.studentModel.externalId}`);\r\n this.getStudEduGroup(`${this.studentModel.externalId}`);\r\n this.getStudentBudgetState(`${this.studentModel.externalId}`);\r\n //this.getEducationPlanByStudentId(`${this.studentModel.externalId}`);\r\n this.getEducationProgramByStudentId(`${this.studentModel.externalId}`);\r\n this.getStudyFormByStudentId(`${this.studentModel.externalId}`);\r\n this.getStudPlan(`${this.studentModel.externalId}`);\r\n this.getMarksAverageScore(`${this.studentModel.externalId}`)\r\n }\r\n );\r\n }\r\n\r\n public getEmail(studPersonId: string) {\r\n this.emailService.getEmails(studPersonId)\r\n .subscribe(\r\n response => {\r\n this.email = response;\r\n if(this.email?.email != null || this.email?.email != undefined )\r\n this.emailValue = this.email?.email;\r\n }\r\n );\r\n }\r\n\r\n public getStudEduGroup(studentId: string) {\r\n this.studEduGroupService.getStudEduGroup(studentId)\r\n .subscribe(\r\n response => {\r\n this.studEduGroup = response;\r\n this.facultyValue = this.studEduGroup?.eduGroup?.faculty?.shortName;\r\n this.courseValue = this.studEduGroup?.eduGroup?.courseNum.toString();\r\n this.groupNameValue = this.studEduGroup?.eduGroup?.groupName;\r\n this.groupEducationPlan = this.studEduGroup?.eduGroup?.planId;\r\n //console.log(this.studEduGroup.eduGroup);\r\n }\r\n );\r\n }\r\n\r\n public getPhones(studPersonId: string) {\r\n this.phoneService.getPhones(studPersonId)\r\n .subscribe(\r\n response => {\r\n this.phone = response;\r\n if(this.phone?.phoneNumber != null || this.phone?.phoneNumber != undefined)\r\n this.phoneValue = this.phone?.phoneNumber;\r\n }\r\n );\r\n }\r\n\r\n public getOrdersStudyPeriod(studentId: string) {\r\n this.ordersStudyPeriodService.getOrdersStudyPeriods(studentId)\r\n .subscribe(\r\n response => {\r\n this.orderStudyPeriod = response;\r\n if(this.orderStudyPeriod !== null) {\r\n const endDateParse = new Date(this.orderStudyPeriod.dateFinish);\r\n const startDateParse = new Date(this.orderStudyPeriod.dateStart);\r\n const endYear = endDateParse.getFullYear().toString();\r\n const startYear = startDateParse.getFullYear().toString();\r\n if(endYear !== '1')\r\n this.dateEndValue = endYear;\r\n if(startYear !== '1')\r\n this.dateStartValue = startYear;\r\n }\r\n //console.log(\"Orders:\", this.orderStudyPeriod);\r\n }\r\n );\r\n }\r\n\r\n public getLanguages(studPersonId: string) {\r\n this.languagesService.getLanguages(studPersonId)\r\n .subscribe(\r\n response => {\r\n this.languages = response;\r\n this.languagesValue = \"\";\r\n for(let item of this.languages) {\r\n if(item?.dictLanguage?.languageName != null) {\r\n this.languagesValue += item?.dictLanguage?.languageName + \", \";\r\n }\r\n }\r\n this.languagesValue = this.languagesValue.slice(0, -2);\r\n //console.log(this.languages);\r\n }\r\n );\r\n }\r\n\r\n public getStudentAcademicStatus(studentId: string) {\r\n this.studentAcademicStateService.getStudentAcademicStates(studentId)\r\n .subscribe(\r\n response => {\r\n this.studentAcademicState = response;\r\n if(this.studentAcademicState?.dictStudentAcademicState?.academicStateName != null) {\r\n this.academicStatusValue = this.studentAcademicState?.dictStudentAcademicState?.academicStateName;\r\n }\r\n }\r\n );\r\n }\r\n\r\n public getStudentBudgetState(studentId: string) {\r\n this.studentBudgetStateService.getStudentBudgetStates(studentId)\r\n .subscribe(\r\n response => {\r\n this.studentBudgetState = response;\r\n if(this.studentBudgetState?.dictStudentBudget?.studentBudgetName) {\r\n this.budgetStateValue = this.studentBudgetState?.dictStudentBudget?.studentBudgetName;\r\n }\r\n if(this.studentBudgetState?.dictOrganization?.organizationName) {\r\n this.organizationValue = this.studentBudgetState?.dictOrganization?.organizationName;\r\n this.hideOrganizationValue = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n public getEducationProgramByStudentId(studentId: string) {\r\n this.studEduGroupService.getEducationProgramByStudentId(studentId)\r\n .subscribe(\r\n response => {\r\n this.educationProgram = response;\r\n this.studyDirection = this.educationProgram?.educationStandard != null\r\n ? (this.educationProgram?.educationStandard?.cipher + \" - \" + this.educationProgram?.educationStandard?.name)\r\n : \"-\";\r\n this.profile = this.educationProgram?.name;\r\n if(this.profile === undefined)\r\n {\r\n this.profile = \"-\"\r\n }\r\n }\r\n )\r\n }\r\n\r\n public getStudyFormByStudentId(studentId: string) {\r\n this.studEduGroupService.getStudyFormByStudentId(studentId)\r\n .subscribe(\r\n response => {\r\n this.studyForm = response;\r\n this.studyFormValue = this.studyForm?.studyFormName;\r\n }\r\n )\r\n }\r\n\r\n public getStudPlan(studentId: string) {\r\n this.studPlanService.getStudPlan(studentId)\r\n .subscribe(\r\n async response => {\r\n this.studPlan = response;\r\n this.departmentStudPlan = this.studPlan?.departmentId;\r\n this.studEducationPlan = this.studPlan?.planId;\r\n await delay(500);\r\n this.hasLoaded = true;\r\n\r\n // Check if studplan is available\r\n // Есть DepartmentId в StudPlan\r\n if (this.departmentStudPlan != null || this.departmentStudPlan != undefined) {\r\n this.departmentValue = this.studPlan?.department?.name;\r\n }\r\n // Есть EducationPlan в StudPlan\r\n else if (this.studEducationPlan != null || this.studEducationPlan != undefined) {\r\n this.departmentValue = this.studPlan?.educationPlan?.educationProgram?.graduatingDepartment?.name\r\n }\r\n // Взять из плана группы\r\n else {\r\n this.departmentValue = this.educationProgram?.graduatingDepartment?.name;\r\n }\r\n }\r\n )\r\n }\r\n\r\n public getMarksAverageScore(studentId: string) {\r\n this.middleControlService.getStudentMarksAverageScore(studentId)\r\n .subscribe(\r\n async response => {\r\n this.averageScoreValue = response.averageScoreValue ?? null;\r\n this.averageSemesterResult = response.averageSemesterResult ?? null;\r\n }\r\n )\r\n }\r\n\r\n public showStudentInformation() {\r\n this.shortInformation = !this.shortInformation;\r\n }\r\n\r\n phoneFormat(input:any) {\r\n if(input.startsWith(9)) {\r\n input = \"+7\" + input;\r\n }\r\n if(input.startsWith(8)) {\r\n input = input.substring(1);\r\n input = \"+7\" + input;\r\n }\r\n if(input!=null)return input.replace(/^\\+?(\\d)(\\d{3})(\\d{3})(\\d{2})(\\d{2})$/, '+$1 ($2) $3-$4-$5');\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getCurrentStudent();\r\n }\r\n}\r\n\r\nfunction delay(ms: number) {\r\n return new Promise( resolve => setTimeout(resolve, ms) );\r\n}\r\n","import {HttpClient, HttpErrorResponse, HttpEventType, HttpHeaders, HttpParams} from '@angular/common/http';\r\nimport { EventEmitter, Injectable, Output } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { DirectionActivity } from 'src/app/models/portfolio/directionActivity.model';\r\nimport {AchievementGet, LKPortfolio} from 'src/app/models/portfolio/portfolio.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LKPortfolioService {\r\n baseUrl = `${environment.apiEndpoint}${environment.portfolio.apiPaths.achievement}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n progress?: number;\r\n message?: string;\r\n @Output() public onUploadFinished = new EventEmitter();\r\n\r\n /**\r\n * Документы\r\n * @param filter Фильтры\r\n */\r\n getAchievements(filter: { studentId?: string | null; directionActivityId?: string | null }): Observable {\r\n const query = this.CreateQuery(filter);\r\n\r\n return this.http.get(this.baseUrl, { params: query });\r\n }\r\n\r\n /**\r\n * Сохранение достижения\r\n * @param data Информауия о документе\r\n */\r\n postAchievement(data: FormData): Observable {\r\n return this.http.post(this.baseUrl, data);\r\n }\r\n\r\n /**\r\n * Обновление достижения\r\n * @param data Информауия о достижении\r\n */\r\n putAchievement(data: FormData): Observable {\r\n return this.http.put(this.baseUrl, data);\r\n }\r\n\r\n /**\r\n * Удаление достижения\r\n * @param id ID документа\r\n */\r\n deleteAchievement(id: string): Observable {\r\n return this.http.delete(this.baseUrl + '/' + id);\r\n }\r\n\r\n downloadAchievementFile(id: string) {\r\n return this.http.get(this.baseUrl + '/File/' + id, { responseType: 'blob' } )\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n\r\n private CreateQuery(queryModel: any): HttpParams {\r\n let query = new HttpParams();\r\n for (const [key, value] of Object.entries(queryModel)) {\r\n // Value is array\r\n if(Array.isArray(value) && value != null && !value.includes('')) {\r\n query = query.appendAll({[key]: value});\r\n }\r\n // Value is object\r\n else if (value != null && !Array.isArray(value)) {\r\n query = query.append(key, `${value}`);\r\n }\r\n }\r\n return query;\r\n }\r\n}\r\n","import {HttpClient, HttpErrorResponse} from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport {catchError, Observable, throwError} from 'rxjs';\r\nimport {DictDirectionActivity} from 'src/app/models/portfolio/directionActivity.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DictService {\r\n baseUrl = `${environment.apiEndpoint}${environment.portfolio.apiPaths.dict}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getDirectionActivities(): Observable {\r\n return this.http.get(this.baseUrl + '/DirectionActivity')\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NotificationService } from '@progress/kendo-angular-notification';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationsService {\r\n\r\n constructor(private notificationService: NotificationService) { }\r\n\r\n public showSuccess(message: string): void {\r\n this.notificationService.show({\r\n content: message ?? '',\r\n hideAfter: 1500,\r\n width: 500,\r\n position: { horizontal: \"center\", vertical: \"top\" },\r\n animation: { type: \"fade\", duration: 300 },\r\n type: { style: \"success\", icon: true },\r\n\r\n });\r\n }\r\n\r\n public showError(message: any): void {\r\n this.notificationService.show({\r\n content: typeof message == 'string' ? message : this.getErrorMessage(message),\r\n hideAfter: 1500,\r\n width: 500,\r\n position: { horizontal: \"center\", vertical: \"top\" },\r\n animation: { type: \"slide\", duration: 300 },\r\n type: { style: \"error\", icon: true },\r\n });\r\n }\r\n\r\n private getErrorMessage(error: any): string {\r\n console.log(error);\r\n\r\n let message;\r\n\r\n switch (error?.status) {\r\n case 500:\r\n //message = 'Произошла непредвиденная ошибка (Internal Server Error).';\r\n message = 'Произошла непредвиденная ошибка.';\r\n break;\r\n case 501:\r\n //message = 'Метод запроса не поддерживается сервером (Not Implemented).';\r\n message = 'Метод запроса не поддерживается сервером.';\r\n break;\r\n case 502:\r\n //message = 'Сервер получил недействительный ответ (Bad Gateway).';\r\n message = 'Сервер получил недействительный ответ.';\r\n break;\r\n case 503:\r\n //message = 'Сервис недоступен (Service Unavailable).';\r\n message = 'Сервис недоступен.';\r\n break;\r\n case 504:\r\n //message = 'Сервер не получил ответ вовремя (Gateway Timeout).';\r\n message = 'Сервер не получил ответ вовремя.';\r\n break;\r\n case 505:\r\n //message = 'HTTP-версия, используемая в запросе, не поддерживается сервером (HTTP Version Not Supported).';\r\n message = 'HTTP-версия, используемая в запросе, не поддерживается сервером.';\r\n break;\r\n default:\r\n if (typeof error?.error === 'string')\r\n message = error.error;\r\n else if (typeof (error)?.detail === 'string')\r\n message = (error).detail;\r\n else if (typeof error?.error?.detail === 'string')\r\n message = error.error.detail;\r\n break;\r\n }\r\n\r\n return message ?? 'Произошла непредвиденная ошибка';\r\n }\r\n}\r\n","
\r\n

Портфолио

\r\n
\r\n \r\n\r\n
Нет загруженных достижений
\r\n 0\"\r\n [data]=\"achievements\"\r\n [loading]='loading'>\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n

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

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

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

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

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

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

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

\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n

{{file.name}}

\r\n
\r\n
\r\n \r\n

* Загрузите скан.копию для добавления нового достижения

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {FormControl, FormGroup, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport { saveAs } from '@progress/kendo-file-saver';\r\nimport {DictDirectionActivity} from 'src/app/models/portfolio/directionActivity.model';\r\nimport {AchievementGet} from 'src/app/models/portfolio/portfolio.model';\r\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\r\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\r\nimport { LKPortfolioService } from 'src/app/services/LKPortfolio/lkportfolio.service';\r\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\r\nimport { NotificationsService } from 'src/app/services/Notifications/notifications.service';\r\nimport {FileRestrictions} from \"@progress/kendo-angular-upload\";\r\nimport {DictService} from \"../../services/LKPortfolio/dict.service\";\r\nimport {DialogCloseResult, DialogRef, DialogService} from \"@progress/kendo-angular-dialog\";\r\nimport {openRemoveDialog} from \"../../../helpers/dialog-helper\";\r\nimport {environment} from \"../../../environments/environment\";\r\n\r\n@Component({\r\n selector: 'portfolio',\r\n templateUrl: './portfolio.component.html',\r\n styleUrls: ['./portfolio.component.scss']\r\n})\r\nexport class PortfolioComponent implements OnInit {\r\n\r\n //#region VAR\r\n\r\n public studentId!: string;\r\n public filialId?: string;\r\n public loading = false;\r\n public editMode = false;\r\n public editable: boolean = true;\r\n\r\n //#region File\r\n\r\n public restrictions: FileRestrictions = {\r\n minFileSize: 10,\r\n maxFileSize: environment.portfolio.maxFileSize,\r\n allowedExtensions: [\".pdf\"],\r\n };\r\n public maxFileSizeMessage: string = `Размер файла должен быть не более ${Math.round(environment.portfolio.maxFileSize/1024/1024)} МБ`;\r\n public fileUploaded = false;\r\n public fileUploadedList: { id: string, name: string }[] = [];\r\n public fileUploads?: Array;\r\n\r\n //#endregion\r\n\r\n //#region Achievement\r\n\r\n /*public achievements: {\r\n directionActivityId: string,\r\n data: AchievementGet[]\r\n }[] = [];*/\r\n public achievements: AchievementGet[] = [];\r\n public directionActivities: DictDirectionActivity[] = [];\r\n public directionActivitiesByFilter: DictDirectionActivity[] = [];\r\n\r\n public editForm: UntypedFormGroup = new UntypedFormGroup({\r\n id: new UntypedFormControl(),\r\n name: new UntypedFormControl(),\r\n directionActivityId: new UntypedFormControl()\r\n });\r\n\r\n //#endregion\r\n\r\n //#region Student\r\n\r\n public studPersons: LKStudPerson[] = [];\r\n public studPerson: LKStudPerson = {\r\n firstName: '',\r\n lastName: '',\r\n middleName: '',\r\n isMale: false,\r\n birthday: new Date()\r\n }\r\n\r\n public students: LKStudent[] = [];\r\n public studentModel: LKStudent = {\r\n externalId: \"\",\r\n studentNumber: \"\",\r\n studPersonId: \"\",\r\n filialId: \"\",\r\n studPerson: this.studPerson\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Dialog\r\n\r\n public opened: boolean = false;\r\n\r\n //#endregion\r\n\r\n //#endregion\r\n\r\n constructor(private portfolioService: LKPortfolioService,\r\n private dictService: DictService,\r\n private activateRoute: ActivatedRoute,\r\n private notificationService: NotificationsService,\r\n private dialogService: DialogService,\r\n private studentService: LKStudentService) {\r\n }\r\n\r\n //#region Lifecycle methods\r\n\r\n async ngOnInit() {\r\n await this.getStudentByLogin();\r\n this.getDirectionActivities();\r\n this.getAchievements();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Data\r\n\r\n public async getStudentByLogin() {\r\n const changeStudent = Number(localStorage.getItem('changeStudent'));\r\n await this.studentService.getCurrentStudent().toPromise().then(response => {\r\n if (!response) return;\r\n\r\n this.students = response;\r\n this.studentModel = changeStudent ? this.students[changeStudent-1] : this.students[0];\r\n this.studentId = this.studentModel.externalId;\r\n this.filialId = this.studentModel.filialId;\r\n this.getDirectionActivitiesByFilter();\r\n }, reason => {\r\n this.notificationService.showError('Не удалось загрузить информацию о студенте для просмотра');\r\n });\r\n }\r\n\r\n public getAchievements() {\r\n this.loading = true;\r\n this.portfolioService.getAchievements({ studentId: this.studentId }).subscribe({\r\n next: response => {\r\n if (response) this.achievements = response;\r\n /*this.achievements = [];\r\n\r\n if (response == null || response.length == 0) return;\r\n\r\n for (let i = 0; i < response.length; i++) {\r\n let achievement = this.achievements\r\n .find((_) =>\r\n _.directionActivityId == response[i].directionActivityId);\r\n\r\n if (achievement == null) {\r\n achievement = {\r\n directionActivityId: response[i].directionActivityId,\r\n data: []\r\n };\r\n this.achievements.push(achievement);\r\n }\r\n\r\n achievement.data.push(response[i]);\r\n }*/\r\n },\r\n error: err => {\r\n //this.notificationService.showError(err);\r\n console.log(err);\r\n },\r\n complete: () => this.loading = false\r\n });\r\n }\r\n\r\n public getDirectionActivities() {\r\n this.dictService.getDirectionActivities().subscribe({\r\n next: response => {\r\n this.directionActivities = response;\r\n this.getDirectionActivitiesByFilter();\r\n },\r\n error: err => {\r\n //this.notificationService.showError(err);\r\n console.log(err);\r\n }\r\n });\r\n }\r\n\r\n public getDirectionActivitiesByFilter() {\r\n this.directionActivitiesByFilter = this.directionActivities.filter((x: DictDirectionActivity) => x.filialId == this.filialId);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region AchievementListView\r\n\r\n //#region Display\r\n\r\n public displayDirectionActivityName(id: string): string {\r\n let directionActivity = this.directionActivities\r\n .find((_) => _.id == id);\r\n\r\n return directionActivity?.name ?? \"\";\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Handlers\r\n\r\n public removeAchievement({ dataItem }: any): void {\r\n if (!this.editable) return;\r\n\r\n const dialog: DialogRef = openRemoveDialog(this.dialogService, `${dataItem.name}`);\r\n\r\n dialog.result.subscribe((result ) => {\r\n if (result instanceof DialogCloseResult) {}\r\n else {\r\n if (result.text == \"Да\") {\r\n this.portfolioService.deleteAchievement(dataItem.id).subscribe({\r\n next: () => {\r\n this.notificationService.showSuccess('Успешно')\r\n this.getAchievements();\r\n },\r\n error: err => this.notificationService.showError(err)\r\n })\r\n }\r\n }\r\n });\r\n }\r\n\r\n public editAchievement({ dataItem }: any): void {\r\n if (!this.editable) return;\r\n\r\n this.editMode = true;\r\n this.resetForm();\r\n\r\n //console.log(dataItem);\r\n\r\n this.editForm = new FormGroup({\r\n id: new FormControl(dataItem.id),\r\n name: new FormControl(dataItem.name),\r\n directionActivityId: new FormControl(dataItem.directionActivityId)\r\n });\r\n\r\n this.fileUploadedList = dataItem.files;\r\n this.fileUploaded = dataItem.files?.length > 0;\r\n }\r\n\r\n //#endregion\r\n\r\n //#endregion\r\n\r\n //#region Download\r\n\r\n public downloadFile(file: { id: string, name: string }) {\r\n this.portfolioService.downloadAchievementFile(file.id).subscribe({\r\n next: response => {\r\n let blob:any = new Blob([response], { type: `application/pdf; charset=utf-8` });\r\n\r\n saveAs(blob, file.name);\r\n },\r\n error: err => this.notificationService.showError(err.status == 404 ? 'Файл не найден' : err)\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n //#region EditForm\r\n\r\n public addAchievement() {\r\n if (!this.editable) return;\r\n\r\n this.editMode = true;\r\n this.resetForm();\r\n }\r\n\r\n public closeEditForm() {\r\n this.editMode = false;\r\n this.resetForm();\r\n }\r\n\r\n public saveAchievement() {\r\n if (!this.editable) return;\r\n\r\n //console.log(this.editForm.value);\r\n //console.log(this.fileUploads);\r\n\r\n let formData = new FormData();\r\n\r\n if (this.editForm.value.id) formData.append(`Id`, this.editForm.value.id);\r\n formData.append(`Name`, this.editForm.value.name);\r\n formData.append(`StudentId`, this.studentId);\r\n formData.append(`DirectionActivityId`, this.editForm.value.directionActivityId);\r\n\r\n this.fileUploads?.forEach((_) => {\r\n formData.append(`Files`, _, _.name);\r\n });\r\n\r\n this.editForm.value.id\r\n ? this.portfolioService.putAchievement(formData).subscribe({\r\n next: () => {\r\n this.getAchievements();\r\n this.closeEditForm()\r\n this.notificationService.showSuccess(\"Обновлено\");\r\n },\r\n error: err => this.notificationService.showError(err)\r\n })\r\n : this.portfolioService.postAchievement(formData).subscribe({\r\n next:() => {\r\n this.getAchievements();\r\n this.closeEditForm()\r\n this.notificationService.showSuccess(\"Сохранено\");\r\n },\r\n error:err => this.notificationService.showError(err)\r\n });\r\n\r\n //this.editMode = false;\r\n //this.resetForm();\r\n }\r\n\r\n public resetForm() {\r\n this.fileUploaded = false;\r\n this.fileUploadedList = [];\r\n this.fileUploads = [];\r\n this.editForm.reset();\r\n }\r\n\r\n //#region File\r\n\r\n public fileSelected() {\r\n this.fileUploaded = true;\r\n }\r\n\r\n public fileRemoved() {\r\n this.fileUploaded = false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#endregion\r\n\r\n //#region Dialog\r\n\r\n public openDialog() {\r\n this.opened = true;\r\n }\r\n\r\n public closeDialog() {\r\n this.opened = false;\r\n }\r\n\r\n //#endregion\r\n}\r\n","import {DialogCloseResult, DialogResult, DialogService} from '@progress/kendo-angular-dialog';\r\nimport {Observable} from \"rxjs\";\r\nimport {NotificationsService} from \"../app/services/Notifications/notifications.service\";\r\n\r\n/**\r\n * Открывает диалоговое окно с подтверждением удаления записи\r\n *\r\n * @param dialogService - сервис вызова диалогового окна\r\n * @param deleteTarget - объект, который мы хотим удалить\r\n * @param width - ширина диалогового окна\r\n * @param height - высота диалогового окна\r\n * @param minWidth - минимальная ширина диалогового окна\r\n */\r\nexport function openRemoveDialog(dialogService: DialogService, deleteTarget: string, width?: number, height?: number, minWidth?: number) {\r\n return dialogService.open({\r\n title: \"Пожалуйста, подтвердите\",\r\n content: `Вы действительно хотите удалить: ${deleteTarget}?`,\r\n actions: [ {text:\"Нет\"},{ text: \"Да\", themeColor: \"primary\" }],\r\n width: width ? width : 450,\r\n height: height ? height : 200,\r\n minWidth: minWidth ? minWidth : 250,\r\n })\r\n}\r\n\r\n/**\r\n * Выполнение сервиса после подтверждения диалогового окна\r\n * @param dialogResult - результат выбора в диалоговом окне\r\n * @param service - сервис на удаление данных\r\n * @param notificationService - сервис уведомления\r\n */\r\nexport function dialogResultHelper(dialogResult: Observable, service: Observable,\r\n notificationService: NotificationsService) {\r\n dialogResult.subscribe((result ) => {\r\n if (result instanceof DialogCloseResult) {}\r\n else {\r\n if (result.text == \"Да\") {\r\n service.subscribe({\r\n next: () => {\r\n notificationService.showSuccess('Успешно');\r\n },\r\n error: () => notificationService.showError('Произошла ошибка')\r\n })\r\n }\r\n }\r\n })\r\n return false;\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { CurrentControl } from 'src/app/models/progress/currentControl.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CurrentControlService {\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.CurrentControl}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get CurrentControls by student semester\r\n public getCurrentControlsByStudentSemester(studentId: string, studentSemesterId: number): Observable {\r\n return this.http.get(this.baseUrl + '/GetCurrentControlsByStudentSemester/' + studentId + '/' + studentSemesterId)\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, Observable, throwError } from 'rxjs';\r\nimport { DictAttestation } from 'src/app/models/progress/dictAttestation.model';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DictAttestationService {\r\n baseUrl = `${environment.apiEndpoint}${environment.apiPaths.DictAttestation}`;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n //Get DictAttestation\r\n public GetDictAttestations(): Observable {\r\n return this.http.get(this.baseUrl + '/GetDictAttestations/')\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n // Error\r\n handleError(error: HttpErrorResponse) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Handle client error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Handle server error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n console.log(errorMessage);\r\n return throwError(() => {\r\n errorMessage;\r\n });\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n

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

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n

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

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

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

\r\n \r\n \r\n \r\n \r\n {{dataItem.disciplineName + ' (' + dataItem.controlActionName + ')'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{currentControlMarks(item.externalId, dataItem, 'ball')}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{currentControlMarks(item.externalId, dataItem, 'hoursAbsent')}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { LKStudent } from 'src/app/models/profile/lkstudent.model';\r\nimport { LKStudPerson } from 'src/app/models/profile/lkStudPerson.model';\r\nimport { CurrentControl } from 'src/app/models/progress/currentControl.model';\r\nimport { StudentMark } from 'src/app/models/progress/studentMark.model';\r\nimport { StudentSemester } from 'src/app/models/progress/studentSemester.model';\r\nimport { LKStudentService } from 'src/app/services/LKStudent/lkstudent.service';\r\nimport { CurrentControlService } from 'src/app/services/LKStudyProgress/current-control.service';\r\nimport { MiddleControlService } from 'src/app/services/LKStudyProgress/middle-control.service';\r\nimport { DictAttestationService } from 'src/app/services/LKStudyProgress/dict-attestation.service';\r\nimport { DictAttestation } from 'src/app/models/progress/dictAttestation.model';\r\n\r\n@Component({\r\n selector: 'lkprogress',\r\n templateUrl: './progress.component.html',\r\n styleUrls: ['./progress.component.scss']\r\n})\r\nexport class ProgressComponent implements OnInit {\r\n public lastSemester: number = 0;\r\n public hideCurrentControl: boolean = false;\r\n public loading: boolean = false;\r\n public currentControlLoading: boolean = false;\r\n\r\n public studPersons: LKStudPerson[] = [];\r\n public studPerson: LKStudPerson = {\r\n firstName: '',\r\n lastName: '',\r\n middleName: '',\r\n isMale: false,\r\n birthday: new Date()\r\n }\r\n\r\n public students: LKStudent[] = [];\r\n public studentModel: LKStudent = {\r\n externalId: '',\r\n studentNumber: '',\r\n studPersonId: '',\r\n studPerson: this.studPerson\r\n }\r\n\r\n public currentControls: CurrentControl[] = [];\r\n public dictAttestations: DictAttestation[] = [];\r\n public middleControls: StudentMark[] = [];\r\n public studentSemesters: StudentSemester[] = [];\r\n\r\n public semesterForm: FormGroup = new FormGroup({\r\n id: new FormControl(),\r\n externalId: new FormControl(),\r\n studentId: new FormControl(),\r\n semestrBegin: new FormControl(),\r\n semestrEnd: new FormControl(),\r\n semestrNum: new FormControl(),\r\n courseNum: new FormControl(),\r\n })\r\n\r\n constructor(\r\n private currentControlService: CurrentControlService,\r\n private middleControlService: MiddleControlService,\r\n private studentService: LKStudentService,\r\n private dictAttestationService: DictAttestationService) { }\r\n\r\n ngOnInit(): void {\r\n this.getDictAttestations();\r\n this.getCurrentStudent();\r\n }\r\n\r\n //Getting student by login\r\n private getCurrentStudent() {\r\n const changeStudent = Number(localStorage.getItem('changeStudent'));\r\n this.studentService.getCurrentStudent()\r\n .subscribe(\r\n response => {\r\n this.students = response;\r\n if (changeStudent) {\r\n this.studentModel = this.students[changeStudent - 1];\r\n } else {\r\n this.studentModel = this.students[0];\r\n }\r\n this.getStudentSemesters(`${this.studentModel.externalId}`);\r\n }\r\n );\r\n }\r\n\r\n // Get DictAttestations\r\n private getDictAttestations() {\r\n this.dictAttestationService.GetDictAttestations()\r\n .subscribe(\r\n response => {\r\n this.dictAttestations = response;\r\n }\r\n );\r\n }\r\n\r\n public getMarkValue(dataItem: any) {\r\n switch(dataItem) {\r\n case 0:\r\n return 'Не зачтено';\r\n case -1:\r\n return 'Неявка по уважительной причине';\r\n case -2:\r\n return 'Неявка по неуважительной причине';\r\n case -3:\r\n return 'Не допущен';\r\n case 6:\r\n return 'V';\r\n default:\r\n return dataItem;\r\n }\r\n }\r\n\r\n // Получение оценок промежуточного контроля\r\n private getMiddleControlStudentMarksByStudentSemester(studentId: string, studentSemester: number) {\r\n this.loading = true;\r\n this.middleControlService.getStudentMarksByStudentSemester(studentId, studentSemester)\r\n .subscribe(\r\n response => {\r\n this.middleControls = response;\r\n this.loading = false;\r\n },\r\n error => {\r\n this.loading = false;\r\n }\r\n )\r\n }\r\n // Получение оценок текущего контроля\r\n private getCurrentControlsByStudentSemester(studentId: string, studentSemester: number) {\r\n this.currentControlLoading = true;\r\n this.currentControlService.getCurrentControlsByStudentSemester(studentId, studentSemester)\r\n .subscribe(\r\n response => {\r\n this.currentControls = response;\r\n this.currentControlLoading = false;\r\n },\r\n error => {\r\n this.currentControlLoading = false;\r\n }\r\n )\r\n }\r\n\r\n public valueChange(value: any): void {\r\n this.getCurrentControlsByStudentSemester(`${this.studentModel.externalId}`, value);\r\n this.getMiddleControlStudentMarksByStudentSemester(`${this.studentModel.externalId}`, value);\r\n /*const filtered = this.studentSemesters.filter(item => item.externalId === value);\r\n if(filtered[0].courseNum >= 3)\r\n {\r\n this.hideCurrentControl = true;\r\n }\r\n else*/ {\r\n this.hideCurrentControl = false;\r\n }\r\n }\r\n\r\n public currentControlMarks(dictAttestationId: string, dataItem: any, fieldName: string) {\r\n // Проверяем совпадает ли Id контрольной недели\r\n let att = dataItem.attestations.filter((item: any) => item.dictAttestationId == dictAttestationId);\r\n if(att.length>0) {\r\n // Выводим данные в завимости от названия поля\r\n switch(fieldName) {\r\n case 'hoursAbsent':\r\n return att[0].hoursAbsent;\r\n case 'ball':\r\n return att[0].ball;\r\n default:\r\n return '-'\r\n }\r\n }\r\n\r\n return '-';\r\n }\r\n\r\n // Get student semesters\r\n private getStudentSemesters(studentId: string) {\r\n this.middleControlService.getStudentSemesters(studentId)\r\n .subscribe(\r\n response => {\r\n this.studentSemesters = response;\r\n if(response.length !== 0) {\r\n this.semesterForm.value.id = response[response.length-1].id;\r\n this.semesterForm.value.externalId = response[response.length-1].externalId;\r\n this.lastSemester = response[response.length-1].semestrNum;\r\n /*if(response[response.length-1].courseNum >= 3)\r\n {\r\n this.hideCurrentControl = true;\r\n }*/\r\n if(this.lastSemester !== 0) {\r\n this.getCurrentControlsByStudentSemester(`${this.studentModel.externalId}`, this.lastSemester);\r\n this.getMiddleControlStudentMarksByStudentSemester(`${this.studentModel.externalId}`, this.lastSemester);\r\n }\r\n }\r\n }\r\n )\r\n }\r\n}","
\r\n \r\n \r\n \r\n
\r\n
\r\n

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

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{dataItem.date + \" \" + dataItem.time}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { CategoryBaseUnit, LabelRotation, SeriesType } from '@progress/kendo-angular-charts';\r\n\r\n@Component({\r\n selector: 'app-timetable',\r\n templateUrl: './timetable.component.html',\r\n styleUrls: ['./timetable.component.scss']\r\n})\r\nexport class TimeTableComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n public gridData = [\r\n { id: 1, subject: \"Психологическое сопровождение пациентов в общей медицинской практике\", time: \"9:00\", date: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\r\n { id: 2, subject: \"Психология, психопатология и психотерапия зависимостей\", time: \"9:00\", date: \"23.01.2022\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\r\n { id: 3, subject: \"Типология личностных расстройств\", date: \"23.01.2022\", time: \"9:00\", location: \"400(III)\", fio:\"Иванов Иван Иванович\" },\r\n ];\r\n\r\n public coursesData = [\r\n {id: 1, name: \"1 курс\"},\r\n {id: 2, name: \"2 курс\"},\r\n {id: 3, name: \"3 курс\"},\r\n ]\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}","'use strinct';\r\n\r\nexport const tokenStore = 'lks_service'\r\n","import {Injectable} from \"@angular/core\";\r\nimport {tokenStore} from \"../../options/settings\"\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenStorageService {\r\n constructor() {\r\n }\r\n\r\n setToken(data: any) : void {\r\n localStorage.removeItem(tokenStore);\r\n localStorage.setItem(tokenStore, JSON.stringify(data));\r\n\r\n }\r\n\r\n getAuthToken() : string | null {\r\n //return this.cookieService.get(access_token_key);\r\n let tokens = this.getToken();\r\n if (tokens == null)\r\n return null;\r\n return tokens.accessToken;\r\n }\r\n\r\n getAuthTokenType() : string | null {\r\n //return this.cookieService.get(access_token_type);\r\n let tokens = this.getToken();\r\n if (tokens == null)\r\n return null;\r\n return tokens.tokenType;\r\n }\r\n\r\n getToken() : any | null {\r\n let tokensJson = localStorage.getItem(tokenStore);\r\n if (tokensJson == null)\r\n return null;\r\n\r\n return JSON.parse(tokensJson);\r\n }\r\n\r\n deleteToken() : void {\r\n localStorage.removeItem(tokenStore);\r\n\r\n }\r\n}\r\n\r\n\r\n","import {Component, OnInit} from \"@angular/core\"\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ActivatedRoute} from \"@angular/router\";\r\nimport {environment} from \"../../../environments/environment\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\nimport {TokenStorageService} from \"../../services/token.service\";\r\n\r\n@Component(\r\n {\r\n template: \"\",\r\n selector: \"callback\"\r\n }\r\n)\r\n\r\nexport class CallBackComponent implements OnInit {\r\n code: string = \"\"\r\n invalidLogin?: boolean;\r\n\r\n constructor(private tokenStoreService: TokenStorageService, private httpClient: HttpClient, private route: ActivatedRoute) {\r\n }\r\n\r\n ngOnInit() {\r\n this.route.queryParams.subscribe(params => {\r\n this.code = params[\"code\"]\r\n // for (const paramsKey in params) {\r\n // this.queryString += `${this.queryString.length == 0 ? \"\" : \"&\"}${paramsKey}=${params[paramsKey]}`\r\n // }\r\n\r\n if (this.code && this.code.length > 0)\r\n this.httpClient.get(`${environment.apiEndpoint}auth/gettoken?code=${this.code}&client_id=${environment.trustedNetClientId}`)\r\n .subscribe(response => {\r\n const token = response;\r\n this.tokenStoreService.setToken(token)\r\n this.invalidLogin = false\r\n window.location.href = '/'\r\n }, err => {\r\n this.invalidLogin = true\r\n }\r\n )\r\n })\r\n }\r\n\r\n}\r\n","import {Component, OnInit} from \"@angular/core\";\r\nimport {environment} from \"../../../environments/environment\";\r\n\r\n@Component(\r\n {\r\n templateUrl: \"loginpage.component.html\",\r\n styleUrls: [\"loginpage.component.scss\"],\r\n selector: \"login-page\"\r\n }\r\n)\r\n\r\nexport class LoginpageComponent implements OnInit{\r\n\r\n ngOnInit() {\r\n window.location.href = this.authUrlGenerate()\r\n }\r\n\r\n public login(){\r\n window.location.href = this.authUrlGenerate()\r\n }\r\n\r\n private authUrlGenerate(){\r\n let url = `${environment.authEndPoint}/idp/sso/oauth`;\r\n url +=\r\n \"?client_id=\" +\r\n environment.trustedNetClientId +\r\n \"&redirect_uri=\" +\r\n encodeURIComponent(`${window.location.protocol}//${window.location.host}/callback`) +\r\n \"&scope=userprofile\"\r\n ;\r\n return url\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {CanActivate, Router} from \"@angular/router\";\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport {TokenStorageService} from \"../services/token.service\";\r\nimport {environment} from '../../environments/environment';\r\n\r\n@Injectable()\r\nexport class AuthGuard implements CanActivate{\r\n constructor(private jwtHelper: JwtHelperService, private router: Router, private tokenStore: TokenStorageService) {\r\n\r\n }\r\n\r\n canActivate(){\r\n const token = this.tokenStore.getAuthToken()\r\n let user;\r\n let role;\r\n if (token !== null) {\r\n user = this.jwtHelper.decodeToken(token);\r\n role = user.role;\r\n }\r\n\r\n if (token && !this.jwtHelper.isTokenExpired(token) && \r\n user.stud_person_id !== undefined){\r\n return true\r\n }\r\n\r\n if(role?.includes('admin'))\r\n return true;\r\n\r\n if (user.stud_person_id === undefined) {\r\n alert(environment.invalidTokenMessage);\r\n }\r\n\r\n localStorage.removeItem('switchStudent');\r\n localStorage.removeItem('changeStudent');\r\n\r\n this.router.navigateByUrl(\"/login\")\r\n return false;\r\n }\r\n}\r\n","
\r\n
\r\n

{{disciplineName}}

\r\n

{{departmentName}}

\r\n
\r\n \r\n
\r\n\r\n

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

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

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

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

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

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

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

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

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

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

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

\r\n\r\n\r\n \r\n \r\n

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

\r\n
\r\n

ФИО

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

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

\r\n\r\n

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

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

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

\r\n

ИД \"Лань\"

\r\n

ЭБС \"Лань\"

\r\n

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

\r\n

ЭБС TNT-ebook

\r\n
\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { EducationComponent } from './components/education/education.component';\r\nimport { ExamListComponent } from './components/exam-list/exam-list.component';\r\nimport { HomeComponent } from './components/home/home.component';\r\nimport { PortfolioComponent } from './components/portfolio/portfolio.component';\r\nimport { ProgressComponent } from './components/progress/progress.component';\r\nimport { TimeTableComponent } from './components/timetable/timetable.component';\r\nimport {CallBackComponent} from \"./components/auth/callback.component\";\r\nimport {LoginpageComponent} from \"./components/auth/loginpage.component\";\r\nimport {AuthGuard} from \"./guards/authguard\";\r\nimport { EducationDisciplineComponent } from './components/education/education-discipline/education-discipline.component';\r\nimport { CompetenceMatrixComponent } from './components/education/competence-matrix/competence-matrix.component';\r\nimport { ShowComponent } from './components/announcement/show/show.component';\r\nimport { AlertComponent } from \"./components/announcement/alert/alert.component\";\r\nimport { SwitchuserComponent } from './components/switchuser/switchuser.component';\r\nimport { AdminGuard } from './guards/admin.guard';\r\nimport { ElectroResourcesComponent } from \"./components/electro-resources/electro-resources.component\";\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: 'home', pathMatch: 'full', data: {title: 'Моя страница'} },\r\n { path: 'login', component: LoginpageComponent},\r\n { path: 'callback', component: CallBackComponent},\r\n { path: 'home', component: HomeComponent, data: {title: 'Моя страница'}, canActivate: [AuthGuard] },\r\n { path: 'ExamList', component: ExamListComponent, data: {title: 'Расписание экзаменов'}, canActivate: [AuthGuard] },\r\n { path: 'TimeTable', component: TimeTableComponent, data: {title: 'Расписание занятий'}, canActivate: [AuthGuard] },\r\n { path: 'studyProgress', component: ProgressComponent, data: {title: 'Успеваемость'}, canActivate: [AuthGuard] },\r\n { path: 'education', component: EducationComponent, data: {title: 'Образование'} , canActivate: [AuthGuard]},\r\n { path: 'education/:tab', component: EducationComponent, data: {title: 'Образование'} , canActivate: [AuthGuard]},\r\n { path: 'portfolio', component: PortfolioComponent, data: {title: 'Портфолио'} , canActivate: [AuthGuard]},\r\n { path: 'WIP', component: ExamListComponent, data: {title: 'В разработке'}, canActivate: [AuthGuard]},\r\n { path: 'education/discipline/:id', component: EducationDisciplineComponent, data: {title: 'Дисциплина'}, canActivate: [AuthGuard]},\r\n { path: 'education/competenceMatrix/:id', component: CompetenceMatrixComponent, data: {title: 'Перечень компетенций для дисциплины'}, canActivate: [AuthGuard]},\r\n { path: 'show/:id', component: ShowComponent, data: {title: 'Название новости'}, canActivate: [AuthGuard],},\r\n { path: 'alert', component: AlertComponent, data: {title: 'Объявления и новости'}, canActivate: [AuthGuard] },\r\n { path: 'switchuser', component: SwitchuserComponent, canActivate: [AdminGuard] },\r\n { path: 'electroresources', component: ElectroResourcesComponent, canActivate: [AuthGuard]},\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","export const breadcrumbItemsMap = new Map([\r\n [\"\", \"Личный кабинет студента\"],\r\n [\"studyProgress\",\"Успеваемость\"],\r\n [\"education\", \"Образование\"],\r\n [\"portfolio\", \"Портфолио\"],\r\n ['switchuser', 'Просмотр от другого лица'],\r\n ['alert', \"Объявления и новости\"],\r\n ['show',\"Объявления и новости\"],\r\n ['electroresources', \"Электронные образовательные ресурсы и ЭБС\"],\r\n])\r\n","var studentName=\"N/A\";\r\n\r\nexport const menuItems: any[] = [\r\n {\r\n text: `${studentName}`,\r\n items: [\r\n { text: \"Личный кабинет\", icon: \"k-icon k-i-user\" },\r\n //{ text: \"Настройки\", icon: \"k-icon k-i-gear\"},\r\n //{ text: \"Сменить пользователя\", icon: \"k-icon k-i-circle\"},\r\n { text: \"Выход\", icon: \"k-icon k-i-logout\"}\r\n ],\r\n }\r\n]\r\n","import {Injectable} from \"@angular/core\";\r\nimport {TokenStorageService} from \"./token.service\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\n\r\nexport class AuthService {\r\n constructor(private tokenStoreService : TokenStorageService,\r\n protected jwtHelper : JwtHelperService ) {\r\n\r\n\r\n }\r\n\r\n public isUserAuthenticated() {\r\n const token = this.tokenStoreService.getAuthToken();\r\n if (token && !this.jwtHelper.isTokenExpired(token)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","\r\n \r\n \r\n

ЮНИВУЗ 3.0

\r\n
\r\n \r\n \r\n
\r\n

{{fullTitle}}

\r\n

{{shortTitle}}

\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n

{{fullName}}

\r\n
\r\n
\r\n \r\n \r\n
\r\n

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

\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n

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

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

{{item.text}}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n

Выход

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {{ calculatedParametr}}\r\n \r\n {{ item.text }}\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {filter, map, Subscription} from \"rxjs\";\r\nimport {ActivatedRoute, NavigationEnd, Router} from \"@angular/router\";\r\nimport {DrawerItemExpandedFn, DrawerSelectEvent} from '@progress/kendo-angular-layout';\r\nimport {BreadCrumbItem} from '@progress/kendo-angular-navigation';\r\nimport {breadcrumbItemsMap} from \"./models/home/breadcrumb-items.model\";\r\nimport {Title} from '@angular/platform-browser';\r\nimport {menuItems} from './models/menuItems.model';\r\nimport {LKStudentService} from './services/LKStudent/lkstudent.service';\r\nimport {Renderer2} from '@angular/core';\r\nimport {LKStudent} from './models/profile/lkstudent.model';\r\nimport {LKStudPerson} from './models/profile/lkStudPerson.model';\r\nimport {TokenStorageService} from \"./services/token.service\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\nimport {AuthService} from \"./services/auth.service\";\r\nimport {environment} from \"../environments/environment\";\r\nimport {tokenStore} from 'src/options/settings';\r\nimport {AlertStatisticsService} from './services/announcement/alert-statistics.service';\r\nimport {AlertStatistics} from './models/announcement/alert-statistics.model';\r\nimport {ShowService} from './services/announcement/show.service';\r\nimport {LKStudEduGroupService} from \"./services/LKStudent/lkstud-edu-group.service\";\r\n\r\nconst is = (fileName: string, ext: string) =>\r\n new RegExp(`.${ext}\\$`).test(fileName);\r\n\r\n\r\ninterface Item {\r\n text?: string;\r\n icon?: string;\r\n path?: string;\r\n selected?: boolean,\r\n separator?: boolean,\r\n id?: string,\r\n parentId?: string,\r\n url?: string\r\n disabled?: boolean,\r\n return?: boolean\r\n}\r\nconst menuExpanded: string = \"menuExpanded\"\r\n@Component({\r\n encapsulation: ViewEncapsulation.None,\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss'],\r\n providers: []\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n title = 'Личный кабинет студента';\r\n public fullName? = \"\"\r\n public isAdmin = false;\r\n public isSwitchActive = false;\r\n public fullTitle = environment.headerTitle.full;\r\n public shortTitle = environment.headerTitle.short;\r\n public currentId = 0;\r\n\r\n public photoUrl = ''\r\n public selected = \"Inbox\";\r\n public expanded: boolean = (localStorage.getItem(menuExpanded) ?? \"true\") == \"true\";\r\n private routesData: Subscription = new Subscription;\r\n private services: Array = [\r\n {text: \"Новости и объявления\", icon:\"k-i-parameter-date-time\", url:\"/alert\", path: \"/alert\", id: \"announcement\"},\r\n {text: \"Портфолио\", icon: \"k-i-inherited\", url: \"/portfolio\", path:\"/portfolio\", id: \"portfolio\"},\r\n {text: \"Образование\", icon: \"k-i-chart-rose\", url: \"/education\", path: \"/education\", id: \"education\"},\r\n {text: \"Успеваемость\", icon:\"k-i-graph\", url: \"/studyProgress\", path: \"/studyProgress\", id: \"studyProgress\"},\r\n {text: \"Электронные образовательные ресурсы и ЭБС\", icon:\"k-i-dictionary-add\", url: \"/electroresources\", path: \"/electroresources\", id: \"electroresources\"},\r\n //{text: \"Расписание занятий\", icon: \"k-i-calendar-date\", path: \"/WIP\", disabled: true, id: \"wip\"},\r\n //{text: \"Расписание экзаменов\", icon: \"k-i-calendar\", path: \"/WIP\", disabled: true, id: \"wip\"},\r\n //{text: \"Стипендии\", icon:\"k-i-calculator\", path: \"/WIP\", disabled: true, id: \"wip\"},\r\n //{text: \"Социальные документы\", icon:\"k-i-files-error\", disabled: true, path: \"/WIP\", id: \"wip\"}\r\n ];\r\n private externalLinks: Array = environment.menuItems.map((item: any) => ({...item, return: true}));\r\n public items: Array = [\r\n {icon: \"k-i-menu\"},\r\n {text: \"Профиль\", icon: \"k-i-user\", url:\"/home\", selected: true, path: \"/home\", id: \"home\"},\r\n ];\r\n\r\n public menuItems: any[] = menuItems;\r\n public currentStudents: any[] = [];\r\n\r\n public iconClass({ text, items }: any): any {\r\n return {\r\n \"k-i-file-pdf\": is(text, \"pdf\"),\r\n \"k-i-folder\": items !== undefined,\r\n \"k-i-html\": is(text, \"html\"),\r\n \"k-i-image\": is(text, \"jpg|png\"),\r\n \"k-icon\": true,\r\n };\r\n }\r\n\r\n public updateStudentName() {\r\n const test = this.menuItems.find(item => item.text);\r\n menuItems[0].text;\r\n }\r\n\r\n public studPersons: LKStudPerson[] = [];\r\n public studPerson: LKStudPerson = {\r\n firstName: '',\r\n lastName: '',\r\n middleName: '',\r\n isMale: false,\r\n birthday: new Date()\r\n }\r\n\r\n // Student\r\n public students: LKStudent[] = [];\r\n public studentModel: LKStudent = {\r\n externalId: \"\",\r\n studentNumber: \"\",\r\n studPersonId: \"\",\r\n studPerson: this.studPerson\r\n }\r\n\r\n public getStudEduGroup(studentId: string, id: number) {\r\n this.studEduGroupService.getStudEduGroup(studentId)\r\n .subscribe(\r\n response => {\r\n this.currentStudents.push({\r\n text: `Студент ${response.eduGroup?.groupName}`,\r\n studentId: response.studentId,\r\n id: id + 1\r\n })\r\n this.currentStudents = this.currentStudents.sort((a:any, b:any) => a.id - b.id);\r\n // console.log(this.currentStudents);\r\n }\r\n );\r\n }\r\n\r\n //Getting student by login\r\n public getCurrentStudent() {\r\n const changeStudent = localStorage.getItem('changeStudent');\r\n this.studentService.getCurrentStudent( )\r\n .subscribe(\r\n response => {\r\n this.currentId = 1;\r\n if(changeStudent) {\r\n this.currentId = Number(changeStudent);\r\n }\r\n menuItems[0].text = response[0].studPerson.lastName + \" \" + response[0].studPerson.firstName + \" \" + response[0].studPerson.middleName;\r\n this.studentModel.studPerson.firstName = response[0].studPerson.firstName + \" \" + response[0].studPerson.lastName + \" \" + response[0].studPerson.middleName;\r\n this.fullName = response[0].studPerson.lastName + \" \" + response[0].studPerson.firstName + \" \" + response[0].studPerson.middleName;\r\n this.photoUrl = `url('${environment.apiEndpoint}studperson/GetStudPersonPhoto/${response[0].studPersonId}')`;\r\n\r\n // Add switch method\r\n for(let i = 0; i < response.length; i++) {\r\n this.getStudEduGroup(response[i].externalId, i);\r\n }\r\n //console.log(response);\r\n }\r\n );\r\n }\r\n\r\n public onSelect(ev: DrawerSelectEvent): void {\r\n //console.log(this.expanded);\r\n localStorage.setItem(menuExpanded, this.expanded ? \"false\" : \"true\")\r\n if (ev.item.icon == \"k-i-menu\") {\r\n ev.preventDefault();\r\n this.expanded = !this.expanded;\r\n }\r\n else if (ev.item.path != undefined)\r\n this.router.navigate([ev.item.path]);\r\n\r\n }\r\n\r\n\r\n public breadcrumbitems: BreadCrumbItem[] = [\r\n {\r\n text: \"Главная\",\r\n title: \"home\",\r\n\r\n },\r\n {\r\n text: \"Моя страница\",\r\n title: \"studentPersonalPage\",\r\n }\r\n ];\r\n\r\n public expandedIndices = [2];\r\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\r\n return this.expandedIndices.indexOf(item.id) >= 0;\r\n };\r\n\r\n constructor(private router: Router,\r\n private titleService: Title,\r\n private studentService: LKStudentService,\r\n private el: ElementRef,\r\n private studEduGroupService: LKStudEduGroupService,\r\n private alertStatisticsServise: AlertStatisticsService,\r\n private showService: ShowService,\r\n private renderer: Renderer2,\r\n private jwtHelper: JwtHelperService,\r\n private tokenStore: TokenStorageService,\r\n public authService : AuthService,\r\n private cdRef : ChangeDetectorRef\r\n ) {\r\n this.items.splice(2, 0, ...this.externalLinks);\r\n this.items.splice(2, 0, ...this.services.filter(item => environment.services.includes(item.id)));\r\n router.events.subscribe((e) => {\r\n if (e instanceof NavigationEnd) {\r\n const splitURL = e.url.split('/', 3);\r\n const prevSelected = this.items.find((i) => i.selected);\r\n if (prevSelected) {\r\n prevSelected.selected = false;\r\n }\r\n const newSelected = this.items.find((i) =>\r\n i.path === `/${splitURL[1]}` || i.path === `/${splitURL[1]}/${splitURL[2]}`);\r\n if (newSelected) {\r\n newSelected.selected = true;\r\n } else {\r\n this.items[0].selected = true;\r\n }\r\n this.items = [...this.items];\r\n }\r\n });\r\n this.initRoutes();\r\n }\r\n\r\n public calculatedParametr: AlertStatistics[\"calculatedParametr\"] = [] ;\r\n public getAlertStatistics() {\r\n this.alertStatisticsServise.getAlertStatistics()\r\n .subscribe(\r\n response => {\r\n this.calculatedParametr = response[\"calculatedParametr\"];\r\n }\r\n );\r\n}\r\n\r\n ngOnInit(): void {\r\n if(this.authService.isUserAuthenticated())\r\n this.getCurrentStudent();\r\n\r\n let role = [] as string[];\r\n const token = this.tokenStore.getAuthToken();\r\n if(token !== null)\r\n {\r\n const user = this.jwtHelper.decodeToken(token);\r\n if (user.role)\r\n role = user.role;\r\n }\r\n\r\n const switchUser = localStorage.getItem('switchStudent');\r\n if(switchUser === 'true')\r\n this.isSwitchActive = true;\r\n\r\n if(role.includes('admin'))\r\n this.isAdmin = true;\r\n\r\n this.cdRef.detectChanges();\r\n\r\n if (this.items.find(item => item.id === 'announcement')) {\r\n this.getAlertStatistics();\r\n this.showService.subscriber$.subscribe(() => {\r\n this.getAlertStatistics();\r\n });\r\n }\r\n\r\n // Add page titles to components\r\n this.router.events\r\n .pipe(\r\n filter((event) => event instanceof NavigationEnd),\r\n map(() => {\r\n let route: ActivatedRoute = this.router.routerState.root;\r\n let routeTitle = '';\r\n while (route!.firstChild) {\r\n route = route.firstChild;\r\n }\r\n if (route.snapshot.data['title']) {\r\n routeTitle = route!.snapshot.data['title'];\r\n }\r\n return routeTitle;\r\n })\r\n )\r\n .subscribe((title: string) => {\r\n if (title) {\r\n this.titleService.setTitle(`${title} – личный кабинет студента`);\r\n }\r\n });\r\n\r\n }\r\n\r\n public baseSportsIconUrl =\r\n \"https://demos.telerik.com/kendo-ui/content/shared/icons/sports/\";\r\n public baseIconUrl =\r\n \"https://demos.telerik.com/kendo-ui/content/shared/icons/16/\";\r\n\r\n public sportsIconUrl(imageName: string): string {\r\n return this.baseSportsIconUrl + imageName + \".png\";\r\n }\r\n\r\n public iconUrl(imageName: string): string {\r\n return this.baseIconUrl + imageName + \".png\";\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.routesData.unsubscribe();\r\n }\r\n\r\n public menuClick(value: any) {\r\n switch (value.return) {\r\n case true:\r\n return true;\r\n case false:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n switchUser() {\r\n this.router.navigate(['/switchuser']);\r\n }\r\n\r\n public onItemClick(item: BreadCrumbItem): void {\r\n const selectedItemIndex = this.breadcrumbitems.findIndex((i) => i.title === item.title);\r\n const url = this.breadcrumbitems\r\n .slice(0, selectedItemIndex + 1)\r\n .map((i) => `${i.title?.toLowerCase()}` );\r\n this.router.navigate(url);\r\n }\r\n\r\n private initRoutes(): void {\r\n this.routesData = this.router.events.subscribe(() => {\r\n // Exclude query parameters from URL\r\n const route = this.router.url;\r\n this.breadcrumbitems = route\r\n .substring(0, route.indexOf('?') !== -1 ? route.indexOf('?') : route.length)\r\n .split('/')\r\n .filter((segment)=> breadcrumbItemsMap.has(segment))\r\n .map((segment) => {\r\n return {\r\n text: breadcrumbItemsMap.get(segment),\r\n title: segment\r\n };\r\n });\r\n\r\n this.breadcrumbitems = [\r\n // {\r\n // text: 'Главная',\r\n // title: ''\r\n // },\r\n ...this.breadcrumbitems\r\n ];\r\n });\r\n }\r\n\r\n\r\n showLoginPage(){\r\n let route = window.location.pathname//this.router.url\r\n return !this.authService.isUserAuthenticated() && route != \"/callback\" // route.substring(0, route.indexOf('?') !== -1 ? route.indexOf('?') : route.length) != \"/callback\"\r\n }\r\n\r\n showCallbackPage(){\r\n let route = window.location.pathname//this.router.url\r\n return !this.authService.isUserAuthenticated() && route == \"/callback\"// route.substring(0, route.indexOf('?') !== -1 ? route.indexOf('?') : route.length) == \"/callback\"\r\n }\r\n\r\n public changeStudent(studentId: any) {\r\n localStorage.setItem('changeStudent', studentId);\r\n window.location.reload();\r\n }\r\n\r\n public activeItem(id: any) {\r\n return this.currentId === id;\r\n }\r\n\r\n stopUserPreview() {\r\n let currentToken = localStorage.getItem('currentToken');\r\n localStorage.setItem('switchStudent', 'false');\r\n if(currentToken !== null)\r\n {\r\n localStorage.setItem(tokenStore, currentToken);\r\n localStorage.removeItem('currentToken');\r\n window.location.reload();\r\n }\r\n }\r\n\r\n public logOut = () => {\r\n window.location.reload();\r\n localStorage.removeItem('switchStudent');\r\n localStorage.removeItem('changeStudent');\r\n this.tokenStore.deleteToken()\r\n }\r\n\r\n public activeClass!: boolean;\r\n\r\n public onMenuClick() {\r\n this.activeClass = !this.activeClass;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor, HttpErrorResponse\r\n} from '@angular/common/http';\r\nimport {BehaviorSubject, filter, Observable, switchMap, take, throwError} from 'rxjs';\r\nimport {Router} from \"@angular/router\";\r\nimport {catchError} from \"rxjs/operators\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\nimport {TokenStorageService} from \"../services/token.service\";\r\n\r\n@Injectable()\r\nexport class TokenInterceptor implements HttpInterceptor {\r\n constructor( private route: Router, private tokenStorageService: TokenStorageService) {\r\n }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n\r\n\r\n return next.handle(request).pipe(\r\n catchError(err => {\r\n if (err instanceof HttpErrorResponse) {\r\n //console.log('status code ' + err.status);\r\n switch ((err).status) {\r\n case 401:\r\n this.route.navigateByUrl('login');\r\n return throwError(() => err);\r\n\r\n break;\r\n default:\r\n //this.notification.showNotification(\"error\",\r\n // err?.error?.message ?? \"Произошла ошибка при обработке запроса\");\r\n return throwError(() => err);\r\n }\r\n }\r\n else return throwError(() => err);\r\n })\r\n );\r\n }\r\n\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from '@progress/kendo-angular-l10n';\r\n\r\nconst data = {\r\n ru: {\r\n /**\r\n * Отображение текста. По умолчанию Слева направо\r\n */\r\n rtl: false,\r\n messages: {\r\n kendo: {\r\n grid: {\r\n groupPanelEmpty: \"Перетаскивайте сюда заголовки колонок, чтобы сгруппировать по ним\",\r\n noRecords: \"Нет записей.\",\r\n pagerFirstPage: \"Перейти на первую страницу\",\r\n pagerPreviousPage: \"Перейти на предыдущую страницу\",\r\n pagerNextPage: \"Перейти на следующую страницу\",\r\n pagerLastPage: \"Перейти на последнюю страницу\",\r\n pagerPage: \"Страница\",\r\n pagerOf: \"из\",\r\n pagerItems: \"элементов\",\r\n pagerItemsPerPage: \"элементов на странице\",\r\n pagerPageNumberInputTitle: \"Page Number\",\r\n filter: \"Фильтр\",\r\n filterEqOperator: \"Равно\",\r\n filterNotEqOperator: \"Не равно\",\r\n filterIsNullOperator: \"Нет значения\",\r\n filterIsNotNullOperator: \"Есть значение\",\r\n filterIsEmptyOperator: \"Пусто\",\r\n filterIsNotEmptyOperator: \"Не пусто\",\r\n filterStartsWithOperator: \"Начинается с\",\r\n filterContainsOperator: \"Содержит\",\r\n filterNotContainsOperator: \"Не содержит\",\r\n filterEndsWithOperator: \"Заканчивается на\",\r\n filterGteOperator: \"Больше или равно\",\r\n filterGtOperator: \"Больше чем\",\r\n filterLteOperator: \"Меньше или равно\",\r\n filterLtOperator: \"Меньше чем\",\r\n filterIsTrue: \"Да\",\r\n filterIsFalse: \"Нет\",\r\n filterBooleanAll: \"(Все)\",\r\n filterAfterOrEqualOperator: \"Позже или равна\",\r\n filterAfterOperator: \"Позже чем\",\r\n filterBeforeOperator: \"Раньше чем\",\r\n filterBeforeOrEqualOperator: \"Раньше или равна\",\r\n filterFilterButton: \"Отфильтровать\",\r\n filterClearButton: \"Сбросить\",\r\n filterAndLogic: \"И\",\r\n filterOrLogic: \"ИЛИ\",\r\n filterDateToggle: \"Переключить календарь.\",\r\n filterDateToday: \"Сегодня\",\r\n filterNumericDecrement: \"Уменьшить значение\",\r\n filterNumericIncrement: \"Увеличить значение\",\r\n loading: \"Загрузка\",\r\n columns: \"Колонки\",\r\n lock: \"Заблокировать\",\r\n unlock: \"Разблокировать\",\r\n stick: \"Прикрепить\",\r\n unstick: \"Открепить\",\r\n setColumnPosition: \"Установить положение столбца\",\r\n sortAscending: \"Отсортировать по возрастанию\",\r\n sortDescending: \"Отсортировать по убыванию\",\r\n columnsApply: \"Применить\",\r\n columnsReset: \"Сбросить\",\r\n sortable: \"Можно сортировать\",\r\n sortedAscending: \"Отсортировано по возрастанию\",\r\n sortedDescending: \"Отсортировано по убыванию\",\r\n sortedDefault: \"Сортировка сброшена\",\r\n filterInputLabel: '{columnName} Filter',\r\n filterMenuTitle: '{columnName} Filter Menu',\r\n filterMenuOperatorsDropDownLabel: '{columnName} Filter Operators',\r\n filterMenuLogicDropDownLabel: '{columnName} Filter Logic',\r\n columnMenu: '{columnName} Column Menu',\r\n selectionCheckboxLabel: \"Выберите строку\",\r\n selectAllCheckboxLabel: \"Выбрать все строки\",\r\n pagerLabel: 'Навигация по страницам, страница {currentPage} из {totalPages}',\r\n gridLabel: \"Таблица данных\",\r\n groupCollapse: \"Свернуть группу\",\r\n groupExpand: \"Развернуть группу\",\r\n detailCollapse: \"Свернуть детали\",\r\n detailExpand: \"Развернуть детали\"\r\n },\r\n upload: {\r\n cancel: \"Отменить загрузку\",\r\n clearSelectedFiles: \"Очистить\",\r\n dropFilesHere: \"перетащите сюда файлы для загрузки\",\r\n headerStatusUploaded: \"Готово\",\r\n headerStatusUploading: \"Загружается...\",\r\n invalidFileExtension: \"Не разрешенный тип файла.\",\r\n invalidMaxFileSize: \"Размер файла слишком большой.\",\r\n invalidMinFileSize: \"Размер файла слишком маленький.\",\r\n remove: \"Удалить\",\r\n retry: \"Повторить\",\r\n select: \"Выбрать...\",\r\n uploadSelectedFiles: \"Загрузить выбранные файлы\",\r\n externalDropFilesHere: \"Перетащите файлы сюда для загрузки\",\r\n filesBatchStatus: \"файлы\",\r\n filesBatchStatusFailed: \"Не удалось загрузить файлы.\",\r\n filesBatchStatusUploaded: \"Файлы загружены.\",\r\n fileStatusFailed: \"Не удалось загрузить файл.\",\r\n fileStatusUploaded: \"Файл загружен.\",\r\n headerStatusPaused: \"Приостановлено\"\r\n },\r\n fileselect: {\r\n dropFilesHere: \"Или перетащите сюда файлы для загрузки\",\r\n invalidFileExtension: \"Не разрешенный тип файла.\",\r\n invalidMaxFileSize: \"Размер файла слишком большой.\",\r\n invalidMinFileSize: \"Размер файла слишком маленький.\",\r\n remove: \"Удалить\",\r\n select: \"Выбрать...\"\r\n },\r\n chat: {\r\n messagePlaceholder: \"Введите сообщение...\",\r\n send: \"Отправить\"\r\n },\r\n dropdownlist: {\r\n noDataText: \"Нет данных\",\r\n // selectButtonText: \"\"\r\n },\r\n datepicker: {\r\n toggle: 'Переключить всплывающее окно',\r\n today: 'Сегодня',\r\n prevButtonTitle: 'Перейти к предыдущему виду',\r\n nextButtonTitle: 'Перейти к следующему виду'\r\n },\r\n combobox: {\r\n noDataText: 'Нет данных'\r\n },\r\n datetimepicker: {\r\n dateTab: 'Дата',\r\n timeTab: 'Время',\r\n today: 'Сегодня',\r\n cancel: 'Отмена',\r\n accept: 'Назначить'\r\n }\r\n }\r\n }\r\n },\r\n en: {\r\n rtl: false,\r\n messages: {\r\n \"kendo.grid.noRecords\": \"No records available.\"\r\n },\r\n },\r\n};\r\n\r\n\r\n\r\n@Injectable()\r\nexport class MyMessageService extends MessageService {\r\n /**\r\n * Язык по умолчанию\r\n * @private\r\n */\r\n private localeId = \"ru\";\r\n\r\n public set language(value: string) {\r\n const lang = data[value as keyof typeof data];\r\n if (lang) {\r\n this.localeId = value;\r\n this.notify(lang.rtl);\r\n }\r\n }\r\n \r\n public get language(): string {\r\n return this.localeId;\r\n }\r\n \r\n private get messages(): any {\r\n const lang = data[this.localeId as keyof typeof data];\r\n \r\n if (lang) {\r\n return lang.messages;\r\n }\r\n }\r\n \r\n public override get(key: string): string {\r\n try {\r\n let keys = key.split('.');\r\n return this.messages[keys[0]][keys[1]][keys[2]];\r\n }\r\n catch (e) {\r\n return this.messages[key];\r\n }\r\n }\r\n}","import { LOCALE_ID, NgModule } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport {\r\n HttpClientModule,\r\n HttpClientJsonpModule,\r\n HttpClient, HTTP_INTERCEPTORS,\r\n} from \"@angular/common/http\";\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { GridModule, ExcelModule } from '@progress/kendo-angular-grid';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MenuModule } from '@progress/kendo-angular-menu';\r\nimport { NotificationModule } from '@progress/kendo-angular-notification';\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { LabelModule } from '@progress/kendo-angular-label';\r\nimport { LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { ChartsModule } from '@progress/kendo-angular-charts';\r\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\r\nimport 'hammerjs';\r\nimport { NavigationModule } from '@progress/kendo-angular-navigation';\r\nimport { ListBoxModule } from '@progress/kendo-angular-listbox';\r\nimport { ListViewModule } from '@progress/kendo-angular-listview';\r\nimport \"@progress/kendo-angular-intl/locales/ru/all\"\r\nimport { registerLocaleData } from '@angular/common';\r\nimport localeRu from '@angular/common/locales/ru';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { IconsModule } from '@progress/kendo-angular-icons';\r\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\r\nimport { DropDownsModule, DropDownListModule } from '@progress/kendo-angular-dropdowns';\r\nimport {HomeComponent} from \"./components/home/home.component\";\r\nimport { TimeTableComponent } from './components/timetable/timetable.component';\r\nimport { ExamListComponent } from './components/exam-list/exam-list.component';\r\nimport { ProgressComponent } from './components/progress/progress.component';\r\nimport { FilterDropdownComponent } from './components/filter-dropdown/filter-dropdown.component';\r\nimport { EducationComponent } from './components/education/education.component';\r\nimport { EventsComponent } from './components/home/events/events/events.component';\r\nimport { ExamsComponent } from './components/home/exams/exams.component';\r\nimport { StudentComponent } from './components/home/student/student.component';\r\nimport { PortfolioComponent } from './components/portfolio/portfolio.component';\r\nimport { UploadsModule } from '@progress/kendo-angular-upload';\r\nimport { DialogsModule } from '@progress/kendo-angular-dialog';\r\nimport {CallBackComponent} from \"./components/auth/callback.component\";\r\nimport {LoginpageComponent} from \"./components/auth/loginpage.component\";\r\nimport {JWT_OPTIONS, JwtModule} from \"@auth0/angular-jwt\";\r\nimport {TokenStorageService} from \"./services/token.service\";\r\nimport {jwtOptionsFactory} from \"./services/jwt\";\r\nimport {AuthGuard} from \"./guards/authguard\";\r\nimport {TokenInterceptor} from \"./interceptors/token.interceptor\";\r\nimport { IndicatorsModule } from '@progress/kendo-angular-indicators';\r\nimport { EducationDisciplineComponent } from './components/education/education-discipline/education-discipline.component';\r\nimport { FilterUniquePipe } from './pipes/filter-unique.pipe';\r\nimport { CompetenceMatrixComponent } from './components/education/competence-matrix/competence-matrix.component';\r\nimport { MessageService } from '@progress/kendo-angular-l10n';\r\nimport { MyMessageService } from './message-service.service';\r\nimport { ShowComponent } from './components/announcement/show/show.component';\r\nimport { CommentsComponent } from './components/announcement/show/comments/comments.component';\r\nimport { EducationalProcessScheduleCellComponent } from './components/education/educational-process-schedue-cell/educational-process-schedule-cell.component';\r\nimport { AlertComponent} from \"./components/announcement/alert/alert.component\";\r\nimport { PagerModule } from '@progress/kendo-angular-pager';\r\nimport { SwitchuserComponent } from './components/switchuser/switchuser.component';\r\nimport { EditorModule } from '@progress/kendo-angular-editor';\r\nimport { ElectroResourcesComponent } from \"./components/electro-resources/electro-resources.component\";\r\n\r\n\r\n\r\n\r\n\r\n\r\nregisterLocaleData(localeRu)\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n HomeComponent,\r\n TimeTableComponent,\r\n ExamListComponent,\r\n ProgressComponent,\r\n FilterDropdownComponent,\r\n EducationComponent,\r\n EventsComponent,\r\n ExamsComponent,\r\n StudentComponent,\r\n PortfolioComponent,\r\n LoginpageComponent,\r\n CallBackComponent,\r\n EducationDisciplineComponent,\r\n FilterUniquePipe,\r\n CompetenceMatrixComponent,\r\n ShowComponent,\r\n CommentsComponent,\r\n EducationalProcessScheduleCellComponent,\r\n AlertComponent,\r\n SwitchuserComponent,\r\n ElectroResourcesComponent,\r\n ],\r\n imports: [\r\n BrowserModule,\r\n AppRoutingModule,\r\n DateInputsModule,\r\n DropDownsModule,\r\n DropDownListModule,\r\n ButtonsModule,\r\n GridModule,\r\n BrowserAnimationsModule,\r\n MenuModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NotificationModule,\r\n InputsModule,\r\n LabelModule,\r\n LayoutModule,\r\n ChartsModule,\r\n NavigationModule,\r\n ListBoxModule,\r\n ListViewModule,\r\n HttpClientModule,\r\n IconsModule,\r\n ExcelModule,\r\n UploadsModule,\r\n DialogsModule,\r\n PagerModule,\r\n JwtModule.forRoot({\r\n jwtOptionsProvider:{\r\n provide: JWT_OPTIONS,\r\n useFactory: jwtOptionsFactory,\r\n deps: [TokenStorageService]\r\n }\r\n }),\r\n IndicatorsModule,\r\n EditorModule\r\n ],\r\n providers: [\r\n AuthGuard,\r\n {provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true},\r\n { provide: MessageService, useClass: MyMessageService },\r\n { provide: LOCALE_ID, useValue: 'ru' }\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nif (environment.searchBotDisallow) {\r\n const meta = document.querySelector('meta') ?? document.createElement('meta');\r\n meta.setAttribute('name', 'robots');\r\n meta.setAttribute('content', 'none');\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n","import {TokenStorageService} from \"./token.service\";\r\nimport {environment} from \"../../environments/environment\";\r\n\r\n\r\nexport function jwtOptionsFactory(tokenStorageService: TokenStorageService) {\r\n return {\r\n tokenGetter: () => {\r\n return tokenStorageService.getAuthToken();\r\n },\r\n allowedDomains: environment.allowedDomains\r\n }\r\n}\r\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":[71]}