{"version":3,"mappings":"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KACAA,KACAsC,GACAW,GACAmU,GACA7U,GACA29B,GACAxH,GACA4H,GACA9H,GACAqH,GACAE,KACAuF,GAGA7yC,KACI+P,aAAwB,CACpBC,OAAQ,CACJtO,QAASqO,KACTE,WAAYmjC,GACZrxC,KAAM,CAAC/B,UAWnBimC,GACAF,MAGS3pC,GAAb,GAEM,YAA4BA,GAChC,OAAO,IAAI+T,IAAoB/T,GCpFjCL,OAAyBs3C,gBAAgBJ,IACtCK,MAAMl3C,GAAOuE,QAAQC,MAAMxE,sBCX9B,OACA,YACA,eACA,WACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,WACA,cACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,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,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,qBACA,kBACA,qBACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,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,YACA,eACA,kBACA,eACA,YACA,eACA,gBACA,mBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,eACA,kBACA,cACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,kBACA,qBACA,eACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,iBACA,oBACA,eACA,YACA,eACA,kBACA,qBACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,mBAIA,eACA,aACA,aAEA,eACA,eACA,gDACA,iCACAD,GAEA,aAEAmB,kBACA,uBAEAA,YACArB,aACAqB","names":["T","tn","nn","ln","hn","e","h","st","constructor","this","showSpinner","pt","showSpinner$","asObservable","updateShowSpinner","t","next","factory","Nt","translate","setDefaultLang","activeLang","ngOnInit","n","selectors","Wt","o","spinnerService","subscribe","loading","translateService","addLangs","languageCodes","selectLanguageByCode","getBrowserLang","use","isLanguageCodeSupported","getDefaultLang","currentLang","onSelectLanguage","target","value","Date","supportedLanguageCodes","indexOf","Gt","intercept","a","localStorage","getItem","c","clone","headers","set","handle","H","y","openSnackBar","_snackBar","open","duration","snackTranslate","get","getTranslate","Yn","P","Accept","withCredentials","logoutCookie","http","url","httpOptions","logOut","sessionStorage","setItem","notAllowed","console","error","expirado","JSON","parse","snack","clearStorage","router","navigate","clear","Ut","pipe","status","Ct","$","provide","A","useValue","useClass","Zn","deps","imports","d","R","f","en","M","F","x","Qn","_t","Jn","U","w","xn","Rn","u","$n","kn","v","E","N","Pt","ft","Jt","Ot","Yt","Cn","Tn","Qt","$t","S","PENDING","mn","B","ADMIN","ht","Vt","decodedToken","helper","decodeToken","expirationDate","getTokenExpirationDate","token","isExpired","isTokenExpired","getRole","roles","Bn","isSame","Object","keys","r","length","l","on","getWeek","Array","setHours","getDay","setDate","getDate","push","convertToday","convertDate","toString","getMonth","getFullYear","isCurrentWeek","dia","mes","forEach","C","s","isSameObject","In","getProcesos","httpOptionsJson","getParametro","getUltimaSemanaDisponible","Promise","valor","weekService","getLongitudMensaje","parseInt","J","getNewMessages","setUnreadRead","patch","algo","getUnreadMessages","getConversation","getTodosMensajesMasivos","getUltimoMensajeMasivo","sendMasivoFiltros","post","sendMasivoFiltrosDinamicos","sendMasivoSinFiltros","deleteSuspension","delete","getCantidadNoLeidos","getCanalesYMensajes","getCanal","getMensajesPorCanal","postMensaje","getCanalUsuarioId","dn","requestChangePassword","getRequest","LoginData","getResetNeeded","setNewPass","setNewPassForgotten","loginUser","URLSearchParams","username","password","getNavbarOptions","getUserData","handleUserData","rol","idUsuario","perfilAlumno","id","estado","nombre","apellido","segundoApellido","descripcionUsuario","claveDefecto","navigateByUrl","getDatosCanal","entrenador","parametrosService","messagesService","content","m","isMobile","navigator","userAgent","vendor","test","substr","b","Xt","editDataDetails","messageSource","changeMessage","oe","mobileDetectorService","active","setClass","setCircle","sharedData","currentMessage","activatedRouter","snapshot","routeConfig","path","window","location","reload","option","navbarClass","toLowerCase","includes","iconClass","textClass","title","toLocaleLowerCase","showCircle","Y","navbarButton","icon","name","totalPendientes","loaded","j","showLogout","logout","logoutService","Hn","En","he","g","repeatPassword","route","paramMap","idResetPass","params","loginApiService","firstTime","showHintOnClick","hintClass","nueva","tokenDecoderService","clave","changeForm","claveVerificacion","onSubmit","mt","email","userForm","iniciarSesion","toggleVisibilitiy","hide","ue","matIconRegistry","addSvgIcon","domSanitizer","bypassSecurityTrustResourceUrl","Te","done","Be","repetirClave","message","L","canActivate","data","some","Ie","component","Vn","an","p","loader","useFactory","Fe","V","Ae","De","Se","validation","ut","Nn","ze","je","Mt","bt","Q","registerUser","put","getCountry","getTrainingDays","getTrainingTypes","getRouteOptions","editBankData","editUserData","editObjetives","editAchievements","getTiposDocumento","un","onFormValidation","onInputValidation","onDynamicValidation","Mn","getProfile","patchAvatar","FormData","append","multipartOptions","uploadFile","files","getAvatarUrl","downloadAvatarId","URL","createObjectURL","completeAvatarUrl","avatarUrl","userHasImage","downloadAvatar","responseType","pn","q","ADITIONAL","cn","DESCANSO","I","qn","parseTime","split","parseToString","Fn","getTodayFixedString","toISOString","getDateFixed","getDateWithConverted","Wn","filterObjetives","date","hourDayFixed","objetivoDescripcion","fechaObjetivo","filterObjetive","completeAchievement","time","tiempoMarcaHoras","tiempoMarcaMinutos","tiempoMarcaSegundos","distanciaMarca","distance","fechaMarca","antecedentePreguntaDetalleId","distanciaTipoId","type","filterBackground","antecedentePreguntaId","antecedenteRespuesta","background","days","trainingWeek","condition","complement","restAndFood","shoes","filterUserData","fechaNacimiento","numeroDocumento","DNI","paisId","pais","residencia","prefijoCelular","numeroCelular","prefijoEmergencia","numeroEmergencia","peso","altura","entrenamientoTipoId","entrenamientoGrupoId","grupoId","entrenamientoNivelId","entrenadorId","activo","ultimaModificacion","ultimaModificacionPor","documentTipoId","documentoTipo","filterDataMode","index","mode","entrenamientoTipo","grupo","trainingDays","entrenamientoGrupoDescripcion","Gn","ALUMNO_ID","getOptions","save","stringify","user","bank","filterData","createEntrenamientoDia","_","filterAchievementsDynamic","ruta","k","pista","z","trail","Z","ultra","rn","K","rt","entidad","claveBancaria","ff","Of","hf","mf","uf","bf","yf","wf","vf","kf","Tf","Bf","If","Ff","Af","lt","dt","registerService","objetivo","antecedentesMarcas","antecedente","documentoTipoId","alumnosDatosBancario","entrenamientoDia","entrenamientoDiaTipo","diaSemana","entrenamientoGruposDias","routeOptions","findIndex","distanciaDescripcion","selected","kmsOption","metersOption","hoursDayFixedService","routeType","_n","transform","sanitizer","bypassSecurityTrustUrl","pure","to","archivosSeleccionados","asingDataToForm","statusChanges","formValidatorService","userHasName","userHasLastName","getAvatar","selectFiles","imageService","countrys","documentos","patchValue","userHasSecondLastName","mo","disabled","modeForm","splice","enablePresencial","presencial","unselectAllDays","saveMode","disablePresencial","matRef","options","deselect","saveDay","changeValid","every","valid","saveTrainingDay","map","cardClass2","cardClass1","An","TIME","Ao","timeMask","isMetasObjetivos","achievementForm","controls","enable","achievement","isRuta","patchAchievement","distanceKMeters","distanceMeters","addAchievement","disable","removeAchievement","removeAchievementEvent","emit","i","_d","saveAchievementEvent","patchRoute","parseTimeService","find","yt","removeItem","isRegistration","edit","_adapter","setLocale","sharedData$","flag","saveAchievement","achievementsRoute","achievements","checkLength","changeValidInput","removeAchievementFromEdit","achievementsRouteForEdit","achievementsForEdit","changeValidInputEdit","emptyAchievementEvent","changeAchievement","saveAchievementRouteFromInputComponentFromEdit","checkValidTime","saveAchievementFromInputComponentFromEdit","setUnvalid","saveAchievementFromInputComponent","checkEntrys","changeAchievementEvent","deleteAchievement","ngOnDestroy","unsubscribe","Go","objetivesForm","addObjetive","objetive","id_objetive","removeObjetive","removeObjetiveEvent","saveObjetiveEvent","wt","objetivesForEdit","saveObjetives","objetives","saveObjetivesEditEvent","saveObjetiveFromInputComponent","removeObjetiveFromEdit","emptyEvent","_i","cdr","detectChanges","getAnswersQuestionOne","getAnswersQuestionFive","getObjetives","backgroundForm","objetivesValid","backgrounds","complements","unselectAllConditions","conditions","saveCondition","changeObjetives","showObjetives","objetivesEmpty","rutaValid","pistaValid","ultraValid","trailValid","changeFromCheckbox","changeComplements","showComplements","emptyObjetives","emptyAchievement","hi","bankForm","Ai","firstFormGroup","_formBuilder","group","firstCtrl","secondFormGroup","secondCtrl","thirdFormGroup","thirdCtrl","fourthFormGroup","fourthCtrl","saveStep","removeValidators","addValidators","myStepper","updateValueAndValidity","clearValidators","onSelectionChange","Di","X","postPlan","getPlans","getPlanId","editDetelePlan","postFeedback","getFeedback","getPlanDiaData","getPlanSemanaData","deletePlanDia","editDia","encodeURIComponent","planDetalleTitulo","actividad","editarDiaCompleto","getDatosPorEtiqueta","heredar","habilitar","controlPlanes","changeDays","Pn","showText","class","vt","plansService","diaSemanaActual","sn","setRead","createStudentPost","getStudents","getStudentsWithPaginator","nombreApellido","leido","getAmountsApi","getSuspensionesMotivos","getSuspensionesAlumno","postSuspenderAlumno","cambiarEstado","getHistorialSuspensionesAlumno","getMotivosBaja","getIdAlumno","resendEmail","getAmounts","insertUser","completeUserData","usuario","rolId","creado","creadoPor","completeStudentData","usuarioId","ia","waiting","service","studentForm","success","createStudent","dialog","closeAll","fn","getMyProfile","getProfileUserId","changeUserStatus","Xn","charAt","toUpperCase","slice","kt","respuesta","getUserProfileData","isFeedback","titleClass","userService","alumnoId","fullName","canal","datos","feedbackOpcion","fakeReply","feedbackForm","trim","mensaje","fechaFeedback","feedbackRespuesta","mensajeTipo","metadata","dialogRef","On","getLevels","getStatus","getTrainers","getTrainingType","patchLevel","patchTrainer","patchStudentTrainingData","Na","level","trainer","loadLevels","filtersForm","getRawValue","contador","statusClass","setFiltersFromSessionlStorage","filtersFromSessionStorageEvent","loadStatus","trainingService","allStatus","levels","loadTrainers","trainers","filtersChangeEvent","clearAll","Ja","setPaginate","totalPages","Math","floor","amount","totalPerPage","page","paginators","loadUsers","isNaN","paginateLeft","paginateRight","loadEnded","changePageEvent","Kn","Tt","saveGroup","saveGroupEvent","nt","saveLevel","saveLevelEvent","Dn","substring","Qc","sort","hoursDayFixed","allAchievements","filter","ng","fecha","semanaDia","nuevoDia","Sn","download","downloadHolidays","exportarId","exportarFiltrable","downloadFileNutricionComplementos","preview","G","isAdmin","isStudent","gn","Bg","_day","assignDayClass","rolService","activatedrouter","showEye","day","dayTitleTextClass","dayIconClass","detalleDia","icono","disabledClass","tipoDia","planForm","seleccionado","controlFecha","selectDay","titulo","changeDay","changeActiveDayEvent","dayClass","document","documentElement","style","setProperty","dayInfoMobileClass","text","confirm","cancel","afterClosed","saveAndReload","toggleEdit","openFeedbackDialog","openObjetivesDialog","openDialogEvent","tt","gt","semana","check","enableDownload","getMyProfileData","showReturnWeek","semana2","clean","showChangeDays","reloadEvent","daysWeek2","createPlanWeekData","comentario","esHoy","toLocaleDateString","changeSeleccionadoInDaysWeek2","openDialog","downloadFile","filename","downloadService","bn","returnToCurrentWeek","toDateString","openChangeDays","Fr","loadStudents","studentData","noStudents","setFilters","studentService","filters","firstLoad","convertAndPushStudent","user_id","pushStudent","loadAmount","isExpanded","lastName","training","nivel","changePage","filtersChange","setAndLoad","toggleExpanded","openDialogChat","W","height","minHeight","Lr","getUltimoEnvio","ultimaEjecucion","openDialogCreateStudent","backdropClass","process","pending","Nr","trainingType","loadTrainingType","loadDays","hour","id_trainingDay","Gr","Ur","Tl","loadGroups","datosTraining","checkValidSaveButton","groups","openLevelSelect","levelSelect","openTrainerSelect","trainerSelect","saveTrainer","openSaveDialog","idGrupo","ADMIN_ID","afterSubmit","updateDataEvent","isValid","openEditDialog","showConfirmAsPrimary","openResendMailDialog","Sl","fechaDesde","fechaHasta","suspensionMotivoId","suspensionesForm","addSuspensiones","suspensiones","removeSuspensiones","editable","removeSuspensionesEvent","minDateEnd","addSuspensionesEvent","Ul","checked","checkActivos","getSuspensiones","getMotivos","changeSuspensiones","showSuspensiones","suspensionesEmpty","suspensionesValid","deleteAll","add","postSuspension","emptySuspensiones","noValid","suspensionesPasadas","motivos","addSuspension","toggleEnded","showEnded","Xl","motivoId","motivosBaja","disableForm","showForm","toggleForm","ad","getHistorial","historial","cd","yn","achievementsValid","showEdit","editEvent","onSubmitEvent","vd","personalData","documento","onSubmitPersonalEvent","saveCountry","kd","contactForm","contactData","onSubmitContactEvent","Td","physiologicalForm","physiologicalData","onSubmitPhysiologicalEvent","Bd","arancel","onSubmitBankEvent","Id","onSubmitPersonal","editPersonalEvent","onSubmitPhysiological","editPhysiologicalEvent","onSubmitBank","editBankEvent","onSubmitContact","editContactEvent","ip","number","patchValues","loadingCheck","checkDays","dp","rutaHasContent","pistaHasContent","ultraHasContent","trailHasContent","sp","objetivosHasContent","hp","showMarcasObjetivos","showAntecedentes","zn","AVISO","Jp","saveButton","saveButtonEvent","et","fase1","fase2","fase3","invisible","especificaciones","respuestaRequired","editFormEvent","canGiveFeedback","canSave","checkDate","getFechaFeedbackWithCorrection","noComments","hasFeedback","changeControls","getProfileData","dayForm","past","setMinutes","setSeconds","sendMessageToTrainer","onSubmitDayChanges","clase","replace","longitudFeedback","Ft","getData","profile","routerRedirect","loadData","entrenadorNombre","entrenamientoNivel","entrenamientoNivelDescripcion","disableSave","motivoBaja","entrenamientoGrupo","entrenamientoCodigo","editPersonal","updateProfile","editPhysiological","editBank","editContact","Hs","ot","Ns","toggleOption","toggleOptionEvent","it","getGrupos","postGrupo","activarDesactivar","Qs","isChecked","toggleSlide","groupsService","at","loadMoreEvent","e0","getGroups","size","first","last","loadMore","s0","hora","capacidad","scroll","top","left","behavior","toggleNew","toggleNewEvent","groupForm","horario","entrenamientoGruposDia","disableSubmit","h0","showNew","v0","showGroups","jn","getDomiciliacionPageable","crearFechaDomiciliacion","crearArancel","getDomiciliacionFiltrable","getEmisores","k0","today","domiciliacionService","tx","domiciliacionData","noData","convertAndPushColumn","students","total","noExport","changeTableEvent","ex","arancelForm","At","emisor","emisores","form","ux","est","setFiltersFromLocalStorage","enabledTrainingDaysSelect","allTypes","entrenamientoTipoDescripcion","indexPresencial","allTrainingDays","grupoDescripcion","onChangeType","eC","tipo","selectedMonth","totalElements","export","exportElement","editarArancel","gC","changeTable","showMain","rC","dC","BC","schedule","planData","planSemana","planId","deletePlan","planDetalles","planDetalle","deleteEvent","HC","loadPlans","emptyPlansCurrent","convertAndPushPlan","emtpyPlansSchedule","pushPlan","nivelDescripcion","fechaCreacion","planDataCurrent","semanas","createPlan","updateAfterDelete","EC","notValidEvent","detalles","planDetalleEtiqueta","Dt","id_usuario","minDate","planEditable","detallesDia1","detallesDia2","ultima_modificacion","modificadoPor","notDisabled","planDescripcion","onSubmitEdit","notValid","editFormDays","tM","eM","wn","oM","Un","iM","St","getParticipante","participantes","partipantes","getMiParticipante","_M","ultimoMensaje","otroParticipante","participanteService","miParticipante","flgLeido","nameClass","markUnread","fM","canales","cantidadCanalesSolicitados","messagesForm","participantesData","searchCanalesEmptyEvent","searchCanalesEvent","vM","mobileService","loadMessagesList","pagina","getCantidad","changeCurrent","changeCurrentMessageEvent","selectMassive","massiveMessageEvent","CANTIDAD_ELEMENTOS","completeData","canalId","moreMessagesAvalaible","changeAmountUnread","unreadAmount","unreadMassive","masivosPendientes","loadSearchList","searchEmpty","onScrollDown","searchCanalesEmpty","zt","longitudMensaje","person","image","hasImage","remitenteId","newMessageEvent","changeSizeSmall","changeSize","cdkAutosize","classMessageEvent","isMassive","jt","back","VM","feedback","classFeedback","circleClass","ngAfterViewInit","autofocus","lastChat","nativeElement","focus","e_","loadMessages","messages","reverse","fixMetadata","unshift","onUpMessages","messagesClass","P_","metadataJson","nid","levelsToShow","gid","trainingDaysToShow","tid","typesToShow","toggleDestinatarios","showDestinatarios","studentReply","choose","messageService","y_","asunto","vacaciones","years","viewValue","newForm","checkDisabled","removeTrainingDays","traningDays","indexOnline","enabled","toggleHolidays","close","closeEvent","equals","selectAll","update","deselectAll","z_","toggleNewMassive","toggleMoreMessages","allLevels","E_","loadLongitud","showConversation","showMassive","showList","N_","Lt","xt","Ln","q_","W_","G_","U_","J_","Y_","Q_","$_","vn","postSeccion","getDatosSeccion","editarSeccion","deleteSeccion","getDatosListado","getSeccionesPorTipo","postItem","editarItem","deleteItem","ordenarSecciones","ordenarItems","patchFile","Rt","seccionNombre","seccionTipo","seccionId","seccionesService","oP","Zt","itemNombre","itemUbicacion","itemTipo","itemId","archivos","yP","item","hideButtons","changeItem","toogleDrag","toogleDragDropItemsEvent","AP","addElement","seccion","drop","items","previousIndex","currentIndex","toggleDragDropItems","disableDragDropItems","itemClass","itemOrden","blockActionButtonsEvent","toogleDragSections","toogleSectionsEvent","RP","addSection","secciones","toggleDragDrop","disableDragDrop","seccionOrden","blockActionButtonsFunction","blockActionButtons","notify","JP","zoom","buttonClass","loadedPdf","getPreview","getVideoIframe","match","pdfPath","Et","getDatos","unselectAll","showSection","ef","af","df","loadPreguntas","texto","subSeccionAyuda","preguntasFrecuentesCero","preguntasFrecuentesPlanes","preguntasFrecuentesComunicacion","preguntasFrecuentesAdicional","preguntasFrecuentesPerfil","pf","sf","Ht","xf","Mf","_f","bootstrap","multi","Pf","bootstrapModule","catch"],"sources":["./$_lazy_route_resources|lazy|groupOptions:%20%7B%7D|namespace%20object","./src/app/app-routing.module.ts","./src/app/services/spinner/spinner.service.ts","./src/app/components/translate/translate/translate.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/interceptors/authorization/authorization-interceptor.interceptor.ts","./src/environments/environment.ts","./src/app/utils/snackbar/snackbar.service.ts","./src/app/services/logout/logout.service.ts","./src/app/interceptors/expired/expired.interceptor.ts","./src/app/material/material.module.ts","./src/app/enums/status.ts","./src/app/enums/role.ts","./src/app/services/tokenDecoder/token-decoder.service.ts","./src/app/services/isSameObject/is-same-object.service.ts","./src/app/utils/week/week.service.ts","./src/app/api/services/parametros/parametros.service.ts","./src/app/api/services/messages/messages.service.ts","./src/app/api/services/login-service.service.ts","./src/app/services/mobileDetector/mobile-detector.service.ts","./src/app/services/sharedData/shared-data.service.ts","./src/app/components/global/navbar-button/navbar-button.component.html","./src/app/components/global/navbar-button/navbar-button.component.ts","./src/app/components/global/navbar/navbar.component.html","./src/app/components/global/navbar/navbar.component.ts","./src/app/components/global/header/header.component.html","./src/app/components/global/header/header.component.ts","./src/app/components/login/oneinfoconsulting/oneinfoconsulting.component.ts","./src/app/components/login/oneinfoconsulting/oneinfoconsulting.component.html","./src/app/components/login/footer/footer.component.ts","./src/app/components/login/footer/footer.component.html","./src/app/components/login/change-password/change-password.component.html","./src/app/components/login/change-password/change-password.component.ts","./src/app/components/login/login/login.component.ts","./src/app/components/login/login/login.component.html","./src/app/components/login/welcome/welcome.component.ts","./src/app/components/login/welcome/welcome.component.html","./src/app/components/login/request-change/request-change.component.html","./src/app/components/login/request-change/request-change.component.ts","./src/app/components/login/change-forgotten-password/change-forgotten-password.component.ts","./src/app/components/login/change-forgotten-password/change-forgotten-password.component.html","./src/app/auth.guard.ts","./src/app/components/login/login-routing.module.ts","./src/app/components/global/modules/global.module.ts","./src/app/components/login/login.module.ts","./src/app/components/registration/modules/registration.module.ts","./src/app/interceptors/spinner/spinner.interceptor.ts","./src/app/api/services/register/register.service.ts","./src/app/services/formValidator/form-validator.service.ts","./src/app/api/services/image/image.service.ts","./src/app/enums/training-type.ts","./src/app/enums/antecedentes.ts","./src/app/utils/parseTime/parse-time.service.ts","./src/app/utils/hoursDayFixed/hours-day-fixed.service.ts","./src/app/services/filterData/filter-data.service.ts","./src/app/components/registration/buttons/buttons.component.html","./src/app/components/registration/buttons/buttons.component.ts","./src/app/pipes/secure/secure.pipe.ts","./src/app/components/registration/step-one/step-one.component.html","./src/app/components/registration/step-one/step-one.component.ts","./src/app/components/registration/step-two/step-two.component.html","./src/app/components/registration/step-two/step-two.component.ts","./src/app/enums/mask.ts","./src/app/components/registration/dynamics/inputs-achievements/inputs-achievements.component.html","./src/app/components/registration/dynamics/inputs-achievements/inputs-achievements.component.ts","./src/app/components/registration/dynamics/achievements/achievements.component.html","./src/app/components/registration/dynamics/achievements/achievements.component.ts","./src/app/components/registration/dynamics/inputs/inputs.component.html","./src/app/components/registration/dynamics/inputs/inputs.component.ts","./src/app/components/registration/dynamics/objetives/objetives.component.html","./src/app/components/registration/dynamics/objetives/objetives.component.ts","./src/app/components/registration/step-three/step-three.component.html","./src/app/components/registration/step-three/step-three.component.ts","./src/app/components/registration/step-four/step-four.component.html","./src/app/components/registration/step-four/step-four.component.ts","./src/app/components/registration/stepper/stepper.component.html","./src/app/components/registration/modules/registration-routing.module.ts","./src/app/components/registration/stepper/stepper.component.ts","./src/app/components/registration/thanks/thanks.component.ts","./src/app/components/registration/thanks/thanks.component.html","./src/app/api/services/plans/plans.service.ts","./src/app/components/plans/process/loading/loading.component.html","./src/app/components/plans/process/loading/loading.component.ts","./src/app/components/plans/process/dialog/dialog.component.html","./src/app/components/plans/process/dialog/dialog.component.ts","./src/app/services/admin/student/student.service.ts","./src/app/components/admin/students/create-student/create-student.component.html","./src/app/components/admin/students/create-student/create-student.component.ts","./src/app/api/services/user/user.service.ts","./src/app/pipes/date-name/date-name.pipe.ts","./src/app/components/plans/feedback-dialog/feedback-dialog.component.html","./src/app/components/plans/feedback-dialog/feedback-dialog.component.ts","./src/app/api/services/training/training.service.ts","./src/app/components/admin/students/filters/filters.component.html","./src/app/components/admin/students/filters/filters.component.ts","./src/app/components/admin/students/paginator/paginator.component.html","./src/app/components/admin/students/paginator/paginator.component.ts","./src/app/components/global/status/status.component.html","./src/app/components/global/status/status.component.ts","./src/app/components/global/training-type/training-type.component.html","./src/app/components/global/training-type/training-type.component.ts","./src/app/components/global/level/level.component.html","./src/app/components/global/level/level.component.ts","./src/app/pipes/reduceText/reduce-text.pipe.ts","./src/app/components/plans/objetives-dialog/objetives-dialog.component.html","./src/app/components/plans/objetives-dialog/objetives-dialog.component.ts","./src/app/components/plans/change-days-dialog/change-days-dialog.component.html","./src/app/components/plans/change-days-dialog/change-days-dialog.component.ts","./src/app/api/services/download/download.service.ts","./src/app/services/rol/rol.service.ts","./src/app/components/generic-dialog/generic-dialog.component.html","./src/app/components/generic-dialog/generic-dialog.component.ts","./src/app/components/plans/day/day.component.html","./src/app/components/plans/day/day.component.ts","./src/app/components/plans/week/week.component.html","./src/app/components/plans/week/week.component.ts","./src/app/components/admin/students/students-table/students-table.component.html","./src/app/components/admin/students/students-table/students-table.component.ts","./src/app/components/admin/students/mainpageadmin/mainpageadmin.component.html","./src/app/components/admin/students/mainpageadmin/mainpageadmin.component.ts","./src/app/components/profile/assign-dialog/assign-dialog.component.html","./src/app/components/profile/assign-dialog/assign-dialog.component.ts","./src/app/components/profile/resend-mail/resend-mail.component.html","./src/app/components/profile/resend-mail/resend-mail.component.ts","./src/app/components/global/navigation-button/navigation-button.component.ts","./src/app/components/global/navigation-button/navigation-button.component.html","./src/app/components/profile/profile-header/profile-header.component.html","./src/app/components/profile/profile-header/profile-header.component.ts","./src/app/components/profile/status-register-tab/inactividad/inactividad-inputs/inactividad-inputs.component.html","./src/app/components/profile/status-register-tab/inactividad/inactividad-inputs/inactividad-inputs.component.ts","./src/app/components/profile/status-register-tab/inactividad/inactividad-card/inactividad-card.component.html","./src/app/components/profile/status-register-tab/inactividad/inactividad-card/inactividad-card.component.ts","./src/app/components/profile/status-register-tab/disable/disable.component.html","./src/app/components/profile/status-register-tab/disable/disable.component.ts","./src/app/components/profile/status-register-tab/status-history/status-history.component.html","./src/app/components/profile/status-register-tab/status-history/status-history.component.ts","./src/app/components/profile/status-register-tab/status-register-card/status-register-card.component.ts","./src/app/components/profile/status-register-tab/status-register-card/status-register-card.component.html","./src/app/components/profile/title/title.component.html","./src/app/components/profile/title/title.component.ts","./src/app/components/profile/data/personal-data/personal-data.component.html","./src/app/components/profile/data/personal-data/personal-data.component.ts","./src/app/components/profile/data/contact-data/contact-data.component.ts","./src/app/components/profile/data/contact-data/contact-data.component.html","./src/app/components/profile/data/physiological-data/physiological-data.component.ts","./src/app/components/profile/data/physiological-data/physiological-data.component.html","./src/app/components/profile/data/bank-data/bank-data.component.ts","./src/app/components/profile/data/bank-data/bank-data.component.html","./src/app/components/profile/all-data/all-data.component.ts","./src/app/components/profile/all-data/all-data.component.html","./src/app/components/profile/backgroundAndObjetives/background/background.component.html","./src/app/components/profile/backgroundAndObjetives/background/background.component.ts","./src/app/components/profile/backgroundAndObjetives/achievements-card/achievements-card.component.html","./src/app/components/profile/backgroundAndObjetives/achievements-card/achievements-card.component.ts","./src/app/components/profile/backgroundAndObjetives/objetives-card/objetives-card.component.html","./src/app/components/profile/backgroundAndObjetives/objetives-card/objetives-card.component.ts","./src/app/components/profile/backgroundAndObjetives/background-objetives/background-objetives.component.html","./src/app/components/profile/backgroundAndObjetives/background-objetives/background-objetives.component.ts","./src/app/enums/messagesTypes.ts","./src/app/components/plans/feedback-option/feedback-option.component.html","./src/app/components/plans/feedback-option/feedback-option.component.ts","./src/app/components/plans/feedback/feedback.component.html","./src/app/components/plans/feedback/feedback.component.ts","./src/app/components/profile/main/main.component.html","./src/app/components/profile/main/main.component.ts","./src/app/components/admin/profile/profile/profile.component.html","./src/app/components/admin/profile/profile/profile.component.ts","./src/app/components/student/profile/student-my-profile/student-my-profile.component.html","./src/app/components/student/profile/student-my-profile/student-my-profile.component.ts","./src/app/components/admin/settings/settings-card/settings-card.component.ts","./src/app/components/admin/settings/settings-card/settings-card.component.html","./src/app/api/services/groups/groups.service.ts","./src/app/components/admin/settings/groups/groups-item/groups-item.component.html","./src/app/components/admin/settings/groups/groups-item/groups-item.component.ts","./src/app/components/global/paginator-complete/paginator-complete.component.html","./src/app/components/global/paginator-complete/paginator-complete.component.ts","./src/app/components/admin/settings/groups/groups-list/groups-list.component.html","./src/app/components/admin/settings/groups/groups-list/groups-list.component.ts","./src/app/components/admin/settings/groups/groups-new/groups-new.component.html","./src/app/components/admin/settings/groups/groups-new/groups-new.component.ts","./src/app/components/admin/settings/groups/groups-main/groups-main.component.html","./src/app/components/admin/settings/groups/groups-main/groups-main.component.ts","./src/app/components/admin/settings/settings-page/settings-page.component.html","./src/app/components/admin/settings/settings-page/settings-page.component.ts","./src/app/api/services/domiciliacion/domiciliacion.service.ts","./src/app/components/admin/domiciliacion/new-popup-domiciliacion/new-popup-domiciliacion.component.ts","./src/app/components/admin/domiciliacion/new-popup-domiciliacion/new-popup-domiciliacion.component.html","./src/app/components/admin/domiciliacion/main-table-domiciliacion/main-table-domiciliacion.component.html","./src/app/components/admin/domiciliacion/main-table-domiciliacion/main-table-domiciliacion.component.ts","./src/app/components/admin/domiciliacion/popup-arancel/popup-arancel.component.ts","./src/app/components/admin/domiciliacion/popup-arancel/popup-arancel.component.html","./src/app/components/admin/domiciliacion/emisor-dialog/emisor-dialog.component.html","./src/app/components/admin/domiciliacion/emisor-dialog/emisor-dialog.component.ts","./src/app/components/admin/domiciliacion/filters-domiciliacion/filters-domiciliacion.component.html","./src/app/components/admin/domiciliacion/filters-domiciliacion/filters-domiciliacion.component.ts","./src/app/components/admin/domiciliacion/month-table-domiciliacion/month-table-domiciliacion.component.html","./src/app/components/admin/domiciliacion/month-table-domiciliacion/month-table-domiciliacion.component.ts","./src/app/components/admin/domiciliacion/page-domiciliacion/page-domiciliacion.component.html","./src/app/components/admin/modules/admin-routing.module.ts","./src/app/components/admin/domiciliacion/page-domiciliacion/page-domiciliacion.component.ts","./src/app/components/plans/admin-feedback/admin-feedback.component.html","./src/app/components/plans/admin-feedback/admin-feedback.component.ts","./src/app/components/plans/table/table.component.html","./src/app/components/plans/table/table.component.ts","./src/app/components/plans/list/list.component.html","./src/app/components/plans/list/list.component.ts","./src/app/components/plans/new/day-form/day-form.component.ts","./src/app/components/plans/new/day-form/day-form.component.html","./src/app/components/plans/new/new/new.component.html","./src/app/components/plans/new/new/new.component.ts","./src/app/components/plans/student-plans/student-plans.component.html","./src/app/components/plans/modules/plans-routing.module.ts","./src/app/components/plans/student-plans/student-plans.component.ts","./src/app/components/plans/modules/plans.module.ts","./src/app/components/profile/profile.module.ts","./src/app/services/participante/participante.service.ts","./src/app/components/messages/list/option/option.component.html","./src/app/components/messages/list/option/option.component.ts","./src/app/components/messages/list/search/search.component.html","./src/app/components/messages/list/search/search.component.ts","./src/app/components/messages/list/messages-list/messages-list.component.html","./src/app/components/messages/list/messages-list/messages-list.component.ts","./src/app/components/messages/conversation/new-message/new-message.component.html","./src/app/components/messages/conversation/new-message/new-message.component.ts","./src/app/components/messages/conversation/message-header/message-header.component.html","./src/app/components/messages/conversation/message-header/message-header.component.ts","./src/app/components/messages/conversation/message/message.component.html","./src/app/components/messages/conversation/message/message.component.ts","./src/app/components/messages/conversation/conversation/conversation.component.html","./src/app/components/messages/conversation/conversation/conversation.component.ts","./src/app/components/messages/massive/message-massive/message-massive.component.html","./src/app/components/messages/massive/message-massive/message-massive.component.ts","./src/app/components/messages/massive/new-massive/new-massive.component.html","./src/app/components/messages/massive/new-massive/new-massive.component.ts","./src/app/components/messages/massive/conversation-massive/conversation-massive.component.html","./src/app/components/messages/massive/conversation-massive/conversation-massive.component.ts","./src/app/components/messages/message-page/message-page.component.html","./src/app/components/messages/modules/messages-routing.module.ts","./src/app/components/messages/message-page/message-page.component.ts","./src/app/components/messages/modules/messages.module.ts","./src/app/components/admin/modules/admin.module.ts","./src/app/components/student/modules/student-routing.module.ts","./src/app/components/student/modules/student.module.ts","./src/app/api/services/secciones/secciones.service.ts","./src/app/components/sections/generic/new-edit/new-edit-section/new-edit-section.component.html","./src/app/components/sections/generic/new-edit/new-edit-section/new-edit-section.component.ts","./src/app/components/global/files/files.component.html","./src/app/components/global/files/files.component.ts","./src/app/components/sections/generic/new-edit/new-edit-element/new-edit-element.component.html","./src/app/components/sections/generic/new-edit/new-edit-element/new-edit-element.component.ts","./src/app/components/sections/generic/item/item.component.html","./src/app/components/sections/generic/item/item.component.ts","./src/app/components/sections/generic/section/section.component.html","./src/app/components/sections/generic/section/section.component.ts","./src/app/components/sections/generic/card-section/card-section.component.html","./src/app/components/sections/generic/card-section/card-section.component.ts","./src/app/components/sections/generic/show-item-selected/show-item-selected.component.html","./src/app/components/sections/generic/show-item-selected/show-item-selected.component.ts","./src/app/components/sections/generic/main-generic/main-generic.component.html","./src/app/components/sections/generic/main-generic/main-generic.component.ts","./src/app/components/sections/help/pregunta-help/pregunta-help.component.html","./src/app/components/sections/help/pregunta-help/pregunta-help.component.ts","./src/app/components/sections/help/subseccion-help/subseccion-help.component.html","./src/app/components/sections/help/subseccion-help/subseccion-help.component.ts","./src/app/components/sections/help/main-help/main-help.component.html","./src/app/components/sections/modules/sections-routing.module.ts","./src/app/components/sections/help/main-help/main-help.component.ts","./src/app/components/sections/modules/sections.module.ts","./src/app/app.module.ts","./src/main.ts","/usr/src/app/node_modules/moment/locale|sync|/^//.*$/"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = () => ([]);\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 8255;\nmodule.exports = webpackEmptyAsyncContext;","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpinnerService {\n\n private showSpinner : BehaviorSubject;\n public showSpinner$ : Observable;\n\n constructor() {\n this.showSpinner = new BehaviorSubject (false);\n this.showSpinner$ = this.showSpinner.asObservable();\n }\n\n updateShowSpinner(display: boolean) {\n this.showSpinner.next(display);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-translate',\n templateUrl: './translate.component.html',\n styleUrls: ['./translate.component.scss']\n})\nexport class TranslateComponent implements OnInit {\n\n public activeLang = 'es';\n constructor(\n private translate: TranslateService\n ) {\n this.translate.setDefaultLang(this.activeLang);\n }\n\n ngOnInit(): void {\n }\n\n}\n \n","\n \n \n \n \n
\n \n
\n \n","import { Component, OnInit } from '@angular/core';\nimport { SpinnerService } from './services/spinner/spinner.service';\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n loading: boolean = false;\n title = 'vg-frontend';\n\n private languageCodes: string[] = [\"es\"];\n\n constructor(\n private spinnerService: SpinnerService,\n private translateService: TranslateService) {\n }\n\n ngOnInit() {\n this.spinnerService.showSpinner$.subscribe(display => {\n this.loading = display;\n });\n\n this.translateService.addLangs(this.languageCodes);\n this.translateService.setDefaultLang(\"es\");\n this.selectLanguageByCode(this.translateService.getBrowserLang());\n }\n\n\n\n private selectLanguageByCode(languageCode: string): void {\n this.translateService.use(\n this.isLanguageCodeSupported(languageCode)\n ? languageCode\n : this.translateService.getDefaultLang()\n );\n }\n\n public get currentLanguageCode(): string {\n return this.translateService.currentLang;\n }\n\n public get supportedLanguageCodes(): string[] {\n return this.languageCodes;\n }\n\n public onSelectLanguage(e: any): void {\n this.selectLanguageByCode(e.target.value);\n }\n\n public get todaysDate(): Date {\n return new Date();\n }\n \n private isLanguageCodeSupported(languageCode: string): boolean {\n return this.supportedLanguageCodes.indexOf(languageCode) > -1;\n }\n \n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class AuthorizationInterceptor implements HttpInterceptor {\n\n constructor() {}\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n const userToken = localStorage.getItem('token');\n const modifiedReq = req.clone({ \n headers: req.headers.set('Authorization', `Bearer ${userToken}`),\n });\n return userToken ? next.handle(modifiedReq) : next.handle(req);\n }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false,\n apiUrl : \"https://backend.vgrunning.com\",\n angularUrl: \"https://plataforma.vgrunning.com\",\n};\n\n\n// export const environment = {\n// production: false,\n// apiUrl : \"http://localhost:8080\",\n// angularUrl: \"http://localhost:4200\",\n// };\n\n// export const environment = {\n// production: false,\n// apiUrl : \"http://192.168.0.23:8080\",\n// angularUrl: \"http://192.168.0.23:4200\",\n// };\n\n\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\n\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SnackbarService {\n\n constructor(\n private _snackBar: MatSnackBar,\n private translateService: TranslateService\n ) { }\n\n public openSnackBar(message: string, setDuration?: number) {\n this._snackBar.open(message, \"\", { duration: setDuration ? setDuration : 5000 });\n }\n\n public snackTranslate(key: string) {\n this.translateService.get(key).subscribe((text: string)=> {\n this.openSnackBar(text);\n });\n }\n\n public getTranslate(key: string): string {\n let textoTraducido: string = \"\";\n this.translateService.get(key).subscribe((text: string)=> {\n textoTraducido = text;\n return textoTraducido;\n });\n return textoTraducido;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { Expanded, FiltersStorage } from '../../api/interfaces/user';\nimport { SnackbarService } from '../../utils/snackbar/snackbar.service';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LogoutService {\n\n private url = environment.apiUrl + '/';\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n constructor(\n private snack: SnackbarService,\n private router: Router,\n private http: HttpClient\n ) { }\n\n logoutCookie(): Observable {\n return this.http.get(this.url + `logout`, this.httpOptions);\n }\n\n public logOut() {\n sessionStorage.setItem('logout','true');\n this.logoutCookie().subscribe(response => { \n },\n error => {\n });\n }\n\n public notAllowed() {\n sessionStorage.setItem('notAllowed','true');\n this.logoutCookie().subscribe(response => { \n },\n error => {\n console.error(error);\n });\n }\n\n public expirado() {\n const logout: boolean = JSON.parse(sessionStorage.getItem('logout'));\n const notAllowed: boolean = JSON.parse(sessionStorage.getItem('notAllowed'));\n\n if(logout || notAllowed) {\n if(logout) {\n this.snack.snackTranslate('snacks.logout.success');\n }\n if(notAllowed) {\n this.snack.snackTranslate('snacks.logout.notAllowed');\n }\n } else {\n this.snack.snackTranslate('snacks.logout.expired');\n }\n this.clearStorage();\n this.router.navigate(['']);\n }\n\n clearStorage() {\n localStorage.clear();\n sessionStorage.clear();\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { LogoutService } from '../../services/logout/logout.service';\n\n@Injectable()\nexport class ExpiredInterceptor implements HttpInterceptor {\n\n constructor(\n private logOut: LogoutService\n ) { }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return next.handle(request).pipe(catchError(err => {\n if ([401].indexOf(err.status) !== -1) {\n this.logOut.expirado();\n }\n return throwError(err)\n }));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport {MatCardModule} from '@angular/material/card';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatStepperModule} from '@angular/material/stepper';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatNativeDateModule} from '@angular/material/core';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatGridListModule} from '@angular/material/grid-list';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {MatTableModule} from '@angular/material/table';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatBadgeModule} from '@angular/material/badge';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\nimport {MatListModule} from '@angular/material/list';\n\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport { MatMomentDateModule } from \"@angular/material-moment-adapter\";\n\nimport 'moment/locale/es';\n\nimport {\n MAT_MOMENT_DATE_FORMATS,\n MomentDateAdapter,\n MAT_MOMENT_DATE_ADAPTER_OPTIONS,\n} from '@angular/material-moment-adapter';\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n MatMomentDateModule\n ],\n exports: [\n MatCardModule,\n MatButtonModule,\n MatStepperModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatRadioModule,\n MatDividerModule,\n MatDialogModule,\n MatGridListModule,\n MatTabsModule,\n MatTableModule,\n MatMenuModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatBadgeModule,\n MatAutocompleteModule,\n DragDropModule,\n MatListModule,\n MatSidenavModule,\n MatToolbarModule\n ],\n providers: [\n {provide: MAT_DATE_LOCALE, useValue: 'es-ES'},\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n },\n {provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS},\n ],\n})\nexport class MaterialModule { }\n","export enum StatusEnum {\n PENDING = \"P\",\n ACTIVADO = \"A\" ,\n CREATED = \"C\",\n INACTIVE = \"I\",\n SUSPENDIDO = \"S\",\n CURSO = \"EN CURSO\",\n PROGRAMADO = \"PROGRAMADO\",\n}\n","export enum Role {\n ADMIN = 1,\n STUDENT = 2,\n TRAINER = 3\n}\n\nexport enum RoleString {\n ADMIN = \"ADMIN\",\n STUDENT = \"ALUMNO\"\n}","import { Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenDecoderService {\n\n constructor() { }\n token = localStorage.getItem('token');\n helper = new JwtHelperService();\n\n decodedToken() {\n let result = this.helper.decodeToken(localStorage.getItem('token'));\n return result;\n }\n\n expirationDate() {\n return this.helper.getTokenExpirationDate(this.token); \n }\n\n isExpired() {\n if(this.token) {\n return this.helper.isTokenExpired(this.token);\n } else {\n return true;\n }\n }\n\n getRole() {\n let decoded = this.decodedToken();\n let retornable = null;\n if(decoded) {\n retornable = decoded.roles;\n }\n return retornable;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IsSameObjectService {\n\n constructor() { }\n\n public isSame (aux1, aux2) {\n const keys1 = Object.keys(aux1);\n const keys2 = Object.keys(aux2);\n let aux: boolean = true;\n if (keys1.length !== keys2.length) {\n aux = false;\n }\n for (let key of keys1) {\n if(aux1[key] != aux2[key]) {\n aux = false;\n \n }\n }\n return aux;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IsSameObjectService } from '../../services/isSameObject/is-same-object.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WeekService {\n\n constructor(\n private isSameObject: IsSameObjectService\n ) { }\n\n public getWeek(current: Date): string[] {\n var week = new Array();\n //bugfix internacional\n current.setHours(12);\n\n //bugfix domingo\n if(current.getDay() == 0) {\n current.setDate((current.getDate() - 6))\n } else {\n current.setDate((current.getDate() - current.getDay() +1))\n }\n\n for (var i = 0; i < 7; i++) {\n week.push(\n new Date(current)\n ); \n current.setDate(current.getDate() +1);\n }\n return week;\n }\n\n public convertToday(): string {\n return this.convertDate(new Date().toString());\n }\n\n public convertDate(dateString: string): string {\n const date = new Date(dateString);\n const day: number = date.getDate();\n const month: number = date.getMonth()+1;\n const year: number = date.getFullYear();\n return day.toString() + '-' + month.toString() + '-' + year.toString();\n // return year.toString() + '-' + month.toString() + '-' + day.toString() ;\n }\n\n public isCurrentWeek(fechaFeedback : string): boolean {\n let semanaCompleta: string[] = [];\n let dia = new Date(fechaFeedback);\n \n //correcion para domingos\n if(dia.getDay() != 0) {\n semanaCompleta = this.getWeek(dia);\n } else {\n let aux = new Date(fechaFeedback);\n aux.setDate(aux.getDate() - 1);\n semanaCompleta = this.getWeek(aux);\n }\n\n const hoy = {\n dia: (new Date()).getDate(),\n mes: (new Date()).getMonth(),\n año: (new Date()).getFullYear(),\n }\n let encontre: boolean = false;\n semanaCompleta.forEach( dia => {\n const diaSemanaCompleta = {\n dia: (new Date(dia)).getDate(),\n mes: (new Date(dia)).getMonth(),\n año: (new Date(dia)).getFullYear(),\n }\n const aux: boolean =this.isSameObject.isSame(diaSemanaCompleta,hoy);\n if(aux) {\n encontre = aux;\n }\n });\n return encontre;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ParametroEtiqueta } from '../../interfaces/parametros';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { WeekService } from '../../../utils/week/week.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ParametrosService {\n\n private url = environment.apiUrl + '/';\n\n constructor(\n private http: HttpClient,\n private weekService: WeekService\n ) { }\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n getProcesos(proceso: string, clave: string): Observable {\n return this.http.get(this.url + `api/parametrosclave?etiqueta=${proceso}&clave=${clave}`, this.httpOptionsJson);\n }\n\n getParametro(parametro: string): Observable {\n return this.http.get(this.url + `api/parametros?etiqueta=${parametro}`, this.httpOptionsJson);\n }\n\n getUltimaSemanaDisponible(): Promise {\n return new Promise((resolve, reject) => {\n this.getProcesos('Procesos','semanahabilitada')\n .subscribe(async response => {\n // const proceso = response.find(proceso => proceso.clave == \"semanahabilitada\");\n let day = new Date(response.valor);\n let dia = day.getDay();\n if(dia == 0) {\n day.setDate(day.getDate() +1);\n }\n const semana: string[] = this.weekService.getWeek(day);\n resolve(semana);\n },\n error => {\n console.error(error);\n reject();\n });\n })\n }\n\n public getLongitudMensaje(): Promise {\n return new Promise((resolve, reject) => {\n this.getParametro('Mensajeria')\n .subscribe(async response => {\n const longitud: number = parseInt(response[0].valor,10);\n resolve(longitud);\n },\n error => {\n console.error(error);\n reject();\n });\n })\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { MessageListOption, Message, MassiveMessage, CanalesPageable, Canal, MensajesPageable, EnviarMensaje, Mensaje, MensajesPendientes } from '../../interfaces/messages';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessagesService {\n\n private url = environment.apiUrl + '/';\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n multipartOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n })\n };\n constructor(private http: HttpClient) { }\n\n getNewMessages(): Observable {\n return this.http.get(this.url + `api/mensajes/nuevo`, this.httpOptionsJson);\n }\n\n setUnreadRead(canalId: number): Observable {\n let body = {\n algo: \"algo\"\n }\n return this.http.patch(this.url + `api/canales/${canalId}`, body,this.httpOptionsJson);\n }\n\n getUnreadMessages(cantidadPorPagina:number, pagina: number): Observable {\n return this.http.get(this.url + `api/mensajes/listado?pag=${pagina}®=${cantidadPorPagina}`, this.httpOptions);\n }\n\n getConversation(cantidadPorPagina:number, pagina: number, idConversacion: number): Observable {\n return this.http.get(this.url + `api/mensajes/listado?idConversacion=${idConversacion}&pag=${pagina}®=${cantidadPorPagina}`, this.httpOptions);\n }\n\n getTodosMensajesMasivos(size: number, page: number): Observable {\n return this.http.get(this.url + `api/masivos/mensajes?size=${size}&page=${page}`, this.httpOptions);\n }\n\n getUltimoMensajeMasivo(): Observable {\n return this.http.get(this.url + `api/masivos`, this.httpOptions);\n }\n\n sendMasivoFiltros(mensaje: EnviarMensaje, nivelId: number, grupoId: number): Observable {\n return this.http.post(this.url + `api/masivos/mensajes?nid=${nivelId}&gid=${grupoId}`, mensaje, this.httpOptionsJson);\n }\n\n sendMasivoFiltrosDinamicos(mensaje: EnviarMensaje, nid: string, gid: string, tid: string): Observable {\n return this.http.post(this.url + `api/masivos/mensajes?${gid}&${nid}&${tid}`, mensaje, this.httpOptionsJson);\n }\n\n sendMasivoSinFiltros(mensaje: EnviarMensaje): Observable {\n return this.http.post(this.url + `api/masivos/mensajes`, mensaje, this.httpOptionsJson);\n }\n\n deleteSuspension(suspensionId: number): Observable {\n return this.http.delete(this.url + `api/alumnos/suspensiones?suspensionId=${suspensionId}`, this.httpOptionsJson);\n }\n\n getCantidadNoLeidos(): Observable {\n return this.http.get(this.url + `api/mensajesPendientes`, this.httpOptions);\n }\n\n //endpoints reales\n\n /**\n * \n * @param page {number} page\n * @param size {size} amount of canals per page\n * @returns array Canales and pageable data\n * @interface CanalesPageable\n */\n getCanalesYMensajes(page: number, size: number, sinLeer: boolean): Observable {\n return this.http.get(this.url + `api/canales?page=${page}&size=${size}&sinLeer=${sinLeer}`, this.httpOptions);\n }\n\n /**\n * Get canal's data\n * @param canalId number, id del canal\n * @returns interface Canal\n */\n getCanal(canalId: number): Observable {\n return this.http.get(this.url + `api/canales/${canalId}`, this.httpOptions);\n }\n\n getMensajesPorCanal(canalId: number,size: number, page: number): Observable {\n return this.http.get(this.url + `api/canales/${canalId}/mensajes?size=${size}&page=${page}`, this.httpOptions);\n }\n\n postMensaje(canalId: number, enviarMensaje: EnviarMensaje): Observable {\n return this.http.post(this.url + `api/canales/${canalId}/mensajes`, enviarMensaje, this.httpOptionsJson);\n }\n\n /**\n * Get canal's data, associated with user id\n * @param usuarioId number, user's id\n * @returns interface CanalesPageable\n */\n getCanalUsuarioId(usuarioId: number): Observable {\n return this.http.get(this.url + `api/usuarios/${usuarioId}/canales`, this.httpOptions);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { environment } from '../../../environments/environment';\n\nimport { NewUser, ResetPassword, ResetPasswordRepeat, ReturnUser, NavbarButton, LoginUser, ResetNeeded, LoginData, ResetPasswordForgotten, RequestChange } from '../interfaces/login';\nimport { TokenDecoderService } from 'src/app/services/tokenDecoder/token-decoder.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { Router } from '@angular/router';\nimport { UserComplete } from '../interfaces/user';\nimport { Role, RoleString } from '../../enums/role';\nimport { StatusEnum } from 'src/app/enums/status';\nimport { ParametrosService } from './parametros/parametros.service';\nimport { MessagesService } from './messages/messages.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoginService {\n\n private url = environment.apiUrl + '/';\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n multipartOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n })\n };\n constructor(\n private http: HttpClient,\n private tokenDecoderService: TokenDecoderService,\n private snack: SnackbarService,\n private router: Router,\n private parametrosService: ParametrosService,\n private messagesService: MessagesService\n ) { }\n\n requestChangePassword(email: RequestChange): Observable {\n return this.http.post(this.url + 'api/usuarios/clave/nueva', email, this.httpOptionsJson);\n }\n\n getRequest(id: number): Observable {\n return this.http.get(this.url + `cuenta/requestChangePassword/${id}`, this.httpOptions);\n }\n\n LoginData(id: number): Observable {\n return this.http.get(this.url + `cuenta/requestChangePassword/${id}`, this.httpOptions);\n }\n\n getResetNeeded(): Observable {\n return this.http.get(this.url + `cuenta/resetNeeded/`, this.httpOptions)\n }\n\n setNewPass(resetPasswordRepeat: ResetPasswordRepeat): Observable {\n return this.http.post(this.url + 'api/perfil/cambioclave', resetPasswordRepeat, this.httpOptionsJson);\n }\n\n setNewPassForgotten(resetPasswordRepeat: ResetPasswordForgotten): Observable {\n return this.http.post(this.url + 'api/usuarios/clave', resetPasswordRepeat, this.httpOptionsJson);\n }\n\n loginUser(loginUser: LoginUser): Observable {\n\n let body = new URLSearchParams();\n body.set('username', loginUser.username);\n body.set('password', loginUser.password);\n\n return this.http.post(this.url + 'login', body, this.httpOptions);\n }\n\n getNavbarOptions(): Observable {\n return this.http.get(this.url + 'api/navbar', this.httpOptions);\n }\n\n\n // public verificoSesion() {\n // if (!this.tokenDecoderService.isExpired()) {\n // this.navegacion(JSON.parse(localStorage.getItem('user')), true);\n // } else {\n // this.logOut.limpiarStorage();\n // }\n // }\n\n getUserData(): Observable {\n return this.http.get(this.url + 'api/perfil', this.httpOptions);\n }\n\n public handleUserData() {\n this.getUserData().subscribe(response => {\n const rol: string = response.rol;\n\n localStorage.setItem('idUsuario',response.idUsuario.toString());\n if(response.perfilAlumno) {\n localStorage.setItem('idAlumno',response.perfilAlumno.id.toString());\n if(response.perfilAlumno.estado) {\n const nombreCompleto: string = `${response.perfilAlumno.nombre} ${response.perfilAlumno.apellido} ${response.perfilAlumno.segundoApellido ? response.perfilAlumno.segundoApellido : ''}`;\n localStorage.setItem(\"descripcionUsuario\",nombreCompleto);\n localStorage.setItem('estadoAlumno',response.perfilAlumno.estado);\n }\n } else {\n localStorage.setItem(\"descripcionUsuario\",response.descripcionUsuario);\n }\n\n localStorage.setItem('rol',response.rol);\n\n if (rol === RoleString.ADMIN) {\n this.router.navigate(['/admin/alumnos']);\n this.snack.snackTranslate('snacks.sucess.login.admin');\n }\n if (response.claveDefecto) {\n // sessionStorage.setItem('id', response.idResetPass.toString());\n this.router.navigateByUrl(\"/change-password/\");\n }\n\n if (rol === RoleString.STUDENT && response.perfilAlumno.estado === StatusEnum.CREATED && !response.claveDefecto) {\n this.router.navigate(['/welcome/']);\n this.snack.snackTranslate('snacks.sucess.login.user');\n }\n\n if (rol === RoleString.STUDENT && ( response.perfilAlumno.estado === StatusEnum.ACTIVADO ) ) {\n // enviar mensaje cuando el alumno da feedback\n this.getDatosCanal(response.perfilAlumno.entrenador.id);\n this.router.navigate(['/planes/semana/']);\n this.snack.snackTranslate('snacks.sucess.login.user');\n }\n\n if (rol === RoleString.STUDENT && response.perfilAlumno.estado === StatusEnum.SUSPENDIDO ) {\n this.router.navigate(['alumno/mi-perfil']);\n this.snack.snackTranslate('snacks.sucess.login.user');\n }\n\n if (rol === RoleString.STUDENT && response.perfilAlumno.estado === StatusEnum.PENDING) {\n this.router.navigate(['/thanks']);\n this.snack.snackTranslate('snacks.sucess.login.user');\n }\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n /**\n * Save in localStorage canalId with the student's trainer.\n * @param entrenadorId \n */\n getDatosCanal(entrenadorId: number) {\n this.parametrosService.getProcesos('EntrenadorUsuario',entrenadorId.toString()).subscribe( response=> {\n this.messagesService.getCanalUsuarioId(parseInt(response.valor,10)).subscribe(canal => {\n localStorage.setItem('canalIdEntrenador',canal.content[0].id.toString());\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n },\n error => {\n console.error(error);\n });\n }\n\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobileDetectorService {\n\n constructor() { }\n\n public isMobile () {\n let check = false;\n ((a) => {if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|iPad|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor);\n return check; \n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharedDataService {\n\n constructor() { }\n\n public editDataDetails: any = [];\n public subject = new Subject();\n\n private messageSource = new BehaviorSubject(this.editDataDetails);\n currentMessage = this.messageSource.asObservable();\n\n changeMessage(message: string) {\n this.messageSource.next(message)\n }\n}","
\n
\n \n \n {{option.icon}}\n
{{option.name}}
\n
\n\n\n","import { Component, OnInit, Input } from '@angular/core';\nimport { NavbarButton } from '../../../api/interfaces/login';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { MessagesService } from '../../../api/services/messages/messages.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n\n/**\n * Create buttons for navbar, with 2 class and new messages warning.\n * @param option NavbarButton\n */\n@Component({\n selector: 'app-navbar-button',\n templateUrl: './navbar-button.component.html',\n styleUrls: ['./navbar-button.component.scss']\n})\nexport class NavbarButtonComponent implements OnInit {\n\n @Input('option') option!: NavbarButton;\n @Input('showCircle') showCircle: boolean;\n \n iconClass: string = \"navbarIcon\";\n textClass: string = \"menuText\";\n \n isMobile: boolean = false;\n \n navbarClass: string = \"\";\n active: string = \"\";\n \n constructor(\n private router: Router,\n private mobileDetectorService: MobileDetectorService,\n private messagesService: MessagesService,\n private sharedData: SharedDataService,\n private activatedRouter: ActivatedRoute,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.active = sessionStorage.getItem('active') as string;\n this.setClass();\n this.setCircle();\n\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"ultimoMensajeAdmin\" || message === \"ultimoMensaje\") {\n this.setCircle();\n }\n });\n }\n\n navigate(path: string) {\n //ticket 2329: reload page if user clicks in current page icon\n const url = this.activatedRouter.snapshot.routeConfig.path;\n if(url != path) {\n this.router.navigate([path]);\n } else {\n window.location.reload();\n }\n }\n \n setClass() {\n if(this.option.path) {\n this.navbarClass = \"navbarButton\";\n if(this.option.path.toLowerCase().includes(this.active.toLowerCase())) {\n this.iconClass = \"navbarIconActive\";\n this.textClass = \"menuTextActive\";\n }\n } else {\n this.navbarClass = \"navbarButtonDisabled\";\n }\n }\n\n setCircle() {\n if(!this.option.title.toLocaleLowerCase().includes(\"mensajes\") ) { \n this.showCircle = false;\n }\n }\n\n}\n","
\n\n \n \n \n \n
\n \n
\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { RoleString } from 'src/app/enums/role';\nimport { NavbarButton } from '../../../api/interfaces/login';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\n\n\n/**\n * Create array of navbarButtons for each role\n */\n@Component({\n selector: 'app-navbar',\n templateUrl: './navbar.component.html',\n styleUrls: ['./navbar.component.scss']\n})\nexport class NavbarComponent implements OnInit {\n\n navbarButton: NavbarButton[] = [];\n loaded: boolean = false;\n\n @Input ('active') active! : string;\n rol: string = \"\";\n backdropBackground: string = \"backdropBackground\";\n isMobile: boolean = false;\n showCircle: boolean = false;\n\n constructor(\n private snack: SnackbarService,\n private loginApiService: LoginService,\n private mobileDetectorService: MobileDetectorService,\n private router: Router,\n private messagesService: MessagesService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.rol = localStorage.getItem('rol');\n // this.loginApiService.getNavbarOptions()\n // .subscribe(response => {\n // this.navbarButton = response;\n // this.loaded = true;\n // },\n // error => {\n // this.navbarButton = [];\n \n if(this.rol === RoleString.ADMIN) {\n this.navbarButton = [\n {icon: \"supervisor_account\", name:\"Alumnos\", path: 'admin/alumnos', title: \"Alumnos\"},\n // {icon: \"sports\", name:\"Entrenadores\", path: null, title: \"Entrenadores\"},\n {icon: \"date_range\", name:\"Planes\", path: 'planes/lista', title: \"Planes\"},\n {icon: \"question_answer\", name:\"Mensajes\", path: 'mensajes', title: \"Mensajes\"},\n {icon: \"fitness_center\", name:\"Trabajo comp.\", path: 'complementario', title: \"Trabajo comp.\"},\n {icon: \"restaurant_menu\", name:\"Nutrición\", path: 'nutricion', title: \"Nutrición\"},\n {icon: \"attach_money\", name:\"Domiciliación bancaria\", path: 'admin/domiciliacion', title: \"Domiciliación bancaria\"},\n {icon: \"settings\", name:\"Configuración\", path: 'admin/configuracion', title: \"Configuración\"}\n ];\n }\n if(this.rol === RoleString.STUDENT) {\n \n const estado: string = localStorage.getItem('estadoAlumno');\n let pathPlan: string = 'planes/semana';\n if(estado == 'S' ){\n pathPlan = null\n }\n this.navbarButton = [\n \n {icon: \"date_range\", name:\"Mis planes\", path: pathPlan, title: \"Mis planes\"},\n {icon: \"format_list_numbered\", name:\"Marcas y objetivos\", path: 'alumno/metas-objetivos', title: \"Marcas y objetivos\"},\n {icon: \"question_answer\", name:\"Mensajes\", path: 'mensajes', title: \"Mensajes\"},\n {icon: \"fitness_center\", name:\"Trabajo comp.\", path: 'complementario', title: \"Trabajo comp.\"},\n {icon: \"restaurant_menu\", name:\"Nutrición\", path: 'nutricion', title: \"Nutrición\"},\n {icon: \"account_circle\", name:\"Mi perfil\", path: 'alumno/mi-perfil', title: \"Mi perfil\"},\n {icon: \"help\", name:\"Ayuda\", path: 'ayuda', title: \"Ayuda\"},\n ];\n }\n \n // this.snack.snackTranslate('snacks.error.generic');\n // console.error(error);\n // });\n \n this.setCircle();\n }\n\n navigate(path: string) {\n if(path) {\n this.router.navigate([path]);\n }\n }\n\n setCircle() {\n this.messagesService.getCantidadNoLeidos().subscribe(response => {\n if(response.totalPendientes > 0) {\n this.showCircle = true;\n } else {\n this.showCircle = false;\n }\n this.loaded = true;\n }, error => {\n console.error(error);\n });\n }\n}\n","
\n
\n \n \n
\n
\n \n {{descripcionUsuario}}\n exit_to_app\n
\n\n
\n \n \n exit_to_app\n
\n
\n \n
\n \n

{{'registration.header' | translate}}

\n exit_to_app\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { LogoutService } from '../../../services/logout/logout.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss']\n})\nexport class HeaderComponent implements OnInit {\n\n @Input('showLogout') showLogout?: boolean;\n @Input('registration') registration?: boolean;\n descripcionUsuario: string = \"\";\n isMobile: boolean = false;\n\n constructor(\n private logoutService: LogoutService,\n private mobileDetectorService: MobileDetectorService \n ) { }\n\n ngOnInit(): void {\n if(this.showLogout == undefined) {\n this.showLogout = true;\n }\n this.isMobile = this.mobileDetectorService.isMobile();\n this.descripcionUsuario = localStorage.getItem(\"descripcionUsuario\");\n }\n\n logout() {\n this.logoutService.logOut();\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-oneinfoconsulting',\n templateUrl: './oneinfoconsulting.component.html',\n styleUrls: ['./oneinfoconsulting.component.scss']\n})\nexport class OneinfoconsultingComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n

Powered by

\n \n
\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss']\n})\nexport class FooterComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n\n\n","\n \n
\n
\n

{{'changePassword.title' | translate}}

\n

{{'changePassword.subtitle' | translate}}

\n
\n \n vpn_key\n {{'forms.user.passwordInput' | translate}}\n \n \n \n
\n {{'changePassword.hint' | translate}}\n \n vpn_key\n {{'forms.user.repeatPasswordInput' | translate}}\n \n \n \n \n \n
\n \n
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { Validators, FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { ResetPasswordRepeat } from '../../../api/interfaces/login';\nimport { TokenDecoderService } from '../../../services/tokenDecoder/token-decoder.service';\nimport { StatusEnum } from 'src/app/enums/status';\n\n@Component({\n selector: 'app-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss']\n})\nexport class ChangePasswordComponent implements OnInit {\n\n hide: boolean = true;\n firstTime: boolean = false;\n hintClass: string = \"hideHint\";\n idResetPass: number;\n\n changeForm = new FormGroup({\n password: new FormControl('', [\n Validators.required,\n Validators.pattern(/^(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/),\n ]),\n repeatPassword: new FormControl('', [\n Validators.required\n ])\n });\n constructor(\n private snack: SnackbarService,\n private router: Router,\n private translate: TranslateService,\n private loginApiService: LoginService,\n private route: ActivatedRoute,\n private tokenDecoderService: TokenDecoderService,\n ) { }\n\n ngOnInit() {\n this.route.paramMap.subscribe(params => {\n this.idResetPass = params['params'].id;\n if(this.idResetPass !== undefined) {\n // this.idResetPass = parseInt(sessionStorage.getItem('id'),10);\n this.loginApiService.getUserData().subscribe(response => { \n localStorage.setItem('idUsuario',response.idUsuario.toString());\n if(response.perfilAlumno) {\n localStorage.setItem('idAlumno',response.perfilAlumno.id.toString());\n }\n if (response.perfilAlumno.estado === StatusEnum.CREATED) {\n // sessionStorage.setItem('id', response.idResetPass.toString());\n this.firstTime = true;\n } else {\n this.firstTime = false;\n }\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n } else {\n this.firstTime = false;\n }\n });\n }\n\n showHintOnClick() {\n this.hintClass = \"primaryHint\";\n }\n\n nueva() {\n let role: string = this.tokenDecoderService.getRole();\n this.loginApiService.setNewPass({\n clave: this.changeForm.value.password,\n claveVerificacion: this.changeForm.value.repeatPassword,\n } as ResetPasswordRepeat)\n .subscribe(respuesta => {\n this.snack.snackTranslate('changePassword.success');\n if(this.firstTime && role === \"ROLE_ALUMNO\") {\n this.router.navigate(['/welcome']);\n } else {\n this.router.navigate(['/login']);\n }\n },\n error => {\n console.error(error);\n });\n }\n\n onSubmit() {\n if (this.changeForm.value.password != this.changeForm.value.repeatPassword) {\n this.snack.snackTranslate('snacks.error.passwordDontMatch');\n } else {\n this.nueva();\n }\n }\n}","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { LoginUser } from '../../../api/interfaces/login';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent implements OnInit {\n\n hide: boolean = true;\n public activeLang = 'es';\n constructor(\n private snack: SnackbarService,\n private translate: TranslateService,\n private loginApiService: LoginService\n ) {\n this.translate.setDefaultLang(this.activeLang);\n }\n\n userForm = new FormGroup({\n email: new FormControl(),\n password: new FormControl()\n });\n\n ngOnInit(): void {\n }\n\n onSubmit() {\n if (this.userForm.value.email && this.userForm.value.password) {\n this.iniciarSesion();\n }\n }\n\n iniciarSesion() {\n this.loginApiService.loginUser({\n \"password\": this.userForm.value.password,\n \"username\": this.userForm.value.email\n } as LoginUser)\n .subscribe(user => {\n this.loginApiService.handleUserData();\n },\n error => {\n if (error.status != 200) {\n console.error(error);\n switch (error.status) {\n case 401:\n this.snack.snackTranslate('snacks.error.login');\n // this.snack.snackTranslate('snacks.error.loginEmail');\n break;\n // case 404:\n // break;\n default:\n this.snack.snackTranslate('snacks.error.generic');\n break;\n }\n } else {\n this.loginApiService.handleUserData();\n }\n });\n }\n\n toggleVisibilitiy(event) {\n this.hide = !this.hide;\n }\n}\n\n/*\n 401: user contraseña incorrectos\n 404: no registrado/no coinciden (pero validar)\n\n\n*/","\n \n
\n
\n
\n\n

{{ 'login.title' | translate }}

\n
\n \n email\n {{ 'forms.user.emailInput' | translate}}\n \n \n
\n \n vpn_key\n {{ 'forms.user.passwordInput' | translate}}\n \n \n \n
\n \n \n
\n

{{'login.new' | translate}} {{'login.here' | translate}}

\n
\n \n
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\n@Component({\n selector: 'app-welcome',\n templateUrl: './welcome.component.html',\n styleUrls: ['./welcome.component.scss']\n})\nexport class WelcomeComponent implements OnInit {\n\n constructor(\n private router: Router,\n private loginApiService: LoginService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n ) {\n this.matIconRegistry.addSvgIcon(\n `welcome_icon`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../assets/welcome_icon.svg')\n );\n }\n\n ngOnInit(): void {\n }\n\n navigate() {\n this.router.navigate(['/registration/']);\n }\n\n}\n","\n \n
\n
\n
\n \n

{{'welcome.title'|translate}}

\n

{{'welcome.subtitle'|translate}}

\n

\n {{'welcome.termsText1'|translate}} \n {{'welcome.termsLink'|translate}} \n {{'welcome.termsText2'|translate}}

\n \n
\n
\n
\n","\n \n
\n
\n
\n\n

{{'requestChange.notDone.title' | translate}}

\n

{{'requestChange.notDone.subtitle' | translate}}

\n
\n
\n \n \n email\n {{ 'forms.user.emailInput' | translate}}\n \n \n \n
\n
\n email\n

{{'requestChange.done.title' | translate}}

\n

{{'requestChange.done.subtitle' | translate}}

\n
\n \n
\n
\n \n
\n \n
\n\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { environment } from '../../../../environments/environment';\nimport { RequestChange, ResetPassword } from '../../../api/interfaces/login';\n\n@Component({\n selector: 'app-request-change',\n templateUrl: './request-change.component.html',\n styleUrls: ['./request-change.component.scss']\n})\nexport class RequestChangeComponent implements OnInit {\n\n done: boolean = false;\n \n changeForm = new FormGroup({\n email: new FormControl(),\n });\n\n constructor(\n private snack: SnackbarService,\n private translate: TranslateService,\n private loginApiService: LoginService,\n ) { }\n\n ngOnInit() {\n }\n\n onSubmit() {\n const requestChange: RequestChange = {\n email: this.changeForm.value.email.toString()\n }\n this.loginApiService.requestChangePassword(requestChange)\n .subscribe(response => {\n this.done = true;\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Validators, FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { ResetPasswordForgotten, ResetPasswordRepeat } from '../../../api/interfaces/login';\n\n\n@Component({\n selector: 'app-change-forgotten-password',\n templateUrl: './change-forgotten-password.component.html',\n styleUrls: ['./change-forgotten-password.component.scss']\n})\nexport class ChangeForgottenPasswordComponent implements OnInit {\n\n hide: boolean = true;\n hintClass: string = \"hideHint\";\n token: string;\n\n changeForm = new FormGroup({\n password: new FormControl('', [\n Validators.required,\n Validators.pattern(/^(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/),\n ]),\n repeatPassword: new FormControl('', [\n Validators.required\n ]),\n email: new FormControl('', [\n Validators.required\n ])\n });\n constructor(\n private snack: SnackbarService,\n private router: Router,\n private translate: TranslateService,\n private loginApiService: LoginService,\n private route: ActivatedRoute,\n ) { }\n\n ngOnInit() {\n this.route.paramMap.subscribe(params => {\n this.token = params['params'].id;\n if(this.token !== undefined) {\n\n }\n });\n }\n\n showHintOnClick() {\n this.hintClass = \"primaryHint\";\n }\n\n nueva() {\n this.loginApiService.setNewPassForgotten({\n token: this.token,\n email: this.changeForm.value.email,\n clave: this.changeForm.value.password,\n repetirClave: this.changeForm.value.repeatPassword,\n } as ResetPasswordForgotten)\n .subscribe(respuesta => {\n this.snack.snackTranslate('changePassword.success');\n this.router.navigate(['/login']);\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n onSubmit() {\n if (this.changeForm.value.password != this.changeForm.value.repeatPassword) {\n this.snack.snackTranslate('snacks.error.passwordDontMatch');\n } else {\n this.nueva();\n }\n }\n}\n","\n \n
\n
\n

{{'changePassword.title' | translate}}

\n
\n\n \n email\n {{ 'forms.user.emailInput' | translate}}\n \n \n
\n\n \n vpn_key\n {{'forms.user.passwordInput' | translate}}\n \n \n \n\n
\n\n {{'changePassword.hint' | translate}}\n \n vpn_key\n {{'forms.user.repeatPasswordInput' | translate}}\n \n \n \n \n
\n \n
\n \n
\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\nimport { LogoutService } from '../app/services/logout/logout.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuard implements CanActivate {\n\n constructor(\n private logOut: LogoutService,\n) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const user= localStorage.getItem('rol');\n\n if (user) {\n const foundRol: boolean = route.data.roles.some(rol => rol == user);\n if(foundRol) {\n return true;\n } else {\n this.logOut.notAllowed();\n return false;\n }\n }\n this.logOut.notAllowed();\n return false;\n } \n}","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ChangePasswordComponent } from './change-password/change-password.component';\nimport { LoginComponent } from './login/login.component';\nimport { WelcomeComponent } from './welcome/welcome.component';\nimport { RequestChangeComponent } from './request-change/request-change.component';\nimport { ChangeForgottenPasswordComponent } from './change-forgotten-password/change-forgotten-password.component';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\n\nconst routes: Routes = [\n {\n path: 'login',\n component: LoginComponent\n },\n {\n path: '',\n component: LoginComponent\n },\n {\n path: 'welcome',\n component: WelcomeComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n {\n path: 'change-password/:id',\n component: ChangePasswordComponent\n },\n {\n path: 'request-change',\n component: RequestChangeComponent\n },\n {\n path: 'forget-password/:id',\n component: ChangeForgottenPasswordComponent\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class LoginRoutingModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NavbarComponent } from '../navbar/navbar.component';\n// import { HeaderComponent } from '../../login/header/header.component';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\nimport { MaterialModule } from '../../../material/material.module';\nimport { NavbarButtonComponent } from '../navbar-button/navbar-button.component';\nimport { HeaderComponent } from '../header/header.component';\nimport { SecurePipe } from '../../../pipes/secure/secure.pipe';\nimport { ReduceTextPipe } from '../../../pipes/reduceText/reduce-text.pipe';\nimport { NavigationButtonComponent } from '../navigation-button/navigation-button.component';\nimport { StatusComponent } from '../status/status.component';\nimport { TrainingTypeComponent } from '../training-type/training-type.component';\nimport { LevelComponent } from '../level/level.component';\nimport { DateNamePipe } from '../../../pipes/date-name/date-name.pipe';\nimport { PaginatorCompleteComponent } from '../paginator-complete/paginator-complete.component';\nimport { FilesComponent } from '../files/files.component';\n\nimport { IconComponent } from '../icon/icon.component';\n@NgModule({\n declarations: [\n NavbarComponent,\n NavbarButtonComponent ,\n HeaderComponent,\n SecurePipe,\n ReduceTextPipe,\n NavigationButtonComponent,\n StatusComponent,\n TrainingTypeComponent,\n LevelComponent,\n DateNamePipe,\n PaginatorCompleteComponent,\n FilesComponent,\n IconComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n NavbarComponent,\n HeaderComponent,\n SecurePipe,\n ReduceTextPipe,\n NavigationButtonComponent,\n StatusComponent,\n TrainingTypeComponent,\n LevelComponent,\n DateNamePipe,\n PaginatorCompleteComponent,\n FilesComponent,\n IconComponent\n ]\n})\nexport class GlobalModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { LoginRoutingModule } from './login-routing.module';\nimport { MaterialModule } from '../../material/material.module';\nimport { GlobalModule } from '../global/modules/global.module';\n\nimport { LoginComponent } from './login/login.component';\nimport { AsideComponent } from './aside/aside.component';\nimport { ChangePasswordComponent } from './change-password/change-password.component';\nimport { FooterComponent } from './footer/footer.component';\nimport { OneinfoconsultingComponent } from './oneinfoconsulting/oneinfoconsulting.component';\nimport { WelcomeComponent } from './welcome/welcome.component';\n\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\nimport { RequestChangeComponent } from './request-change/request-change.component';\nimport { ChangeForgottenPasswordComponent } from './change-forgotten-password/change-forgotten-password.component';\n\n@NgModule({\n declarations: [\n LoginComponent,\n AsideComponent,\n ChangePasswordComponent,\n FooterComponent,\n OneinfoconsultingComponent,\n WelcomeComponent,\n RequestChangeComponent,\n ChangeForgottenPasswordComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FormsModule,\n ReactiveFormsModule,\n LoginRoutingModule,\n GlobalModule,\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n LoginComponent,\n ChangePasswordComponent,\n WelcomeComponent,\n LoginRoutingModule\n ]\n})\nexport class LoginModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\n\nimport {MatStepperModule} from '@angular/material/stepper';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\n\nimport { StepperComponent } from '../stepper/stepper.component';\nimport { StepOneComponent } from '../step-one/step-one.component';\nimport { StepTwoComponent } from '../step-two/step-two.component';\nimport { StepThreeComponent } from '../step-three/step-three.component';\nimport { StepFourComponent } from '../step-four/step-four.component';\nimport { ThanksComponent } from '../thanks/thanks.component';\nimport { MaterialModule } from '../../../material/material.module';\nimport { ButtonsComponent } from '../buttons/buttons.component'; \nimport { GlobalModule } from '../../global/modules/global.module';\nimport { AchievementsComponent } from '../dynamics/achievements/achievements.component';\nimport { ObjetivesComponent } from '../dynamics/objetives/objetives.component';\nimport { InputsComponent } from '../dynamics/inputs/inputs.component';\nimport { InputsAchievementsComponent } from '../dynamics/inputs-achievements/inputs-achievements.component';\n\nimport { NgxMaskModule, IConfig } from 'ngx-mask'\n\nconst maskConfig: Partial = {\n validation: false,\n};\n@NgModule({\n declarations: [\n StepperComponent,\n StepOneComponent,\n StepTwoComponent,\n StepThreeComponent,\n StepFourComponent,\n ThanksComponent,\n ButtonsComponent,\n AchievementsComponent,\n ObjetivesComponent,\n InputsComponent,\n InputsAchievementsComponent,\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FormsModule,\n ReactiveFormsModule,\n MatStepperModule,\n GlobalModule,\n MatDatepickerModule,\n NgxMaskModule.forRoot(maskConfig),\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n StepperComponent,\n MatStepperModule,\n AchievementsComponent,\n ObjetivesComponent\n ]\n})\nexport class RegistrationModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { Injectable } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpResponse\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { SpinnerService } from '../../services/spinner/spinner.service';\n\n@Injectable()\nexport class SpinnerInterceptor implements HttpInterceptor {\n\n constructor(\n private spinnerService: SpinnerService\n ) { }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n this.spinnerService.updateShowSpinner(true);\n\n return next.handle(request)\n .pipe(catchError((err) => {\n this.spinnerService.updateShowSpinner(false);\n\n return throwError(err);\n }))\n .pipe(map, any>((evt: HttpEvent) => {\n if (evt instanceof HttpResponse) {\n this.spinnerService.updateShowSpinner(false);\n }\n return evt;\n }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { environment } from '../../../../environments/environment';\nimport { Country, TrainingDays, StudentFromAdmin, Distancias, DatosBancario, Documento } from '../../interfaces/register';\nimport { TType } from '../../interfaces/user';\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RegisterService {\n\n private url = environment.apiUrl + '/';\n // httpOptions = {\n // headers: new HttpHeaders({\n // 'Content-Type': 'application/json'\n // })\n // };\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n multipartOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n })\n };\n constructor(private http: HttpClient) { }\n\n registerUser(data, id: number): Observable {\n return this.http.put(this.url + `api/alumnos/?alumnoId=${id}`, data, this.httpOptionsJson);\n }\n\n getCountry(): Observable {\n return this.http.get(this.url + 'api/paises', this.httpOptions);\n }\n\n getTrainingDays(): Observable {\n return this.http.get(this.url + 'api/entrenamientogrupos', this.httpOptions);\n }\n\n getTrainingTypes(): Observable {\n return this.http.get(this.url + 'api/entrenamientotipos', this.httpOptions);\n }\n\n getRouteOptions(): Observable {\n return this.http.get(this.url + 'api/distancias', this.httpOptions);\n }\n\n getUserData(): Observable {\n return this.http.get(this.url + 'getuserdata', this.httpOptions);\n }\n\n editBankData(alumnoId: number, bankData: DatosBancario[]): Observable {\n return this.http.put(this.url + `api/alumnos/datosbancarios?alumnoId=${alumnoId}`, bankData, this.httpOptionsJson);\n }\n\n editUserData(alumnoId: number, datos): Observable {\n return this.http.put(this.url + `api/alumnos?alumnoId=${alumnoId}`, datos, this.httpOptionsJson);\n }\n \n editObjetives(alumnoId: number, datos): Observable {\n return this.http.put(this.url + `api/alumnos/objetivos?alumnoId=${alumnoId}`, datos, this.httpOptionsJson);\n }\n\n editAchievements(alumnoId: number, datos): Observable {\n return this.http.put(this.url + `api/alumnos/marcas?alumnoId=${alumnoId}`, datos, this.httpOptionsJson);\n }\n \n getTiposDocumento(): Observable { \n return this.http.get(this.url + 'api/tiposdocumento', this.httpOptions);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { SharedDataService } from '../sharedData/shared-data.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormValidatorService {\n\n constructor(\n private sharedData: SharedDataService\n ) { }\n\n\n public onFormValidation(validity: string, message: string, mode: string) {\n switch (validity) {\n case \"VALID\":\n this.sharedData.changeMessage(message+\"valid\");\n break;\n case \"INVALID\":\n let aux = sessionStorage.getItem(mode)\n if(aux) {\n this.sharedData.changeMessage(message+\"invalid\");\n }\n break;\n }\n }\n\n public onInputValidation(validity: string, message: string, index: number) {\n switch (validity) {\n case \"VALID\":\n this.sharedData.changeMessage(message+\"valid\"+\",\"+index);\n break;\n case \"INVALID\":\n this.sharedData.changeMessage(message+\"invalid\"+\",\"+index);\n break;\n }\n }\n\n public onDynamicValidation(validity: string, message: string) {\n switch (validity) {\n case \"VALID\":\n this.sharedData.changeMessage(message+\"valid\");\n break;\n case \"INVALID\":\n this.sharedData.changeMessage(message+\"invalid\");\n break;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\n\nimport { environment } from '../../../../environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageService {\n\n private url = environment.apiUrl + '/';\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n }),\n withCredentials: true,\n };\n multipartOptions = {\n /*headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n }),*/\n withCredentials: true,\n };\n constructor(private http: HttpClient) { }\n\n getProfile(): Observable {\n return this.http.get(this.url + 'api/usuario/miPerfil', this.httpOptions);\n }\n\n patchAvatar(files): Observable {\n const formData = new FormData();\n if (files && files.length > 0) {\n files.forEach(file => {\n formData.append('file', file);\n });\n }\n const multipartOptions = {\n withCredentials: true,\n };\n return this.http.patch(this.url + 'api/usuario/avatar', formData, this.multipartOptions);\n }\n\n uploadFile(event): Promise {\n return new Promise((resolve, reject) => {\n let archivos: string[] = [];\n for (var i = 0; i < event.target.files.length; i++) {\n archivos.push(event.target.files[i]);\n }\n this.patchAvatar(archivos)\n .subscribe(async response => {\n // let avatarUrl = await this.getAvatarUrl();\n resolve(\"avatarUrl\");\n },\n error => {\n console.error(error);\n reject();\n });\n })\n }\n\n /**\n * \n * @param id - number, userId\n * @returns string, path to avatarUrl crated with createObjectUrl\n * ```ts\n * async getAvatar(usuarioId: number) {\n * this.avatarUrl = await this.imageService.getAvatarUrl(usuarioId);\n * }\n * ```\n * \n * ```html\n * \n * \n * ```\n */\n public getAvatarUrl(id: number): Promise {\n return new Promise((resolve, reject) => {\n let avatarUrl = \"\";\n this.downloadAvatarId(id).subscribe(response => {\n avatarUrl = URL.createObjectURL(response );\n resolve(avatarUrl);\n },\n error => {\n // console.error(error);\n reject();\n });\n });\n // return \"\";\n }\n\n public completeAvatarUrl(response) {\n return environment.apiUrl + response.avatarUrl;\n }\n public userHasImage(avatarUrl: string): boolean {\n let result: boolean = false;\n if (avatarUrl != \"\") {\n result = true;\n }\n return result;\n }\n\n downloadAvatar(): Observable {\n return this.http.get(this.url + `api/usuario/avatar`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n downloadAvatarId(id: number): Observable {\n return this.http.get(this.url + `api/usuario/${id}/avatar`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n}\n","export enum TrainingTypeEnum {\n PRESENTIAL = 0,\n ONLINE = 1\n}\n\nexport enum trainingDaysEnum {\n ADITIONAL = 'A',\n IN_GROUP = 'P',\n NULL= 'N',\n DESCANSO = 'D'\n}\n\nexport enum DescansoEnum {\n DESCANSO = 'Descanso'\n}","export enum AntecedentesEnum {\n EXP = 1,\n FREQ = 2,\n SEM = 3,\n EST = 4,\n COMP = 5,\n DYA = 6,\n CALZ = 7,\n MARK = 8,\n RUTA = 20,\n PISTA = 21,\n TRAIL = 22,\n ULTRA = 23\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ParseTimeService {\n\n constructor() { }\n\n public parseTime(time) : number[] {\n let aux = time.split(':');\n let parsed: number[] = [];\n if(aux.length == 3) {\n aux.forEach(element => { \n parsed.push(parseInt(element,10));\n });\n } else {\n let tiempoMarcaHoras: number = time[0]+time[1];\n let tiempoMarcaMinutos: number = time[2]+time[3];\n let tiempoMarcaSegundos: number = time[4]+time[5];\n parsed[0] = tiempoMarcaHoras;\n parsed[1] = tiempoMarcaMinutos;\n parsed[2] = tiempoMarcaSegundos;\n }\n \n return parsed;\n }\n\n public parseToString(tiempoMarcaHoras: number, tiempoMarcaSegundos: number, tiempoMarcaMinutos: number): string {\n \n let horaString : string = \"\";\n let minutosString : string = \"\";\n let segundosString : string = \"\";\n\n if(tiempoMarcaHoras) {\n if(tiempoMarcaHoras < 10) {\n horaString = 0 + tiempoMarcaHoras.toString();\n } else {\n horaString = tiempoMarcaHoras.toString();\n }\n } else {\n horaString = \"00\";\n }\n\n if(tiempoMarcaMinutos) {\n if(tiempoMarcaMinutos < 10) {\n minutosString = 0 + tiempoMarcaMinutos.toString();\n } else {\n minutosString = tiempoMarcaMinutos.toString();\n }\n } else {\n minutosString = \"00\";\n }\n\n if(tiempoMarcaSegundos) {\n if(tiempoMarcaSegundos < 10) {\n segundosString = 0 + tiempoMarcaSegundos.toString();\n } else {\n segundosString = tiempoMarcaSegundos.toString();\n }\n } else {\n segundosString = \"00\";\n }\n\n let time = horaString + \":\" + minutosString + \":\" + segundosString; \n return time;\n\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HoursDayFixedService {\n\n constructor() { }\n\n /**\n * How to use:\n * ```\n * const today: string = this.hoursDayFixedService.getTodayFixedString();\n * // 2022-03-16T12:00:00.000+00:00\n * ```\n * @returns string - today with T12 hours format.\n */\n public getTodayFixedString(): string {\n let auxDate = new Date().setHours(12,0,0);\n let aux = new Date(auxDate).toISOString();\n const auxDate2: string [] = aux.split('T');\n return aux = auxDate2[0] + \"T12:00:00.000+00:00\";\n }\n\n public getDateFixed(auxDate: string): string {\n const auxDate2: string [] = auxDate.split('T');\n const dateFixed: string = auxDate2[0] + \"T12:00:00.000+00:00\";\n return dateFixed;\n }\n\n public getDateWithConverted(aux: string): string {\n if(aux.length > 0) {\n const auxDate = new Date(aux).toISOString();\n return this.getDateFixed(auxDate);\n }\n return \"\";\n }\n}\n","import { Injectable } from '@angular/core';\nimport { stringify } from 'querystring';\nimport { Objetive, FiltratedObjetives, AntecedentesMarcas, Distancias, AchievementDynamic, Antecedente, FilteredMode, FiltratedUser } from 'src/app/api/interfaces/register';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\nimport { HoursDayFixedService } from 'src/app/utils/hoursDayFixed/hours-day-fixed.service';\nimport { ParseTimeService } from 'src/app/utils/parseTime/parse-time.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterDataService {\n\n constructor(\n private parseTime: ParseTimeService,\n private registerService: RegisterService,\n private hourDayFixed: HoursDayFixedService,\n ) { }\n\n public filterObjetives(input: Objetive[]): FiltratedObjetives[] {\n let objetivesArray = Array();\n if (input.length > 0 && input[0].name) {\n input.forEach(element => {\n let aux: FiltratedObjetives;\n if (element.date) {\n\n // bugfix date\n let fechaCorregida : string = this.hourDayFixed.getDateFixed(new Date(element.date).toISOString());\n\n aux = {\n objetivoDescripcion: element.name,\n fechaObjetivo: fechaCorregida,\n id: element.id ? element.id : null,\n }\n } else {\n aux = {\n objetivoDescripcion: element.name,\n fechaObjetivo: null,\n id: element.id ? element.id : null,\n }\n }\n objetivesArray.push(aux);\n });\n return objetivesArray;\n } else {\n return null;\n }\n }\n\n public filterObjetive(input: Objetive): FiltratedObjetives {\n if (input) {\n let aux: FiltratedObjetives;\n if (input.date) {\n\n let fechaCorregida: string = input.date.toString();\n\n // bugfix date\n if(!input.date.toString().includes('T12') && input.date.toString().includes('GMT')) {\n fechaCorregida = this.hourDayFixed.getDateFixed(input.date.toISOString());\n }\n\n aux = {\n objetivoDescripcion: input.name,\n id: input.id,\n fechaObjetivo: fechaCorregida\n }\n } else {\n aux = {\n objetivoDescripcion: input.name,\n fechaObjetivo: null,\n id: input.id,\n }\n }\n return aux;\n } else {\n return null;\n }\n }\n\n public completeAchievement(input: any, mode: string, valid: boolean): AchievementDynamic {\n if (mode === \"pista\" || mode === \"ultra\" || mode === \"trail\") {\n let id: number;\n let optionId: number;\n switch (mode) {\n case \"pista\":\n id = AntecedentesEnum.PISTA;\n optionId = 3;\n break;\n case \"ultra\":\n id = AntecedentesEnum.ULTRA;\n optionId = 4;\n break;\n case \"trail\":\n id = AntecedentesEnum.TRAIL;\n optionId = 4;\n break;\n }\n let time: number[] = this.parseTime.parseTime(input.time);\n let aux: AchievementDynamic = {\n tiempoMarcaHoras: time[0],\n tiempoMarcaMinutos: time[1],\n tiempoMarcaSegundos: time[2],\n distanciaMarca: input.distance,\n fechaMarca: input.date ? input.date : \"\",\n antecedentePreguntaDetalleId: id,\n distanciaTipoId: input.distanciaTipoId? input.distanciaTipoId: optionId,\n id: input.id,\n };\n return aux;\n } else {\n let time: number[] = this.parseTime.parseTime(input.time);\n let aux: AchievementDynamic = {\n distanciaTipoId: input.type.id,\n tiempoMarcaHoras: time[0],\n tiempoMarcaMinutos: time[1],\n tiempoMarcaSegundos: time[2],\n fechaMarca: input.date ? input.date : \"\",\n id: input.id,\n antecedentePreguntaDetalleId: AntecedentesEnum.RUTA,\n }\n return aux;\n }\n return null;\n }\n\n public filterBackground(input): Antecedente[] {\n\n let aux: Antecedente[] = [];\n \n const background: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.EXP,\n antecedenteRespuesta: input.background\n };\n aux.push(background);\n\n const days: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.FREQ,\n antecedenteRespuesta: input.days\n };\n aux.push(days);\n\n const trainingWeek: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.SEM,\n antecedenteRespuesta: input.trainingWeek ? input.trainingWeek : \"\"\n };\n aux.push(trainingWeek);\n\n const conditionName: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.EST,\n antecedenteRespuesta: input.condition.name\n };\n aux.push(conditionName);\n \n const complement: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.COMP,\n antecedenteRespuesta: input.complement ? input.complement : \"No\"\n };\n aux.push(complement);\n\n const restAndFood: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.DYA,\n antecedenteRespuesta: input.restAndFood\n };\n aux.push(restAndFood);\n\n const shoes: Antecedente = {\n antecedentePreguntaId: AntecedentesEnum.CALZ,\n antecedenteRespuesta: input.shoes\n };\n aux.push(shoes);\n \n // let aux: FiltratedBackground= {\n // background: input.background,\n // days: input.days,\n // trainingWeek: input.trainingWeek,\n // complement: input.complement,\n // conditionName: input.condition.name,\n // restAndFood: input.restAndFood,\n // shoes: input.shoes,\n // ruta: input.ruta,\n // pista: input.pista,\n // trail: input.trail,\n // ultra: input.ultra,\n // objetives: objetivesBoolean\n // }\n return aux;\n\n }\n\n filterUserData(data: any, filteredMode: FilteredMode, alumno_id: number) {\n let today = new Date().toISOString();\n let aux: FiltratedUser = {\n email: data.email,\n nombre: data.nombre,\n apellido: data.apellido,\n segundoApellido: data.segundoApellido ? data.segundoApellido: \"\",\n fechaNacimiento: data.fechaNacimiento,\n numeroDocumento: data.DNI,\n paisId: data.pais.id,\n residencia: data.residencia,\n prefijoCelular: data.prefijoCelular,\n numeroCelular: data.numeroCelular,\n prefijoEmergencia: data.prefijoEmergencia,\n numeroEmergencia: data.numeroEmergencia,\n peso: data.peso,\n altura: data.altura,\n entrenamientoTipoId: filteredMode.id,\n\n entrenamientoGrupoId: filteredMode.grupoId,\n entrenamientoNivelId: 1,\n entrenadorId: 1,\n activo: true,\n ultimaModificacion: today,\n ultimaModificacionPor: alumno_id,\n estado: \"P\",\n documentTipoId: data.documentoTipo.id,\n avatarUrl: null\n }\n return aux;\n }\n\n public filterDataMode(mode: any) {\n let filteredMode: FilteredMode;\n const ONLINE : number = 1;\n let dia;\n if(mode.days && mode.days.index) {\n dia = mode.days.index;\n } else {\n dia = null;\n }\n if(!mode.mode) {\n\n filteredMode = {\n entrenamientoTipo: \"PRE\",\n grupo: mode.trainingDays.entrenamientoGrupoDescripcion,\n id: 1, //required from database\n dia: dia,\n grupoId: mode.trainingDays.id\n }\n } else {\n filteredMode = {\n entrenamientoTipo: \"ONL\",\n grupo: null,\n id: 2, //required from database\n dia: dia,\n grupoId: 2, //required from database\n }\n }\n return filteredMode;\n }\n\n\n}\n","
\n \n \n \n
\n\n
\n \n \n \n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { Bank, RegisterUser, SelectedMode, User, Background, FilteredMode, AntecedentesMarcas, FiltratedUser, FiltratedObjetives, Objetive, FiltratedBackground, StudentFromAdmin, Antecedente, DatosBancario, EntrenamientoDia, RouteOptions, Distancias } from '../../../api/interfaces/register';\nimport { RegisterService } from '../../../api/services/register/register.service';\nimport { trainingDaysEnum, TrainingTypeEnum } from '../../../enums/training-type';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { ParseTimeService } from '../../../utils/parseTime/parse-time.service';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\nimport { FilterDataService } from 'src/app/services/filterData/filter-data.service';\nimport { HoursDayFixedService } from 'src/app/utils/hoursDayFixed/hours-day-fixed.service';\n\n@Component({\n selector: 'app-buttons',\n templateUrl: './buttons.component.html',\n styleUrls: ['./buttons.component.scss']\n})\nexport class ButtonsComponent implements OnInit {\n\n @Input('end') end?: boolean;\n @Input('disabled') disabled?: boolean;\n @Input('bank') bank?: DatosBancario;\n @Input('mode') mode?: SelectedMode;\n @Input('user') user?: User;\n @Input('background') background?: any;\n @Input('enablePrevious') enablePrevious?: boolean;\n\n routeOptions: Distancias[] = [];\n\n isMobile: boolean = false;\n ALUMNO_ID: number;\n kmsOption: Distancias;\n metersOption: Distancias;\n\n constructor(\n private router: Router,\n private registerService: RegisterService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n private parseTime: ParseTimeService,\n private filterData: FilterDataService,\n private hoursDayFixedService: HoursDayFixedService\n ) { \n \n }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.ALUMNO_ID = parseInt(localStorage.getItem('idAlumno'),10);\n this.getOptions();\n }\n\n save() {\n if(this.mode) {\n sessionStorage.setItem('mode', JSON.stringify(this.mode));\n this.sharedData.changeMessage(\"saveStep2\");\n }\n if(this.user) {\n sessionStorage.setItem('user', JSON.stringify(this.user));\n this.sharedData.changeMessage(\"saveStep1\");\n }\n if(this.background) {\n sessionStorage.setItem('background', JSON.stringify(this.background));\n this.sharedData.changeMessage(\"saveStep3\");\n }\n }\n\n onSubmit() {\n sessionStorage.setItem('bank', JSON.stringify(this.bank));\n this.sharedData.changeMessage(\"saveStep4\");\n let aux = sessionStorage.getItem('mode') as string;\n\n let background = JSON.parse(sessionStorage.getItem('background'))\n let antecedente: Antecedente[] = this.filterData.filterBackground(background);\n let filteredMode: FilteredMode = this.filterData.filterDataMode(JSON.parse(sessionStorage.getItem('mode')));\n let filteredUser: FiltratedUser = this.filterData.filterUserData(JSON.parse(sessionStorage.getItem('user')), filteredMode, this.ALUMNO_ID);\n let entrenamientoDia: EntrenamientoDia[] = this.createEntrenamientoDia(JSON.parse(sessionStorage.getItem('mode')));\n \n let objetives: Objetive[] = JSON.parse(sessionStorage.getItem('objetives'));\n let objetivo: FiltratedObjetives[] = [];\n if(objetives) {\n objetivo = this.filterData.filterObjetives(objetives);\n }\n\n let AntecedentesMarcas: AntecedentesMarcas[] = this.filterAchievementsDynamic(JSON.parse(sessionStorage.getItem('ruta')),'ruta',background.ruta);\n let filteredPista: AntecedentesMarcas[] = this.filterAchievementsDynamic(JSON.parse(sessionStorage.getItem('pista')),'pista',background.pista);\n let filteredTrail: AntecedentesMarcas[] = this.filterAchievementsDynamic(JSON.parse(sessionStorage.getItem('trail')),'trail',background.trail);\n let filteredUltra: AntecedentesMarcas[] = this.filterAchievementsDynamic(JSON.parse(sessionStorage.getItem('ultra')),'ultra',background.ultra);\n\n let antecedentesMarcas: any = [];\n if(AntecedentesMarcas && AntecedentesMarcas.length > 0) {\n AntecedentesMarcas.forEach(antecedente => {\n antecedentesMarcas.push(antecedente)\n });\n };\n if(filteredTrail && filteredTrail.length > 0) {\n filteredTrail.forEach(antecedente => {\n antecedentesMarcas.push(antecedente)\n });\n };\n if(filteredPista && filteredPista.length > 0) {\n filteredPista.forEach(antecedente => {\n antecedentesMarcas.push(antecedente)\n });\n };\n if(filteredUltra && filteredUltra.length > 0) {\n filteredUltra.forEach(antecedente => {\n antecedentesMarcas.push(antecedente)\n });\n };\n\n if(aux) {\n this.mode = JSON.parse(aux);\n }\n\n let alumnosDatoBancario: DatosBancario = {\n entidad: this.bank.entidad,\n claveBancaria: this.bank.claveBancaria\n }\n\n let alumnosDatosBancario: DatosBancario [] = [];\n alumnosDatosBancario.push(alumnosDatoBancario);\n\n let email = filteredUser.email;\n let nombre = filteredUser.nombre;\n let apellido = filteredUser.apellido;\n let segundoApellido = filteredUser.segundoApellido;\n let fechaNacimiento = filteredUser.fechaNacimiento;\n let numeroDocumento = filteredUser.numeroDocumento;\n let paisId = filteredUser.paisId;\n let residencia = filteredUser.residencia;\n let prefijoCelular = filteredUser.prefijoCelular;\n let numeroCelular = filteredUser.numeroCelular;\n let prefijoEmergencia = filteredUser.prefijoEmergencia;\n let numeroEmergencia = filteredUser.numeroEmergencia;\n let peso = filteredUser.peso;\n let altura = filteredUser.altura;\n let entrenamientoTipoId = filteredUser.entrenamientoTipoId;\n //fixme: cambio de nombres\n const grupo = JSON.parse(sessionStorage.getItem('mode'));\n let grupoId: number = -1;\n if(grupo.trainingDays) {\n grupoId = grupo.trainingDays.entrenamientoGrupoId;\n } else {\n grupoId = grupo.mode;\n }\n let entrenamientoGrupoId = grupoId;\n let entrenamientoNivelId = filteredUser.entrenamientoNivelId;\n let entrenadorId = filteredUser.entrenadorId;\n let activo = filteredUser.activo;\n let ultimaModificacion = filteredUser.ultimaModificacion;\n let ultimaModificacionPor = filteredUser.ultimaModificacionPor;\n let estado = filteredUser.estado;\n let documentoTipoId = filteredUser.documentTipoId;\n let avatarUrl = filteredUser.avatarUrl;\n\n let data = {\n objetivo,\n antecedentesMarcas,\n antecedente,\n email,\n nombre,\n apellido,\n segundoApellido,\n fechaNacimiento,\n numeroDocumento,\n paisId,\n residencia,\n prefijoCelular,\n numeroCelular,\n prefijoEmergencia,\n numeroEmergencia,\n peso,\n altura,\n entrenamientoTipoId,\n entrenamientoGrupoId,\n entrenamientoNivelId,\n entrenadorId,\n activo,\n ultimaModificacion,\n ultimaModificacionPor,\n estado,\n documentoTipoId,\n avatarUrl,\n alumnosDatosBancario,\n entrenamientoDia\n };\n\n this.registerService.registerUser(data, this.ALUMNO_ID)\n .subscribe(response => {\n this.router.navigate(['/thanks']);\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n createEntrenamientoDia(mode: any) : EntrenamientoDia[] {\n let entrenamientoDias: EntrenamientoDia[] = [];\n if(mode.days) {\n mode.days.forEach(day => {\n let aux: EntrenamientoDia = {\n entrenamientoDiaTipo: trainingDaysEnum.ADITIONAL,\n diaSemana: day.index\n };\n entrenamientoDias.push(aux);\n });\n }\n if(mode.trainingDays) {\n mode.trainingDays.entrenamientoGruposDias.forEach(day => {\n let aux: EntrenamientoDia = {\n entrenamientoDiaTipo: trainingDaysEnum.IN_GROUP,\n diaSemana: day.diaSemana\n };\n entrenamientoDias.push(aux);\n });\n }\n return entrenamientoDias;\n }\n\n getOptions() {\n this.registerService.getRouteOptions()\n .subscribe(response => {\n this.routeOptions = response;\n let km: number = response.findIndex(option => option.distanciaDescripcion == \"Kilómetros\");\n let meters = this.routeOptions.findIndex(option => option.distanciaDescripcion == \"Metros\");\n this.routeOptions.forEach(option => {\n option.selected = false;\n });\n this.kmsOption = this.routeOptions[km];\n this.metersOption = this.routeOptions[meters];\n },\n error => {\n console.error(error);\n });\n }\n\n filterAchievementsDynamic(input: any, mode: string, valid: boolean) {\n let arrayAux = Array();\n if(input && valid) {\n if(mode === \"pista\" || mode === \"ultra\" || mode === \"trail\") {\n input.forEach(element => {\n let id: number;\n let optionId: number;\n switch (mode) {\n case \"pista\":\n id = AntecedentesEnum.PISTA;\n // optionId = this.metersOption.id;\n break;\n case \"ultra\":\n id = AntecedentesEnum.ULTRA;\n // optionId = this.kmsOption.id;\n break;\n case \"trail\":\n id = AntecedentesEnum.TRAIL;\n // optionId = this.kmsOption.id;\n break;\n }\n let time: number [] = this.parseTime.parseTime(element.time);\n // bugfix date\n let fechaCorregida: string = this.hoursDayFixedService.getDateWithConverted(element.date);\n\n let aux: AntecedentesMarcas = {\n tiempoMarcaHoras: time[0],\n tiempoMarcaMinutos: time[1],\n tiempoMarcaSegundos: time[2],\n distanciaMarca: element.distance,\n fechaMarca: fechaCorregida,\n antecedentePreguntaDetalleId: id,\n // distanciaTipoId: optionId, \n id: null,\n };\n arrayAux.push(aux);\n });\n } else {\n input.forEach(element => {\n let time: number [] = this.parseTime.parseTime(element.time);\n \n // bugfix date\n let fechaCorregida: string = this.hoursDayFixedService.getDateWithConverted(element.date);\n let aux: AntecedentesMarcas = {\n distanciaTipoId: element.routeType.id,\n tiempoMarcaHoras: time[0],\n tiempoMarcaMinutos: time[1],\n tiempoMarcaSegundos: time[2],\n fechaMarca: fechaCorregida,\n antecedentePreguntaDetalleId: AntecedentesEnum.RUTA,\n id: null\n }\n arrayAux.push(aux);\n });\n } \n return arrayAux;\n\n } else {\n return null;\n }\n }\n\n\n }\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { map} from 'rxjs/operators';\n\n@Pipe({\n name: 'secure'\n})\nexport class SecurePipe implements PipeTransform {\n\n constructor(private http: HttpClient, private sanitizer: DomSanitizer) { }\n\n transform(url): Observable {\n return this.http\n .get(url, { responseType: 'blob' }).pipe(map(val => this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));\n \n }\n\n}","
\n\n

1/4 {{ 'forms.user.dataTitle' | translate}}

\n \n

{{ 'forms.user.dataTitle' | translate}}

\n\n
\n \n \n \n
\n\n \n {{ 'forms.user.name' | translate}}\n \n \n \n\n \n {{ 'forms.user.lastName' | translate}}\n \n \n \n\n \n {{ 'forms.user.secondLastname' | translate}}\n \n \n \n \n \n {{ 'forms.user.birthDate' | translate}}\n \n \n \n \n \n \n \n \n \n \n \n {{ 'forms.user.documentType' | translate}}\n \n {{documento.documento}}\n \n \n \n \n \n {{ userForm.value.documentoTipo && userForm.value.documentoTipo.documento? userForm.value.documentoTipo.documento : 'forms.user.DNI' | translate }}\n \n \n \n \n {{ 'forms.user.country' | translate}}\n \n {{country.pais}}\n \n \n \n \n \n {{ 'forms.user.residence' | translate}}\n \n \n \n
\n \n \n

{{ 'forms.user.contactTitle' | translate}}

\n \n {{ 'forms.user.prefix' | translate}}\n \n \n \n \n {{ 'forms.user.phone' | translate}}\n \n \n \n \n {{ 'forms.user.prefix' | translate}}\n \n \n \n \n {{ 'forms.user.emergencyPhone' | translate}}\n \n \n
\n \n \n

{{ 'forms.physiological.title' | translate}}

\n \n \n {{ 'forms.physiological.weight' | translate}}\n \n kg\n \n \n \n {{ 'forms.physiological.height' | translate}}\n \n cm\n \n
\n
\n\n
\n
\n \n
\n
\n\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { LoginData } from 'src/app/api/interfaces/login';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { StatusEnum } from 'src/app/enums/status';\nimport { environment } from '../../../../environments/environment';\nimport { Country, Documento, StudentFromAdmin, UserFromAdmin } from '../../../api/interfaces/register';\nimport { ImageService } from '../../../api/services/image/image.service';\nimport { LoginService } from '../../../api/services/login-service.service';\nimport { FormValidatorService } from '../../../services/formValidator/form-validator.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-step-one',\n templateUrl: './step-one.component.html',\n styleUrls: ['./step-one.component.scss']\n})\nexport class StepOneComponent implements OnInit {\n\n countrys: Country[];\n documentos: Documento[] = [];\n maxDate: Date = new Date();\n\n userForm = new FormGroup({\n nombre: new FormControl(),\n apellido: new FormControl(),\n segundoApellido: new FormControl(),\n fechaNacimiento: new FormControl(),\n DNI: new FormControl(\"\", [\n Validators.pattern(/^[a-zA-Z0-9]+$/),\n ]),\n documentoTipo: new FormControl(),\n pais: new FormControl(),\n residencia: new FormControl(),\n\n prefijoCelular: new FormControl(),\n numeroCelular: new FormControl(),\n prefijoEmergencia: new FormControl(),\n numeroEmergencia: new FormControl(),\n\n peso: new FormControl(\"\", [\n Validators.pattern(/^[a-zA-Z0-9]+$/),\n ]),\n altura: new FormControl(),\n email: new FormControl()\n });\n\n archivosForm = new FormGroup({\n archivosSeleccionados: new FormControl(),\n });\n\n archivos: string[] = [];\n userFromAdmin: UserFromAdmin;\n nombre: string = null;\n apellido: string = null;\n segundoApellido: string = null;\n userHasName: boolean = true;\n userHasLastName: boolean = true;\n userHasSecondLastName: boolean = true;\n userHasImage: boolean = false;\n isMobile: boolean = false;\n avatarUrl: string = \"\";\n\n constructor(\n private registerService: RegisterService,\n private sharedData: SharedDataService,\n private formValidatorService: FormValidatorService,\n private login: LoginService,\n private imageService: ImageService,\n private mobileDetectorService: MobileDetectorService,\n private loginApiService: LoginService,\n private router: Router,\n ) { }\n\n ngOnInit(): void {\n\n this.isMobile = this.mobileDetectorService.isMobile();\n // TODO: cuando haya file server restaurar esta llamada y adaptarla\n // this.getMyProfile();\n\n \n this.loginApiService.getUserData()\n .subscribe(response => {\n if(response.perfilAlumno.estado === StatusEnum.PENDING) {\n this.router.navigateByUrl(\"/thanks\");\n }\n this.asingDataToForm(response);\n },\n error => {\n console.error(error);\n });\n\n this.userForm.statusChanges\n .subscribe(val => {\n // if(val === \"VALID\") {\n this.formValidatorService.onFormValidation(val, \"step1\",\"user\")\n // }\n this.userForm.value.nombre = this.userForm.value.nombre ? this.userForm.value.nombre : this.nombre;\n this.userForm.value.apellido = this.userForm.value.apellido ? this.userForm.value.apellido : this.apellido;\n this.userForm.value.segundoApellido = this.userForm.value.segundoApellido ? this.userForm.value.segundoApellido : this.segundoApellido;\n if(this.userForm.value.nombre === null) {\n this.userHasName = false;\n } else {\n this.userHasName = true;\n }\n if(this.userForm.value.apellido === null) {\n this.userHasLastName = false;\n }else {\n this.userHasLastName = true;\n }\n });\n\n this.getCountry();\n this.getTiposDocumento();\n\n this.getAvatar();\n }\n\n async selectFiles(event) {\n try {\n await this.imageService.uploadFile(event);\n this.getAvatar();\n } catch {\n this.avatarUrl=\"\";\n this.userHasImage = false;\n }\n }\n\n async getAvatar() {\n const idUsuario: number = parseInt(localStorage.getItem('idUsuario'),10);\n this.avatarUrl = await this.imageService.getAvatarUrl(idUsuario);\n if(this.avatarUrl) {\n this.userHasImage = true;\n }\n }\n\n getCountry() {\n this.registerService.getCountry()\n .subscribe(response => {\n this.countrys = response;\n },\n error => {\n console.error(error);\n });\n }\n\n getTiposDocumento() {\n this.registerService.getTiposDocumento()\n .subscribe(response => {\n this.documentos = response;\n },\n error => {\n console.error(error);\n });\n }\n\n asingDataToForm(response: LoginData) {\n \n this.userForm.patchValue({email: response.perfilAlumno.email});\n if(response.perfilAlumno.nombre) {\n this.nombre = response.perfilAlumno.nombre;\n this.userForm.value.nombre = response.perfilAlumno.nombre;\n this.userHasName = true;\n } else {\n this.nombre = null;\n this.userHasLastName = false;\n }\n if(response.perfilAlumno.apellido) {\n this.userHasLastName = true;\n this.apellido = response.perfilAlumno.apellido;\n this.userForm.value.apellido = this.userForm.value.apellido ? this.userForm.value.apellido : this.apellido;\n } else {\n this.apellido = null;\n this.userHasLastName = false;\n }\n\n if(response.perfilAlumno.segundoApellido) {\n this.userHasSecondLastName = true;\n this.segundoApellido = response.perfilAlumno.segundoApellido;\n this.userForm.value.segundoApellido = this.userForm.value.segundoApellido ? this.userForm.value.segundoApellido : this.segundoApellido;\n } else {\n this.segundoApellido = null;\n this.userHasSecondLastName = false;\n }\n\n }\n\n}\n","

2/4 {{ 'registration.stepTwo.titleMobile' | translate}}

\n
\n DATOS PERSONALES\n
\n
\n

{{'registration.stepTwo.title'|translate}}

\n
\n
\n
\n
\n\n
\n
\n DATOS PERSONALES\n \n \n place{{'registration.stepTwo.cardOne.title'|translate}}\n \n

{{'registration.stepTwo.cardOne.text'|translate}}\n

\n\n \n {{'registration.stepTwo.cardOne.chooseDay'|translate}}\n \n \n {{option.grupoDescripcion}}\n \n \n \n \n
\n
\n\n \n \n public{{'registration.stepTwo.cardTwo.title'|translate}}\n \n

{{'registration.stepTwo.cardTwo.text'|translate}}

\n
\n
\n
\n
\n DATOS PERSONALES\n
\n
\n
\n

{{'registration.stepTwo.days'|translate}}

\n

{{'registration.stepTwo.days'|translate}}

\n
\n
\n

{{'registration.stepTwo.days2'|translate}}

\n

{{'registration.stepTwo.days2'|translate}}

\n
\n
\n\n
\n\n
\n \n \n
\n
\n
\n
\n
\n
\n\n
\n
\n \n
\n
\n\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { TrainingDays, Day, SelectedMode } from '../../../api/interfaces/register';\nimport { Validators, FormControl, FormGroup } from '@angular/forms';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { FormValidatorService } from '../../../services/formValidator/form-validator.service';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\nimport { TrainingTypeEnum } from '../../../enums/training-type';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\n\n\n@Component({\n selector: 'app-step-two',\n templateUrl: './step-two.component.html',\n styleUrls: ['./step-two.component.scss']\n})\nexport class StepTwoComponent implements OnInit {\n\n @ViewChild('matRef') matRef: MatSelect;\n cardClass1=\"card\";\n cardClass2=\"card\";\n trainingDays: TrainingDays[] = [];\n valid: boolean = false;\n isMobile: boolean = false;\n\n //movido domingo a index 1 por cambios en backend\n days: Day[] = [\n {name:\"Lunes\", selected: false, index: 2, disabled: false},\n {name:\"Martes\", selected: false, index: 3, disabled: false},\n {name:\"Miércoles\", selected: false, index: 4, disabled: false},\n {name:\"Jueves\", selected: false, index: 5, disabled: false},\n {name:\"Viernes\", selected: false, index: 6, disabled: false},\n {name:\"Sábado\", selected: false, index: 7, disabled: false},\n {name:\"Domingo\", selected: false, index: 1, disabled: false},\n ];\n\n presencial: boolean = false;\n selected: boolean = false;\n\n modeForm = new FormGroup({\n mode: new FormControl(),\n trainingDays: new FormControl(),\n days: new FormControl([]),\n });\n \n constructor(\n private registerService: RegisterService,\n private formValidatorService: FormValidatorService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n\n this.isMobile = this.mobileDetectorService.isMobile();\n this.modeForm.statusChanges\n .subscribe(val => this.formValidatorService.onFormValidation(val, \"step2\",\"mode\"));\n\n this.registerService.getTrainingDays()\n .subscribe(response => {\n this.trainingDays = response;\n // remove the first two elements from response because they are useless here\n this.trainingDays.splice(0,2);\n },\n error => {\n console.error(error);\n });\n\n this.sharedData.currentMessage.subscribe(message => {\n if(message===\"saveStep\") {\n sessionStorage.setItem('mode', JSON.stringify(this.modeForm.value));\n }\n });\n }\n\n enablePresencial() {\n this.presencial = true;\n this.selected = false;\n this.unselectAllDays();\n this.saveMode(0);\n }\n\n disablePresencial() {\n this.presencial = false;\n this.selected = true;\n this.matRef.options.forEach((data: MatOption) => data.deselect());\n this.unselectAllDays();\n this.saveMode(1);\n }\n\n unselectAllDays() {\n this.days.forEach(day => {\n day.selected = false;\n day.disabled = false;\n });\n this.modeForm.patchValue({days: []});\n }\n\n saveDay(day: Day) {\n const position: number = this.days.findIndex(element => element.index == day.index);\n this.days[position].selected = !day.selected;\n let selected: any = [];\n this.days.forEach(day => {\n if(day.selected) {\n selected.push(day);\n }\n });\n this.modeForm.value.days = selected;\n if(this.modeForm.value.mode != TrainingTypeEnum.ONLINE) {\n this.changeValid();\n } else {\n if(!this.days.every(day => day.selected)) {\n this.valid = true;\n }\n }\n this.changeValid();\n }\n\n saveTrainingDay(option: TrainingDays) {\n\n this.selected = true;\n this.unselectAllDays();\n this.days.forEach(day => {\n day.selected = false;\n });\n this.modeForm.value.trainingDays = option;\n this.modeForm.value.mode = option.grupoId;\n this.days.map(day => {\n day.disabled = false;\n })\n this.days.map(day => {\n option.entrenamientoGruposDias.forEach(dayWeek => {\n if(day.index == dayWeek.diaSemana) {\n day.disabled = true;\n }\n })\n });\n this.valid = true;\n }\n\n /**\n * is valid if user selected online and at least one day or is presencial\n */\n changeValid() {\n if( (this.modeForm.value.mode == 2 && this.modeForm.value.days.length > 0) || this.modeForm.value.trainingDays) {\n this.valid = true;\n } else {\n this.valid = false;\n }\n }\n\n saveMode(mode: number) {\n this.modeForm.value.mode = mode;\n if(mode === TrainingTypeEnum.ONLINE) {\n this.cardClass2 = \"cardSelected\";\n this.cardClass1 = \"card\";\n this.modeForm.value.mode = 2; //id 2 corresponde a online\n this.modeForm.value.trainingDays = null;\n this.valid = false;\n } else {\n this.cardClass1 = \"cardSelected\";\n this.cardClass2 = \"card\";\n this.changeValid();\n }\n }\n\n}\n","export enum Masks {\n TIME = \"00:m0:s0\",\n GROUP_HOUR = \"Hh:m0\"\n}\n","
\n\n \n {{ 'registration.stepThree.question8.choose' | translate}}\n \n \n {{option.distanciaDescripcion}}\n \n \n \n\n \n {{ 'registration.stepThree.question8.distanceKM' | translate}}\n {{ 'registration.stepThree.question8.distanceM' | translate}}\n \n \n\n
\n
\n
\n\n \n {{ 'registration.stepThree.question8.time' | translate}}\n \n {{'registration.stepThree.question8.timeHint' | translate}}\n \n \n \n {{ 'registration.stepThree.objetives.date' | translate}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n \n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Achievement, AchievementRoute, Distancias } from '../../../../api/interfaces/register';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { RegisterService } from '../../../../api/services/register/register.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { ParseTimeService } from 'src/app/utils/parseTime/parse-time.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { Masks } from 'src/app/enums/mask';\n@Component({\n selector: 'app-inputs-achievements',\n templateUrl: './inputs-achievements.component.html',\n styleUrls: ['./inputs-achievements.component.scss']\n})\nexport class InputsAchievementsComponent implements OnInit {\n\n selected: Date;\n maxDate: Date = new Date();\n\n routeOptions: Distancias[] = [];\n achievements: Achievement[] = [];\n\n activo: boolean = true;\n isRuta: boolean = false;\n isMobile: boolean = false;\n distanceMeters: boolean = false;\n distanceKMeters: boolean = false;\n isMetasObjetivos: boolean = false;\n\n achievementsRoute: AchievementRoute[] = [];\n\n achievementForm = new FormGroup({\n distance: new FormControl(),\n time: new FormControl([Validators.required], Validators.minLength(6)),\n date: new FormControl(),\n type: new FormControl(),\n distanciaTipoId: new FormControl(),\n id: new FormControl(),\n });\n\n\n @Input('i') i?: number;\n @Input('mode') mode?: string;\n @Input('disable') disable?: boolean;\n @Input ('achievement') achievement : any;\n\n @Output() removeAchievementEvent = new EventEmitter();\n @Output() saveAchievementEvent: EventEmitter = new EventEmitter();\n timeMask: string = \"\";\n\n constructor(\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private registerService: RegisterService,\n private mobileDetectorService: MobileDetectorService,\n private parseTimeService: ParseTimeService,\n private router: ActivatedRoute,\n private sharedData: SharedDataService,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.timeMask = Masks.TIME;\n this.isMobile = this.mobileDetectorService.isMobile();\n const url = this.router.snapshot.routeConfig.path;\n\n if(url == \"alumno/metas-objetivos\") {\n this.isMetasObjetivos = true;\n }\n\n this.sharedData.currentMessage.subscribe(message => {\n if(message ==\"editAchievements\") {\n this.achievementForm.controls['distance'].enable();\n this.achievementForm.controls['time'].enable();\n this.achievementForm.controls['date'].enable();\n this.achievementForm.controls['type'].enable();\n }\n if(message == \"remove\" && this.achievement.activo != undefined) {\n this.activo = this.achievement.activo;\n }\n });\n\n if(this.mode === \"ruta\") {\n this.isRuta = true;\n this.getOptions();\n } else {\n this.patchAchievement();\n }\n\n if(this.mode === \"ultra\" || this.mode == \"trail\") {\n this.distanceKMeters = true;\n }\n if(this.mode === \"pista\") {\n this.distanceMeters = true;\n }\n\n this.addAchievement();\n\n if(this.disable) {\n this.achievementForm.controls['distance'].disable();\n this.achievementForm.controls['time'].disable();\n this.achievementForm.controls['date'].disable();\n this.achievementForm.controls['type'].disable();\n }\n }\n\n\n removeAchievement() {\n if(this.achievement) {\n this.achievement.valid = true;\n if(!this.achievement.id) {\n this.achievement.activo = false;\n }\n }\n if(!this.disable) {\n this.removeAchievementEvent.emit(this.i);\n // this.activo = false;\n }\n }\n\n addAchievement() {\n this.achievementForm.value.i = this.i;\n // const { time } = this.achievementForm.getRawValue();\n // if(time) {\n // if(time && time.toString().length == 5) {\n // this.achievementForm.patchValue({time: this.achievementForm.value.time+':00'});\n // }\n // }\n if(this.achievementForm.value.date) {\n let auxDate = this.achievementForm.value.date;\n if(auxDate._d) {\n auxDate._d.setHours(12);\n }\n }\n this.saveAchievementEvent.emit(this.achievementForm.value);\n }\n\n getOptions() {\n this.registerService.getRouteOptions()\n .subscribe(response => {\n this.routeOptions = response;\n // let remover: number = this.routeOptions.findIndex(option => option.distanciaDescripcion == \"Kilómetros\");\n // this.routeOptions.splice(remover, 1);\n // remover = this.routeOptions.findIndex(option => option.distanciaDescripcion == \"Metros\");\n // this.routeOptions.splice(remover, 1);\n this.routeOptions.forEach(option => {\n option.selected = false;\n })\n this.patchRoute();\n },\n error => {\n console.error(error);\n });\n }\n\n patchRoute() {\n if(this.achievement) {\n let time: string = this.parseTimeService.parseToString(this.achievement.tiempoMarcaHoras, this.achievement.tiempoMarcaSegundos, this.achievement.tiempoMarcaMinutos);\n this.achievementForm.patchValue({date: this.achievement.fechaMarca});\n this.achievementForm.patchValue({time: time});\n this.achievementForm.patchValue({id: this.achievement.id});\n this.achievementForm.patchValue({distanciaTipoId: this.achievement.distanciaTipoId});\n let found: Distancias = this.routeOptions.find( option => {\n if(option.id == this.achievement.distanciaTipoId) {\n return option;\n }\n });\n if(found) {\n found.selected = true;\n }\n this.achievementForm.patchValue({type: found});\n this.activo = this.achievement.activo;\n } else {\n this.achievementForm.patchValue({id: null}); //requerido por backend\n }\n }\n\n patchAchievement() {\n if(this.achievement) {\n let time: string = this.parseTimeService.parseToString(this.achievement.tiempoMarcaHoras, this.achievement.tiempoMarcaSegundos, this.achievement.tiempoMarcaMinutos);\n this.achievementForm.patchValue({date: this.achievement.fechaMarca});\n this.achievementForm.patchValue({time: time});\n this.achievementForm.patchValue({id: this.achievement.id});\n this.achievementForm.patchValue({distanciaTipoId: this.achievement.distanciaTipoId});\n this.achievementForm.patchValue({distance: this.achievement.distanciaMarca});\n this.activo = this.achievement.activo;\n } else {\n this.achievementForm.patchValue({id: null}); //requerido por backend\n }\n }\n\n}","
\n
\n \n \n
\n
\n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n\n\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { AchievementRoute, Achievement, RouteOptions, AchievementDynamic } from '../../../../api/interfaces/register';\nimport { DateAdapter } from '@angular/material/core';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { FormValidatorService } from '../../../../services/formValidator/form-validator.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service'\nimport { ActivatedRoute } from '@angular/router';\nimport { FilterDataService } from 'src/app/services/filterData/filter-data.service';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\nimport { LocalAuxData } from 'src/app/api/interfaces/user';\n\n@Component({\n selector: 'app-achievements',\n templateUrl: './achievements.component.html',\n styleUrls: ['./achievements.component.scss']\n})\nexport class AchievementsComponent implements OnInit, OnDestroy {\n\n achievements: Achievement[] = [];\n achievementsRoute: AchievementRoute[] = [];\n routeOptions: RouteOptions[] = [];\n\n achievementsForm = new FormGroup({\n distance: new FormControl(),\n time: new FormControl(),\n date: new FormControl(),\n type: new FormControl()\n });\n\n achievementsRouteForm = new FormGroup({\n type: new FormControl(),\n id: new FormControl(),\n time: new FormControl(),\n date: new FormControl(),\n });\n\n flag: string = \"\";\n isRuta: boolean = false;\n isMobile: boolean = false;\n isRegistration: boolean = false;\n\n\n private sharedData$: Subscription;\n\n @Input('route') achievementsRouteForEdit?: AchievementDynamic[];\n @Input('achievement') achievementsForEdit?: AchievementDynamic[];\n @Input('edit') edit?: boolean;\n @Input('mode') mode?: string;\n @Input('disable') disable?: boolean;\n @Output() changeAchievementEvent: EventEmitter = new EventEmitter();\n @Output() emptyAchievementEvent = new EventEmitter();\n\n constructor(\n private _adapter: DateAdapter,\n private sharedData: SharedDataService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private formValidatorService: FormValidatorService,\n private mobileDetectorService: MobileDetectorService,\n private router: ActivatedRoute,\n private filterData: FilterDataService,\n public dialog: MatDialog,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n const auxDelete: string = \"localAuxData\" + this.mode;\n sessionStorage.removeItem(auxDelete);\n this.isMobile = this.mobileDetectorService.isMobile();\n const url = this.router.snapshot.routeConfig.path;\n if (url == \"registration\") {\n this.isRegistration = true;\n }\n if (this.mode === \"ruta\") {\n this.isRuta = true;\n }\n if (!this.edit) {\n this.addAchievement();\n }\n this._adapter.setLocale('es');\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n this.flag = message\n if (message === \"saveStep3\") {\n this.saveAchievement();\n }\n });\n }\n\n removeAchievement(i) {\n if (i >= 0) {\n if (!this.isRuta) {\n this.achievements.splice(i, 1);\n } else {\n this.achievementsRoute.splice(i, 1);\n }\n this.checkLength();\n }\n this.changeValidInput();\n }\n\n removeAchievementFromEdit(i: number) {\n\n // const dialogRef = this.dialog.open(GenericDialogComponent, {\n // data: {\n // title: \"¿Está seguro que desea eliminar la marca?\",\n // iconClass: \"bigBlueIcon\",\n // text: \"\",\n // icon: \"error_outlined\",\n // confirm: \"ELIMINAR\",\n // cancel: \"NO\"\n // }\n // });\n \n // dialogRef.afterClosed().subscribe(result => {\n // if(result) {\n // debugger\n if (i >= 0) {\n if (!this.isRuta) {\n if (this.achievementsForEdit[i].activo) {\n this.achievementsForEdit[i].activo = false;\n if(this.achievementsForEdit[i].id == null) {\n this.achievementsForEdit.splice(i, 1);\n }\n } else {\n this.achievementsForEdit.splice(i, 1);\n }\n } else {\n if (this.achievementsRouteForEdit[i].activo) {\n this.achievementsRouteForEdit[i].activo = false;\n } else {\n this.achievementsRouteForEdit.splice(i, 1);\n }\n }\n // this.checkLength();\n }\n this.sharedData.changeMessage(\"remove\");\n this.changeValidInputEdit();\n // }\n // });\n }\n\n checkLength() {\n if (this.mode === \"ruta\") {\n if (this.achievementsRoute.length == 0) {\n this.emptyAchievementEvent.emit(this.mode);\n }\n } else {\n if (this.achievements.length == 0) {\n this.emptyAchievementEvent.emit(this.mode);\n }\n }\n }\n \n addAchievement() {\n this.changeAchievement(false);\n // debugger\n if (!this.isRuta) {\n if(!this.isRegistration) {\n this.achievementsForEdit.push({fechaMarca: \"\", tiempoMarcaMinutos: 0, tiempoMarcaSegundos: 0, tiempoMarcaHoras: 0, antecedentePreguntaDetalleId: 0, activo: true, id: null, valid: false });\n this.changeValidInputEdit();\n } else {\n this.achievements.push({ distance: null, time: null, date: new Date(\"\"), valid: false, id: null });\n }\n } else {\n if(!this.isRegistration) {\n this.achievementsRouteForEdit.push({ fechaMarca: \"\", tiempoMarcaMinutos: 0, tiempoMarcaSegundos: 0, tiempoMarcaHoras: 0, antecedentePreguntaDetalleId: AntecedentesEnum.RUTA, activo: true, id: null, valid: false });\n this.changeValidInputEdit();\n } else {\n this.achievementsRoute.push({ routeType: { distanciaTipoId: null, distanciaDescripcion: null }, time: null, date: new Date(\"\"), valid: false, id: null });\n }\n }\n }\n\n saveAchievementRouteFromInputComponentFromEdit(achievement) {\n if(this.checkValidTime(achievement)) {\n if (achievement.type && achievement.type.id) {\n\n const aux: AchievementDynamic = this.filterData.completeAchievement(achievement, this.mode, true);\n \n //bugfix\n let index: number = -1;\n if(aux.id) {\n index = this.achievementsRouteForEdit.findIndex(ach => ach.id == aux.id);\n } else {\n index = achievement.i;\n }\n\n if (index != -1) {\n this.achievementsRouteForEdit[index].tiempoMarcaHoras = aux.tiempoMarcaHoras,\n this.achievementsRouteForEdit[index].tiempoMarcaMinutos = aux.tiempoMarcaMinutos,\n this.achievementsRouteForEdit[index].tiempoMarcaSegundos = aux.tiempoMarcaSegundos,\n this.achievementsRouteForEdit[index].distanciaTipoId = aux.distanciaTipoId,\n this.achievementsRouteForEdit[index].fechaMarca = aux.fechaMarca;\n // ticket 2457\n const tiempoNoNulo: boolean = aux.tiempoMarcaHoras + aux.tiempoMarcaMinutos + aux.tiempoMarcaSegundos > 0;\n if( tiempoNoNulo) {\n this.achievementsRouteForEdit[index].valid = true;\n } else {\n this.achievementsRouteForEdit[index].valid = false;\n }\n } else {\n // this.achievementsForEdit.push(aux);\n }\n }\n } else {\n\n }\n\n this.changeValidInputEdit();\n }\n\n saveAchievementFromInputComponentFromEdit(achievement) {\n if(this.checkValidTime(achievement)) {\n if( (achievement.distance || achievement.distance == '' || achievement.distance == null) ) {\n const aux: AchievementDynamic = this.filterData.completeAchievement(achievement, this.mode,true);\n\n //bugfix\n let index: number = -1;\n if(aux.id) {\n index = this.achievementsForEdit.findIndex(ach => ach.id == aux.id);\n } else {\n index = achievement.i;\n }\n\n if(index != -1) {\n this.achievementsForEdit[index].distanciaMarca = aux.distanciaMarca;\n this.achievementsForEdit[index].tiempoMarcaHoras = aux.tiempoMarcaHoras;\n this.achievementsForEdit[index].tiempoMarcaMinutos = aux.tiempoMarcaMinutos;\n this.achievementsForEdit[index].tiempoMarcaSegundos = aux.tiempoMarcaSegundos;\n this.achievementsForEdit[index].fechaMarca = aux.fechaMarca;\n this.achievementsForEdit[index].antecedentePreguntaDetalleId = aux.antecedentePreguntaDetalleId;\n // ticket 2389\n const distanciaValida: boolean = ( aux.distanciaMarca != null && aux.distanciaMarca != undefined && aux.distanciaMarca != \"\");\n // ticket 2457\n const tiempoNoNulo: boolean = (aux.tiempoMarcaHoras + aux.tiempoMarcaMinutos + aux.tiempoMarcaSegundos) > 0;\n if( tiempoNoNulo && distanciaValida ) {\n this.achievementsForEdit[index].valid = true;\n } else {\n this.achievementsForEdit[index].valid = false;\n }\n } else {\n // this.achievementsForEdit.push(aux);\n }\n }\n } else {\n this.setUnvalid(achievement);\n }\n this.changeValidInputEdit();\n }\n\n setUnvalid(achievement) {\n let index = this.achievementsForEdit.findIndex(ach => ach.id == achievement.id);\n this.achievementsForEdit[index].valid = false;\n }\n\n checkValidTime(achievement): boolean {\n let result: boolean = false;\n if(achievement.time) {\n if(achievement.time.length > 0 && achievement.time != \"00:00:00\") {\n result = true;\n } else {\n result = false;\n }\n }\n return result;\n }\n\n saveAchievementFromInputComponent(achievement) {\n // ticket 2457\n const timeValid: boolean = (achievement.time.length == 6 && achievement.time != '000000');\n if (achievement.distance != null) {\n let position = this.achievements[achievement.i];\n position.distance = achievement.distance;\n position.time = achievement.time;\n position.date = achievement.date ? achievement.date : \"\";\n if (!timeValid || achievement.distance === '' || achievement.distance === null ) {\n position.valid = false;\n } else {\n position.valid = true;\n }\n } else {\n let position = this.achievementsRoute[achievement.i];\n position.time = achievement.time;\n position.date = achievement.date ? achievement.date : \"\";\n position.routeType = achievement.type;\n if (!timeValid || achievement.type === '' || achievement.type === null) {\n position.valid = false;\n } else {\n position.valid = true;\n }\n }\n this.changeValidInput();\n }\n\n checkEntrys(): boolean {\n let contador: number = 0;\n let length: number = 0;\n let contadorRuta: number = 0;\n let lengthRuta: number = 0;\n\n if(this.achievementsForEdit) {\n if(this.achievementsForEdit.length > 0) {\n length = this.achievementsForEdit.length;\n this.achievementsForEdit.forEach(objetive => {\n if (objetive.valid) {\n contador++;\n }\n });\n }\n }\n\n if(this.achievementsRouteForEdit) {\n if(this.achievementsRouteForEdit.length > 0) {\n lengthRuta = this.achievementsRouteForEdit.length;\n this.achievementsRouteForEdit.forEach(objetive => {\n if (objetive.valid) {\n contadorRuta++;\n }\n });\n }\n }\n let valid: boolean = contador === length && contadorRuta == lengthRuta;\n const aux: LocalAuxData = {\n valid: valid,\n mode: this.mode\n };\n const nombre: string = \"localAuxData\" + this.mode;\n sessionStorage.setItem(nombre,JSON.stringify(aux));\n return (valid);\n }\n\n changeValidInputEdit() {\n\n if (this.checkEntrys()) {\n this.sharedData.changeMessage(\"achievementsValid\");\n } else {\n this.sharedData.changeMessage(\"achievementsInvalid\");\n }\n }\n\n changeValidInput() {\n\n // debugger\n\n let contador = 0;\n let length = 0;\n if (!this.isRuta) {\n length = this.achievements.length;\n this.achievements.forEach(objetive => {\n if (objetive.valid) {\n contador++;\n }\n });\n } else {\n length = this.achievementsRoute.length;\n this.achievementsRoute.forEach(objetive => {\n if (objetive.valid) {\n contador++;\n }\n });\n }\n if (contador === length) {\n this.changeAchievement(true);\n } else {\n this.changeAchievement(false);\n }\n }\n\n changeAchievement(valid: boolean) {\n let aux = {\n valid: valid,\n mode: this.mode\n };\n // debugger\n this.changeAchievementEvent.emit(aux);\n }\n\n saveAchievement() {\n let aux;\n if (!this.isRuta) {\n aux = this.achievements;\n } else {\n aux = this.achievementsRoute;\n }\n sessionStorage.setItem(this.mode, JSON.stringify(aux));\n }\n\n deleteAchievement() {\n sessionStorage.removeItem(this.mode);\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n}","
\n\n \n {{ 'registration.stepThree.objetives.name' | translate}}\n \n {{objetivesForm.value.name?.length || 0}} / 50\n \n \n \n {{ 'registration.stepThree.objetives.date' | translate}}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { FiltratedObjetives, Objetive } from '../../../../api/interfaces/register';\nimport {DateAdapter} from '@angular/material/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-inputs',\n templateUrl: './inputs.component.html',\n styleUrls: ['./inputs.component.scss']\n})\nexport class InputsComponent implements OnInit {\n\n isMobile: boolean = false;\n isRegistration: boolean = false;\n activo: boolean = true;\n minDate: Date = new Date();\n objetivesForm = new FormGroup({\n name: new FormControl(),\n date: new FormControl(),\n i: new FormControl(),\n id: new FormControl(),\n });\n\n selected: Date;\n\n @Output() removeObjetiveEvent = new EventEmitter();\n @Output() saveObjetiveEvent: EventEmitter = new EventEmitter();\n \n @Input('i') i?: number;\n @Input('disable') disable?: boolean;\n @Input('objetive') objetive? : FiltratedObjetives;\n\n constructor(\n private _adapter: DateAdapter,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService,\n private router: ActivatedRoute,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.objetivesForm.value.i = this.i;\n const url = this.router.snapshot.routeConfig.path;\n if(url == \"registration\") {\n this.isRegistration = true;\n }\n this.sharedData.currentMessage.subscribe(message => {\n if(message ==\"editObjetives\") {\n this.objetivesForm.controls['name'].enable();\n this.objetivesForm.controls['date'].enable();\n }\n });\n this.isMobile = this.mobileDetectorService.isMobile();\n this.addObjetive();\n this._adapter.setLocale('es');\n if(this.objetive) {\n this.objetivesForm.patchValue({name: this.objetive.objetivoDescripcion});\n this.objetivesForm.patchValue({date: this.objetive.fechaObjetivo});\n this.objetivesForm.patchValue({id: this.objetive.id});\n if(this.objetive.id_objetive) {\n this.i = this.objetive.id_objetive;\n }\n if(this.isRegistration) {\n this.i = this.objetive.id_objetive;\n }\n } else {\n this.objetivesForm.patchValue({id: null}); //requerido por backend\n }\n if(this.disable) {\n this.objetivesForm.controls['name'].disable();\n this.objetivesForm.controls['date'].disable();\n }\n\n this.sharedData.currentMessage.subscribe(message => {\n if(message == \"remove\" && this.objetive.activo != undefined) {\n this.activo = this.objetive.activo;\n }\n });\n\n\n }\n\n removeObjetive() {\n if(!this.disable) {\n this.removeObjetiveEvent.emit(this.i);\n }\n }\n\n addObjetive() {\n if(this.i && !this.isRegistration) {\n this.objetivesForm.value.i = this.i;\n }\n if(this.isRegistration || !this.objetivesForm.value.i) {\n this.objetivesForm.value.i = this.i;\n }\n if(this.objetivesForm.value.date) {\n let auxDate = this.objetivesForm.value.date;\n if(auxDate._d) {\n auxDate._d.setHours(12);\n }\n }\n this.saveObjetiveEvent.emit(this.objetivesForm.value);\n }\n\n}","
\n
\n \n \n
\n
\n\n
\n \n \n
\n \n","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FiltratedObjetives, Objetive } from '../../../../api/interfaces/register';\nimport { DateAdapter } from '@angular/material/core';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { FormValidatorService } from '../../../../services/formValidator/form-validator.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { FilterDataService } from 'src/app/services/filterData/filter-data.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Subscription } from 'rxjs';\n\n\n@Component({\n selector: 'app-objetives',\n templateUrl: './objetives.component.html',\n styleUrls: ['./objetives.component.scss']\n})\nexport class ObjetivesComponent implements OnInit, OnDestroy {\n\n objetivesForm = new FormGroup({\n name: new FormControl(),\n date: new FormControl(),\n });\n\n @Input('objetives') objetivesForEdit?: FiltratedObjetives[];\n @Input('disable') disable?: boolean;\n @Output() emptyEvent = new EventEmitter();\n @Output() saveObjetivesEditEvent = new EventEmitter();\n objetives: Objetive[] = [];\n flag: string = \"\";\n isMobile: boolean = false;\n isRegistration: boolean = false;\n\n private sharedData$: Subscription;\n\n constructor(\n private _adapter: DateAdapter,\n private sharedData: SharedDataService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private formValidatorService: FormValidatorService,\n private mobileDetectorService: MobileDetectorService,\n private filterData: FilterDataService,\n private router: ActivatedRoute,\n public dialog: MatDialog,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n const url = this.router.snapshot.routeConfig.path;\n if(url == \"registration\") {\n this.isRegistration = true;\n }\n if (!this.objetivesForEdit) {\n this.addObjetive();\n }\n this._adapter.setLocale('es');\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n this.flag = message\n if (message === \"saveStep3\") {\n this.saveObjetives();\n }\n if (message === \"saveObjetives\") {\n if(this.objetives.length > 0 ) {\n let aux2 = [...this.filterData.filterObjetives(this.objetives), ...this.objetivesForEdit];\n this.saveObjetivesEditEvent.emit(aux2);\n } else {\n this.saveObjetivesEditEvent.emit(this.objetivesForEdit);\n }\n this.objetives = [];\n }\n });\n }\n\n removeObjetive(i) {\n if (i >= 0) {\n this.objetives.splice(i, 1);\n this.checkLength();\n }\n this.changeValidInput();\n }\n\n addObjetive() {\n if(!this.isRegistration) {\n this.objetivesForEdit.push({ objetivoDescripcion: \"\", fechaObjetivo: \"\", activo: true, id: null, valid: false, i: null });\n } else {\n this.objetives.push({ name: \"\", date: new Date(\"\"), valid: false, activo: true, id: null });\n }\n }\n\n saveObjetiveFromInputComponent(objetive) {\n const nameInvalid: boolean = (objetive.name || objetive.name == '');\n const dateInvalid: boolean = (objetive.date || objetive.date == '');\n\n if(!this.isRegistration) {\n if(nameInvalid || dateInvalid) {\n const aux: FiltratedObjetives = this.filterData.filterObjetive(objetive);\n //bugfix\n let index: number = -1;\n if(aux.id) {\n index = this.objetivesForEdit.findIndex(objetive => objetive.id == aux.id);\n } else {\n index = objetive.i;\n }\n if(index != -1) {\n this.objetivesForEdit[index].fechaObjetivo = aux.fechaObjetivo;\n this.objetivesForEdit[index].objetivoDescripcion = aux.objetivoDescripcion;\n\n //date is no longer optional ticket 2177\n const descripcionValid: boolean = (aux.objetivoDescripcion != '' && aux.objetivoDescripcion != null);\n const fechaValid: boolean = (aux.fechaObjetivo != '' && aux.fechaObjetivo != null);\n\n if( descripcionValid && fechaValid) {\n this.objetivesForEdit[index].valid = true;\n } else {\n this.objetivesForEdit[index].valid = false;\n }\n } else {\n this.objetivesForEdit.push(aux);\n }\n }\n } else { \n //onboarding\n let position = this.objetives[objetive.i]\n \n position.name = objetive.name;\n position.date = objetive.date;\n //date is optional\n const nombreNotEmpty: boolean = (objetive.name && objetive.name !== '') ? true : false;\n const dateNotEmpty: boolean = objetive.date ? true : false;\n if ( nombreNotEmpty && dateNotEmpty ) {\n position.valid = true;\n } else {\n position.valid = false;\n }\n }\n this.changeValidInput();\n }\n\n changeValidInput() {\n let contador = 0;\n if(!this.isRegistration) {\n this.objetivesForEdit.forEach(objetive => {\n if (objetive.valid) {\n contador++;\n }\n });\n if (contador === this.objetivesForEdit.length) {\n this.sharedData.changeMessage(\"objetivesValid\");\n } else {\n this.sharedData.changeMessage(\"objetivesInvalid\");\n }\n } else {\n this.objetives.forEach(objetive => {\n if (objetive.valid) {\n contador++;\n }\n });\n if (contador === this.objetives.length) {\n this.formValidatorService.onDynamicValidation(\"VALID\", \"objetives\");\n } else {\n this.formValidatorService.onDynamicValidation(\"INVALID\", \"objetives\");\n }\n }\n }\n\n saveObjetives() {\n sessionStorage.setItem('objetives', JSON.stringify(this.objetives));\n }\n\n removeObjetiveFromEdit(i) {\n // const dialogRef = this.dialog.open(GenericDialogComponent, {\n // data: {\n // title: \"¿Está seguro que desea eliminar el objetivo?\",\n // iconClass: \"bigBlueIcon\",\n // text: \"\",\n // icon: \"error_outlined\",\n // confirm: \"ELIMINAR\",\n // cancel: \"NO\"\n // }\n // });\n // dialogRef.afterClosed().subscribe(result => {\n // if(result) {\n if(this.objetivesForEdit[i].activo) {\n this.objetivesForEdit[i].activo = false;\n if(this.objetivesForEdit[i].id == null) {\n this.objetivesForEdit.splice(i, 1);\n }\n } else {\n this.objetivesForEdit.splice(i, 1);\n }\n this.sharedData.changeMessage(\"remove\");\n this.changeValidInput();\n // }\n // });\n }\n\n checkLength() {\n if (this.objetives.length == 0) {\n this.emptyEvent.emit(true);\n }\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n}","
\n\n

3/4 {{ 'registration.stepThree.titleMobile' | translate}}

\n\n \n

{{ 'registration.stepThree.background' | translate}}

\n

{{ 'registration.stepThree.question1.question' | translate}}

\n \n \n {{background}}\n \n \n\n \n\n

{{ 'registration.stepThree.question2' | translate}}

\n \n \n {{day}}\n \n \n\n \n\n

{{ 'registration.stepThree.question3' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.trainingWeek?.length || 0}} / 250\n \n\n \n\n

{{ 'registration.stepThree.question4' | translate}}

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

{{ 'registration.stepThree.question5' | translate}}

\n \n\n {{'registration.stepThree.genericAnswers.yes' | translate}}\n \n \n {{ 'registration.stepThree.workName' | translate}}\n \n {{backgroundForm.value.complement?.length || 0}} / 250\n \n {{'registration.stepThree.genericAnswers.no' | translate}}\n \n\n \n\n

{{ 'registration.stepThree.question6' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.restAndFood?.length || 0}} / 250\n \n\n \n\n

{{ 'registration.stepThree.question7' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.shoes?.length || 0}} / 50\n \n\n

{{ 'registration.stepThree.question8.title' | translate}}

\n

{{ 'registration.stepThree.question8.ruta' | translate}}

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

{{ 'registration.stepThree.question8.pista' | translate}}

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

{{ 'registration.stepThree.question8.trail' | translate}}

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

{{ 'registration.stepThree.question8.ultra' | translate}}

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

{{ 'registration.stepThree.objetives.title' | translate}}

\n

{{ 'registration.stepThree.objetives.question' | translate}}

\n \n {{'registration.stepThree.objetives.answer1' | translate}}\n
\n \n \n
\n \n {{'registration.stepThree.objetives.answer2' | translate}}\n \n
\n\n
\n
\n\n
\n
\n \n
\n
\n\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Country, Condition } from '../../../api/interfaces/register';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\nimport { FormValidatorService } from '../../../services/formValidator/form-validator.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\n\n\n@Component({\n selector: 'app-step-three',\n templateUrl: './step-three.component.html',\n styleUrls: ['./step-three.component.scss']\n})\nexport class StepThreeComponent implements OnInit {\n\n countrys: Country[];\n maxDate: Date = new Date();\n\n backgrounds: string[] = [];\n days: number[] = [0,1,2,3,4,5,6,7];\n complements: string[] = [];\n objetives: string[] = [];\n firstTime: boolean = false;\n showObjetives: boolean = false;\n showComplements: boolean = false;\n\n objetivesEmpty: boolean = false;\n objetivesValid: boolean = false;\n\n rutaValid: boolean = true;\n pistaValid: boolean = true;\n trailValid: boolean = true;\n ultraValid: boolean = true;\n\n isMobile: boolean = false;\n\n conditions: Condition[] = [\n {name:\"Muy malo\", selected: false, index: 0},\n {name:\"Malo\", selected: false, index: 1},\n {name:\"Regular\", selected: false, index: 2},\n {name:\"Bueno\", selected: false, index: 3},\n {name:\"Muy bueno\", selected: false, index: 4}\n ];\n\n backgroundForm = new FormGroup({\n background: new FormControl(),\n days: new FormControl(),\n trainingWeek: new FormControl(),\n condition: new FormControl(),\n complement: new FormControl(),\n restAndFood: new FormControl(),\n shoes: new FormControl(),\n \n ruta: new FormControl(),\n pista: new FormControl(),\n trail: new FormControl(),\n ultra: new FormControl(),\n\n objetives: new FormControl(),\n });\n\n\n constructor(\n private translate: TranslateService,\n private cdr: ChangeDetectorRef,\n private formValidatorService: FormValidatorService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n\n this.isMobile = this.mobileDetectorService.isMobile();\n this.cdr.detectChanges();\n this.getAnswersQuestionOne();\n this.getAnswersQuestionFive();\n this.getObjetives();\n\n this.sharedData.currentMessage.subscribe(message => {\n if(message===\"saveStep\") {\n sessionStorage.setItem('background', JSON.stringify(this.backgroundForm.value));\n }\n if(message===\"objetivesvalid\") {\n this.objetivesValid = true;\n }\n\n if(message===\"objetivesinvalid\") {\n this.objetivesValid = false;\n }\n\n });\n\n this.backgroundForm.statusChanges\n .subscribe(val => {\n this.formValidatorService.onFormValidation(val, \"step3\",\"background\");\n if(!this.backgroundForm.value.ruta) {\n sessionStorage.removeItem('ruta');\n }\n if(!this.backgroundForm.value.pista) {\n sessionStorage.removeItem('pista');\n }\n if(!this.backgroundForm.value.trail) {\n sessionStorage.removeItem('trail');\n }\n if(!this.backgroundForm.value.ultra) {\n sessionStorage.removeItem('ultra');\n }\n });\n }\n\n getAnswersQuestionOne() {\n this.translate\n .get([\n 'registration.stepThree.question1.answer1',\n 'registration.stepThree.question1.answer2',\n 'registration.stepThree.question1.answer3',\n 'registration.stepThree.question1.answer4',\n ])\n .subscribe(translations => {\n this.backgrounds.push(translations['registration.stepThree.question1.answer1']);\n this.backgrounds.push(translations['registration.stepThree.question1.answer2']);\n this.backgrounds.push(translations['registration.stepThree.question1.answer3']);\n this.backgrounds.push(translations['registration.stepThree.question1.answer4']);\n });\n }\n\n getAnswersQuestionFive() {\n this.translate\n .get([\n 'registration.stepThree.genericAnswers.yes',\n 'registration.stepThree.genericAnswers.no',\n ])\n .subscribe(translations => {\n this.complements.push(translations['registration.stepThree.genericAnswers.yes']);\n this.complements.push(translations['registration.stepThree.genericAnswers.no']);\n });\n }\n\n getObjetives() {\n this.translate\n .get([\n 'registration.stepThree.objetives.answer1',\n 'registration.stepThree.objetives.answer2',\n ])\n .subscribe(translations => {\n this.objetives.push(translations['registration.stepThree.objetives.answer1']);\n this.objetives.push(translations['registration.stepThree.objetives.answer2']);\n });\n }\n\n unselectAllConditions() {\n this.conditions.forEach(day => {\n day.selected = false;\n });\n }\n\n saveCondition(condition: Condition) {\n this.unselectAllConditions();\n this.backgroundForm.value.condition = condition;\n this.conditions[condition.index].selected = true;\n }\n\n changeObjetives(mode: boolean) {\n this.showObjetives = mode;\n this.objetivesEmpty = false;\n if(!this.showObjetives) {\n if(!mode) {\n this.objetivesValid = true;\n sessionStorage.removeItem('objetives');\n } else {\n this.objetivesValid = false;\n }\n }\n }\n\n changeAchievement(aux) {\n if(aux.mode === \"ruta\") {\n this.rutaValid = aux.valid\n }\n\n if(aux.mode === \"pista\") {\n this.pistaValid = aux.valid\n }\n\n if(aux.mode === \"ultra\") {\n this.ultraValid = aux.valid\n }\n\n if(aux.mode === \"trail\") {\n this.trailValid = aux.valid\n }\n }\n\n changeFromCheckbox(mode: string) {\n /*\n Habilita el modo cuando se clickea en el checkbox para desactivarlo, previamente activado. \n Si el resto del step es vá}lido puede continuar\n */\n if(mode == 'ruta' && !this.rutaValid) {\n this.rutaValid = true;\n }\n\n if(mode == 'pista' && !this.pistaValid) {\n this.pistaValid = true;\n }\n\n if(mode == 'trail' && !this.trailValid) {\n this.trailValid = true;\n }\n\n if(mode == 'ultra' && !this.ultraValid) {\n this.ultraValid = true;\n }\n }\n\n changeComplements(mode: boolean) {\n this.showComplements = mode;\n if(!mode) {\n this.backgroundForm.patchValue({complement: \"No\"});\n } else {\n this.backgroundForm.patchValue({complement: \"\"});\n }\n }\n\n emptyObjetives(mode: boolean) {\n this.objetivesEmpty = true;\n }\n\n emptyAchievement(mode: string) {\n if(mode === \"ruta\") {\n this.backgroundForm.patchValue({ruta: false});\n }\n if(mode === \"pista\") {\n this.backgroundForm.patchValue({pista: false});\n }\n if(mode === \"trail\") {\n this.backgroundForm.patchValue({trail: false});\n }\n if(mode === \"ultra\") {\n this.backgroundForm.patchValue({ultra: false});\n }\n }\n\n}","
\n

4/4 {{ 'registration.stepFour.title' | translate}}

\n\n

{{'registration.stepFour.title'|translate}}

\n \n {{ 'forms.bank.entityInput' | translate}}\n \n \n\n \n {{ 'forms.bank.codeInput' | translate}}\n \n {{ 'forms.bank.hint1' | translate}} \n {{bankForm.value.claveBancaria?.length || 0}} / 24\n \n
\n
\n\n
\n
\n \n
\n
\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { Validators, FormControl, FormGroup } from '@angular/forms';\nimport { Bank } from '../../../api/interfaces/register';\nimport { FormValidatorService } from '../../../services/formValidator/form-validator.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-step-four',\n templateUrl: './step-four.component.html',\n styleUrls: ['./step-four.component.scss']\n})\nexport class StepFourComponent implements OnInit {\n\n isMobile: boolean = false;\n bankForm = new FormGroup({\n entidad: new FormControl(),\n claveBancaria: new FormControl(\"\", [\n Validators.pattern(/^[a-zA-Z0-9]+$/),\n Validators.minLength(24),\n Validators.maxLength(24),\n ]),\n });\n constructor(\n private formValidatorService: FormValidatorService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.bankForm.statusChanges\n .subscribe(val => this.formValidatorService.onFormValidation(val, \"step4\",\"bank\"));\n\n this.sharedData.currentMessage.subscribe(message => {\n if(message===\"saveStep\") {\n sessionStorage.setItem('bank', JSON.stringify(this.bankForm.value));\n }\n });\n }\n}\n","\n
\n \n \n \n

\n {{ 'registration.steps.one' | translate}}\n

\n
\n

{{'registration.header' | translate}}

\n \n
\n \n \n

\n {{ 'registration.steps.two' | translate}}\n

\n
\n

{{'registration.header' | translate}}

\n \n
\n \n \n

\n {{ 'registration.steps.three' | translate}}\n

\n
\n

{{'registration.header' | translate}}

\n \n
\n \n \n

\n {{ 'registration.steps.four' | translate}}\n

\n
\n

{{'registration.header' | translate}}

\n \n
\n
\n
","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\n\nimport { StepperComponent } from '../stepper/stepper.component';\nimport { ThanksComponent } from '../thanks/thanks.component';\n\nconst routes: Routes = [\n {\n path: 'registration',\n component: StepperComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n {\n path: 'thanks',\n component: ThanksComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class RegistrationRoutingModule { }","import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\nimport { MatStepper } from '@angular/material/stepper'\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { Subscription } from 'rxjs';\n\n\n\n@Component({\n selector: 'app-stepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss']\n})\nexport class StepperComponent implements OnInit, OnDestroy {\n\n isLinear: boolean = true;\n isMobile: boolean = false;\n firstFormGroup: FormGroup;\n secondFormGroup: FormGroup;\n thirdFormGroup: FormGroup;\n fourthFormGroup: FormGroup;\n\n @ViewChild('stepper') private myStepper: MatStepper;\n\n private sharedData$: Subscription;\n\n constructor(\n private _formBuilder: FormBuilder,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n let foundMode = sessionStorage.getItem('mode');\n this.sharedData.changeMessage(\"\");\n if(foundMode) {\n sessionStorage.clear();\n window.location.reload();\n }\n this.isMobile = this.mobileDetectorService.isMobile();\n this.firstFormGroup = this._formBuilder.group({\n firstCtrl: ['',Validators.required]\n });\n this.secondFormGroup = this._formBuilder.group({\n secondCtrl: ['', Validators.required]\n });\n this.thirdFormGroup = this._formBuilder.group({\n thirdCtrl: ['', Validators.required]\n });\n this.fourthFormGroup = this._formBuilder.group({\n fourthCtrl: ['', Validators.required]\n });\n\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n\n if(message===\"saveStep1\" ) {\n this.saveStep('firstCtrl');\n }\n if(message===\"step1valid\") {\n this.removeValidators('firstCtrl');\n }\n if(message===\"step1invalid\") {\n this.addValidators('firstCtrl');\n }\n\n\n if(message===\"saveStep2\") {\n this.saveStep('secondCtrl');\n }\n if(message===\"step2valid\") {\n this.removeValidators('secondCtrl');\n }\n if(message===\"step2invalid\") {\n this.addValidators('secondCtrl');\n }\n\n\n if(message===\"saveStep3\") {\n this.saveStep('thirdCtrl');\n }\n if(message===\"step3valid\") {\n this.removeValidators('thirdCtrl');\n }\n if(message===\"step3invalid\") {\n this.addValidators('thirdCtrl');\n }\n\n\n if(message===\"saveStep4\") {\n this.saveStep('fourthCtrl');\n }\n if(message===\"step4valid\") {\n this.removeValidators('fourthCtrl');\n }\n if(message===\"step4invalid\") {\n this.addValidators('fourthCtrl');\n }\n \n });\n }\n\n saveStep(form: string) {\n this.removeValidators(form);\n this.myStepper.next();\n }\n \n addValidators(form: string) {\n\n if(form==='firstCtrl') {\n this.firstFormGroup.get(form).addValidators(Validators.required);\n this.firstFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='secondCtrl') {\n this.secondFormGroup.get(form).addValidators(Validators.required);\n this.secondFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='thirdCtrl') {\n this.thirdFormGroup.get(form).addValidators(Validators.required);\n this.thirdFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='fourthCtrl') {\n this.fourthFormGroup.get(form).addValidators(Validators.required);\n this.fourthFormGroup.get(form).updateValueAndValidity();\n }\n }\n\n removeValidators(form: string) {\n\n if(form==='firstCtrl') {\n this.firstFormGroup.get(form).clearValidators();\n this.firstFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='secondCtrl') {\n this.secondFormGroup.get(form).clearValidators();\n this.secondFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='thirdCtrl') {\n this.thirdFormGroup.get(form).clearValidators();\n this.thirdFormGroup.get(form).updateValueAndValidity();\n }\n if(form==='fourthCtrl') {\n this.fourthFormGroup.get(form).clearValidators();\n this.fourthFormGroup.get(form).updateValueAndValidity();\n }\n }\n\n onSelectionChange() {\n this.sharedData.changeMessage(\"saveStep\");\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}","import { Component, OnInit } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-thanks',\n templateUrl: './thanks.component.html',\n styleUrls: ['./thanks.component.scss']\n})\nexport class ThanksComponent implements OnInit {\n\n constructor(\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n ) { \n this.matIconRegistry.addSvgIcon(\n `check`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../assets/check.svg')\n );\n }\n\n ngOnInit(): void {\n }\n\n}\n","\n \n
\n
\n
\n \n

{{'registration.thanks.title'|translate}}

\n

{{'registration.thanks.subtitle'|translate}}

\n
\n
\n
\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { DatoPorEtiqueta, GetFeedback, NoHeredable, Plan, PlanDatosDia, PlanEditarDia, PostFeedback } from '../../interfaces/plans';\nimport { CambioDiaEntrenamiento } from '../../interfaces/user';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlansService {\n\n private url = environment.apiUrl + '/';\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n multipartOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n })\n };\n constructor(private http: HttpClient) { }\n\n postPlan(plan: Plan): Observable {\n return this.http.post(this.url + 'api/planes', plan, this.httpOptionsJson);\n }\n\n getPlans(): Observable {\n return this.http.get(this.url + `api/planes/listado`, this.httpOptions);\n }\n\n getPlanId(planId: number): Observable {\n return this.http.get(this.url + `api/planes?planId=${planId}`, this.httpOptions);\n }\n\n editDetelePlan(planId: number, plan: Plan): Observable {\n return this.http.put(this.url + `api/planes?planId=${planId}`, plan, this.httpOptionsJson);\n }\n\n postFeedback(feedback: PostFeedback): Observable {\n return this.http.post(this.url + `api/planes/feedback`, feedback, this.httpOptionsJson);\n }\n\n getFeedback(fecha: string, alumnoId: number ): Observable {\n return this.http.get(this.url + `api/planes/feedback?alumnoId=${alumnoId}&fecha=${fecha}`, this.httpOptionsJson);\n }\n\n getPlanDiaData(fecha: string, alumnoId: number ): Observable {\n return this.http.get(this.url + `api/planes/dia?alumnoId=${alumnoId}&fecha=${fecha}`, this.httpOptionsJson);\n }\n\n getPlanSemanaData(semana: string, alumnoId: number, titulo: string): Observable {\n return this.http.get(this.url + `api/planes/alumno?alumno_id=${alumnoId}&semana=${semana}&titulo=${titulo}`, this.httpOptionsJson);\n }\n\n deletePlanDia(alumnoId: number, fecha: string): Observable {\n return this.http.delete(this.url + `api/planes/adicional?alumnoId=${alumnoId}&fecha=${fecha}`, this.httpOptionsJson);\n }\n\n editDia(alumnoId: number, fecha: string, titulo: string, actividad: string): Observable {\n //objeto requerido por backend\n let datos = [\n {\n planDetalleTitulo: \"\",\n actividad: \"\"\n }\n ];\n // ticket 2563\n const actividadCodificada: string = encodeURIComponent(actividad);\n return this.http.post(this.url + `api/planes/adicional?alumnoId=${alumnoId}&fecha=${fecha}&titulo=${titulo}&actividad=${actividadCodificada}`, datos, this.httpOptionsJson)\n }\n\n\n editarDiaCompleto(alumnoId: number, fecha: string, datos: PlanEditarDia[]): Observable {\n const titulo: string = \"\";\n const actividad: string = \"\";\n return this.http.post(this.url + `api/planes/adicional?alumnoId=${alumnoId}&fecha=${fecha}&titulo=${titulo}&actividad=${actividad}`, datos, this.httpOptionsJson)\n }\n\n getDatosPorEtiqueta(etiqueta: string): Observable {\n return this.http.get(this.url + `api/parametros?etiqueta=${etiqueta}`, this.httpOptionsJson);\n }\n\n heredar(semanaOrigen: string): Observable {\n return this.http.get(this.url + `api/planes/heredar?semanaOrigen=${semanaOrigen}`, {\n withCredentials: true,\n responseType: 'text'\n });\n }\n\n habilitar(semanaOrigen: string): Observable {\n return this.http.get(this.url + `api/planes/habilitar?semanaOrigen=${semanaOrigen}`, {\n withCredentials: true,\n responseType: 'text'\n });\n }\n \n controlPlanes(semanaOrigen: string): Observable {\n return this.http.get(this.url + `api/alumnos/controlplanes?semana=${semanaOrigen}`, this.httpOptionsJson);\n }\n\n \n changeDays(alumnoId: number, diasFinal: CambioDiaEntrenamiento[]): Observable {\n return this.http.put(this.url + `api/alumnos/cambiodias?alumnoId=${alumnoId}`, diasFinal, this.httpOptionsJson);\n }\n\n}\n","
\n
\n \n
\n
\n

{{'planes.process.loading.title' | translate}}

\n

{{'planes.process.loading.titleHabilitar' | translate}}

\n

{{'planes.process.loading.text' | translate}}

\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport {MatDialog, MAT_DIALOG_DATA} from '@angular/material/dialog'\n\n@Component({\n selector: 'app-loading',\n templateUrl: './loading.component.html',\n styleUrls: ['./loading.component.scss']\n})\nexport class LoadingComponent implements OnInit {\n\n @Input('showText') showText: boolean;\n @Input('habilitar') habilitar?: boolean;\n class: string = 'dialogContainerLoading';\n constructor() { }\n\n ngOnInit(): void {\n if(!this.showText) {\n this.class = \"loadingTransparent\";\n }\n }\n\n}\n","
\n
\n {{data.icon}}\n
\n
\n\n \n

{{'planes.process.dialogHabilitar.title' | translate}}

\n
\n \n {{'planes.process.dialogHabilitar.text' | translate}}\n
\n {{data.diaSemanaActual}}\n {{'planes.process.dialogHabilitar.text2' | translate}}\n {{data.dia}}\n
\n
\n
\n
\n\n \n

{{'planes.process.dialog.title' | translate}}

\n
\n

\n {{'planes.process.dialog.text' | translate}} \n {{data.dia}}\n

\n
\n
\n \n
\n error_outline\n

{{'planes.process.dialog.preLength' | translate}} {{data.pending.length}} {{'planes.process.dialog.postLength' | translate}}

\n
\n
\n
\n

{{alumno.nombre}} {{alumno.apellido}}

\n
\n
\n
\n
\n \n \n \n
\n\n
\n \n\n \n
\n\n
\n\n\n\n
\n
\n check_circle\n check_circle\n
\n
\n

\n \n {{'planes.process.done.title' | translate}}\n \n \n {{'planes.process.done.titleHabilitar' | translate}}\n \n

\n
\n

\n {{'planes.process.done.text' | translate}} \n {{data.dia}}\n

\n
\n\n
\n \n {{'planes.process.done.textHabilitar' | translate}} \n
\n {{data.diaSemanaActual}}\n {{'planes.process.done.textHabilitar2' | translate}} \n {{data.dia}}\n
\n
\n
\n
\n \n
\n
\n\n
\n
\n warning\n
\n
\n

\n \n {{'planes.process.error.titleNoHabilitar' | translate}}\n \n \n {{'planes.process.error.titleHabilitar' | translate}}\n \n

\n
\n

\n {{'planes.process.error.text' | translate}} \n

\n
\n\n
\n
\n \n
\n
","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'\nimport { PlansService } from 'src/app/api/services/plans/plans.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\n\n\n/**\n * Display a warning text and request user's confirmation before process plans.\n * After user's confirmation display a spinner and waiting text.\n */\n@Component({\n selector: 'app-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss']\n})\nexport class DialogComponent implements OnInit {\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private sharedData: SharedDataService,\n private plansService: PlansService,\n private snack: SnackbarService\n ) { }\n\n loading: boolean = false;\n done: boolean = false;\n error: boolean = false;\n\n ngOnInit(): void {\n }\n\n onSubmit() {\n this.loading = true;\n if(!this.data.habilitar) {\n this.plansService.habilitar(this.data.diaSemanaActual).subscribe(response => {\n this.sharedData.changeMessage(\"reloadStudentData\");\n this.loading = false;\n this.done = true;\n \n },\n error => {\n console.error(error);\n this.error = true;\n this.loading = false;\n })\n } else {\n this.plansService.heredar(this.data.diaSemanaActual).subscribe(response => {\n this.sharedData.changeMessage(\"reloadStudentData\");\n this.loading = false;\n this.done = true;\n \n },\n error => {\n console.error(error);\n this.loading = false;\n this.error = true;\n })\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { UserFromAdmin, StudentFromAdmin, InsertUser } from '../../../api/interfaces/register';\nimport { Filters, HistorialSuspension, MotivoBaja, SuspenderAlumno, SuspensionAlumno, SuspensionMotivo, UserComplete } from '../../../api/interfaces/user';\nimport { Role } from '../../../enums/role';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StudentService {\n\n private url = environment.apiUrl + '/';\n // response.setHeader(\"Access-Control-Allow-Headers\", \"Origin, X-Requested-With, Content-Type, Accept\");\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n constructor(\n private http: HttpClient,\n // private tokenDecoderService: TokenDecoderService,\n private snack: SnackbarService\n ) { }\n\n setRead(alumnoId: number, leido: boolean): Observable {\n let body = {\n algo: \"algo\"\n }\n return this.http.put(this.url + `api/alumnos/leido?alumno_id=${alumnoId}&leido=${leido}`, body, this.httpOptionsJson);\n }\n\n createStudentPost(studentComplete: StudentFromAdmin): Observable {\n return this.http.post(this.url + 'api/alumnos/', studentComplete, this.httpOptionsJson);\n }\n\n getStudents(page: number, role: number, maxPerPage: number): Observable {\n return this.http.get(this.url + `api/usuarios/?rol=${role}/MisCasos?pagina=${page}&maximoPorPagina=${maxPerPage}`, this.httpOptions);\n }\n\n getStudentsWithPaginator(cantidadPorPagina:number, pagina: number, filters: Filters): Observable {\n return this.http.get(this.url + `api/alumnos/listado?ape=${filters.nombreApellido}&est=${filters.estado}&nid=${filters.entrenamientoNivelId}&gid=${filters.entrenamientoTipoId}&eid=${filters.entrenadorId}&pag=${pagina}®=${cantidadPorPagina}&leido=${filters.leido}`, this.httpOptions);\n }\n\n getAmountsApi(rol: number): Observable {\n return this.http.get(this.url + `api/usuarios/estadisticas/?rol=${rol}`,this.httpOptions);\n }\n\n getSuspensionesMotivos(): Observable {\n return this.http.get(this.url + `api/suspensionesmotivos`,this.httpOptions);\n }\n\n getSuspensionesAlumno(alumnoId: number): Observable {\n return this.http.get(this.url + `api/alumnos/suspensiones?alumnoId=${alumnoId}`,this.httpOptions);\n }\n\n postSuspenderAlumno(alumnoId: number, suspender: SuspenderAlumno): Observable {\n return this.http.post(this.url + `api/alumnos/suspensiones?alumnoId=${alumnoId}&mail=true`, suspender, this.httpOptionsJson);\n }\n\n deleteSuspension(suspensionId: number): Observable {\n return this.http.delete(this.url + `api/alumnos/suspensiones?suspensionId=${suspensionId}`, this.httpOptionsJson);\n }\n\n cambiarEstado(usuarioId: number, estado: string, motivoId: number): Observable {\n let body = {\n algo: \"algo\"\n }\n return this.http.put(this.url + `api/usuarios/desactivar?usuarioId=${usuarioId}&estado=${estado}&motivoId=${motivoId}`, body, this.httpOptions);\n }\n\n getHistorialSuspensionesAlumno(alumnoId: number): Observable {\n return this.http.get(this.url + `api/alumnos/estadoslog?alumnoId=${alumnoId}`,this.httpOptions);\n }\n\n getMotivosBaja(): Observable {\n return this.http.get(this.url + `api/bajamotivos`,this.httpOptions);\n }\n\n getIdAlumno(usuarioId: number): Observable {\n return this.http.get(this.url + `api/usuarios/alumnoid?usuarioId=${usuarioId}`,this.httpOptions);\n }\n\n resendEmail(email: string, id: number): Observable {\n return this.http.get(this.url + `api/alumnos/reenvioalta?alumno_id=${id}&email=${email}`, this.httpOptionsJson);\n }\n\n getAmounts(rol: number): Promise {\n return new Promise((resolve,reject) => {\n this.getAmountsApi(rol).subscribe(async response => {\n resolve(response);\n },\n error => {\n console.error(error);\n reject();\n })\n })\n }\n\n public insertUser(newUser: InsertUser): Observable {\n return this.http.post(this.url + 'api/usuarios', newUser, this.httpOptionsJson);\n }\n\n public completeUserData(student: StudentFromAdmin, userId: number): InsertUser {\n let today = new Date().toISOString();\n let newUser: InsertUser = {\n usuario: student.email,\n descripcionUsuario: student.nombre + \" \" + student.apellido,\n rolId: Role.STUDENT,\n activo: 1,\n creado: today,\n creadoPor: userId,\n ultimaModificacion: today,\n ultimaModificacionPor: userId\n }\n return newUser;\n }\n\n public completeStudentData(student: StudentFromAdmin, usuarioId: number ): StudentFromAdmin{\n \n let today = new Date().toISOString();\n let studentComplete: StudentFromAdmin = {\n email : student.email,\n nombre : student.nombre,\n apellido : student.apellido,\n segundoApellido : student.segundoApellido,\n estado: \"C\",\n fechaNacimiento: \"1900-01-01T00:00:00Z\",\n numeroDocumento: null,\n paisId: null,\n residencia: null,\n prefijoCelular: null,\n numeroCelular: null,\n prefijoEmergencia: null,\n numeroEmergencia: null,\n peso: null,\n altura: null,\n avatarUrl: null,\n entrenamientoTipoId: 1,\n entrenamientoGrupoId: 1,\n entrenamientoNivelId: 1,\n entrenadorId: 1,\n activo: true,\n creado: today,\n creadoPor: 1,\n ultimaModificacion: today,\n ultimaModificacionPor: 1,\n usuarioId: usuarioId,\n };\n return studentComplete; \n }\n}","
\n
\n

{{ 'admin.createStudent.title' | translate }}

\n \n
\n \n
\n \n {{ 'forms.user.emailInput' | translate}}\n \n \n \n \n {{ 'forms.user.name' | translate}}\n \n \n \n \n {{ 'forms.user.lastName' | translate}}\n \n \n \n \n {{ 'forms.user.secondLastname' | translate}}\n \n \n \n
\n
\n \n \n
\n\n\n\n
\n
\n \n

{{ 'admin.createStudent.success.title' | translate }}

\n
\n

{{ 'admin.createStudent.success.text' | translate }}

\n \n
","import { Component, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { StudentService } from '../../../../services/admin/student/student.service';\nimport { UserFromAdmin, StudentFromAdmin, InsertUser } from '../../../../api/interfaces/register';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\n\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-create-student',\n templateUrl: './create-student.component.html',\n styleUrls: ['./create-student.component.scss']\n})\nexport class CreateStudentComponent implements OnInit {\n\n createStudent: boolean = true;\n success: boolean = false;\n waiting: boolean = false;\n studentForm = new FormGroup({\n email: new FormControl(),\n nombre: new FormControl(),\n apellido: new FormControl(),\n segundoApellido: new FormControl()\n });\n\n \n\n constructor(\n public dialog: MatDialog,\n private service: StudentService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n ) { \n this.matIconRegistry.addSvgIcon(\n `done`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/done.svg')\n );\n }\n\n ngOnInit(): void {\n }\n\n onSubmit() {\n this.waiting = true;\n const userId: number = 1;\n let aux1: InsertUser = this.service.completeUserData(this.studentForm.value, userId);\n\n this.service.insertUser(aux1).subscribe(usuarioId => {\n let aux2 = this.service.completeStudentData(this.studentForm.value, usuarioId);\n this.service.createStudentPost(aux2).subscribe(response => {\n this.success = true;\n this.createStudent = !this.createStudent;\n this.sharedData.changeMessage(\"reloadStudentData\");\n this.waiting = false;\n },\n error => {\n if (error.status === 409) {\n this.snack.snackTranslate('snacks.error.duplicatedMail');\n } else {\n this.snack.snackTranslate('snacks.error.generic');\n }\n console.error(error);\n this.success = false;\n this.waiting = false;\n });\n },\n error => {\n console.error(error);\n //ticket 2106, close dialog if session is expired\n if(error.status === 401 ) {\n this.dialog.closeAll();\n this.snack.snackTranslate('snacks.logout.expired');\n } else {\n this.snack.openSnackBar(error.error.message);\n }\n this.success = false;\n this.waiting = false;\n });\n }\n\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { ChangeUserStatus, UserComplete } from '../../interfaces/user';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService {\n\n private url = environment.apiUrl + '/';\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n constructor(private http: HttpClient) { }\n\n getMyProfile(): Observable{\n return this.http.get(this.url + 'api/user/myProfile', this.httpOptions);\n }\n\n getProfileUserId(id: number): Observable {\n return this.http.get(this.url + `api/alumnos/?alumno_id=${id}`, this.httpOptions);\n }\n\n changeUserStatus(changeUserStatus: ChangeUserStatus, id: number): Observable {\n return this.http.put(this.url + `api/alumnos/activar/${id}`,changeUserStatus,this.httpOptionsJson);\n }\n\n}\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'dateName'\n})\nexport class DateNamePipe implements PipeTransform {\n \n constructor(private translateService: TranslateService) {\n }\n \n public transform(value: any, pattern: string): any {\n const datePipe = new DatePipe(this.translateService.currentLang);\n let aux: string = datePipe.transform(value, pattern);\n aux = aux.charAt(0).toUpperCase() + aux.slice(1);\n return aux;\n }\n}\n","
\n
\n
\n \n \n
\n

{{data.title | dateName: 'EEEE d - MMMM'}}

\n

{{fullName}}

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

{{fullName}}

\n
\n

\"{{datos.feedbackRespuesta ? datos.feedbackRespuesta : 'planes.feedback.emptyFeedbackDialog' | translate }}\"

\n
\n
\n \n
\n \n
\n \n {{'forms.placeholder' | translate}} \n {{'messages.placeholder' | translate}} \n \n \n {{'planes.feedback.popupFooter' | translate}}\n \n
\n
\n
","import { Component, OnInit, Inject } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MAT_DIALOG_DATA} from '@angular/material/dialog'\nimport { GetFeedback } from '../../../api/interfaces/plans';\nimport { ImageService } from '../../../api/services/image/image.service';\nimport { PlansService } from '../../../api/services/plans/plans.service';\nimport { UserService } from '../../../api/services/user/user.service';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { WeekService } from '../../../utils/week/week.service';\nimport { Canal, EnviarMensaje } from '../../../api/interfaces/messages';\nimport { MessagesService } from '../../../api/services/messages/messages.service';\n\n/**\n * Display either student's feedback and allows the admin to reply or admin can send a new message without feedback.\n * Use messagesService to get canal's data and send the reply\n * \n * @param data - allow to replay feedback\n * ```\n * data = {\n title: this.day.fecha,\n alumnoId: this.alumnoId\n }\n * ```\n * @param alumnoId - number, to send new message\n */\n@Component({\n selector: 'app-feedback-dialog',\n templateUrl: './feedback-dialog.component.html',\n styleUrls: ['./feedback-dialog.component.scss']\n})\nexport class FeedbackDialogComponent implements OnInit {\n\n canal: Canal;\n\n datos: GetFeedback;\n\n hasImage: boolean = false;\n\n fullName: string = \"\";\n avatarUrl: string = \"\";\n titleClass: string = \"\";\n\n fakeReply: string = null;\n\n feedbackForm = new FormGroup({\n respuesta: new FormControl(),\n });\n\n isFeedback: boolean = true;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private weekService: WeekService,\n private plansService: PlansService,\n private userService: UserService,\n private snack: SnackbarService,\n private imageService: ImageService,\n private messagesService: MessagesService,\n private dialogRef: MatDialog,\n \n ) { }\n\n ngOnInit(): void {\n if(this.data.title) {\n this.getFeedback();\n this.getUserProfileData();\n } else {\n this.getUserProfileData();\n this.isFeedback = false;\n this.titleClass = \"popupTitle\";\n }\n }\n \n\n getUserProfileData() {\n this.userService.getProfileUserId(this.data.alumnoId).subscribe(response => {\n this.getAvatar(response.usuarioId)\n this.fullName = response.nombre + \" \" + response.apellido;\n this.getCanal(response.usuarioId);\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n async getAvatar(usuarioId: number) {\n this.avatarUrl = await this.imageService.getAvatarUrl(usuarioId);\n }\n\n getCanal(usuarioId: number) {\n this.messagesService.getCanalUsuarioId(usuarioId).subscribe(response => {\n this.canal = response.content[0];\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n /**\n * get student's feedback and change titleClass\n */\n getFeedback() {\n const fecha = new Date(this.data.title);\n this.plansService.getFeedback(this.weekService.convertDate(this.data.title), this.data.alumnoId).subscribe(response => {\n this.datos = response;\n switch (response.feedbackOpcion) {\n case 1: \n this.titleClass = \"popupTitleMal\";\n break;\n case 2: \n this.titleClass = \"popupTitleRegular\"; \n break;\n case 3:\n this.titleClass = \"popupTitleBien\";\n this.fakeReply = this.snack.getTranslate('planes.feedback.bien');\n break;\n case 4: \n this.titleClass = \"popupTitleFenomenal\";\n this.fakeReply = this.snack.getTranslate('planes.feedback.fenomenal');\n break;\n }\n },\n error => {\n console.error(error);\n });\n }\n\n onSubmit() {\n if(this.feedbackForm.value.respuesta.trim().length > 0 ) {\n let enviarMensaje: EnviarMensaje = {\n mensaje: this.feedbackForm.value.respuesta,\n }\n \n if(this.isFeedback) {\n const metadata: string = `${this.datos.fechaFeedback}¬${this.datos.feedbackRespuesta ? this.datos.feedbackRespuesta : this.fakeReply}`;\n enviarMensaje.mensajeTipo = \"FEEDBACK\";\n enviarMensaje.metadata = metadata\n }\n \n this.messagesService.postMensaje(this.canal.id, enviarMensaje).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.messages.feedbackReply');\n this.dialogRef.closeAll();\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n }\n\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { environment } from '../../../../environments/environment';\nimport { Level, PersonalTrainer, TrainingType } from '../../interfaces/user';\nimport { Status } from '../../interfaces/register';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TrainingService {\n\n private url = environment.apiUrl + '/';\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true,\n };\n // levels: Level[] = [];\n // trainers: PersonalTrainer[] = [];\n // modes: TrainingType[] = [];\n constructor(private http: HttpClient) { }\n\n getLevels(): Observable { \n return this.http.get(this.url + 'api/niveles', this.httpOptions); \n }\n\n getStatus(): Observable { \n return this.http.get(this.url + 'api/estados', this.httpOptions); \n }\n\n getTrainers(): Observable {\n return this.http.get(this.url + 'api/entrenadores', this.httpOptions);\n }\n\n getTrainingType(): Observable {\n return this.http.get(this.url + 'get/modes', this.httpOptions);\n }\n \n patchLevel(id_level: number): Observable {\n return this.http.patch(this.url + 'patch/level',id_level, this.httpOptions);\n }\n\n patchTrainer(user_id): Observable {\n return this.http.patch(this.url + 'patch/trainer',user_id, this.httpOptions);\n }\n\n patchStudentTrainingData(data): Observable {\n return this.http.patch(this.url + 'patch/trainingData',data, this.httpOptions);\n }\n\n}\n","
\n
\n\n \n {{'admin.studentsTable.filters.searchStudent' | translate}} \n \n\n \n \n \n\n \n\n
\n\n

{{'admin.studentsTable.filters.filters' | translate}}

\n\n\n\n \n {{'admin.studentsTable.filters.status' | translate}}\n \n {{status.estadoDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.type' | translate}}\n \n \n {{option.grupoDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.level' | translate}}\n \n \n {{level.entrenamientoNivelDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.trainer' | translate}}\n \n \n {{trainer.entrenadorNombre }}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.leido' | translate}}\n \n \n {{opcion.nombre}}\n \n \n\n \n \n\n \n \n
\n\n
\n\n \n \n {{'admin.studentsTable.filters.searchStudent' | translate}} \n \n \n \n\n \n\n \n\n \n \n \n \n \n filter_list\n \n \n {{'admin.studentsTable.filters.filters' | translate}}\n \n 0\" class=\"contador\">{{contador}}\n \n\n \n\n \n {{'admin.studentsTable.filters.status' | translate}}\n \n {{status.estadoDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.type' | translate}}\n \n \n {{option.grupoDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.level' | translate}}\n \n \n {{level.entrenamientoNivelDescripcion}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.trainer' | translate}}\n \n \n {{trainer.entrenadorNombre }}\n \n \n\n \n \n\n \n {{'admin.studentsTable.filters.leido' | translate}}\n \n \n {{opcion.nombre}}\n \n \n\n \n \n\n \n\n \n \n\n \n \n
\n\n
","import { Component, OnInit, ViewChild, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { Filters, FiltersStorage, Level, PersonalTrainer, UserComplete } from '../../../../api/interfaces/user';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport {MatAccordion} from '@angular/material/expansion';\nimport { TrainingService } from 'src/app/api/services/training/training.service';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { Status, TrainingDays } from 'src/app/api/interfaces/register';\n\n\n@Component({\n selector: 'app-filters',\n templateUrl: './filters.component.html',\n styleUrls: ['./filters.component.scss']\n})\nexport class FiltersComponent implements OnInit {\n\n @ViewChild(MatAccordion) accordion: MatAccordion;\n @ViewChild('trainerSelect') trainerSelect;\n @Output() filtersChangeEvent = new EventEmitter();\n @Output() filtersFromSessionStorageEvent = new EventEmitter();\n\n isMobile: boolean = false;\n trainer: PersonalTrainer = null;\n contador: number;\n\n filtersForm = new FormGroup({\n nombreApellido: new FormControl(),\n status: new FormControl(),\n type: new FormControl(),\n level: new FormControl(),\n trainer: new FormControl(),\n leido: new FormControl()\n });\n\n allStatus: Status[] = [];\n types: any;\n levels: any;\n trainers: any;\n modes: any;\n trainingDays: TrainingDays[] = [];\n disabled: boolean = true;\n statusClass = \"inputsFilter\";\n\n leidoOpciones = [\n {\n nombre: \"Gestionado\",\n value: true\n },\n {\n nombre: \"Sin gestionar\",\n value: false\n }\n ];\n\n constructor(\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n private trainingService: TrainingService,\n private registerService: RegisterService,\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n //se anidaron las llamadas a api para tener todos los datos cargados al momento de leer los filtros desde localstorage\n this.loadLevels();\n this.cdr.detectChanges();\n // this.setFiltersFromSessionlStorage();\n this.filtersForm.statusChanges\n .subscribe(val => {\n const { nombreApellido, status, type, level, trainer, leido } = this.filtersForm.getRawValue();\n this.contador = 0;\n if(status) {\n this.contador++;\n this.statusClass = \"inputsFilterWithContent\"\n } else {\n this.statusClass = \"inputsFilter\"\n }\n if(type) {\n this.contador++;\n }\n if(level) {\n this.contador++;\n }\n if(trainer) {\n this.contador++;\n }\n if(leido != null) {\n this.contador++;\n }\n if(this.contador > 0) {\n this.disabled = false;\n } else {\n this.disabled = true;\n }\n });\n }\n\n setFiltersFromSessionlStorage() {\n const filters: FiltersStorage = JSON.parse(sessionStorage.getItem('filters'));\n const fromDay: boolean = JSON.parse(sessionStorage.getItem('fromDay'));\n if(filters) {\n this.filtersForm.patchValue({nombreApellido: filters.nombreApellido});\n this.filtersForm.patchValue({trainer: filters.trainer});\n this.filtersForm.patchValue({status: filters.status});\n this.filtersForm.patchValue({leido: filters.leido});\n this.filtersForm.patchValue({level: filters.level});\n this.filtersForm.patchValue({type: filters.type});\n this.filtersFromSessionStorageEvent.emit(this.filtersForm.value);\n }\n if(!filters && fromDay) {\n this.filtersFromSessionStorageEvent.emit(this.filtersForm.value);\n }\n }\n\n loadStatus() {\n this.trainingService.getStatus().subscribe(response => {\n this.allStatus = response;\n this.setFiltersFromSessionlStorage();\n },\n error => {\n console.error(error);\n })\n\n }\n\n loadLevels() {\n this.trainingService.getLevels().subscribe( response=> {\n this.levels = response;\n this.loadTrainers();\n },\n error => {\n console.error(error);\n });\n }\n\n loadTrainers() {\n this.trainingService.getTrainers().subscribe( response=> {\n this.trainers = response;\n this.getTrainingDays();\n this.loadStatus();\n },\n error => {\n console.error(error);\n });\n }\n\n getTrainingDays () {\n this.registerService.getTrainingDays()\n .subscribe(response => {\n this.trainingDays = response;\n },\n error => {\n console.error(error);\n });\n }\n\n onSubmit() {\n this.filtersChangeEvent.emit(this.filtersForm.value);\n }\n\n clearAll() {\n this.filtersForm.patchValue({status: null});\n this.filtersForm.patchValue({type: null});\n this.filtersForm.patchValue({level: null});\n this.filtersForm.patchValue({trainer: null});\n this.filtersForm.patchValue({leido: null});\n this.filtersChangeEvent.emit(this.filtersForm.value);\n }\n\n clear(target: string) {\n switch (target) {\n case 'nombreApellido':\n this.filtersForm.patchValue({nombreApellido: null});\n break;\n \n \n case 'status':\n this.filtersForm.patchValue({status: null});\n break;\n \n case 'type':\n this.filtersForm.patchValue({type: null});\n break;\n \n case 'level':\n this.filtersForm.patchValue({level: null});\n break;\n \n case 'trainer':\n this.filtersForm.patchValue({trainer: null});\n break;\n\n case 'leido':\n this.filtersForm.patchValue({leido: null});\n break;\n }\n this.filtersChangeEvent.emit(this.filtersForm.value);\n }\n\n // saveTrainingDay(option: TrainingDays) {\n // this.filtersForm.patchValue({type: option});\n // }\n\n}\n\n","
\n
\n \n \n

{{page}}

\n \n
\n
","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { UserComplete } from '../../../../api/interfaces/user';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'app-paginator',\n templateUrl: './paginator.component.html',\n styleUrls: ['./paginator.component.scss']\n})\nexport class PaginatorComponent implements OnInit, OnDestroy {\n\n paginateLeft: boolean = false;\n // paginateRight: boolean = true;\n page: number = 1;\n totalPages: number;\n loadEnded: boolean = false;\n\n @Input ('rol') rol: number;\n @Input ('amount') amount: number;\n @Input('totalPerPage') totalPerPage: number;\n @Input('paginateRight') paginateRight: boolean;\n @Output() changePageEvent = new EventEmitter();\n\n private sharedData$: Subscription;\n\n constructor(\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.setPaginate();\n this.totalPages = Math.floor(this.amount / this.totalPerPage);\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message === \"resetPage\") {\n this.page = 1;\n this.totalPages = Math.floor(this.amount / this.totalPerPage);\n this.setPaginate();\n }\n });\n }\n\n paginators(destino: string) {\n if(destino == \"-\" && this.page > 1) {\n this.page--;\n }\n if(destino == \"+\" && this.page < this.totalPages) {\n this.page++;\n }\n this.setPaginate();\n this.loadUsers();\n }\n\n setPaginate() {\n\n // ticket 2476\n const page: number = parseInt(sessionStorage.getItem('page'),10);\n if(page && !isNaN(page)) {\n this.page = page;\n //correcion de numero de pagina = 0\n this.page++;\n sessionStorage.removeItem('page');\n }\n\n if(this.page > 1) {\n this.paginateLeft = true;\n } else {\n this.paginateLeft = false;\n }\n if(this.page == this.totalPages) {\n this.paginateRight = false;\n } else {\n this.paginateRight = true;\n }\n }\n\n loadUsers() {\n this.loadEnded = false;\n this.page--;\n this.changePageEvent.emit(this.page);\n this.page++;\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","\n
\n error_outline\n
\n {{'status.P' | translate}}\n
\n
\n\n
\n check_circle_outline\n
\n {{'status.A' | translate}}\n
\n
\n\n
\n no_accounts\n

\n {{'status.S' | translate}}\n

\n
\n\n
\n note_alt_outline\n
\n {{'status.C' | translate}}\n
\n
\n\n
\n
\n {{'status.I' | translate}}\n
\n
\n\n\n \n
\n update\n
\n {{status}}\n
\n
\n\n
\n check_circle_outline\n
\n {{status}}\n
\n
\n\n
\n\n\n\n\n
\n check_circle_outline\n
\n \n
\n note_alt_outline\n
\n \n
\n error_outline\n
\n \n
\n check_circle_outline\n
\n\n
\n no_accounts\n
\n
","import { Component, OnInit, Input } from '@angular/core';\nimport { StatusEnum } from '../../../enums/status';\n\n@Component({\n selector: 'app-status',\n templateUrl: './status.component.html',\n styleUrls: ['./status.component.scss']\n})\nexport class StatusComponent implements OnInit {\n\n StatusEnum = StatusEnum;\n @Input('status') status: string;\n @Input('showComplete') showComplete: boolean;\n constructor(\n ) { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n place\n public\n

{{training.grupo}}

\n\n {{'admin.studentsTable.header.undefined' | translate}} \n
\n\n
\n\n \n \n
\n \n
\n
\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { TrainingDays } from '../../../api/interfaces/register';\nimport { EntrenamientoModelBroken, Training } from '../../../api/interfaces/user';\nimport { TrainingTypeEnum } from '../../../enums/training-type';\n\n@Component({\n selector: 'app-training-type',\n templateUrl: './training-type.component.html',\n styleUrls: ['./training-type.component.scss']\n})\nexport class TrainingTypeComponent implements OnInit {\n\n @Input('training') training: EntrenamientoModelBroken;\n @Input('edit') edit: boolean;\n @Input('groups') groups?: TrainingDays[];\n @Input('isAdmin') isAdmin?: boolean;\n @Input('userForm') userForm?: any;\n @Input('status') status: string;\n\n @Output() saveGroupEvent = new EventEmitter();\n\n TrainingTypeEnum = TrainingTypeEnum;\n constructor() { }\n\n ngOnInit(): void {\n }\n\n saveGroup(group: TrainingDays) {\n this.saveGroupEvent.emit(group);\n }\n\n}\n","
\n
\n

\n {{userForm.value.level.entrenamientoNivelDescripcion ? userForm.value.level.entrenamientoNivelDescripcion : userForm.value.level}} \n

\n

\n {{level}} \n

\n
\n {{'admin.studentsTable.header.undefined' |\n translate}}\n
\n\n
\n \n \n
\n \n
\n
\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Level } from '../../../api/interfaces/user';\n\n@Component({\n selector: 'app-level',\n templateUrl: './level.component.html',\n styleUrls: ['./level.component.scss']\n})\nexport class LevelComponent implements OnInit {\n\n @Input('level') level: string;\n @Input('edit') edit: boolean;\n @Input('levels') levels?: Level[];\n @Input('isAdmin') isAdmin?: boolean;\n @Input('userForm') userForm?: any;\n @Input('status') status?: string;\n\n @Output() saveLevelEvent = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n saveLevel(level: Level) {\n this.saveLevelEvent.emit(level);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'reduceText'\n})\nexport class ReduceTextPipe implements PipeTransform {\n\n transform(value: string, ...args: number[]): string {\n let aux = value;\n if(value.length > args[0]) {\n aux = value.substring(0, args[0]) + \"...\";\n }\n return aux;\n }\n\n}\n","
\n\n

{{fullName}}

\n\n
\n

{{'planes.objetivesPopup.objetives' | translate}}

\n
\n

{{ objetive.fechaObjetivo? (objetive.fechaObjetivo | date: 'dd/MM/yyyy') : ('planes.objetivesPopup.noDate' | translate)}}

\n

{{objetive.objetivoDescripcion}}

\n
\n
\n

{{'planes.objetivesPopup.emptyObjetives' | translate}}

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

{{'planes.objetivesPopup.achievements' | translate}}

\n

0\" color=\"primary\">\n {{'registration.stepThree.question8.ruta' | translate}}\n

\n \n \n
\n

{{marca.distanciaMarca ? marca.distanciaMarca : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.time}}

\n

{{ marca.fechaMarca? (marca.fechaMarca | date: 'dd/MM/yyyy') : ('planes.objetivesPopup.noDate' | translate)}}

\n
\n\n

0\" color=\"primary\">\n {{'registration.stepThree.question8.pista' | translate}}\n

\n \n \n
\n

{{marca.distanciaMarca ? (marca.distanciaMarca | reduceText:28) : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.distanciaMarca ? marca.distanciaMarca : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.time}}

\n

{{ marca.fechaMarca? (marca.fechaMarca | date: 'dd/MM/yyyy') : ('planes.objetivesPopup.noDate' | translate)}}

\n
\n\n

0\" color=\"primary\">\n {{'registration.stepThree.question8.trail' | translate}}\n

\n \n
\n

{{marca.distanciaMarca ? (marca.distanciaMarca | reduceText:28) : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.distanciaMarca ? marca.distanciaMarca : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.time}}

\n

{{ marca.fechaMarca? (marca.fechaMarca | date: 'dd/MM/yyyy') : ('planes.objetivesPopup.noDate' | translate)}}

\n
\n \n

0\" color=\"primary\">\n {{'registration.stepThree.question8.ultra' | translate}}\n

\n
\n

{{marca.distanciaMarca ? (marca.distanciaMarca | reduceText:28) : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.distanciaMarca ? marca.distanciaMarca : marca.distanciaTipo.distanciaDescripcion}}

\n

{{marca.time}}

\n

{{ marca.fechaMarca? (marca.fechaMarca | date: 'dd/MM/yyyy') : ('planes.objetivesPopup.noDate' | translate)}}

\n
\n\n
\n
\n

{{'planes.objetivesPopup.emptyAchievements' | translate}}

\n
\n
\n\n
\n \n
\n
\n","import { Component, OnInit, Inject } from '@angular/core';\nimport {MatDialog, MAT_DIALOG_DATA} from '@angular/material/dialog'\nimport { AllAchievements } from 'src/app/api/interfaces/user';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { HoursDayFixedService } from 'src/app/utils/hoursDayFixed/hours-day-fixed.service';\nimport { ParseTimeService } from 'src/app/utils/parseTime/parse-time.service';\nimport { AntecedentesMarcas, FiltratedObjetives } from '../../../api/interfaces/register';\nimport { UserService } from '../../../api/services/user/user.service';\n\n@Component({\n selector: 'app-objetives-dialog',\n templateUrl: './objetives-dialog.component.html',\n styleUrls: ['./objetives-dialog.component.scss']\n})\nexport class ObjetivesDialogComponent implements OnInit {\n\n\n objetives: FiltratedObjetives[] = [];\n marcas: AntecedentesMarcas[] = [];\n\n allAchievements: AllAchievements = {\n route: null,\n pista: null,\n ultra: null,\n trail: null\n };\n \n fullName: string = \"\";\n loaded: boolean = false;\n isMobile: boolean = false;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private userService: UserService,\n private parseTimeService: ParseTimeService,\n private hoursDayFixed: HoursDayFixedService,\n private mobileDetectorService: MobileDetectorService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.getUserProfileData();\n }\n\n getUserProfileData() {\n this.userService.getProfileUserId(this.data.alumnoId).subscribe(response => {\n let objetives: FiltratedObjetives[] = response.objetivo;\n objetives.sort(function (a, b) {\n var key1 = new Date(a.fechaObjetivo);\n var key2 = new Date(b.fechaObjetivo);\n \n if (key1 < key2) {\n return -1;\n } else if (key1 == key2) {\n return 0;\n } else {\n return 1;\n }\n });\n objetives.forEach( objetivo => {\n //check expired\n \n if(objetivo.fechaObjetivo) {\n if(new Date(objetivo.fechaObjetivo).setHours(12) < new Date().setHours(11)) {\n objetivo.activo = false;\n }\n objetivo.fechaObjetivo = this.hoursDayFixed.getDateFixed(objetivo.fechaObjetivo);\n }\n //not else due to backend can sed objetivo.activo = false\n if(objetivo.activo) {\n this.objetives.push(objetivo);\n }\n });\n\n this.fullName = `${response.nombre} ${response.apellido} ${response.segundoApellido}`;\n\n let aux: AntecedentesMarcas[] = [];\n this.allAchievements.route = [];\n this.allAchievements.pista = [];\n this.allAchievements.ultra = [];\n this.allAchievements.trail = [];\n\n response.antecedentesMarcas.forEach( marca => {\n if(marca.fechaMarca) {\n marca.fechaMarca = this.hoursDayFixed.getDateFixed(marca.fechaMarca);\n }\n });\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.RUTA);\n if(aux) {\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n achievement.time = this.parseTimeService.parseToString(achievement.tiempoMarcaHoras, achievement.tiempoMarcaSegundos, achievement.tiempoMarcaMinutos);\n this.allAchievements.route.push(achievement);\n }\n });\n }\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.PISTA);\n if(aux) {\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n achievement.time = this.parseTimeService.parseToString(achievement.tiempoMarcaHoras, achievement.tiempoMarcaSegundos, achievement.tiempoMarcaMinutos);\n this.allAchievements.pista.push(achievement);\n }\n });\n }\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.ULTRA);\n if(aux) {\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n achievement.time = this.parseTimeService.parseToString(achievement.tiempoMarcaHoras, achievement.tiempoMarcaSegundos, achievement.tiempoMarcaMinutos);\n this.allAchievements.ultra.push(achievement);\n }\n });\n }\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.TRAIL);\n if(aux) {\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n achievement.time = this.parseTimeService.parseToString(achievement.tiempoMarcaHoras, achievement.tiempoMarcaSegundos, achievement.tiempoMarcaMinutos);\n this.allAchievements.trail.push(achievement);\n }\n });\n }\n\n this.loaded = true;\n },\n error => {\n console.error(error);\n })\n }\n\n}\n","
\n
\n \n \n close\n \n \n
\n
\n
{{'planes.changeDays.title' | translate}}
\n\n

{{'planes.changeDays.hint' | translate}} {{fecha}}

\n\n
\n
\n \n\n \n {{day.name}}\n \n\n \n {{day.name}}\n \n
\n
\n\n \n {{'planes.changeDays.save' | translate}}\n \n\n
\n","import { Component, OnInit } from '@angular/core';\nimport { Day, EntrenamientoDia } from 'src/app/api/interfaces/register';\nimport { CambioDiaEntrenamiento } from 'src/app/api/interfaces/user';\nimport { PlansService } from 'src/app/api/services/plans/plans.service';\nimport { trainingDaysEnum } from 'src/app/enums/training-type';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { WeekService } from 'src/app/utils/week/week.service';\n\n@Component({\n selector: 'app-change-days-dialog',\n templateUrl: './change-days-dialog.component.html',\n styleUrls: ['./change-days-dialog.component.scss']\n})\nexport class ChangeDaysDialogComponent implements OnInit {\n\n entrenamientoDia: EntrenamientoDia[] = [];\n\n alumnoId: number = 0;\n\n valid: boolean = false;\n\n fecha: string = \"\";\n\n days: Day[] = [\n {name:\"L\", selected: false, index: 2, disabled: false},\n {name:\"M\", selected: false, index: 3, disabled: false},\n {name:\"M\", selected: false, index: 4, disabled: false},\n {name:\"J\", selected: false, index: 5, disabled: false},\n {name:\"V\", selected: false, index: 6, disabled: false},\n {name:\"S\", selected: false, index: 7, disabled: false},\n {name:\"D\", selected: false, index: 1, disabled: false},\n ];\n \n constructor(\n private plansService: PlansService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private dialogRef: MatDialog,\n private weekService: WeekService\n ) { }\n\n ngOnInit(): void {\n let aux = new Date();\n let date = aux.getDate() + 7;\n aux.setDate(date);\n let semana2 = this.weekService.getWeek(aux);\n this.fecha = \" \" + this.weekService.convertDate(semana2[0]);\n this.entrenamientoDia = JSON.parse(sessionStorage.getItem('entrenamientoDia'));\n this.alumnoId = parseInt(sessionStorage.getItem('alumnoId'),10);\n this.entrenamientoDia.forEach(dia => {\n if(dia.entrenamientoDiaTipo == trainingDaysEnum.IN_GROUP) {\n const aux: Day = this.days.find(day => day.index == dia.diaSemana);\n aux.disabled = true;\n }\n\n if(dia.entrenamientoDiaTipo == trainingDaysEnum.ADITIONAL) {\n const aux: Day = this.days.find(day => day.index == dia.diaSemana);\n aux.selected = true;\n }\n\n })\n }\n\n onSubmit() {\n let diasFinal: CambioDiaEntrenamiento[] = [];\n this.days.forEach(day => {\n const aux : CambioDiaEntrenamiento = {\n semanaDia: day.index,\n nuevoDia: day.selected\n }\n if(!day.disabled) {\n diasFinal.push(aux);\n }\n });\n this.plansService.changeDays(this.alumnoId, diasFinal)\n .subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.plan.changeDays');\n this.sharedData.changeMessage(\"reloadWeek\");\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n \n saveDay(day: Day) {\n const position: number = this.days.findIndex(element => element.index == day.index);\n this.days[position].selected = !day.selected;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DownloadService {\n\n constructor(private http: HttpClient) {\n }\n\n private url = environment.apiUrl + '/';\n\n download(alumnoId: number, semana: string): Observable {\n return this.http.get(this.url + `api/planes/exportar?alumnoId=${alumnoId}&semana=${semana}`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n downloadHolidays(): Observable {\n return this.http.get(this.url + `api/mensajes/descargarRespuestas`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n exportarId(domiciliacionId: number, alumnoId: number, arancel: number, emisorId: number): Observable {\n return this.http.get(this.url + `api/domiciliacion/exportar/alumno?domiciliacionDetalleId=${domiciliacionId}&alumnoId=${alumnoId}&arancel=${arancel}&emisorId=${emisorId}`, {\n withCredentials: true,\n responseType: 'blob',\n });\n }\n\n exportarFiltrable(domiciliacionId: number, ape: string, status: string, tipoId: string, grupoId: string, emisorId: number): Observable {\n return this.http.get(this.url + `api/domiciliacion/exportar?domiciliacionId=${domiciliacionId}&apenom=${ape}&estado=${status}&tipoId=${tipoId}&grupoId=${grupoId}&emisorId=${emisorId}`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n downloadFileNutricionComplementos(itemId: number): Observable {\n return this.http.get(this.url + `api/informacion/item/archivo?itemId=${itemId}`, {\n withCredentials: true,\n responseType: 'blob'\n });\n }\n\n preview(itemId: number): Promise {\n return new Promise((resolve, reject) => {\n this.downloadFileNutricionComplementos(itemId).subscribe(response => {\n resolve(URL.createObjectURL(response));\n },\n error => {\n console.error(error);\n reject();\n });\n });\n }\n}","import { Injectable } from '@angular/core';\nimport { RoleString } from 'src/app/enums/role';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RolService {\n\n constructor() { }\n\n isAdmin(): boolean {\n const rol: string = localStorage.getItem('rol');\n if(rol != RoleString.ADMIN) {\n return false;\n }\n return true;\n }\n\n isStudent(): boolean {\n const rol: string = localStorage.getItem('rol');\n if(rol != RoleString.STUDENT) {\n return false;\n }\n return true;\n }\n}\n","
\n
\n {{data.icon}}\n
\n
\n

{{data.title}}

\n

{{data.text}}

\n
\n\n
\n \n \n
\n\n
\n \n \n
\n
","import { Component, OnInit, Inject } from '@angular/core';\nimport {MatDialog, MAT_DIALOG_DATA} from '@angular/material/dialog'\n\n/**\n * Display a warning and request user's confirmation before do something.\n * \n * @param title string, popup title\n * @param iconClass string, css class for icon\n * @param text string, popup text a tiny hint about the action. If no needed then value should be \"\"\n * @param icon string, material icon's name\n * @param confirm string, text to display in confirm button\n * @param cancel string, text to display in cancel button\n * \n * \n * @example calling the dialog and doing something after confirmation\n * ```ts\n * const dialogRef = this.dialog.open(GenericDialogComponent, {\n * data: {\n * title: \"¿Desea guardar los cambios?\",\n * iconClass: \"bigBlueIcon\",\n * text: \"Esto no es reversible\",\n * icon: \"error_outlined\",\n * confirm: \"CONFIRMAR\",\n * cancel: \"NO\"\n * }\n * });\n *\n * dialogRef.afterClosed().subscribe(result => {\n * let today = new Date().toISOString();\n * if(result) {\n * //do something\n * });\n * ```\n * \n * @example showing the primary color on confirm button. Add showConfirmAsPrimary: true in data. Not required in the previous case.\n * ```ts\n * const dialogRef = this.dialog.open(GenericDialogComponent, {\n * data: {\n * title: \"¿Desea guardar los cambios?\",\n * iconClass: \"bigBlueIcon\",\n * text: \"\",\n * icon: \"error_outlined\",\n * confirm: \"SI\", \n * cancel: \"NO\"\n * showConfirmAsPrimary: true //notice this\n * }\n * });\n * ```\n * @returns result: boolean\n */\n@Component({\n selector: 'app-generic-dialog',\n templateUrl: './generic-dialog.component.html',\n styleUrls: ['./generic-dialog.component.scss']\n})\nexport class GenericDialogComponent implements OnInit {\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n

{{day.fecha | dateName: 'EEEE d - MMM'}}

\n

{{day.fecha | dateName: 'EEEEE d'}}

\n flag\n chat\n {{icono}}\n \n
\n
\n

{{day.detalleDia}}

\n
\n \n \n \n \n
\n \n \n
\n \n \n delete_outline\n \n \n edit\n \n visibility\n
\n
\n \n \n
\n
\n
\n\n
\n
\n

{{day.fecha | dateName: 'EEEE d - MMM'}}

\n

{{day.detalleDia}}

\n\n
\n \n Edición\n \n \n
\n\n
\n
\n \n \n \n
\n\n
\n \n\n \n \n \n
\n
\n\n
\n
\n\n \n \n \n
\n
\n
","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { EntrenamientoDiaFiltrado } from 'src/app/api/interfaces/user';\nimport { trainingDaysEnum } from 'src/app/enums/training-type';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\nimport { PlansService } from '../../../api/services/plans/plans.service';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { WeekService } from '../../../utils/week/week.service';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { FeedbackDialogComponent } from '../feedback-dialog/feedback-dialog.component';\nimport { DescansoEnum } from '../../../enums/training-type';\nimport { RoleString } from '../../../enums/role';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { ReloadDay } from 'src/app/api/interfaces/plans';\nimport { IsSameObjectService } from 'src/app/services/isSameObject/is-same-object.service';\nimport { Subscription } from 'rxjs';\nimport { RolService } from 'src/app/services/rol/rol.service';\n@Component({\n selector: 'app-day',\n templateUrl: './day.component.html',\n styleUrls: ['./day.component.scss']\n})\nexport class DayComponent implements OnInit, OnDestroy {\n\n private _day: EntrenamientoDiaFiltrado;\n\n @Output() reloadEvent = new EventEmitter();\n @Output() changeActiveDayEvent = new EventEmitter();\n @Output() openDialogEvent = new EventEmitter();\n @Input('alumnoId') alumnoId: number;\n\n // @Input('day') day: EntrenamientoDiaFiltrado;\n @Input() set day(value: EntrenamientoDiaFiltrado) {\n this._day = value;\n this.assignDayClass();\n }\n\n get day(): EntrenamientoDiaFiltrado {\n return this._day;\n }\n\n @Input('dayText') dayText: string;\n @Input('index') index?: number;\n\n private sharedData$: Subscription;\n\n allowEdit: boolean = false;\n isMobile: boolean = false;\n showEye: boolean = false;\n isAdmin: boolean = false;\n edit: boolean = false;\n\n dayInfoMobileClass: string = \"dayInfoMobile\";\n dayTitleTextClass: string = \"dayTitleText\";\n dayIconClass: string = \"dayIcon\"\n titleClass: string = \"dayTitle\";\n dayClass: string = \"day\";\n titulo: string = \"\";\n icono: string = \"\";\n\n opcion: number = 0;\n\n planForm = new FormGroup({\n actividad: new FormControl(),\n });\n\n constructor(\n private sharedData: SharedDataService,\n private plansService: PlansService,\n private weekService: WeekService,\n private activatedrouter: ActivatedRoute,\n private router: Router,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n public dialog: MatDialog,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService,\n private isSameObject: IsSameObjectService,\n private rolService: RolService,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n\n this.isMobile = this.mobileDetectorService.isMobile();\n this.isAdmin = this.rolService.isAdmin();\n const url = this.activatedrouter.snapshot.routeConfig.path;\n\n if(url == 'admin/alumnos') {\n this.showEye = true;\n }\n this.assignDayClass();\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message == \"updateDays\") {\n this.assignDayClass();\n this.setClass();\n }\n \n if (message == \"reloadDay\") {\n const reloadDay: ReloadDay = JSON.parse(sessionStorage.getItem('reloadDay'));\n const fechaDia = {\n dia: (new Date(this.day.fecha)).getDate(),\n mes: (new Date(this.day.fecha)).getMonth(),\n año: (new Date(this.day.fecha)).getFullYear(),\n }\n const fechaDelFeedback = {\n dia: (new Date(reloadDay.fechaFeedback)).getDate(),\n mes: (new Date(reloadDay.fechaFeedback)).getMonth(),\n año: (new Date(reloadDay.fechaFeedback)).getFullYear(),\n }\n const aux: boolean = this.isSameObject.isSame(fechaDelFeedback,fechaDia);\n if(aux) {\n this.day.feedbackOpcion = reloadDay.feedbackOpcion;\n this.setClass();\n this.dayTitleTextClass = \"dayTitleText\";\n this.dayIconClass = \"dayIcon\";\n }\n }\n if (message === \"semanaNoDisponible\") {\n this.day.detalleDia = DescansoEnum.DESCANSO;\n this.icono = \"\";\n this.dayTitleTextClass = \"dayTitleText\";\n this.disabledClass();\n }\n });\n this.setClass();\n\n //set icon\n if (this.day.tipoDia == 'A') {\n this.icono = \"check_circle\";\n }\n if (this.day.tipoDia == 'P') {\n this.icono = \"place\";\n }\n this.planForm.patchValue({ actividad: this.day.detalleDia });\n if(this.day.seleccionado) {\n sessionStorage.setItem('detalle',this.day.detalleDia);\n }\n }\n\n controlFecha(): boolean {\n if(this.day.fecha == sessionStorage.getItem('controlFecha')) {\n return true;\n }\n return false;\n }\n\n selectDay(button: boolean) {\n if (!this.isAdmin) {\n if (this.day.detalleDia != DescansoEnum.DESCANSO || this.day.detalleDia != DescansoEnum.DESCANSO) {\n this.changeDay();\n } \n } else {\n if (button) {\n\n sessionStorage.setItem('fecha', this.day.fecha);\n sessionStorage.setItem('fromDay','true');\n sessionStorage.setItem('id_usuario', this.alumnoId.toString());\n this.sharedData.changeMessage(\"savePage\");\n } else {\n const url = this.activatedrouter.snapshot.routeConfig.path;\n if( (url != \"admin/alumnos\") || (url == \"admin/alumnos\" && this.isMobile)) {\n this.titulo = sessionStorage.getItem('titulo');\n this.changeDay();\n }\n }\n }\n }\n\n changeDay() {\n sessionStorage.setItem('detalle',this.day.detalleDia);\n this.day.seleccionado = !this.day.seleccionado;\n this.changeActiveDayEvent.emit(this.day);\n this.setClass();\n }\n\n assignDayClass() {\n if (this.day.seleccionado) {\n this.dayClass = \"daySelected\";\n } else {\n this.dayClass = \"day\";\n }\n if (this.day.tipoDia == trainingDaysEnum.DESCANSO) {\n this.dayClass = \"dayDisabled\"\n }\n }\n\n /**\n * change dayClass, titleClass and dayIconClass\n */\n setClass() {\n if(this.index && this._day.seleccionado) {\n document.documentElement.style.setProperty('--indexDayLeft', this.index.toString());\n if(this.index != 0) {\n this.dayInfoMobileClass = \"dayInfoMobile marginDayMobile\";\n } else {\n this.dayInfoMobileClass = \"dayInfoMobile\";\n }\n }\n if (this.day.tipoDia != trainingDaysEnum.DESCANSO || this.day.feedbackOpcion) {\n //puede que haya dias adicionales pero que sean de descanso\n //entonces tengo que validar asi...\n if (this.day.detalleDia != DescansoEnum.DESCANSO) {\n this.dayClass = \"dayActividad\";\n this.titleClass = \"dayTitleActividad\";\n }\n\n switch (this.day.feedbackOpcion) {\n case 1:\n this.titleClass = \"dayTitleMal\";\n if (!this.day.seleccionado) {\n this.dayClass = \"dayMal\";\n }\n break;\n case 2:\n this.titleClass = \"dayTitleRegular\";\n if (!this.day.seleccionado) {\n this.dayClass = \"dayRegular\"\n };\n break;\n case 3:\n this.titleClass = \"dayTitleBien\";\n if (!this.day.seleccionado) {\n this.dayClass = \"dayBien\";\n }\n break;\n case 4:\n this.titleClass = \"dayTitleFenomenal\";\n if (!this.day.seleccionado) {\n this.dayClass = \"dayFenomenal\";\n }\n break;\n default:\n if (this.dayClass == \"dayActividad\") {\n this.dayTitleTextClass = \"dayTitleTextWhite\";\n this.dayIconClass = \"dayIconYellow\";\n }\n break;\n }\n } else {\n if (this.day.detalleDia != DescansoEnum.DESCANSO) {\n this.dayClass = \"dayActividad\";\n this.titleClass = \"dayTitleActividad\";\n } else {\n this.disabledClass();\n }\n }\n\n if (this.day.tipoDia == undefined || this.dayClass == \"dayTitleDisabled\") {\n this.disabledClass();\n }\n\n if (this.day.seleccionado) {\n this.dayClass = \"daySelected\";\n }\n\n if (this.dayClass == \"dayActividad\") {\n this.dayTitleTextClass = \"dayTitleTextWhite\";\n this.dayIconClass = \"dayIconYellow\";\n }\n }\n\n disabledClass() {\n // el administrador tiene hover en dia de descanso\n // y el alumno no\n if (this.isAdmin) {\n this.titleClass = \"dayTitleDisabled\";\n } else {\n this.titleClass = \"dayTitleDisabledNoHover\";\n }\n this.dayClass = \"dayDisabled\";\n }\n\n delete() {\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea eliminar el contenido del plan?\",\n iconClass: \"bigGreyIcon\",\n text: \"Si lo hace no podrá recuperar los datos y el alumno visualizará el día como “Descanso”\",\n icon: \"error_outlined\",\n confirm: \"ELIMINAR\",\n cancel: \"CANCELAR\"\n }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n // ticket 2480\n const fecha: string = this.weekService.convertDate(this.day.fecha);\n\n this.plansService.deletePlanDia(this.alumnoId,fecha)\n .subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.plan.dayDelete');\n // ticket 2480\n this.changeDay();\n this.saveAndReload();\n \n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.delete');\n });\n }\n });\n }\n\n saveAndReload() {\n sessionStorage.setItem('openDay',JSON.stringify(this.day));\n this.sharedData.changeMessage(\"reloadWeekAfterDayChanged\");\n }\n\n toggleEdit() {\n this.edit = !this.edit;\n if(this.edit) {\n this.planForm.patchValue({actividad: this.day.detalleDia});\n }\n }\n\n openFeedbackDialog() {\n const dialogRef = this.dialog.open(FeedbackDialogComponent, {\n data: {\n title: this.day.fecha,\n alumnoId: this.alumnoId\n }\n });\n }\n\n openObjetivesDialog() {\n this.openDialogEvent.emit();\n }\n\n onSubmit() {\n if (this.planForm.valid) {\n // ticket 2480\n const fecha: string = this.weekService.convertDate(this.day.fecha);\n\n this.plansService.editDia(this.alumnoId, fecha, sessionStorage.getItem('titulo'), this.planForm.value.actividad)\n .subscribe(response => {\n // ticket 2480\n this.changeDay();\n this.snack.snackTranslate('snacks.sucess.plan.edit');\n this.toggleEdit();\n this.saveAndReload();\n // this.reloadEvent.emit(this.alumnoId);\n\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.edit');\n this.toggleEdit();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","
\n
\n\n
\n \n {{ 'planes.forms.date' | translate }}\n \n \n \n \n \n \n
\n\n \n\n \n
\n \n\n \n
\n\n
\n\n \n\n\n\n\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { Dia, EntrenamientoDiaFiltrado, EntrenamientoDiaIndividual } from 'src/app/api/interfaces/user';\nimport { PlansService } from 'src/app/api/services/plans/plans.service';\nimport { UserService } from 'src/app/api/services/user/user.service';\nimport { trainingDaysEnum } from 'src/app/enums/training-type';\nimport { SharedDataService } from '../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { WeekService } from 'src/app/utils/week/week.service';\nimport { ObjetivesDialogComponent } from '../objetives-dialog/objetives-dialog.component';\nimport { MatDialog} from '@angular/material/dialog';\nimport { ParametrosService } from '../../../api/services/parametros/parametros.service';\nimport { FileData } from 'src/app/api/interfaces/fileData';\nimport { saveAs } from 'file-saver';\nimport { DownloadService } from 'src/app/api/services/download/download.service';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { ChangeDaysDialogComponent } from '../change-days-dialog/change-days-dialog.component';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Get plan data for the week and call dayComponent to display it. \n * Student can change the week and return to the current one.\n * Student and admin can download plan pdf\n */\n@Component({\n selector: 'app-week',\n templateUrl: './week.component.html',\n styleUrls: ['./week.component.scss']\n})\nexport class WeekComponent implements OnInit, OnDestroy {\n\n myFilter = (d: any | null): boolean => {\n const day = new Date(d._d).getDay();\n return day == 1;\n };\n\n @Input('alumnoId') alumnoId: number;\n @Input('isAdmin') isAdmin: boolean;\n @Input('showDownload') showDownload?: boolean;\n\n\n private sharedData$: Subscription;\n\n entrenamientoDia: EntrenamientoDiaIndividual[] = [];\n daysWeek2: EntrenamientoDiaFiltrado[] = [];\n days: EntrenamientoDiaFiltrado[] = [];\n\n enableDownload: boolean = false;\n showReturnWeek: boolean = false;\n showChangeDays: boolean = false;\n isStudent: boolean = false;\n loaded: boolean = false;\n isMobile: boolean = false;\n\n semana2: string[] = [];\n semana: string[] = [];\n selected: Date | null;\n\n planForm = new FormGroup({\n semana: new FormControl()\n });\n\n constructor(\n private plansService: PlansService,\n private snack: SnackbarService,\n private userService: UserService,\n private weekService: WeekService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n private parametrosService: ParametrosService,\n private downloadService: DownloadService,\n private rol: RolService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private activatedrouter: ActivatedRoute,\n private mobileDetectorService: MobileDetectorService,\n ) { \n this.matIconRegistry.addSvgIcon(\n `return`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../assets/returnWeek.svg')\n );\n }\n\n /**\n * Request to backend parameter 'semanahabilitada', in order to allow the student to see and download the week plan.\n * Admin should always be capable of download/see/edit the week plan, no matter 'semanahabilitada' value.\n */\n async check() {\n if(!this.isAdmin) {\n try {\n let ultimaSemanaDisponible: string [] = await this.parametrosService.getUltimaSemanaDisponible();\n let ultimoDiaDisponible = new Date(ultimaSemanaDisponible[6]);\n const fechaFeedbackDate = new Date(this.semana[0]);\n //si es alumno debe validar, sino no\n const condicional: boolean = this.isStudent ? (fechaFeedbackDate <= ultimoDiaDisponible) : true;\n \n if(condicional) {\n this.sharedData.changeMessage(\"semanaDisponible\");\n } else {\n this.sharedData.changeMessage(\"semanaNoDisponible\");\n }\n this.enableDownload = condicional;\n\n } catch {\n }\n } else {\n this.enableDownload = true;\n }\n }\n\n ngOnInit(): void {\n\n sessionStorage.removeItem('fecha');\n\n this.isStudent = this.rol.isStudent();\n this.isMobile = this.mobileDetectorService.isMobile();\n \n this.planForm.statusChanges\n .subscribe(val => {\n if(this.planForm.valid && this.planForm.value.semana) {\n this.loaded = false;\n this.semana = this.weekService.getWeek(new Date(this.planForm.value.semana));\n sessionStorage.setItem('semana',this.weekService.convertDate(this.semana[0]));\n this.days = [];\n this.getMyProfileData();\n sessionStorage.setItem('fecha',(new Date(this.semana[0])).toString());\n sessionStorage.setItem('flagCambioSemana','true');\n this.sharedData.changeMessage(\"updateDays\"); \n this.showReturnWeek = !this.weekService.isCurrentWeek(this.planForm.value.semana);\n this.check();\n }\n });\n let aux = new Date();\n aux.setDate(aux.getDate() + 7);\n \n this.semana = this.weekService.getWeek(new Date());\n this.semana2 = this.weekService.getWeek(aux);\n this.getMyProfileData();\n\n this.sharedData.changeMessage(\"\"); //bugfix despues de editar un dia y cambiar un filtro\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n // ticket 2480: added reloadWeekAfterDayChanged\n if (message === \"reloadWeek\" || message === \"reloadWeekAfterDayChanged\") {\n this.clean();\n }\n if (message === \"reloadWeek2\") {\n const aux = sessionStorage.getItem('alumnoIdCheck');\n if(aux) {\n const check: number = parseInt(aux,10);\n if(check == this.alumnoId) { \n this.clean();\n }\n }\n }\n });\n\n const url = this.activatedrouter.snapshot.routeConfig.path;\n if( url == 'admin/perfil') {\n this.showChangeDays = true;\n }\n\n this.check();\n }\n\n reloadEvent(event: number) {\n if(event === this.alumnoId) {\n this.clean();\n }\n }\n\n clean() {\n this.loaded = false;\n this.days = [];\n this.daysWeek2 = [];\n this.getMyProfileData();\n }\n\n //lunes tiene id 1 , deprecado. Lunes ahora tiene id 2\n /**\n * load profile data and call create week\n */\n getMyProfileData() {\n this.days = [];\n this.userService.getProfileUserId(this.alumnoId).subscribe(response => {\n this.entrenamientoDia = response.entrenamientoDia;\n sessionStorage.setItem('entrenamientoDia',JSON.stringify(response.entrenamientoDia));\n sessionStorage.setItem('alumnoId',this.alumnoId.toString());\n this.createPlanWeekData();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n createPlanWeekData() {\n let hoy = new Date();\n let hoyDia = hoy.getDay();\n\n //completar dias de entrenamiento que vienen desde DB\n this.entrenamientoDia.map(dia => {\n const aux: EntrenamientoDiaFiltrado = {\n diaSemana: dia.diaSemana,\n entrenamientoDiaTipo: dia.entrenamientoDiaTipo ? dia.entrenamientoDiaTipo: trainingDaysEnum.DESCANSO,\n comentario: \"\",\n esHoy: false,\n fecha: hoy.toLocaleDateString(),\n seleccionado: false,\n };\n\n const aux2: EntrenamientoDiaFiltrado = {\n diaSemana: dia.diaSemana,\n entrenamientoDiaTipo: dia.entrenamientoDiaTipo ? dia.entrenamientoDiaTipo: trainingDaysEnum.DESCANSO,\n comentario: \"\",\n esHoy: false,\n fecha: hoy.toLocaleDateString(),\n seleccionado: false,\n };\n this.days.push(aux);\n this.daysWeek2.push(aux2);\n });\n\n //completar semana (no llega toda desde DB)\n for (let index = 1; index < 8; index++) {\n const aux: EntrenamientoDiaFiltrado = {\n diaSemana: index,\n entrenamientoDiaTipo: trainingDaysEnum.DESCANSO,\n comentario: \"\",\n esHoy: false,\n fecha: hoy.toLocaleDateString(),\n seleccionado: false\n };\n const aux2: EntrenamientoDiaFiltrado = {\n diaSemana: index,\n entrenamientoDiaTipo: trainingDaysEnum.DESCANSO,\n comentario: \"\",\n esHoy: false,\n fecha: hoy.toLocaleDateString(),\n seleccionado: false\n };\n\n //evitar repetidos\n if(!this.days.some(dia => dia.diaSemana == aux.diaSemana)) {\n this.days.push(aux);\n }\n if(!this.daysWeek2.some(dia => dia.diaSemana == aux.diaSemana)) {\n this.daysWeek2.push(aux2);\n }\n }\n \n //correcion de orden\n this.days.sort( (a,b) => a.diaSemana - b.diaSemana);\n this.daysWeek2.sort( (a,b) => a.diaSemana - b.diaSemana);\n\n //asignacion de fecha y dia de hoy, pero aun no recuadro\n this.days.forEach( (day, index) => {\n day.fecha = this.semana[index];\n let hoyDia = new Date().getDay();\n let hoyDate = new Date().getDate();\n if((day.diaSemana == hoyDia) && (hoyDate == new Date(day.fecha).getDate())) {\n day.esHoy = true;\n }\n });\n\n // asignar dia\n this.daysWeek2.forEach( (dia, indice) => {\n dia.fecha = this.semana2[indice];\n dia.esHoy = false;\n });\n //cargar datos de endpoint getPlanSemanaData\n this.getPlanSemanaData();\n }\n\n changeActiveDayEvent(day: EntrenamientoDiaFiltrado) {\n this.days.forEach(day => day.seleccionado = false);\n const index: number = this.days.findIndex(dia => dia.diaSemana == day.diaSemana);\n this.days[index].seleccionado = true;\n\n this.changeSeleccionadoInDaysWeek2(day);\n\n //trigger para los demas dias y para el componente\n sessionStorage.setItem('fecha',day.fecha);\n sessionStorage.setItem('entrenamientoDiaTipo',day.entrenamientoDiaTipo);\n sessionStorage.setItem('flagCambioSemana','false');\n this.sharedData.changeMessage(\"updateDays\"); \n }\n\n changeSeleccionadoInDaysWeek2(day: EntrenamientoDiaFiltrado) {\n if(this.daysWeek2) {\n this.daysWeek2.forEach(day => day.seleccionado = false);\n const index: number = this.daysWeek2.findIndex(dia => dia.diaSemana == day.diaSemana);\n this.daysWeek2[index].seleccionado = true;\n }\n }\n\n /**\n * load week data from backend. Change day.seleccionado after updated/deleted one day in student profile, prority:\n * 1) check updated deleted\n * 2) check if today is in current week\n * 3) if user edited/deleted day, read sessionStorage and set the day as seleccionado. sessionStorage openDay is removed in students-table.\n * 4) if !1 !2 and !3, then day.seleccionado = true in monday\n */\n getPlanSemanaData() {\n const titulo: string = \"Fase 2\";\n sessionStorage.setItem('titulo',titulo);\n this.plansService.getPlanSemanaData(this.weekService.convertDate(this.days[0].fecha), this.alumnoId, titulo).subscribe(response => {\n sessionStorage.setItem('entrenamientoDiasPlan',JSON.stringify(response));\n let semanaTieneActivo: boolean = false;\n\n // asigno feedback y detalle, y si es un dia activo\n this.days.forEach( (day, index) => {\n if(response && response[index]) {\n day.feedbackOpcion = response[index].feedbackOpcion;\n day.detalleDia = response[index].detalleDia;\n day.objetivo = response[index].objetivo;\n day.tipoDia = response[index].tipoDia;\n day.entrenamientoDiaTipo = response[index].entrenamientoDiaTipo;\n\n let auxDate = new Date(response[index].fecha).toISOString();\n const auxDate2: string [] = auxDate.split('T');\n auxDate = auxDate2[0] + \"T12:00:00.000+00:00\";\n\n day.fecha = auxDate;\n // ticket 2480\n // recuadro dia activo, step 1\n let fechaGuardada: string = sessionStorage.getItem('fecha');\n if(fechaGuardada && fechaGuardada == day.fecha) {\n day.seleccionado = true;\n semanaTieneActivo = true;\n }\n }\n });\n\n //si no hay ningun dia activo, recuadro hoy. Step 2\n let semanaTieneHoy: boolean = false;\n let daySeleccionado: EntrenamientoDiaFiltrado = null;\n if(!semanaTieneActivo) {\n this.days.forEach( (day, index) => {\n if(day.esHoy) {\n day.seleccionado = true;\n semanaTieneHoy = true;\n daySeleccionado = day;\n }\n });\n }\n\n // step 3, 2594 y 2698\n let openDay: EntrenamientoDiaFiltrado = JSON.parse(sessionStorage.getItem('openDay'));\n const url = this.activatedrouter.snapshot.routeConfig.path;\n if(openDay && this.isMobile && url == 'admin/alumnos') {\n semanaTieneActivo = true;\n daySeleccionado = null;\n this.changeActiveDayEvent(openDay);\n }\n\n //si no hay ningun dia activo y no es hoy, recuadro el lunes. Step 4\n if(!semanaTieneActivo && !semanaTieneHoy) {\n this.days[0].seleccionado = true;\n }\n\n if(this.isAdmin) {\n this.plansService.getPlanSemanaData(this.weekService.convertDate(this.daysWeek2[0].fecha), this.alumnoId, titulo).subscribe(response => {\n this.daysWeek2.forEach( (day, index) => {\n if(response && response[index]) {\n day.feedbackOpcion = response[index].feedbackOpcion;\n day.detalleDia = response[index].detalleDia;\n day.objetivo = response[index].objetivo;\n day.tipoDia = response[index].tipoDia;\n day.entrenamientoDiaTipo = response[index].entrenamientoDiaTipo;\n\n let auxDate = new Date(response[index].fecha).toISOString();\n const auxDate2: string [] = auxDate.split('T');\n auxDate = auxDate2[0] + \"T12:00:00.000+00:00\";\n \n day.fecha = auxDate;\n }\n }); \n\n if(daySeleccionado) {\n this.changeSeleccionadoInDaysWeek2(daySeleccionado);\n }\n this.loaded = true;\n },\n error => {\n console.error(error);\n }); \n } else {\n this.loaded = true;\n }\n },\n error => {\n console.error(error);\n });\n\n }\n\n openDialog() {\n this.dialog.open(ObjetivesDialogComponent, {\n data: {\n alumnoId: this.alumnoId\n }\n });\n }\n\n downloadFile() {\n let semana: string = sessionStorage.getItem('semana');\n if(!semana) {\n const aux: string[] = this.weekService.getWeek(new Date());\n semana = this.weekService.convertDate(aux[0]);\n }\n const fileData: FileData = {\n filename: semana+\".pdf\",\n }\n this.downloadService.download(this.alumnoId,semana)\n .subscribe(archivo => {\n saveAs(archivo, fileData.filename);\n this.snack.snackTranslate('snacks.sucess.plan.download');\n });\n }\n\n returnToCurrentWeek() {\n const today: string = new Date().toDateString();\n this.loaded = false;\n this.semana = this.weekService.getWeek(new Date());\n sessionStorage.setItem('semana',this.weekService.convertDate(this.semana[0]));\n this.days = [];\n this.getMyProfileData();\n sessionStorage.setItem('fecha',(new Date(this.semana[0])).toString());\n sessionStorage.setItem('flagCambioSemana','true');\n this.sharedData.changeMessage(\"updateDays\");\n this.showReturnWeek = false;\n this.planForm.patchValue({semana: null});\n this.check();\n }\n\n openChangeDays() {\n this.dialog.open(ChangeDaysDialogComponent, {\n });\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","\n\n\n\n\n\n\n\n
\n
\n {{'admin.studentsTable.noStudents.filtersEmpty' | translate}}\n
\n
\n {{'admin.studentsTable.noStudents.dontExist' | translate}}\n
\n {{'admin.studentsTable.noStudents.dontExist2' | translate}}\n
\n
\n
\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n\n\n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n \n
{{'admin.studentsTable.header.name' | translate}} \n
\n
\n \n \n
\n
\n \n {{student.name}} {{student.lastName}}\n \n
\n {{student.email}}\n
\n
\n
\n
{{'admin.studentsTable.header.status' | translate}} \n \n {{'admin.studentsTable.header.type' | translate}} \n \n {{'admin.studentsTable.header.level' | translate}} \n \n \n {{'admin.studentsTable.header.trainer' | translate}} \n
\n {{student.entrenador}}\n
\n
\n {{'admin.studentsTable.header.undefined' | translate}}\n
\n\n
{{'admin.studentsTable.header.actions' | translate}}\n
\n \n \n \n \n
\n
\n
\n

{{'admin.studentsTable.pending' | translate}}

\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n\n\n \n \n
\n
\n
\n \n \n
\n
\n \n {{ student.fullName | reduceText:23 }}\n \n
\n \n {{student.email | reduceText:20 }}\n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n
\n \n
\n
\n

{{'admin.studentsTable.pending' | translate}}

\n \n
\n\n
\n
\n\n
\n\n","import { Component, OnInit} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Expanded, Filters, UserComplete, UserTable } from '../../../../api/interfaces/user';\nimport { StatusEnum } from '../../../../enums/status';\nimport { TrainingTypeEnum } from '../../../../enums/training-type';\nimport { StudentService } from '../../../../services/admin/student/student.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { Role } from '../../../../enums/role';\nimport { ImageService } from '../../../../api/services/image/image.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FeedbackDialogComponent } from 'src/app/components/plans/feedback-dialog/feedback-dialog.component';\n\n@Component({\n selector: 'app-students-table',\n templateUrl: './students-table.component.html',\n styleUrls: ['./students-table.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n})\nexport class StudentsTableComponent implements OnInit {\n\n noStudents = false;\n firstLoad: boolean = true;\n amount: number = 1000;\n totalPerPage: number = 10;\n page: number = 0;\n paginateRight: boolean = true;\n TrainingTypeEnum = TrainingTypeEnum;\n StatusEnum = StatusEnum;\n RoleEnum = Role;\n isMobile: boolean = false;\n filters: Filters = {\n nombre: \"\",\n apellido: \"\",\n nombreApellido: \"\",\n estado: \"\",\n entrenamientoTipoId: \"\",\n entrenamientoNivelId: \"\",\n entrenadorId: \"\",\n leido: \"\"\n };\n\n constructor(\n private router: Router,\n private snack: SnackbarService,\n private studentService: StudentService,\n private imageService: ImageService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n displayedColumns: string[] = ['name', 'status', 'type', 'level', 'trainer', 'actions'];\n displayedColumnsMobile: string[] = ['name', 'status', 'actions'];\n studentData: UserTable[];\n loaded: boolean = false;\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n // ticket 2476\n const page: number = parseInt(sessionStorage.getItem('page'),10);\n if(page && !isNaN(page)) {\n this.page = page;\n }\n\n // todo: revisar merge rompio la llamada a load student cuando volvemos de un dia\n\n const fromDay: boolean = JSON.parse(sessionStorage.getItem('fromDay'));\n if(!fromDay) {\n this.loadStudents();\n }\n // this.loadStudents();\n // this.loadAmount();\n\n\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"reloadStudentData\") {\n this.loadStudents();\n }\n if (message === \"savePage\") {\n sessionStorage.setItem('page',this.page.toString());\n this.router.navigate(['/admin/feedback']);\n this.sharedData.changeMessage(\"\");\n }\n });\n\n }\n\n async loadStudents() {\n this.studentData = [];\n this.noStudents = false;\n this.loaded = false;\n this.setFilters(JSON.parse(localStorage.getItem('filters')));\n this.studentService.getStudentsWithPaginator(this.totalPerPage, this.page, this.filters)\n .subscribe(async students => {\n if (students.length == 0) {\n this.noStudents = true;\n this.loaded = true;\n this.paginateRight = false;\n } else {\n this.firstLoad = false;\n\n for (const student of students) {\n await this.convertAndPushStudent(student);\n }\n\n this.studentService.getStudentsWithPaginator(this.totalPerPage, (this.page+1), this.filters)\n .subscribe(students => {\n if (students.length == 0) {\n this.paginateRight = false;\n } else {\n this.paginateRight = true;\n }\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic')\n console.error(error);\n });\n\n this.loaded = true;\n\n this.studentData.forEach(async student => {\n try {\n student.avatarUrl = await this.imageService.getAvatarUrl(student.usuarioId);\n } catch { }\n });\n }\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic')\n console.error(error);\n this.loaded = true;\n });\n\n\n }\n\n navigate(student: UserTable) {\n // ticket 2476\n sessionStorage.setItem('page',this.page.toString());\n sessionStorage.setItem('id_usuario', JSON.stringify(student.user_id));\n this.router.navigate(['/admin/perfil']);\n }\n\n pushStudent(student: UserTable) {\n if (student != null) {\n this.studentData.push(student);\n }\n }\n\n async loadAmount() {\n try {\n this.amount = await this.studentService.getAmounts(Role.STUDENT);\n } catch (error) {\n console.error(error);\n }\n }\n\n\n async convertAndPushStudent(student: UserComplete) {\n let aux: UserTable = null;\n let avatarUrl: string = \"\";\n\n let fullName = student.nombre + \" \" + student.apellido + \" \";\n if(student.segundoApellido) {\n fullName += student.segundoApellido;\n }\n\n let training = {\n entrenamientoTipo: student.entrenamientoTipo,\n grupo: student.grupo\n }\n let isExpanded: boolean = false;\n\n const expanded: Expanded[] = JSON.parse(sessionStorage.getItem('expanded'));\n const fromDay: boolean = JSON.parse(sessionStorage.getItem('fromDay'));\n if(expanded && fromDay) {\n if(expanded[0].user_id == student.id) {\n isExpanded = expanded[0].isExpanded;\n sessionStorage.removeItem('fromDay');\n }\n }\n aux = {\n name: student.nombre,\n lastName: student.apellido,\n email: student.email,\n training: training,\n avatarUrl: avatarUrl,\n user_id: student.id,\n fullName: fullName,\n status: student.estado,\n level: student.nivel,\n entrenador: student.entrenador,\n leido: student.leido,\n isExpanded: isExpanded,\n usuarioId: student.usuarioId,\n }\n\n if (aux != null) {\n this.studentData.push(aux);\n }\n }\n\n changePage(page: number) {\n this.page = page;\n this.studentData = [];\n this.loadStudents();\n }\n\n setFilters(filters) {\n if(filters) {\n this.filters.nombreApellido = filters.nombreApellido ? filters.nombreApellido : \"\";\n this.filters.estado = filters.status ? filters.status : \"\";\n this.filters.entrenamientoNivelId = filters.level ? filters.level : \"\";\n this.filters.entrenadorId = filters.trainer ? filters.trainer : \"\";\n this.filters.entrenamientoTipoId = filters.type ? filters.type : \"\";\n this.filters.leido = filters.leido != null ? filters.leido : \"\";\n //validacion para mostrar texto correcto si no hay alumnos con los filtros seleccionados\n if(filters.nombreApellido || filters.status || filters.level || filters.trainer || filters.type || filters.leido ) {\n this.firstLoad = false;\n }\n }\n }\n\n /**\n * Reset page and call set filters\n * @param filters \n */\n filtersChange(filters) {\n this.page = 0;\n this.sharedData.changeMessage(\"resetPage\");\n this.setAndLoad(filters);\n }\n\n /**\n * set filters and call endpoint to load student data with the filter criteria\n * @param filters \n */\n setAndLoad(filters) {\n this.setFilters(filters);\n sessionStorage.setItem('filters',JSON.stringify(filters));\n this.loadStudents();\n }\n\n changeFromCheckbox(student: UserTable) {\n this.studentService.setRead(student.user_id, !student.leido)\n .subscribe(response=> {\n this.loadStudents();\n \n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n this.loadStudents();\n console.error(error);\n });\n }\n\n toggleExpanded(student: UserTable) {\n const aux: boolean = student.isExpanded;\n this.studentData.forEach(student => {\n student.isExpanded = false;\n })\n student.isExpanded = !aux;\n let expanded: Expanded [] = [];\n this.studentData.forEach(data => {\n if(data.isExpanded) {\n const aux: Expanded = {\n user_id: data.user_id,\n isExpanded: true,\n }\n expanded.push(aux);\n }\n });\n sessionStorage.setItem('expanded',JSON.stringify(expanded));\n sessionStorage.removeItem('openDay');\n }\n\n openDialogChat(student: UserTable) {\n const dialogRef = this.dialog.open(FeedbackDialogComponent, {\n data: {\n alumnoId: student.user_id\n }\n });\n }\n\n}\n","
\n\n \n \n
\n
\n

{{ 'admin.StudentMainPage.title' | translate }}

\n

{{ 'admin.StudentMainPage.title' | translate }}

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

Último envío: {{ultimaEjecucion | date: 'dd/MM/YYY'}}

\n
\n
\n \n \n \n
\n
\n \n
\n
","import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { LoadingComponent } from 'src/app/components/plans/process/loading/loading.component';\nimport { ParametrosService } from '../../../../api/services/parametros/parametros.service';\nimport { PlansService } from '../../../../api/services/plans/plans.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { WeekService } from '../../../../utils/week/week.service';\nimport { DialogComponent } from '../../../plans/process/dialog/dialog.component';\nimport { CreateStudentComponent } from '../create-student/create-student.component';\n\n@Component({\n selector: 'app-mainpageadmin',\n templateUrl: './mainpageadmin.component.html',\n styleUrls: ['./mainpageadmin.component.scss']\n})\nexport class MainpageadminComponent implements OnInit {\n\n isMobile: boolean = false;\n ultimaEjecucion: any;\n ejecutoEstaSemana: boolean = false;\n\n constructor(\n public dialog: MatDialog,\n private mobileDetectorService: MobileDetectorService,\n private weekService: WeekService,\n private plansService: PlansService,\n private snack: SnackbarService,\n private parametrosService: ParametrosService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active', 'alumnos');\n this.getUltimoEnvio();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"reloadStudentData\") {\n this.getUltimoEnvio();\n }\n });\n }\n\n getUltimoEnvio() {\n this.parametrosService.getProcesos('Procesos', 'ultimaejecucion').subscribe(response => {\n //bugfix pipe safari\n let aux: string = response.valor;\n let auxs = aux.split(' ');\n this.ultimaEjecucion = `${auxs[0]}T${auxs[1]}`;\n // this.getSemanaHabilitada();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n // getSemanaHabilitada() {\n // this.parametrosService.getProcesos('Procesos', 'semanahabilitada').subscribe(response => {\n // this.ejecutoEstaSemana = this.weekService.isCurrentWeek(response.valor);\n // },\n // error => {\n // console.error(error);\n // this.snack.snackTranslate('snacks.error.generic');\n // })\n // }\n\n openDialogCreateStudent() {\n this.dialog.open(CreateStudentComponent, {\n backdropClass: 'backdropBackground',\n });\n }\n\n process(habilitar: boolean) {\n // dia debe ser de la semana que viene\n \n let semanaActual = this.weekService.getWeek(new Date());\n let aux = new Date();\n let date = aux.getDate() + 7;\n aux.setDate(date);\n let semana2 = this.weekService.getWeek(aux);\n const diaSemanaActual: string = this.weekService.convertDate(semanaActual[0]);\n const dia: string = this.weekService.convertDate(semana2[0]);\n // this.dialog.open(LoadingComponent);\n\n if(!habilitar) {\n this.plansService.controlPlanes(diaSemanaActual).subscribe(pending=> {\n const dialogRef = this.dialog.open(DialogComponent, {\n data: {\n iconClass: \"bigBlueIcon\",\n dia: dia,\n diaSemanaActual: diaSemanaActual,\n icon: habilitar? \"content_copy\" : \"send\",\n pending: pending,\n habilitar: habilitar\n }\n });\n \n },\n error => {\n console.error(error);\n if(error.error.message) {\n this.snack.openSnackBar(error.error.message);\n } else {\n this.snack.snackTranslate('snacks.error.generic');\n }\n });\n } else {\n const dialogRef = this.dialog.open(DialogComponent, {\n data: {\n iconClass: \"bigBlueIcon\",\n dia: dia,\n diaSemanaActual: diaSemanaActual,\n icon: habilitar? \"content_copy\" : \"send\",\n pending: null,\n habilitar: habilitar\n }\n });\n }\n \n }\n\n}\n\n","
\n
\n

{{ 'profile.data.edit' | translate }}

\n
\n \n
\n\n \n {{'profile.assingDialog.level' | translate}}\n \n {{level.name}}\n \n \n \n\n \n {{'profile.assingDialog.trainer' | translate}}\n \n {{trainer.name}}\n \n \n \n\n \n {{'profile.assingDialog.mode' | translate}}\n \n {{trainingType.name}}\n \n \n \n\n \n {{'profile.assingDialog.days' | translate}}\n \n {{day.value}} {{day.hour}}\n \n \n \n \n
\n
\n \n
\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { Level, PersonalTrainer, TrainingDay, TrainingType } from '../../../api/interfaces/user';\nimport { RegisterService } from '../../../api/services/register/register.service';\nimport { TrainingService } from '../../../api/services/training/training.service';\n\n@Component({\n selector: 'app-assign-dialog',\n templateUrl: './assign-dialog.component.html',\n styleUrls: ['./assign-dialog.component.scss']\n})\nexport class AssignDialogComponent implements OnInit {\n\n levels: Level[] = [];\n trainers: PersonalTrainer[] = [];\n trainingTypes: TrainingType[] = [];\n days: TrainingDay[] = [];\n\n userForm = new FormGroup({\n level: new FormControl(),\n trainer: new FormControl(),\n trainingType: new FormControl(),\n days: new FormControl(),\n });\n\n constructor(\n public dialog: MatDialog,\n private snack: SnackbarService,\n private registerService: RegisterService,\n private trainingService: TrainingService\n ) { }\n\n ngOnInit(): void {\n this.loadLevels();\n this.loadTrainers();\n this.loadTrainingType();\n this.loadDays();\n }\n\n loadLevels() {\n // this.trainingService.getLevels().subscribe( response=> {\n // this.levels = response;\n // },\n // error => {\n // console.error(error);\n // });\n // this.levels = [{\n // name: \"Iniciación\",\n // id_level: 1,\n // },\n // {\n // name: \"Intermedio\",\n // id_level: 2,\n // }];\n }\n\n loadTrainers() {\n // this.trainingService.getTrainers().subscribe( response=> {\n // this.trainers = response;\n // },\n // error => {\n // console.error(error);\n // });\n \n // this.trainers = [{\n // name: \"Victor\",\n // lastName: \"García\",\n // secondLastName: \"\",\n // user_id: 1\n // },\n // {\n // name: \"Rocío\",\n // lastName: \"Benito\",\n // secondLastName: \"\",\n // user_id: 2\n // }];\n }\n\n loadTrainingType() {\n // this.trainingService.getTrainingType().subscribe( response=> {\n // this.trainingTypes = response;\n // },\n // error => {\n // console.error(error);\n // });\n // this.trainingTypes = [{\n // mode:1,\n // name: \"Online\"\n // },\n // {\n // mode: 2,\n // name: \"Presencial\"\n // }\n // ]\n }\n\n loadDays() {\n \n // this.registerService.getTrainingDays().subscribe( response=> {\n // this.days = response;\n // },\n // error => {\n // console.error(error);\n // });\n \n this.days = [{\n value: \"Lunes y miércoles\",\n hour: \"19:00hs\",\n days: [1,3],\n id_trainingDay: 1,\n },\n {\n value: \"Miercoles y sábados\",\n hour: \"15:00hs\",\n days: [3,6],\n id_trainingDay: 2,\n }]\n }\n\n onSubmit() {\n // const { days, level, trainer, trainingType } = this.userForm.getRawValue();\n // let aux = {\n // id_trainingDay: days.id_trainingDay,\n // id_level: level.id_level,\n // id_trainer: trainer.user_id,\n // mode: trainingType.mode,\n // }\n\n // this.trainingService.patchStudentTrainingData(aux)\n // .subscribe(response => {\n // this.snack.snackTranslate('snacks.error.trainingDataPatch');\n // },\n // error => {\n // console.error(error);\n // this.snack.snackTranslate('snacks.sucess.updatingData.generic');\n // });\n }\n\n}\n","
\n
\n

{{'profile.resendMail.button'| translate}}

\n \n
\n \n \n
\n \n {{ 'forms.user.emailInput' | translate}}\n \n \n
\n
\n \n \n \n
\n\n\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { StudentService } from 'src/app/services/admin/student/student.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\n\n@Component({\n selector: 'app-resend-mail',\n templateUrl: './resend-mail.component.html',\n styleUrls: ['./resend-mail.component.scss']\n})\nexport class ResendMailComponent implements OnInit {\n\n waiting: boolean = false;\n\n studentForm = new FormGroup({\n email: new FormControl(),\n });\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n public dialog: MatDialog,\n private studentService: StudentService,\n private snack: SnackbarService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.studentForm.patchValue({email: this.data.email});\n }\n\n onSubmit() {\n this.waiting = true;\n const userId: number = parseInt(sessionStorage.getItem('id_usuario'),10);\n const { email } = this.studentForm.getRawValue();\n\n this.studentService.resendEmail(email, userId).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.resend');\n this.waiting = false;\n sessionStorage.setItem('email',email);\n this.sharedData.changeMessage(\"reloadMail\");\n this.dialog.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n this.waiting = false;\n });\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-navigation-button',\n templateUrl: './navigation-button.component.html',\n styleUrls: ['./navigation-button.component.scss']\n})\nexport class NavigationButtonComponent implements OnInit {\n\n @Input('path') path: string;\n\n constructor(\n private router: Router\n ) { }\n\n ngOnInit(): void {\n }\n\n navigate() {\n this.router.navigate([this.path]);\n }\n\n}\n","\n","
\n

{{'status.textPending' | translate}}

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

{{personalData.nombre}} {{personalData.apellido}} {{personalData.segundoApellido}}

\n
\n

{{ 'profile.header.trainer' | translate}}:

\n\n \n \n {{userForm.value.trainer.entrenadorNombre ? userForm.value.trainer.entrenadorNombre : userForm.value.trainer}}\n \n \n
\n \n
\n
\n \n
\n\n
\n

{{ 'profile.header.level' | translate}}:

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

{{ 'profile.header.status' | translate}}:

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

{{ 'profile.header.type' | translate}}:

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

\n \n {{ 'profile.header.status' | translate}}: \n \n \n
\n
\n

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

{{personalData.nombre}} {{personalData.apellido}} {{personalData.segundoApellido}}

\n\n
\n
\n

{{ 'profile.header.level' | translate}}:

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

{{ 'profile.header.trainer' | translate}}:

\n\n
\n \n\n \n \n \n {{userForm.value.trainer.entrenadorNombre ? userForm.value.trainer.entrenadorNombre : userForm.value.trainer}}\n \n \n
\n \n
\n
\n
\n
\n\n
\n

{{ 'profile.header.type' | translate}}:

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

{{ 'profile.header.status' | translate}}:

\n
\n \n
\n\n \n\n \n
\n
","import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { ChangeUserStatus, EntrenamientoDiaIndividual, EntrenamientoModelBroken, Level, Personal, PersonalTrainer, Training} from '../../../api/interfaces/user';\nimport { ImageService } from '../../../api/services/image/image.service';\nimport { TrainingTypeEnum } from '../../../enums/training-type';\nimport { StatusEnum } from '../../../enums/status';\nimport {MatDialog} from '@angular/material/dialog';\nimport { AssignDialogComponent } from '../assign-dialog/assign-dialog.component';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { TrainingService } from '../../../api/services/training/training.service';\nimport { GenericDialogComponent } from '../../generic-dialog/generic-dialog.component';\nimport { UserService } from '../../../api/services/user/user.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { PlanDatosDia } from '../../../api/interfaces/plans';\nimport { RegisterService } from '../../../api/services/register/register.service';\nimport { TrainingDays } from '../../../api/interfaces/register';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { saveAs } from 'file-saver';\nimport { ResendMailComponent } from '../resend-mail/resend-mail.component';\n@Component({\n selector: 'app-profile-header',\n templateUrl: './profile-header.component.html',\n styleUrls: ['./profile-header.component.scss']\n})\nexport class ProfileHeaderComponent implements OnInit {\n\n userHasImage: boolean = false;\n isMobile: boolean = false;\n isValid: boolean = false;\n @Input('avatarUrl') avatarUrl: string;\n TrainingTypeEnum = TrainingTypeEnum;\n StatusEnum = StatusEnum;\n ADMIN_ID : number = 1;\n showLevel: boolean = false;\n\n groups: TrainingDays[] = [];\n \n @Input('disableSave') disableSave: boolean;\n @Input('training') training: Training;\n @Input('personalData') personalData: Personal;\n @Input('user_id') user_id: number;\n @Input('isAdmin') isAdmin: boolean;\n @Input('isStudent') isStudent: boolean;\n @Input('status') status: string;\n @Input('datosTraining') datosTraining: EntrenamientoModelBroken;\n @Input('usuarioId') usuarioId: number;\n @Input('email') email: string;\n \n @ViewChild('levelSelect') levelSelect;\n @ViewChild('trainerSelect') trainerSelect;\n @Output() updateDataEvent = new EventEmitter();\n\n levels: Level[] = [];\n trainers: PersonalTrainer[] = [];\n\n userForm = new FormGroup({\n level: new FormControl(),\n trainer: new FormControl(),\n group: new FormControl()\n });\n\n name = 'Test display image';\n thumbnail: any;\n\n constructor(\n private imageService: ImageService,\n public dialog: MatDialog,\n private snack: SnackbarService,\n private trainingService: TrainingService,\n private userService: UserService,\n private mobileDetectorService: MobileDetectorService,\n private registerService: RegisterService,\n private sharedData: SharedDataService,\n private sanitizer: DomSanitizer\n ) { }\n\n ngOnInit(): void {\n this.getAvatar();\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.avatarUrl != null) {\n this.userHasImage = true;\n }\n this.loadLevels();\n this.loadTrainers();\n this.loadGroups();\n this.userForm.patchValue({level: this.training.level});\n this.userForm.patchValue({trainer: this.training.trainer});\n this.userForm.patchValue({group: this.datosTraining.grupo});\n this.checkValidSaveButton();\n }\n\n async selectFiles(event) {\n if(!this.isAdmin) {\n try {\n await this.imageService.uploadFile(event);\n this.getAvatar();\n } catch {\n this.avatarUrl=\"\";\n this.userHasImage = false;\n }\n }\n }\n\n async getAvatar() {\n this.avatarUrl = await this.imageService.getAvatarUrl(this.usuarioId);\n if(this.avatarUrl) {\n this.userHasImage = true;\n }\n }\n\n openDialog(){\n const dialogRef = this.dialog.open(AssignDialogComponent);\n\n dialogRef.afterClosed().subscribe(result => {\n //api call\n });\n }\n\n loadGroups() {\n this.registerService.getTrainingDays().subscribe( response=> {\n this.groups = response;\n this.groups.splice(0,1);\n },\n error => {\n console.error(error);\n });\n }\n\n loadLevels() {\n this.trainingService.getLevels().subscribe( response=> {\n this.levels = response;\n let remover: number = this.levels.findIndex(option => option.id == 1);\n if(remover != -1) {\n this.levels.splice(remover, 1);\n }\n },\n error => {\n console.error(error);\n });\n }\n\n loadTrainers() {\n this.trainingService.getTrainers().subscribe( response=> {\n this.trainers = response;\n },\n error => {\n console.error(error);\n });\n }\n\n openLevelSelect() {\n this.levelSelect.open();\n // this.showLevel = true;\n }\n\n openTrainerSelect() {\n this.trainerSelect.open();\n }\n\n saveLevel(level: Level) {\n this.userForm.patchValue({level: level});\n this.checkValidSaveButton();\n }\n\n saveTrainer(trainer: PersonalTrainer) {\n this.userForm.patchValue({trainer: trainer});\n this.checkValidSaveButton();\n }\n\n saveGroup(group: TrainingDays) {\n this.userForm.patchValue({group: group});\n this.checkValidSaveButton();\n }\n\n openSaveDialog() {\n const entrenamientoDiasPlan: PlanDatosDia[] = JSON.parse(sessionStorage.getItem('entrenamientoDiasPlan'));\n let text: string = \"\";\n if(entrenamientoDiasPlan) {\n const entrenamientoDiasPlanAdicionales: PlanDatosDia[] = entrenamientoDiasPlan.filter(dia => (dia.tipoDia == 'A' && dia.detalleDia == 'Descanso'));\n if(entrenamientoDiasPlanAdicionales.length > 0) {\n text = \"Hay uno o varios días donde el alumno indicó su disponibilidad y no fueron completados.\";\n }\n }\n\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea activar al alumno?\",\n iconClass: \"bigBlueIcon\",\n text: text,\n icon: \"error_outlined\",\n confirm: \"SI, ACTIVAR\",\n cancel: \"NO\"\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n let today = new Date().toISOString();\n if(result) {\n const entrenadorId: number = this.userForm.value.trainer.id;\n const entrenamientoNivelId: number = this.userForm.value.level.id;\n const entrenamientoGrupoId: number = this.userForm.value.group.entrenamientoGrupoId ? this.userForm.value.group.entrenamientoGrupoId: this.datosTraining.idGrupo;\n let changeUserStatus: ChangeUserStatus = {\n entrenamientoNivelId: entrenamientoNivelId,\n entrenadorId: entrenadorId,\n entrenamientoGrupoId: entrenamientoGrupoId,\n estado: \"A\",\n ultimaModificacion: today,\n ultimaModificacionPor: this.ADMIN_ID,\n };\n this.userService.changeUserStatus(changeUserStatus, this.user_id).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.updatingData.activate');\n this.afterSubmit();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.activate');\n })\n }\n });\n }\n\n afterSubmit() {\n this.updateDataEvent.emit();\n this.isValid = false;\n sessionStorage.setItem('alumnoIdCheck',this.user_id.toString());\n this.sharedData.changeMessage(\"reloadWeek2\");\n }\n\n openEditDialog() {\n\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea guardar los cambios?\",\n iconClass: \"bigBlueIcon\",\n text: \"\",\n icon: \"error_outlined\",\n confirm: \"SI\",\n cancel: \"NO\",\n showConfirmAsPrimary: true\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n let today = new Date().toISOString();\n if(result) {\n const entrenadorId: number = this.userForm.value.trainer.id;\n const entrenamientoNivelId: number = this.userForm.value.level.id;\n const entrenamientoGrupoId: number = this.userForm.value.group.entrenamientoGrupoId ? this.userForm.value.group.entrenamientoGrupoId: this.datosTraining.idGrupo;\n const changeUserStatus: ChangeUserStatus = {\n entrenamientoNivelId: entrenamientoNivelId,\n entrenadorId: entrenadorId,\n entrenamientoGrupoId: entrenamientoGrupoId,\n estado: null,\n ultimaModificacion: today,\n ultimaModificacionPor: this.ADMIN_ID,\n };\n this.userService.changeUserStatus(changeUserStatus, this.user_id).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.updatingData.generic');\n this.afterSubmit();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.trainingDataPatch');\n })\n }\n });\n }\n\n checkValidSaveButton() {\n const {level, trainer, group} = this.userForm.getRawValue();\n if( level.id != 1 && trainer && group ) {\n this.isValid = true;\n } else {\n this.isValid = false;\n }\n } \n\n openResendMailDialog() {\n this.dialog.open(ResendMailComponent, {\n data: {\n email: this.email\n }\n });\n }\n\n}\n","
\n \n \n {{ 'profile.statusHistoryTab.from' | translate}}\n \n \n \n \n \n \n \n \n \n\n \n {{ 'profile.statusHistoryTab.until' | translate}}\n \n \n \n \n \n \n \n \n \n\n \n {{'profile.statusHistoryTab.reasons' | translate}}\n \n {{motivo.motivoDescripcion}}\n \n \n \n\n \n\n
\n \n
\n
\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport {DateAdapter} from '@angular/material/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SuspensionAlumno, SuspensionMotivo } from '../../../../../api/interfaces/user';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\n\n@Component({\n selector: 'app-inactividad-inputs',\n templateUrl: './inactividad-inputs.component.html',\n styleUrls: ['./inactividad-inputs.component.scss']\n})\nexport class InactividadInputsComponent implements OnInit {\n\n isMobile: boolean = false;\n activo: boolean = true;\n\n minDateEnd: Date = new Date();\n minDate: Date = new Date();\n selected: Date;\n\n suspensionesForm = new FormGroup({\n fechaDesde: new FormControl(),\n fechaHasta: new FormControl(),\n suspensionMotivoId: new FormControl(),\n i: new FormControl(),\n id: new FormControl(),\n });\n\n\n\n @Output() removeSuspensionesEvent = new EventEmitter();\n @Output() addSuspensionesEvent: EventEmitter = new EventEmitter();\n \n @Input('i') i?: number;\n @Input('disable') disable?: boolean;\n @Input('suspensiones') suspensiones? : SuspensionAlumno;\n @Input('motivos') motivos: SuspensionMotivo[];\n\n constructor(\n private _adapter: DateAdapter,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.sharedData.currentMessage.subscribe(message => {\n if(message ==\"editsuspensiones\") {\n this.suspensionesForm.controls['fechaDesde'].enable();\n this.suspensionesForm.controls['fechaHasta'].enable();\n this.suspensionesForm.controls['suspensionMotivoId'].enable();\n }\n });\n this.isMobile = this.mobileDetectorService.isMobile();\n this.addSuspensiones();\n this._adapter.setLocale('es');\n if(this.suspensiones) {\n this.suspensionesForm.patchValue({fechaDesde: this.suspensiones.fechaDesde});\n this.suspensionesForm.patchValue({fechaHasta: this.suspensiones.fechaHasta});\n this.suspensionesForm.patchValue({suspensionMotivoId: this.suspensiones.suspensionMotivoId});\n this.suspensionesForm.patchValue({id: this.suspensiones.id}); \n this.suspensionesForm.patchValue({i: this.i}); \n }\n if(this.disable) {\n this.suspensionesForm.controls['fechaDesde'].disable();\n this.suspensionesForm.controls['fechaHasta'].disable();\n this.suspensionesForm.controls['suspensionMotivoId'].disable();\n }\n this.suspensionesForm.statusChanges\n .subscribe(val => {\n if(this.suspensionesForm.valid) {\n this.addSuspensiones();\n }\n });\n }\n\n removeSuspensiones() {\n const aux : any = {\n id : this.suspensiones.id,\n i : this.i\n }\n if(!this.suspensiones.editable) {\n\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea eliminar la baja parcial?\",\n iconClass: \"bigGreyIcon\",\n text: \"El alumno volverá a recibir los planes de entreno\",\n icon: \"error_outlined\",\n cancel: \"ELIMINAR\",\n confirm: \"NO\"\n }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (!result) {\n this.removeSuspensionesEvent.emit(aux);\n }\n });\n } else {\n this.removeSuspensionesEvent.emit(aux);\n }\n \n }\n\n addSuspensiones() {\n const { fechaDesde } = this.suspensionesForm.getRawValue();\n if(fechaDesde) {\n this.minDateEnd = new Date(fechaDesde);\n } else {\n this.minDateEnd = new Date();\n }\n this.addSuspensionesEvent.emit(this.suspensionesForm.value);\n }\n\n}\n","\n
\n\n

{{'profile.statusHistoryTab.inactivity.title' | translate}}

\n \n\n \n
\n\n
{{'profile.statusHistoryTab.inactivity.notEnded' | translate}}
\n
\n \n \n
\n\n
\n
{{'profile.statusHistoryTab.inactivity.ended' | translate}}
\n
\n \n \n
\n
\n\n \n \n\n \n

\n {{'profile.statusHistoryTab.inactivity.empty' | translate}}\n

\n
","\nimport { Component, OnInit, Input} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IsSameObjectService } from 'src/app/services/isSameObject/is-same-object.service';\nimport { SuspenderAlumno, SuspensionAlumno, SuspensionMotivo } from '../../../../../api/interfaces/user';\nimport { StudentService } from '../../../../../services/admin/student/student.service';\nimport { MobileDetectorService } from '../../../../../services/mobileDetector/mobile-detector.service';\nimport { SnackbarService } from '../../../../../utils/snackbar/snackbar.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-inactividad-card',\n templateUrl: './inactividad-card.component.html',\n styleUrls: ['./inactividad-card.component.scss']\n})\nexport class InactividadCardComponent implements OnInit {\n\n @Input('alumnoId') alumnoId: number;\n\n @Input('estado') estado: string;\n\n suspensionesPasadas: SuspensionAlumno[] = [];\n suspensiones : SuspensionAlumno[] = [];\n\n motivos: SuspensionMotivo[] = [];\n\n backgroundForm = new FormGroup({\n suspensiones: new FormControl(),\n });\n\n objetivosHasContent: boolean = false;\n suspensionesValid: boolean = false;\n suspensionesEmpty: boolean = false;\n showSuspensiones: boolean = false;\n showEnded: boolean = false;\n isMobile: boolean = false;\n checked: boolean = false;\n disable: boolean = true;\n noValid: boolean = true;\n\n iconClass: string = \"\";\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private isSameObject: IsSameObjectService,\n private studentService: StudentService,\n private snack: SnackbarService,\n public dialog: MatDialog,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.suspensiones.length >= 1) {\n this.backgroundForm.patchValue({suspensiones: true});\n this.checked = true;\n }\n this.checkActivos();\n this.getSuspensiones();\n this.getMotivos();\n }\n\n changeSuspensiones(mode: boolean) {\n this.showSuspensiones = mode;\n this.suspensionesEmpty = false;\n this.checked = !this.checked;\n if(!mode) {\n this.suspensionesValid = true;\n sessionStorage.removeItem('suspensiones');\n this.deleteAll();\n } else {\n this.suspensionesValid = false;\n }\n this.checkActivos();\n }\n\n deleteAll() {\n if(!this.disable) {\n this.suspensiones = null;\n }\n this.checkActivos();\n }\n\n edit() {\n this.disable = !this.disable;\n this.checkActivos();\n if(this.disable) {\n this.suspensiones.forEach((suspension,index) => {\n if(suspension.add) {\n this.postSuspension(index);\n }\n });\n }\n }\n\n emptySuspensiones(mode: boolean) {\n this.suspensionesEmpty = true;\n this.iconClass = \"greyIcon\";\n }\n\n addSuspensionesEvent(aux: SuspensionAlumno) {\n if(this.suspensiones[aux.i]) {\n this.suspensiones[aux.i].fechaDesde = aux.fechaDesde;\n this.suspensiones[aux.i].fechaHasta = aux.fechaHasta;\n this.suspensiones[aux.i].suspensionMotivoId = aux.suspensionMotivoId;\n this.suspensiones[aux.i].add = true;\n if(aux.fechaDesde && aux.fechaHasta && aux.suspensionMotivoId) {\n if(aux.fechaDesde > aux.fechaHasta) {\n this.noValid = true;\n } else {\n this.noValid = false;\n }\n }\n }\n }\n\n checkActivos() {\n // this.objetivosHasContent = this.suspensiones.some(element => element.activo);\n }\n\n getSuspensiones() {\n this.suspensiones = [];\n this.studentService.getSuspensionesAlumno(this.alumnoId).subscribe(response => {\n if(response.length == 0) {\n this.emptySuspensiones(true);\n } else {\n this.suspensionesEmpty = false;\n }\n let suspensionesAux: SuspensionAlumno[] = response;\n suspensionesAux.forEach(suspension => {\n //flags auxiliares\n suspension.delete = false;\n suspension.add = false;\n suspension.editable = false;\n //discriminacion por fecha pasada\n if(new Date(suspension.fechaHasta) < new Date()) {\n this.suspensionesPasadas.push(suspension);\n } else {\n this.suspensiones.push(suspension);\n }\n });\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n getMotivos() {\n this.suspensiones = [];\n this.studentService.getSuspensionesMotivos().subscribe(response => {\n this.motivos = response;\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n removeSuspensionesEvent(aux) {\n if(aux.id) {\n this.delete(aux.id);\n } else {\n this.suspensiones.splice(aux.i,1);\n this.disable = !this.disable;\n }\n \n }\n\n addSuspension() {\n this.suspensiones.push({ fechaDesde: \"\", fechaHasta: \"\", suspensionMotivoId: 0, editable: true });\n }\n\n delete(i: number) {\n this.studentService.deleteSuspension(i).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.removeSuspension');\n this.getSuspensiones();\n this.sharedData.changeMessage(\"updateStatus\");\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n }); \n }\n\n postSuspension(i: number) {\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea crear una baja parcial?\",\n iconClass: \"bigGreyIcon\",\n text: \"El alumno dejará de recibir el plan de entreno durante el plazo seleccionado. Luego del mismo, la reactivación será automática.\",\n icon: \"error_outlined\",\n cancel: \"NO\",\n confirm: \"CREAR\"\n }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n const suspender: SuspenderAlumno = {\n fechaDesde: this.suspensiones[i].fechaDesde,\n fechaHasta: this.suspensiones[i].fechaHasta,\n suspensionMotivoId: this.suspensiones[i].suspensionMotivoId,\n }\n this.studentService.postSuspenderAlumno(this.alumnoId,suspender).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.addSuspension');\n this.getSuspensiones();\n },\n error => {\n this.snack.openSnackBar(error.error.message);\n this.disable = false;\n }); \n }\n });\n }\n\n toggleEnded() {\n this.showEnded = !this.showEnded;\n }\n\n}\n\n","\n
\n

{{'profile.statusHistoryTab.disabled.title' | translate}}

\n \n \n
\n\n

{{'profile.statusHistoryTab.disabled.text' | translate}} {{motivoBaja.descripcionMotivoBaja}}

\n \n \n
\n \n {{'profile.statusHistoryTab.reasons' | translate}}\n \n {{motivo.descripcionMotivoBaja}}\n \n \n \n\n
\n \n
\n \n
\n
\n
","import { Component, Input, OnInit } from '@angular/core';\nimport { StatusEnum } from '../../../../enums/status';\nimport { StudentService } from '../../../../services/admin/student/student.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GenericDialogComponent } from '../../../generic-dialog/generic-dialog.component';\nimport { MotivoBaja } from 'src/app/api/interfaces/user';\nimport { FormGroup, FormControl } from '@angular/forms';\n\n@Component({\n selector: 'app-disable',\n templateUrl: './disable.component.html',\n styleUrls: ['./disable.component.scss']\n})\nexport class DisableComponent implements OnInit {\n\n @Input('motivoBaja') motivoBaja: MotivoBaja;\n @Input('usuarioId') usuarioId: number;\n @Input('estado') estado: string;\n\n motivosBaja: MotivoBaja[] = [];\n\n showForm: boolean = false;\n \n disableForm = new FormGroup({\n motivoId: new FormControl(),\n });\n\n constructor(\n private studentService: StudentService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getMotivosBaja();\n }\n\n getMotivosBaja() {\n this.studentService.getMotivosBaja().subscribe(response => {\n this.motivosBaja = response;\n\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n onSubmit() {\n let aux: string = StatusEnum.ACTIVADO;\n let title: string = \"¿Desea reactivar al alumno?\";\n let text: string = \"El alumno recuperará el acceso a la plataforma y a su documentación.\"\n let confirm: string = \"ACTIVAR\";\n let cancel: string = \"NO\";\n if(this.estado == StatusEnum.ACTIVADO) {\n aux = StatusEnum.INACTIVE;\n title = \"¿Desea dar de baja al alumno?\";\n text = \"El alumno no tendrá acceso a la plataforma. En el futuro podrás reactivarlo si lo deseas. Su documentación no se perderá.\"\n confirm = \"DESACTIVAR\";\n cancel = \"NO\";\n }\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: title,\n iconClass: \"bigGreyIcon\",\n text: text,\n icon: \"error_outline\",\n confirm: confirm,\n cancel: cancel,\n showConfirmAsPrimary: true\n }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if(!this.disableForm.value.motivoId) {\n this.disableForm.value.motivoId = \"1\";\n }\n this.studentService.cambiarEstado(this.usuarioId, aux, this.disableForm.value.motivoId).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.updatingData.generic');\n this.sharedData.changeMessage(\"updateStatus\");\n this.showForm = false;\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n }); \n }\n\n toggleForm() {\n this.showForm = !this.showForm;\n }\n\n}\n","\n

{{'profile.statusHistoryTab.history' | translate}}

\n
\n

{{element.fechaModificacion | date:'dd/MM/YYY'}}

\n

\n {{'status.P' | translate}}\n

\n\n

\n {{'status.A' | translate}}\n

\n\n

\n {{'status.C' | translate}}\n

\n\n

\n {{'status.I' | translate}}\n

\n\n

\n {{'status.S' | translate}}\n

\n
\n
\n\n\n \n","import { Component, OnInit, Input } from '@angular/core';\nimport { HistorialSuspension } from '../../../../api/interfaces/user';\nimport { StatusEnum } from '../../../../enums/status';\nimport { StudentService } from '../../../../services/admin/student/student.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\n\n@Component({\n selector: 'app-status-history',\n templateUrl: './status-history.component.html',\n styleUrls: ['./status-history.component.scss']\n})\nexport class StatusHistoryComponent implements OnInit {\n\n @Input('alumnoId') alumnoId: number;\n StatusEnum = StatusEnum;\n historial: HistorialSuspension[] = [];\n constructor(\n private studentService: StudentService,\n private snack: SnackbarService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.sharedData.currentMessage.subscribe(message => {\n if(message ==\"updateStatus\") {\n this.getHistorial();\n }\n });\n this.getHistorial();\n }\n\n getHistorial() {\n this.historial = [];\n this.studentService.getHistorialSuspensionesAlumno(this.alumnoId).subscribe(response => {\n this.historial = response;\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { MotivoBaja } from 'src/app/api/interfaces/user';\n\n@Component({\n selector: 'app-status-register-card',\n templateUrl: './status-register-card.component.html',\n styleUrls: ['./status-register-card.component.scss']\n})\nexport class StatusRegisterCardComponent implements OnInit {\n\n @Input('estado') estado: string;\n @Input('alumnoId') alumnoId: number;\n @Input('usuarioId') usuarioId: number;\n @Input('motivoBaja') motivoBaja: MotivoBaja;\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n
\n \n \n
\n \n
\n\n","
\n\n

{{ 'profile.data.personal' | translate }}

\n

{{ 'profile.data.bank' | translate }}

\n

{{ 'profile.data.contact' | translate }}

\n

{{ 'profile.data.physiological' | translate }}

\n

{{ 'registration.stepThree.background' | translate}}

\n

{{ 'registration.stepThree.objetives.title' | translate}}

\n

{{ 'registration.stepThree.achievements' | translate}}

\n \n \n\n\n \n \n \n \n
\n","import { Component, OnInit,Input,Output,EventEmitter } from '@angular/core';\nimport { LocalAuxData } from 'src/app/api/interfaces/user';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-title',\n templateUrl: './title.component.html',\n styleUrls: ['./title.component.scss']\n})\nexport class TitleComponent implements OnInit {\n\n @Input('bank') bank: boolean;\n @Input('valid') valid: boolean;\n @Input('disable') disable: boolean;\n @Input('contact') contact: boolean;\n @Input('personal') personal: boolean;\n @Input('objetives') objetives: boolean;\n @Input('background') background: boolean;\n @Input('physiological') physiological: boolean;\n @Input('achievements') achievements: boolean;\n\n @Output() editEvent = new EventEmitter();\n @Output() onSubmitEvent = new EventEmitter();\n\n objetivesValid: boolean = false;\n achievementsValid: boolean = false;\n showEdit: boolean = true;\n\n constructor(\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.sharedData.currentMessage.subscribe(message => {\n //validacion de objetivos\n if (message === \"objetivesValid\") {\n this.objetivesValid = true;\n }\n if (message === \"objetivesInvalid\") {\n this.objetivesValid = false;\n }\n\n //validacion de metas\n if (message === \"achievementsValid\") {\n const auxruta: LocalAuxData = JSON.parse(sessionStorage.getItem('localAuxDataruta'));\n const auxpista: LocalAuxData = JSON.parse(sessionStorage.getItem('localAuxDatapista'));\n const auxtrail: LocalAuxData = JSON.parse(sessionStorage.getItem('localAuxDatatrail'));\n const auxultra: LocalAuxData = JSON.parse(sessionStorage.getItem('localAuxDataultra'));\n\n let contadorTotal: number = 0;\n let contadorValid: number = 0;\n if(auxruta) {\n contadorTotal++;\n if(auxruta.valid) {\n contadorValid++;\n }\n }\n if(auxpista) {\n contadorTotal++;\n if(auxpista.valid) {\n contadorValid++;\n }\n }\n if(auxtrail) {\n contadorTotal++;\n if(auxtrail.valid) {\n contadorValid++;\n }\n }\n if(auxultra) {\n contadorTotal++;\n if(auxultra.valid) {\n contadorValid++;\n }\n }\n\n // this.achievementsValid = true;\n this.achievementsValid = (contadorTotal == contadorValid);\n }\n if (message === \"achievementsInvalid\") {\n this.achievementsValid = false;\n }\n\n });\n const estado: string = sessionStorage.getItem('estado');\n if(estado != 'A') {\n this.showEdit = false;\n }\n }\n\n edit() {\n this.editEvent.emit(!this.disable);\n if(this.objetives) {\n this.sharedData.changeMessage(\"editObjetives\");\n }\n if(this.achievements) {\n this.sharedData.changeMessage(\"editAchievements\");\n }\n }\n\n onSubmit() {\n this.onSubmitEvent.emit();\n if(this.objetives) {\n this.sharedData.changeMessage(\"saveObjetives\");\n }\n if(this.achievements) {\n this.sharedData.changeMessage(\"saveAchievements\");\n }\n }\n\n}\n","\n
\n \n {{ 'forms.user.name' | translate}}\n \n \n\n \n {{ 'forms.user.lastName' | translate}}\n \n \n\n \n {{ 'forms.user.secondLastname' | translate}}\n \n \n \n \n {{ 'forms.user.birthDate' | translate}}\n \n \n \n \n \n \n \n \n \n\n \n {{ 'forms.user.documentType' | translate}}\n \n \n {{documento.documento}}\n \n \n \n\n \n {{ userForm.value.documentoTipo }}\n \n \n\n \n {{'forms.user.country' | translate}}\n \n \n {{country.pais}}\n \n \n \n \n \n {{ 'forms.user.residence' | translate}}\n \n \n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { Country, Documento } from '../../../../api/interfaces/register';\nimport { Personal } from '../../../../api/interfaces/user';\nimport { RegisterService } from '../../../../api/services/register/register.service';\n\n@Component({\n selector: 'app-personal-data',\n templateUrl: './personal-data.component.html',\n styleUrls: ['./personal-data.component.scss']\n})\nexport class PersonalDataComponent implements OnInit {\n\n disable: boolean = true;\n maxDate: Date = new Date();\n documentos: Documento[] = [];\n countrys: Country[];\n title: string = `{{ 'profile.data.personal' | translate }}`\n @Input('personalData') personalData : Personal;\n @Output() onSubmitPersonalEvent = new EventEmitter();\n\n userForm = new FormGroup({\n nombre: new FormControl({ value: '', disabled: this.disable }),\n apellido: new FormControl({ value: '', disabled: this.disable }),\n segundoApellido: new FormControl({ value: '', disabled: this.disable }),\n numeroDocumento: new FormControl({ value: '', disabled: this.disable }, [Validators.pattern(/^[a-zA-Z0-9]+$/),]),\n documentoTipo: new FormControl({ value: '', disabled: this.disable}),\n fechaNacimiento: new FormControl({ value: '', disabled: this.disable }),\n pais: new FormControl({ value: '', disabled: this.disable }),\n residencia: new FormControl({ value: '', disabled: this.disable }),\n });\n\n \n constructor(\n private registerService: RegisterService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n if(this.personalData.pais) {\n this.patch();\n }\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"updateProfileData\") {\n this.patch();\n }\n });\n this.getCountry();\n this.getTiposDocumento();\n }\n\n patch() {\n this.userForm.patchValue({nombre: this.personalData.nombre});\n this.userForm.patchValue({apellido: this.personalData.apellido});\n this.userForm.patchValue({segundoApellido: this.personalData.segundoApellido});\n this.userForm.patchValue({numeroDocumento: this.personalData.numeroDocumento});\n this.userForm.patchValue({documentoTipo: this.personalData.documentoTipo.documento});\n this.userForm.patchValue({fechaNacimiento : this.personalData.fechaNacimiento });\n this.userForm.patchValue({pais : this.personalData.pais.pais });\n this.userForm.patchValue({residencia: this.personalData.residencia });\n }\n\n edit() {\n this.disable = !this.disable;\n if(!this.disable) {\n this.userForm.controls['nombre'].enable();\n this.userForm.controls['apellido'].enable();\n this.userForm.controls['segundoApellido'].enable();\n this.userForm.controls['numeroDocumento'].enable();\n this.userForm.controls['documentoTipo'].enable();\n this.userForm.controls['pais'].enable();\n this.userForm.controls['residencia'].enable();\n \n } else {\n this.userForm.controls['nombre'].disable();\n this.userForm.controls['apellido'].disable();\n this.userForm.controls['segundoApellido'].disable();\n this.userForm.controls['numeroDocumento'].disable();\n this.userForm.controls['documentoTipo'].disable();\n this.userForm.controls['pais'].disable();\n this.userForm.controls['residencia'].disable();\n }\n }\n\n onSubmit() {\n this.edit();\n const indexDocumento: number = this.documentos.findIndex(documento => documento.documento == this.userForm.value.documentoTipo);\n const indexPais: number = this.countrys.findIndex(country => country.pais == this.userForm.value.pais);\n\n this.userForm.value.documentoTipo = this.documentos[indexDocumento];\n this.userForm.value.pais = this.countrys[indexPais];\n\n this.onSubmitPersonalEvent.emit(this.userForm.value);\n this.userForm.value.documentoTipo = this.documentos[indexDocumento].documento;\n\n this.userForm.value.pais = this.countrys[indexPais].pais;\n }\n\n getCountry() {\n this.registerService.getCountry()\n .subscribe(response => {\n this.countrys = response;\n },\n error => {\n console.error(error);\n });\n }\n\n getTiposDocumento() {\n this.registerService.getTiposDocumento()\n .subscribe(response => {\n this.documentos = response;\n },\n error => {\n console.error(error);\n });\n }\n\n saveCountry(country : Country) {\n this.userForm.patchValue({pais: country});\n }\n\n}","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { Contact } from '../../../../api/interfaces/user';\n\n@Component({\n selector: 'app-contact-data',\n templateUrl: './contact-data.component.html',\n styleUrls: ['./contact-data.component.scss']\n})\nexport class ContactDataComponent implements OnInit {\n\n disable: boolean = true;\n @Input('contactData') contactData: Contact;\n @Output() onSubmitContactEvent = new EventEmitter();\n contactForm = new FormGroup({\n email: new FormControl({ value: '', disabled: this.disable }),\n prefijoCelular: new FormControl({ value: '', disabled: this.disable }),\n numeroCelular: new FormControl({ value: '', disabled: this.disable }),\n prefijoEmergencia: new FormControl({ value: '', disabled: this.disable }),\n numeroEmergencia: new FormControl({ value: '', disabled: this.disable }),\n });\n\n constructor(\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.patch();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"updateProfileData\") {\n this.patch();\n }\n });\n }\n\n patch() {\n this.contactForm.patchValue({email: this.contactData.email});\n this.contactForm.patchValue({numeroCelular: this.contactData.numeroCelular});\n this.contactForm.patchValue({numeroEmergencia: this.contactData.numeroEmergencia});\n this.contactForm.patchValue({prefijoCelular: this.contactData.prefijoCelular});\n this.contactForm.patchValue({prefijoEmergencia: this.contactData.prefijoEmergencia});\n }\n\n edit() {\n this.disable = !this.disable;\n if(!this.disable) {\n this.contactForm.controls['email'].enable();\n this.contactForm.controls['numeroCelular'].enable();\n this.contactForm.controls['numeroEmergencia'].enable();\n this.contactForm.controls['prefijoCelular'].enable();\n this.contactForm.controls['prefijoEmergencia'].enable();\n } else {\n this.contactForm.controls['email'].disable();\n this.contactForm.controls['numeroCelular'].disable();\n this.contactForm.controls['numeroEmergencia'].disable();\n this.contactForm.controls['prefijoCelular'].disable();\n this.contactForm.controls['prefijoEmergencia'].disable();\n }\n }\n\n onSubmit() {\n this.edit();\n this.onSubmitContactEvent.emit(this.contactForm.value);\n }\n\n}\n","\n\n
\n \n\n \n {{ 'forms.user.prefix' | translate}}\n \n \n\n \n {{ 'forms.contact.phone' | translate}}\n \n \n\n \n {{ 'forms.user.prefix' | translate}}\n \n \n\n \n {{ 'forms.user.emergencyPhone' | translate}}\n \n \n\n \n {{ 'forms.contact.email' | translate}}\n \n \n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { Physiological } from '../../../../api/interfaces/user';\n\n@Component({\n selector: 'app-physiological-data',\n templateUrl: './physiological-data.component.html',\n styleUrls: ['./physiological-data.component.scss']\n})\nexport class PhysiologicalDataComponent implements OnInit {\n\n disable: boolean = true;\n @Input('physiologicalData') physiologicalData: Physiological;\n @Output() onSubmitPhysiologicalEvent = new EventEmitter();\n\n physiologicalForm = new FormGroup({\n peso: new FormControl({ value: '', disabled: this.disable }),\n altura: new FormControl({ value: '', disabled: this.disable }),\n });\n constructor(\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.patch();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"updateProfileData\") {\n this.patch();\n }\n });\n }\n\n patch() {\n this.physiologicalForm.patchValue({peso: this.physiologicalData.peso});\n this.physiologicalForm.patchValue({altura: this.physiologicalData.altura});\n }\n\n edit() {\n this.disable = !this.disable;\n if(!this.disable) {\n this.physiologicalForm.controls['peso'].enable();\n this.physiologicalForm.controls['altura'].enable();\n } else {\n this.physiologicalForm.controls['peso'].disable();\n this.physiologicalForm.controls['altura'].disable();\n }\n }\n\n onSubmit() {\n this.edit();\n this.onSubmitPhysiologicalEvent.emit(this.physiologicalForm.value);\n \n }\n\n}\n","\n\n
\n\n \n {{ 'forms.physiological.weight' | translate}}\n \n kg\n \n\n \n {{ 'forms.physiological.height' | translate}}\n \n cm\n \n \n
\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Validators, FormControl, FormGroup } from '@angular/forms';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { Bank, DatosBancario } from '../../../../api/interfaces/register';\n\n@Component({\n selector: 'app-bank-data',\n templateUrl: './bank-data.component.html',\n styleUrls: ['./bank-data.component.scss']\n})\nexport class BankDataComponent implements OnInit {\n\n disable: boolean = true;\n isAdmin: boolean = true;\n\n @Input('alumnosDatosBancario') alumnosDatosBancario: DatosBancario\n @Output() onSubmitBankEvent = new EventEmitter();\n\n bankForm = new FormGroup({\n entidad: new FormControl({ value: '', disabled: this.disable }),\n claveBancaria: new FormControl({ value: '', disabled: this.disable }, [\n Validators.pattern(/^[a-zA-Z0-9]+$/),\n Validators.minLength(24),\n Validators.maxLength(24),\n ]),\n arancel: new FormControl({ value: '', disabled: this.disable }),\n });\n\n constructor(\n private sharedData: SharedDataService,\n private rol: RolService\n ) { }\n\n ngOnInit(): void {\n this.patch();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"updateBank\") {\n this.patch();\n }\n });\n this.isAdmin = this.rol.isAdmin();\n }\n\n patch() {\n this.bankForm.patchValue({entidad: this.alumnosDatosBancario.entidad});\n this.bankForm.patchValue({claveBancaria: this.alumnosDatosBancario.claveBancaria});\n this.bankForm.patchValue({arancel: this.alumnosDatosBancario.arancel});\n }\n\n edit() {\n this.disable = !this.disable;\n if(!this.disable) {\n this.bankForm.controls['entidad'].enable();\n this.bankForm.controls['claveBancaria'].enable();\n if(this.isAdmin) {\n this.bankForm.controls['arancel'].enable();\n }\n } else {\n this.bankForm.controls['entidad'].disable();\n this.bankForm.controls['claveBancaria'].disable();\n this.bankForm.controls['arancel'].disable();\n }\n }\n\n onSubmit() {\n this.edit();\n this.onSubmitBankEvent.emit(this.bankForm.value);\n }\n}\n","\n
\n \n {{ 'forms.bank.entityInput' | translate}}\n \n \n\n \n {{ 'forms.bank.codeInput' | translate}}\n \n {{ 'forms.bank.hint1' | translate}} \n {{bankForm.value.claveBancaria?.length || 0}} / 24\n \n\n
\n\n \n \n {{ 'forms.bank.amount' | translate}}\n \n \n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Bank, DatosBancario } from '../../../api/interfaces/register';\nimport { Physiological, Personal, Contact } from '../../../api/interfaces/user';\nimport { IsSameObjectService } from '../../../services/isSameObject/is-same-object.service';\n\n@Component({\n selector: 'app-all-data',\n templateUrl: './all-data.component.html',\n styleUrls: ['./all-data.component.scss']\n})\nexport class AllDataComponent implements OnInit {\n\n @Input('physiologicalData') physiologicalData: Physiological;\n @Input('personalData') personalData : Personal;\n @Input('alumnosDatosBancario') alumnosDatosBancario: DatosBancario;\n @Input('contactData') contactData: Contact;\n @Output() editPersonalEvent = new EventEmitter();\n @Output() editPhysiologicalEvent = new EventEmitter();\n @Output() editBankEvent = new EventEmitter();\n @Output() editContactEvent = new EventEmitter();\n\n onSubmitPersonal(auxPersonal: Personal) {\n if(!this.isSameObject.isSame(auxPersonal, this.personalData)) {\n this.editPersonalEvent.emit(auxPersonal);\n }\n }\n\n onSubmitPhysiological(auxPhysiological: Physiological) {\n if(!this.isSameObject.isSame(auxPhysiological, this.physiologicalData)) {\n\n this.editPhysiologicalEvent.emit(auxPhysiological);\n }\n }\n\n // onSubmitDomicile(auxDomicile: Domicile) {\n // this.domicileFormNotChanged = this.isSameObject.isSame(auxDomicile,this.domicileData);\n // }\n\n onSubmitBank(auxBank: DatosBancario) {\n if(!this.isSameObject.isSame(auxBank, this.alumnosDatosBancario)) {\n this.editBankEvent.emit(auxBank);\n }\n }\n\n onSubmitContact(auxContact: Contact) {\n if(!this.isSameObject.isSame(auxContact, this.contactData)) {\n this.editContactEvent.emit(auxContact);\n }\n }\n\n constructor(\n private isSameObject: IsSameObjectService,\n ) { }\n\n ngOnInit(): void {\n }\n\n}","\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
","
\n

{{ 'registration.stepThree.background' | translate}}

\n

{{ 'registration.stepThree.question1.question' | translate}}

\n\n \n \n {{background.name}}\n \n \n

{{backgroundForm.value.background}}

\n\n \n\n

{{ 'registration.stepThree.question2' | translate}}

\n \n \n {{day.number}}\n \n \n

{{backgroundForm.value.days}}

\n\n \n\n

{{ 'registration.stepThree.question3' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.trainingWeek?.length || 0}} / 250\n \n

{{backgroundForm.value.trainingWeek}}

\n\n \n\n

{{ 'registration.stepThree.question4' | translate}}

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

{{backgroundForm.value.condition}}

\n\n
\n \n\n

{{ 'registration.stepThree.question5' | translate}}

\n \n\n \n {{'registration.stepThree.genericAnswers.yes' | translate}}\n\n \n {{ 'registration.stepThree.workName' | translate}}\n \n {{backgroundForm.value.complement?.length || 0}} / 250\n \n \n {{'registration.stepThree.genericAnswers.no' | translate}}\n \n

\n {{backgroundForm.value.complement ? backgroundForm.value.complement : 'No'}}\n

\n\n \n\n

{{ 'registration.stepThree.question6' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.restAndFood?.length || 0}} / 250\n \n

{{backgroundForm.value.restAndFood}}

\n\n \n\n

{{ 'registration.stepThree.question7' | translate}}

\n \n {{ 'registration.stepThree.genericAnswers.tellUs' | translate}}\n \n {{backgroundForm.value.shoes?.length || 0}} / 50\n \n

{{backgroundForm.value.shoes}}

\n
","import { Component, OnInit, ChangeDetectorRef, Input } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { NameAndCheck, NumberAndCheck } from '../../../../api/interfaces/user';\nimport { Condition, Antecedente } from '../../../../api/interfaces/register';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\n\n@Component({\n selector: 'app-background',\n templateUrl: './background.component.html',\n styleUrls: ['./background.component.scss']\n})\nexport class BackgroundComponent implements OnInit {\n\n backgrounds: NameAndCheck[] = [];\n days: NumberAndCheck[] = [\n {\n number: 0,\n check: false\n },\n {\n number: 1,\n check: false\n },\n {\n number: 2,\n check: false\n },\n {\n number: 3,\n check: false\n },\n {\n number: 4,\n check: false\n },\n {\n number: 5,\n check: false\n },{\n number: 6,\n check: false\n },\n {\n number: 7,\n check: false\n },\n ];\n\nconditions: Condition[] = [\n {name:\"Muy malo\", selected: false, index: 0},\n {name:\"Malo\", selected: false, index: 1},\n {name:\"Regular\", selected: false, index: 2},\n {name:\"Bueno\", selected: false, index: 3},\n {name:\"Muy bueno\", selected: false, index: 4}\n];\n\n showObjetives: boolean = false;\n showComplements: boolean = false;\n isMobile: boolean = false;\n disable: boolean = true;\n\n complements: string[] = [];\n\n @Input('antecedente') antecedente: Antecedente[];\n\n constructor(\n private translate: TranslateService,\n private cdr: ChangeDetectorRef,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n backgroundForm = new FormGroup({\n background: new FormControl(),\n days: new FormControl(),\n trainingWeek: new FormControl(),\n condition: new FormControl(),\n complement: new FormControl(),\n restAndFood: new FormControl(),\n shoes: new FormControl()\n });\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n\n this.getAnswersQuestionFive();\n this.patchValues();\n }\n\n getAnswersQuestionFive() {\n this.translate\n .get([\n 'registration.stepThree.genericAnswers.yes',\n 'registration.stepThree.genericAnswers.no',\n ])\n .subscribe(translations => {\n this.complements.push(translations['registration.stepThree.genericAnswers.yes']);\n this.complements.push(translations['registration.stepThree.genericAnswers.no']);\n });\n }\n\n getAnswersQuestionOne() {\n let aux : NameAndCheck = {\n name: \"\",\n check: false\n }\n this.translate\n .get([\n 'registration.stepThree.question1.answer1',\n 'registration.stepThree.question1.answer2',\n 'registration.stepThree.question1.answer3',\n 'registration.stepThree.question1.answer4',\n ])\n .subscribe(translations => {\n this.backgrounds.push({name: translations['registration.stepThree.question1.answer1'],check: this.loadingCheck(translations['registration.stepThree.question1.answer1'])});\n this.backgrounds.push({name:translations['registration.stepThree.question1.answer2'],check: this.loadingCheck(translations['registration.stepThree.question1.answer2'])});\n this.backgrounds.push({name:translations['registration.stepThree.question1.answer3'],check: this.loadingCheck(translations['registration.stepThree.question1.answer3'])});\n this.backgrounds.push({name:translations['registration.stepThree.question1.answer4'],check: this.loadingCheck(translations['registration.stepThree.question1.answer4'])});\n });\n }\n\n loadingCheck(name: string) {\n let response: boolean = false;\n if(name === this.backgroundForm.value.background) {\n response = true;\n }\n return response;\n }\n\n checkDays() {\n this.days.forEach(day => {\n if(day.number == this.backgroundForm.value.days) {\n day.check = true;\n }\n })\n }\n\n edit() {\n this.disable = !this.disable;\n }\n\n onSubmit() {\n this.edit();\n //api call\n }\n\n changeComplements(mode: boolean) {\n if(!this.disable) {\n this.showComplements = mode;\n if(!mode) {\n this.backgroundForm.value.complement = null;\n }\n }\n }\n\n patchValues() {\n let found: number;\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.CALZ);\n this.backgroundForm.patchValue({shoes: this.antecedente[found].antecedenteRespuesta});\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.DYA);\n this.backgroundForm.patchValue({restAndFood: this.antecedente[found].antecedenteRespuesta});\n \n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.SEM);\n this.backgroundForm.patchValue({trainingWeek: this.antecedente[found].antecedenteRespuesta});\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.FREQ)\n this.backgroundForm.patchValue({days: this.antecedente[found].antecedenteRespuesta});\n this.checkDays();\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.EXP)\n this.backgroundForm.patchValue({background: this.antecedente[found].antecedenteRespuesta});\n this.getAnswersQuestionOne();\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.COMP)\n this.backgroundForm.patchValue({complement: this.antecedente[found].antecedenteRespuesta});\n if(this.antecedente[found].antecedenteRespuesta != \"No\") {\n this.showComplements = true;\n }\n\n found = this.antecedente.findIndex(element => element.antecedentePreguntaId == AntecedentesEnum.EST)\n this.backgroundForm.patchValue({condition: this.antecedente[found].antecedenteRespuesta});\n let index: number = this.conditions.findIndex(condition => condition.name == this.backgroundForm.value.condition);\n this.conditions[index].selected = true;\n }\n\n\n}\n","\n\n

{{'planes.objetivesPopup.emptyAchievements' | translate}}

\n\n\n

{{\n 'registration.stepThree.question8.ruta' | translate}}

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

0)\" color=\"primary\">\n {{'registration.stepThree.question8.pista' | translate}}

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

0)\">{{'registration.stepThree.question8.trail' |\n translate}}

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

0)\" color=\"primary\">\n {{'registration.stepThree.question8.ultra' | translate}}

\n
\n \n \n
","import { Component, OnInit, Input } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { AllAchievements } from '../../../../api/interfaces/user';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-achievements-card',\n templateUrl: './achievements-card.component.html',\n styleUrls: ['./achievements-card.component.scss']\n})\nexport class AchievementsCardComponent implements OnInit {\n\n rutaValid: boolean = true;\n pistaValid: boolean = true;\n trailValid: boolean = true;\n ultraValid: boolean = true;\n isMobile: boolean = false;\n disable: boolean = true;\n\n rutaHasContent: boolean = false;\n pistaHasContent: boolean = false;\n ultraHasContent: boolean = false;\n trailHasContent: boolean = false;\n\n\n @Input('allAchievements') allAchievements: AllAchievements;\n backgroundForm = new FormGroup({\n ruta: new FormControl(),\n pista: new FormControl(),\n trail: new FormControl(),\n ultra: new FormControl()\n });\n \n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.checkActivos();\n\n }\n\n changeAchievement(aux) {\n if(aux.mode === \"ruta\") {\n this.rutaValid = aux.valid\n }\n\n if(aux.mode === \"pista\") {\n this.pistaValid = aux.valid\n }\n\n if(aux.mode === \"ultra\") {\n this.ultraValid = aux.valid\n }\n\n if(aux.mode === \"trail\") {\n this.trailValid = aux.valid\n }\n this.checkActivos();\n }\n\n edit() {\n this.disable = !this.disable;\n this.checkActivos();\n }\n\n onSubmit() {\n this.edit();\n }\n\n checkActivos() {\n this.rutaHasContent = this.allAchievements.route.some(element => element.activo);\n this.pistaHasContent = this.allAchievements.pista.some(element => element.activo);\n this.ultraHasContent = this.allAchievements.ultra.some(element => element.activo);\n this.trailHasContent = this.allAchievements.trail.some(element => element.activo);\n }\n\n\n}\n","
\n \n \n \n\n

\n {{'planes.objetivesPopup.emptyObjetives' | translate}}\n

\n","import { Component, OnInit, Input} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FilterDataService } from 'src/app/services/filterData/filter-data.service';\nimport { IsSameObjectService } from 'src/app/services/isSameObject/is-same-object.service';\nimport { FiltratedObjetives } from '../../../../api/interfaces/register';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-objetives-card',\n templateUrl: './objetives-card.component.html',\n styleUrls: ['./objetives-card.component.scss']\n})\nexport class ObjetivesCardComponent implements OnInit {\n\n @Input('objetives') objetives : FiltratedObjetives[];\n disable: boolean = true;\n isMobile: boolean = false;\n backgroundForm = new FormGroup({\n objetives: new FormControl(),\n });\n showObjetives: boolean = false;\n objetivesValid: boolean = false;\n checked: boolean = false;\n objetivesEmpty: boolean = false;\n objetivosHasContent: boolean = false;\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private filterData: FilterDataService,\n private isSameObject: IsSameObjectService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.objetives.length >= 1) {\n this.backgroundForm.patchValue({objetives: true});\n this.checked = true;\n }\n this.checkActivos();\n }\n\n changeObjetives(mode: boolean) {\n this.showObjetives = mode;\n this.objetivesEmpty = false;\n this.checked = !this.checked;\n if(!mode) {\n this.objetivesValid = true;\n sessionStorage.removeItem('objetives');\n this.deleteAll();\n } else {\n this.objetivesValid = false;\n }\n this.checkActivos();\n }\n\n deleteAll() {\n if(!this.disable) {\n this.objetives = null;\n }\n this.checkActivos();\n }\n\n edit() {\n this.disable = !this.disable;\n this.checkActivos();\n }\n\n onSubmit() {\n this.edit();\n //api call\n }\n\n emptyObjetives(mode: boolean) {\n //not done, not required in this sprint\n this.objetivesEmpty = true;\n }\n\n saveObjetivesEditEvent(objetives) {\n if(objetives) {\n if(objetives.length > 0 && this.objetives.length > 0) {\n if(!this.isSameObject.isSame(objetives, this.objetives)) {\n this.objetives = objetives;\n }\n }\n if(objetives.length > 0 && this.objetives.length == 0) {\n this.objetives = objetives;\n }\n }\n if(!this.objetives) {\n this.objetives = [];\n }\n const empty = this.objetives.findIndex(objetivo => objetivo.objetivoDescripcion == '');\n //correcion si se agrega alguno vacio\n if(empty != -1) {\n this.objetives.splice(empty, 1);\n }\n this.checkActivos();\n }\n\n checkActivos() {\n this.objetivosHasContent = this.objetives.some(element => element.activo);\n }\n\n}\n","
\n \n \n \n
\n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n
","import { Component, OnInit, Input } from '@angular/core';\nimport { FiltratedObjetives, Antecedente } from '../../../../api/interfaces/register';\nimport { AllAchievements} from '../../../../api/interfaces/user';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\n\n\n@Component({\n selector: 'app-background-objetives',\n templateUrl: './background-objetives.component.html',\n styleUrls: ['./background-objetives.component.scss']\n})\nexport class BackgroundObjetivesComponent implements OnInit {\n\n @Input('allAchievements') allAchievements: AllAchievements;\n @Input('objetives') objetives: FiltratedObjetives;\n @Input('antecedente') antecedente: Antecedente[];\n @Input('showMarcasObjetivos') showMarcasObjetivos: boolean;\n @Input('showAntecedentes') showAntecedentes: boolean;\n class: string = \"flexEvenlyWrap\";\n isMobile: boolean = false;\n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.showMarcasObjetivos && !this.showAntecedentes) {\n this.class = \"flexEvenlyWrapLeft\";\n }\n }\n\n}\n","export enum MessagesTypes {\n AVISO = \"AVISOFEEDBACK\"\n}","\n\n
\n
\n
\n
\n\n
\n
\n\n
\n
\n\n
\n
\n
\n
\n
{{'planes.feedback.mal' | translate}}
\n
{{'planes.feedback.regular' | translate}}
\n
{{'planes.feedback.bien' | translate}}
\n
{{'planes.feedback.fenomenal' | translate}}
\n
\n
\n\n
\n
\n
\n
\n\n
\n
\n\n
\n
\n\n
\n
\n
\n
\n
{{'planes.feedback.mal' | translate}}
\n
{{'planes.feedback.mal' | translate}}
\n\n
{{'planes.feedback.regular' | translate}}
\n
{{'planes.feedback.regular' | translate}}
\n\n
{{'planes.feedback.bien' | translate}}
\n
{{'planes.feedback.bien' | translate}}
\n\n
{{'planes.feedback.fenomenal' | translate}}
\n
{{'planes.feedback.fenomenal' | translate}}
\n
\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-feedback-option',\n templateUrl: './feedback-option.component.html',\n styleUrls: ['./feedback-option.component.scss']\n})\nexport class FeedbackOptionComponent implements OnInit {\n\n @Input('option') option: number;\n @Input('disabled') disabled: boolean;\n @Output() saveButtonEvent = new EventEmitter();\n constructor() { }\n\n ngOnInit(): void {\n }\n\n saveButton(option: number) {\n this.saveButtonEvent.emit(option);\n }\n\n}\n","\n
\n
\n
{{fechaFeedback | date:'dd/MM/yyy'}}
\n
\n\n
\n
\n \n
{{dato.planDetalleTitulo}}
\n
\n

\n
\n
\n

Éste día aún no registra actividades.

\n
\n
\n\n \n
\n {{'planes.forms.description' | translate}}\n
\n\n {{'planes.forms.fase1' | translate}}\n
\n \n \n \n
\n\n {{'planes.forms.fase2' | translate}}\n
\n \n \n \n
\n\n {{'planes.forms.fase3' | translate}}\n
\n \n \n \n
\n
\n\n
\n {{'planes.forms.invisible' | translate}}\n
\n \n \n \n
\n\n {{'planes.forms.especificaciones' | translate}}\n
\n \n \n \n
\n
\n\n\n\n \n
\n\n
\n
\n
{{'planes.feedback.status' | translate}}
\n
{{'planes.feedback.statusAdmin' | translate}}
\n
\n\n \n \n \n
{{'planes.feedback.pastEmpty' | translate}}
\n\n
\n
\n
\n {{'planes.feedback.happened' | translate}} *\n
\n
\n \n {{'planes.feedback.comments' | translate}}\n \n
\n
\n
\n
{{'planes.feedback.commentsAdmin' | translate}}
\n\n \n Escribe aquí\n \n {{planForm.value.feedbackRespuesta?.length || 0}} / {{longitudFeedback}}\n \n\n
\n
\n \n \n

{{respuesta}}

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

{{ 'planes.forms.noCommentsAdmin' | translate}}

\n

{{ 'planes.forms.noCommentsStudent' | translate}}

\n
\n\n
\n\n
\n \n
\n \n \n
\n\n \n
\n
\n \n
","import { ChangeDetectorRef, Component, EventEmitter, OnInit, Output, Input, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { PlansService } from 'src/app/api/services/plans/plans.service';\nimport { trainingDaysEnum } from 'src/app/enums/training-type';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { WeekService } from '../../../utils/week/week.service';\nimport { FormularioDia, PlanDetalle, PlanDatosDia, PostFeedback, PlanEditarDia, ReloadDay } from '../../../api/interfaces/plans';\nimport { UserService } from '../../../api/services/user/user.service';\nimport { ImageService } from '../../../api/services/image/image.service';\nimport { DescansoEnum } from '../../../enums/training-type';\nimport { ParametrosService } from '../../../api/services/parametros/parametros.service';\nimport { RoleString } from '../../../enums/role';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { HoursDayFixedService } from 'src/app/utils/hoursDayFixed/hours-day-fixed.service';\nimport { EnviarMensaje, MetadataAvisoFeedback } from 'src/app/api/interfaces/messages';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { MessagesTypes } from 'src/app/enums/messagesTypes';\n\n\n@Component({\n selector: 'app-feedback',\n templateUrl: './feedback.component.html',\n styleUrls: ['./feedback.component.scss']\n})\nexport class FeedbackComponent implements OnInit, OnDestroy {\n\n\n @Output() notEnabledEvent = new EventEmitter();\n @Output() editFormEvent = new EventEmitter();\n @Input('canGiveFeedback') canGiveFeedback: boolean;\n @Input('detalles') detalles: PlanDetalle[];\n @Input('edit') edit: boolean;\n\n noComments: boolean = undefined;\n hasFeedback: boolean = false;\n isStudent: boolean = false;\n hasImage: boolean = false;\n isAdmin: boolean = false;\n canSave: boolean = true;\n loaded: boolean = false;\n past: boolean = false;\n\n especificaciones: string = \"Sin especificaciones\";\n fechaFeedback: string = \"\";\n respuesta: string = \"\";\n invisible: string = \"\";\n avatarUrl: string = \"\";\n fase1: string = \"\";\n fase2: string = \"\";\n fase3: string = \"\";\n\n datos: PlanDatosDia[] = [];\n\n respuestaRequired: boolean = false;\n\n longitudFeedback: number = 0;\n alumnoId: number = 0;\n\n planForm = new FormGroup({\n feedbackOpcion: new FormControl('', Validators.required),\n feedbackRespuesta: new FormControl(''),\n });\n\n private sharedData$: Subscription;\n\n dayForm = new FormGroup({\n fase1: new FormControl('', Validators.required),\n fase2: new FormControl('', Validators.required),\n fase3: new FormControl('', Validators.required),\n invisible: new FormControl('', Validators.required),\n especificaciones: new FormControl('', Validators.required)\n });\n\n constructor(\n private cdr: ChangeDetectorRef,\n private plansService: PlansService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private weekService: WeekService,\n private activatedrouter: ActivatedRoute,\n private userService: UserService,\n private imageService: ImageService,\n private parametrosService: ParametrosService,\n private rol: RolService,\n private hoursDayFixedService : HoursDayFixedService,\n private messagesService: MessagesService\n ) { }\n\n ngOnInit(): void {\n \n this.isStudent = this.rol.isStudent();\n this.isAdmin = this.rol.isAdmin();\n this.getLongitudMensaje();\n\n this.cdr.detectChanges();\n this.alumnoId = parseInt(localStorage.getItem('idAlumno'),10);\n if(!this.alumnoId) {\n this.alumnoId = parseInt(sessionStorage.getItem('id_usuario'),10);\n }\n\n this.planForm.statusChanges\n .subscribe(val => {\n const { feedbackRespuesta, feedbackOpcion } = this.planForm.getRawValue();\n if( (feedbackOpcion == 1 || feedbackOpcion == 2)) {\n this.respuestaRequired = true;\n }\n if( (feedbackOpcion == 3 || feedbackOpcion == 4) || feedbackRespuesta) {\n this.respuestaRequired = false;\n }\n if(this.planForm.valid) {\n this.editFormEvent.emit(this.planForm.value);\n }\n });\n\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if(message == \"updateDays\") {\n this.loaded = false;\n this.getFeedback();\n if(new Date(this.fechaFeedback) > new Date() ) {\n this.canGiveFeedback = false;\n }\n }\n\n if(message == \"updateDay\" || message == \"reloadWeek\" || message == \"reloadWeek2\") {\n this.loaded = false;\n\n // ticket 2480: removed sessionStorage.remove fecha\n this.getFeedback();\n if(new Date(this.fechaFeedback) > new Date() ) {\n this.canGiveFeedback = false;\n }\n }\n if(message === \"semanaNoDisponible\") {\n this.loaded = false;\n this.datos = null;\n this.fechaFeedback = sessionStorage.getItem('semana');\n this.loaded = true;\n }\n });\n\n\n // bugfix date format\n const today: string = this.hoursDayFixedService.getTodayFixedString();\n\n if(this.canGiveFeedback) {\n sessionStorage.setItem('fecha',today);\n } else {\n this.canSave = false;\n }\n this.getFeedback();\n \n const entrenamientoDiaTipo: string = sessionStorage.getItem('entrenamientoDiaTipo');\n if(entrenamientoDiaTipo == trainingDaysEnum.DESCANSO) {\n this.canGiveFeedback = false;\n } \n }\n\n checkDate() {\n this.fechaFeedback = sessionStorage.getItem('fecha');\n const currentWeek: boolean = this.weekService.isCurrentWeek(this.fechaFeedback);\n const flagCambioSemana: boolean = JSON.parse(sessionStorage.getItem('flagCambioSemana'));\n if(currentWeek && flagCambioSemana) {\n this.fechaFeedback = this.hoursDayFixedService.getTodayFixedString();\n }\n }\n\n getFechaFeedbackWithCorrection() {\n this.fechaFeedback = sessionStorage.getItem('fecha');\n if(!this.fechaFeedback) {\n // bugfix date format \"toDateString\" was not correct, use \"toISOString\" and split to set hours to 12.\n\n this.fechaFeedback = this.hoursDayFixedService.getTodayFixedString();\n }\n \n const flagCambioSemana: boolean = JSON.parse(sessionStorage.getItem('flagCambioSemana'));\n if(flagCambioSemana) {\n this.checkDate();\n }\n }\n\n getFeedback() {\n // this.checkDate();\n this.getFechaFeedbackWithCorrection();\n this.plansService.getFeedback(this.weekService.convertDate(this.fechaFeedback), this.alumnoId).subscribe(response => {\n if(response) {\n //aca cargo el feedback\n this.planForm.patchValue({feedbackOpcion: response.feedbackOpcion});\n this.planForm.patchValue({feedbackRespuesta: response.feedbackRespuesta});\n this.respuesta = response.feedbackRespuesta;\n if(response.fechaFeedback && !response.feedbackRespuesta) {\n this.noComments = true;\n } else {\n this.noComments = false;\n }\n this.planForm.controls['feedbackRespuesta'].disable();\n this.canSave = false;\n this.hasFeedback = true;\n this.canGiveFeedback = false;\n } else {\n //default: opcion bien seleccionada y sin comentarios para alumno, no aplica para admin\n if(!this.isStudent) {\n this.planForm.patchValue({feedbackOpcion: null});\n } else {\n this.planForm.patchValue({feedbackOpcion: 3});\n }\n this.noComments = false;\n this.planForm.patchValue({feedbackRespuesta: null});\n this.planForm.controls['feedbackRespuesta'].enable();\n this.canSave = true;\n this.datos = null;\n this.respuesta = null;\n this.hasFeedback = false;\n }\n this.changeControls();\n this.check();\n this.getProfileData();\n },\n error => {\n console.error(error);\n });\n }\n\n changeControls() {\n if(!this.hasFeedback) {\n this.dayForm.controls['fase1'].enable();\n this.dayForm.controls['fase2'].enable();\n this.dayForm.controls['fase3'].enable();\n this.dayForm.controls['invisible'].enable();\n this.dayForm.controls['especificaciones'].enable();\n } else {\n this.dayForm.controls['fase1'].disable();\n this.dayForm.controls['fase2'].disable();\n this.dayForm.controls['fase3'].disable();\n this.dayForm.controls['invisible'].disable();\n this.dayForm.controls['especificaciones'].disable();\n }\n }\n\n async check() {\n if(this.isStudent) {\n try {\n const encontre: boolean = this.weekService.isCurrentWeek(this.fechaFeedback)\n if(encontre) {\n\n // bugfix date format with set hours\n const today: string = this.hoursDayFixedService.getTodayFixedString();\n\n if( ! (new Date(this.fechaFeedback) > new Date(today)) ) {\n //puedo dar feedback si es un dia de la semana actual que ya paso u hoy\n this.canGiveFeedback = true;\n } else {\n //si estoy viendo un dia del futuro no tiene que tener opcion por defecto\n this.planForm.patchValue({feedbackOpcion: null});\n this.planForm.patchValue({feedbackRespuesta: null});\n }\n this.past = false;\n } else {\n this.canGiveFeedback = false;\n this.past = true;\n if(!this.hasFeedback) {\n this.planForm.patchValue({feedbackOpcion: null});\n this.planForm.patchValue({feedbackRespuesta: null});\n }\n }\n const ultimaSemanaDisponible: string [] = await this.parametrosService.getUltimaSemanaDisponible();\n let ultimoDiaDisponible: Date = new Date(ultimaSemanaDisponible[6]);\n let ultimoDiaDisponibleConvertido: Date = new Date(ultimoDiaDisponible);\n let ahora: Date = new Date(this.fechaFeedback);\n\n //bugfix españa\n ahora.setHours(12);\n ahora.setMinutes(10);\n ahora.setSeconds(10);\n\n ultimoDiaDisponibleConvertido.setHours(12);\n ultimoDiaDisponibleConvertido.setMinutes(10);\n ultimoDiaDisponibleConvertido.setSeconds(10);\n\n \n if( ahora <= ultimoDiaDisponibleConvertido) {\n this.getPlanDiaData();\n }\n } catch {\n }\n } else {\n this.getPlanDiaData();\n }\n }\n\n saveButton(feedbackOpcion: number) {\n if(this.canSave && this.canGiveFeedback) {\n this.planForm.patchValue({feedbackOpcion: feedbackOpcion});\n }\n }\n\n onSubmit() {\n const { feedbackRespuesta, feedbackOpcion } = this.planForm.getRawValue();\n const today = new Date().toISOString();\n const alumnoId: number = parseInt(localStorage.getItem('idAlumno'),10);\n const usuarioId: number = parseInt(localStorage.getItem('idUsuario'),10);\n const aux: string[] = new Date(this.fechaFeedback).toISOString().split('T');\n const fechaFeedback: string = aux[0];\n const feedback: PostFeedback = {\n alumnoId: alumnoId,\n fechaFeedback: fechaFeedback,\n feedbackOpcion: feedbackOpcion,\n feedbackRespuesta: feedbackRespuesta,\n creado: today,\n creadoPor: usuarioId,\n ultimaModificacion: today,\n ultimaModificacionPor: usuarioId,\n }\n this.plansService.postFeedback(feedback).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.feedback');\n this.canSave = false;\n this.getFeedback();\n this.sendMessageToTrainer(feedback);\n const reloadDay: ReloadDay = {\n fechaFeedback: new Date(this.fechaFeedback).toISOString(),\n feedbackOpcion\n }\n sessionStorage.setItem('reloadDay',JSON.stringify(reloadDay));\n this.sharedData.changeMessage(\"reloadDay\");\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n onSubmitDayChanges() {\n const { fase1, fase2, fase3, invisible, especificaciones } = this.dayForm.getRawValue();\n let datos: PlanEditarDia[] = [\n {\n planDetalleTitulo: \"Fase 1\",\n actividad: fase1\n },\n {\n planDetalleTitulo: \"Fase 2\",\n actividad: fase2\n },\n {\n planDetalleTitulo: \"Fase 3\",\n actividad: fase3\n },\n {\n planDetalleTitulo: \"Entrenamiento Invisible\",\n actividad: invisible\n },\n {\n planDetalleTitulo: \"Especificaciones del Entreno\",\n actividad: especificaciones\n },\n ];\n\n this.plansService.editarDiaCompleto(this.alumnoId,this.weekService.convertDate(this.fechaFeedback),datos)\n .subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.plan.edit');\n this.sharedData.changeMessage(\"reloadWeek\");\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.edit');\n });\n }\n\n /**\n * Obtiene los datos del plan del día y parchea el formulario\n */\n getPlanDiaData() {\n this.getFechaFeedbackWithCorrection();\n //si cambio la semana quiero ver el dia de hoy, sea o no lunes\n \n sessionStorage.removeItem('flagCambioSemana');\n this.plansService.getPlanDiaData(this.weekService.convertDate(this.fechaFeedback), this.alumnoId).subscribe(response => {\n if(response.length > 0) {\n let auxSort: PlanDatosDia [] = [];\n auxSort = response;\n auxSort.forEach(dato => {\n if(dato.planDetalleTitulo.includes('Fase')) {\n dato.clase = \"subtitle1Primary\";\n } else {\n dato.clase = \"subtitle3\";\n }\n });\n\n //ordenar la respuesta para mostrar, los datos no necesariamente vienen ordenados\n this.datos = [];\n this.datos.push(auxSort.find(dato => dato.planDetalleTitulo == \"Fase 1\"));\n this.datos.push(auxSort.find(dato => dato.planDetalleTitulo == \"Fase 2\"));\n this.datos.push(auxSort.find(dato => dato.planDetalleTitulo == \"Fase 3\"));\n this.datos.push(auxSort.find(dato => dato.planDetalleTitulo == \"Entrenamiento Invisible\"));\n this.datos.push(auxSort.find(dato => dato.planDetalleTitulo == \"Especificaciones del Entreno\"));\n if(!this.isAdmin) {\n //formatear con bulleteado\n this.datos.forEach(dato => {\n if(dato.planDetalleTitulo == \"Entrenamiento Invisible\" || dato.planDetalleTitulo == \"Especificaciones del Entreno\") {\n if(dato.actividad.charAt(0) == '-') {\n dato.actividad = dato.actividad.substring(1);\n }\n dato.actividad = '
  • '+dato.actividad;\n dato.actividad = dato.actividad.replace(/(?:\\n-)/g, '
  • ');\n dato.actividad = dato.actividad.replace(/(?:\\n)/g, '
    ');\n dato.actividad += '
  • ';\n }\n });\n }\n this.dayForm.patchValue({fase1: this.datos[0].actividad});\n this.dayForm.patchValue({fase2: this.datos[1].actividad});\n this.dayForm.patchValue({fase3: this.datos[2].actividad});\n this.dayForm.patchValue({invisible: this.datos[3].actividad});\n this.dayForm.patchValue({especificaciones: this.datos[4].actividad});\n const today = new Date();\n if(this.weekService.convertDate(today.toString()) >= this.weekService.convertDate(this.fechaFeedback)) {\n if(this.isStudent && sessionStorage.getItem('detalle') != DescansoEnum.DESCANSO) {\n if(!this.past) {\n this.canGiveFeedback = true;\n }\n } else {\n this.canGiveFeedback = false;\n }\n }\n } else {\n this.datos = null;\n this.canGiveFeedback = false;\n this.dayForm.patchValue({fase1: null});\n this.dayForm.patchValue({fase2: 'Descanso'});\n this.dayForm.patchValue({fase3: null});\n this.dayForm.patchValue({invisible: null});\n this.dayForm.patchValue({especificaciones: null});\n }\n this.loaded = true;\n },\n error => {\n console.error(error);\n });\n }\n\n getProfileData() {\n\n this.userService.getProfileUserId(this.alumnoId).subscribe(response => {\n this.getAvatar(response.usuarioId);\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n async getAvatar(usuarioId: number) {\n this.avatarUrl = await this.imageService.getAvatarUrl(usuarioId);\n }\n\n getLongitudMensaje() {\n this.parametrosService.getParametro('Feedback').subscribe(response => {\n this.longitudFeedback = parseInt(response[0].valor,10);\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n sendMessageToTrainer(feedback: PostFeedback) {\n\n this.parametrosService.getProcesos('Feedback','MensajeHabilitado').subscribe( response=> {\n if(parseInt(response.valor,10) == 1) {\n const metadataJson: MetadataAvisoFeedback = {\n feedbackOpcion: feedback.feedbackOpcion,\n fechaFeedback: feedback.fechaFeedback\n }\n \n let enviarMensaje: EnviarMensaje = {\n mensaje: feedback.feedbackRespuesta,\n mensajeTipo: MessagesTypes.AVISO,\n metadata: JSON.stringify(metadataJson)\n }\n \n const canalId: number = parseInt(localStorage.getItem('canalIdEntrenador'),10);\n \n this.messagesService.postMensaje(canalId, enviarMensaje).subscribe(response => {\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n },\n error => {\n console.error(error);\n }); \n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","
    \n\n \n \n\n \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n\n
    \n
    \n
    \n \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n\n \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n\n
    \n
    \n

    {{'profile.tabsTitles.achievementsObjetives' | translate}}

    \n
    \n
    \n
    \n
    \n

    {{'profile.tabsTitles.achievementsObjetives' | translate}}

    \n
    \n \n \n
    \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { AntecedentesEnum } from 'src/app/enums/antecedentes';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { environment } from '../../../../environments/environment';\nimport { Country, FiltratedObjetives, DatosBancario, Antecedente, AntecedentesMarcas } from '../../../api/interfaces/register';\nimport { Contact, Personal, Physiological, Training, PersonalTrainer, UserComplete, AllAchievements, Level, EntrenamientoModelBroken, MotivoBaja } from '../../../api/interfaces/user';\nimport { UserService } from '../../../api/services/user/user.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { Subscription } from 'rxjs';\nimport { HoursDayFixedService } from 'src/app/utils/hoursDayFixed/hours-day-fixed.service';\n\n@Component({\n selector: 'app-main',\n templateUrl: './main.component.html',\n styleUrls: ['./main.component.scss']\n})\nexport class MainComponent implements OnInit {\n\n disableSave: boolean = true;\n isMetasObjetivos: boolean = false;\n isMobile: boolean = false;\n loaded: boolean = false;\n @Input('id') id: number;\n @Input('isAdmin') isAdmin: boolean;\n @Input('isStudent') isStudent: boolean;\n\n avatarUrl: string = null;\n estado: string = \"\";\n\n profile: UserComplete;\n personalData: Personal;\n country: Country;\n physiologicalData: Physiological;\n contactData: Contact;\n personalTrainer: PersonalTrainer;\n level: Level;\n training: Training;\n alumnosDatosBancario: DatosBancario = {\n claveBancaria: \"\",\n entidad: \"\"\n };\n allAchievements: AllAchievements = {\n route: null,\n pista: null,\n ultra: null,\n trail: null\n };\n antecedente: Antecedente[];\n antecedentesMarcas: AntecedentesMarcas[] = [];\n datosTraining: EntrenamientoModelBroken = {\n grupo: \"\",\n entrenamientoTipo: \"\",\n idGrupo: -1\n };\n\n objetives: FiltratedObjetives[] = [];\n\n usuarioId: number = 0;\n\n motivoBaja: MotivoBaja;\n\n private sharedData$: Subscription;\n\n constructor(\n private userService: UserService,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService,\n private router: ActivatedRoute,\n private registerService: RegisterService,\n private sharedData: SharedDataService,\n private routerRedirect: Router,\n private hoursDayFixed: HoursDayFixedService\n ) { }\n\n ngOnInit(): void {\n const url = this.router.snapshot.routeConfig.path;\n if(url == \"alumno/metas-objetivos\") {\n this.isMetasObjetivos = true;\n }\n this.isMobile = this.mobileDetectorService.isMobile();\n this.getData();\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n\n if(message ==\"saveObjetives\") {\n //bugfix date\n this.objetives.forEach(objetivo => {\n let auxDate = objetivo.fechaObjetivo;\n const auxDate2: string [] = auxDate.split('T');\n objetivo.fechaObjetivo = auxDate2[0] + \"T12:00:00.000+00:00\";\n });\n this.profile.objetivo = this.objetives;\n this.registerService.editObjetives(this.id, this.objetives).subscribe(response => {\n this.getData();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n\n if(message ==\"saveAchievements\") {\n //bugfix date\n // this.allAchievements.pista.forEach(element => {\n // let auxDate: string = new Date(element.fechaMarca).toISOString();\n // const auxDate2: string [] = auxDate.split('T');\n // element.fechaMarca = auxDate2[0] + \"T12:00:00.000+00:00\";\n // });\n\n // this.allAchievements.route.forEach(element => {\n // let auxDate: string = new Date(element.fechaMarca).toISOString();\n // const auxDate2: string [] = auxDate.split('T');\n // element.fechaMarca = auxDate2[0] + \"T12:00:00.000+00:00\";\n // });\n\n // this.allAchievements.trail.forEach(element => {\n // let auxDate: string = new Date(element.fechaMarca).toISOString();\n // const auxDate2: string [] = auxDate.split('T');\n // element.fechaMarca = auxDate2[0] + \"T12:00:00.000+00:00\";\n // });\n \n // this.allAchievements.ultra.forEach(element => {\n // let auxDate: string = new Date(element.fechaMarca).toISOString();\n // const auxDate2: string [] = auxDate.split('T');\n // element.fechaMarca = auxDate2[0] + \"T12:00:00.000+00:00\";\n // });\n\n this.profile.antecedentesMarcas = [...this.allAchievements.pista, ...this.allAchievements.route, ...this.allAchievements.trail, ...this.allAchievements.ultra];\n this.registerService.editAchievements(this.id, this.profile.antecedentesMarcas).subscribe(response => {\n this.getData();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n if(message ==\"updateStatus\" || message == \"reloadWeek2\") {\n // this.profile.paisId = this.personalData.pais.id;\n this.getUserProfileData();\n }\n\n if( message == \"reloadMail\") {\n this.profile.email = sessionStorage.getItem('email');\n sessionStorage.removeItem('email');\n }\n })\n }\n\n getData() {\n if (this.id) {\n this.getUserProfileData();\n } else {\n this.getMyProfileData();\n }\n }\n\n getUserProfileData() {\n if(isNaN(this.id)) {\n this.routerRedirect.navigateByUrl('admin/alumnos');\n } else {\n\n this.userService.getProfileUserId(this.id).subscribe(response => {\n this.loadData(response);\n if (response.entrenador.entrenadorNombre == \"NO DEFINIDO\" || response.entrenamientoNivel.entrenamientoNivelDescripcion == \"NO DEFINIDO\") {\n this.disableSave = true;\n }\n if (response.entrenador.entrenadorNombre !== \"NO DEFINIDO\" && response.entrenamientoNivel.entrenamientoNivelDescripcion !== \"NO DEFINIDO\") {\n this.disableSave = false;\n }\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n }\n\n getMyProfileData() {\n this.id = parseInt(localStorage.getItem('idAlumno'),10);\n if(isNaN(this.id)) {\n this.routerRedirect.navigateByUrl('admin/alumnos');\n } else {\n\n this.userService.getProfileUserId(this.id).subscribe(response => {\n this.profile = response;\n this.loadData(response);\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n })\n }\n }\n\n\n //assing data to objects\n loadData(response: UserComplete) {\n this.motivoBaja = response.usuario.motivoBaja;\n this.profile = response;\n this.estado = response.estado;\n this.usuarioId = response.usuarioId,\n sessionStorage.setItem('estado',this.estado);\n\n this.personalData = {\n nombre: response.nombre,\n apellido: response.apellido,\n segundoApellido: response.segundoApellido,\n numeroDocumento: response.numeroDocumento,\n fechaNacimiento: response.fechaNacimiento,\n pais: response.pais,\n residencia: response.residencia,\n documentoTipo: response.documentoTipo,\n };\n\n this.physiologicalData = {\n altura: response.altura,\n peso: response.peso\n };\n\n this.contactData = {\n email: response.email,\n numeroCelular: response.numeroCelular,\n numeroEmergencia: response.numeroEmergencia,\n prefijoCelular: response.prefijoCelular,\n prefijoEmergencia: response.prefijoEmergencia,\n }\n\n let training = {\n entrenamientoTipo: response.entrenamientoTipo,\n grupo: response.grupo\n }\n\n this.training = {\n level: response.entrenamientoNivel,\n trainer: response.entrenador,\n type: training,\n }\n\n // requiered because backend model mappers broke...\n this.datosTraining = {\n grupo : response.entrenamientoGrupo.entrenamientoGrupoDescripcion,\n idGrupo: response.entrenamientoGrupo.id,\n entrenamientoTipo : response.entrenamientoTipo.entrenamientoCodigo,\n }\n\n //backend provide more information than necesary for alumnosDatosBancario\n if(response.alumnosDatosBancario[0]) {\n this.alumnosDatosBancario.claveBancaria = response.alumnosDatosBancario[0].claveBancaria;\n this.alumnosDatosBancario.entidad = response.alumnosDatosBancario[0].entidad;\n this.alumnosDatosBancario.alumnoId = response.alumnosDatosBancario[0].alumnoId;\n this.alumnosDatosBancario.arancel = response.alumnosDatosBancario[0].arancel;\n this.alumnosDatosBancario.id = response.alumnosDatosBancario[0].id\n }\n\n this.antecedente = response.antecedente;\n if(response.antecedentesMarcas) {\n let aux: AntecedentesMarcas[] = [];\n this.allAchievements.route = [];\n this.allAchievements.pista = [];\n this.allAchievements.ultra = [];\n this.allAchievements.trail = [];\n response.antecedentesMarcas.forEach( marca => {\n if(marca.fechaMarca) {\n marca.fechaMarca = this.hoursDayFixed.getDateFixed(marca.fechaMarca);\n }\n });\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.RUTA);\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n this.allAchievements.route.push(achievement);\n }\n });\n\n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.PISTA);\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n this.allAchievements.pista.push(achievement);\n }\n });\n \n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.ULTRA);\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n this.allAchievements.ultra.push(achievement);\n }\n });\n \n aux = response.antecedentesMarcas.filter(antecedente => antecedente.antecedentePreguntaDetalleId == AntecedentesEnum.TRAIL);\n aux.forEach(achievement => {\n achievement.valid = true;\n if(achievement.activo) {\n this.allAchievements.trail.push(achievement);\n }\n });\n }\n\n this.objetives = [];\n\n response.objetivo.sort(function (a, b) {\n var key1 = new Date(a.fechaObjetivo);\n var key2 = new Date(b.fechaObjetivo);\n \n if (key1 < key2) {\n return -1;\n } else if (key1 == key2) {\n return 0;\n } else {\n return 1;\n }\n });\n response.objetivo.forEach( objetivo => {\n \n if(objetivo.fechaObjetivo) {\n objetivo.fechaObjetivo = this.hoursDayFixed.getDateFixed(objetivo.fechaObjetivo);\n }\n //check expired\n if(objetivo.fechaObjetivo) {\n if(new Date(objetivo.fechaObjetivo).setHours(12) < new Date().setHours(11)) {\n objetivo.activo = false;\n }\n }\n //not else due to backend can send objetivo.activo = false\n if(objetivo.activo) {\n this.objetives.push(objetivo);\n }\n });\n \n this.objetives.forEach(objetivo => objetivo.valid = true);\n if (response.avatarUrl) {\n this.avatarUrl = environment.apiUrl + response.avatarUrl;\n } else {\n this.avatarUrl = null;\n }\n\n if(this.isStudent) {\n const nombreCompleto: string = `${response.nombre} ${response.apellido} ${response.segundoApellido ? response.segundoApellido : ''}`;\n localStorage.setItem(\"descripcionUsuario\",nombreCompleto);\n }\n\n this.loaded = true;\n }\n\n editPersonal(auxPersonal: Personal) {\n this.profile.nombre = auxPersonal.nombre,\n this.profile.apellido = auxPersonal.apellido,\n this.profile.segundoApellido = auxPersonal.segundoApellido,\n this.profile.numeroDocumento = auxPersonal.numeroDocumento,\n this.profile.fechaNacimiento = auxPersonal.fechaNacimiento,\n this.profile.pais = auxPersonal.pais,\n this.profile.paisId = auxPersonal.pais.id,\n this.profile.residencia = auxPersonal.residencia,\n this.profile.documentoTipo = auxPersonal.documentoTipo;\n this.profile.documentoTipoId = auxPersonal.documentoTipo.id;\n this.updateProfile();\n }\n\n editPhysiological(auxPhysiological: Physiological) {\n this.profile.peso = auxPhysiological.peso,\n this.profile.altura = auxPhysiological.altura\n this.updateProfile();\n }\n\n editBank(auxBank: DatosBancario) {\n let bankData: DatosBancario [] = [];\n bankData.push(auxBank)\n this.registerService.editBankData(this.profile.id, bankData)\n .subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.updatingData.generic');\n },\n error => {\n this.sharedData.changeMessage(\"updateBank\");\n console.error(error);\n if(error.error && error.error.message) {\n this.snack.openSnackBar(error.error.message);\n } else {\n this.snack.snackTranslate('snacks.error.generic');\n }\n });\n }\n\n editContact(auxContact: Contact) {\n this.profile.email = auxContact.email,\n this.profile.numeroCelular = auxContact.numeroCelular,\n this.profile.prefijoCelular = auxContact.prefijoCelular,\n this.profile.numeroEmergencia = auxContact.numeroEmergencia,\n this.profile.prefijoEmergencia = auxContact.prefijoEmergencia\n this.updateProfile();\n }\n\n updateProfile() {\n this.registerService.editUserData(this.id, this.profile)\n .subscribe(response => {\n this.getData();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","
    \n \n \n
    \n \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.scss']\n})\nexport class ProfileComponent implements OnInit {\n\n isAdmin: boolean = true;\n isMobile: boolean = false;\n user_id: number;\n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.user_id = parseInt(sessionStorage.getItem('id_usuario'),10);\n if(this.user_id) {\n sessionStorage.setItem('active','alumnos');\n } else {\n sessionStorage.setItem('active','perfil');\n }\n }\n\n}\n","
    \n \n \n
    \n \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-student-my-profile',\n templateUrl: './student-my-profile.component.html',\n styleUrls: ['./student-my-profile.component.scss']\n})\nexport class StudentMyProfileComponent implements OnInit {\n\n isAdmin: boolean = false;\n isStudent: boolean = true;\n isMobile: boolean = false;\n \n constructor(\n private router: ActivatedRoute,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n const url = this.router.snapshot.routeConfig.path;\n this.isMobile = this.mobileDetectorService.isMobile();\n if(url == \"alumno/metas-objetivos\") {\n sessionStorage.setItem('active','metas');\n } else {\n sessionStorage.setItem('active','perfil');\n }\n }\n\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-settings-card',\n templateUrl: './settings-card.component.html',\n styleUrls: ['./settings-card.component.scss']\n})\nexport class SettingsCardComponent implements OnInit {\n\n @Output() toggleOptionEvent = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n toggleOption(option: number) {\n this.toggleOptionEvent.emit(option);\n }\n\n}\n","\n

    {{'settings.title' | translate}}

    \n

    \n {{'settings.options.one' | translate}} \n chevron_right\n

    \n
    \n","import { Injectable } from '@angular/core';\n\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\n\nimport { Group, GroupsPageable, PostGrupo } from '../../interfaces/groups';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupsService {\n\n private url = environment.apiUrl + '/';\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n constructor(private http: HttpClient) { }\n\n getGrupos(page: number, size: number): Observable {\n return this.http.get(this.url + `api/entrenamientogrupos/listado?page=${page}&size=${size}`, this.httpOptionsJson);\n }\n\n postGrupo(grupo: PostGrupo): Observable {\n return this.http.post(this.url + 'api/entrenamientogrupos', grupo, this.httpOptionsJson);\n }\n\n activarDesactivar(grupoId: number, activo: boolean): Observable {\n return this.http.delete(this.url + `api/entrenamientogrupos?grupoId=${grupoId}&activo=${activo}`, this.httpOptionsJson);\n }\n}\n","
    \n

    {{group[1]}}

    \n

    {{group[5]}} alumnos

    \n
    \n\n
    \n \n info\n \n

    {{'settings.groups.listCard.open' | translate}}

    \n
    \n \n
    \n \n info\n \n

    {{'settings.groups.listCard.close' | translate}}

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

    {{group[1]}}

    \n

    {{group[5]}} alumnos

    \n
    \n
    \n\n
    \n \n info\n \n
    \n \n
    \n \n info\n \n
    \n \n \n
    \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { Group } from '../../../../../api/interfaces/groups';\nimport { GroupsService } from '../../../../../api/services/groups/groups.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Show one group's data\n * @param Group, 0: id number, 1: descripcion string, 2: activo boolean, 3: capacidad number, 4: horario string ,5: cantalumnos number\n */\n@Component({\n selector: 'app-groups-item',\n templateUrl: './groups-item.component.html',\n styleUrls: ['./groups-item.component.scss']\n})\nexport class GroupsItemComponent implements OnInit {\n\n // @Input('group') group: Group;\n @Input('group') group: any;\n isMobile: boolean = false;\n\n isChecked = true;\n constructor(\n private groupsService: GroupsService,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n // this.isChecked = this.group.activo;\n this.isChecked = this.group[2];\n }\n\n toggleSlide() {\n this.groupsService.activarDesactivar(this.group[0], !this.group[2]).subscribe( response => {\n this.group[2]= !this.group[2];\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n this.group[2] = this.group[2];\n });\n }\n\n}\n","
    \n\n
    \n \n

    {{page + 1 }} / {{totalPages}}

    \n \n
    \n
    ","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n/**\n * Generic Paginator\n * @param first boolean, indicate if current page is the first\n * @param last boolean, indicate if current page is the last\n * @param totalElements number\n * @param totalPages number\n * @param page number, current page\n * @param size number, length of elements per page\n * \n * @example ListComponent.html\n * ```html\n * \n *\n * ```\n * \n * @example ListComponent.ts\n * ```ts\n * getPageableData() {\n * this.done = false;\n * this.apiService.getData(this.page, this.size).subscribe( response => {\n * this.content = response.content;\n * this.totalPages = response.totalPages;\n * this.first = response.first;\n * this.last = response.last;\n * this.done = true;\n * },\n * error => {\n * console.error(error);\n * });\n * }\n * \n * loadMore(event) {\n * this.page = event;\n * this.getPageableData();\n * }\n * ```\n */\n@Component({\n selector: 'app-paginator-complete',\n templateUrl: './paginator-complete.component.html',\n styleUrls: ['./paginator-complete.component.scss']\n})\nexport class PaginatorCompleteComponent implements OnInit {\n\n @Input('first') first: boolean;\n @Input('last') last: boolean;\n\n @Input('totalElements') totalElements: number;\n @Input('totalPages') totalPages: number;\n @Input('page') page: number;\n @Input('size') size: number;\n\n @Output() loadMoreEvent = new EventEmitter();\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n /**\n * This function change the page value.\n * @param target string, + => add page, - => substract page\n */\n paginators(target: string) {\n if(target == \"-\" && this.page > 0) {\n this.page--;\n }\n if(target == \"+\" && this.page < this.totalPages) {\n this.page++;\n }\n this.loadMoreEvent.emit(this.page);\n }\n\n}\n","
    \n \n
    \n\n\n","import { Component, OnInit } from '@angular/core';\nimport { Group } from '../../../../../api/interfaces/groups';\nimport { GroupsService } from '../../../../../api/services/groups/groups.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n/**\n * Receive groups[] and send them to GroupsItemComponent\n */\n@Component({\n selector: 'app-groups-list',\n templateUrl: './groups-list.component.html',\n styleUrls: ['./groups-list.component.scss']\n})\nexport class GroupsListComponent implements OnInit {\n\n groups: Group[] = [];\n\n totalElements: number = 0;\n totalPages: number = 0;\n size: number = 10;\n page: number = 0;\n\n first: boolean = true;\n last: boolean = false;\n done: boolean = false;\n\n constructor(\n private groupsService: GroupsService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.getGroups();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"updateGroups\") {\n this.getGroups();\n }\n });\n }\n\n getGroups() {\n this.done = false;\n this.groupsService.getGrupos(this.page, this.size).subscribe( response => {\n this.groups = response.content;\n this.totalPages = response.totalPages;\n this.first = response.first;\n this.last = response.last;\n this.done = true;\n },\n error => {\n console.error(error);\n });\n }\n\n loadMore(event) {\n this.page = event;\n this.getGroups();\n }\n\n}\n","\n
    \n

    {{'settings.groups.newCard.title' | translate}}

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

    {{'settings.groups.newCard.subtitle' | translate}}

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

    {{'settings.groups.newCard.hour' | translate}}

    \n
    \n \n {{ 'settings.groups.newCard.hourInput' | translate}}\n \n \n\n \n\n
    \n \n \n
    \n
    \n
    \n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Group, PostGrupo, EntrenamientoGruposDia } from '../../../../../api/interfaces/groups';\nimport { Day } from '../../../../../api/interfaces/register';\nimport { GroupsService } from '../../../../../api/services/groups/groups.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { Masks } from 'src/app/enums/mask';\n\n/**\n * Form: create a new group.\n */\n@Component({\n selector: 'app-groups-new',\n templateUrl: './groups-new.component.html',\n styleUrls: ['./groups-new.component.scss']\n})\nexport class GroupsNewComponent implements OnInit {\n\n @Output() toggleNewEvent = new EventEmitter();\n\n days: Day[] = [\n {name:\"Lunes\", selected: false, index: 2, disabled: false},\n {name:\"Martes\", selected: false, index: 3, disabled: false},\n {name:\"Miércoles\", selected: false, index: 4, disabled: false},\n {name:\"Jueves\", selected: false, index: 5, disabled: false},\n {name:\"Viernes\", selected: false, index: 6, disabled: false},\n {name:\"Sábado\", selected: false, index: 7, disabled: false},\n {name:\"Domingo\", selected: false, index: 1, disabled: false},\n ];\n\n groupForm = new FormGroup({\n hora: new FormControl([Validators.required], Validators.minLength(4)),\n capacidad: new FormControl(20)\n });\n\n disable: boolean = false;\n isMobile: boolean = false;\n disableSubmit: boolean = true;\n timeMask: string = \"\";\n\n constructor(\n private groupsService: GroupsService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService\n ) { }\n\n ngOnInit(): void {\n this.timeMask = Masks.GROUP_HOUR;\n this.changeValid();\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.isMobile) {\n window.scroll({\n top: 1200,\n left: 100,\n behavior: 'smooth'\n });\n }\n }\n\n toggleNew() {\n this.toggleNewEvent.emit(false);\n }\n\n onSubmit() {\n const daysSelected: Day[] = this.days.filter(day => day.selected);\n let horario: string = this.groupForm.value.hora;\n let horarioFinal: string = `${horario.charAt(0)}${horario.charAt(1)}:${horario.charAt(2)}${horario.charAt(3)}`;\n\n const nombre: string = `${daysSelected[0].name} y ${daysSelected[1].name} ${horarioFinal}`;\n\n let entrenamientoGruposDia: EntrenamientoGruposDia[] = [];\n daysSelected.forEach(day => {\n const aux: EntrenamientoGruposDia = {\n diaSemana: day.index\n }\n entrenamientoGruposDia.push(aux)\n });\n\n const { capacidad } = this.groupForm.getRawValue();\n const grupo: PostGrupo = {\n entrenamientoGrupoDescripcion: nombre,\n activo: true,\n horario: horarioFinal,\n capacidad: capacidad,\n entrenamientoGruposDia: entrenamientoGruposDia\n }\n this.groupsService.postGrupo(grupo).subscribe( response => {\n this.sharedData.changeMessage(\"updateGroups\");\n this.snack.snackTranslate('snacks.sucess.groups.post');\n this.toggleNew();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n changeValid() {\n const aux: Day[] = this.days.filter(day => day.selected == true);\n const cantidad: number = aux.length;\n if(cantidad == 2 ) {\n this.disableSubmit = false;\n } else {\n this.disableSubmit = true;\n }\n }\n\n saveDay(day: Day) {\n const position: number = this.days.findIndex(element => element.index == day.index);\n this.days[position].selected = !day.selected;\n let selected: any = [];\n this.days.forEach(day => {\n if(day.selected) {\n selected.push(day);\n }\n });\n this.changeValid();\n }\n\n}","
    \n\n \n
    \n \n chevron_left\n \n {{'settings.options.one' | translate}}\n
    \n
    \n\n \n
    \n

    {{'settings.groups.listCard.title' | translate}}

    \n \n \n\n

    {{'settings.groups.listCard.subtitle' | translate}}

    \n\n \n
    \n

    {{'settings.groups.listCard.subtitle' | translate}}

    \n \n
    \n \n \n\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-groups-main',\n templateUrl: './groups-main.component.html',\n styleUrls: ['./groups-main.component.scss']\n})\nexport class GroupsMainComponent implements OnInit {\n\n @Output() toggleOptionEvent = new EventEmitter();\n\n showNew: boolean = false;\n isMobile: boolean = false;\n constructor(\n private mobileDetectorService: MobileDetectorService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n }\n\n toggleNew() {\n this.showNew = !this.showNew;\n }\n\n toggleOption(option: number) {\n this.toggleOptionEvent.emit(option);\n }\n\n}\n","
    \n\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n \n \n
    \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-settings-page',\n templateUrl: './settings-page.component.html',\n styleUrls: ['./settings-page.component.scss']\n})\nexport class SettingsPageComponent implements OnInit {\n\n isMobile: boolean = false;\n showGroups: boolean = false;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active', 'configuracion');\n }\n\n toggleOption(option: number) {\n this.showGroups = !this.showGroups;\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { ListadoPageable, Emisor } from '../../interfaces/domiciliacion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DomiciliacionService {\n\n private url = environment.apiUrl + '/';\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n constructor(private http: HttpClient) { }\n\n getDomiciliacionPageable(page: number, size: number): Observable {\n return this.http.get(this.url + `api/domiciliacion/listado?page=${page}&size=${size}`, this.httpOptions);\n }\n\n crearFechaDomiciliacion(fecha: string): Observable {\n let body = {\n algo: \"algo\"\n }\n return this.http.post(this.url + `api/domiciliacion?fechaDomiciliacion=${fecha}`, body,this.httpOptionsJson);\n }\n\n crearArancel(domiciliacionId: number, arancel: boolean): Observable {\n let body = {\n algo: \"algo\"\n }\n return this.http.put(this.url + `api/domiciliacion/arancel?domiciliacionDetalleId=${domiciliacionId}&arancel=${arancel}`, body, this.httpOptionsJson);\n }\n\n getDomiciliacionFiltrable(domiciliacionId: number, ape: string, status: string, tipoId: string, grupoId: string, page: number, size: number): Observable {\n return this.http.get(this.url + `api/domiciliacion/listado/detalle?domiciliacionId=${domiciliacionId}&apenom=${ape}&estado=${status}&tipoId=${tipoId}&grupoId=${grupoId}&page=${page}&size=${size}`, this.httpOptions);\n }\n\n getEmisores(): Observable {\n return this.http.get(this.url + `api/domiciliaciondatos`, this.httpOptions);\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog'\nimport { DomiciliacionService } from '../../../../api/services/domiciliacion/domiciliacion.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\n\n/**\n * Admin can create a new remesa\n */\n@Component({\n selector: 'app-new-popup-domiciliacion',\n templateUrl: './new-popup-domiciliacion.component.html',\n styleUrls: ['./new-popup-domiciliacion.component.scss']\n})\nexport class NewPopupDomiciliacionComponent implements OnInit {\n\n\n today: Date;\n constructor(\n private domiciliacionService: DomiciliacionService,\n private snack: SnackbarService,\n private dialogRef: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.today = new Date();\n }\n\n onSubmit() {\n const aux = new Date();\n let month = aux.getMonth().toString();\n //parse month\n month = (parseInt(month,10) + 1).toString();\n if(parseInt(month,10) < 10) {\n month = \"0\" + month;\n }\n //parse date\n let fecha: string = `${aux.getDate()}-${month}-${aux.getFullYear()}`;\n this.domiciliacionService.crearFechaDomiciliacion(fecha).subscribe( response => {\n this.snack.snackTranslate('snacks.sucess.domiciliacion.newDate');\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n}\n","
    \n
    \n
    \n {{ 'admin.domiciliacion.popup.title' | translate }}\n \n
    \n

    {{ 'admin.domiciliacion.popup.subtitle' | translate }} {{today | dateName: 'MMMM/YYYY'}}

    \n
    \n\n
    \n \n
    \n
    ","
    \n

    {{ 'admin.domiciliacion.title' | translate }}

    \n
    \n \n \n
    \n
    \n\n
    \n {{'admin.domiciliacion.mainTable.empty' | translate}}\n
    \n\n
    \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n
    {{'admin.studentsTable.header.date' | translate}} \n {{element.date}}\n {{'admin.domiciliacion.mainTable.amount' | translate}} \n {{element.students}}\n {{'admin.domiciliacion.mainTable.total' | translate}} \n {{element.total}}\n {{'admin.domiciliacion.mainTable.noExport' | translate}} \n {{element.noExport}}\n {{'admin.studentsTable.header.actions' | translate}}\n
    \n \n
    \n
    \n\n\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n
    {{'admin.studentsTable.header.date' | translate}} \n {{element.date}}\n {{'admin.domiciliacion.mainTable.noExport' | translate}} \n {{element.noExport}}\n {{'admin.studentsTable.header.actions' | translate}}\n
    \n \n
    \n
    \n\n
    \n\n\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomiciliacionService } from '../../../../api/services/domiciliacion/domiciliacion.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { ImageService } from '../../../../api/services/image/image.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { animate, state, style, transition, trigger} from '@angular/animations';\nimport { MonthTariff } from '../../../../api/interfaces/domiciliacion';\nimport { NewPopupDomiciliacionComponent } from '../new-popup-domiciliacion/new-popup-domiciliacion.component';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n/**\n * Display the following data for every billing period:\n * month/year, amountStudents, $ total ,students not exported\n * Can navigate to MonthTableDomiciliacionComponent using changeTableEvent\n * Can open NewPopupDomiciliacionComponent\n */\n@Component({\n selector: 'app-main-table-domiciliacion',\n templateUrl: './main-table-domiciliacion.component.html',\n styleUrls: ['./main-table-domiciliacion.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n ],\n})\nexport class MainTableDomiciliacionComponent implements OnInit {\n\n totalElements: number = 0;\n totalPages: number = 0;\n size: number = 10;\n page: number = 0;\n\n first: boolean = true;\n last: boolean = false;\n done: boolean = false;\n\n isMobile: boolean = false;\n noData: boolean = false;\n\n @Output() changeTableEvent = new EventEmitter();\n\n constructor(\n private router: Router,\n private domiciliacionService: DomiciliacionService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n displayedColumns: string[] = ['month/year','amountStudents','total','export','actions'];\n displayedColumnsMobile: string[] = ['month/year','export','actions'];\n domiciliacionData: MonthTariff[];\n loaded: boolean = false;\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.loadData();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"reloadData\") {\n this.loadData();\n }\n });\n\n }\n\n loadMore(event) {\n this.page = event;\n this.loadData();\n }\n\n loadData() {\n this.domiciliacionData = [];\n this.noData = false;\n this.loaded = false;\n\n this.domiciliacionService.getDomiciliacionPageable(this.page, this.size).subscribe( response => {\n this.totalPages = response.totalPages;\n this.first = response.first;\n this.last = response.last;\n this.done = true;\n if (response.content.length == 0) {\n this.noData = true;\n this.loaded = true;\n } else {\n response.content.forEach(student => {\n this.convertAndPushColumn(student)\n });\n this.loaded = true;\n }\n },\n error => {\n console.error(error);\n });\n }\n\n convertAndPushColumn(element) {\n let aux: MonthTariff = {\n id: element[0],\n date: element[1],\n students: element[2],\n total: element[3],\n noExport: element[4]\n };\n if (aux != null) {\n this.domiciliacionData.push(aux);\n }\n }\n\n edit(element: MonthTariff) {\n this.changeTableEvent.emit(element);\n }\n\n openDialog() {\n const dialogRef = this.dialog.open(NewPopupDomiciliacionComponent);\n\n dialogRef.afterClosed().subscribe(result => {\n this.loadData();\n });\n }\n\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { StudentTariffData } from '../../../../api/interfaces/domiciliacion';\nimport { MatDialog, MAT_DIALOG_DATA} from '@angular/material/dialog'\nimport { DomiciliacionService } from '../../../../api/services/domiciliacion/domiciliacion.service';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\n\n\n/**\n * Receive domiciliacion data and update arancel value.\n * @param data contains the id and arancel\n * @example\n * ```ts\n * data: StudentTariffData = {\n * arancel: 23,\n * estado: \"E\",\n * fecha: \"2022-01-14T23:08:04Z\",\n * grupo: \"Presencial\",\n * id: 2,\n * nombre: \"Arturo Perez\",\n * selected: false\n * }\n * ```\n */\n@Component({\n selector: 'app-popup-arancel',\n templateUrl: './popup-arancel.component.html',\n styleUrls: ['./popup-arancel.component.scss']\n})\nexport class PopupArancelComponent implements OnInit {\n\n arancelForm = new FormGroup({\n arancel: new FormControl(),\n });\n\n constructor(\n private domiciliacionService: DomiciliacionService,\n private dialogRef: MatDialog,\n private snack: SnackbarService,\n @Inject(MAT_DIALOG_DATA) public data: StudentTariffData) { }\n\n ngOnInit(): void {\n }\n\n onSubmit() {\n const arancel = this.arancelForm.value.arancel\n this.domiciliacionService.crearArancel(this.data.id, arancel).subscribe( response => {\n this.data.arancel = arancel;\n this.snack.snackTranslate('snacks.sucess.domiciliacion.arancelUpdate');\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n}\n","
    \n
    \n

    {{'admin.domiciliacion.editArancel.title' | translate}}

    \n\n \n
    \n
    \n \n {{ 'admin.domiciliacion.editArancel.input' | translate}} \n \n \n
    \n \n
    \n","
    \n

    {{'admin.domiciliacion.emisorDialogTitle' | translate}}

    \n
    \n\n \n \n {{emisor.nombre}}\n \n \n\n
    \n
    \n\n \n
    ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { Emisor } from 'src/app/api/interfaces/domiciliacion';\nimport { DomiciliacionService } from 'src/app/api/services/domiciliacion/domiciliacion.service';\nimport { MatDialog } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-emisor-dialog',\n templateUrl: './emisor-dialog.component.html',\n styleUrls: ['./emisor-dialog.component.scss']\n})\nexport class EmisorDialogComponent implements OnInit {\n\n emisores: Emisor[] = [];\n\n form = new FormGroup({\n emisor: new FormControl(),\n });\n\n\n constructor(\n private domiciliacionService: DomiciliacionService,\n private dialogRef: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.domiciliacionService.getEmisores().subscribe( response => {\n this.emisores = response;\n },\n error => {\n console.error(error);\n });\n }\n\n onSubmit() {\n sessionStorage.setItem('emisor',JSON.stringify(this.form.value.emisor));\n this.dialogRef.closeAll();\n }\n\n}\n","
    \n
    \n \n \n {{'admin.studentsTable.filters.searchSmall' | translate}} \n \n \n \n \n\n \n {{'admin.studentsTable.filters.status' | translate}}\n \n {{status.name}}\n \n \n \n \n\n \n {{'admin.studentsTable.filters.type' | translate}}\n \n \n {{option.entrenamientoTipoDescripcion}}\n \n \n \n \n\n \n {{'messages.massive.destinatarios.group' | translate}}\n \n \n {{option.grupoDescripcion}}\n \n \n \n \n \n \n \n \n
    \n \n
    \n\n \n {{'admin.studentsTable.filters.searchSmall' | translate}} \n \n \n \n \n \n \n \n \n \n \n filter_list\n \n \n {{'admin.studentsTable.filters.filters' | translate}}\n \n 0\" class=\"contador\">{{contador}}\n \n \n \n\n \n {{'admin.studentsTable.filters.status' | translate}}\n \n {{status.name}}\n \n \n \n \n \n \n {{'admin.studentsTable.filters.type' | translate}}\n \n \n {{option.entrenamientoTipoDescripcion}}\n \n \n \n \n \n \n {{'messages.massive.destinatarios.group' | translate}}\n \n \n {{option.grupoDescripcion}}\n \n \n \n \n \n \n \n \n \n \n
    \n \n
    ","import { Component, OnInit, ViewChild, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { FormGroup, FormControl} from '@angular/forms';\nimport { Filters, FiltersStorage, TType } from '../../../../api/interfaces/user';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport {MatAccordion} from '@angular/material/expansion';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { TrainingDays } from 'src/app/api/interfaces/register';\n\n\n@Component({\n selector: 'app-filters-domiciliacion',\n templateUrl: './filters-domiciliacion.component.html',\n styleUrls: ['./filters-domiciliacion.component.scss']\n})\nexport class FiltersDomiciliacionComponent implements OnInit {\n\n @ViewChild(MatAccordion) accordion: MatAccordion;\n @ViewChild('trainerSelect') trainerSelect;\n @Output() filtersChangeEvent = new EventEmitter();\n\n isMobile: boolean = false;\n contador: number;\n filtersForm = new FormGroup({\n nombreApellido: new FormControl(),\n status: new FormControl(),\n type: new FormControl(),\n leido: new FormControl(),\n grupoId: new FormControl()\n });\n\n allStatus = [\n {\n name: \"Exportado\",\n est: \"E\"\n },\n {\n name: \"No exportado\",\n est: \"N\"\n },\n ];\n\n allTypes: TType[] = [];\n allTrainingDays: TrainingDays[] = [];\n \n disabled: boolean = true;\n statusClass = \"inputsFilter\";\n\n enabledTrainingDaysSelect: boolean = false;\n indexPresencial: number = -1;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private registerService: RegisterService,\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.cdr.detectChanges();\n this.getTrainingTypes();\n this.getTrainingDays();\n this.filtersForm.statusChanges\n .subscribe(val => {\n const { nombreApellido, status, type, leido, grupoId } = this.filtersForm.getRawValue();\n this.contador = 0;\n if(status) {\n this.contador++;\n this.statusClass = \"inputsFilterWithContent\"\n } else {\n this.statusClass = \"inputsFilter\"\n }\n if(type) {\n this.contador++;\n }\n if(nombreApellido) {\n this.contador++;\n }\n if(leido != null) {\n this.contador++;\n }\n if(grupoId) {\n this.contador++;\n }\n if(this.contador > 0) {\n this.disabled = false;\n } else {\n this.disabled = true;\n }\n });\n }\n\n setFiltersFromLocalStorage() {\n // const filters: FiltersStorage = JSON.parse(localStorage.getItem('filters'));\n // if(filters) {\n // this.filtersForm.patchValue({nombreApellido: filters.nombreApellido});\n // this.filtersForm.patchValue({status: filters.status});\n // this.filtersForm.patchValue({leido: filters.leido});\n // this.filtersForm.patchValue({type: filters.type});\n // }\n }\n\n onSubmit() {\n this.filtersChangeEvent.emit(this.filtersForm.value);\n }\n\n clearAll() {\n this.filtersForm.patchValue({status: null});\n this.filtersForm.patchValue({type: null});\n this.filtersForm.patchValue({leido: null});\n this.filtersForm.patchValue({nombreApellido: null});\n this.filtersForm.patchValue({grupoId: null});\n this.filtersChangeEvent.emit(this.filtersForm.value);\n this.enabledTrainingDaysSelect = false;\n }\n\n clear(target: string) {\n switch (target) {\n case 'nombreApellido':\n this.filtersForm.patchValue({nombreApellido: null});\n break;\n \n \n case 'status':\n this.filtersForm.patchValue({status: null});\n break;\n \n case 'type':\n this.filtersForm.patchValue({type: null});\n this.filtersForm.patchValue({grupoId: null});\n this.enabledTrainingDaysSelect = false;\n break;\n\n case 'leido':\n this.filtersForm.patchValue({leido: null});\n break;\n\n case 'grupoId':\n this.filtersForm.patchValue({grupoId: null});\n break;\n }\n this.filtersChangeEvent.emit(this.filtersForm.value);\n }\n\n getTrainingTypes() {\n this.registerService.getTrainingTypes()\n .subscribe(response => {\n this.allTypes= response;\n // guarda el id de online\n const index = this.allTypes.findIndex(element => element.entrenamientoTipoDescripcion == \"Presencial\");\n this.indexPresencial = this.allTypes[index].entrenamientoTipoId;\n\n },\n error => {\n console.error(error);\n });\n }\n\n getTrainingDays () {\n this.registerService.getTrainingDays()\n .subscribe(response => {\n this.allTrainingDays = response;\n //remover no definido y online\n this.allTrainingDays.splice(0,1);\n const index = this.allTrainingDays.findIndex(element => element.grupoDescripcion = \"Online\");\n this.allTrainingDays.splice(index,1);\n },\n error => {\n console.error(error);\n });\n }\n\n onChangeType() {\n const { type } = this.filtersForm.getRawValue();\n if(type) {\n this.enabledTrainingDaysSelect = (type == this.indexPresencial);\n if(!this.enabledTrainingDaysSelect) {\n this.filtersForm.patchValue({grupoId: null});\n }\n }\n }\n}\n\n\n","
    \n\n \n \n \n {{'admin.domiciliacion.remittance' | translate}} {{selectedMonth.date}}\n \n \n
    \n \n
    \n

    0 \" class=\"body3\">{{ 'admin.domiciliacion.exportTextA' | translate }} {{totalElements}} {{ 'admin.domiciliacion.exportTextB' | translate }}

    \n
    \n
    \n\n\n\n\n
    \n {{'admin.domiciliacion.mainTable.emptyAlumnos' | translate}}\n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n
    {{'admin.studentsTable.header.name' | translate}} \n {{element.nombre}} {{element.apellido}}\n {{'admin.studentsTable.header.type' | translate}} \n {{element.entrenamientoTipoDescripcion}}\n {{'admin.studentsTable.header.tariff' | translate}} \n {{element.arancel}} \n \n \n {{'admin.studentsTable.header.date' | translate}} \n {{element.creado | date: 'dd/MM/YYYY'}}\n {{'admin.studentsTable.header.status' | translate}} \n {{'status.N' | translate}}\n {{'status.E' | translate}}\n {{'admin.studentsTable.header.actions' | translate}}\n
    \n \n
    \n
    \n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{'admin.studentsTable.header.name' | translate}} \n {{element.nombre}} {{element.apellido}}\n {{'admin.studentsTable.header.tariff' | translate}} \n {{element.arancel}} \n \n \n {{'admin.studentsTable.header.actions' | translate}}\n
    \n \n
    \n
    \n \n
    \n \n \n ","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { DomiciliacionService } from '../../../../api/services/domiciliacion/domiciliacion.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { Emisor, MonthTariff, StudentTariffData } from '../../../../api/interfaces/domiciliacion';\nimport { MatDialog } from '@angular/material/dialog';\nimport { PopupArancelComponent } from '../popup-arancel/popup-arancel.component';\nimport { saveAs } from 'file-saver';\nimport { DownloadService } from 'src/app/api/services/download/download.service';\nimport { EmisorDialogComponent } from '../emisor-dialog/emisor-dialog.component';\n\n\n/**\n * Display the students data for one billing period:\n * name, lastname, training type, register date, $ import, status.\n * Filters: name, export, selected, type.\n * Can edit the $import for every student.\n * Can export xml file\n * Can navigate to MainTableDomiciliacionComponent\n */\n@Component({\n selector: 'app-month-table-domiciliacion',\n templateUrl: './month-table-domiciliacion.component.html',\n styleUrls: ['./month-table-domiciliacion.component.scss']\n})\nexport class MonthTableDomiciliacionComponent implements OnInit {\n\n totalElements: number = 0;\n totalPages: number = 0;\n size: number = 10;\n page: number = 0;\n\n first: boolean = true;\n last: boolean = false;\n done: boolean = false;\n\n isMobile: boolean = false;\n noData: boolean = false;\n\n ape: string = \"\";\n status: string = \"\";\n tipoId: string = \"\";\n\n selectedMonth: MonthTariff = null;\n\n @Output() changeTableEvent = new EventEmitter();\n\n filters = {\n nombreApellido: \"\",\n estado: \"\",\n entrenamientoTipoId: \"\",\n tipo: \"\",\n grupoId: \"\"\n };\n\n\n displayedColumns: string[] = ['name','trainingGroup','date','tariff','status','actions'];\n displayedColumnsMobile: string[] = ['name','tariff','actions'];\n domiciliacionData: StudentTariffData[];\n loaded: boolean = false;\n\n constructor(\n private domiciliacionService: DomiciliacionService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService,\n public dialog: MatDialog,\n private snack: SnackbarService,\n private download: DownloadService\n ) {\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `xml`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/xml.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `xml_blue`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/xml_blue.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `xml_disable`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/xml_disable.svg')\n );\n }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.selectedMonth = JSON.parse(sessionStorage.getItem('selectedMonth'));\n this.loadData();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"reloadData\") {\n this.loadData();\n }\n });\n\n }\n\n loadMore(event) {\n this.page = event;\n this.loadData();\n }\n\n loadData() {\n this.domiciliacionData = [];\n this.noData = false;\n this.loaded = false;\n\n this.domiciliacionService.getDomiciliacionFiltrable(this.selectedMonth.id, this.filters.nombreApellido, this.filters.estado, this.filters.tipo ,this.filters.grupoId, this.page, this.size).subscribe( response => {\n this.totalPages = response.totalPages;\n this.first = response.first;\n this.last = response.last;\n this.done = true;\n this.totalElements = response.totalElements;\n if (response.content.length == 0) {\n this.noData = true;\n this.loaded = true;\n } else {\n response.content.forEach(student => {\n if (student != null) {\n student.selected = false;\n this.domiciliacionData.push(student);\n }\n });\n this.loaded = true;\n }\n },\n error => {\n console.error(error);\n });\n }\n\n edit(element: MonthTariff) {\n sessionStorage.setItem('id_usuario', JSON.stringify(element.id));\n this.changeTableEvent.emit(element);\n }\n\n navigate() {\n sessionStorage.removeItem('selectedMonth');\n this.changeTableEvent.emit(null);\n }\n\n export() {\n\n const dialogRef = this.dialog.open(EmisorDialogComponent, {\n });\n\n dialogRef.afterClosed().subscribe(result => {\n let emisor: Emisor = JSON.parse(sessionStorage.getItem('emisor'));\n if (emisor) {\n this.download.exportarFiltrable(this.selectedMonth.id, this.filters.nombreApellido, this.filters.estado, this.filters.tipo, this.filters.grupoId, emisor.id).subscribe( response => {\n const nombre : string = `DOM ${this.selectedMonth.date}.xml`;\n this.snack.openSnackBar(`Se exportarton ${this.totalElements} alumnos`);\n saveAs(response, nombre);\n this.loadData();\n sessionStorage.removeItem('emisor');\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n });\n\n //domiciliacionId: number, ape: string, status: string, tipoId: string\n \n }\n\n exportElement(element: StudentTariffData) {\n\n const dialogRef = this.dialog.open(EmisorDialogComponent, {\n });\n\n dialogRef.afterClosed().subscribe(result => {\n let emisor: Emisor = JSON.parse(sessionStorage.getItem('emisor'));\n if (emisor) {\n this.download.exportarId(element.id, element.alumnoId, element.arancel, emisor.id).subscribe( response => {\n const nombre : string = `DOM ${element.nombre} ${element.apellido} ${this.selectedMonth.date}.xml`;\n saveAs(response, nombre);\n this.loadData();\n sessionStorage.removeItem('emisor');\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n });\n }\n\n changeFromCheckbox(element: StudentTariffData ) {\n const index: number = this.domiciliacionData.findIndex(aux => aux.id == element.id);\n this.domiciliacionData[index].selected = !this.domiciliacionData[index].selected;\n }\n\n setFilters(filters) {\n if(filters) {\n this.filters.nombreApellido = filters.nombreApellido ? filters.nombreApellido : \"\";\n this.filters.estado = filters.status ? filters.status : \"\";\n this.filters.tipo = filters.type ? filters.type : \"\";\n this.filters.grupoId = filters.grupoId ? filters.grupoId : \"\";\n \n //validacion para mostrar texto correcto si no hay alumnos con los filtros seleccionados\n // if(filters.nombreApellido || filters.status || filters.level || filters.trainer || filters.type || filters.leido ) {\n // this.firstLoad = false;\n // }\n }\n }\n\n filtersChange(filters) {\n this.page = 0;\n this.setFilters(filters);\n // localStorage.setItem('filters',JSON.stringify(filters));\n this.loadData();\n }\n\n editarArancel(element: StudentTariffData ) {\n // const index: number = this.domiciliacionData.findIndex(aux => aux.id == element.id);\n this.dialog.open(PopupArancelComponent, {\n data: element\n });\n }\n\n}\n","
    \n\n \n \n
    \n \n \n
    \n
    \n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { MainpageadminComponent } from '../students/mainpageadmin/mainpageadmin.component';\nimport { ProfileComponent } from '../profile/profile/profile.component'\nimport { StudentMyProfileComponent } from '../../student/profile/student-my-profile/student-my-profile.component';\n\nimport { SettingsPageComponent } from '../settings/settings-page/settings-page.component';\n\nimport { PageDomiciliacionComponent } from '../domiciliacion/page-domiciliacion/page-domiciliacion.component';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\n\nconst routes: Routes = [\n {\n path: 'admin/alumnos',\n component: MainpageadminComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'admin/perfil',\n component: ProfileComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'alumno/mi-perfil',\n component: StudentMyProfileComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n {\n path: 'alumno/metas-objetivos',\n component: StudentMyProfileComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n {\n path: 'admin/configuracion',\n component: SettingsPageComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'admin/domiciliacion',\n component: PageDomiciliacionComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AdminRoutingModule { }","import { Component, OnInit } from '@angular/core';\nimport { MonthTariff } from '../../../../api/interfaces/domiciliacion';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\n\n/**\n * Set active domiciliacion navbar button\n * Call MainTableDomiciliacionComponent onInit and switch to MonthTableDomiciliacionComponent using changeTable()\n * Switch from MonthTableDomiciliacionComponent to Call MainTableDomiciliacionComponent using changeTable()\n */\n@Component({\n selector: 'app-page-domiciliacion',\n templateUrl: './page-domiciliacion.component.html',\n styleUrls: ['./page-domiciliacion.component.scss']\n})\nexport class PageDomiciliacionComponent implements OnInit {\n\n isMobile: boolean = false;\n showMain: boolean = true;\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active', 'domiciliacion');\n }\n\n changeTable(element: MonthTariff) {\n this.showMain = !this.showMain;\n sessionStorage.setItem('selectedMonth',JSON.stringify(element));\n }\n}\n","\n\n
    \n
    \n
    \n \n

    {{ 'admin.StudentMainPage.title' | translate }}

    \n
    \n\n
    \n \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-admin-feedback',\n templateUrl: './admin-feedback.component.html',\n styleUrls: ['./admin-feedback.component.scss']\n})\nexport class AdminFeedbackComponent implements OnInit {\n\n isMobile: boolean = false;\n fechaFeedback: string = \"\"\n alumnoId: number = 0;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private router: Router\n ) { }\n\n\n ngOnInit(): void {\n\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active','alumnos');\n this.alumnoId = parseInt(sessionStorage.getItem('id_usuario'),10);\n }\n\n navigate() {\n this.router.navigate(['/admin/alumnos']);\n }\n\n}\n","
    0\">\n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{'planes.table.level' | translate}} \n \n {{'planes.table.status' | translate}} \n \n {{'planes.table.date' | translate}} \n \n {{plan.fechaCreacion | date:'dd/MM/yyy hh:mm'}}\n \n {{'planes.table.created' | translate}} \n \n {{plan.creadoPor}}\n \n {{'planes.table.actions' | translate}}\n
    \n \n \n
    \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n \n \n
    \n
    \n\n
    \n \n {{plan.fechaCreacion | date:'dd/MM/yyy hh:mm'}} - {{plan.creadoPor}}\n \n
    \n
    \n
    \n\n
    \n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { StatusEnum } from '../../../enums/status';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\nimport { MobileDetectorService } from '../../../services/mobileDetector/mobile-detector.service';\nimport { PlansService } from '../../../api/services/plans/plans.service';\nimport { Plan, PlanTable } from '../../../api/interfaces/plans';\nimport { GenericDialogComponent } from 'src/app/components/generic-dialog/generic-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Level } from '../../../api/interfaces/user';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss']\n})\nexport class TableComponent implements OnInit {\n\n @Output() deleteEvent = new EventEmitter();\n\n @Input('current') current: boolean;\n @Input('schedule') schedule: boolean;\n @Input('planData') planData: PlanTable[];\n @Input('semana') semana?: string;\n\n isMobile: boolean = false;\n levels: Level[] = [];\n\n constructor(\n private router: Router,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService,\n private plansService: PlansService,\n public dialog: MatDialog,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n ) { \n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../assets/delete.svg')\n );\n }\n\n displayedColumns: string[] = ['level', 'status', 'date', 'created', 'actions'];\n displayedColumnsMobile: string[] = ['name', 'status', 'actions'];\n \n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.schedule) {\n const aux: PlanTable[] = [];\n this.planData.forEach(semana => {\n const semanaString= new Date(semana.planSemana).toLocaleDateString();\n if(this.semana == semanaString) {\n aux.push(semana);\n }\n });\n this.planData = aux;\n\n }\n }\n\n navigate(plan: Plan) {\n sessionStorage.setItem('planId', JSON.stringify(plan.planId));\n this.router.navigate(['/planes/editar']);\n }\n\n deletePlan(planId: number) {\n\n\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea eliminar el plan de entreno?\",\n iconClass: \"bigGreyIcon\",\n text: \"Si lo hace no podrá recuperar los datos.\",\n icon: \"cancel_fill\",\n confirm: \"ELIMINAR\",\n cancel: \"CANCELAR\"\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.plansService.getPlanId(planId).subscribe(response => {\n let planEditable: Plan = response;\n planEditable.activo = false;\n planEditable.planDetalles.forEach(detalle => detalle.activo = false);\n planEditable.planDetalle = planEditable.planDetalles; //backend devuelve en plural y lo pide en singular...\n this.plansService.editDetelePlan(planId, planEditable).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.plan.delete');\n //trigger actualizacion de tablas de planes\n this.deleteEvent.emit();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.delete');\n });\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.delete');\n });\n }\n });\n }\n\n}\n\n","
    \n\n \n \n
    \n
    \n
    \n

    {{ 'planes.list.title' | translate }}

    \n \n \n \n

    {{ 'planes.list.title' | translate }}

    \n\n \n
    \n
    \n\n \n\n
    \n check_circle_outline\n

    {{ 'planes.list.curso' | translate }}

    \n
    \n
    \n

    {{ 'planes.list.emptyCurso' | translate }}

    \n 0\" [current]=\"true\" [schedule]=\"false\"\n [planData]=\"planDataCurrent\" (deleteEvent)=\"updateAfterDelete()\">\n
    \n\n \n\n
    \n
    \n update\n

    {{ 'planes.list.programados' | translate }}

    \n
    \n

    {{ 'planes.list.emptyProgramados' | translate }}

    \n

    {{'planes.list.explain' | translate}}

    \n
    \n
    \n
    \n SEMANA {{semana}}\n \n
    \n
    \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { PlanTable } from '../../../api/interfaces/plans';\nimport { Level } from '../../../api/interfaces/user';\nimport { PlansService } from '../../../api/services/plans/plans.service';\nimport { TrainingService } from '../../../api/services/training/training.service';\nimport { StatusEnum } from '../../../enums/status';\nimport { SnackbarService } from '../../../utils/snackbar/snackbar.service';\n\n@Component({\n selector: 'app-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss']\n})\nexport class ListComponent implements OnInit {\n\n emptyPlansCurrent: boolean = false;\n emtpyPlansSchedule: boolean = false;\n paginateRight: boolean = true;\n firstLoad: boolean = true;\n isMobile: boolean = false;\n loaded: boolean = false;\n\n StatusEnum = StatusEnum;\n\n totalPerPage: number = 10;\n page: number = 0;\n\n planDataCurrent: PlanTable[] = [];\n planData: PlanTable[] = [];\n \n levels: Level[] = [];\n\n semanas: string [] = [];\n\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private router: Router,\n private snack: SnackbarService,\n private plansService: PlansService,\n public dialog: MatDialog,\n private trainingService: TrainingService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active','planes');\n this.loadLevels();\n }\n\n loadPlans() {\n this.loaded = false;\n this.emptyPlansCurrent = false;\n\n this.plansService.getPlans()\n .subscribe(plans => {\n if (plans.length == 0) {\n this.emptyPlansCurrent = true;\n this.loaded = true;\n } else {\n this.firstLoad = false;\n plans.forEach(plan => {\n this.convertAndPushPlan(plan)\n });\n this.loaded = true;\n }\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic')\n console.error(error);\n this.loaded = true;\n this.emptyPlansCurrent = true;\n this.emtpyPlansSchedule = true\n });\n }\n\n loadLevels() {\n this.trainingService.getLevels().subscribe( response=> {\n this.levels = response;\n let remover: number = this.levels.findIndex(option => option.id == 1);\n if(remover != -1) {\n this.levels.splice(remover, 1);\n }\n this.loadPlans();\n },\n error => {\n console.error(error);\n });\n }\n\n pushPlan(plan: PlanTable) {\n if (plan != null) {\n this.planData.push(plan);\n }\n }\n\n convertAndPushPlan(plan) {\n const todayDate = (new Date()).getDate();\n const todayDay = (new Date()).getDay();\n const todayMes = (new Date()).getMonth();\n const resta = todayDate - (todayDay -1)\n const planDia = (new Date(plan.planSemana)).getDate();\n const planMes = (new Date(plan.planSemana)).getMonth();\n let estado: string = \"PROGRAMADO\";\n \n let condicional: boolean = (resta == planDia) || (todayMes - planMes == 1) || (todayMes - planMes < -8 );\n if(condicional) {\n estado = \"EN CURSO\";\n }\n let level: Level = this.levels.find(level => level.id == plan.entrenamientoNivelId);\n let aux: PlanTable = {\n nivelDescripcion: level.entrenamientoNivelDescripcion,\n estado: estado,\n fechaCreacion: plan.creado,\n creadoPor: plan.creadoPor,\n planId: plan.planId,\n planSemana: plan.planSemana\n }\n if (aux != null) {\n if(aux.estado == \"EN CURSO\") {\n this.planDataCurrent.push(aux);\n } else {\n this.planData.push(aux);\n const semanaString = new Date(aux.planSemana).toLocaleDateString();\n if(!this.semanas.some(semana => semana == semanaString)) {\n this.semanas.push(semanaString);\n }\n \n }\n }\n }\n \n createPlan() {\n this.router.navigate(['planes/nuevo']);\n\n }\n\n updateAfterDelete() {\n this.loaded = false;\n this.semanas = [];\n this.planData = [];\n this.planDataCurrent = [];\n this.loadPlans();\n }\n\n}\n","import { ChangeDetectorRef, Component, EventEmitter, OnInit, Output, Input } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { DatoPorEtiqueta, FormularioDia, PlanDetalle } from '../../../../api/interfaces/plans';\n\n@Component({\n selector: 'app-day-form',\n templateUrl: './day-form.component.html',\n styleUrls: ['./day-form.component.scss']\n})\nexport class DayFormComponent implements OnInit {\n\n @Output() notValidEvent = new EventEmitter();\n @Output() editFormEvent = new EventEmitter();\n\n @Input('planDetalleEtiqueta') planDetalleEtiqueta: DatoPorEtiqueta [];\n @Input('detalles') detalles: PlanDetalle[];\n @Input('edit') edit: boolean;\n\n planForm = new FormGroup({\n fase1: new FormControl('', Validators.required),\n fase2: new FormControl('', Validators.required),\n fase3: new FormControl('', Validators.required),\n invisible: new FormControl('', Validators.required),\n especificaciones: new FormControl('', Validators.required)\n });\n constructor(\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.cdr.detectChanges();\n this.planForm.statusChanges\n .subscribe(val => {\n const { fase1, fase2, fase3, invisible, especificaciones } = this.planForm.getRawValue();\n if(this.planForm.valid) {\n this.editFormEvent.emit(this.planForm.value);\n } else {\n this.notValidEvent.emit(false);\n }\n });\n \n if(this.edit) {\n let index: number = this.detalles.findIndex(detalle => detalle.planDetalleTitulo == \"Fase 1\");\n this.planForm.patchValue({fase1: this.detalles[index].actividad});\n\n index = this.detalles.findIndex(detalle => detalle.planDetalleTitulo == \"Fase 2\");\n this.planForm.patchValue({fase2: this.detalles[index].actividad});\n\n index = this.detalles.findIndex(detalle => detalle.planDetalleTitulo == \"Fase 3\");\n this.planForm.patchValue({fase3: this.detalles[index].actividad});\n\n index = this.detalles.findIndex(detalle => detalle.planDetalleTitulo == \"Entrenamiento Invisible\");\n \n let aux = this.detalles[index].actividad;\n //todo: parsear aca entrenamiento invisible o en base de datos?\n // aux = aux.replace(/ -/g,'\\r - ');\n\n this.planForm.patchValue({invisible: aux});\n\n index = this.detalles.findIndex(detalle => detalle.planDetalleTitulo == \"Especificaciones del Entreno\");\n this.planForm.patchValue({especificaciones: this.detalles[index].actividad});\n } else {\n let index: number = this.planDetalleEtiqueta.findIndex(detalle => detalle.clave == \"Fase 1\");\n this.planForm.patchValue({fase1: this.planDetalleEtiqueta[index].valor});\n\n index = this.planDetalleEtiqueta.findIndex(detalle => detalle.clave == \"Fase 2\");\n if(index != -1) {\n this.planForm.patchValue({fase2: this.planDetalleEtiqueta[index].valor});\n }\n\n index = this.planDetalleEtiqueta.findIndex(detalle => detalle.clave == \"Fase 3\");\n this.planForm.patchValue({fase3: this.planDetalleEtiqueta[index].valor});\n\n index = this.planDetalleEtiqueta.findIndex(detalle => detalle.clave == \"Entrenamiento Invisible\");\n let aux = this.planDetalleEtiqueta[index].valor;\n //todo: parsear aca entrenamiento invisible o en base de datos?\n // aux = aux.replace(/ -/g,'\\r - ');\n // aux = \" - \"+aux;\n this.planForm.patchValue({invisible: aux});\n\n index = this.planDetalleEtiqueta.findIndex(detalle => detalle.clave == \"Especificaciones del Entreno\");\n this.planForm.patchValue({especificaciones: this.planDetalleEtiqueta[index].valor});\n }\n }\n\n}\n","
    \n
    \n
    \n {{'planes.forms.description' | translate}}\n
    \n \n {{'planes.forms.fase1' | translate}}\n
    \n \n \n \n
    \n \n {{'planes.forms.fase2' | translate}}\n
    \n \n \n \n
    \n \n {{'planes.forms.fase3' | translate}}\n
    \n \n \n \n
    \n
    \n\n
    \n
    \n {{'planes.forms.invisible' | translate}}\n
    \n \n \n \n \n
    \n {{'planes.forms.especificaciones' | translate}}\n
    \n \n \n \n
    \n
    \n \n
    \n","
    \n\n \n \n
    \n
    \n
    \n \n

    {{ 'planes.new.title' | translate }}

    \n

    {{ 'planes.forms.edit' | translate }}

    \n \n
    \n\n
    \n \n \n
    \n {{ 'planes.new.new' | translate }}\n
    \n \n \n {{ 'planes.forms.date' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n {{ 'planes.forms.level' | translate }}\n \n \n {{level.entrenamientoNivelDescripcion}}\n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { WeekService } from 'src/app/utils/week/week.service';\nimport { DatoPorEtiqueta, FormularioDia, Plan, PlanDetalle } from '../../../../api/interfaces/plans';\nimport { Level } from '../../../../api/interfaces/user';\nimport { PlansService } from '../../../../api/services/plans/plans.service';\nimport { TrainingService } from '../../../../api/services/training/training.service';\nimport { StatusEnum } from '../../../../enums/status';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\n@Component({\n selector: 'app-new',\n templateUrl: './new.component.html',\n styleUrls: ['./new.component.scss']\n})\nexport class NewComponent implements OnInit {\n\n myFilter = (d: any | null): boolean => {\n const day = new Date(d._d).getDay();\n return day == 1;\n };\n\n minDate: Date;\n\n planDetalleEtiqueta: DatoPorEtiqueta[] = [];\n planDetalle : PlanDetalle[] = [];\n detallesDia1: PlanDetalle [] = [];\n detallesDia2: PlanDetalle [] = [];\n planEditable: Plan;\n\n levels: Level[] = [];\n\n notDisabled: boolean = false;\n loaded: boolean = false;\n isMobile: boolean = false;\n edit: boolean = false;\n\n id_usuario: number = 0;\n planId: number = 0;\n\n today: string = \"\";\n\n planForm = new FormGroup({\n level: new FormControl(),\n semana: new FormControl()\n });\n \n constructor(\n private mobileDetectorService: MobileDetectorService,\n private trainingService: TrainingService,\n private plansService: PlansService,\n private router: Router,\n private activatedrouter: ActivatedRoute,\n private snack: SnackbarService,\n private weekService: WeekService\n\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active', 'planes');\n this.loadData();\n this.planForm.statusChanges\n .subscribe(val => {\n if(this.planForm.valid) {\n this.checkValidSaveButton();\n }\n });\n //crear array de datos y precargar\n this.today = new Date().toISOString();\n this.id_usuario = parseInt(localStorage.getItem('idUsuario'),10);\n const semana: string[] = this.weekService.getWeek(new Date());\n this.minDate = new Date(semana[0]);\n }\n\n loadData() {\n const url = this.activatedrouter.snapshot.routeConfig.path;\n if(url == \"planes/editar\") {\n this.edit = true;\n this.planId = parseInt(sessionStorage.getItem('planId'),10);\n if(isNaN(this.planId)) {\n this.router.navigateByUrl('planes/lista');\n } else {\n this.plansService.getPlanId(this.planId).subscribe(response => {\n this.planEditable = response;\n this.planForm.patchValue({semana: response.planSemana});\n //asincronismo\n this.loadLevels();\n response.planDetalles.forEach(detalle => {\n if(detalle.dia == 1) {\n this.detallesDia1.push(detalle);\n }\n });\n response.planDetalles.forEach(detalle => {\n if(detalle.dia == 2) {\n this.detallesDia2.push(detalle);\n }\n });\n this.planDetalle = response.planDetalles;\n },\n error => {\n console.error(error);\n });\n }\n //aca\n } else {\n this.planDetalle = [\n {\n planDetalleTitulo: \"Fase 1\",\n dia: 1,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Fase 2\",\n dia: 1,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Fase 3\",\n dia: 1,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Entrenamiento Invisible\",\n dia: 1,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Especificaciones del Entreno\",\n dia: 1,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n //dia 2\n {\n planDetalleTitulo: \"Fase 1\",\n dia: 2,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Fase 2\",\n dia: 2,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Fase 3\",\n dia: 2,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Entrenamiento Invisible\",\n dia: 2,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n {\n planDetalleTitulo: \"Especificaciones del Entreno\",\n dia: 2,\n actividad: \"\",\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario\n },\n ];\n\n this.plansService.getDatosPorEtiqueta(\"Actividad Default\").subscribe(response => {\n this.planDetalleEtiqueta = response;\n this.loadLevels();\n },\n error => {\n console.error(error);\n });\n }\n }\n\n loadLevels() {\n this.trainingService.getLevels().subscribe( response=> {\n this.levels = response;\n let remover: number = this.levels.findIndex(option => option.id == 1);\n if(remover != -1) {\n this.levels.splice(remover, 1);\n }\n if(this.edit) {\n let level = this.levels.find(level => level.id == this.planEditable.entrenamientoNivelId);\n this.planForm.patchValue({level: level});\n }\n //asincronismo\n this.loaded = true;\n },\n error => {\n console.error(error);\n });\n }\n\n saveLevel(level: Level) {\n this.planForm.patchValue({level: level});\n }\n\n checkValidSaveButton() {\n let planDetalleCompleto: boolean = this.planDetalle.length == 10 && this.planDetalle.every(detalle => (detalle.actividad != null && detalle.actividad != ''));\n this.notDisabled = planDetalleCompleto && this.planForm.valid;\n }\n\n onSubmit() {\n const aux: Date = new Date(this.planForm.value.semana);\n let semana: string = aux.toISOString();\n const plan: Plan = {\n planDescripcion : `Plan ${this.planForm.value.level.entrenamientoNivelDescripcion} Semana ${aux.toLocaleDateString()}`,\n entrenamientoNivelId : this.planForm.value.level.id,\n planSemana: semana,\n estado : StatusEnum.PENDING,\n activo: true,\n creado: this.today,\n creadoPor: this.id_usuario,\n ultima_modificacion: this.today,\n modificadoPor: this.id_usuario,\n planDetalle: this.planDetalle\n };\n this.plansService.postPlan(plan).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.plan.save');\n this.navigate();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n onSubmitEdit() {\n const aux: Date = new Date(this.planForm.value.semana);\n let semana: string = aux.toISOString();\n const plan: Plan = {\n planDescripcion : `Plan ${this.planForm.value.level.entrenamientoNivelDescripcion} Semana ${aux.toLocaleDateString()}`,\n entrenamientoNivelId : this.planForm.value.level.id,\n planSemana: semana,\n estado : StatusEnum.PENDING,\n activo: true,\n modificadoPor: this.id_usuario,\n planDetalle: this.planDetalle\n };\n this.plansService.editDetelePlan(this.planId, plan).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.plan.save');\n this.navigate();\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.plan.save');\n });\n }\n\n notValid(aux: boolean) {\n this.notDisabled = aux;\n }\n\n editFormDays(aux: FormularioDia, day: number) {\n if(day == 1) {\n this.planDetalle[0].actividad = aux.fase1;\n this.planDetalle[1].actividad = aux.fase2;\n this.planDetalle[2].actividad = aux.fase3;\n this.planDetalle[3].actividad = aux.invisible;\n this.planDetalle[4].actividad = aux.especificaciones;\n }\n if(day == 2) {\n this.planDetalle[5].actividad = aux.fase1;\n this.planDetalle[6].actividad = aux.fase2;\n this.planDetalle[7].actividad = aux.fase3;\n this.planDetalle[8].actividad = aux.invisible;\n this.planDetalle[9].actividad = aux.especificaciones;\n }\n\n this.checkValidSaveButton();\n }\n\n navigate() {\n this.router.navigate(['planes/lista']);\n }\n\n}\n","
    \n\n \n \n
    \n
    \n
    \n

    ¡Hola, {{descripcionUsuario}}!

    \n

    ¡Hola, {{descripcionUsuario}}!

    \n \n \n
    \n \n \n \n \n
    \n
    \n
    ","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AdminFeedbackComponent } from '../admin-feedback/admin-feedback.component';\nimport { ListComponent } from '../list/list.component';\nimport { NewComponent } from '../new/new/new.component';\nimport { StudentPlansComponent } from '../student-plans/student-plans.component';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\n\n\n\nconst routes: Routes = [\n {\n path: 'planes/lista',\n component: ListComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'planes/nuevo',\n component: NewComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'planes/editar',\n component: NewComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n {\n path: 'planes/semana',\n component: StudentPlansComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n {\n path: 'admin/feedback',\n component: AdminFeedbackComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN] }\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class PlansRoutingModule { }","import { Component, OnInit } from '@angular/core';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { DownloadService } from '../../../api/services/download/download.service';\nimport { FileData } from '../../../api/interfaces/fileData';\nimport { saveAs } from 'file-saver';\nimport { WeekService } from '../../../utils/week/week.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\n\n\n/**\n * Student can download plan pdf\n * Call weekComponent in order to switch weeks and see the plan for that week\n * Call feedbackComponent, in order to give/read feedback\n */\n@Component({\n selector: 'app-student-plans',\n templateUrl: './student-plans.component.html',\n styleUrls: ['./student-plans.component.scss']\n})\nexport class StudentPlansComponent implements OnInit {\n\n isMobile: boolean = false;\n descripcionUsuario: string = \"\";\n fechaFeedback: string = \"\"\n alumnoId: number = 0;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private downloadService: DownloadService,\n private weekService: WeekService,\n private snack: SnackbarService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active','planes');\n this.alumnoId = parseInt(localStorage.getItem('idAlumno'),10);\n this.descripcionUsuario = localStorage.getItem(\"descripcionUsuario\");\n }\n\n downloadFile() {\n let semana: string = sessionStorage.getItem('semana');\n if(!semana) {\n const aux: string[] = this.weekService.getWeek(new Date());\n semana = this.weekService.convertDate(aux[0]);\n }\n const fileData: FileData = {\n filename: semana+\".pdf\",\n }\n this.downloadService.download(this.alumnoId,semana)\n .subscribe(archivo => {\n saveAs(archivo, fileData.filename);\n this.snack.snackTranslate('snacks.sucess.plan.download');\n });\n }\n\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule, HttpClient } from '@angular/common/http';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateLoader } from '@ngx-translate/core';\nimport { MaterialModule } from '../../../material/material.module';\nimport { GlobalModule } from '../../global/modules/global.module';\nimport { CalendarComponent } from '../calendar/calendar.component';\nimport { DayComponent } from '../day/day.component';\nimport { EditComponent } from '../edit/edit/edit.component';\nimport { ListComponent } from '../list/list.component';\nimport { DayFormComponent } from '../new/day-form/day-form.component';\nimport { NewComponent } from '../new/new/new.component';\nimport { TableComponent } from '../table/table.component';\nimport { PlansRoutingModule } from './plans-routing.module';\nimport { FeedbackComponent } from '../feedback/feedback.component';\nimport { WeekComponent } from '../week/week.component';\nimport { StudentPlansComponent } from '../student-plans/student-plans.component';\nimport { AdminFeedbackComponent } from '../admin-feedback/admin-feedback.component';\nimport { ObjetivesDialogComponent } from '../objetives-dialog/objetives-dialog.component'\nimport { DialogComponent } from '../process/dialog/dialog.component';\nimport { LoadingComponent } from '../process/loading/loading.component';\nimport { FeedbackOptionComponent } from '../feedback-option/feedback-option.component';\nimport { ChangeDaysDialogComponent } from '../change-days-dialog/change-days-dialog.component';\n\n@NgModule({\n declarations: [\n CalendarComponent,\n DayComponent,\n EditComponent,\n TableComponent,\n ListComponent,\n NewComponent,\n DayFormComponent,\n WeekComponent,\n FeedbackComponent,\n StudentPlansComponent,\n AdminFeedbackComponent,\n ObjetivesDialogComponent,\n DialogComponent,\n LoadingComponent,\n FeedbackOptionComponent,\n ChangeDaysDialogComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n HttpClientModule,\n ReactiveFormsModule,\n GlobalModule,\n PlansRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ], exports: [\n CalendarComponent,\n WeekComponent,\n FeedbackComponent,\n AdminFeedbackComponent,\n DialogComponent,\n LoadingComponent,\n\n ]\n})\nexport class PlansModule { }\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BankDataComponent } from './data/bank-data/bank-data.component';\nimport { ContactDataComponent } from './data/contact-data/contact-data.component';\nimport { DomicileDataComponent } from './data/domicile-data/domicile-data.component';\nimport { PersonalDataComponent } from './data/personal-data/personal-data.component';\nimport { PhysiologicalDataComponent } from './data/physiological-data/physiological-data.component';\nimport { ProfileHeaderComponent } from './profile-header/profile-header.component';\nimport { MainComponent } from './main/main.component';\nimport { MaterialModule } from '../../material/material.module';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TitleComponent } from './title/title.component';\nimport { AssignDialogComponent } from './assign-dialog/assign-dialog.component';\nimport { BackgroundObjetivesComponent } from './backgroundAndObjetives/background-objetives/background-objetives.component';\nimport { BackgroundComponent } from './backgroundAndObjetives/background/background.component';\nimport { ObjetivesCardComponent } from './backgroundAndObjetives/objetives-card/objetives-card.component';\nimport { RegistrationModule } from '../registration/modules/registration.module';\nimport { AllDataComponent } from './all-data/all-data.component';\nimport { GlobalModule } from '../global/modules/global.module';\nimport { PlansModule } from '../plans/modules/plans.module';\nimport { AchievementsCardComponent } from './backgroundAndObjetives/achievements-card/achievements-card.component';\nimport { StatusHistoryComponent } from './status-register-tab/status-history/status-history.component';\nimport { InactividadCardComponent } from './status-register-tab/inactividad/inactividad-card/inactividad-card.component';\nimport { InactividadInputsComponent } from './status-register-tab/inactividad/inactividad-inputs/inactividad-inputs.component';\nimport { DisableComponent } from './status-register-tab/disable/disable.component';\nimport { StatusRegisterCardComponent } from './status-register-tab/status-register-card/status-register-card.component';\nimport { ResendMailComponent } from './resend-mail/resend-mail.component';\n\n\n@NgModule({\n declarations: [\n BankDataComponent,\n ContactDataComponent,\n DomicileDataComponent,\n PersonalDataComponent,\n ProfileHeaderComponent,\n PhysiologicalDataComponent,\n MainComponent,\n TitleComponent,\n AssignDialogComponent,\n BackgroundObjetivesComponent,\n BackgroundComponent,\n ObjetivesCardComponent,\n AllDataComponent,\n AchievementsCardComponent,\n StatusHistoryComponent,\n InactividadCardComponent,\n InactividadInputsComponent,\n DisableComponent,\n StatusRegisterCardComponent,\n ResendMailComponent,\n ],\n imports: [\n CommonModule,\n MaterialModule,\n HttpClientModule,\n ReactiveFormsModule,\n RegistrationModule,\n GlobalModule,\n PlansModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n MainComponent\n ]\n})\nexport class ProfileModule { }\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { Injectable } from '@angular/core';\nimport { Canal, Participante } from 'src/app/api/interfaces/messages';\n\n@Injectable({\n providedIn: 'root'\n})\n/**\n * return participante, for messages.\n */\nexport class ParticipanteService {\n\n constructor() { }\n /**\n * Returns the other person data in the conversation\n * @param canal - Canal, message canal.\n * @returns - otroParticipante, Participante.\n */\n public getParticipante(canal: Canal): Participante {\n if(canal && canal.participantes) {\n\n const miId: number = parseInt(localStorage.getItem('idUsuario'));\n let otroParticipante: Participante = null;\n //fix backend typo\n if(canal.partipantes) {\n canal.participantes = canal.partipantes;\n }\n canal.participantes.forEach(participante => {\n if(participante.idUsuario != miId) {\n otroParticipante = participante;\n }\n }); \n return otroParticipante;\n }\n }\n\n /**\n * Returns current user data in the conversation\n * @param canal - Canal, message canal.\n * @returns - otroParticipante, Participante.\n */\n public getMiParticipante(canal: Canal): Participante {\n const miId: number = parseInt(localStorage.getItem('idUsuario'));\n let miParticipante: Participante = null;\n //fix backend typo\n if(canal.partipantes) {\n canal.participantes = canal.partipantes;\n }\n canal.participantes.forEach(participante => {\n if(participante.idUsuario == miId) {\n miParticipante = participante;\n }\n });\n\n return miParticipante;\n }\n}\n","
    \n
    \n \n \n
    \n
    \n
    \n {{otroParticipante.descripcionUsuario | reduceText:40 }}\n \n email\n {{canal.fecha | date:'dd/MM/yyy'}}\n \n
    \n {{canal.ultimoMensaje | reduceText:50 }}\n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n\n
    \n {{'messages.list.massive.title' | translate}} \n
    \n {{'messages.list.massive.text' | translate}} \n
    \n\n
    \n {{'messages.list.massive.titleNoAdmin' | translate}} \n {{'messages.list.massive.titleNoAdmin' | translate}} \n
    \n {{'messages.list.massive.textNoAdmin' | translate}} \n
    \n
    ","import { Component, Input, OnInit } from '@angular/core';\nimport { Canal, Message, MessageListOption, Participante } from '../../../../api/interfaces/messages';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { ParticipanteService } from 'src/app/services/participante/participante.service';\nimport { ImageService } from 'src/app/api/services/image/image.service';\n\n/**\n * Display canals to click and change current conversation. \n * Name Option is deprecated, backend named it Canal\n * @todo refactor option to canal\n */\n@Component({\n selector: 'app-option',\n templateUrl: './option.component.html',\n styleUrls: ['./option.component.scss']\n})\nexport class OptionComponent implements OnInit {\n\n @Input('canal') canal: Canal;\n @Input('massive') massive: boolean;\n @Input('unreadMassive') unreadMassive?: boolean;\n\n nameClass: string = \"subtitle3\";\n class: string = \"messageOption\";\n\n avatarUrl: string = \"\";\n\n isAdmin: boolean;\n\n id: number = 0;\n\n otroParticipante: Participante = null;\n miParticipante: Participante = null;\n \n constructor(\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private sharedData: SharedDataService,\n private messagesService: MessagesService,\n private rolService: RolService,\n private participanteService: ParticipanteService,\n private imageService: ImageService\n ) {\n this.matIconRegistry.addSvgIcon(\n `massive`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/massive.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `massiveEmpty`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/massiveEmpty.svg')\n );\n }\n\n ngOnInit(): void {\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"changeMessageOption\" && this.canal) {\n if(this.canal.selected) {\n this.class= \"messageOptionSelected\";\n } else {\n this.class = \"messageOption\";\n }\n }\n if(message === \"ultimoMensajeAdmin\" && this.canal) {\n if(this.canal.selected) {\n const aux: Message = JSON.parse(sessionStorage.getItem('ultimoMensaje'));\n this.canal.ultimoMensaje = aux.mensaje;\n }\n }\n });\n\n this.isAdmin = this.rolService.isAdmin();\n \n this.otroParticipante = this.participanteService.getParticipante(this.canal);\n this.miParticipante = this.participanteService.getMiParticipante(this.canal);\n if(this.canal) {\n if(!this.miParticipante.flgLeido) {\n this.nameClass = \"subtitle3Blue\"\n }\n }\n this.otroParticipante = this.participanteService.getParticipante(this.canal);\n this.getAvatar(this.otroParticipante.idUsuario);\n }\n\n async getAvatar(usuarioId: number) {\n this.avatarUrl = await this.imageService.getAvatarUrl(usuarioId);\n }\n\n markUnread() {\n this.messagesService.setUnreadRead(this.canal.id).subscribe( response=> {\n this.sharedData.changeMessage(\"ultimoMensaje\");\n },\n error => {\n console.error(error);\n });\n }\n\n}\n","
    \n \n {{'messages.list.search' | translate}} \n \n \n \n \n \n \n \n
    ","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { Filters, UserTable } from 'src/app/api/interfaces/user';\nimport { StudentService } from 'src/app/services/admin/student/student.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { Canal, Participante } from 'src/app/api/interfaces/messages';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\n\n@Component({\n selector: 'app-search',\n templateUrl: './search.component.html',\n styleUrls: ['./search.component.scss']\n})\nexport class SearchComponent implements OnInit {\n\n @Output() searchCanalesEvent = new EventEmitter();\n @Output() searchCanalesEmptyEvent = new EventEmitter();\n\n isMobile: boolean = false;\n messagesForm = new FormGroup({\n nombreApellido: new FormControl(),\n });\n\n filters: Filters = {\n nombre: \"\",\n apellido: \"\",\n nombreApellido: \"\",\n estado: \"\",\n entrenamientoTipoId: \"\",\n entrenamientoNivelId: \"\",\n entrenadorId: \"\",\n leido: \"\"\n };\n\n cantidadCanalesSolicitados: number = 0;\n totalPerPage: number = 100;\n page: number = 0;\n\n loaded: boolean = false;\n\n participantesData: Participante []= [];\n studentData: UserTable[] = [];\n canales: Canal[] = [];\n \n constructor(\n private mobileDetectorService: MobileDetectorService,\n private studentService: StudentService,\n private snack: SnackbarService,\n private messagesService: MessagesService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n }\n\n /**\n * Request student data and convert to Partipante interface. Call getCanal to build canales and emit the data\n */\n onSubmit() {\n this.studentData = [];\n this.canales = [];\n this.cantidadCanalesSolicitados = 0;\n this.filters.nombreApellido = this.messagesForm.value.nombreApellido;\n this.participantesData = [];\n this.studentService.getStudentsWithPaginator(this.totalPerPage, this.page, this.filters)\n .subscribe(students => {\n if (students.length == 0) {\n this.loaded = true;\n this.searchCanalesEmptyEvent.emit([]);\n } else {\n students.forEach(student => {\n const participante: Participante = {\n flgLeido : false,\n idUsuario: student.usuarioId,\n descripcionUsuario: `${student.nombre} ${student.apellido}`,\n };\n this.participantesData.push(participante);\n this.getCanal(participante.idUsuario);\n });\n this.loaded = true;\n }\n },\n error => {\n this.snack.snackTranslate('snacks.error.generic')\n console.error(error);\n this.loaded = true;\n });\n }\n\n clear() {\n this.cantidadCanalesSolicitados = 0;\n this.messagesForm.patchValue({nombreApellido: \"\"});\n this.searchCanalesEvent.emit(null);\n }\n\n getCanal(usuarioId: number) {\n this.messagesService.getCanalUsuarioId(usuarioId).subscribe(response => {\n if(response.content[0]) {\n this.canales.push(response.content[0]);\n }\n //prevent searchCanalesEvent to be emited before all the data is loaded\n this.cantidadCanalesSolicitados ++;\n if(this.cantidadCanalesSolicitados == this.participantesData.length) {\n this.searchCanalesEvent.emit(this.canales);\n }\n },\n error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n}\n","
    \n
    \n

    \n {{'messages.title' | translate}}\n

    \n
    0 \" class=\"unreadAmount\">\n

    {{unreadAmount}}

    \n
    \n
    \n \n\n \n \n\n
    \n\n
    \n \n \n
    \n
    \n check_circle_outline\n
    {{'messages.list.emptyTitle' | translate}}
    \n
    {{'messages.list.emptyText' | translate}}
    \n
    \n\n
    \n
    {{'messages.list.searchEmpty' | translate}}
    \n
    \n\n \n
    \n\n\n
    \n
    ","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { MessagesService } from '../../../../api/services/messages/messages.service';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { Canal, CanalesPageable, Message } from '../../../../api/interfaces/messages';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n@Component({\n selector: 'app-messages-list',\n templateUrl: './messages-list.component.html',\n styleUrls: ['./messages-list.component.scss']\n})\nexport class MessagesListComponent implements OnInit {\n\n @Output() changeCurrentMessageEvent = new EventEmitter();\n @Output() massiveMessageEvent = new EventEmitter();\n\n nombreApellido: string = \"\";\n \n canales: CanalesPageable;\n\n CANTIDAD_ELEMENTOS: number = 10;\n unreadAmount: number = 0;\n pagina: number = 0;\n\n moreMessagesAvalaible: boolean = true;\n searchEmpty: boolean = false;\n unreadMassive: boolean = false;\n isStudent: boolean = false;\n isMobile: boolean = false;\n isAdmin: boolean = true;\n\n constructor(\n private sharedData: SharedDataService,\n private messagesService: MessagesService,\n private snack: SnackbarService,\n private rol: RolService,\n private mobileService: MobileDetectorService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileService.isMobile();\n this.isAdmin = this.rol.isAdmin();\n this.isStudent = this.rol.isStudent();\n this.loadMessagesList();\n this.sharedData.currentMessage.subscribe(message => {\n if(message === 'ultimoMensaje') {\n this.pagina = 0;\n this.loadMessagesList();\n }\n });\n this.getCantidad();\n }\n\n /**\n * This function change the selected canal, updating selected value for every canal and sets in \n * sessionStorage the selected canal so others components can access it.\n * @param canal selected canal {@interface Canal} \n * @param i number, required for index\n */\n changeCurrent(canal: Canal, i:number) {\n this.canales.content.forEach(option => option.selected = false);\n this.canales.content[i].selected = true;\n sessionStorage.setItem('canal',JSON.stringify(canal));\n this.sharedData.changeMessage(\"changeMessageOption\");\n this.changeCurrentMessageEvent.emit(canal);\n }\n\n selectMassive() {\n this.canales.content.forEach(option => option.selected = false);\n this.sharedData.changeMessage(\"changeMessageOption\");\n this.massiveMessageEvent.emit(true);\n }\n\n loadMessagesList() {\n if(this.pagina == 0) {\n this.canales = null;\n }\n //si es estudiante tiene que traer siempre todos los mensajes, y si no es no => !this.isStudent\n this.messagesService.getCanalesYMensajes(this.pagina,this.CANTIDAD_ELEMENTOS, !this.isStudent).subscribe(response => {\n this.completeData(response);\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n completeData(response) {\n let options: Canal[] = response.content;\n\n const aux: Message = JSON.parse(sessionStorage.getItem('ultimoMensaje'));\n if(aux && aux.canalId) {\n options.forEach(option => {\n if(option.id == aux.canalId) {\n option.selected = true;\n }\n })\n }\n\n //si pagina es cero quiero que el array sea la respuesta, sino debo agregar y conservar los anteriores\n if(this.pagina == 0) {\n this.canales = response;\n this.canales.content = options;\n } else {\n options.forEach(aux => this.canales.content.push(aux));\n }\n if(response.totalPages > (this.pagina + 1)) {\n this.moreMessagesAvalaible = true;\n } else {\n this.moreMessagesAvalaible = false;\n }\n this.changeAmountUnread();\n }\n\n changeAmountUnread() {\n //todo: consumir endpoint\n this.unreadAmount = 0;\n this.canales.content.forEach(option => {\n if(option.flgLeido == false) {\n this.unreadAmount++;\n }\n });\n\n this.getCantidad();\n }\n\n getCantidad() {\n this.messagesService.getCantidadNoLeidos().subscribe(response => {\n this.unreadAmount = response.totalPendientes;\n this.unreadMassive = response.masivosPendientes > 0 ? true: false;\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n \n loadSearchList(canales: Canal[]) {\n this.searchEmpty = false;\n if(canales) {\n this.canales.content = canales;\n } else {\n this.loadMessagesList();\n }\n }\n\n onScrollDown() {\n if(this.isAdmin && this.moreMessagesAvalaible) {\n this.pagina++;\n this.loadMessagesList();\n } \n }\n\n searchCanalesEmpty() {\n this.canales.content = [];\n this.searchEmpty = true;\n }\n}\n","
    \n \n {{'messages.placeholder' | translate}} \n \n\n \n \n \n send\n \n \n\n \n\n {{messagesForm.value.mensaje?.length || 0}} / {{longitudMensaje}}\n \n
    ","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { Canal, EnviarMensaje, Message } from '../../../../api/interfaces/messages';\nimport { MessagesService } from '../../../../api/services/messages/messages.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { RolService } from 'src/app/services/rol/rol.service';\n\n@Component({\n selector: 'app-new-message',\n templateUrl: './new-message.component.html',\n styleUrls: ['./new-message.component.scss']\n})\nexport class NewMessageComponent implements OnInit {\n\n @Output() newMessageEvent = new EventEmitter();\n @Output() classMessageEvent = new EventEmitter();\n @Input('canal') canal: Canal;\n @Input('enable') enable?: boolean;\n @Input('isMassive') isMassive?: boolean;\n\n isStudent: boolean = false;\n\n isMobile: boolean = false;\n longitudMensaje : number = 0;\n cdkAutosize: number = 1;\n class: string = \"inputsFilterLarge\";\n messagesForm = new FormGroup({\n mensaje: new FormControl(),\n });\n \n constructor(\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n private messagesService: MessagesService,\n private snack: SnackbarService,\n private rol: RolService\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.longitudMensaje = parseInt(sessionStorage.getItem('longitudMensaje'),10);\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"changeMessageOption\") {\n this.clear();\n }\n });\n this.isStudent = this.rol.isStudent();\n }\n\n onSubmit() {\n const { mensaje } = this.messagesForm.getRawValue();\n if(mensaje.trim().length > 0 ) {\n\n const aux: Message = {\n mensaje: mensaje,\n person: sessionStorage.getItem('descripcionUsuario'),\n image: null,\n hasImage: false,\n fecha: new Date(),\n // idUsuario: parseInt(localStorage.getItem('idUsuario'),10),\n remitenteId: parseInt(localStorage.getItem('idUsuario'),10),\n canalId: this.canal.id,\n };\n const enviarMensaje: EnviarMensaje = {\n mensaje: mensaje\n };\n this.messagesService.postMensaje(this.canal.id, enviarMensaje).subscribe(response => {\n this.newMessageEvent.emit(aux);\n sessionStorage.setItem('ultimoMensaje',JSON.stringify(aux));\n if(this.isStudent) {\n this.sharedData.changeMessage(\"ultimoMensaje\");\n } else {\n this.sharedData.changeMessage(\"ultimoMensajeAdmin\");\n }\n this.clear();\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n }\n\n clear() {\n this.messagesForm.patchValue({mensaje: null});\n this.changeSizeSmall();\n }\n\n changeSize() {\n this.cdkAutosize = 6;\n this.class = \"inputsLarge transitionMessagesInput\";\n this.classMessageEvent.emit(true);\n }\n\n changeSizeSmall() {\n if(!this.messagesForm.value.mensaje) {\n this.cdkAutosize = 1;\n this.isMassive ? this.class = \"inputsFilterLarge\" : this.class = \"inputsFilterLarge transitionMessagesInput\";\n this.classMessageEvent.emit(false);\n }\n }\n\n}\n","
    \n
    \n\n \n\n \n \n
    \n {{otroParticipante.descripcionUsuario}}\n {{otroParticipante.descripcionUsuario}}\n
    \n

    {{'messages.assitive' | translate}}

    \n
    \n
    \n \n \n \n
    \n\n
    \n
    \n\n \n \n
    \n \n
    \n {{'messages.list.massive.titleNoAdmin' | translate}}\n
    \n
    ","import { Component, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Canal, Message, MessageListOption, Participante } from '../../../../api/interfaces/messages';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { ParticipanteService } from 'src/app/services/participante/participante.service';\nimport { StudentService } from 'src/app/services/admin/student/student.service';\nimport { ImageService } from 'src/app/api/services/image/image.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-message-header',\n templateUrl: './message-header.component.html',\n styleUrls: ['./message-header.component.scss']\n})\nexport class MessageHeaderComponent implements OnInit {\n\n @Input('canal') canal: Canal;\n \n isAdmin: boolean = false; \n isMobile: boolean = false;\n \n otroParticipante: Participante = null;\n avatarUrl: string = \"\";\n \n constructor(\n private router: Router,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private rol: RolService,\n private participanteService: ParticipanteService,\n private studentService: StudentService,\n private imageService: ImageService,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService\n ) { \n this.matIconRegistry.addSvgIcon(\n `massive`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../../assets/massive.svg')\n );\n }\n\n ngOnInit(): void {\n this.isAdmin = this.rol.isAdmin();\n this.isMobile = this.mobileDetectorService.isMobile();\n this.otroParticipante = this.participanteService.getParticipante(this.canal);\n this.getAvatar(this.otroParticipante.idUsuario);\n }\n\n async getAvatar(usuarioId: number) {\n this.avatarUrl = await this.imageService.getAvatarUrl(usuarioId);\n }\n\n navigate() {\n this.studentService.getIdAlumno(this.otroParticipante.idUsuario).subscribe( response=> {\n sessionStorage.setItem('id_usuario', JSON.stringify(response));\n this.router.navigate(['/admin/perfil']);\n },\n error => {\n console.error(error);\n });\n }\n\n back() {\n this.sharedData.changeMessage(\"back\");\n }\n\n}\n","
    \n
    \n event\n
    \n {{'messages.feedback' | translate}} {{fechaFeedback | date: 'dd/MM/YYY'}}\n
    \n
    \n {{'messages.feedbackAdmin' | translate}} {{fechaFeedback | date: 'dd/MM/YYY'}}\n
    \n
    \n
    \n \"{{feedback}}\"\n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n Feedback del {{fechaFeedback | date: 'dd/MM/YYY'}}\n
    \n
    \n \n
    \n
    \n\n
    \n
    \n {{message.fecha | date: 'dd/MM/YYY - HH:mm'}}\n
    \n
    \n {{message.mensaje}}\n
    \n \n
    \n
    ","import { Component, OnInit, Input, ViewChild } from '@angular/core';\nimport { MessagesTypes } from 'src/app/enums/messagesTypes';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { Mensaje, Message, MetadataAvisoFeedback } from '../../../../api/interfaces/messages';\n\n@Component({\n selector: 'app-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss']\n})\nexport class MessageComponent implements OnInit {\n\n @Input('message') message: Mensaje;\n @Input('autofocus') autofocus: boolean;\n\n @ViewChild('lastChat') lastChat;\n\n class: string = \"incomingMessage\";\n classFeedback: string = \"\";\n\n feedback: string = \"\";\n fechaFeedback: string = \"\";\n feedbackOpcion: number = 0;\n circleClass: string = \"circleMessages \";\n\n isAdmin: boolean;\n\n constructor(\n private rolService: RolService\n ) { }\n\n ngOnInit(): void {\n this.isAdmin = this.rolService.isAdmin();\n if(this.message.remitenteId == parseInt(localStorage.getItem('idUsuario'),10)) {\n this.class = \"outgoingMessage\";\n } else {\n //required to get user profile\n if(this.message.remitenteId) {\n sessionStorage.setItem('id_usuario',this.message.remitenteId.toString());\n }\n }\n \n if(this.message.mensajeTipo == \"FEEDBACK\") {\n const aux: string [] = this.message.metadata.split(\"¬\");\n this.fechaFeedback = aux[0];\n this.feedback = aux[1];\n if(!this.isAdmin) {\n this.classFeedback = \"feedbackIncomingMessage\";\n } else {\n this.classFeedback = \"feedbackOutgoingMessage\";\n }\n }\n\n if(this.message.mensajeTipo == MessagesTypes.AVISO) {\n const metadataJson: MetadataAvisoFeedback = JSON.parse(this.message.metadata);\n this.fechaFeedback = metadataJson.fechaFeedback;\n this.feedbackOpcion = metadataJson.feedbackOpcion;\n if(!this.isAdmin) {\n this.classFeedback = \"feedbackOutgoingMessage\";\n } else {\n this.classFeedback = \"feedbackIncomingMessage\";\n }\n switch(this.feedbackOpcion) {\n case 1: this.circleClass += \"mal\"; break;\n case 2: this.circleClass += \"regular\"; break;\n case 3: this.circleClass += \"bien\"; break;\n case 4: this.circleClass += \"fenomenal\"; break;\n default: break;\n }\n }\n }\n \n ngAfterViewInit(){\n if(this.autofocus && this.lastChat) {\n this.lastChat.nativeElement.focus();\n }\n } \n\n}\n","
    \n \n \n\n
    \n
    \n {{'messages.empty' | translate}}\n
    \n
    \n\n
    \n
    \n\n
    \n\n
    \n \n
    \n
    \n
    \n\n \n \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { MessagesService } from '../../../../api/services/messages/messages.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { Canal, Mensaje, Message } from '../../../../api/interfaces/messages';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Get message from canal and send them to MessageComponent.\n * Recieve new messages from NewMessageComponent.\n * @param canal canal data, interface Canal\n */\n@Component({\n selector: 'app-conversation',\n templateUrl: './conversation.component.html',\n styleUrls: ['./conversation.component.scss']\n})\nexport class ConversationComponent implements OnInit {\n\n @Input('canal') canal: Canal;\n messages: Mensaje[] = [];\n\n loaded: boolean = false;\n isMobile: boolean = false;\n\n CANTIDAD_ELEMENTOS: number = 10;\n pagina: number = 0;\n\n moreMessagesAvalaible: boolean = true;\n\n messagesClass: string = \"messages\";\n\n constructor(\n private sharedData: SharedDataService,\n private messagesService: MessagesService,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"changeMessageOption\") {\n this.canal = JSON.parse(sessionStorage.getItem('canal'));\n this.pagina = 0;\n this.loadMessages();\n }\n });\n this.loadMessages();\n }\n\n loadMessages() {\n this.loaded = false;\n if(this.pagina == 0) {\n this.messages = [];\n }\n this.messagesService.getMensajesPorCanal(this.canal.id, this.CANTIDAD_ELEMENTOS, this.pagina).subscribe(response => {\n let messages: Mensaje[] = response.content;\n if(this.pagina == 0) {\n messages = messages.reverse();\n messages = this.fixMetadata(messages);\n this.messages = messages;\n } else {\n messages = this.fixMetadata(messages);\n messages.forEach(aux => this.messages.unshift(aux));\n }\n if(response.totalPages > (this.pagina + 1)) {\n this.moreMessagesAvalaible = true;\n } else {\n this.moreMessagesAvalaible = false;\n }\n this.loaded = true;\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n this.loaded = true;\n });\n }\n\n fixMetadata(messages: Mensaje[]) {\n messages.forEach(message => {\n if(message.metadata && message.mensajeTipo == \"FEEDBACK\") {\n let aux: string [] = message.metadata.split('¬');\n let aux2: string [] = aux[0].split('T');\n aux2[1] = \"T12:00:00.000+00:00¬\";\n message.metadata = aux2[0]+aux2[1]+aux[1];\n }\n });\n return messages;\n }\n\n newMessageEvent(message: Mensaje) {\n this.messages.push(message);\n }\n\n onUpMessages() {\n if(this.moreMessagesAvalaible) {\n this.pagina++;\n this.loadMessages();\n }\n }\n\n changeMessage(value: boolean) {\n if(value) {\n this.messagesClass = \"messages smallConversation transitionMessagesInput\";\n } else {\n this.messagesClass = \"messages largeConversation transitionMessagesInput\";\n }\n }\n}\n","
    \n
    \n {{message.fecha | date: 'dd/MM/YYY - HH:mm'}}\n
    \n

    {{message.titulo}}

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

    {{message.mensaje}}

    \n\n \n\n
    \n\n
    0\">\n \n {{'messages.massive.destinatarios.type' | translate}}\n \n \n
    \n
  • \n {{element.entrenamientoTipoDescripcion}}\n
  • \n
    \n \n
    \n\n
    0\">\n \n {{'messages.massive.destinatarios.group' | translate}}\n \n \n
    \n
  • \n {{element.grupoDescripcion}}\n
  • \n
    \n \n
    \n\n
    0\">\n \n {{'messages.massive.destinatarios.level' | translate}}\n \n \n
    \n
  • {{level.entrenamientoNivelDescripcion}}
  • \n
    \n \n
    \n
    \n \n \n
    \n
    ","import { Component, OnInit, Input, ViewChild } from '@angular/core';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { UserService } from 'src/app/api/services/user/user.service';\nimport { StatusEnum } from 'src/app/enums/status';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { FileData } from '../../../../api/interfaces/fileData';\nimport { MassiveMessage, Mensaje, Destinatarios } from '../../../../api/interfaces/messages';\nimport { DownloadService } from '../../../../api/services/download/download.service';\nimport { saveAs } from 'file-saver';\nimport { TrainingDays } from 'src/app/api/interfaces/register';\nimport { Level, TType } from 'src/app/api/interfaces/user';\n\n@Component({\n selector: 'app-message-massive',\n templateUrl: './message-massive.component.html',\n styleUrls: ['./message-massive.component.scss']\n})\nexport class MessageMassiveComponent implements OnInit {\n\n @Input('message') message: Mensaje;\n @Input('autofocus') autofocus: boolean;\n @Input('levels') levels: Level[];\n @Input('trainingDays') trainingDays: TrainingDays[];\n @Input('allTypes') allTypes: TType[];\n\n lid: number [] = [2,3,4];\n gid: number [] = [7,3];\n tid: number [] = [1,2];\n\n levelsToShow: Level[] = [];\n trainingDaysToShow: TrainingDays[] = [];\n typesToShow: TType[] = [];\n metadataJson: Destinatarios;\n\n @ViewChild('lastChat') lastChat;\n\n class: string = \"incomingMessage\";\n\n studentReply: string = \"\";\n /**\n * @var studentReply\n * \"yes\": quiere seguir recibiendo plan\n * \"no\": no quiere seguir recibiendo plan\n * \"noReply\": no contesto nada\n */\n\n\n showDestinatarios: boolean = false;\n isAdmin: boolean = false;\n \n constructor(\n private rol: RolService,\n private messageService: MessagesService,\n private userService: UserService,\n private downloadService: DownloadService\n ) { }\n\n ngOnInit(): void {\n this.isAdmin = this.rol.isAdmin();\n if(this.isAdmin) {\n this.class = \"outgoingMessage\";\n }\n if(this.message.metadata.charAt(0) == '{') {\n\n this.metadataJson = JSON.parse(this.message.metadata);\n this.levels.forEach(level => {\n this.metadataJson.nid.forEach(element => {\n if(element == level.id) {\n this.levelsToShow.push(level);\n }\n })\n });\n \n this.trainingDays.forEach(el => {\n this.metadataJson.gid.forEach(element => {\n if(element == el.entrenamientoGrupoId) {\n this.trainingDaysToShow.push(el);\n }\n })\n });\n \n this.allTypes.forEach(el => {\n this.metadataJson.tid.forEach(element => {\n if(element == el.entrenamientoTipoId) {\n this.typesToShow.push(el);\n }\n })\n });\n }\n // if(!this.isAdmin && this.message.vacaciones) {\n // this.getMyProfileData();\n // }\n }\n\n toggleDestinatarios() {\n this.showDestinatarios = !this.showDestinatarios;\n }\n\n getMyProfileData() {\n const id: number = parseInt(localStorage.getItem('idAlumno'),10);\n this.userService.getProfileUserId(id).subscribe(response => {\n if(response.estado == StatusEnum.SUSPENDIDO) {\n //TODO: agregar validacion si respondio que no o nunca respondio\n /*if (respondio no) {\n this.studentReply = \"no\";\n } else {\n this.studentReply = \"noReply\";\n }\n */\n this.studentReply = \"noReply\";\n }\n },\n error => {\n console.error(error);\n });\n }\n\n ngAfterViewInit(){\n if(this.autofocus) {\n this.lastChat.nativeElement.focus();\n }\n } \n\n choose(aux: string) {\n if(aux == 'yes') {\n // todo: esta harcodeado! hay que recibir el id de la suspencion y pasarlo\n this.messageService.deleteSuspension(1).subscribe( response=> {\n },\n error => {\n console.error(error);\n });\n this.studentReply = \"yes\";\n } else {\n this.studentReply = \"no\";\n }\n }\n\n download() {\n const fileData: FileData = {\n filename: \"respuestas.pdf\",\n }\n this.downloadService.downloadHolidays()\n .subscribe(archivo => {\n saveAs(archivo, fileData.filename);\n });\n }\n\n}\n","
    \n
    \n
    \n

    {{'messages.massive.title' | translate}}

    \n \n
    \n
    \n \n
    \n\n \n {{'messages.massive.destinatarios.level' | translate}}\n \n \n \n {{levels && levels[0] ? levels[0].entrenamientoNivelDescripcion : ''}}\n 1\">\n ( + {{ (levels?.length === 2 ? 'messages.massive.other' : 'messages.massive.others') | translate }} \n {{ levels?.length > 2 ? levels.length - 1 : ''}} )\n \n \n
    \n \n\n \n {{'admin.studentsTable.filters.clear' | translate}}\n \n\n
    \n \n \n {{level.entrenamientoNivelDescripcion}}\n \n
    \n
    \n\n \n {{'messages.massive.destinatarios.type' | translate}}\n \n \n \n {{element.entrenamientoTipoDescripcion}}\n \n \n\n
    \n \n {{'messages.massive.destinatarios.all' | translate }} \n \n\n \n
    \n\n \n {{type.entrenamientoTipoDescripcion}}\n \n
    \n
    \n\n \n {{'messages.massive.destinatarios.group' | translate}}\n \n \n {{traningDays && traningDays[0] ? traningDays[0].grupoDescripcion : ''}}\n 1\">\n ( + {{ (traningDays?.length === 2 ? 'messages.massive.other' : 'messages.massive.others') | translate }}\n {{ traningDays?.length > 2 ? traningDays.length - 1 : ''}} )\n \n \n\n
    \n \n {{'messages.massive.destinatarios.all' | translate }} \n \n\n \n {{'admin.studentsTable.filters.clear' | translate}}\n \n
    \n\n \n {{trainingDay.grupoDescripcion}}\n \n
    \n
    \n\n
    \n
    \n\n \n\n \n\n
    \n
    \n

    {{'messages.massive.field1' | translate}}

    \n \n \n {{ 'messages.massive.placeholder1' | translate}}\n \n \n \n

    {{'messages.massive.field2' | translate}}

    \n \n \n {{ 'messages.massive.placeholder2' | translate}}\n \n {{newForm.value.mensaje?.length || 0}} / {{longitudMensaje}}\n \n\n
    \n \n
    \n
    \n
    ","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ParametrosService } from 'src/app/api/services/parametros/parametros.service';\nimport { Destinatarios, EnviarMensaje, LevelMassive, MassiveMessage, Mensaje, TrainingDaysMassive } from '../../../../api/interfaces/messages';\nimport { DateAdapter} from '@angular/material/core';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { TrainingService } from 'src/app/api/services/training/training.service';\nimport { TrainingDays } from 'src/app/api/interfaces/register';\nimport { Level, TType } from 'src/app/api/interfaces/user';\nimport { NgModel } from '@angular/forms';\n\n@Component({\n selector: 'app-new-massive',\n templateUrl: './new-massive.component.html',\n styleUrls: ['./new-massive.component.scss']\n})\nexport class NewMassiveComponent implements OnInit {\n\n newForm = new FormGroup({\n asunto: new FormControl(),\n mensaje: new FormControl('',[ \n Validators.required,\n Validators.pattern(/^(?!\\s*$).+/),]),\n vacaciones: new FormControl(false),\n fechaDesde: new FormControl(),\n fechaHasta: new FormControl(),\n });\n\n levels;\n traningDays;\n type;\n\n @Output() newMessageEvent = new EventEmitter();\n @Output() closeEvent = new EventEmitter();\n @Input('allLevels') allLevels: Level[] = [];\n\n gid: string = \"gid=\";\n nid: string = \"nid=\";\n tid: string = \"tid=\";\n longitudMensaje: number = 0;\n\n enabledTrainingDaysSelect: boolean = false;\n enabled: boolean = false;\n indexOnline: number = -1;\n \n allTrainingDays: TrainingDays[] = [];\n allTypes: TType[] = [];\n\n\n selectedYears = new FormControl();\n years: any[];\n\n constructor(\n private _adapter: DateAdapter,\n private snack: SnackbarService,\n private messagesService: MessagesService,\n private registerService: RegisterService,\n private trainingService: TrainingService\n ) { }\n\n ngOnInit(): void {\n\n this.years = [\n {id: 1, viewValue: \"2017\"},\n {id: 2, viewValue: \"2018\"},\n {id: 3, viewValue: \"2019\"},\n {id: 4, viewValue: \"2020\"},\n {id: 5, viewValue: \"2021\"}\n ];\n this._adapter.setLocale('es');\n this.newForm.statusChanges\n .subscribe(val => {\n this.checkDisabled();\n });\n\n this.longitudMensaje = parseInt(sessionStorage.getItem('longitudMensaje'),10);\n this.getTrainingDays();\n this.getTrainingTypes();\n }\n\n onChangeType() {\n if(this.type && this.type.length > 0) {\n this.enabledTrainingDaysSelect = this.type.some( element => element.entrenamientoTipoId == 1);\n if(!this.enabledTrainingDaysSelect) {\n this.removeTrainingDays();\n }\n } else {\n this.removeTrainingDays();\n }\n this.checkDisabled();\n }\n\n getTrainingTypes() {\n this.registerService.getTrainingTypes()\n .subscribe(response => {\n this.allTypes= response;\n },\n error => {\n console.error(error);\n });\n }\n\n removeTrainingDays() {\n this.enabledTrainingDaysSelect = false;\n this.traningDays = [];\n this.gid = \"gid=\";\n }\n\n onSubmit() {\n const { asunto, mensaje} = this.newForm.getRawValue();\n if(mensaje.trim().length > 0 ) {\n let nidArray: number[] = [];\n let gidArray: number[] = [];\n let tidArray: number[] = [];\n\n if(this.traningDays && this.traningDays.length > 0) {\n this.traningDays.forEach(element => {\n gidArray.push(element.entrenamientoGrupoId);\n });\n }\n \n if(this.levels && this.levels.length > 0) {\n this.levels.forEach(element => {\n nidArray.push(element.id);\n });\n } \n \n if(this.type && this.type.length > 0) {\n this.type.forEach(element => {\n tidArray.push(element.entrenamientoTipoId);\n });\n }\n let metadata: Destinatarios = {\n nid: nidArray,\n gid: gidArray,\n tid: tidArray,\n }\n\n const metadataString: string = JSON.stringify(metadata);\n\n // const newMassive: MassiveMessage = {\n // fecha: new Date(),\n // asunto: asunto,\n // mensaje: mensaje,\n // etiquetas: this.selectedEtiquetas,\n // vacaciones: this.newForm.value.vacaciones\n // };\n const newMassive: EnviarMensaje = {\n mensaje: mensaje,\n mensajeTipo: \"BASE\",\n titulo: asunto,\n metadata: metadataString\n }\n // this.messagesService.sendMasivoSinFiltros(newMassive).subscribe(response => {\n // this.newMessageEvent.emit(response);\n // }, error => {\n // console.error(error);\n // this.snack.snackTranslate('snacks.error.generic');\n // });\n\n this.messagesService.sendMasivoFiltrosDinamicos(newMassive,this.nid,this.gid, this.tid).subscribe(response => {\n this.snack.snackTranslate('snacks.sucess.messages.feedbackReply');\n this.newMessageEvent.emit(response);\n }, error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n \n }\n\n checkDisabled() {\n // let etiquetasValid: boolean = false;\n // if( this.selectedEtiquetas.length > 0 && ((\n // this.newForm.value.vacaciones && \n // this.newForm.value.fechaDesde && \n // this.newForm.value.fechaHasta) ||\n // !this.newForm.value.vacaciones)\n // ) {\n // etiquetasValid = true;\n // } else {\n // etiquetasValid = false;\n // }\n\n // this.enabled = this.newForm.valid && etiquetasValid;\n // return this.newForm.valid && etiquetasValid\n // return this.newForm.value.mensaje.length() > 0 ? true : false;;\n\n let trainingDaysSelected: boolean = false;\n let levelSelected: boolean = false;\n let typeSelected: boolean = true;\n let presencialSelected: boolean = false;\n let onlineSelected: boolean = false;\n\n if(this.type && this.type.length > 0) {\n presencialSelected = this.type.some(element => element.entrenamientoTipoId == 1);\n onlineSelected = this.type.some(element => element.entrenamientoTipoId == 2);\n typeSelected = true;\n this.tid = \"\";\n this.type.forEach(element => {\n const aux: string = `&tid=${element.entrenamientoTipoId}`\n this.tid += aux;\n });\n this.tid = this.tid.substring(1);\n } else {\n this.tid = \"tid=\";\n }\n \n if(this.traningDays && this.traningDays.length > 0) {\n trainingDaysSelected = true;\n this.gid = \"\";\n this.traningDays.forEach(element => {\n const aux: string = `&gid=${element.entrenamientoGrupoId}`\n this.gid += aux;\n });\n this.gid = this.gid.substring(1);\n } else {\n this.gid = \"gid=\";\n }\n\n if(this.levels && this.levels.length > 0) {\n levelSelected = true;\n this.nid = \"\";\n this.levels.forEach(element => {\n const aux: string = `&nid=${element.id}`\n this.nid += aux;\n });\n this.nid = this.nid.substring(1);\n } else {\n this.nid = \"nid=\";\n }\n\n let gruposValid: boolean = false;\n const onlineOnly: boolean = (onlineSelected && !presencialSelected);\n const onlineAndPresencial: boolean = (onlineSelected && presencialSelected && trainingDaysSelected);\n\n if( onlineOnly || \n (presencialSelected && trainingDaysSelected) || \n (onlineAndPresencial)\n ) {\n gruposValid = true;\n }\n\n //gid ya esta construido, falta agregar online si corresponde\n if(onlineOnly) {\n this.gid = \"gid=\" + this.indexOnline;\n }\n if(onlineAndPresencial) {\n this.gid += \"&gid=\" + this.indexOnline;\n }\n this.enabled = this.newForm.valid && levelSelected && gruposValid;\n }\n\n toggleHolidays() {\n this.newForm.patchValue({vacaciones: !this.newForm.value.vacaciones});\n }\n\n close() {\n this.closeEvent.emit();\n }\n\n getTrainingDays () {\n this.registerService.getTrainingDays()\n .subscribe(response => {\n this.allTrainingDays = response;\n //remover no definido y online, guardar el id de online\n this.allTrainingDays.splice(0,1);\n const index = this.allTrainingDays.findIndex(element => element.grupoDescripcion = \"Online\");\n this.indexOnline = this.allTrainingDays[index].entrenamientoGrupoId;\n this.allTrainingDays.splice(index,1);\n },\n error => {\n console.error(error);\n });\n }\n\n equals(objOne, objTwo) {\n if (typeof objOne !== 'undefined' && typeof objTwo !== 'undefined') {\n return objOne.id === objTwo.id;\n }\n }\n \n selectAll(select: NgModel, values) {\n select.update.emit(values); \n this.checkDisabled();\n }\n\n deselectAll(select: NgModel) {\n select.update.emit([]); \n this.checkDisabled();\n }\n}","
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    {{'messages.massive.empty' | translate}}

    \n
    \n

    {{'messages.massive.emptyNoAdmin' | translate}}

    \n

    {{'messages.massive.emptyNoAdmin2' | translate}}

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

    {{'messages.massive.noAdmin' | translate}}

    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { MessageListOption, Message, MassiveMessage, Canal, Mensaje } from '../../../../api/interfaces/messages';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from \"@angular/material/icon\";\nimport { RoleString } from 'src/app/enums/role';\nimport { RolService } from 'src/app/services/rol/rol.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MessagesService } from 'src/app/api/services/messages/messages.service';\nimport { TrainingDays } from 'src/app/api/interfaces/register';\nimport { Level, TType } from 'src/app/api/interfaces/user';\nimport { RegisterService } from 'src/app/api/services/register/register.service';\nimport { TrainingService } from 'src/app/api/services/training/training.service';\n\n@Component({\n selector: 'app-conversation-massive',\n templateUrl: './conversation-massive.component.html',\n styleUrls: ['./conversation-massive.component.scss']\n})\nexport class ConversationMassiveComponent implements OnInit {\n\n message: MessageListOption = null;\n\n moreMessagesAvalaible: boolean = true;\n showForm: boolean = false;\n isAdmin: boolean = true;\n loaded: boolean = false;\n\n CANTIDAD_ELEMENTOS: number = 10;\n pagina: number = 0;\n\n canal: Canal = null;\n\n // todo: remover mockup\n // messages: MassiveMessage[] = [\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"¡Felices fiestas!\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"ONLINE\", \"PRESENCIAL\", \"ENTRENADORES\" ], vacaciones: false },\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"¡Felices fiestas!\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"ONLINE\", \"PRESENCIAL\", \"ENTRENADORES\" ], vacaciones: false },\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"¡Felices fiestas!\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"ONLINE\", \"PRESENCIAL\", \"ENTRENADORES\" ], vacaciones: true } \n // ];\n\n messages: Mensaje [] = [];\n\n allLevels: Level[] = [];\n allTrainingDays: TrainingDays[] = [];\n allTypes: TType[] = [];\n\n constructor(\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private rol: RolService,\n private messagesService: MessagesService,\n private snack: SnackbarService,\n private registerService: RegisterService,\n private trainingService: TrainingService\n ) { \n this.matIconRegistry.addSvgIcon(\n `megaphone`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/megaphone.svg')\n );\n }\n\n ngOnInit(): void {\n this.isAdmin = this.rol.isAdmin();\n this.loadMessages();\n }\n\n loadMessages() {\n if(this.pagina == 0) {\n this.messages = [];\n }\n this.messagesService.getTodosMensajesMasivos(this.CANTIDAD_ELEMENTOS, this.pagina).subscribe(response => {\n const messages: Mensaje[] = response.content;\n this.moreMessagesAvalaible = false;\n\n //si pagina es cero quiero que el array sea la respuesta, sino debo agregar mas al final y conservar los anteriores\n if(this.pagina == 0) {\n this.messages = messages.reverse();\n } else {\n messages.forEach(aux => this.messages.unshift(aux));\n }\n\n if(response.totalPages > (this.pagina + 1)) {\n this.moreMessagesAvalaible = true;\n } else {\n this.moreMessagesAvalaible = false;\n }\n\n // this.messagesService.getMensajesMasivos(this.CANTIDAD_ELEMENTOS,this.pagina+1).subscribe(response => {\n // if(response.length > 0) {\n // this.moreMessagesAvalaible = true;\n // } else {\n // this.moreMessagesAvalaible = false;\n // }\n // }, error => {\n // console.error(error);\n // this.snack.snackTranslate('snacks.error.generic');\n // });\n this.getTrainingDays();\n }, error => {\n console.error(error);\n this.snack.snackTranslate('snacks.error.generic');\n });\n }\n\n newMessageEvent(message: Mensaje) {\n this.messages.push(message);\n this.toggleNewMassive();\n }\n\n toggleNewMassive() {\n this.showForm = ! this.showForm;\n }\n\n // todo: remover funcion y verificar en loadMessages\n toggleMoreMessages() {\n this.moreMessagesAvalaible = !this.moreMessagesAvalaible;\n }\n\n onUpMessages() {\n if(this.moreMessagesAvalaible) {\n\n this.pagina++;\n this.loadMessages();\n //todo: remover mockup\n // let mensajes: MassiveMessage[] = [\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"SCROLL 1\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"ONLINE\"], vacaciones: false },\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"SCROLL 2\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"PRESENCIAL\" ], vacaciones: false },\n // { fecha: new Date(\"2021-12-28T19:58:39.052Z\"), asunto: \"SCROLL 3\", mensaje: \"Lorem ipsum dolor sit amet consectetur, adipisicing elit. Non, veritatis officia iste iusto, fugit labore commodi tempora, incidunt provident ea aut perspiciatis eum omnis et obcaecati aliquam magnam ab praesentium?\", etiquetas: [ \"ONLINE\", \"PRESENCIAL\" ], vacaciones: false } ];\n \n //unshift para agregar al principio\n // this.messages.forEach(mensaje => this.messages.unshift(mensaje));\n }\n }\n\n closeEvent() {\n this.showForm = false;\n }\n\n loadLevels() {\n this.trainingService.getLevels().subscribe( response=> {\n this.allLevels = response;\n let remover: number = this.allLevels.findIndex(option => option.id == 1);\n if(remover != -1) {\n this.allLevels.splice(remover, 1);\n }\n this.getTrainingTypes();\n },\n error => {\n console.error(error);\n });\n }\n\n getTrainingTypes() {\n this.registerService.getTrainingTypes()\n .subscribe(response => {\n this.allTypes= response;\n this.loaded = true;\n },\n error => {\n console.error(error);\n });\n }\n\n getTrainingDays () {\n this.registerService.getTrainingDays()\n .subscribe(response => {\n this.allTrainingDays = response;\n //remover no definido\n this.allTrainingDays.splice(0,1);\n this.loadLevels();\n },\n error => {\n console.error(error);\n });\n }\n}\n","
    \n \n \n
    \n
    \n \n \n \n \n\n \n \n\n
    \n email\n

    {{'messages.noSelected' | translate}}

    \n

    {{'messages.noSelected2' | translate}}

    \n
    \n\n \n
    \n
    \n
    ","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\n\nimport { MessagePageComponent } from '../message-page/message-page.component';\n\n\nconst routes: Routes = [\n {\n path: 'mensajes',\n component: MessagePageComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN, RoleString.STUDENT] }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class MessagesRoutingModule { }","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ParametrosService } from 'src/app/api/services/parametros/parametros.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\nimport { Canal, Message } from '../../../api/interfaces/messages';\nimport { Subscription } from 'rxjs';\nimport { SharedDataService } from 'src/app/services/sharedData/shared-data.service';\n\n@Component({\n selector: 'app-message-page',\n templateUrl: './message-page.component.html',\n styleUrls: ['./message-page.component.scss']\n})\nexport class MessagePageComponent implements OnInit, OnDestroy {\n\n canal: Canal;\n\n showConversation: boolean = false;\n showMassive: boolean = false;\n isMobile: boolean = false;\n showList: boolean = true;\n\n private sharedData$: Subscription;\n\n constructor(\n private parametrosService: ParametrosService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private mobileDetectorService: MobileDetectorService,\n private sharedData: SharedDataService\n ) { \n this.matIconRegistry.addSvgIcon(\n `mail`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../assets/mail.svg')\n );\n }\n\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active','mensajes');\n this.loadLongitud();\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message === \"back\") {\n this.showConversation = false;\n this.showMassive = false;\n this.showList = true;\n }\n });\n }\n\n changeCurrentMessageEvent(canal: Canal) {\n this.canal = canal;\n this.showConversation = true;\n this.showMassive = false;\n this.showList = false;\n }\n\n massiveMessageEvent(aux: boolean) {\n this.showConversation = false;\n this.showList = false;\n this.showMassive = true;\n\n }\n\n async loadLongitud() {\n try {\n const longitudMensaje: number = await this.parametrosService.getLongitudMensaje();\n sessionStorage.setItem('longitudMensaje',longitudMensaje.toString())\n } catch (error) {\n console.error(error);\n sessionStorage.setItem('longitudMensaje',\"300\");\n }\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n \n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\n\nimport { MaterialModule } from '../../../material/material.module';\nimport { GlobalModule } from '../../global/modules/global.module'\nimport { MessagesRoutingModule } from './messages-routing.module';\nimport { MessagePageComponent} from '../message-page/message-page.component';\nimport { MessageComponent } from '../conversation/message/message.component';\nimport { SearchComponent } from '../list/search/search.component';\nimport { OptionComponent } from '../list/option/option.component';\nimport { MessageHeaderComponent } from '../conversation/message-header/message-header.component';\nimport { MessagesListComponent } from '../list/messages-list/messages-list.component';\nimport { NewMessageComponent } from '../conversation/new-message/new-message.component';\nimport { ConversationComponent } from '../conversation/conversation/conversation.component';\nimport { NewMassiveComponent } from '../massive/new-massive/new-massive.component';\nimport { MessageMassiveComponent } from '../massive/message-massive/message-massive.component';\nimport { ConversationMassiveComponent } from '../massive/conversation-massive/conversation-massive.component';\n\n\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\n\nimport {InfiniteScrollModule} from 'ngx-infinite-scroll';\nimport { PlansModule } from '../../plans/modules/plans.module';\n\n@NgModule({\n declarations: [\n MessagePageComponent,\n MessageComponent,\n SearchComponent,\n OptionComponent,\n MessageHeaderComponent,\n MessagesListComponent,\n NewMessageComponent,\n ConversationComponent,\n NewMassiveComponent,\n MessageMassiveComponent,\n ConversationMassiveComponent,\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FormsModule,\n ReactiveFormsModule,\n GlobalModule,\n MessagesRoutingModule,\n BrowserAnimationsModule,\n InfiniteScrollModule,\n PlansModule,\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: []\n})\nexport class MessagesModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\n\nimport { MaterialModule } from '../../../material/material.module';\nimport { MainpageadminComponent } from '../students/mainpageadmin/mainpageadmin.component';\nimport { AdminRoutingModule } from './admin-routing.module';\nimport { GlobalModule } from '../../global/modules/global.module'\nimport { ProfileComponent } from '../profile/profile/profile.component'\nimport { CreateStudentComponent } from '../students/create-student/create-student.component';\nimport { ProfileModule } from '../../profile/profile.module';\nimport { StudentsTableComponent } from '../students/students-table/students-table.component';\nimport { FiltersComponent } from '../students/filters/filters.component';\nimport { PaginatorComponent } from '../students/paginator/paginator.component';\nimport { PlansModule } from '../../plans/modules/plans.module';\n\nimport { SettingsPageComponent } from '../settings/settings-page/settings-page.component';\nimport { SettingsCardComponent } from '../settings/settings-card/settings-card.component';\nimport { GroupsMainComponent } from '../settings/groups/groups-main/groups-main.component';\nimport { GroupsListComponent } from '../settings/groups/groups-list/groups-list.component';\nimport { GroupsItemComponent } from '../settings/groups/groups-item/groups-item.component';\nimport { GroupsNewComponent } from '../settings/groups/groups-new/groups-new.component';\n\nimport { PageDomiciliacionComponent } from '../domiciliacion/page-domiciliacion/page-domiciliacion.component';\nimport { MonthTableDomiciliacionComponent } from '../domiciliacion/month-table-domiciliacion/month-table-domiciliacion.component';\nimport { NewPopupDomiciliacionComponent } from '../domiciliacion/new-popup-domiciliacion/new-popup-domiciliacion.component';\nimport { MainTableDomiciliacionComponent } from '../domiciliacion/main-table-domiciliacion/main-table-domiciliacion.component';\nimport { FiltersDomiciliacionComponent } from '../domiciliacion/filters-domiciliacion/filters-domiciliacion.component';\n\nimport { EmisorDialogComponent } from '../domiciliacion/emisor-dialog/emisor-dialog.component';\n\nimport { PopupArancelComponent } from '../domiciliacion/popup-arancel/popup-arancel.component';\nimport { MessagesModule } from '../../messages/modules/messages.module';\nimport { NgxMaskModule, IConfig } from 'ngx-mask'\n\nconst maskConfig: Partial = {\n validation: false,\n};\n@NgModule({\n declarations: [\n MainpageadminComponent,\n ProfileComponent,\n CreateStudentComponent,\n StudentsTableComponent,\n FiltersComponent,\n PaginatorComponent,\n\n SettingsPageComponent,\n SettingsCardComponent,\n GroupsMainComponent,\n GroupsListComponent,\n GroupsItemComponent,\n GroupsNewComponent,\n\n PageDomiciliacionComponent,\n MonthTableDomiciliacionComponent,\n NewPopupDomiciliacionComponent,\n MainTableDomiciliacionComponent,\n FiltersDomiciliacionComponent,\n PopupArancelComponent,\n EmisorDialogComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FormsModule,\n ReactiveFormsModule,\n AdminRoutingModule,\n GlobalModule,\n ProfileModule,\n PlansModule,\n MessagesModule,\n NgxMaskModule.forRoot(maskConfig),\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n ]\n})\nexport class AdminModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\nimport {StudentMyProfileComponent } from '../profile/student-my-profile/student-my-profile.component';\n\nconst routes: Routes = [\n {\n path: 'alumno/mi-perfil',\n component: StudentMyProfileComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class StudentRoutingModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\n\nimport { MaterialModule } from '../../../material/material.module';\n// import { MainpageadminComponent } from '../students/mainpageadmin/mainpageadmin.component';\nimport { StudentRoutingModule } from './student-routing.module';\nimport { GlobalModule } from '../../global/modules/global.module'\n// import { ProfileComponent } from '../profile/profile/profile.component'\nimport { ProfileModule } from '../../profile/profile.module';\nimport { StudentMyProfileComponent } from '../profile/student-my-profile/student-my-profile.component';\n// import { StudentMyProfileComponent } from '../profile/student-my-profile/student-my-profile.component';\n@NgModule({\n declarations: [\n // MainpageadminComponent,\n // ProfileComponent,\n StudentMyProfileComponent,\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FormsModule,\n ReactiveFormsModule,\n StudentRoutingModule,\n GlobalModule,\n ProfileModule,\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n exports: [\n StudentMyProfileComponent\n ]\n})\nexport class StudentModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../../../environments/environment';\nimport { ItemSeccion, OrdenarItems, OrdenarSecciones, PostEditItem, PostEditSeccion, Seccion, SeccionConItems } from '../../interfaces/sections';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SeccionesService {\n\n private url = environment.apiUrl + '/';\n\n httpOptionsJson = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n\n httpOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Accept': 'application/json'\n }),\n withCredentials: true,\n };\n multipartOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'multipart/form-data'\n }),\n withCredentials: true,\n };\n constructor(private http: HttpClient) { }\n\n postSeccion(seccion: PostEditSeccion): Observable {\n return this.http.post(this.url + 'api/informacion/seccion', seccion, this.httpOptionsJson);\n }\n\n getDatosSeccion(seccionId: number): Observable {\n return this.http.get(this.url + `api/api/informacion/seccion?seccionId=${seccionId}`, this.httpOptions);\n }\n\n /**\n * \n * @param seccionId numero\n * @param seccion PostSeccion: { seccionNombre: string;\n * seccionTipo: string;\n * activo: boolean;\n * }\n * @returns 200, 406\n */\n editarSeccion(seccionId: number, seccion: PostEditSeccion): Observable {\n return this.http.put(this.url + `api/informacion/seccion?seccionId=${seccionId}`, seccion, this.httpOptionsJson);\n }\n\n deleteSeccion(seccionId: number): Observable {\n return this.http.delete(this.url + `api/informacion/seccion?seccionId=${seccionId}`, this.httpOptionsJson);\n }\n\n getDatosListado(seccionId: number): Observable {\n return this.http.get(this.url + `api/informacion/seccion?seccionId=${seccionId}`, this.httpOptions);\n }\n\n /**\n * \n * @param tipo N: nutricion / T: complemento\n * @returns SeccionConItems[] / []\n */\n getSeccionesPorTipo(tipo: string): Observable {\n return this.http.get(this.url + `api/informacion/listado?tipo=${tipo}`, this.httpOptions);\n }\n\n getItem(itemId: number): Observable {\n return this.http.get(this.url + `api/informacion/item?itemId=1=${itemId}`, this.httpOptions);\n }\n\n postItem(item: PostEditItem): Observable {\n return this.http.post(this.url + 'api/informacion/item', item, this.httpOptionsJson);\n }\n\n editarItem(itemId: number, item: PostEditItem): Observable {\n return this.http.put(this.url + `api/informacion/item?itemId=${itemId}`, item, this.httpOptionsJson);\n }\n\n deleteItem(itemId: number): Observable {\n return this.http.delete(this.url + `api/informacion/item?itemId=${itemId}`, this.httpOptionsJson);\n }\n\n ordenarSecciones(nuevoOrden: OrdenarSecciones[]): Observable {\n return this.http.put(this.url + 'api/informacion/seccion/ordenar', nuevoOrden, this.httpOptionsJson);\n }\n\n ordenarItems(nuevoOrden: OrdenarItems[], seccionId: number): Observable {\n return this.http.put(this.url + `api/informacion/item/ordenar?seccionId=${seccionId}`, nuevoOrden, this.httpOptionsJson);\n }\n\n patchFile(files, itemId: number): Observable {\n const formData = new FormData();\n if (files && files.length > 0) {\n files.forEach(file => {\n formData.append('file', file);\n });\n }\n const multipartOptions = {\n withCredentials: true,\n };\n return this.http.patch(this.url + `api/informacion/item/archivo?itemId=${itemId}`, formData, multipartOptions);\n }\n \n}\n","
    \n
    \n

    {{'section.dialogs.newSection' | translate}}

    \n

    {{'section.dialogs.editSection' | translate}}

    \n\n \n
    \n
    \n \n {{ 'section.dialogs.input'| translate}} \n \n \n
    \n \n
    ","import { Component, OnInit, Inject } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { PostEditSeccion } from '../../../../../api/interfaces/sections';\nimport { SeccionesService } from '../../../../../api/services/secciones/secciones.service';\nimport { SharedDataService } from '../../../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from '../../../../../utils/snackbar/snackbar.service';\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * NewEditSectionComponent\n * @param data con datos para el dialog\n * @example add new element, no data\n * @example edit element\n data: {\n seccionId: 1,\n seccionNombre: \"Dietas\",\n seccionTipo: \"N\",\n }\n */\n@Component({\n selector: 'app-new-edit-section',\n templateUrl: './new-edit-section.component.html',\n styleUrls: ['./new-edit-section.component.scss']\n})\nexport class NewEditSectionComponent implements OnInit {\n\n waiting: boolean = false;\n edit: boolean = false;\n\n newForm = new FormGroup({\n seccionNombre: new FormControl(),\n seccionTipo: new FormControl()\n });\n\n constructor(\n private seccionesService: SeccionesService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private dialogRef: MatDialog,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) { }\n\n ngOnInit(): void {\n if(this.data.seccionNombre && this.data.seccionId) {\n this.newForm.patchValue({seccionNombre: this.data.seccionNombre});\n this.newForm.patchValue({seccionTipo: this.data.seccionTipo});\n this.edit = true;\n }\n }\n\n onSubmit() {\n const tipo: string = sessionStorage.getItem('tipo');\n const seccion: PostEditSeccion = {\n seccionNombre : this.newForm.value.seccionNombre,\n seccionTipo: tipo,\n activo: true\n }\n if(!this.edit) {\n this.seccionesService.postSeccion(seccion).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.post');\n this.sharedData.changeMessage(\"reloadSections\");\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n } else {\n this.seccionesService.editarSeccion(this.data.seccionId , seccion).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.editSection');\n this.sharedData.changeMessage(\"reloadSections\");\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n }\n}\n"," 0\">\n
    {{ 'section.dialogs.file'| translate}}
    \n
    1\">{{ 'section.dialogs.files'| translate}}
    \n \n article\n
    {{archivo.name}}
    \n
    {{(archivo.size/1000000) | number : '1.2-2'}} MB
    \n
    \n
    \n","import { Component, OnInit, Input } from '@angular/core';\n\n/**\n * Display files\n * @param archivos, File[]\n * @example \n * ```html\n * \n * ```\n */\n@Component({\n selector: 'app-files',\n templateUrl: './files.component.html',\n styleUrls: ['./files.component.scss']\n})\nexport class FilesComponent implements OnInit {\n\n\n @Input('archivos') archivos: File[];\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
    \n \n
    \n

    {{'section.dialogs.newVideo' | translate}}

    \n

    {{'section.dialogs.editVideo' | translate}}

    \n \n

    {{'section.dialogs.newFile' | translate}}

    \n

    {{'section.dialogs.editFile' | translate}}

    \n\n \n
    \n
    \n \n {{ 'section.dialogs.inputVideoName'| translate}} \n \n \n\n \n {{ 'section.dialogs.inputVideoPath'| translate}} \n \n \n\n \n\n
    \n \n \n

    {{'section.dialogs.label' | translate}}

    \n
    \n
    \n\n \n\n \n
    \n","import { Component, OnInit, Inject } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { DialogoAgregar, ItemSeccion, PostEditItem } from '../../../../../api/interfaces/sections';\nimport { SeccionesService } from '../../../../../api/services/secciones/secciones.service';\nimport { SharedDataService } from '../../../../../services/sharedData/shared-data.service';\nimport { SnackbarService } from '../../../../../utils/snackbar/snackbar.service';\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * NewEditElementComponent\n * @param data dialog data, \n * @interface DialogAgregar\n * @file sections.ts\n * @example add new element\n * data: {\n itemTipo: \"V\",\n seccionId: 1\n }\n * @example edit element\n data: {\n itemTipo: \"V\",\n itemId: 1,\n itemNombre: \"Video de ejemplo\",\n itemUbicacion: \"http://youtube.com/...\",\n seccionId: 1\n }\n */\n@Component({\n selector: 'app-new-edit-element',\n templateUrl: './new-edit-element.component.html',\n styleUrls: ['./new-edit-element.component.scss']\n})\nexport class NewEditElementComponent implements OnInit {\n\n waiting: boolean = false;\n edit: boolean = false;\n\n newForm = new FormGroup({\n itemNombre: new FormControl(),\n itemUbicacion: new FormControl(),\n });\n\n archivos: File[] = [];\n\n constructor(\n private seccionesService: SeccionesService,\n private snack: SnackbarService,\n private sharedData: SharedDataService,\n private dialogRef: MatDialog,\n @Inject(MAT_DIALOG_DATA) public data: DialogoAgregar\n ) { }\n\n ngOnInit(): void {\n if(this.data.itemNombre && this.data.itemUbicacion) {\n this.newForm.patchValue({itemNombre: this.data.itemNombre});\n this.newForm.patchValue({itemUbicacion: this.data.itemUbicacion});\n this.edit = true;\n }\n }\n\n onSubmit() {\n\n this.waiting = true;\n const { itemNombre, itemUbicacion } = this.newForm.getRawValue();\n const item: PostEditItem= { \n itemNombre : itemNombre,\n itemUbicacion: itemUbicacion,\n itemTipo: this.data.itemTipo,\n seccionId: this.data.seccionId,\n activo: true\n };\n if(this.edit) {\n this.seccionesService.editarItem(this.data.itemId, item).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.edit');\n\n //update show selected item component\n let aux: ItemSeccion = JSON.parse(sessionStorage.getItem('item'));\n aux.itemNombre = itemNombre;\n aux.itemUbicacion = itemUbicacion;\n sessionStorage.setItem('item',JSON.stringify(aux));\n //end of update\n\n this.sharedData.changeMessage(\"reloadSections\");\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n } else {\n if(this.data.itemTipo == 'V') {\n this.postItem(item);\n } else {\n //todo: si es un documento agregar endpoint para subirlo y luego llamar a postItem\n //image service\n this.postItem(item);\n }\n }\n }\n\n selectFiles(event) {\n this.archivos = [];\n for (var i = 0; i < event.target.files.length; i++) {\n this.archivos.push(event.target.files[i]);\n }\n }\n\n postItem(item: PostEditItem) {\n this.seccionesService.postItem(item).subscribe( response=> {\n sessionStorage.setItem('postItem',JSON.stringify(item));\n sessionStorage.setItem('inSection',item.seccionId.toString());\n if(item.itemTipo == 'P') {\n this.uploadFile(response);\n } else {\n this.snack.snackTranslate('snacks.sucess.sections.video');\n this.sharedData.changeMessage(\"reloadSections\");\n this.waiting = false;\n this.dialogRef.closeAll();\n }\n },\n error => {\n this.waiting = false;\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n uploadFile(response: number) {\n this.seccionesService.patchFile(this.archivos, response).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.file');\n this.sharedData.changeMessage(\"reloadSections\");\n this.waiting = false;\n this.dialogRef.closeAll();\n },\n error => {\n console.error(error);\n this.waiting = false;\n this.sharedData.changeMessage(\"reloadSections\");\n this.snack.openSnackBar(error.error.message);\n });\n }\n\n}\n","
    \n \n\n \n {{item.itemNombre |reduceText:20}}\n {{item.itemNombre}}\n \n {{item.itemNombre |reduceText:20}}\n {{item.itemNombre}}\n\n \n {{item.itemNombre}}\n {{item.itemNombre}}\n\n\n
    \n \n
    \n\n
    \n \n\n \n\n \n\n \n
    \n\n drag_indicator\n
    ","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AuxHideButtons, ItemSeccion } from '../../../../api/interfaces/sections';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { SeccionesService } from '../../../../api/services/secciones/secciones.service';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GenericDialogComponent} from '../../../generic-dialog/generic-dialog.component';\nimport { NewEditElementComponent } from '../new-edit/new-edit-element/new-edit-element.component';\nimport { RolService } from '../../../../services/rol/rol.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * ItemComponent\n * @param item interface ItemSeccion\n * @param itemClass - css class for div item, string\n * @param disableDragDrop - hide action buttons if drag and drop is enabled, boolean\n * @param disableDragDropItems - hide action buttons if drag and drop items is enabled, boolean\n * @param seccionId number\n * @param index number\n */\n@Component({\n selector: 'app-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss']\n})\nexport class ItemComponent implements OnInit, OnDestroy {\n\n @Input('item') item: ItemSeccion;\n @Input('index') index: number;\n @Input('itemClass') itemClass: string;\n @Input('seccionId') seccionId: number;\n @Input('seccionNombre') seccionNombre: string;\n @Input('disableDragDrop') disableDragDrop: boolean;\n @Input('disableDragDropItems') disableDragDropItems: boolean;\n\n @Output() toogleDragDropItemsEvent = new EventEmitter();\n\n hideButtons : AuxHideButtons = {\n hide: true,\n index: 0,\n };\n\n isAdmin: boolean = false;\n isMobile: boolean = false;\n\n icon: string = \"\";\n\n private sharedData$: Subscription;\n \n constructor(\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private sharedData: SharedDataService,\n private seccionesService: SeccionesService,\n private snack: SnackbarService, \n public dialog: MatDialog,\n private rolService: RolService,\n private mobileDetectorService: MobileDetectorService,\n ) { \n this.matIconRegistry.addSvgIcon(\n `documento`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/documento.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `video`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/video.svg')\n );\n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n this.isAdmin = this.rolService.isAdmin();\n switch(this.item.itemTipo) {\n case \"P\":\n this.icon = \"documento\";\n break;\n case \"V\":\n this.icon = \"video\";\n break;\n }\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message === \"hideButtons\") {\n this.hideButtons = JSON.parse(sessionStorage.getItem(('hideButtons')));\n }\n if (message === \"postItem\") {\n let aux: ItemSeccion = JSON.parse(sessionStorage.getItem('postItem'));\n let auxSection: number = parseInt(sessionStorage.getItem('inSection'),10);\n if(aux.itemNombre == this.item.itemNombre && this.seccionId == auxSection) {\n sessionStorage.removeItem('postItem');\n sessionStorage.removeItem('inSection');\n this.changeItem();\n }\n }\n });\n }\n\n changeItem() {\n sessionStorage.setItem('item',JSON.stringify(this.item));\n sessionStorage.setItem('seccionNombre',this.seccionNombre);\n this.sharedData.changeMessage(\"itemChanged\");\n this.item.selected = !this.item.selected;\n }\n\n removeItem() {\n let title: string = \"¿Está seguro que desea eliminar \"\n if(this.item.itemTipo == \"V\") {\n title = title+ \"el video?\"\n } else {\n title = title+ \"el documento?\"\n }\n\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: title,\n iconClass: \"bigBlueIcon\",\n text: \"\",\n icon: \"error_outlined\",\n confirm: \"ELIMINAR\",\n cancel: \"NO\"\n }\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if(result) {\n this.seccionesService.deleteItem(this.item.itemId).subscribe( response=> {\n if(this.item.itemTipo == \"V\") {\n this.snack.snackTranslate('snacks.sucess.sections.deleteVideo');\n } else {\n this.snack.snackTranslate('snacks.sucess.sections.deletePdf');\n }\n sessionStorage.removeItem('item');\n this.sharedData.changeMessage(\"reloadSections\");\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n });\n }\n\n edit() {\n this.dialog.open(NewEditElementComponent, {\n data: {\n itemTipo: this.item.itemTipo,\n itemId: this.item.itemId,\n itemNombre: this.item.itemNombre,\n itemUbicacion: this.item.itemUbicacion,\n seccionId: this.seccionId\n }\n });\n }\n\n toogleDrag() {\n this.toogleDragDropItemsEvent.emit();\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","
    \n
    \n

    {{seccion.seccionNombre |reduceText:15}}

    \n

    {{seccion.seccionNombre}}

    \n
    \n drag_indicator\n
    \n
    \n \n\n \n \n
    \n
    \n\n
    \n

    {{seccion.seccionNombre}}

    \n
    \n\n
    \n
    \n \n \n
    \n
    \n\n \n \n \n \n \n \n \n
    ","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { AuxHideButtons, OrdenarItems, Seccion, SeccionConItems } from '../../../../api/interfaces/sections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NewEditElementComponent } from '../new-edit/new-edit-element/new-edit-element.component';\nimport { CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\nimport { RolService } from '../../../../services/rol/rol.service';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { SnackbarService } from '../../../../utils/snackbar/snackbar.service';\nimport { SeccionesService } from '../../../../api/services/secciones/secciones.service';\nimport { GenericDialogComponent } from '../../../generic-dialog/generic-dialog.component';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { NewEditSectionComponent } from '../new-edit/new-edit-section/new-edit-section.component';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * \n * @param index number\n * @param class string, css style\n * @param seccion seccion data, interface SeccionConItems\n * @param disableDragDrop hide action buttons if drag and drop is enabled, boolean\n */\n@Component({\n selector: 'app-section',\n templateUrl: './section.component.html',\n styleUrls: ['./section.component.scss']\n})\nexport class SectionComponent implements OnInit {\n\n itemClass: string = \"flexEvenly pointer sectionHover\";\n\n isAdmin: boolean = false;\n isMobile: boolean = false;\n disableDragDropItems: boolean = true;\n\n @Input('index') index: number;\n @Input('class') class: string;\n @Input('seccion') seccion: SeccionConItems;\n @Input('disableDragDrop') disableDragDrop: boolean;\n \n\n @Output() toogleSectionsEvent = new EventEmitter();\n @Output() blockActionButtonsEvent = new EventEmitter();\n\n hideButtons : AuxHideButtons = {\n hide: true,\n index: 0,\n };\n\n constructor(\n public dialog: MatDialog,\n private rolService: RolService,\n private matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer,\n private snack: SnackbarService,\n private seccionesService: SeccionesService,\n private sharedData: SharedDataService,\n private mobileDetectorService: MobileDetectorService,\n ) { \n this.matIconRegistry.addSvgIcon(\n `delete`,\n this.domSanitizer.bypassSecurityTrustResourceUrl('../../../../../assets/delete.svg')\n );\n }\n\n ngOnInit(): void {\n this.isAdmin = this.rolService.isAdmin();\n this.isMobile = this.mobileDetectorService.isMobile();\n this.sharedData.currentMessage.subscribe(message => {\n if (message === \"hideButtons\") {\n this.hideButtons = JSON.parse(sessionStorage.getItem(('hideButtons')));\n }\n });\n }\n\n addElement(tipo: string) {\n this.dialog.open(NewEditElementComponent, {\n data: {\n itemTipo: tipo,\n seccionId: this.seccion.seccionId\n }\n });\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.seccion.items, event.previousIndex, event.currentIndex);\n }\n\n toggleDragDropItems(event, index: number) {\n this.disableDragDropItems = !this.disableDragDropItems;\n //reordenar con correccion para index = 0\n if(this.disableDragDropItems) {\n this.itemClass = \"flexEvenly pointer sectionHover\";\n this.seccion.items.forEach( (item,index) => item.itemOrden = index +1 );\n const nuevoOrden: OrdenarItems[] = [];\n this.seccion.items.forEach(item => {\n const aux: OrdenarItems = {\n id: item.itemId,\n itemOrden: item.itemOrden\n };\n nuevoOrden.push(aux);\n });\n this.seccionesService.ordenarItems(nuevoOrden, this.seccion.seccionId).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.dragItems');\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n } else {\n this.itemClass = \"flexEvenly move sectionHover\";\n }\n const aux: AuxHideButtons = {\n hide: this.disableDragDropItems,\n index: index\n }\n sessionStorage.setItem('hideButtons',JSON.stringify(aux));\n this.sharedData.changeMessage(\"hideButtons\");\n \n this.blockActionButtonsEvent.emit(this.disableDragDropItems);\n }\n\n edit() {\n this.dialog.open(NewEditSectionComponent, {\n data: {\n seccionId: this.seccion.seccionId,\n seccionNombre: this.seccion.seccionNombre,\n seccionTipo: this.seccion.seccionTipo,\n }\n });\n }\n\n delete() {\n const dialogRef = this.dialog.open(GenericDialogComponent, {\n data: {\n title: \"¿Desea eliminar la sección?\",\n iconClass: \"bigBlueIcon\",\n text: \"\",\n icon: \"error_outlined\",\n confirm: \"ELIMINAR\",\n cancel: \"NO\"\n }\n });\n \n dialogRef.afterClosed().subscribe(result => {\n if(result) {\n this.seccionesService.deleteSeccion(this.seccion.seccionId).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.deleteSection');\n this.sharedData.changeMessage(\"reloadSections\");\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n }\n });\n }\n\n toogleDragSections() {\n this.toogleSectionsEvent.emit();\n }\n\n}\n","\n\n

    {{ 'section.titles.nutr' | translate }}

    \n

    {{ 'section.titles.comp' | translate }}

    \n \n
    \n
    \n \n \n
    \n
    \n\n \n \n \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { OrdenarSecciones, SeccionConItems } from '../../../../api/interfaces/sections';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NewEditSectionComponent } from '../new-edit/new-edit-section/new-edit-section.component';\nimport {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\nimport { RolService } from '../../../../services/rol/rol.service';\nimport { SeccionesService } from 'src/app/api/services/secciones/secciones.service';\nimport { SnackbarService } from 'src/app/utils/snackbar/snackbar.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Display sections and allow admin to call actions: create, edit, delete, drag and drop\n * @param secciones - SeccionConItems[] receives secciones from current mode\n * @param tipo - string, N nutricion, T trabajo complementario\n */\n@Component({\n selector: 'app-card-section',\n templateUrl: './card-section.component.html',\n styleUrls: ['./card-section.component.scss']\n})\nexport class CardSectionComponent implements OnInit {\n\n @Input('secciones') secciones: SeccionConItems[];\n @Input('tipo') tipo: string;\n\n blockActionButtons: boolean = true;\n disableDragDrop: boolean = true;\n isMobile: boolean = false;\n isAdmin: boolean = false;\n \n class: string = \"section\";\n\n constructor(\n public dialog: MatDialog,\n private rolService: RolService,\n private seccionesService: SeccionesService,\n private snack: SnackbarService,\n private mobileDetectorService: MobileDetectorService,\n \n ) { }\n\n ngOnInit(): void {\n this.isAdmin = this.rolService.isAdmin();\n\n this.isMobile = this.mobileDetectorService.isMobile();\n }\n\n addSection() {\n this.dialog.open(NewEditSectionComponent, {\n backdropClass: 'backdropBackground',\n }); \n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.secciones, event.previousIndex, event.currentIndex);\n }\n\n toggleDragDrop() {\n this.disableDragDrop = !this.disableDragDrop;\n //reordenar con correccion para index = 0\n if(this.disableDragDrop) {\n this.secciones.forEach( (seccion,index) => seccion.seccionOrden = index +1 );\n this.class = \"section\";\n const nuevoOrden: OrdenarSecciones[] = [];\n this.secciones.forEach(seccion => {\n const aux: OrdenarSecciones = {\n id: seccion.seccionId,\n seccionOrden: seccion.seccionOrden\n };\n nuevoOrden.push(aux);\n })\n this.seccionesService.ordenarSecciones(nuevoOrden).subscribe( response=> {\n this.snack.snackTranslate('snacks.sucess.sections.dragSections');\n },\n error => {\n console.error(error);\n this.snack.openSnackBar(error.error.message);\n });\n\n } else {\n this.class = \"section move\"\n }\n }\n\n blockActionButtonsFunction (aux: boolean) {\n this.blockActionButtons = aux;\n }\n\n notify() {\n //todo: conectar a backend\n }\n}\n","
    \n
    \n
    \n visibility\n

    {{'section.noItem.title' | translate}}

    \n

    {{'section.noItem.subtitle' | translate}}

    \n
    \n
    \n
    \n\n
    \n\n \n
    \n \n chevron_left\n \n {{seccionNombre}}\n
    \n
    \n\n
    \n \n

    \n {{item.itemNombre}}\n

    \n\n \n
    \n\n \n\n \n \n\n \n \n\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ItemSeccion } from '../../../../api/interfaces/sections';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { FileData } from 'src/app/api/interfaces/fileData';\nimport { saveAs } from 'file-saver';\nimport { DownloadService } from 'src/app/api/services/download/download.service';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Read from sessionStorage selected item's data and display it.\n * Show video using 'iframe', show pdf using pdf-viewer from 'ng2-pdf-viewer'\n * \n * @param item ItemSeccion\n */\n@Component({\n selector: 'app-show-item-selected',\n templateUrl: './show-item-selected.component.html',\n styleUrls: ['./show-item-selected.component.scss']\n})\nexport class ShowItemSelectedComponent implements OnInit, OnDestroy {\n\n public safeURL: SafeResourceUrl;\n \n loadedPdf: boolean = false;\n isMobile: boolean = false;\n \n item: ItemSeccion;\n \n buttonClass: string = \"\";\n seccionNombre: string = \"\";\n pdfPath: string = \"\";\n icon: string = \"\";\n\n zoom: number = 0.9;\n zoom2: number = 1.2;\n\n private sharedData$: Subscription;\n\n constructor(\n private sharedData: SharedDataService,\n private sanitizer: DomSanitizer,\n private downloadService: DownloadService,\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n if(this.isMobile) {\n this.zoom = 1;\n this.buttonClass = \"tinyButtonMobile\";\n }\n \n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message === \"itemChanged\") {\n this.item = JSON.parse(sessionStorage.getItem('item'));\n this.seccionNombre = sessionStorage.getItem('seccionNombre');\n if(this.item) {\n\n switch (this.item.itemTipo) {\n case \"P\":\n this.loadedPdf = false;\n this.icon = \"documento\";\n this.getPreview();\n break;\n case \"V\":\n this.icon = \"video\";\n this.getVideoIframe(this.item.itemUbicacion);\n break;\n }\n }\n }\n if (message === \"reloadSections\") {\n this.item = JSON.parse(sessionStorage.getItem('postItem'));\n if(this.item) {\n this.sharedData.changeMessage(\"postItem\");\n } else {\n this.item = JSON.parse(sessionStorage.getItem('item'));\n }\n }\n });\n }\n\n getVideoIframe(url: string) {\n var video, results;\n if (url === null) {\n return '';\n }\n results = url.match('[\\\\?&]v=([^&#]*)');\n video = (results === null) ? url : results[1];\n return this.sanitizer.bypassSecurityTrustResourceUrl('https://www.youtube.com/embed/' + video);\n }\n\n async getPreview() {\n this.pdfPath = await this.downloadService.preview(this.item.itemId);\n this.loadedPdf = true;\n }\n\n download() {\n const fileData: FileData = {\n filename: this.item.itemNombre + \".pdf\",\n }\n this.downloadService.downloadFileNutricionComplementos(this.item.itemId)\n .subscribe(archivo => {\n saveAs(archivo, fileData.filename);\n });\n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n back() {\n sessionStorage.removeItem('item');\n this.sharedData.changeMessage(\"itemChanged\");\n this.item.selected = !this.item.selected;\n }\n\n}\n","
    \n\n \n \n
    \n
    \n \n \n \n
    \n\n
    \n
    \n

    {{ 'section.titles.nutr' | translate }}

    \n

    {{ 'section.titles.comp' | translate }}

    \n\n \n \n \n
    \n
    \n
    ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\nimport { ItemSeccion, Seccion, SeccionConItems } from '../../../../api/interfaces/sections';\nimport { SeccionesService } from '../../../../api/services/secciones/secciones.service';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\nimport { SharedDataService } from '../../../../services/sharedData/shared-data.service';\n\n/**\n * Get secciones and call CardSectionComponent to display them and ShowItemSelectedComponent to display any selected item.\n * N nutricion, T trabajo complementario\n */\n@Component({\n selector: 'app-main-generic',\n templateUrl: './main-generic.component.html',\n styleUrls: ['./main-generic.component.scss']\n})\nexport class MainGenericComponent implements OnInit, OnDestroy {\n\n showSection: boolean = true;\n isMobile: boolean = false;\n loaded: boolean = false;\n\n showSelected: boolean = true;\n\n secciones: SeccionConItems[] = [];\n isNutricion: boolean = false;\n tipo: string = \"T\";\n\n item: ItemSeccion;\n\n private sharedData$: Subscription;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n private seccionesService: SeccionesService,\n private sharedData: SharedDataService,\n private activatedrouter: ActivatedRoute,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n const url = this.activatedrouter.snapshot.routeConfig.path;\n if(url == 'nutricion') {\n this.tipo = 'N';\n }\n sessionStorage.setItem('tipo',this.tipo);\n sessionStorage.setItem('active', url);\n //bugfix #1920\n sessionStorage.removeItem('item');\n this.getDatos();\n this.sharedData$ = this.sharedData.currentMessage.subscribe(message => {\n if (message == \"reloadSections\") {\n this.secciones= [];\n this.getDatos();\n }\n if (message == \"itemChanged\") {\n this.unselectAll();\n // si hay un item quiero verlo en mobile, y no a las secciones\n let item = JSON.parse(sessionStorage.getItem('item'));\n if(item) {\n this.showSection = false;\n } else {\n this.showSection = true;\n }\n }\n });\n }\n\n unselectAll() {\n this.secciones.forEach(seccion => {\n seccion.items.forEach(item => {\n item.selected = false;\n })\n });\n }\n\n getDatos() {\n this.loaded = false;\n this.seccionesService.getSeccionesPorTipo(this.tipo).subscribe( response=> {\n this.secciones = response.sort(((a,b) => a.seccionOrden - b.seccionOrden));\n this.secciones.forEach(seccion => {\n seccion.items.sort(((a,b) => a.itemOrden - b.itemOrden));\n });\n this.unselectAll();\n this.loaded = true;\n },\n error => {\n console.error(error);\n });\n \n }\n\n public ngOnDestroy(): void {\n this.sharedData$.unsubscribe();\n }\n\n}\n","\n \n \n\n \n \n help\n \n {{pregunta.titulo}} \n \n \n

    \n
    \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { PreguntaFrecuente } from 'src/app/api/interfaces/help';\nimport { MobileDetectorService } from 'src/app/services/mobileDetector/mobile-detector.service';\n\n/**\n * Display one FAQ\n * @param pregunta - PreguntaFrecuente this is the FAQ for user to read\n */\n@Component({\n selector: 'app-pregunta-help',\n templateUrl: './pregunta-help.component.html',\n styleUrls: ['./pregunta-help.component.scss']\n})\nexport class PreguntaHelpComponent implements OnInit {\n\n isMobile: boolean = false;\n panelOpenState: boolean = false;\n\n @Input('pregunta') pregunta: PreguntaFrecuente;\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n }\n\n}\n","

    \n {{preguntasFrecuentes[0].subSeccionAyuda.nombre}}\n

    \n
    \n \n
    ","import { Component, OnInit, Input } from '@angular/core';\nimport { PreguntaFrecuente } from 'src/app/api/interfaces/help';\n\n/**\n * calls PreguntaHelpComponent for each FAQ and show subseccion's title\n */\n@Component({\n selector: 'app-subseccion-help',\n templateUrl: './subseccion-help.component.html',\n styleUrls: ['./subseccion-help.component.scss']\n})\nexport class SubseccionHelpComponent implements OnInit {\n @Input('preguntasFrecuentes') preguntasFrecuentes: PreguntaFrecuente[];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
    \n\n \n \n
    \n
    \n
    \n

    {{'section.help' | translate}}

    \n
    \n
    \n
    \n

    {{'section.help' | translate}}

    \n
    \n \n \n \n \n \n
    \n
    \n
    ","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthGuard } from 'src/app/auth.guard';\nimport { RoleString } from 'src/app/enums/role';\nimport { MainGenericComponent } from '../generic/main-generic/main-generic.component';\nimport { MainHelpComponent } from '../help/main-help/main-help.component';\n\n\nconst routes: Routes = [\n {\n path: 'complementario',\n component: MainGenericComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN, RoleString.STUDENT] }\n },\n {\n path: 'nutricion',\n component: MainGenericComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.ADMIN, RoleString.STUDENT] }\n },\n {\n path: 'ayuda',\n component: MainHelpComponent,\n canActivate: [AuthGuard],\n data: { roles: [RoleString.STUDENT] }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class SectionsRoutingModule { }","import { Component, OnInit } from '@angular/core';\nimport { PreguntaFrecuente, SubSeccionAyuda } from 'src/app/api/interfaces/help';\nimport { MobileDetectorService } from '../../../../services/mobileDetector/mobile-detector.service';\n\n/**\n * Create help arrays and call components so student can read help\n */\n@Component({\n selector: 'app-main-help',\n templateUrl: './main-help.component.html',\n styleUrls: ['./main-help.component.scss']\n})\nexport class MainHelpComponent implements OnInit {\n\n isMobile: boolean = false;\n\n preguntasFrecuentesCero : PreguntaFrecuente[] =[];\n preguntasFrecuentesPlanes : PreguntaFrecuente[] =[];\n preguntasFrecuentesComunicacion : PreguntaFrecuente[] =[];\n preguntasFrecuentesAdicional : PreguntaFrecuente[] =[];\n preguntasFrecuentesPerfil : PreguntaFrecuente[] =[];\n\n constructor(\n private mobileDetectorService: MobileDetectorService,\n ) { }\n\n ngOnInit(): void {\n this.isMobile = this.mobileDetectorService.isMobile();\n sessionStorage.setItem('active', 'ayuda');\n this.loadPreguntas();\n }\n\n loadPreguntas() {\n const subSeccionAyudaCero: SubSeccionAyuda = {\n id: 0,\n nombre: \"Marcas y objetivos\"\n };\n const subSeccionAyudaPlanes: SubSeccionAyuda = {\n id: 1,\n nombre: \"Entrenamiento\"\n };\n const subSeccionAyudaComunicacion: SubSeccionAyuda = {\n id: 2,\n nombre: \"Comunicación con VG Running\"\n };\n const subSeccionAyudaAdicional: SubSeccionAyuda = {\n id: 3,\n nombre: \"Contenido Adicional\"\n };\n const subSeccionAyudaPerfil: SubSeccionAyuda = {\n id: 4,\n nombre: \"Configuración de Perfil\"\n };\n\n\n //seccion marcas y objetivos\n let pregunta: PreguntaFrecuente = {\n titulo: \"¿Cómo registro mis marcas y objetivos?\",\n texto: \"Las marcas y objetivos son de gran importancia para que podamos crear planes 100% personalizados, enfocándonos en tus metas. Si no las agregaste al registrarte, puedes hacerlo en cualquier momento siguiendo los siguientes pasos:
    1- Ingresa a la sección “Marcas y objetivos” situada en el menú
    2- Si deseas agregar “Marcas” pincha en el botón “Editar” (situado a la derecha del título “Marcas”). Luego visualizarás distintos tipos de marcas que podrás agregar. Pincha en “Agregar” sobre la marca que quieras registrar. Luego podrás completar el tiempo y la fecha de la misma
    3- Si deseas agregar “Objetivos” pincha en el botón “Editar” (situado al lado del título “Objetivos”). Pincha en “Agregar” y podrás nombrar tantos objetivos como lo desees colocándole una fecha límite para cumplirlos\",\n subSeccionAyuda: subSeccionAyudaCero\n }\n this.preguntasFrecuentesCero.push(pregunta);\n\n //seccion planes, renombrada a entrenamiento\n pregunta = {\n titulo: \"¿Cada cuanto tiempo recibo el plan de entrenamiento?\",\n texto: \"En VG Running queremos que la experiencia sea 100% personalizada y de seguimiento continuo. Es por eso que recibirás un plan de entreno semanal, que se ajustará a tus objetivos y forma física.\",\n subSeccionAyuda: subSeccionAyudaPlanes\n }\n\n this.preguntasFrecuentesPlanes.push(pregunta);\n\n pregunta = {\n titulo: \"¿Cómo doy feedback sobre mi entrenamiento diario?\",\n texto: \"Dar feedback sobre el día de entreno es fundamental para que desde VG Running podamos ir ajustando el plan a tus necesidades y nivel. Solo podrás dar feedback sobre días de la semana en curso. Puedes hacerlo siguiendo los siguientes pasos:
    1- Ingresa a la sección de “Planes” situada en el menú
    2- Selecciona el día en el cual quieres dejar feedback
    3- Allí visualizarás las actividades que lo conforman y el título “¿Cómo te has sentido hoy?” donde podrás indicar cómo te has sentido a través de un sistema de semáforos. Vaya bien, regular o mal siempre podrás dejarnos resumen y comentarios de tu entrenamiento.\",\n subSeccionAyuda: subSeccionAyudaPlanes\n }\n\n this.preguntasFrecuentesPlanes.push(pregunta);\n\n\n pregunta = {\n titulo: \"¿Cómo descargo mi plan en PDF?\",\n texto: \"Si quieres tener tu plan de entreno en PDF debes seguir los siguientes pasos:

    1- Ingresa a la sección de “Planes” situada en el menú
    2- Selecciona la semana de entrenamiento que quieres visualizar
    3- Pincha sobre el botón “Descargar plan” situado en la parte superior derecha de la pantalla
    4- Tu plan se descargará y se abrirá en una pestaña nueva dentro del navegador\",\n subSeccionAyuda: subSeccionAyudaPlanes\n }\n\n\n\n this.preguntasFrecuentesPlanes.push(pregunta);\n\n pregunta = {\n titulo: \"¿Cómo modifico mis días de entrenamiento?\",\n texto: 'Si quieres modificar la disponibilidad de tus días de entrenamiento debes seguir los siguientes pasos:

    1- Ingresa a la sección “Mensajes” situada en el menú
    2- Una vez dentro, pincha sobre tu entrenador/a
    3- Pincha sobre el espacio dispuesto para escribir y solicítale los cambios en tus días de entrenamiento
    4- Tu entrenador/a será notificado sobre el mensaje y realizará el cambio desde su perfil administrador
    5- Luego de hacerlo podrás verlo reflejado en la sección \"Mis planes\" a partir de la próxima semana',\n subSeccionAyuda: subSeccionAyudaPlanes\n }\n\n this.preguntasFrecuentesPlanes.push(pregunta);\n\n\n //seccion de comunicacion\n \n pregunta = {\n titulo: \"¿Cómo puedo comunicarme con mi entrenador/a?\",\n texto: \"En VG Running la comunicación y el seguimiento contínuo son dos pilares fundamentales que nos diferencian. Por eso es importante poder responder a cada duda que te vaya surgiendo. Para comunicarte con tu entrenador/a debes seguir los siguientes pasos:

    1- Ingresa a la sección “Mensajes” situada en el menú
    2- Una vez dentro, pincha sobre tu entrenador/a
    3- Pincha sobre el espacio dispuesto para escribir y envíale un mensaje
    4- Tu entrenador/a será notificado sobre el mensaje y te responderá durante el transcurso del día\",\n subSeccionAyuda: subSeccionAyudaComunicacion\n }\n\n this.preguntasFrecuentesComunicacion.push(pregunta);\n\n pregunta = {\n titulo: \"¿Cómo me entero de las novedades de VG Running?\",\n texto: \"En VG Running estamos en constante comunicación con nuestros alumnos/as. Por eso creamos las “Novedades VG Running”. Aquí notificamos a nuestros alumnos/as sobre distintas novedades de gran importancia: suspensión de clases por cierre de parque, saludos de fin de año, tips, etc. Para ingresar a verlas debes seguir los siguientes pasos:

    1- Ingresa a la sección “Mensajes” situada en el menú
    2- Una vez dentro, pincha sobre “Novedades VG Running”
    3- Estas novedades son meramente informativas y no puedes responder a ellas. Si tienes dudas, comunicate directamente con tu entrenador/a\",\n subSeccionAyuda: subSeccionAyudaComunicacion\n }\n\n this.preguntasFrecuentesComunicacion.push(pregunta);\n\n\n //seccion contenido adicional\n\n pregunta = {\n titulo: \"¿Cómo descargo el contenido de trabajo complementario y nutrición?\",\n texto: \"Si quieres tener los materiales de trabajo complementario y nutrición en PDF debes seguir los siguientes pasos:

    1- Ingresa a la sección de “Trabajo complementario” o “Nutrición”, según lo que sea de tu interés en ese momento
    2- Pincha sobre el documento que quieres visualizar ubicado en la barra lateral izquierda
    3- Visualiza el contenido del archivo a la derecha y pincha sobre el botón “Descargar PDF” situado en la parte superior derecha de la pantalla
    4- El archivo se descargará y se abrirá en una pestaña nueva dentro del navegador\",\n subSeccionAyuda: subSeccionAyudaAdicional\n }\n\n this.preguntasFrecuentesAdicional.push(pregunta);\n\n //seccion perfil\n\n pregunta = {\n titulo: \"¿Cómo cargo mi foto de perfil?\",\n texto: \"Si quieres subir tu foto de perfil o quieres cambiarla, debes seguir los siguientes pasos
    1- Pincha en el avatar ubicado en la parte superior derecha de la pantalla
    2- Se desplegarán dos opciones. Pincha sobre “Mi perfil”
    3- Dentro de “Mi perfil” presiona sobre el avatar
    4- Elige la foto que quieras adjuntar, ya sea desde tu móvil u ordenador. Ten en cuenta que el archivo debe tener un formato de imagen y su peso no puede superar los 10 MB.
    5- Una vez seleccionada y confirmada, deberás esperar unos segundos a que se complete la carga y ya ¡Tu foto quedará actualizada!\",\n subSeccionAyuda: subSeccionAyudaPerfil\n }\n\n this.preguntasFrecuentesPerfil.push(pregunta);\n\n pregunta = {\n titulo: \"¿Cómo cambio mi contraseña?\",\n texto: \"Para cambiar tu contraseña o recuperarla debes seguir los siguientes pasos:

    1- Ingresa a la pantalla de inicio de la plataforma (plataforma.vgrunning.com)
    2- Pincha sobre el botón “Recuperar contraseña”
    3- El sistema te solicitará que ingreses el email con el que fuiste registrado en la plataforma. Luego de ingresarlo, pincha sobre “Continuar”.
    4- Unos segundos después recibirás un correo de VG Running con un link para que modifiques o recuperes tu contraseña. Pincha sobre ese link
    5- Serás enviado a una pantalla de la plataforma que te pedirá que coloques una nueva contraseña y que la repitas por seguridad
    6- Pincha sobre “Confirmar contraseña” y listo
    7- El sistema te solicitará que te vuelvas a logear con las nuevas credenciales\",\n subSeccionAyuda: subSeccionAyudaPerfil\n }\n\n this.preguntasFrecuentesPerfil.push(pregunta);\n\n pregunta = {\n titulo: \"¿Cómo me doy de baja en VG Running?\",\n texto: \"Para darte de baja debes seguir los siguientes pasos:

    1- Ingresa a la sección “Mensajes” situada en el menú
    2- Una vez dentro, pincha sobre tu entrenador/a
    3- Pincha sobre el espacio dispuesto para escribir y envíale un mensaje solicitando la baja
    4- Tu entrenador/a será notificado sobre el mensaje y te responderá durante el transcurso del día

    Te echaremos de menos y tendrás las puertas abiertas para volver cuando lo desees.

    Consideraciones importantes luego de la baja:

    • No recibirás más los planes de entreno semanales y tampoco podrás ingresar a la plataforma
    • Si cambias de opinión, no dudes en contactarnos, ya que toda tu información (historial de planes, conversaciones, marcas y objetivos, trabajos complementarios, etc) quedará almacenada en la plataforma y al reactivarte podrás acceder nuevamente a ella
    \",\n subSeccionAyuda: subSeccionAyudaPerfil\n }\n\n this.preguntasFrecuentesPerfil.push(pregunta);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule, HttpClient } from '@angular/common/http';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule, TranslateLoader } from '@ngx-translate/core';\nimport { MaterialModule } from '../../../material/material.module';\nimport { GlobalModule } from '../../global/modules/global.module';\nimport { SectionsRoutingModule } from './sections-routing.module';\n\nimport { FileGenericComponent } from '../generic/file-generic/file-generic.component';\nimport { MainGenericComponent } from '../generic/main-generic/main-generic.component';\nimport { NewFileComponent } from '../generic/new-edit/new-file/new-file.component';\nimport { NewEditElementComponent } from '../generic/new-edit/new-edit-element/new-edit-element.component';\nimport { VideoGenericComponent } from '../generic/video-generic/video-generic.component';\nimport { CardSectionComponent } from '../generic/card-section/card-section.component';\nimport { MainNutricionComponent } from '../nutricion/main-nutricion/main-nutricion.component';\nimport { NewEditSectionComponent } from '../generic/new-edit/new-edit-section/new-edit-section.component';\nimport { SectionComponent } from '../generic/section/section.component';\nimport { ItemComponent } from '../generic/item/item.component';\nimport { ShowItemSelectedComponent } from '../generic/show-item-selected/show-item-selected.component'\nimport { PdfViewerModule } from 'ng2-pdf-viewer';\nimport { PlansModule } from '../../plans/modules/plans.module';\n\nimport { MainHelpComponent } from '../help/main-help/main-help.component';\nimport { SubseccionHelpComponent } from '../help/subseccion-help/subseccion-help.component';\nimport { PreguntaHelpComponent } from '../help/pregunta-help/pregunta-help.component';\n\n@NgModule({\n declarations: [\n FileGenericComponent,\n MainGenericComponent,\n NewFileComponent,\n NewEditElementComponent,\n VideoGenericComponent,\n CardSectionComponent,\n\n NewEditSectionComponent,\n SectionComponent,\n ItemComponent,\n ShowItemSelectedComponent,\n\n MainNutricionComponent,\n\n\n MainHelpComponent,\n SubseccionHelpComponent,\n PreguntaHelpComponent,\n \n ],\n imports: [\n CommonModule,\n MaterialModule,\n HttpClientModule,\n ReactiveFormsModule,\n GlobalModule,\n SectionsRoutingModule,\n PdfViewerModule,\n PlansModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ], exports: [\n\n ]\n})\nexport class SectionsModule { }\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { AuthorizationInterceptor } from './interceptors/authorization/authorization-interceptor.interceptor';\nimport { ExpiredInterceptor } from './interceptors/expired/expired.interceptor';\n\nimport { MaterialModule } from './material/material.module'; \nimport { LoginModule } from './components/login/login.module';\nimport { LoginRoutingModule } from './components/login/login-routing.module';\nimport { RegistrationModule } from './components/registration/modules/registration.module'; \n\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {TranslateHttpLoader} from '@ngx-translate/http-loader';\nimport {HttpClient, HttpClientModule, HTTP_INTERCEPTORS} from '@angular/common/http';\nimport { TranslateComponent } from './components/translate/translate/translate.component';\nimport { SpinnerInterceptor } from './interceptors/spinner/spinner.interceptor';\nimport { RegistrationRoutingModule } from './components/registration/modules/registration-routing.module';\n\nimport { GlobalModule } from './components/global/modules/global.module';\nimport { AdminModule } from './components/admin/modules/admin.module';\nimport { ProfileModule } from './components/profile/profile.module';\nimport { StudentModule } from './components/student/modules/student.module';\nimport { PlansModule } from './components/plans/modules/plans.module';\nimport { SectionsModule } from './components/sections/modules/sections.module';\n\nimport { GenericDialogComponent } from './components/generic-dialog/generic-dialog.component';\nimport { FeedbackDialogComponent } from './components/plans/feedback-dialog/feedback-dialog.component';\n\nimport { registerLocaleData } from '@angular/common';\nimport localeEs from \"@angular/common/locales/es\";\nimport { MessagesModule } from './components/messages/modules/messages.module';\n\nimport {InfiniteScrollModule} from 'ngx-infinite-scroll';\n\n// import { PdfViewerModule } from 'ng2-pdf-viewer';\n\nregisterLocaleData(localeEs);\n\n@NgModule({\n declarations: [\n AppComponent,\n TranslateComponent,\n GenericDialogComponent,\n FeedbackDialogComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n MaterialModule,\n LoginModule,\n FormsModule,\n ReactiveFormsModule,\n LoginRoutingModule,\n RegistrationModule,\n RegistrationRoutingModule,\n GlobalModule,\n AdminModule,\n ProfileModule,\n StudentModule,\n PlansModule,\n MessagesModule,\n InfiniteScrollModule,\n SectionsModule,\n // PdfViewerModule,\n\n HttpClientModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: AuthorizationInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: SpinnerInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ExpiredInterceptor, multi: true },\n ],\n bootstrap: [AppComponent],\n exports: [\n ProfileModule,\n PlansModule\n ]\n})\nexport class AppModule { }\n\nexport function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(http);\n}","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","var map = {\n\t\"./af\": 2275,\n\t\"./af.js\": 2275,\n\t\"./ar\": 857,\n\t\"./ar-dz\": 1218,\n\t\"./ar-dz.js\": 1218,\n\t\"./ar-kw\": 4754,\n\t\"./ar-kw.js\": 4754,\n\t\"./ar-ly\": 6680,\n\t\"./ar-ly.js\": 6680,\n\t\"./ar-ma\": 2178,\n\t\"./ar-ma.js\": 2178,\n\t\"./ar-sa\": 6522,\n\t\"./ar-sa.js\": 6522,\n\t\"./ar-tn\": 5682,\n\t\"./ar-tn.js\": 5682,\n\t\"./ar.js\": 857,\n\t\"./az\": 164,\n\t\"./az.js\": 164,\n\t\"./be\": 9774,\n\t\"./be.js\": 9774,\n\t\"./bg\": 947,\n\t\"./bg.js\": 947,\n\t\"./bm\": 1832,\n\t\"./bm.js\": 1832,\n\t\"./bn\": 9650,\n\t\"./bn-bd\": 4477,\n\t\"./bn-bd.js\": 4477,\n\t\"./bn.js\": 9650,\n\t\"./bo\": 6005,\n\t\"./bo.js\": 6005,\n\t\"./br\": 8492,\n\t\"./br.js\": 8492,\n\t\"./bs\": 534,\n\t\"./bs.js\": 534,\n\t\"./ca\": 2061,\n\t\"./ca.js\": 2061,\n\t\"./cs\": 4737,\n\t\"./cs.js\": 4737,\n\t\"./cv\": 1167,\n\t\"./cv.js\": 1167,\n\t\"./cy\": 7996,\n\t\"./cy.js\": 7996,\n\t\"./da\": 9528,\n\t\"./da.js\": 9528,\n\t\"./de\": 4540,\n\t\"./de-at\": 9430,\n\t\"./de-at.js\": 9430,\n\t\"./de-ch\": 7978,\n\t\"./de-ch.js\": 7978,\n\t\"./de.js\": 4540,\n\t\"./dv\": 3426,\n\t\"./dv.js\": 3426,\n\t\"./el\": 6616,\n\t\"./el.js\": 6616,\n\t\"./en-au\": 3816,\n\t\"./en-au.js\": 3816,\n\t\"./en-ca\": 2162,\n\t\"./en-ca.js\": 2162,\n\t\"./en-gb\": 3305,\n\t\"./en-gb.js\": 3305,\n\t\"./en-ie\": 1954,\n\t\"./en-ie.js\": 1954,\n\t\"./en-il\": 3060,\n\t\"./en-il.js\": 3060,\n\t\"./en-in\": 9923,\n\t\"./en-in.js\": 9923,\n\t\"./en-nz\": 3540,\n\t\"./en-nz.js\": 3540,\n\t\"./en-sg\": 6505,\n\t\"./en-sg.js\": 6505,\n\t\"./eo\": 1907,\n\t\"./eo.js\": 1907,\n\t\"./es\": 6640,\n\t\"./es-do\": 1246,\n\t\"./es-do.js\": 1246,\n\t\"./es-mx\": 6131,\n\t\"./es-mx.js\": 6131,\n\t\"./es-us\": 6430,\n\t\"./es-us.js\": 6430,\n\t\"./es.js\": 6640,\n\t\"./et\": 2551,\n\t\"./et.js\": 2551,\n\t\"./eu\": 2711,\n\t\"./eu.js\": 2711,\n\t\"./fa\": 2109,\n\t\"./fa.js\": 2109,\n\t\"./fi\": 3390,\n\t\"./fi.js\": 3390,\n\t\"./fil\": 7860,\n\t\"./fil.js\": 7860,\n\t\"./fo\": 8216,\n\t\"./fo.js\": 8216,\n\t\"./fr\": 9291,\n\t\"./fr-ca\": 8527,\n\t\"./fr-ca.js\": 8527,\n\t\"./fr-ch\": 8407,\n\t\"./fr-ch.js\": 8407,\n\t\"./fr.js\": 9291,\n\t\"./fy\": 7054,\n\t\"./fy.js\": 7054,\n\t\"./ga\": 9540,\n\t\"./ga.js\": 9540,\n\t\"./gd\": 3917,\n\t\"./gd.js\": 3917,\n\t\"./gl\": 1486,\n\t\"./gl.js\": 1486,\n\t\"./gom-deva\": 6245,\n\t\"./gom-deva.js\": 6245,\n\t\"./gom-latn\": 8868,\n\t\"./gom-latn.js\": 8868,\n\t\"./gu\": 9652,\n\t\"./gu.js\": 9652,\n\t\"./he\": 9019,\n\t\"./he.js\": 9019,\n\t\"./hi\": 2040,\n\t\"./hi.js\": 2040,\n\t\"./hr\": 3402,\n\t\"./hr.js\": 3402,\n\t\"./hu\": 9322,\n\t\"./hu.js\": 9322,\n\t\"./hy-am\": 7609,\n\t\"./hy-am.js\": 7609,\n\t\"./id\": 7942,\n\t\"./id.js\": 7942,\n\t\"./is\": 8275,\n\t\"./is.js\": 8275,\n\t\"./it\": 3053,\n\t\"./it-ch\": 4378,\n\t\"./it-ch.js\": 4378,\n\t\"./it.js\": 3053,\n\t\"./ja\": 6176,\n\t\"./ja.js\": 6176,\n\t\"./jv\": 679,\n\t\"./jv.js\": 679,\n\t\"./ka\": 2726,\n\t\"./ka.js\": 2726,\n\t\"./kk\": 2953,\n\t\"./kk.js\": 2953,\n\t\"./km\": 6957,\n\t\"./km.js\": 6957,\n\t\"./kn\": 9181,\n\t\"./kn.js\": 9181,\n\t\"./ko\": 7148,\n\t\"./ko.js\": 7148,\n\t\"./ku\": 7752,\n\t\"./ku.js\": 7752,\n\t\"./ky\": 5675,\n\t\"./ky.js\": 5675,\n\t\"./lb\": 1263,\n\t\"./lb.js\": 1263,\n\t\"./lo\": 5746,\n\t\"./lo.js\": 5746,\n\t\"./lt\": 9655,\n\t\"./lt.js\": 9655,\n\t\"./lv\": 8753,\n\t\"./lv.js\": 8753,\n\t\"./me\": 4054,\n\t\"./me.js\": 4054,\n\t\"./mi\": 1573,\n\t\"./mi.js\": 1573,\n\t\"./mk\": 202,\n\t\"./mk.js\": 202,\n\t\"./ml\": 8523,\n\t\"./ml.js\": 8523,\n\t\"./mn\": 9794,\n\t\"./mn.js\": 9794,\n\t\"./mr\": 6681,\n\t\"./mr.js\": 6681,\n\t\"./ms\": 6975,\n\t\"./ms-my\": 9859,\n\t\"./ms-my.js\": 9859,\n\t\"./ms.js\": 6975,\n\t\"./mt\": 3691,\n\t\"./mt.js\": 3691,\n\t\"./my\": 5152,\n\t\"./my.js\": 5152,\n\t\"./nb\": 7607,\n\t\"./nb.js\": 7607,\n\t\"./ne\": 1526,\n\t\"./ne.js\": 1526,\n\t\"./nl\": 6368,\n\t\"./nl-be\": 3496,\n\t\"./nl-be.js\": 3496,\n\t\"./nl.js\": 6368,\n\t\"./nn\": 8420,\n\t\"./nn.js\": 8420,\n\t\"./oc-lnc\": 1906,\n\t\"./oc-lnc.js\": 1906,\n\t\"./pa-in\": 4504,\n\t\"./pa-in.js\": 4504,\n\t\"./pl\": 4721,\n\t\"./pl.js\": 4721,\n\t\"./pt\": 4645,\n\t\"./pt-br\": 4548,\n\t\"./pt-br.js\": 4548,\n\t\"./pt.js\": 4645,\n\t\"./ro\": 1977,\n\t\"./ro.js\": 1977,\n\t\"./ru\": 6042,\n\t\"./ru.js\": 6042,\n\t\"./sd\": 8849,\n\t\"./sd.js\": 8849,\n\t\"./se\": 7739,\n\t\"./se.js\": 7739,\n\t\"./si\": 5546,\n\t\"./si.js\": 5546,\n\t\"./sk\": 2449,\n\t\"./sk.js\": 2449,\n\t\"./sl\": 3086,\n\t\"./sl.js\": 3086,\n\t\"./sq\": 3139,\n\t\"./sq.js\": 3139,\n\t\"./sr\": 607,\n\t\"./sr-cyrl\": 63,\n\t\"./sr-cyrl.js\": 63,\n\t\"./sr.js\": 607,\n\t\"./ss\": 131,\n\t\"./ss.js\": 131,\n\t\"./sv\": 1665,\n\t\"./sv.js\": 1665,\n\t\"./sw\": 5642,\n\t\"./sw.js\": 5642,\n\t\"./ta\": 3622,\n\t\"./ta.js\": 3622,\n\t\"./te\": 4825,\n\t\"./te.js\": 4825,\n\t\"./tet\": 8336,\n\t\"./tet.js\": 8336,\n\t\"./tg\": 9238,\n\t\"./tg.js\": 9238,\n\t\"./th\": 9463,\n\t\"./th.js\": 9463,\n\t\"./tk\": 9986,\n\t\"./tk.js\": 9986,\n\t\"./tl-ph\": 9672,\n\t\"./tl-ph.js\": 9672,\n\t\"./tlh\": 43,\n\t\"./tlh.js\": 43,\n\t\"./tr\": 1212,\n\t\"./tr.js\": 1212,\n\t\"./tzl\": 110,\n\t\"./tzl.js\": 110,\n\t\"./tzm\": 482,\n\t\"./tzm-latn\": 8309,\n\t\"./tzm-latn.js\": 8309,\n\t\"./tzm.js\": 482,\n\t\"./ug-cn\": 2495,\n\t\"./ug-cn.js\": 2495,\n\t\"./uk\": 4157,\n\t\"./uk.js\": 4157,\n\t\"./ur\": 5826,\n\t\"./ur.js\": 5826,\n\t\"./uz\": 4141,\n\t\"./uz-latn\": 3662,\n\t\"./uz-latn.js\": 3662,\n\t\"./uz.js\": 4141,\n\t\"./vi\": 2607,\n\t\"./vi.js\": 2607,\n\t\"./x-pseudo\": 6460,\n\t\"./x-pseudo.js\": 6460,\n\t\"./yo\": 2948,\n\t\"./yo.js\": 2948,\n\t\"./zh-cn\": 2658,\n\t\"./zh-cn.js\": 2658,\n\t\"./zh-hk\": 9352,\n\t\"./zh-hk.js\": 9352,\n\t\"./zh-mo\": 8274,\n\t\"./zh-mo.js\": 8274,\n\t\"./zh-tw\": 8451,\n\t\"./zh-tw.js\": 8451\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;"],"sourceRoot":"webpack:///","file":"main.js"}