{"version":3,"sources":["../app/app.module.js","../app/blocks/exception/exception.module.js","../app/blocks/exception/exception-handler.provider.js","../app/blocks/exception/exception.js","../app/blocks/logger/logger.module.js","../app/blocks/logger/logger.js","../app/blocks/router/router.module.js","../app/blocks/router/routehelper.js","../app/core/core.module.js","../app/core/constants.js","../app/core/authInterceptor.js","../app/core/preventTemplateCacheInterceptor.js","../app/core/userInfoSrv.js","../app/core/coreSrv.js","../app/core/apiBaseSrv.js","../app/core/fileReaderSrv.js","../app/core/bloqueoXUsuarioSrv.js","../app/core/config.js","../app/services/interface/animationsSrv.js","../app/widgets/widgets.module.js","../app/widgets/plaOwlCarousel.js","../app/widgets/plaNavBar.js","../app/widgets/plaTopBar.js","../app/widgets/plaActionModal.js","../app/widgets/buscadorDocumento.js","../app/widgets/errorLogModal.js","../app/widgets/plaCompare.js","../app/widgets/plaPositive.js","../app/widgets/plaValidMonth.js","../app/widgets/plaFile.js","../app/widgets/plaFileModel.js","../app/widgets/plaEnter.js","../app/widgets/convertToNumber.js","../app/layout/layout.module.js","../app/layout/shell.js","../app/login/login.module.js","../app/login/config.route.js","../app/login/login.js","../app/login/loginSrv.js","../app/usuarios/usuarios.module.js","../app/usuarios/config.route.js","../app/usuarios/usuarios.js","../app/usuarios/crearPublicUsuario.js","../app/usuarios/recuperarPassword.js","../app/usuarios/editarUsuario.js","../app/usuarios/editarAtleta.js","../app/usuarios/cambiarPassword.js","../app/usuarios/usuariosSrv.js","../app/grupos/grupos.module.js","../app/grupos/config.route.js","../app/grupos/grupos.js","../app/grupos/editarGrupo.js","../app/grupos/gruposSrv.js","../app/permisos/permisos.module.js","../app/permisos/config.route.js","../app/permisos/permisos.js","../app/permisos/permisosSrv.js","../app/companias/companias.module.js","../app/companias/config.route.js","../app/companias/seleccionarCompania.js","../app/companias/CompaniasSrv.js","../app/principal/principal.module.js","../app/principal/config.route.js","../app/eventos/module.js","../app/eventos/config.route.js","../app/eventos/list.js","../app/eventos/edit.js","../app/eventos/verInscritos.js","../app/inscripciones/module.js","../app/inscripciones/config.route.js","../app/inscripciones/list.js","../app/inscripciones/list-tiempos.js","../app/inscripciones/list-numeros.js","../app/inscripciones/list-atletas.js","../app/inscripciones/edit.js","../app/inscripciones/edit-pago.js","../app/inscripciones/edit-pago-v2.js","../app/cupones/module.js","../app/cupones/config.route.js","../app/cupones/list.js","../app/cupones/edit.js","../app/reportes/module.js","../app/reportes/config.route.js","../app/reportes/inscripciones.js","../app/reportes/inscripciones-socios.js","../app/reportes/resultados-tiempos.js","../app/reportes/resultados-premiacion.js","../app/categorias/module.js","../app/categorias/config.route.js","../app/categorias/list.js","../app/categorias/edit.js","../app/parametros/module.js","../app/parametros/config.route.js","../app/parametros/list.js","../app/parametros/edit.js","../app/paquetes/module.js","../app/paquetes/config.route.js","../app/paquetes/list.js","../app/paquetes/edit.js","../app/organizadores/organizadores.module.js","../app/organizadores/config.route.js","../app/organizadores/organizadores.js","../app/organizadores/editarOrganizador.js","../app/organizadores/organizadoresSrv.js","../app/usuarios-organizador/usuarios-organizador.module.js","../app/usuarios-organizador/config.route.js","../app/usuarios-organizador/usuariosOrganizador.js","../app/usuarios-organizador/editarUsuarioOrganizador.js","../app/usuarios-organizador/cambiarPasswordUsuarioOrganizador.js","../app/usuarios-organizador/usuariosOrganizadorSrv.js"],"names":["app","angular","module","extendExceptionHandler","$delegate","exceptionHandler","logger","exception","cause","appErrorPrefix","config","errorData","message","error","provider","this","undefined","configure","$get","$provide","decorator","factory","catcher","reason","$log","toastr","showToasts","data","title","info","success","warning","warn","log","$inject","routehelper","$location","$rootScope","$route","routehelperConfig","handlingRouteChangeError","routeCounts","errors","changes","routes","$routeProvider","service","configureRoutes","forEach","route","resolve","extend","resolveAlways","when","url","otherwise","redirectTo","getRoutes","prop","hasOwnProperty","isRoute","push","$on","event","current","previous","rejection","destination","name","loadedTemplateUrl","msg","path","docTitle","constant","moment","signaturePad","apiBaseUrl","apiGometaBaseUrl","AuthInterceptor","$injector","$q","UserInfoService","cachedRequest","request","accessToken","getToken","includes","isPublicPage","headers","requestError","response","res","responseError","status","deferred","defer","get","refreshToken","getRefreshToken","then","setRefreshTokenInfo","resp","userInfo","isAuthenticated","reject","promise","PreventTemplateCacheInterceptor","inscripcionVersion","indexOf","atletaSeleccionado","opciones","USUARIOS_ORGANIZADOR","EVENTOS","EVENTOS_LEVEL_2","INSCRIPCIONES","INSCRIPCIONES_LEVEL_2","CUPONES","CUPONES_LEVEL_2","CATEGORIAS","CATEGORIAS_LEVEL_2","AGREGAR_TIEMPOS","ASIGNAR_NUMEROS","PAQUETES","searchKeys","api","userId","userName","email","userDisplayName","token","tokenExpiresIn","permisos","companiaId","companiaNombre","crearDocumentoValoresPorDefecto","grupoId","setUser","user","tokenInfo","loginInfo","id","access_token","refresh_token","expires_in","usuario","nombre","organizadorId","fullUser","saveUserInfoOnSessionStorage","removeSearchCriterias","setToken","logoutUser","sessionStorage","removeItem","getPermisos","permisoId","find","permiso","getPermisosEventos","getPermisosCupones","getPermisosCategorias","getPermisosPaquetes","getPermisosInscripciones","getPermisosAgregarTiempos","getPermisosAsignarNumeros","getPermisosUsuarioOrganizador","saveDataOnSessionStorage","key","value","setItem","JSON","stringify","getDataFromSessionStorage","getItem","parse","deleteDataFromSessionStorage","eliminarBloqueosUsuario","getEmail","getGrupo","getFullUser","esOrganizador","getCrearDocumentoValoresPorDefecto","setAtleta","atleta","getAtleta","item","getDias","getAnnos","getMeses","dynamicSort","property","sortOrder","substr","a","b","localeCompare","ApiBaseService","$http","apiSettings","getAll","params","remoteController","getStringParams","getFile","responseType","fileName","contentType","linkElement","document","createElement","blob","Blob","type","window","URL","createObjectURL","setAttribute","clickEvent","MouseEvent","view","bubbles","cancelable","dispatchEvent","ex","console","catch","getById","getNombreByCedula","async","cedula","fetch","json","save","method","update","remove","Content-Type","stringParams","element","FileReaderService","readAsDataUrl","file","scope","reader","FileReader","onload","$apply","result","onLoad","onerror","onError","onprogress","$broadcast","total","loaded","onProgress","getReader","readAsDataURL","BloqueoXUsuarioService","getBloqueoXCalendarizacion","calendarizacionId","getAllUsuario","bloqueo","removeAllXUsuario","core","options","timeOut","positionClass","appTitle","version","$logProvider","routehelperConfigProvider","exceptionHandlerProvider","debugEnabled","$httpProvider","interceptors","$qProvider","errorOnUnhandledRejections","scrollToTop","$var","$","animate","scrollTop","directive","restrict","transclude","link","initCarousel","defaultOptions","customOptions","$eval","attr","owlCarousel","plaNavBar","replace","templateUrl","attrs","jQuery","resize","addActiveClass","bind","e","preventDefault","stopPropagation","width","parent","hasClass","removeClass","parents","addClass","scroll","topMain","_topNavCalibrate","length","_headHeight","outerHeight","_headHeightSmall","css","padding-top","top","margin-top","_scrollTop","topNavSmall","stop","height","line-height","_topNav","$watch","isUserAuthenticated","misDatosUrl","verFullEventosMenu","index","array","permisoAdministrar","ver","permisoUsuarios","permisoGrupos","permisoOrganizadores","permisoUsuariosOrganizador","permisoEventos","permisoInscripciones","permisoReportes","permisoCupones","permisoCategorias","permisoAgregarTiempos","permisoAsignarNumeros","permisoParametros","permisoPaquetes","permisoReportesSocios","permisoReportesSociosInscripciones","SetPermisos","userInfoChanged","plaTopBar","newValue","itemId","titulo","detalle","accionAceptarCallback","controllerAs","controller","$scope","aceptar","buscadorDocumento","desde","hasta","tipoDocumentoId","emisorId","receptorId","verReceptor","verTipoDocumento","searchKey","accionBuscarCallback","accionGetExcelCallback","vm","getParams","receptores","numeroIdentificacion","getComboData","apiUrl","errorMessage","splice","$logger","clearCriteria","add","toDate","previousSearch","cargarPreviousSearch","tipoDocumentos","emisores","openFechaDesde","fechaDesdeOpened","openFechaHasta","fechaHastaOpened","getExcel","criterios","buscar","errorLogModal","$timeout","codigoOrigen","clave","collection","modalName","on","require","currentEl","ctrl","comparefield","getElementsByName","plaCompare","compareEl","val","isMatch","$setValidity","$digest","elem","$validators","positive","validMonth","plaFileSelect","ngModel","el","srcElement","target","files","plaFileModel","$parse","modelSetter","assign","which","fields","eq","focus","select","$parsers","parseInt","$formatters","Shell","busyMessage","isBusy","showSplash","run","settings","nav","content","Login","$animationsSrv","LoginService","interface","loginError","passwordSuccess","passwordError","grant_type","password","rememberMe","goToLoadPage","permisosInscripciones","login","validate","getLoginInfo","userLoginData","userData","param","username","Access-Control-Allow-Origin","Access-Control-Allow-Methods","Access-Control-Allow-Headers","grantType","Usuarios","UsuariosService","criteriosBusqueda","apellidos","apellido2","usuarios","goToEdit","goToChangePassword","openModal","modal","delete","filter","u","Message","CrearPublicUsuario","usuarioId","grupos","validateSelectProperty","form","object","tallaId","estadoVacunacionId","lateralidad","sexo","uiData","fechaNacimientoOpened","[object Object]","tallas","estadosVacunacion","submitted","usuarioForm","usergrupo","$valid","savePublic","onSelectChanged","onLateralidadChanged","RecuperarPassword","recuperarPassword","loginForm","EditarUsuario","$routeParams","GruposService","categorias","promiseGrupo","promiseTallas","promiseEstadosVacunacion","promiseCategorias","all","fechaNacimiento","categoriaId","$dirty","tipoIdentificacion","$setPristine","$setUntouched","onCategoriaIdChanged","EditarAtleta","CambiarPassword","nombreUsuario","cambiarPasswordForm","changePassword","Grupos","grupo","goToPermisos","g","EditarGrupo","grupoForm","Permisos","PermisosService","goToGrupo","saveAll","getAllCompanias","saveCompanias","SeleccionarCompania","CompaniasService","companias","selectCompania","compania","List","pagosOnlineEnable","permisosEventos","ordenReporte","horaSalida","horaSalida2","horaSalida3","horaSalida4","horaSalida5","horaSalida6","horaSalida7","horaSalida8","horaSalida9","puedeGuardar","guardar","puedeModificar","modificar","puedeEliminar","eliminar","agregandoCategoria","descargoData","inscripcionId","eventoId","aceptaDescargo","verInscritosCategoria","categoriaEnInscripcion","verTodosLosInscritos","goToInscripcion","goToConfirmarPago","openModalWithData","evento","getMonedaSymbol","monedaId","c","verCategorias","verPaquetes","getCategorias","i","modificandoCategoria","saveCategoria","validateCreateCategoria","dias","horaSalida10","command","createCategoria","editarCategoria","updateCategoria","deleteCategoria","aceptarDescargo","Edit","apiEventos","estado","fechaInicio","fechaFinal","eventoPadreId","estados","monedas","eventos","fechaInicioOpened","fechaFinalOpened","promiseEstados","promiseMonedas","promiseEventos","dataForm","moendaId","onMonedaIdChanged","VerInscritos","inscriptorId","verDetalle","esPagoPendiente","estadoId","esEstadoConfirmado","esEstadoRechazado","inscriptores","confirmarPago","confirmar","cambiarEstado","rechazar","estadoDescripcion","Tiempos","permisosTiempos","updateValues","propHoraLlegada","propHoraLLegadaReg","horaLlegadaValue","horaLlegadaRegValue","collectionCopy","puedeVerBusqueda","diaNoSeleccionado","dia","currentDay","diaEnRango","diaSeleccionado","horaLlegadaRegistrada","horaLlegadaRegistrada2","horaLlegadaRegistrada3","horaLlegadaRegistrada4","horaLlegadaRegistrada5","horaLlegadaRegistrada6","horaLlegadaRegistrada7","horaLlegadaRegistrada8","horaLlegadaRegistrada9","horaLlegadaRegistrada10","emailResultadoEnviado","emailResultadoEnviado2","emailResultadoEnviado3","emailResultadoEnviado4","emailResultadoEnviado5","emailResultadoEnviado6","emailResultadoEnviado7","emailResultadoEnviado8","emailResultadoEnviado9","emailResultadoEnviado10","numero","displayLimits","descripcion","displayLimit","horaLlegada","horaLlegada2","horaLlegada3","horaLlegada4","horaLlegada5","horaLlegada6","horaLlegada7","horaLlegada8","horaLlegada9","horaLlegada10","segundos","getSeconds","Date","segundos2","segundos3","segundos4","segundos5","segundos6","segundos7","segundos8","segundos9","segundos10","diaActual","postUpdateHoraLlegada","sendEmail","setEmailEnviado","onTextChanged","toString","trim","onEventoIdChanged","Numeros","permisosNumeros","ordenarPor","apellidos2","fullName","numeroRegistrado","toLowerCase","Atletas","originalCollection","filterOptions","validCedula","nombreCompleto","onNombreChanged","validNombre","onCedulaChanged","MONEDA_COLONES","MONEDA_DOLARES","apiInscripciones","ESTADO_PENDIENTE","ESTADO_CONFIRMADO","cuponValidationFired","cuponCodigo","precioDescuento","paqueteId","paqueteIncluye","paquetes","puedeCambiarEstado","descripcionGuardar","getPrecioEvento","getEvento","precio","getPrecioEventoConPaquete","paquete","monto","getPrecioEventoConCupon","cupon","getPrecioEventoConCuponYPaquete","monedaSymbol","montoDescuento","getPaqueteIncluye","incluye","cuponId","codigo","categoria","promisePaquetes","cedulaBeneficiario","parentezcoBeneficiario","nombreBeneficiario","beneficiarioApellido1","beneficiarioApellido2","telefono","contactoEmergencia","telefonoContacto","nombreEquipo","equipo","applyAtletaSeleccionado","catPromise","paqPromise","cargarDatosUsuario","goConfirmarPago","goEventos","estadoInscripcion","onPaqueteIdChanged","onCedulaLostFocus","persona","results","firstname","lastname1","lastname2","onCedulaBeneficiarioLostFocus","getNombreBeneficiarioByCedula","setTimeout","goToSeleccionarAtleta","EditPago","TIPO_PAGO_EFECTIVO","BANCO_NO_APLICA","bancoId","metodoPagoId","fechaDeposito","bancos","tiposDeposito","fechaDepositoOpened","promiseBancos","promiseTiposDeposito","nombreDepositante","montoDeposito","precioObj","montoCupon","montoConDescuento","precioText","precioConDescuentoText","onBancoIdChanged","referenciaDeposito","onTipoDepositoIdChanged","EditPagoV2","depositoTipoId","depositoIdentificacion","cuentaIban","sinpeTipoId","sinpeIdentificacion","sinpeTelefono","nombreTarjeta","numeroTarjeta","cvv","mesExpiracion","annoExpiracion","year","tipoCambio","descripcionRecibidoConfirmacion","descripcionConfirmarPago","descripcionContinuar","depositoIdentificacionMsg","sinpeIdentificacionMsg","validationErrors","estaCreandoMetodoPago","estaConfirmandoPago","estaConfirmandoPagoRealizado","promiseTipoCambio","valor","precioSinpe","precioSinpeConDescuento","getPrecioSinpe","saveMetodo","intensionProveedorId","proveedorId","errorList","confirmIntension","checkIntension","onSinpeTipoIdChanged","onDepositoTipoIdChanged","permisosCupones","apiCupones","usosMaximo","numeroUsos","estaEditando","fechaCaducidadOpened","fechaCaducidad","onEstadoChanged","Inscripciones","page","InscripcionesSocios","ResultadosTiempos","getReportRemoteController","doFormValidations","usarCategorias","diasEventoSeleccionado","tipoReporte","setDiasEventoSeleccionado","ResultadosPremiacion","cantidad","getPDF","permisosCategorias","apiCategorias","edadInicial","edadFinal","apiParametros","tipo","permisosPaquetes","apiPaquetes","activo","Organizadores","OrganizadoresService","organizadores","organizador","EditarOrganizador","getOrganizador","organizadorForm","UsuariosOrganizador","UsuariosOrganizadorService","EditarUsuarioOrganizador","eventosUsuario","verTodosLosEventos","permisoEvento","clearUserData","onUsergrupoChanged","saveEvento","removeEvento","CambiarPasswordUsuarioOrganizador"],"mappings":"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","file":"inscripciones.min.js","sourcesContent":["\r\nvar app = angular.module('fe', [\r\n /*\r\n * Order is not important. Angular makes a\r\n * pass to register all of the modules listed\r\n * and then when app.dashboard tries to use app.data,\r\n * its components are available.\r\n */\r\n\r\n /*\r\n * Everybody has access to these.\r\n * We could place these under every feature area,\r\n * but this is easier to maintain.\r\n */ \r\n 'app.core',\r\n 'app.widgets',\r\n\r\n /*\r\n * Feature areas\r\n */\r\n 'app.layout',\r\n 'app.login',\r\n 'app.usuarios',\r\n 'app.grupos',\r\n 'app.permisos',\r\n 'app.companias',\r\n 'app.principal',\r\n 'app.eventos',\r\n 'app.inscripciones',\r\n 'app.cupones',\r\n 'app.reportes',\r\n 'app.categorias',\r\n 'app.paquetes',\r\n 'app.parametros',\r\n 'app.organizadores',\r\n 'app.usuarios-organizador',\r\n]);","(function() {\n 'use strict';\n\n angular.module('blocks.exception', ['blocks.logger']);\n})();\n","// Include in index.html so that app level exceptions are handled.\n// Exclude from testRunner.html which should run exactly what it wants to run\n(function() {\n 'use strict';\n\n angular\n .module('blocks.exception')\n .provider('exceptionHandler', exceptionHandlerProvider)\n .config(config);\n\n /**\n * Must configure the exception handling\n * @return {[type]}\n */\n function exceptionHandlerProvider() {\n /* jshint validthis:true */\n this.config = {\n appErrorPrefix: undefined\n };\n\n this.configure = function (appErrorPrefix) {\n this.config.appErrorPrefix = appErrorPrefix;\n };\n\n this.$get = function() {\n return {config: this.config};\n };\n }\n\n /**\n * Configure by setting an optional string value for appErrorPrefix.\n * Accessible via config.appErrorPrefix (via config value).\n * @param {[type]} $provide\n * @return {[type]}\n * @ngInject\n */\n function config($provide) {\n $provide.decorator('$exceptionHandler', extendExceptionHandler);\n }\n\n /**\n * Extend the $exceptionHandler service to also display a toast.\n * @param {Object} $delegate\n * @param {Object} exceptionHandler\n * @param {Object} logger\n * @return {Function} the decorated $exceptionHandler service\n */\n function extendExceptionHandler($delegate, exceptionHandler, logger) {\n return function(exception, cause) {\n var appErrorPrefix = exceptionHandler.config.appErrorPrefix || '';\n var errorData = {exception: exception, cause: cause};\n exception.message = appErrorPrefix + exception.message;\n $delegate(exception, cause);\n /**\n * Could add the error to a service's collection,\n * add errors to $rootScope, log errors to remote web server,\n * or log locally. Or throw hard. It is entirely up to you.\n * throw exception;\n *\n * @example\n * throw { message: 'error message we added' };\n */\n logger.error(exception.message, errorData);\n };\n }\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('blocks.exception')\n .factory('exception', exception);\n\n /* @ngInject */\n function exception(logger) {\n var service = {\n catcher: catcher\n };\n return service;\n\n function catcher(message) {\n return function(reason) {\n logger.error(message, reason);\n };\n }\n }\n})();","(function() {\n 'use strict';\n\n angular.module('blocks.logger', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('blocks.logger')\n .factory('logger', logger);\n\n logger.$inject = ['$log', 'toastr'];\n\n function logger($log, toastr) {\n var service = {\n showToasts: true,\n\n error : error,\n info : info,\n success : success,\n warning : warning,\n\n // straight to console; bypass toastr\n log : $log.log\n };\n\n return service;\n /////////////////////\n\n function error(message, data, title) {\n toastr.error(message, title);\n $log.error('Error: ' + message, data);\n }\n\n function info(message, data, title) {\n toastr.info(message, title);\n $log.info('Info: ' + message, data);\n }\n\n function success(message, data, title) {\n toastr.success(message, title);\n $log.info('Success: ' + message, data);\n }\n\n function warning(message, data, title) {\n toastr.warning(message, title);\n $log.warn('Warning: ' + message, data);\n }\n }\n}());\n","(function() {\n 'use strict';\n\n angular.module('blocks.router', [\n 'ngRoute',\n 'blocks.logger'\n ]);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('blocks.router')\n .provider('routehelperConfig', routehelperConfig)\n .factory('routehelper', routehelper);\n\n routehelper.$inject = ['$location', '$rootScope', '$route', 'logger', 'routehelperConfig'];\n\n // Must configure via the routehelperConfigProvider\n function routehelperConfig() {\n /* jshint validthis:true */\n this.config = {\n // These are the properties we need to set\n // $routeProvider: undefined\n // docTitle: ''\n // resolveAlways: {ready: function(){ } }\n };\n\n this.$get = function() {\n return {\n config: this.config\n };\n };\n }\n\n function routehelper($location, $rootScope, $route, logger, routehelperConfig) {\n var handlingRouteChangeError = false;\n var routeCounts = {\n errors: 0,\n changes: 0\n };\n var routes = [];\n var $routeProvider = routehelperConfig.config.$routeProvider;\n\n var service = {\n configureRoutes: configureRoutes,\n getRoutes: getRoutes,\n routeCounts: routeCounts\n };\n\n init();\n\n return service;\n ///////////////\n\n function configureRoutes(routes) {\n routes.forEach(function(route) {\n route.config.resolve =\n angular.extend(route.config.resolve || {}, routehelperConfig.config.resolveAlways);\n $routeProvider.when(route.url, route.config);\n });\n $routeProvider.otherwise({redirectTo: '/'});\n }\n\n function handleRoutingErrors() {\n // Route cancellation:\n // On routing error, go to the dashboard.\n // Provide an exit clause if it tries to do it twice.\n $rootScope.$on('$routeChangeError',\n function(event, current, previous, rejection) {\n if (handlingRouteChangeError) {\n return;\n }\n routeCounts.errors++;\n handlingRouteChangeError = true;\n var destination = (current && (current.title || current.name || current.loadedTemplateUrl)) ||\n 'unknown target';\n var msg = 'Error routing to ' + destination + '. ' + (rejection.msg || '');\n logger.warning(msg, [current]);\n $location.path('/');\n }\n );\n }\n\n function init() {\n handleRoutingErrors();\n updateDocTitle();\n }\n\n function getRoutes() {\n for (var prop in $route.routes) {\n if ($route.routes.hasOwnProperty(prop)) {\n var route = $route.routes[prop];\n var isRoute = !!route.title;\n if (isRoute) {\n routes.push(route);\n }\n }\n }\n return routes;\n }\n\n function updateDocTitle() {\n $rootScope.$on('$routeChangeSuccess',\n function(event, current, previous) {\n routeCounts.changes++;\n handlingRouteChangeError = false;\n var title = routehelperConfig.config.docTitle + ' ' + (current.title || '');\n $rootScope.title = title; // data bind to \n }\n );\n }\n }\n})();\n","(function() {\n 'use strict';\n\n angular.module('app.core', [\n /*\n * Angular modules\n */\n 'ngAnimate', 'ngRoute', 'ui.bootstrap',\n /*\n * Our reusable cross app code modules\n */\n 'blocks.exception', 'blocks.logger', 'blocks.router',\n /*\n * 3rd Party modules\n */\n 'ngplus'\n ]);\n})();\n","/* global toastr:false, moment:false */\n(function() {\n 'use strict';\n const production = true;\n angular\n .module('app.core')\n .constant('moment', moment)\n .constant('toastr', toastr)\n .constant('signaturePad', signaturePad)\n .constant('inscripcionVersion', 62)\n .constant('pagosOnlineEnable', true)\n .constant('apiSettings', {\n apiBaseUrl: production ? 'https://www.racers506.com/CrossCostaRica_WebApi/' : 'http://localhost/ITGInscripciones_RestAPI/',\n apiGometaBaseUrl: 'https://apis.gometa.org/'\n });\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('AuthInterceptor', AuthInterceptor);\r\n\r\n AuthInterceptor.$inject = ['$injector', '$q', '$location', 'UserInfoService'];\r\n\r\n function AuthInterceptor($injector, $q, $location, UserInfoService) {\r\n \r\n var cachedRequest = null;\r\n\r\n function isPublicPage(config)\r\n {\r\n return config.url.includes('crearPublicUsuario') ||\r\n config.url.includes('Tallas') ||\r\n config.url.includes('EstadosVacunacion') ||\r\n config.url.includes('usuarios-public') ||\r\n config.url.includes('recuperarPassword') ||\r\n config.url.includes('popup.html') ||\r\n config.url.includes('datepicker');\r\n }\r\n\r\n var authInterceptor = { \r\n request: function (config) { \r\n var accessToken = UserInfoService.getToken();\r\n\r\n if(!isPublicPage(config))\r\n {\r\n if (accessToken == null || accessToken == \"undefined\") { \r\n $location.path( \"/\" ); \r\n } \r\n else {\r\n config.headers[\"Access-Control-Allow-Origin\"] = \"*\";\r\n config.headers[\"Access-Control-Allow-Methods\"] = \"*\";\r\n config.headers[\"Access-Control-Allow-Headers\"] = \"Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Auth-Token\";\r\n config.headers[\"Authorization\"] = \"bearer \" + accessToken;\r\n } \r\n }\r\n\r\n return config; \r\n }, \r\n \r\n requestError: function (config) { \r\n $location.path( \"/\" ); \r\n return config; \r\n }, \r\n \r\n response: function (res) { \r\n return res; \r\n }, \r\n \r\n responseError: function (res) { \r\n switch (res.status) {\r\n case 401:\r\n var deferred = $q.defer();\r\n if(!cachedRequest){\r\n cachedRequest = $injector.get(\"LoginService\").refreshToken(UserInfoService.getRefreshToken(), \"refresh_token\");\r\n }\r\n //When Promise is resolved, new Access Token is returend \r\n cachedRequest.then(function(accessToken) {\r\n cachedRequest = null;\r\n if (accessToken) {\r\n UserInfoService.setRefreshTokenInfo(accessToken.data);\r\n //Resend this request when Access Token is renewed\r\n $injector.get(\"$http\")(res.config).then(function(resp) {\r\n //Resolve this request (successfully this time)\r\n deferred.resolve(resp);\r\n },function(resp) {\r\n UserInfoService.userInfo.isAuthenticated = false;\r\n $location.path( \"/\" );\r\n deferred.reject(resp);\r\n });\r\n } else {\r\n //If any error occurs reject the Promise\r\n UserInfoService.userInfo.isAuthenticated = false;\r\n $location.path( \"/\" );\r\n deferred.reject(res);\r\n }\r\n }, function(response) {\r\n //If any error occurs reject the Promise\r\n if(response.data.error === \"invalid_grant\")\r\n {\r\n UserInfoService.userInfo.isAuthenticated = false;\r\n $location.path( \"/\" );\r\n }\r\n cachedRequest = null;\r\n deferred.reject(response);\r\n });\r\n return deferred.promise;\r\n //case 400:\r\n case 403:\r\n case 404:\r\n UserInfoService.userInfo.isAuthenticated = false;\r\n $location.path( \"/\" );\r\n break;\r\n }\r\n return $q.reject(res); \r\n } \r\n }; \r\n \r\n return authInterceptor; \r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('PreventTemplateCacheInterceptor', PreventTemplateCacheInterceptor);\r\n\r\n PreventTemplateCacheInterceptor.$inject = ['inscripcionVersion'];\r\n\r\n function PreventTemplateCacheInterceptor(inscripcionVersion) {\r\n \r\n var preventTemplateCacheInterceptor = { \r\n request: function (config) { \r\n \r\n if (config.url.indexOf('uib') === -1 && config.url.indexOf('.html') !== -1) {\r\n config.url = config.url + '?t=' + inscripcionVersion;\r\n }\r\n\r\n return config; \r\n } \r\n }; \r\n \r\n return preventTemplateCacheInterceptor; \r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('UserInfoService', UserInfoService);\r\n\r\n function UserInfoService(){\r\n\r\n var userInfo = {\r\n userId: '',\r\n userName: '',\r\n email: '',\r\n userDisplayName: '',\r\n token: null,\r\n refreshToken: null,\r\n tokenExpiresIn: 0,\r\n isAuthenticated: false,\r\n permisos: null,\r\n companiaId: null,\r\n companiaNombre: '',\r\n crearDocumentoValoresPorDefecto: null,\r\n grupoId: 0\r\n };\r\n\r\n var atletaSeleccionado = null;\r\n\r\n var opciones = {\r\n USUARIOS_ORGANIZADOR: 5,\r\n EVENTOS: 10,\r\n EVENTOS_LEVEL_2: 11,\r\n INSCRIPCIONES: 20,\r\n INSCRIPCIONES_LEVEL_2: 21,\r\n CUPONES: 40,\r\n CUPONES_LEVEL_2: 41,\r\n CATEGORIAS: 50,\r\n CATEGORIAS_LEVEL_2: 51,\r\n AGREGAR_TIEMPOS: 60,\r\n ASIGNAR_NUMEROS: 70,\r\n PAQUETES: 90\r\n };\r\n\r\n var searchKeys = [\r\n 'Documentos_Aceptados_Search_Criteria',\r\n 'Documentos_Rechazados_Search_Criteria',\r\n 'Documentos_Procesar_Search_Criteria'\r\n ];\r\n\r\n var api = {\r\n userInfo: userInfo,\r\n opciones: opciones,\r\n setUser: setUser,\r\n setRefreshTokenInfo: setRefreshTokenInfo,\r\n getToken: getToken,\r\n setToken: setToken,\r\n getRefreshToken: getRefreshToken,\r\n logoutUser:logoutUser,\r\n getPermisos: getPermisos,\r\n getPermisosEventos: getPermisosEventos,\r\n getPermisosCupones: getPermisosCupones,\r\n getPermisosCategorias: getPermisosCategorias,\r\n getPermisosPaquetes: getPermisosPaquetes,\r\n getPermisosInscripciones: getPermisosInscripciones,\r\n getPermisosAgregarTiempos: getPermisosAgregarTiempos,\r\n getPermisosAsignarNumeros: getPermisosAsignarNumeros,\r\n getPermisosUsuarioOrganizador: getPermisosUsuarioOrganizador,\r\n saveDataOnSessionStorage: saveDataOnSessionStorage,\r\n getDataFromSessionStorage: getDataFromSessionStorage,\r\n deleteDataFromSessionStorage: deleteDataFromSessionStorage,\r\n searchKeys: searchKeys,\r\n removeSearchCriterias: removeSearchCriterias,\r\n eliminarBloqueosUsuario: true,\r\n getEmail: getEmail,\r\n getGrupo: getGrupo,\r\n getFullUser: getFullUser,\r\n esOrganizador: esOrganizador,\r\n getCrearDocumentoValoresPorDefecto: getCrearDocumentoValoresPorDefecto,\r\n setAtleta: setAtleta,\r\n getAtleta: getAtleta\r\n };\r\n\r\n getUserInfoFromSessionStorage();\r\n\r\n return api;\r\n\r\n function getToken(){\r\n return api.userInfo.token;\r\n }\r\n\r\n function getRefreshToken(){\r\n return api.userInfo.refreshToken;\r\n }\r\n\r\n function getEmail(){\r\n return api.userInfo.email;\r\n }\r\n\r\n function getGrupo(){\r\n return api.userInfo.grupoId;\r\n }\r\n\r\n function getFullUser(){\r\n return api.userInfo.fullUser;\r\n }\r\n\r\n function esOrganizador(){\r\n return api.userInfo.organizadorId !== undefined;\r\n }\r\n\r\n function getPermisos(permisoId){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === permisoId;\r\n });\r\n }\r\n\r\n function getPermisosEventos(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.EVENTOS_LEVEL_2;\r\n });\r\n }\r\n\r\n function getPermisosCupones(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.CUPONES_LEVEL_2;\r\n });\r\n }\r\n\r\n function getPermisosCategorias(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.CATEGORIAS_LEVEL_2;\r\n });\r\n }\r\n\r\n function getPermisosPaquetes(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.PAQUETES;\r\n });\r\n }\r\n\r\n function getPermisosInscripciones(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.INSCRIPCIONES_LEVEL_2;\r\n });\r\n }\r\n\r\n function getPermisosAgregarTiempos(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.AGREGAR_TIEMPOS;\r\n });\r\n }\r\n\r\n function getPermisosAsignarNumeros(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.ASIGNAR_NUMEROS;\r\n });\r\n }\r\n\r\n function getPermisosUsuarioOrganizador(){\r\n return api.userInfo.permisos.find((permiso) => {\r\n return permiso.permisoId === opciones.USUARIOS_ORGANIZADOR;\r\n });\r\n }\r\n\r\n function getCrearDocumentoValoresPorDefecto(){\r\n return api.userInfo.crearDocumentoValoresPorDefecto;\r\n }\r\n\r\n function setToken(token){\r\n api.userInfo.token = token;\r\n }\r\n\r\n function setUser(user, tokenInfo, loginInfo){\r\n api.userInfo.userId = user.id;\r\n api.userInfo.userName = user.userName;\r\n api.userInfo.isAuthenticated = user.isAuthenticated;\r\n api.userInfo.token = tokenInfo.access_token;\r\n api.userInfo.refreshToken = tokenInfo.refresh_token;\r\n api.userInfo.tokenExpiresIn = tokenInfo.expires_in;\r\n api.userInfo.userDisplayName = loginInfo.usuario.nombre;\r\n api.userInfo.permisos = loginInfo.permisos;\r\n api.userInfo.email = loginInfo.usuario.email;\r\n api.userInfo.grupoId = loginInfo.usuario.grupoId;\r\n api.userInfo.organizadorId = loginInfo.usuario.organizadorId\r\n api.userInfo.fullUser = loginInfo.usuario;\r\n api.userInfo.crearDocumentoValoresPorDefecto = loginInfo.crearDocumentoValoresPorDefecto;\r\n saveUserInfoOnSessionStorage();\r\n removeSearchCriterias();\r\n }\r\n\r\n function setRefreshTokenInfo(tokenInfo){\r\n api.userInfo.token = tokenInfo.access_token;\r\n api.userInfo.refreshToken = tokenInfo.refresh_token;\r\n api.userInfo.tokenExpiresIn = tokenInfo.expires_in;\r\n saveUserInfoOnSessionStorage();\r\n }\r\n\r\n function saveUserInfoOnSessionStorage(){\r\n sessionStorage.setItem('userInfo', JSON.stringify(api.userInfo));\r\n }\r\n\r\n function getUserInfoFromSessionStorage(){\r\n var info = sessionStorage.getItem('userInfo');\r\n if(info){\r\n api.userInfo = JSON.parse(info);\r\n }\r\n }\r\n\r\n function saveDataOnSessionStorage(key, value){\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n }\r\n\r\n function getDataFromSessionStorage(key){\r\n var data = sessionStorage.getItem(key);\r\n return JSON.parse(data);\r\n }\r\n\r\n function deleteUserInfoOnSessionStorage(){\r\n sessionStorage.removeItem('userInfo');\r\n }\r\n\r\n function deleteDataFromSessionStorage(key){\r\n sessionStorage.removeItem(key);\r\n }\r\n\r\n function logoutUser(){\r\n api.userInfo.isAuthenticated = false;\r\n api.userInfo.token = null;\r\n api.userInfo.companiaId = null;\r\n api.userInfo.companiaNombre = '';\r\n api.userInfo.permisos = null;\r\n api.userInfo.grupoId = 0;\r\n deleteUserInfoOnSessionStorage();\r\n removeSearchCriterias();\r\n }\r\n\r\n function removeSearchCriterias(){\r\n searchKeys.forEach(function(item){\r\n deleteDataFromSessionStorage(item);\r\n });\r\n };\r\n\r\n function setAtleta(atleta){\r\n atletaSeleccionado = atleta;\r\n }\r\n\r\n function getAtleta(){\r\n return atletaSeleccionado;\r\n }\r\n\r\n };\r\n\r\n\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('CoreSrv', CoreSrv);\r\n\r\n //CoreSrv.$inject = ['$q', '$http', 'apiSettings'];\r\n\r\n function CoreSrv(){\r\n\r\n var api = {\r\n getDias: getDias,\r\n getAnnos: getAnnos,\r\n getMeses:getMeses,\r\n dynamicSort: dynamicSort\r\n };\r\n\r\n return api;\r\n\r\n function getDias()\r\n {\r\n return [\r\n 1,2,3,4,5,6,7,8,9,10,\r\n 11,12,13,14,15,16,17,18,19,20,\r\n 21,22,23,24,25,26,27,28,29,30,31\r\n ];\r\n };\r\n\r\n function getAnnos()\r\n {\r\n return [\r\n 2019,\r\n 2020\r\n ];\r\n };\r\n\r\n function getMeses()\r\n {\r\n return [\r\n {id: 1, nombre: 'Enero'},\r\n {id: 2, nombre: 'Febrero'},\r\n {id: 3, nombre: 'Marzo'},\r\n {id: 4, nombre: 'Abril'},\r\n {id: 5, nombre: 'Mayo'},\r\n {id: 6, nombre: 'Junio'},\r\n {id: 7, nombre: 'Julio'},\r\n {id: 8, nombre: 'Agosto'},\r\n {id: 9, nombre: 'Septiembre'},\r\n {id: 10, nombre: 'Octubre'},\r\n {id: 11, nombre: 'Noviembre'},\r\n {id: 12, nombre: 'Diciembre'},\r\n ];\r\n };\r\n\r\n function dynamicSort(property) {\r\n var sortOrder = 1;\r\n \r\n if(property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n \r\n return function (a,b) {\r\n if(sortOrder == -1){\r\n return b[property].localeCompare(a[property]);\r\n }else{\r\n return a[property].localeCompare(b[property]);\r\n } \r\n }\r\n }\r\n\r\n };\r\n\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('ApiBaseService', ApiBaseService);\r\n\r\n ApiBaseService.$inject = ['$http', '$q', 'apiSettings'];\r\n\r\n function ApiBaseService($http, $q, apiSettings) {\r\n\r\n const api = {\r\n getAll: getAll,\r\n getFile: getFile,\r\n getById: getById,\r\n getNombreByCedula: getNombreByCedula,\r\n save: save,\r\n update:update,\r\n remove: remove,\r\n remoteController: ''\r\n };\r\n\r\n\r\n return api;\r\n\r\n function getStringParams(params){\r\n let stringParams = '';\r\n if(params != undefined && params != null)\r\n {\r\n params.forEach(element => {\r\n stringParams += `/${element}`\r\n });\r\n }\r\n return stringParams;\r\n };\r\n\r\n function getAll(params){\r\n\r\n\r\n var url = `${apiSettings.apiBaseUrl}${api.remoteController}${getStringParams(params)}`;\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getFile(params){\r\n\r\n var url = `${apiSettings.apiBaseUrl}${api.remoteController}${getStringParams(params)}`;\r\n \r\n return $http.get(url, {responseType: 'arraybuffer'})\r\n .then(function (response) {\r\n \r\n var headers = response.headers();\r\n var fileName = headers['x-filename'];\r\n var contentType = headers['content-type'];\r\n\r\n var linkElement = document.createElement('a');\r\n try {\r\n var blob = new Blob([response.data], { type: contentType });\r\n var url = window.URL.createObjectURL(blob);\r\n \r\n linkElement.setAttribute('href', url);\r\n linkElement.setAttribute(\"download\", fileName);\r\n \r\n var clickEvent = new MouseEvent(\"click\", {\r\n \"view\": window,\r\n \"bubbles\": true,\r\n \"cancelable\": false\r\n });\r\n linkElement.dispatchEvent(clickEvent);\r\n \r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n\r\n return response;\r\n\r\n }).catch(function (data) {\r\n return $q.reject(data);\r\n });\r\n };\r\n\r\n function getById(id){\r\n\r\n var url = `${apiSettings.apiBaseUrl}${api.remoteController}/${id}`;\r\n \r\n return $http.get(url)\r\n .then(getByIdSuccess, getByIdError);\r\n\r\n function getByIdSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getByIdError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n async function getNombreByCedula(cedula){\r\n try {\r\n var url = `${apiSettings.apiGometaBaseUrl}cedulas/${cedula}`;\r\n\r\n const response = await fetch(url);\r\n\r\n return response.json();\r\n\r\n } catch (error) {\r\n return null;\r\n }\r\n };\r\n\r\n function save(data){\r\n\r\n data.id = 0;\r\n\r\n var response = $http({ \r\n url: `${apiSettings.apiBaseUrl}${api.remoteController}`, \r\n method: 'POST', \r\n data: data\r\n }); \r\n return response;\r\n };\r\n\r\n function update(data){\r\n\r\n var response = $http({ \r\n url: `${apiSettings.apiBaseUrl}${api.remoteController}`, \r\n method: 'PUT', \r\n data: data\r\n }); \r\n return response;\r\n };\r\n\r\n function remove(data){\r\n\r\n var response = $http({ \r\n url: `${apiSettings.apiBaseUrl}${api.remoteController}`, \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: data\r\n }); \r\n return response;\r\n };\r\n\r\n };\r\n\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('FileReaderService', FileReaderService);\r\n\r\n FileReaderService.$inject = ['$q'];\r\n\r\n function FileReaderService($q){\r\n\r\n var onLoad = function(reader, deferred, scope) {\r\n return function() {\r\n scope.$apply(function() {\r\n deferred.resolve(reader.result);\r\n });\r\n };\r\n };\r\n \r\n var onError = function(reader, deferred, scope) {\r\n return function() {\r\n scope.$apply(function() {\r\n deferred.reject(reader.result);\r\n });\r\n };\r\n };\r\n \r\n var onProgress = function(reader, scope) {\r\n return function(event) {\r\n scope.$broadcast(\"fileProgress\", {\r\n total: event.total,\r\n loaded: event.loaded\r\n });\r\n };\r\n };\r\n \r\n var getReader = function(deferred, scope) {\r\n var reader = new FileReader();\r\n reader.onload = onLoad(reader, deferred, scope);\r\n reader.onerror = onError(reader, deferred, scope);\r\n reader.onprogress = onProgress(reader, scope);\r\n return reader;\r\n };\r\n \r\n var readAsDataURL = function(file, scope) {\r\n var deferred = $q.defer();\r\n \r\n var reader = getReader(deferred, scope);\r\n reader.readAsDataURL(file);\r\n \r\n return deferred.promise;\r\n };\r\n \r\n return {\r\n readAsDataUrl: readAsDataURL\r\n };\r\n\r\n };\r\n\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.core')\r\n .factory('BloqueoXUsuarioService', BloqueoXUsuarioService);\r\n\r\n BloqueoXUsuarioService.$inject = ['$http', 'apiSettings', 'UserInfoService'];\r\n\r\n function BloqueoXUsuarioService($http, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getBloqueoXCalendarizacion: getBloqueoXCalendarizacion,\r\n getAll: getAll,\r\n getAllUsuario: getAllUsuario,\r\n remove: remove,\r\n removeAllXUsuario: removeAllXUsuario\r\n };\r\n\r\n return api;\r\n\r\n function getBloqueoXCalendarizacion(calendarizacionId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/bloqueos-usuario/calendarizacion/' + calendarizacionId;\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getAll(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/bloqueos-usuario/admin/';\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getAllUsuario(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/bloqueos-usuario/usuario/';\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function remove(bloqueo){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/bloqueos-usuario', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: bloqueo\r\n }); \r\n return response;\r\n };\r\n\r\n function removeAllXUsuario(){\r\n\r\n if(UserInfoService.eliminarBloqueosUsuario)\r\n {\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/bloqueos-usuario/todos', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: null\r\n }); \r\n \r\n response.then(function(){\r\n UserInfoService.eliminarBloqueosUsuario = false;\r\n }); \r\n }\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n var core = angular.module('app.core');\n\n core.config(toastrConfig);\n\n /* @ngInject */\n function toastrConfig(toastr) {\n toastr.options.timeOut = 4000;\n toastr.options.positionClass = 'toast-bottom-right';\n }\n\n var config = {\n appErrorPrefix: '[Inscripciones Error] ', //Configure the exceptionHandler decorator\n appTitle: 'Sistema Inscripciones',\n version: '1.0.0'\n };\n\n core.value('config', config);\n\n core.config(configure);\n\n /* @ngInject */\n function configure ($logProvider, $routeProvider, routehelperConfigProvider, exceptionHandlerProvider) {\n \n // $locationProvider.html5Mode({\n // enabled: true,\n // requireBase: true\n // });\n\n // turn debugging off/on (no info or warn)\n if ($logProvider.debugEnabled) {\n $logProvider.debugEnabled(true);\n }\n\n // Configure the common route provider\n routehelperConfigProvider.config.$routeProvider = $routeProvider;\n routehelperConfigProvider.config.docTitle = 'Inscripciones: ';\n //var resolveAlways = { /* @ngInject */\n // ready: function($animationsSrv) {\n // return $animationsSrv.ready();\n // }\n // // ready: ['dataservice', function (dataservice) {\n // // return dataservice.ready();\n // // }]\n //};\n //routehelperConfigProvider.config.resolveAlways = resolveAlways;\n\n // Configure the common exception handler\n exceptionHandlerProvider.configure(config.appErrorPrefix);\n }\n\n core.config(['$httpProvider', function ($httpProvider) { \n $httpProvider.interceptors.push('AuthInterceptor', 'PreventTemplateCacheInterceptor'); \n }]); \n\n core.config(['$qProvider', function ($qProvider) { \n $qProvider.errorOnUnhandledRejections(false); \n }]); \n\n})();\n","(function(){\r\n 'use strict'\r\n\r\n var serviceName = '$animationsSrv';\r\n\r\n angular.module('app.core').factory(serviceName, animationsSrv);\r\n\r\n function animationsSrv() {\r\n \r\n var service = {\r\n scrollToTop: scrollToTop\r\n };\r\n\r\n return service;\r\n\r\n function scrollToTop($var) {\r\n // 'html, body' denotes the html element, to go to any other custom element, use '#elementID'\r\n $('html, body').animate({\r\n scrollTop: 0\r\n }, 'fast'); // 'fast' is for fast animation\r\n };\r\n }\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.widgets', []);\n})();\n","(function () {\r\n\r\n\r\n angular.module('app.widgets').directive(\"plaOwlCarousel\", function() {\r\n return {\r\n restrict: 'E',\r\n transclude: false,\r\n link: function (scope, element) {\r\n scope.initCarousel = function(element) {\r\n // provide any default options you want\r\n var defaultOptions = {\r\n };\r\n var customOptions = scope.$eval($(element).attr('data-plugin-options'));\r\n // combine the two options objects\r\n for(var key in customOptions) {\r\n defaultOptions[key] = customOptions[key];\r\n }\r\n // init carousel\r\n $(element).owlCarousel(defaultOptions);\r\n };\r\n\r\n scope.initCarousel(element);\r\n }\r\n };\r\n });\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaNavBar', plaNavBar);\r\n\r\n\tplaNavBar.$inject = ['UserInfoService', '$location'];\r\n\r\n\tfunction plaNavBar(UserInfoService, $location) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n templateUrl: 'app/widgets/navbar.html',\r\n link: function(scope, element, attrs) {\r\n\t\t\t\tjQuery(window).resize();\r\n\t\t\t\t_topNav();\r\n\t\t\t\tuserInfoChanged(scope, UserInfoService, $location);\r\n }\r\n }\r\n }\r\n\r\n /** 01. Top Nav\r\n **************************************************************** **/\r\nfunction _topNav() {\r\n\tvar addActiveClass = false;\r\n\r\n\tjQuery(\"#topMain li.dropdown > a, #topMain li.dropdown-submenu > a\").bind(\"click\", function(e) {\r\n\t\tif(jQuery(this).attr('href') == '#') {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tif(jQuery(window).width() > 979) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\r\n\t\taddActiveClass = jQuery(this).parent().hasClass(\"resp-active\");\r\n\t\tjQuery(\"#topMain\").find(\".resp-active\").removeClass(\"resp-active\");\r\n\r\n\t\tif(!addActiveClass) {\r\n\t\t\tjQuery(this).parents(\"li\").addClass(\"resp-active\");\r\n }\r\n\r\n\t\treturn;\r\n\r\n\t});\r\n\r\n\t// Drop Downs - do not hide on click\r\n\t// jQuery(\"#topHead .dropdown-menu, #topNav .mega-menu .dropdown-menu\").bind(\"click\", function(e) {\r\n\t// \te.stopPropagation();\r\n\t// });\r\n\r\n\tjQuery(window).scroll(function() {\r\n\r\n\t\tif(jQuery(window).width() > 1006) {\r\n\t\t\ttopMain(); // on scroll\r\n\t\t}\r\n\r\n\t});\t\r\n\t\r\n\tif(jQuery(window).width() > 1006) {\r\n\t\ttopMain(); // on load\r\n\t}\r\n\r\n\r\n\r\n\t\t// #topHead Fixes\r\n\t\twindow._headHeight\t\t= 81;\r\n\t\twindow._headHeightSmall\t= 30;\r\n\r\n\t\tfunction _topNavCalibrate() {\r\n\r\n\t\t\tif(jQuery(\"#topHead\").length > 0) {\r\n\t\t\t\twindow._headHeight \t\t= jQuery(\"header#topHead\").outerHeight() + jQuery(\"header#topNav\").outerHeight() - 10;\r\n\t\t\t\twindow._headHeightSmall\t= 66;\r\n\r\n\t\t\t\tjQuery('#wrapper').css({\"padding-top\":window._headHeight + \"px\"});\r\n\t\t\t\tjQuery('#topHead').removeClass('fixed').addClass('fixed');\r\n\r\n\t\t\t\tif(jQuery('#header_shadow').length > 0) {\r\n\t\t\t\t\tjQuery('#header_shadow').css({\"top\":window._headHeight + \"px\"});\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif(jQuery(window).width() < 1006) {\r\n\t\t\t\t\t//jQuery('#wrapper').css({\"margin-top\":\"-30px\"});\r\n\t\t\t\t\tjQuery('#header_shadow').css({\"top\":\"40px\"});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery('#wrapper').css({\"margin-top\":\"0px\"});\r\n\r\n\t\t\t\t\t// From mobile back to desktop - do not leave the shadow behing\r\n\t\t\t\t\tif(jQuery(window).scrollTop() > 3) {\r\n\t\t\t\t\t\tjQuery('#header_shadow').css({\"top\":\"60px\"});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjQuery('#header_shadow').css({\"top\":\"80px\"});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// recalibrate menu (mobile = slim mode) on resize\r\n\t\tjQuery(window).resize(function() {\r\n\t\t\t_topNavCalibrate();\r\n\t\t});\t_topNavCalibrate();\r\n\r\n\r\n\t// scoll is on top!\r\n\twindow.topNavSmall = false;\r\n\r\n\r\n\tfunction topMain() {\r\n\t\tvar _scrollTop \t\t= jQuery(document).scrollTop();\r\n\r\n\t\tif(window.topNavSmall === false && _scrollTop > 0) {\r\n\t\t\r\n\t\t\tjQuery('header#topNav div.nav-main-collapse').addClass('topFix');\r\n\t\t\tjQuery('#topNav').stop().animate({ 'height':'60px'},400);\r\n\t\t\tjQuery('header#topNav div.nav-main-collapse').stop().animate({ 'margin-top':'6px'},400);\r\n\t\t\tjQuery('header#topNav button').stop().animate({ 'margin-top':'0'},100);\r\n\t\t\tjQuery('header#topNav a.logo').stop().animate({ 'margin-top':'-10px'},400);\r\n\r\n\t\t\tif(jQuery('#header_shadow').length > 0) {\r\n\t\t\t\tjQuery('#header_shadow').stop().animate({ 'top':window._headHeightSmall + 'px'},400);/* just a little visible */\r\n\t\t\t}\r\n\r\n\t\t\twindow.topNavSmall = true;\r\n\t\t} \r\n\r\n\t\tif(window.topNavSmall === true && _scrollTop < 3) {\r\n\t\t\tjQuery('header#topNav div.nav-main-collapse').removeClass('topFix');\r\n\t\t\tjQuery('#topNav').stop().animate({ 'height':'81px'},400);\r\n\t\t\tjQuery('header#topNav div.nav-main-collapse').stop().animate({ 'margin-top':'16px'},400);\r\n\t\t\tjQuery('header#topNav button').stop().animate({ 'margin-top':'8px'},100);\r\n\t\t\tjQuery('header#topNav a.logo').stop().animate({ 'line-height':'50px', 'margin-top':'0'},400);\r\n\r\n\t\t\tif(jQuery('#header_shadow').length > 0) {\r\n\t\t\t\tjQuery('#header_shadow').stop().animate({ 'top':window._headHeight + 'px'},400);\r\n\t\t\t}\r\n\r\n\t\t\twindow.topNavSmall = false;\r\n\t\t}\r\n\r\n\t}\r\n};\r\n\r\nfunction userInfoChanged(scope, UserInfoService, $location){\r\n\tscope.$watch(function(){\r\n\t\treturn UserInfoService.userInfo.isAuthenticated;\r\n\t}, function(){\r\n\t\tscope.isUserAuthenticated = UserInfoService.userInfo.isAuthenticated;\r\n\t\tscope.userName = UserInfoService.userInfo.userName;\r\n\t\tscope.misDatosUrl = function(){\r\n\t\t\t$location.path('/editar-atleta/' + UserInfoService.userInfo.fullUser.id);\r\n\t\t}\r\n\t\tscope.esOrganizador = UserInfoService.esOrganizador();\r\n\t\tscope.verFullEventosMenu = UserInfoService.esOrganizador();\r\n\t\tSetPermisos(UserInfoService.userInfo.permisos);\r\n\t});\r\n\r\n\tfunction SetPermisos(permisos){\r\n\t\t\r\n\t\tif(!permisos) return;\r\n\r\n\t\tpermisos.forEach((element, index, array) => {\r\n\t\t\tswitch(element.permisoId){\r\n\t\t\t\tcase 1: //Administrar\r\n\t\t\t\t\tscope.permisoAdministrar = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2: //Usuarios\r\n\t\t\t\t\tscope.permisoUsuarios = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 3: //Grupos\r\n\t\t\t\t\tscope.permisoGrupos = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 4: //Organizadores\r\n\t\t\t\t\tscope.permisoOrganizadores = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 5: //Usuarios Organizador\r\n\t\t\t\t\tscope.permisoUsuariosOrganizador = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 10: //Eventos\r\n\t\t\t\t\tscope.permisoEventos = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 20: //Inscripciones\r\n\t\t\t\t\tscope.permisoInscripciones = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 30: //Reportes\r\n\t\t\t\t\tscope.permisoReportes = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 40: //Cupones\r\n\t\t\t\t\tscope.permisoCupones = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 50: //Categorias\r\n\t\t\t\t\tscope.permisoCategorias = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 60: //Agregar Tiempos\r\n\t\t\t\t\tscope.permisoAgregarTiempos = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 70: //Asignar Numeros\r\n\t\t\t\t\tscope.permisoAsignarNumeros = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 80: //Parametros\r\n\t\t\t\t\tscope.permisoParametros = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 90: //Paquetes\r\n\t\t\t\t\tscope.permisoPaquetes = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 100: //Reportes Socios\r\n\t\t\t\t\tscope.permisoReportesSocios = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 101: //Reportes Socios inscripciones\r\n\t\t\t\t\tscope.permisoReportesSociosInscripciones = element.ver;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\t\t\t\t\r\n\t\t});\r\n\r\n\t};\r\n};\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaTopBar', plaTopBar);\r\n\r\n\tplaTopBar.$inject = ['UserInfoService'];\r\n\r\n\tfunction plaTopBar(UserInfoService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n templateUrl: 'app/widgets/topBar.html',\r\n link: function(scope, element, attrs) {\r\n userInfoChanged(scope, UserInfoService);\r\n }\r\n }\r\n }\r\n\r\n /** 01. Top Nav\r\n **************************************************************** **/\r\n\r\n\r\nfunction userInfoChanged(scope, UserInfoService){\r\n\tscope.$watch(function(){\r\n\t\treturn UserInfoService.userInfo.isAuthenticated;\r\n\t}, function(newValue){\r\n scope.isUserAuthenticated = newValue;\r\n });\r\n \r\n scope.$watch(function(){\r\n\t\treturn UserInfoService.userInfo.userDisplayName;\r\n\t}, function(newValue){\r\n scope.userDisplayName = newValue;\r\n });\r\n \r\n scope.$watch(function(){\r\n\t\treturn UserInfoService.userInfo.companiaNombre;\r\n\t}, function(newValue){\r\n scope.companiaNombre = newValue;\r\n });\r\n \r\n scope.$watch(function(){\r\n \treturn UserInfoService.userInfo.companiaId;\r\n }, function(newValue){\r\n scope.companiaId = newValue;\r\n });\r\n};\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaActionModal', plaActionModal); \r\n\r\n\tfunction plaActionModal() {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/widgets/actionModal.html',\r\n scope: {\r\n itemId: '@',\r\n titulo: '@',\r\n detalle: '@',\r\n accionAceptarCallback: '&'\r\n },\r\n controllerAs: 'vm',\r\n controller: function($scope){\r\n var vm = this;\r\n vm.itemId = $scope.itemId;\r\n vm.titulo = $scope.titulo;\r\n vm.detalle = $scope.detalle;\r\n\r\n vm.aceptar = function(){\r\n $scope.accionAceptarCallback();\r\n };\r\n\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('buscadorDocumento', buscadorDocumento); \r\n\r\n buscadorDocumento.$inject = ['ApiBaseService', 'moment', 'UserInfoService'];\r\n\r\n\tfunction buscadorDocumento(ApiBaseService, moment, UserInfoService) {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/widgets/buscadorDocumento.html',\r\n scope: {\r\n desde: '=',\r\n hasta: '=',\r\n tipoDocumentoId: '=',\r\n emisorId: '=',\r\n receptorId: '=',\r\n verReceptor: '@',\r\n verTipoDocumento: '@',\r\n searchKey: '@',\r\n accionBuscarCallback: '&',\r\n accionGetExcelCallback: '&'\r\n },\r\n controllerAs: 'vm',\r\n controller: function($scope){\r\n var vm = this;\r\n\r\n vm.verReceptor = $scope.verReceptor;\r\n vm.verTipoDocumento = $scope.verTipoDocumento;\r\n\r\n vm.clearCriteria = function(){\r\n $scope.vm.desde = moment().add(-7, 'days').toDate();\r\n $scope.vm.hasta = moment().toDate();\r\n $scope.vm.tipoDocumentoId = 0;\r\n $scope.vm.emisorId = 0;\r\n $scope.vm.receptorId = 0;\r\n };\r\n \r\n vm.clearCriteria();\r\n cargarPreviousSearch($scope.searchKey)\r\n\r\n vm.tipoDocumentos = [];\r\n vm.emisores = [];\r\n vm.receptores = [];\r\n\r\n if(vm.verTipoDocumento == \"true\")\r\n {\r\n getComboData(vm.tipoDocumentos, 'api/TipoDocumentos', null, 'Error al obtener los tipos de documento.'); \r\n }\r\n\r\n if(vm.verReceptor == \"true\")\r\n {\r\n getComboData(vm.receptores, 'api/Receptores', null, 'Error al obtener los receptores.');\r\n }\r\n \r\n getComboData(vm.emisores, 'api/Emisores', null, 'Error al obtener los emisores.');\r\n \r\n\r\n vm.openFechaDesde = function(){\r\n vm.fechaDesdeOpened = !vm.fechaDesdeOpened;\r\n };\r\n \r\n vm.openFechaHasta = function(){\r\n vm.fechaHastaOpened = !vm.fechaHastaOpened;\r\n };\r\n\r\n function getParams(){\r\n const params = {\r\n desde: $scope.vm.desde,\r\n hasta: $scope.vm.hasta,\r\n tipoDocumentoId: $scope.vm.tipoDocumentoId,\r\n emisorId: $scope.vm.emisorId,\r\n receptorId: $scope.vm.receptorId,\r\n };\r\n if(params.receptorId !== 0)\r\n {\r\n params.receptorId = vm.receptores.find(e=>e.id === params.receptorId).numeroIdentificacion;\r\n }\r\n\r\n return params;\r\n };\r\n\r\n vm.getExcel = function(){\r\n\r\n const params = getParams();\r\n\r\n $scope.accionGetExcelCallback({criterios: params});\r\n };\r\n\r\n vm.buscar = function(){\r\n\r\n const params = getParams();\r\n\r\n $scope.accionBuscarCallback({criterios: params});\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function cargarPreviousSearch(searchKey){\r\n \r\n if(!searchKey) return;\r\n\r\n var previousSearch = UserInfoService.getDataFromSessionStorage(searchKey);\r\n if(previousSearch){\r\n $scope.vm.desde = moment(previousSearch.desde).toDate();\r\n $scope.vm.hasta = moment(previousSearch.hasta).toDate();\r\n $scope.vm.tipoDocumentoId = previousSearch.tipoDocumentoId;\r\n $scope.vm.emisorId = previousSearch.emisorId;\r\n $scope.vm.receptorId = previousSearch.receptorId; \r\n }\r\n };\r\n\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('errorLogModal', errorLogModal); \r\n\r\n errorLogModal.$inject = ['ApiBaseService', \"$timeout\"];\r\n\r\n\tfunction errorLogModal(ApiBaseService, $timeout) {\r\n return {\r\n restrict: 'E',\r\n templateUrl: 'app/widgets/errorLogModal.html',\r\n scope: {\r\n itemId: '@',\r\n titulo: '@',\r\n tipoDocumentoId: '@',\r\n emisorId: '@',\r\n codigoOrigen: '@',\r\n clave: '@'\r\n },\r\n controllerAs: 'vm',\r\n controller: function($scope){\r\n var vm = this;\r\n\r\n vm.itemId = $scope.itemId;\r\n vm.titulo = $scope.titulo;\r\n\r\n vm.tipoDocumentoId = $scope.tipoDocumentoId;\r\n vm.emisorId = $scope.emisorId;\r\n vm.codigoOrigen = $scope.codigoOrigen;\r\n vm.clave = $scope.clave;\r\n\r\n vm.collection = [];\r\n \r\n vm.modalName = '#myErrorModal'+vm.itemId;\r\n\r\n angular.element(function () {\r\n $timeout(function () {\r\n $(vm.modalName).on('shown.bs.modal', function (e) {\r\n\r\n if(vm.clave)\r\n {\r\n getComboData(vm.collection, 'api/ErrorLogs/Clave', [vm.clave], 'Error al obtener los emisores.');\r\n }\r\n else{\r\n getComboData(vm.collection, 'api/ErrorLogs/Documento', [vm.tipoDocumentoId, vm.codigoOrigen, vm.emisorId], 'Error al obtener los emisores.');\r\n }\r\n \r\n }); \r\n });\r\n });\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaCompare', plaCompare); \r\n\r\n\tfunction plaCompare() {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, currentEl, attrs, ctrl) {\r\n var comparefield = document.getElementsByName(attrs.plaCompare)[0]; //getting first element\r\n compareEl = angular.element(comparefield);\r\n \r\n //current field key up\r\n currentEl.on('keyup', function () {\r\n if (compareEl.val() != \"\") {\r\n var isMatch = currentEl.val() === compareEl.val();\r\n ctrl.$setValidity('compare', isMatch);\r\n scope.$digest();\r\n }\r\n });\r\n\r\n //Element to compare field key up\r\n compareEl.on('keyup', function () {\r\n if (currentEl.val() != \"\") {\r\n var isMatch = currentEl.val() === compareEl.val();\r\n ctrl.$setValidity('compare', isMatch);\r\n scope.$digest();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaPositive', plaPositive); \r\n\r\n\tfunction plaPositive() {\r\n return {\r\n require: 'ngModel',\r\n link: function(scope, elem, attrs, ctrl) {\r\n if (!ctrl) return;\r\n ctrl.$validators.positive = function(value) {\r\n return value && value > 0;\r\n };\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaValidMonth', plaValidMonth); \r\n\r\n\tfunction plaValidMonth() {\r\n return {\r\n require: 'ngModel',\r\n link: function(scope, elem, attrs, ctrl) {\r\n if (!ctrl) return;\r\n ctrl.$validators.validMonth = function(value) {\r\n return value && value >= 1 && value <= 12;\r\n };\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n .directive('plaFileSelect', plaFileSelect); \r\n \r\n plaFileSelect.$inject = ['FileReaderService', '$timeout'];\r\n\r\n\tfunction plaFileSelect(FileReaderService, $timeout) {\r\n return {\r\n scope: {\r\n ngModel: '='\r\n },\r\n link: function($scope, el) {\r\n function getFile(file) {\r\n FileReaderService.readAsDataUrl(file, $scope)\r\n .then(function(result) {\r\n $timeout(function() {\r\n $scope.ngModel = result;\r\n });\r\n });\r\n }\r\n \r\n el.bind(\"change\", function(e) {\r\n var file = (e.srcElement || e.target).files[0];\r\n getFile(file);\r\n });\r\n }\r\n };\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n .directive('plaFileModel', plaFileModel); \r\n \r\n plaFileModel.$inject = ['$parse'];\r\n\r\n\tfunction plaFileModel($parse) {\r\n return {\r\n restrict: 'A', //the directive can be used as an attribute only\r\n\r\n /*\r\n link is a function that defines functionality of directive\r\n scope: scope associated with the element\r\n element: element on which this directive used\r\n attrs: key value pair of element attributes\r\n */\r\n link: function (scope, element, attrs) {\r\n var model = $parse(attrs.plaFileModel),\r\n modelSetter = model.assign; //define a setter for demoFileModel\r\n\r\n //Bind change event on the element\r\n element.bind('change', function () {\r\n //Call apply on scope, it checks for value changes and reflect them on UI\r\n scope.$apply(function () {\r\n //set the model value\r\n modelSetter(scope, element[0].files[0]);\r\n });\r\n });\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('plaEnter', plaEnter); \r\n\r\n\tfunction plaEnter() {\r\n\t\treturn function(scope,element,attrs){\r\n\t\t\telement.bind(\"keydown keypress\",function(event){\r\n\t\t\t\tif(event.which===13){\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tvar fields=$(this).parents('.detalle').find('input, textarea, select');\r\n\t\t\t\t\tvar index=fields.index(this);\r\n\t\t\t\t\tif(index> -1&&(index+1)<fields.length)\r\n\t\t\t\t\t\tfields.eq(index+1).focus().select();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n }\r\n\r\n})();","(function () {\r\n\r\n\r\n\tangular.module('app.widgets')\r\n\t.directive('convertToNumber', convertToNumber); \r\n\r\n\tfunction convertToNumber() {\r\n return {\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ngModel) {\r\n ngModel.$parsers.push(function(val) {\r\n return parseInt(val, 10);\r\n });\r\n ngModel.$formatters.push(function(val) {\r\n return '' + val;\r\n });\r\n }\r\n };\r\n }\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.layout', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.layout')\n .controller('Shell', Shell);\n\n Shell.$inject = ['$timeout', 'config', 'logger'];\n\n function Shell($timeout, config, logger) {\n /*jshint validthis: true */\n var vm = this;\n\n vm.title = config.appTitle;\n vm.busyMessage = 'Por Favor Espere ...';\n vm.isBusy = true;\n vm.showSplash = true;\n\n activate();\n\n function activate() {\n logger.success(config.appTitle + ' cargado!', null);\n// Using a resolver on all routes or dataservice.ready in every controller\n// dataservice.ready().then(function(){\n// hideSplash();\n// });\n hideSplash();\n }\n\n function hideSplash() {\n //Force a 1 second delay so we can see the splash.\n $timeout(function() {\n vm.showSplash = false;\n }, 1000);\n }\n }\n})();\n","(function() {\n 'use strict';\n\n angular.module('app.login', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.login')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/',\n config: {\n templateUrl: 'app/login/login.html',\n controller: 'Login',\n controllerAs: 'vm',\n title: 'Login',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.login')\r\n .controller('Login', Login);\r\n\r\n Login.$inject = ['$animationsSrv', 'LoginService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function Login($animationsSrv, LoginService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.title = 'Usuarios';\r\n\r\n vm.interface = {\r\n loginError: false,\r\n passwordSuccess: false,\r\n passwordError: false\r\n };\r\n\r\n vm.user = {\r\n grant_type: 'password',\r\n userName: '',\r\n userDisplayName: '',\r\n password: '',\r\n rememberMe: false,\r\n isAuthenticated: false\r\n };\r\n\r\n logOutUser();\r\n\r\n vm.goToLoadPage = function(){\r\n \r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n\r\n if(UserInfoService.esOrganizador())\r\n {\r\n if(permisosInscripciones.ver) {\r\n $location.path('/inscripciones');\r\n }\r\n else{\r\n $location.path('/principal');\r\n }\r\n }\r\n else\r\n {\r\n $location.path('/eventos');\r\n }\r\n };\r\n\r\n vm.login = function(){\r\n if(validate()){\r\n var promise = LoginService.login(vm.user);\r\n vm.interface.loginError = false;\r\n promise.then(function(response){\r\n\r\n if (response.data != null) { \r\n if (response.data.error == \"invalid_grant\") { \r\n vm.user.isAuthenticated = false; \r\n logger.error('El usuario o el password son incorrectos'); \r\n } \r\n else { \r\n \r\n UserInfoService.setToken(response.data.access_token);\r\n LoginService.getLoginInfo()\r\n .then(function(userLoginData){\r\n vm.user.isAuthenticated = true;\r\n\r\n UserInfoService.setUser(vm.user, response.data, userLoginData);\r\n\r\n vm.goToLoadPage(); \r\n logger.success('Usuario logueado con éxito'); \r\n })\r\n .catch(function(error){\r\n logger.error('Problemas al obtener la informacion del login.');\r\n });\r\n } \r\n } else { \r\n vm.user.isAuthenticated = false; \r\n logger.error('Problemas de comunicacion.');\r\n } \r\n\r\n }).catch(function(error){\r\n logger.error('El usuario o el password son incorrectos');\r\n vm.interface.loginError = true;\r\n });\r\n }\r\n };\r\n\r\n function validate(){\r\n if(vm.user.userName === ''){\r\n logger.error('El usuario es requerido');\r\n return false;\r\n }\r\n\r\n if(vm.user.password === ''){\r\n logger.error('El password es requerido');\r\n return false;\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n function logOutUser(){\r\n UserInfoService.logoutUser();\r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.login')\r\n .factory('LoginService', LoginService);\r\n\r\n LoginService.$inject = ['$http', '$q', 'apiSettings'];\r\n\r\n function LoginService($http, $q, apiSettings) {\r\n\r\n var api = {\r\n login: login,\r\n refreshToken: refreshToken,\r\n getLoginInfo: getLoginInfo\r\n };\r\n\r\n return api;\r\n\r\n function login(userData){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'token', \r\n method: 'POST', \r\n data: $.param({ \r\n grant_type: userData.grant_type, \r\n username: userData.userName, \r\n password: userData.password \r\n }), \r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'Access-Control-Allow-Origin' : '*',\r\n 'Access-Control-Allow-Methods' : '*',\r\n 'Access-Control-Allow-Headers' : 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Auth-Token',\r\n } \r\n }); \r\n return response;\r\n };\r\n\r\n function refreshToken(refreshToken, grantType){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'token', \r\n method: 'POST', \r\n data: $.param({ \r\n grant_type: grantType, \r\n refresh_token: refreshToken\r\n }), \r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' } \r\n }); \r\n return response;\r\n };\r\n\r\n function getLoginInfo(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/autenticacion/login-info';\r\n \r\n return $http.get(url)\r\n .then(getLoginInfoSuccess, getLoginInfoError);\r\n\r\n function getLoginInfoSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getLoginInfoError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.usuarios', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.usuarios')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/usuarios',\n config: {\n templateUrl: 'app/usuarios/usuarios.html',\n controller: 'Usuarios',\n controllerAs: 'vm',\n title: 'Usuarios',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/editar-usuario/:id?',\n config: {\n templateUrl: 'app/usuarios/editarUsuarios.html',\n controller: 'EditarUsuario',\n controllerAs: 'vm',\n title: 'EditarUsuarios',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/crear-usuario-publico',\n config: {\n templateUrl: 'app/usuarios/crearPublicUsuario.html',\n controller: 'CrearPublicUsuario',\n controllerAs: 'vm',\n title: 'CrearPublicUsuario',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/recuperar-password',\n config: {\n templateUrl: 'app/usuarios/recuperarPassword.html',\n controller: 'RecuperarPassword',\n controllerAs: 'vm',\n title: 'RecuperarPassword',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/cambiar-password/:id/:nombre?',\n config: {\n templateUrl: 'app/usuarios/cambiarPassword.html',\n controller: 'CambiarPassword',\n controllerAs: 'vm',\n title: 'CambiarPassword'\n }\n },\n {\n url: '/editar-atleta/:id?',\n config: {\n templateUrl: 'app/usuarios/editarAtleta.html',\n controller: 'EditarAtleta',\n controllerAs: 'vm',\n title: 'EditarAtleta',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('Usuarios', Usuarios);\r\n\r\n Usuarios.$inject = ['$animationsSrv', 'UsuariosService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function Usuarios($animationsSrv, UsuariosService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n var PERMISO_ID = 2;\r\n\r\n vm.criteriosBusqueda = {\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.usuarios = [];\r\n vm.title = 'Usuarios';\r\n vm.permisos = UserInfoService.getPermisos(PERMISO_ID);\r\n\r\n vm.goToEdit = function(usuario){\r\n \r\n var path = '/editar-usuario/';\r\n\r\n if(usuario){\r\n $location.path(path + usuario.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.goToChangePassword = function(usuario){\r\n \r\n var path = `cambiar-password/${usuario.id}/${usuario.nombre}`;\r\n \r\n $location.path(path);\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n\r\n var promise = UsuariosService.getAll(criterios);\r\n\r\n promise\r\n .then(function(usuarios){\r\n vm.usuarios = usuarios;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los usuarios.');\r\n break;\r\n }\r\n \r\n });\r\n };\r\n\r\n vm.delete = function(usuario){\r\n var promise = UsuariosService.remove(usuario);\r\n \r\n promise\r\n .then(function(response){\r\n vm.usuarios = vm.usuarios.filter(function(u) {\r\n return u.id !== usuario.id;\r\n });\r\n logger.success('Usuario eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el usuario');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('CrearPublicUsuario', CrearPublicUsuario);\r\n\r\n CrearPublicUsuario.$inject = ['$q', '$scope', '$animationsSrv', 'UsuariosService', 'logger', '$location', 'ApiBaseService'];\r\n\r\n function CrearPublicUsuario($q, $scope, $animationsSrv, UsuariosService, logger, $location, ApiBaseService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = 0;\r\n \r\n vm.grupos = [];\r\n\r\n const GRUPO_ATLETAS = 2;\r\n\r\n vm.usuario = {\r\n id: 0,\r\n grupoId: GRUPO_ATLETAS,\r\n tallaId: 0,\r\n estadoVacunacionId: 0,\r\n lateralidad: 0,\r\n sexo: 0\r\n };\r\n\r\n vm.uiData = {\r\n fechaNacimientoOpened: false,\r\n openFechaNacimiento(){\r\n this.fechaNacimientoOpened = !this.fechaNacimientoOpened;\r\n }\r\n };\r\n\r\n vm.tallas = [];\r\n vm.estadosVacunacion = [];\r\n\r\n\r\n getComboData(vm.tallas, 'api/Tallas', null, 'Error al cargar las tallas');\r\n getComboData(vm.estadosVacunacion, 'api/EstadosVacunacion', null, 'Error al cargar los estados de vacunacion');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'tallaId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'estadoVacunacionId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'sexo' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'lateralidad' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if(vm.usuario.grupoId == -1){\r\n $scope.usuarioForm.usergrupo.$setValidity(\"different\", false);\r\n }\r\n\r\n doFormValidations();\r\n\r\n if($scope.usuarioForm.$valid){\r\n vm.usuario.id = 0;\r\n saveUser();\r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function saveUser() {\r\n var promise = UsuariosService.savePublic(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Usuario creado con éxito.');\r\n $location.path( \"/\" ); \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(`Hubo un erro al crea el usuario: ${error.data.Message}`);\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al crea el usuario');\r\n break;\r\n }\r\n }); \r\n }\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"tallaId\":\r\n onTallaIdChanged(property);\r\n break;\r\n case \"estadoVacunacionId\":\r\n onEstadoVacunacionIdChanged(property);\r\n break;\r\n case \"sexo\":\r\n onSexoChanged(property);\r\n break;\r\n case \"lateralidad\":\r\n onLateralidadChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onTallaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onSexoChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onEstadoVacunacionIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onLateralidadChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('RecuperarPassword', RecuperarPassword);\r\n\r\n RecuperarPassword.$inject = ['$animationsSrv', '$scope', 'UsuariosService', 'logger', '$location'];\r\n\r\n function RecuperarPassword($animationsSrv, $scope, UsuariosService, logger, $location) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.interface = {\r\n loginError: false,\r\n passwordSuccess: false,\r\n passwordError: false\r\n };\r\n\r\n vm.data = {\r\n email: '',\r\n };\r\n\r\n vm.recuperarPassword = function(){\r\n $scope.submitted = true;\r\n\r\n if($scope.loginForm.$valid){\r\n var promise = UsuariosService.recuperarPassword(vm.data);\r\n vm.interface.loginError = false;\r\n promise.then(function(response){\r\n\r\n if (response.data != null) { \r\n \r\n $location.path('/'); \r\n logger.success('Los datos de tu contraseña se enviarón a tu cuenta de Email'); \r\n\r\n } else {\r\n vm.interface.loginError = true;\r\n logger.error('El Email no esta registrado en el sistema.');\r\n } \r\n\r\n }).catch(function(error){\r\n logger.error(error.data.Message);\r\n vm.interface.loginError = true;\r\n });\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('EditarUsuario', EditarUsuario);\r\n\r\n EditarUsuario.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams', 'UsuariosService', 'GruposService', 'logger', '$location', 'UserInfoService', 'ApiBaseService'];\r\n\r\n function EditarUsuario($q, $scope, $animationsSrv, $routeParams, UsuariosService, GruposService, logger, $location, UserInfoService, ApiBaseService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = $routeParams.id ? $routeParams.id : 0;\r\n \r\n vm.grupos = [];\r\n vm.tallas = [];\r\n vm.estadosVacunacion = [];\r\n vm.categorias = [];\r\n\r\n vm.usuario = {\r\n grupoId: -1,\r\n tallaId: 0,\r\n estadoVacunacionId: 0,\r\n lateralidad: 0,\r\n sexo: 0\r\n };\r\n\r\n vm.uiData = {\r\n esOrganizador: UserInfoService.esOrganizador()\r\n };\r\n\r\n var promiseGrupo = getGrupos();\r\n var promiseTallas = getComboData(vm.tallas, 'api/Tallas', null, 'Error al cargar las tallas');\r\n var promiseEstadosVacunacion = getComboData(vm.estadosVacunacion, 'api/EstadosVacunacion', null, 'Error al cargar los estados de vacunacion');\r\n var promiseCategorias = getComboData(vm.categorias, 'api/Categorias/All', null, 'Error al cargar las Categorias');\r\n\r\n if(vm.usuarioId){\r\n getById();\r\n }\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getGrupos(){\r\n var promise = GruposService.getAll()\r\n .then(function(grupos){\r\n vm.grupos = grupos;\r\n })\r\n .catch(function(error){\r\n $logger.error('Error al obtener los grupos')\r\n }); \r\n \r\n return promise;\r\n }\r\n\r\n function getById(){\r\n\r\n $q.all([promiseGrupo, promiseTallas, promiseEstadosVacunacion, promiseCategorias])\r\n .then(function(){\r\n UsuariosService.getById(vm.usuarioId)\r\n .then(function(usuario){\r\n usuario.fechaNacimiento = moment(usuario.fechaNacimiento).toDate();\r\n usuario.categoriaId = usuario.categoriaId == null ? 0 : usuario.categoriaId;\r\n vm.usuario = usuario;\r\n })\r\n .catch(function(error){\r\n $logger.error('Error al obtener los datos del usuario')\r\n }); \r\n });\r\n }\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'tallaId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'estadoVacunacionId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'sexo' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'lateralidad' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'usergrupo' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'categoriaId' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if(vm.usuario.grupoId == -1){\r\n $scope.usuarioForm.usergrupo.$setValidity(\"different\", false);\r\n }\r\n\r\n doFormValidations();\r\n\r\n if($scope.usuarioForm.$valid){\r\n if(!vm.usuario.id){\r\n vm.usuario.id = 0;\r\n saveUser();\r\n }\r\n else{\r\n if($scope.usuarioForm.$dirty){\r\n updateUser();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato');\r\n }\r\n }\r\n \r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function saveUser() {\r\n var promise = UsuariosService.save(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Usuario creado con éxito.');\r\n clearUserData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(`Hubo un erro al crea el usuario: ${error.data.Message}`);\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al crea el usuario');\r\n break;\r\n }\r\n }); \r\n }\r\n\r\n function updateUser() {\r\n var promise = UsuariosService.update(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Usuario modificado con éxito.');\r\n\r\n if(vm.uiData.esOrganizador)\r\n {\r\n $location.path('/usuarios');\r\n }\r\n else{\r\n $location.path('/eventos');\r\n }\r\n \r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al modificar el usuario');\r\n }); \r\n }\r\n\r\n function clearUserData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.usuario = {\r\n grupoId: -1,\r\n tipoIdentificacion: 0\r\n };\r\n // Set back to pristine.\r\n $scope.usuarioForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.usuarioForm.$setUntouched();\r\n }\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"tallaId\":\r\n onTallaIdChanged(property);\r\n break;\r\n case \"estadoVacunacionId\":\r\n onEstadoVacunacionIdChanged(property);\r\n break;\r\n case \"sexo\":\r\n onSexoChanged(property);\r\n break;\r\n case \"lateralidad\":\r\n onLateralidadChanged(property);\r\n break;\r\n case \"usergrupo\":\r\n onUsergrupoChanged(property);\r\n break;\r\n case \"categoriaId\":\r\n onCategoriaIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onTallaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onSexoChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onEstadoVacunacionIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onLateralidadChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onUsergrupoChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onCategoriaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('EditarAtleta', EditarAtleta);\r\n\r\n EditarAtleta.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams', 'UsuariosService', 'GruposService', 'logger', '$location', 'UserInfoService', 'ApiBaseService'];\r\n\r\n function EditarAtleta($q, $scope, $animationsSrv, $routeParams, UsuariosService, GruposService, logger, $location, UserInfoService, ApiBaseService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.tallas = [];\r\n vm.estadosVacunacion = [];\r\n\r\n vm.usuario = {\r\n tallaId: 0,\r\n estadoVacunacionId: 0,\r\n lateralidad: 0,\r\n sexo: 0\r\n };\r\n\r\n vm.uiData = {\r\n esOrganizador: UserInfoService.esOrganizador()\r\n };\r\n\r\n var promiseTallas = getComboData(vm.tallas, 'api/Tallas', null, 'Error al cargar las tallas');\r\n var promiseEstadosVacunacion = getComboData(vm.estadosVacunacion, 'api/EstadosVacunacion', null, 'Error al cargar los estados de vacunacion');\r\n\r\n if(vm.usuarioId){\r\n getById();\r\n }\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getById(){\r\n\r\n $q.all([promiseTallas, promiseEstadosVacunacion])\r\n .then(function(){\r\n UsuariosService.getById(vm.usuarioId)\r\n .then(function(usuario){\r\n usuario.fechaNacimiento = moment(usuario.fechaNacimiento).toDate();\r\n vm.usuario = usuario;\r\n })\r\n .catch(function(error){\r\n $logger.error('Error al obtener los datos del usuario');\r\n }); \r\n });\r\n }\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'tallaId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'estadoVacunacionId' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'sexo' );\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'lateralidad' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.usuarioForm.$valid){\r\n if(!vm.usuario.id){\r\n $logger.error('Accion no permitida');\r\n }\r\n else{\r\n if($scope.usuarioForm.$dirty){\r\n updateUser();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato');\r\n }\r\n }\r\n \r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function updateUser() {\r\n var promise = UsuariosService.update(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Datos modificados con éxito.');\r\n\r\n $location.path('/eventos');\r\n \r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al modificar el usuario');\r\n }); \r\n }\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"tallaId\":\r\n onTallaIdChanged(property);\r\n break;\r\n case \"estadoVacunacionId\":\r\n onEstadoVacunacionIdChanged(property);\r\n break;\r\n case \"sexo\":\r\n onSexoChanged(property);\r\n break;\r\n case \"lateralidad\":\r\n onLateralidadChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onTallaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onSexoChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onEstadoVacunacionIdChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n function onLateralidadChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios')\r\n .controller('CambiarPassword', CambiarPassword);\r\n\r\n CambiarPassword.$inject = ['$scope', '$animationsSrv', '$routeParams', 'UsuariosService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function CambiarPassword($scope, $animationsSrv, $routeParams, UsuariosService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = $routeParams.id ? $routeParams.id : 0;\r\n vm.nombreUsuario = $routeParams.id ? $routeParams.nombre : '';\r\n\r\n if(vm.usuarioId == 0 || vm.nombreUsuario == ''){\r\n $location.path('/usuarios');\r\n }\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if($scope.cambiarPasswordForm.$valid){\r\n if($scope.cambiarPasswordForm.$dirty){\r\n updatePassword();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n \r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function updatePassword() {\r\n vm.usuario.id = vm.usuarioId;\r\n var promise = UsuariosService.changePassword(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Usuario modificado con éxito.');\r\n $location.path('/usuarios');\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al modificar el usuario');\r\n }); \r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.usuarios')\r\n .factory('UsuariosService', UsuariosService);\r\n\r\n UsuariosService.$inject = ['$http', '$q', 'apiSettings', 'UserInfoService'];\r\n\r\n function UsuariosService($http, $q, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getAll: getAll,\r\n getById: getById,\r\n save: save,\r\n savePublic: savePublic,\r\n recuperarPassword: recuperarPassword,\r\n update: update,\r\n remove: remove,\r\n changePassword: changePassword\r\n };\r\n\r\n return api;\r\n\r\n function getStringParams(params){\r\n let stringParams = '';\r\n if(params != undefined && params != null)\r\n {\r\n params.forEach(element => {\r\n stringParams += `/${element}`\r\n });\r\n }\r\n return stringParams;\r\n };\r\n\r\n function getAll(params){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/usuarios' + getStringParams(params);\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getById(usuarioId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/usuarios/' + usuarioId;\r\n \r\n return $http.get(url)\r\n .then(getByIdSuccess, getByIdError);\r\n\r\n function getByIdSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getByIdError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function save(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios', \r\n method: 'POST', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function savePublic(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-public', \r\n method: 'POST', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function recuperarPassword(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-public/recuperar-password', \r\n method: 'POST', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function update(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios', \r\n method: 'PUT', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function remove(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function changePassword(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios/change-password', \r\n method: 'PUT', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.grupos', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.grupos')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/grupos',\n config: {\n templateUrl: 'app/grupos/grupos.html',\n controller: 'Grupos',\n controllerAs: 'vm',\n title: 'Grupos',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/editar-grupo/:id?',\n config: {\n templateUrl: 'app/grupos/editarGrupos.html',\n controller: 'EditarGrupo',\n controllerAs: 'vm',\n title: 'EditarGrupos',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.grupos')\r\n .controller('Grupos', Grupos);\r\n\r\n Grupos.$inject = ['$animationsSrv', 'GruposService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function Grupos($animationsSrv, GruposService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n var PERMISO_ID = 3;\r\n\r\n vm.grupos = [];\r\n vm.title = 'Grupos';\r\n vm.permisos = UserInfoService.getPermisos(PERMISO_ID);\r\n\r\n vm.goToEdit = function(grupo){\r\n \r\n var path = '/editar-grupo/';\r\n\r\n if(grupo){\r\n $location.path(path + grupo.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.goToPermisos = function(grupo){\r\n \r\n var path = '/permisos/';\r\n\r\n $location.path(path + grupo.id);\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n\r\n var promise = GruposService.getAll();\r\n\r\n promise\r\n .then(function(grupos){\r\n vm.grupos = grupos;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los grupos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(grupo){\r\n var promise = GruposService.remove(grupo);\r\n \r\n promise\r\n .then(function(response){\r\n vm.grupos = vm.grupos.filter(function(g) {\r\n return g.id !== grupo.id;\r\n });\r\n logger.success('Grupo eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el grupo');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.grupos')\r\n .controller('EditarGrupo', EditarGrupo);\r\n\r\n EditarGrupo.$inject = ['$scope', '$animationsSrv', '$routeParams', 'GruposService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function EditarGrupo($scope, $animationsSrv, $routeParams, GruposService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n vm.grupo;\r\n\r\n var grupoId = $routeParams.id ? $routeParams.id : 0;\r\n\r\n getGrupo();\r\n\r\n function getGrupo(){\r\n\r\n if(grupoId != 0){\r\n var promise = GruposService.getById(grupoId);\r\n\r\n promise\r\n .then(function(grupo){\r\n vm.grupo = grupo;\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al obtener los datos');\r\n }); \r\n }\r\n\r\n };\r\n\r\n vm.save = function(){ \r\n $scope.submitted = true;\r\n\r\n if($scope.grupoForm.$valid){\r\n if(!vm.grupo.id){\r\n saveGrupo();\r\n }\r\n else if($scope.grupoForm.$dirty){\r\n updateGrupo();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n }\r\n };\r\n\r\n function saveGrupo(){\r\n vm.grupo.id = 0;\r\n\r\n var promise = GruposService.save(vm.grupo);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Grupo creado con éxito.');\r\n clearGrupoData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al crear el grupo' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function updateGrupo(){\r\n\r\n var promise = GruposService.update(vm.grupo);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Grupo modificado con éxito.');\r\n $location.path('/grupos');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al modificar el grupo: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearGrupoData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.grupo = {};\r\n // Set back to pristine.\r\n $scope.grupoForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.grupoForm.$setUntouched();\r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.grupos')\r\n .factory('GruposService', GruposService);\r\n\r\n GruposService.$inject = ['$http', '$q', 'apiSettings', 'UserInfoService'];\r\n\r\n function GruposService($http, $q, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getAll: getAll,\r\n getById: getById,\r\n save: save,\r\n update: update,\r\n remove: remove\r\n };\r\n\r\n return api;\r\n\r\n function getAll(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/grupos';\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getById(grupoId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/grupos/' + grupoId;\r\n \r\n return $http.get(url)\r\n .then(getByIdSuccess, getByIdError);\r\n\r\n function getByIdSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getByIdError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function save(grupo){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/grupos', \r\n method: 'POST', \r\n data: grupo\r\n }); \r\n return response;\r\n };\r\n\r\n function update(grupo){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/grupos', \r\n method: 'PUT', \r\n data: grupo\r\n }); \r\n return response;\r\n };\r\n\r\n function remove(grupo){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/grupos', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: grupo\r\n }); \r\n return response;\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.permisos', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.permisos')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/permisos/:id',\n config: {\n templateUrl: 'app/permisos/permisos.html',\n controller: 'Permisos',\n controllerAs: 'vm',\n title: 'Permisos',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.permisos')\r\n .controller('Permisos', Permisos);\r\n\r\n Permisos.$inject = ['$animationsSrv', '$routeParams', 'PermisosService', 'logger', '$location'];\r\n\r\n function Permisos($animationsSrv, $routeParams, PermisosService, logger, $location) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.permisos = [];\r\n vm.title = 'Permisos';\r\n\r\n var grupoId = $routeParams.id ? $routeParams.id : 0;\r\n\r\n getAll();\r\n\r\n vm.goToGrupo = function(grupo){\r\n \r\n var path = '/editar-grupo/';\r\n\r\n if(grupo){\r\n $location.path(path + grupo.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n function getAll(){\r\n\r\n var promise = PermisosService.getAll(grupoId);\r\n\r\n promise\r\n .then(function(permisos){\r\n vm.permisos = permisos;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los permisos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.saveAll = function(){\r\n save();\r\n };\r\n\r\n function save(){\r\n\r\n var promise = PermisosService.save(grupoId, vm.permisos);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Permisos guardados con éxito.');\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un error al actualizar los datos');\r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.permisos')\r\n .factory('PermisosService', PermisosService);\r\n\r\n PermisosService.$inject = ['$http', '$q', 'apiSettings'];\r\n\r\n function PermisosService($http, $q, apiSettings) {\r\n\r\n var api = {\r\n getAll: getAll,\r\n getAllCompanias: getAllCompanias,\r\n save: save,\r\n saveCompanias: saveCompanias\r\n };\r\n\r\n return api;\r\n\r\n function getAll(grupoId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/permisos/' + grupoId;\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getAllCompanias(grupoId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/permisos-compania/' + grupoId;\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function save(grupoId, permisos){\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/permisos/' + grupoId, \r\n method: 'POST', \r\n data: permisos\r\n }); \r\n return response;\r\n };\r\n\r\n function saveCompanias(permisos){\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/permisos-compania/', \r\n method: 'POST', \r\n data: permisos\r\n }); \r\n return response;\r\n };\r\n \r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.companias', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.companias')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/seleccionar-compania',\n config: {\n templateUrl: 'app/companias/seleccionarCompania.html',\n controller: 'SeleccionarCompania',\n controllerAs: 'vm',\n title: 'Seleccionar Compania'\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.companias')\r\n .controller('SeleccionarCompania', SeleccionarCompania);\r\n\r\n SeleccionarCompania.$inject = ['$animationsSrv', 'CompaniasService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function SeleccionarCompania($animationsSrv, CompaniasService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n const PERMISO_ID = 19;\r\n\r\n vm.companias = [];\r\n vm.title = 'Companias';\r\n\r\n vm.selectCompania = function(compania){\r\n \r\n //UserInfoService.setCompania(compania);\r\n\r\n const permisoPaginaInicioOrdenes = UserInfoService.getPermisos(PERMISO_ID);\r\n let path = '';\r\n \r\n if(permisoPaginaInicioOrdenes.ver === true)\r\n {\r\n path = '/ordenes';\r\n }\r\n else\r\n {\r\n path = '/principal';\r\n }\r\n \r\n\r\n $location.path(path);\r\n\r\n logger.info('compañia seleccionada. ' + compania.nombre);\r\n };\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n\r\n var promise = CompaniasService.getAll();\r\n\r\n promise\r\n .then(function(companias){\r\n\r\n if(companias > 1)\r\n {\r\n vm.companias = companias;\r\n logger.info('Selecciona la compañia.'); \r\n }\r\n else{\r\n if(companias[0])\r\n {\r\n vm.selectCompania(companias[0]);\r\n logger.info('Compañia seleccionada automaticamente.');\r\n }\r\n }\r\n\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n UserInfoService.setToken(null);\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener las companias.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.companias')\r\n .factory('CompaniasService', CompaniasService);\r\n\r\n CompaniasService.$inject = ['$http', '$q', 'apiSettings', 'UserInfoService'];\r\n\r\n function CompaniasService($http, $q, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getAll: getAll\r\n };\r\n\r\n return api;\r\n\r\n function getAll(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/companias/';\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.principal', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.principal')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/principal',\r\n config: {\r\n templateUrl: 'app/principal/principal.html'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.eventos', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.eventos')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/eventos',\r\n config: {\r\n templateUrl: 'app/eventos/list.html',\r\n controller: 'eventos.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/editar-evento/:id?',\r\n config: {\r\n templateUrl: 'app/eventos/edit.html',\r\n controller: 'eventos.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n },\r\n {\r\n url: '/ver-inscritos-evento/:eventoId/:categoriaId?',\r\n config: {\r\n templateUrl: 'app/eventos/verInscritos.html',\r\n controller: 'eventos.VerInscritos',\r\n controllerAs: 'vm',\r\n title: 'VerInscritos'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.eventos')\r\n .controller('eventos.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment', 'pagosOnlineEnable'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService, moment, pagosOnlineEnable) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n var permisosEventos = UserInfoService.getPermisosEventos();\r\n\r\n var vm = this;\r\n\r\n vm.data = {\r\n categoriaId: 0,\r\n ordenReporte: 0,\r\n horaSalida: moment().toDate(),\r\n horaSalida2: moment().toDate(),\r\n horaSalida3: moment().toDate(),\r\n horaSalida4: moment().toDate(),\r\n horaSalida5: moment().toDate(),\r\n horaSalida6: moment().toDate(),\r\n horaSalida7: moment().toDate(),\r\n horaSalida8: moment().toDate(),\r\n horaSalida9: moment().toDate(),\r\n horaSalida: moment().toDate()\r\n }\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosEventos.guardar === true,\r\n puedeModificar: permisosEventos.modificar === true,\r\n puedeEliminar: permisosEventos.eliminar === true,\r\n esOrganizador: UserInfoService.esOrganizador(),\r\n agregandoCategoria: false,\r\n descargoData: {\r\n inscripcionId: 0,\r\n eventoId: 0,\r\n aceptaDescargo: false\r\n }\r\n };\r\n\r\n vm.collection = [];\r\n vm.title = 'Eventos';\r\n\r\n vm.categorias = [];\r\n\r\n if(vm.uiData.esOrganizador)\r\n {\r\n getComboData(vm.categorias, 'api/Categorias/All', null, 'Error al cargar las categorias')\r\n .then(function(){\r\n if(vm.categorias.length > 0)\r\n {\r\n vm.data.categoriaId = vm.categorias[0].id;\r\n }\r\n });\r\n }\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-evento/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.verInscritosCategoria = function(data){\r\n \r\n var path = '/ver-inscritos-evento/';\r\n\r\n if(data){\r\n $location.path(path + data.id + '/' + data.categoriaEnInscripcion.id\r\n );\r\n }\r\n \r\n };\r\n\r\n vm.verTodosLosInscritos = function(data){\r\n \r\n var path = '/ver-inscritos-evento/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n \r\n };\r\n\r\n vm.goToInscripcion = function(data){\r\n \r\n var path = '/crear-inscripcion/' + data.id;\r\n\r\n $location.path(path);\r\n \r\n };\r\n\r\n vm.goToConfirmarPago = function(data){\r\n \r\n var path = '';\r\n\r\n if(pagosOnlineEnable) {\r\n path = '/editar-pago-v2/' + data.inscripcionId;\r\n }\r\n else {\r\n path = '/editar-pago/' + data.inscripcionId;\r\n }\r\n\r\n $location.path(path); \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.openModalWithData = function(modalName, evento){\r\n vm.uiData.descargoData.inscripcionId = evento.inscripcionId;\r\n vm.uiData.descargoData.id = evento.id;\r\n\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.getMonedaSymbol = function(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n function getRemoteController()\r\n {\r\n if(UserInfoService.esOrganizador())\r\n {\r\n return 'api/Eventos/All/true';\r\n }\r\n\r\n return 'api/Eventos/Usuario';\r\n }\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n var promise = ApiBaseService.getAll([]);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verCategorias = false;\r\n c.verPaquetes = false;\r\n c.categorias = null\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Eventos';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n vm.getCategorias = function(item)\r\n {\r\n if(!item.categorias)\r\n {\r\n item.categorias = [];\r\n getComboData(item.categorias, 'api/EventosCategorias', [item.id], 'Error al obtener las categorias.')\r\n .then(()=>{\r\n item.categorias.forEach((i)=>{\r\n i.modificandoCategoria = false;\r\n });\r\n });\r\n }\r\n };\r\n\r\n vm.saveCategoria = function(item){\r\n\r\n if(validateCreateCategoria(item))\r\n {\r\n createCategoria(item);\r\n }\r\n };\r\n\r\n vm.editarCategoria = function(item, evento){\r\n\r\n updateCategoria(item, evento);\r\n };\r\n\r\n function validateCreateCategoria(item)\r\n {\r\n let result = true;\r\n if(item.categorias.length > 0)\r\n {\r\n item.categorias.forEach((c)=>{\r\n if(c.categoriaId === vm.data.categoriaId)\r\n {\r\n result = false;\r\n }\r\n });\r\n }\r\n\r\n if(!result)\r\n {\r\n logger.error('La categoria ya esta asociada al evento');\r\n }\r\n \r\n return result;\r\n }\r\n\r\n function createCategoria(item) {\r\n ApiBaseService.remoteController = 'api/EventosCategorias';\r\n\r\n const data = {\r\n id: 0,\r\n eventoId: item.id,\r\n categoriaId: vm.data.categoriaId,\r\n horaSalida: vm.data.horaSalida,\r\n horaSalida2: item.dias >= 2 ? vm.data.horaSalida2 : null,\r\n horaSalida3: item.dias >= 3 ? vm.data.horaSalida3 : null,\r\n horaSalida4: item.dias >= 4 ? vm.data.horaSalida4 : null,\r\n horaSalida5: item.dias >= 5 ? vm.data.horaSalida5 : null,\r\n horaSalida6: item.dias >= 6 ? vm.data.horaSalida6 : null,\r\n horaSalida7: item.dias >= 7 ? vm.data.horaSalida7 : null,\r\n horaSalida8: item.dias >= 8 ? vm.data.horaSalida8 : null,\r\n horaSalida9: item.dias >= 9 ? vm.data.horaSalida9 : null,\r\n horaSalida10: item.dias >= 10 ? vm.data.horaSalida10 : null,\r\n ordenReporte: vm.data.ordenReporte\r\n };\r\n\r\n var promise = ApiBaseService.save(data);\r\n \r\n promise\r\n .then(function(response){\r\n\r\n if(response.data.command.success)\r\n {\r\n vm.uiData.agregandoCategoria = false;\r\n item.categorias = [];\r\n getComboData(item.categorias, 'api/EventosCategorias', [item.id], 'Error al obtener las categorias.');\r\n }\r\n else\r\n {\r\n logger.error('Hubo un error al agregar la categoria: ' + response.data.command.message);\r\n }\r\n \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function updateCategoria(item, evento) {\r\n ApiBaseService.remoteController = 'api/EventosCategorias';\r\n\r\n item.horaSalida2 = evento.dias >= 2 ? item.horaSalida2 : null;\r\n item.horaSalida3 = evento.dias >= 3 ? item.horaSalida3 : null;\r\n item.horaSalida4 = evento.dias >= 4 ? item.horaSalida4 : null;\r\n item.horaSalida5 = evento.dias >= 5 ? item.horaSalida5 : null;\r\n item.horaSalida6 = evento.dias >= 6 ? item.horaSalida6 : null;\r\n item.horaSalida7 = evento.dias >= 7 ? item.horaSalida7 : null;\r\n item.horaSalida8 = evento.dias >= 8 ? item.horaSalida8 : null;\r\n item.horaSalida9 = evento.dias >= 9 ? item.horaSalida9 : null;\r\n item.horaSalida10 = evento.dias >= 10 ? item.horaSalida10 : null;\r\n\r\n var promise = ApiBaseService.update(item);\r\n \r\n promise\r\n .then(function(response){\r\n\r\n if(response.data.command.success)\r\n {\r\n item.modificandoCategoria = false;\r\n }\r\n else\r\n {\r\n logger.error('Hubo un error al modificar la categoria: ' + response.data.command.message);\r\n }\r\n \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n vm.deleteCategoria = function(item, data){\r\n ApiBaseService.remoteController = 'api/EventosCategorias';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n item.categorias = item.categorias.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n vm.aceptarDescargo = function(){\r\n ApiBaseService.remoteController = 'api/Inscripciones/AceptaDescargo';\r\n\r\n vm.uiData.descargoData.aceptaDescargo = true;\r\n\r\n var promise = ApiBaseService.update(vm.uiData.descargoData);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection.forEach(function(element) {\r\n if(element.inscripcionId === response.data.object.id)\r\n {\r\n element.aceptaDescargo = response.data.object.aceptaDescargo; \r\n }\r\n });\r\n\r\n vm.uiData.descargoData.inscripcionId = 0;\r\n vm.uiData.descargoData.eventoId = 0;\r\n vm.uiData.descargoData.aceptaDescargo = 0;\r\n\r\n logger.success('Registro modificado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.eventos')\r\n .controller('eventos.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n const apiEventos = 'api/Eventos';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n estado: 0,\r\n monedaId: 0,\r\n fechaInicio: moment().toDate(), \r\n fechaFinal: moment().toDate(),\r\n dias: 0,\r\n eventoPadreId: 0\r\n };\r\n\r\n vm.title = 'Eventos';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.estados = [];\r\n vm.monedas = [];\r\n vm.eventos = [];\r\n\r\n vm.uiData = {\r\n fechaInicioOpened: false,\r\n fechaFinalOpened: false,\r\n openFechaInicio(){\r\n this.fechaInicioOpened = !this.fechaInicioOpened;\r\n },\r\n openFechaFinal(){\r\n this.fechaFinalOpened = !this.fechaFinalOpened;\r\n }\r\n };\r\n\r\n var promiseEstados = getComboData(vm.estados, 'api/EventoEstados', null, 'Error al cargar los estados');\r\n var promiseMonedas = getComboData(vm.monedas, 'api/Monedas', null, 'Error al cargar las monedas');\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All-Except-Id', [vm.id], 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n $q.all([promiseEstados, promiseMonedas, promiseEventos])\r\n .then(function(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiEventos;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n data.fechaInicio = moment(data.fechaInicio).toDate();\r\n data.fechaFinal = moment(data.fechaFinal).toDate();\r\n vm.data = data;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n });\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'estado' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'monedaId' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiEventos;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro creado con éxito.');\r\n clearData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiEventos;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/eventos');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n estado: 0,\r\n moendaId: 0,\r\n fechaInicio: moment().toDate(), \r\n fechaFinal: moment().toDate()\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"estado\":\r\n onEstadoChanged(property);\r\n break;\r\n case \"monedaId\":\r\n onMonedaIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEstadoChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onMonedaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.eventos')\r\n .controller('eventos.VerInscritos', VerInscritos);\r\n\r\n VerInscritos.$inject = ['$animationsSrv', '$routeParams', 'ApiBaseService', 'logger'];\r\n\r\n function VerInscritos($animationsSrv, $routeParams, ApiBaseService, logger) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n var vm = this;\r\n\r\n vm.eventoId = $routeParams.eventoId ? $routeParams.eventoId : 0;\r\n vm.categoriaId = $routeParams.categoriaId ? $routeParams.categoriaId : 0;\r\n\r\n vm.collection = [];\r\n vm.title = 'Inscritos al Eventos';\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/Inscripciones/All/ForUser';\r\n }\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n var promise = ApiBaseService.getAll([vm.eventoId, vm.categoriaId]);\r\n\r\n promise\r\n .then(function(collection){\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.inscripciones', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/inscripciones',\r\n config: {\r\n templateUrl: 'app/inscripciones/list.html',\r\n controller: 'inscripciones.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/tiempos',\r\n config: {\r\n templateUrl: 'app/inscripciones/list-tiempos.html',\r\n controller: 'inscripciones.Tiempos',\r\n controllerAs: 'vm',\r\n title: 'Tiempos'\r\n }\r\n },\r\n {\r\n url: '/numeros',\r\n config: {\r\n templateUrl: 'app/inscripciones/list-numeros.html',\r\n controller: 'inscripciones.Numeros',\r\n controllerAs: 'vm',\r\n title: 'Numeros'\r\n }\r\n },\r\n {\r\n url: '/seleccionar-atleta',\r\n config: {\r\n templateUrl: 'app/inscripciones/list-atletas.html',\r\n controller: 'inscripciones.Atletas',\r\n controllerAs: 'vm',\r\n title: 'Atletas'\r\n }\r\n },\r\n {\r\n url: '/editar-inscripcion/:id?',\r\n config: {\r\n templateUrl: 'app/inscripciones/edit.html',\r\n controller: 'inscripciones.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n },\r\n {\r\n url: '/crear-inscripcion/:eventoId',\r\n config: {\r\n templateUrl: 'app/inscripciones/edit.html',\r\n controller: 'inscripciones.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n },\r\n {\r\n url: '/editar-pago/:id',\r\n config: {\r\n templateUrl: 'app/inscripciones/edit-pago.html',\r\n controller: 'inscripciones.EditPago',\r\n controllerAs: 'vm',\r\n title: 'EditPago'\r\n }\r\n },\r\n {\r\n url: '/editar-pago-v2/:id',\r\n config: {\r\n templateUrl: 'app/inscripciones/edit-pago-v2.html',\r\n controller: 'inscripciones.EditPagoV2',\r\n controllerAs: 'vm',\r\n title: 'EditPago'\r\n }\r\n },\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService', 'pagosOnlineEnable'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService, pagosOnlineEnable) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n const ESTADO_PENDIENTE = 1;\r\n const ESTADO_CONFIRMADO = 2;\r\n const ESTADO_RECHAZADO = 3;\r\n const ESTADO_PAGADO = 4;\r\n\r\n const GRUPO_INSCRIPTORES = 3;\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosInscripciones.guardar === true,\r\n puedeModificar: permisosInscripciones.modificar === true,\r\n puedeEliminar: permisosInscripciones.eliminar === true,\r\n esOrganizador: UserInfoService.esOrganizador(),\r\n esPagoPendiente(estadoId){\r\n return estadoId == ESTADO_PENDIENTE;\r\n },\r\n esEstadoConfirmado(estadoId){\r\n return estadoId == ESTADO_CONFIRMADO;\r\n },\r\n esEstadoRechazado(estadoId){\r\n return estadoId == ESTADO_RECHAZADO;\r\n }\r\n };\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_PAGADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.collection = [];\r\n vm.estados = [];\r\n vm.eventos = [];\r\n vm.inscriptores = [];\r\n\r\n vm.title = 'Inscripciones';\r\n\r\n getComboData(vm.estados, 'api/InscripcionEstados', null, 'Error al cargar los estados')\r\n .then(function(){\r\n vm.criteriosBusqueda.estado = ESTADO_PAGADO;\r\n });\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n getComboData(vm.inscriptores, 'api/Usuarios/ByGrupo', [GRUPO_INSCRIPTORES], 'Error al cargar los inscriptores');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-inscripcion/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.confirmarPago = function(data){\r\n \r\n var path = '';\r\n\r\n if(pagosOnlineEnable) {\r\n path = '/editar-pago-v2/' + data.id;\r\n }\r\n else {\r\n path = '/editar-pago/' + data.id;\r\n }\r\n\r\n $location.path(path); \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.getMonedaSymbol = function(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/Inscripciones/All';\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: 0,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verDetalle = false;\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Inscripciones';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n vm.confirmar = function(item)\r\n {\r\n const data = {\r\n id: item.id,\r\n eventoId: item.eventoId,\r\n estado: ESTADO_CONFIRMADO\r\n };\r\n\r\n vm.cambiarEstado(data);\r\n };\r\n\r\n vm.rechazar = function(item)\r\n {\r\n const data = {\r\n id: item.id,\r\n eventoId: item.eventoId,\r\n estado: ESTADO_RECHAZADO\r\n };\r\n\r\n vm.cambiarEstado(data);\r\n };\r\n\r\n vm.cambiarEstado = function(data){\r\n ApiBaseService.remoteController = 'api/Inscripciones/Confirmar';\r\n var promise = ApiBaseService.update(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection.forEach(function(element) {\r\n if(element.id === data.id)\r\n {\r\n element.estado = response.data.object.estado; \r\n element.estadoDescripcion = response.data.object.estadoDescripcion; \r\n }\r\n });\r\n logger.success('Registro modificado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.Tiempos', Tiempos);\r\n\r\n Tiempos.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Tiempos($scope, $animationsSrv, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n //const ESTADO_CONFIRMADO = 2;\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n var permisosTiempos = UserInfoService.getPermisosAgregarTiempos();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosInscripciones.guardar === true,\r\n puedeModificar: permisosInscripciones.modificar === true,\r\n puedeEliminar: permisosInscripciones.eliminar === true,\r\n puedeVerBusqueda: permisosTiempos.ver === true,\r\n diaNoSeleccionado() {return vm.criteriosBusqueda.dia === 0},\r\n ordenarPor(){\r\n if(vm.criteriosBusqueda.dia === 0)\r\n {\r\n return 'numero';\r\n }\r\n\r\n const sortProperty = `horaLlegadaRegistrada${vm.criteriosBusqueda.dia == 1 ? '' : vm.criteriosBusqueda.dia}`\r\n return sortProperty;\r\n },\r\n diaEnRango(currentDay){\r\n const evento = vm.eventos.find((e)=>{return e.id == vm.criteriosBusqueda.eventoId;});\r\n if(evento)\r\n {\r\n return evento.dias >= currentDay;\r\n }\r\n\r\n return false;\r\n },\r\n verDia1() { return this.diaEnRango(1) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 1)},\r\n verDia2() { return this.diaEnRango(2) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 2)},\r\n verDia3() { return this.diaEnRango(3) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 3)},\r\n verDia4() { return this.diaEnRango(4) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 4)},\r\n verDia5() { return this.diaEnRango(5) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 5)},\r\n verDia6() { return this.diaEnRango(6) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 6)},\r\n verDia7() { return this.diaEnRango(7) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 7)},\r\n verDia8() { return this.diaEnRango(8) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 8)},\r\n verDia9() { return this.diaEnRango(9) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 9)},\r\n verDia10() { return this.diaEnRango(10) && (this.diaNoSeleccionado() || vm.criteriosBusqueda.dia === 10)},\r\n verBotonGuardar(item){\r\n const diaSeleccionado = vm.criteriosBusqueda.dia;\r\n return diaSeleccionado === 1 && !item.horaLlegadaRegistrada ||\r\n diaSeleccionado === 2 && !item.horaLlegadaRegistrada2 ||\r\n diaSeleccionado === 3 && !item.horaLlegadaRegistrada3 ||\r\n diaSeleccionado === 4 && !item.horaLlegadaRegistrada4 ||\r\n diaSeleccionado === 5 && !item.horaLlegadaRegistrada5 ||\r\n diaSeleccionado === 6 && !item.horaLlegadaRegistrada6 ||\r\n diaSeleccionado === 7 && !item.horaLlegadaRegistrada7 ||\r\n diaSeleccionado === 8 && !item.horaLlegadaRegistrada8 ||\r\n diaSeleccionado === 9 && !item.horaLlegadaRegistrada9 ||\r\n diaSeleccionado === 10 && !item.horaLlegadaRegistrada10;\r\n },\r\n verBotonModificar(item){\r\n const diaSeleccionado = vm.criteriosBusqueda.dia;\r\n return diaSeleccionado === 1 && item.horaLlegadaRegistrada ||\r\n diaSeleccionado === 2 && item.horaLlegadaRegistrada2 ||\r\n diaSeleccionado === 3 && item.horaLlegadaRegistrada3 ||\r\n diaSeleccionado === 4 && item.horaLlegadaRegistrada4 ||\r\n diaSeleccionado === 5 && item.horaLlegadaRegistrada5 ||\r\n diaSeleccionado === 6 && item.horaLlegadaRegistrada6 ||\r\n diaSeleccionado === 7 && item.horaLlegadaRegistrada7 ||\r\n diaSeleccionado === 8 && item.horaLlegadaRegistrada8 ||\r\n diaSeleccionado === 9 && item.horaLlegadaRegistrada9 ||\r\n diaSeleccionado === 10 && item.horaLlegadaRegistrada10;\r\n },\r\n emailResultadoEnviado(item){\r\n const diaActual = vm.criteriosBusqueda.dia;\r\n\r\n let result = false;\r\n\r\n switch (diaActual) {\r\n case 1:\r\n result = item.emailResultadoEnviado;\r\n break;\r\n case 2:\r\n result = item.emailResultadoEnviado2;\r\n break;\r\n case 3:\r\n result = item.emailResultadoEnviado3;\r\n break;\r\n case 4:\r\n result = item.emailResultadoEnviado4;\r\n break;\r\n case 5:\r\n result = item.emailResultadoEnviado5;\r\n break;\r\n case 6:\r\n result = item.emailResultadoEnviado6;\r\n break;\r\n case 7:\r\n result = item.emailResultadoEnviado7;\r\n break;\r\n case 8:\r\n result = item.emailResultadoEnviado8;\r\n break;\r\n case 9:\r\n result = item.emailResultadoEnviado9;\r\n break;\r\n case 10:\r\n result = item.emailResultadoEnviado10;\r\n break;\r\n }\r\n\r\n return result;\r\n }\r\n };\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: 0,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n numero: '',\r\n dia: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.displayLimits = [\r\n {\r\n id: 10,\r\n descripcion: '10 Registros'\r\n },\r\n {\r\n id: 20,\r\n descripcion: '20 Registros'\r\n },\r\n {\r\n id: 50,\r\n descripcion: '50 Registros'\r\n },\r\n {\r\n id: undefined,\r\n descripcion: 'Todos'\r\n },\r\n ];\r\n\r\n vm.displayLimit = vm.displayLimits[0].id;\r\n\r\n vm.collection = [];\r\n vm.collectionCopy = [];\r\n\r\n vm.eventos = [];\r\n vm.categorias = [];\r\n vm.dias = [];\r\n\r\n vm.title = 'Tiempos';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/Inscripciones/All-Hijos';\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: 0,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n numero: '',\r\n dia: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n //getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n function getAll(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getRemoteController();\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n \r\n var promise = ApiBaseService.getAll(criterios);\r\n \r\n promise\r\n .then(function(collection){\r\n collection.forEach((c)=>{\r\n c.horaLlegada = c.horaLlegada == null || c.horaLlegada == undefined ? moment().toDate() : c.horaLlegada;\r\n c.horaLlegada2 = c.horaLlegada2 == null || c.horaLlegada2 == undefined ? moment().toDate() : c.horaLlegada2;\r\n c.horaLlegada3 = c.horaLlegada3 == null || c.horaLlegada3 == undefined ? moment().toDate() : c.horaLlegada3;\r\n c.horaLlegada4 = c.horaLlegada4 == null || c.horaLlegada4 == undefined ? moment().toDate() : c.horaLlegada4;\r\n c.horaLlegada5 = c.horaLlegada5 == null || c.horaLlegada5 == undefined ? moment().toDate() : c.horaLlegada5;\r\n c.horaLlegada6 = c.horaLlegada6 == null || c.horaLlegada6 == undefined ? moment().toDate() : c.horaLlegada6;\r\n c.horaLlegada7 = c.horaLlegada7 == null || c.horaLlegada7 == undefined ? moment().toDate() : c.horaLlegada7;\r\n c.horaLlegada8 = c.horaLlegada8 == null || c.horaLlegada8 == undefined ? moment().toDate() : c.horaLlegada8;\r\n c.horaLlegada9 = c.horaLlegada9 == null || c.horaLlegada9 == undefined ? moment().toDate() : c.horaLlegada9;\r\n c.horaLlegada10 = c.horaLlegada10 == null || c.horaLlegada10 == undefined ? moment().toDate() : c.horaLlegada10;\r\n\r\n c.segundos = typeof c.horaLlegada.getSeconds === 'function' ? c.horaLlegada.getSeconds() : new Date(c.horaLlegada).getSeconds();\r\n c.segundos2 = typeof c.horaLlegada2.getSeconds === 'function' ? c.horaLlegada2.getSeconds() : new Date(c.horaLlegada2).getSeconds();\r\n c.segundos3 = typeof c.horaLlegada3.getSeconds === 'function' ? c.horaLlegada3.getSeconds() : new Date(c.horaLlegada3).getSeconds();\r\n c.segundos4 = typeof c.horaLlegada4.getSeconds === 'function' ? c.horaLlegada4.getSeconds() : new Date(c.horaLlegada4).getSeconds();\r\n c.segundos5 = typeof c.horaLlegada5.getSeconds === 'function' ? c.horaLlegada5.getSeconds() : new Date(c.horaLlegada5).getSeconds();\r\n c.segundos6 = typeof c.horaLlegada6.getSeconds === 'function' ? c.horaLlegada6.getSeconds() : new Date(c.horaLlegada6).getSeconds();\r\n c.segundos7 = typeof c.horaLlegada7.getSeconds === 'function' ? c.horaLlegada7.getSeconds() : new Date(c.horaLlegada7).getSeconds();\r\n c.segundos8 = typeof c.horaLlegada8.getSeconds === 'function' ? c.horaLlegada8.getSeconds() : new Date(c.horaLlegada8).getSeconds();\r\n c.segundos9 = typeof c.horaLlegada9.getSeconds === 'function' ? c.horaLlegada9.getSeconds() : new Date(c.horaLlegada9).getSeconds();\r\n c.segundos10 = typeof c.horaLlegada10.getSeconds === 'function' ? c.horaLlegada10.getSeconds() : new Date(c.horaLlegada10).getSeconds();\r\n });\r\n vm.collection = collection;\r\n vm.collectionCopy = [...vm.collection];\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n }\r\n };\r\n\r\n vm.save = function(item)\r\n {\r\n item.diaActual = vm.criteriosBusqueda.dia;\r\n\r\n item.horaLlegada = typeof item.horaLlegada === 'string' ? new Date(item.horaLlegada) : item.horaLlegada;\r\n item.horaLlegada2 = typeof item.horaLlegada2 === 'string' ? new Date(item.horaLlegada2) : item.horaLlegada2;\r\n item.horaLlegada3 = typeof item.horaLlegada3 === 'string' ? new Date(item.horaLlegada3) : item.horaLlegada3;\r\n item.horaLlegada4 = typeof item.horaLlegada4 === 'string' ? new Date(item.horaLlegada4) : item.horaLlegada4;\r\n item.horaLlegada5 = typeof item.horaLlegada5 === 'string' ? new Date(item.horaLlegada5) : item.horaLlegada5;\r\n item.horaLlegada6 = typeof item.horaLlegada6 === 'string' ? new Date(item.horaLlegada6) : item.horaLlegada6;\r\n item.horaLlegada7 = typeof item.horaLlegada7 === 'string' ? new Date(item.horaLlegada7) : item.horaLlegada7;\r\n item.horaLlegada8 = typeof item.horaLlegada8 === 'string' ? new Date(item.horaLlegada8) : item.horaLlegada8;\r\n item.horaLlegada9 = typeof item.horaLlegada9 === 'string' ? new Date(item.horaLlegada9) : item.horaLlegada9;\r\n item.horaLlegada10 = typeof item.horaLlegada10 === 'string' ? new Date(item.horaLlegada10) : item.horaLlegada10;\r\n\r\n vm.update(item);\r\n };\r\n\r\n vm.update = function(data){\r\n ApiBaseService.remoteController = 'api/Inscripciones/AgregarTiempo';\r\n var promise = ApiBaseService.update(data);\r\n \r\n promise\r\n .then(function(response){\r\n postUpdateHoraLlegada(data, response);\r\n logger.success('Registro modificado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n function postUpdateHoraLlegada(data, response)\r\n {\r\n switch (vm.criteriosBusqueda.dia) {\r\n case 1:\r\n updateValues(data, \"horaLlegada\", \"horaLlegadaRegistrada\", \r\n response.data.object.horaLlegada, response.data.object.horaLlegadaRegistrada);\r\n break;\r\n case 2:\r\n updateValues(data, \"horaLlegada2\", \"horaLlegadaRegistrada2\", \r\n response.data.object.horaLlegada2, response.data.object.horaLlegadaRegistrada2);\r\n break;\r\n case 3:\r\n updateValues(data, \"horaLlegada3\", \"horaLlegadaRegistrada3\", \r\n response.data.object.horaLlegada3, response.data.object.horaLlegadaRegistrada3);\r\n break;\r\n case 4:\r\n updateValues(data, \"horaLlegada4\", \"horaLlegadaRegistrada4\", \r\n response.data.object.horaLlegada4, response.data.object.horaLlegadaRegistrada4);\r\n break;\r\n case 5:\r\n updateValues(data, \"horaLlegada5\", \"horaLlegadaRegistrada5\", \r\n response.data.object.horaLlegada5, response.data.object.horaLlegadaRegistrada5);\r\n break;\r\n case 6:\r\n updateValues(data, \"horaLlegada6\", \"horaLlegadaRegistrada6\", \r\n response.data.object.horaLlegada6, response.data.object.horaLlegadaRegistrada6);\r\n break;\r\n case 7:\r\n updateValues(data, \"horaLlegada7\", \"horaLlegadaRegistrada7\", \r\n response.data.object.horaLlegada7, response.data.object.horaLlegadaRegistrada7);\r\n break;\r\n case 8:\r\n updateValues(data, \"horaLlegada8\", \"horaLlegadaRegistrada8\", \r\n response.data.object.horaLlegada8, response.data.object.horaLlegadaRegistrada8);\r\n break;\r\n case 9:\r\n updateValues(data, \"horaLlegada9\", \"horaLlegadaRegistrada9\", \r\n response.data.object.horaLlegada9, response.data.object.horaLlegadaRegistrada9);\r\n break;\r\n case 10:\r\n updateValues(data, \"horaLlegada10\", \"horaLlegadaRegistrada10\", \r\n response.data.object.horaLlegada10, response.data.object.horaLlegadaRegistrada10);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function updateValues(data, propHoraLlegada, propHoraLLegadaReg, horaLlegadaValue, horaLlegadaRegValue)\r\n {\r\n vm.collectionCopy.forEach(function(element) {\r\n if(element.id === data.id)\r\n {\r\n element[propHoraLlegada] = horaLlegadaValue; \r\n element[propHoraLLegadaReg] = horaLlegadaRegValue; \r\n }\r\n });\r\n data[propHoraLLegadaReg] = horaLlegadaRegValue;\r\n };\r\n\r\n vm.sendEmail = function(data){\r\n data.diaActual = vm.criteriosBusqueda.dia;\r\n ApiBaseService.remoteController = 'api/Inscripciones/EnviarResultadoEmail';\r\n var promise = ApiBaseService.update(data);\r\n \r\n promise\r\n .then(function(response){\r\n\r\n vm.collectionCopy.forEach(function(element) {\r\n if(element.id === data.id)\r\n {\r\n vm.setEmailEnviado(element);\r\n }\r\n });\r\n vm.setEmailEnviado(data);\r\n\r\n logger.success('Email enviado!.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n vm.setEmailEnviado = function(item)\r\n {\r\n const diaActual = vm.criteriosBusqueda.dia;\r\n\r\n switch (diaActual) {\r\n case 1:\r\n item.emailResultadoEnviado = true;\r\n break;\r\n case 2:\r\n item.emailResultadoEnviado2 = true;\r\n break;\r\n case 3:\r\n item.emailResultadoEnviado3 = true;\r\n break;\r\n case 4:\r\n item.emailResultadoEnviado4 = true;\r\n break;\r\n case 5:\r\n item.emailResultadoEnviado5 = true;\r\n break;\r\n case 6:\r\n item.emailResultadoEnviado6 = true;\r\n break;\r\n case 7:\r\n item.emailResultadoEnviado7 = true;\r\n break;\r\n case 8:\r\n item.emailResultadoEnviado8 = true;\r\n break;\r\n case 9:\r\n item.emailResultadoEnviado9 = true;\r\n break;\r\n case 10:\r\n item.emailResultadoEnviado10 = true;\r\n break;\r\n }\r\n\r\n };\r\n\r\n vm.onTextChanged = function(property){\r\n switch (property) {\r\n case \"numero\":\r\n onNumeroChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onNumeroChanged(property)\r\n {\r\n\r\n vm.collection = [...vm.collectionCopy];\r\n\r\n if(vm.criteriosBusqueda.numero && vm.criteriosBusqueda.numero.toString().trim() != '')\r\n {\r\n vm.collection = vm.collection.filter(function(c) {\r\n return c.numero == vm.criteriosBusqueda.numero;\r\n }); \r\n \r\n vm.collection.forEach((c)=>{\r\n c.horaLlegada = c.horaLlegadaRegistrada == false ? moment().toDate() : c.horaLlegada;\r\n c.horaLlegada2 = c.horaLlegadaRegistrada2 == false ? moment().toDate() : c.horaLlegada2;\r\n c.horaLlegada3 = c.horaLlegadaRegistrada3 == false ? moment().toDate() : c.horaLlegada3;\r\n c.horaLlegada4 = c.horaLlegadaRegistrada4 == false ? moment().toDate() : c.horaLlegada4;\r\n c.horaLlegada5 = c.horaLlegadaRegistrada5 == false ? moment().toDate() : c.horaLlegada5;\r\n c.horaLlegada6 = c.horaLlegadaRegistrada6 == false ? moment().toDate() : c.horaLlegada6;\r\n c.horaLlegada7 = c.horaLlegadaRegistrada7 == false ? moment().toDate() : c.horaLlegada7;\r\n c.horaLlegada8 = c.horaLlegadaRegistrada8 == false ? moment().toDate() : c.horaLlegada8;\r\n c.horaLlegada9 = c.horaLlegadaRegistrada9 == false ? moment().toDate() : c.horaLlegada9;\r\n c.horaLlegada10 = c.horaLlegadaRegistrada10 == false ? moment().toDate() : c.horaLlegada10;\r\n\r\n c.segundos = typeof c.horaLlegada.getSeconds === 'function' ? c.horaLlegada.getSeconds() : new Date(c.horaLlegada).getSeconds();\r\n c.segundos2 = typeof c.horaLlegada2.getSeconds === 'function' ? c.horaLlegada2.getSeconds() : new Date(c.horaLlegada2).getSeconds();\r\n c.segundos3 = typeof c.horaLlegada3.getSeconds === 'function' ? c.horaLlegada3.getSeconds() : new Date(c.horaLlegada3).getSeconds();\r\n c.segundos4 = typeof c.horaLlegada4.getSeconds === 'function' ? c.horaLlegada4.getSeconds() : new Date(c.horaLlegada4).getSeconds();\r\n c.segundos5 = typeof c.horaLlegada5.getSeconds === 'function' ? c.horaLlegada5.getSeconds() : new Date(c.horaLlegada5).getSeconds();\r\n c.segundos6 = typeof c.horaLlegada6.getSeconds === 'function' ? c.horaLlegada6.getSeconds() : new Date(c.horaLlegada6).getSeconds();\r\n c.segundos7 = typeof c.horaLlegada7.getSeconds === 'function' ? c.horaLlegada7.getSeconds() : new Date(c.horaLlegada7).getSeconds();\r\n c.segundos8 = typeof c.horaLlegada8.getSeconds === 'function' ? c.horaLlegada8.getSeconds() : new Date(c.horaLlegada8).getSeconds();\r\n c.segundos9 = typeof c.horaLlegada9.getSeconds === 'function' ? c.horaLlegada9.getSeconds() : new Date(c.horaLlegada9).getSeconds();\r\n c.segundos10 = typeof c.horaLlegada10.getSeconds === 'function' ? c.horaLlegada10.getSeconds() : new Date(c.horaLlegada10).getSeconds();\r\n });\r\n }\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n \r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.criteriosBusqueda.dia = 0;\r\n\r\n vm.categorias = [];\r\n vm.dias = [];\r\n\r\n if(result)\r\n {\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n getDias();\r\n }\r\n };\r\n\r\n function getDias()\r\n {\r\n const evento = vm.eventos.find((e)=>{return e.id == vm.criteriosBusqueda.eventoId;});\r\n\r\n if(evento)\r\n {\r\n for (let i = 1; i <= evento.dias; i++) {\r\n \r\n vm.dias.push({id: i, descripcion: `Dia ${i}`})\r\n }\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.Numeros', Numeros);\r\n\r\n Numeros.$inject = ['$scope','$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Numeros($scope, $animationsSrv, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n //const ESTADO_CONFIRMADO = 2;\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n var permisosNumeros = UserInfoService.getPermisosAsignarNumeros();\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosInscripciones.guardar === true,\r\n puedeModificar: permisosInscripciones.modificar === true,\r\n puedeEliminar: permisosInscripciones.eliminar === true,\r\n puedeVerBusqueda: permisosNumeros.ver === true,\r\n ordenarPor(){\r\n return 'nombre';\r\n },\r\n };\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: 0,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.displayLimits = [\r\n {\r\n id: 10,\r\n descripcion: '10 Registros'\r\n },\r\n {\r\n id: 20,\r\n descripcion: '20 Registros'\r\n },\r\n {\r\n id: 50,\r\n descripcion: '50 Registros'\r\n },\r\n {\r\n id: undefined,\r\n descripcion: 'Todos'\r\n },\r\n ];\r\n\r\n vm.displayLimit = vm.displayLimits[0].id;\r\n\r\n vm.collection = [];\r\n vm.collectionCopy = [];\r\n\r\n vm.eventos = [];\r\n vm.categorias = [];\r\n\r\n vm.title = 'Numeros';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/Inscripciones/All';\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: 0,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n //getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n function getAll(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n\r\n ApiBaseService.remoteController = getRemoteController();\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellidos2\r\n ];\r\n \r\n var promise = ApiBaseService.getAll(criterios);\r\n \r\n promise\r\n .then(function(collection){\r\n \r\n collection.forEach((element)=>{\r\n element.fullName = `${element.nombre} ${element.apellidos} ${element.apellido2}`;\r\n });\r\n \r\n vm.collection = collection;\r\n vm.collectionCopy = [...vm.collection];\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n vm.save = function(item)\r\n {\r\n vm.update(item);\r\n };\r\n\r\n vm.update = function(data){\r\n ApiBaseService.remoteController = 'api/Inscripciones/AsignarNumero';\r\n var promise = ApiBaseService.update(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collectionCopy.forEach(function(element) {\r\n if(element.id === data.id)\r\n {\r\n element.numero = response.data.object.numero; \r\n element.numeroRegistrado = response.data.object.numeroRegistrado; \r\n }\r\n });\r\n data.numeroRegistrado = response.data.object.numeroRegistrado;\r\n logger.success('Registro modificado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n vm.onTextChanged = function(property){\r\n switch (property) {\r\n case \"nombre\":\r\n onNombreChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onNombreChanged(property)\r\n {\r\n\r\n vm.collection = [...vm.collectionCopy];\r\n\r\n if(vm.criteriosBusqueda.nombre && vm.criteriosBusqueda.nombre.trim() != '')\r\n {\r\n vm.collection = vm.collection.filter(function(c) {\r\n return c.fullName.toLowerCase().includes(vm.criteriosBusqueda.nombre.toLowerCase().trim());\r\n }); \r\n }\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n\r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.categorias = [];\r\n\r\n if(result)\r\n {\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.Atletas', Atletas);\r\n\r\n Atletas.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Atletas($scope, $animationsSrv, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n ordenarPor(){\r\n return \"nombreCompleto\";\r\n }\r\n };\r\n\r\n vm.displayLimits = [\r\n {\r\n id: 10,\r\n descripcion: '10 Registros'\r\n },\r\n {\r\n id: 20,\r\n descripcion: '20 Registros'\r\n },\r\n {\r\n id: 50,\r\n descripcion: '50 Registros'\r\n },\r\n {\r\n id: undefined,\r\n descripcion: 'Todos'\r\n },\r\n ];\r\n\r\n vm.filterOptions = {\r\n nombre: '',\r\n cedula: ''\r\n };\r\n\r\n vm.displayLimit = vm.displayLimits[0].id;\r\n\r\n vm.collection = [];\r\n vm.originalCollection = [];\r\n\r\n vm.title = 'Atletas';\r\n\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/atletas';\r\n };\r\n\r\n getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n\r\n ApiBaseService.remoteController = getRemoteController();\r\n \r\n var promise = ApiBaseService.getAll();\r\n \r\n promise\r\n .then(function(collection){\r\n vm.originalCollection = collection;\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.onTextChanged = function(property){\r\n switch (property) {\r\n case \"nombre\":\r\n onNombreChanged(property);\r\n break;\r\n case \"cedula\":\r\n onCedulaChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onNombreChanged(property)\r\n {\r\n const validNombre = vm.filterOptions.nombre && vm.filterOptions.nombre.toString().trim() != '';\r\n \r\n if(validNombre)\r\n {\r\n const validCedula = vm.filterOptions.cedula && vm.filterOptions.cedula.toString().trim() != '';\r\n \r\n if(validCedula)\r\n {\r\n vm.collection = vm.originalCollection.filter(function(c) {\r\n return c.nombreCompleto.toLowerCase().includes(vm.filterOptions.nombre.toLowerCase()) &&\r\n c.cedula.includes(vm.filterOptions.cedula);\r\n }); \r\n }\r\n else{\r\n vm.collection = vm.originalCollection.filter(function(c) {\r\n return c.nombreCompleto.toLowerCase().includes(vm.filterOptions.nombre.toLowerCase());\r\n }); \r\n }\r\n\r\n }\r\n };\r\n\r\n function onCedulaChanged(property)\r\n { \r\n const validCedula = vm.filterOptions.cedula && vm.filterOptions.cedula.toString().trim() != '';\r\n \r\n if(validCedula)\r\n {\r\n const validNombre = vm.filterOptions.nombre && vm.filterOptions.nombre.toString().trim() != '';\r\n \r\n if(validNombre)\r\n {\r\n vm.collection = vm.originalCollection.filter(function(c) {\r\n return c.nombreCompleto.toLowerCase().includes(vm.filterOptions.nombre.toLowerCase()) &&\r\n c.cedula.includes(vm.filterOptions.cedula);\r\n }); \r\n }\r\n else{\r\n vm.collection = vm.originalCollection.filter(function(c) {\r\n return c.cedula.includes(vm.filterOptions.nombre);\r\n }); \r\n }\r\n\r\n }\r\n };\r\n\r\n vm.select = function(atleta){\r\n UserInfoService.setAtleta(atleta);\r\n $location.path('/editar-inscripcion');\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment', 'pagosOnlineEnable'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment, pagosOnlineEnable) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n const apiInscripciones = 'api/Inscripciones';\r\n\r\n const ESTADO_PENDIENTE = 1;\r\n const ESTADO_CONFIRMADO = 2;\r\n\r\n let vm = this;\r\n\r\n vm.cuponValidationFired = false;\r\n\r\n vm.data = {\r\n eventoId: 0,\r\n estado: 0,\r\n tallaId: 0,\r\n estadoVacunacionId: 0,\r\n lateralidad: 0,\r\n sexo: 0,\r\n cuponCodigo: '',\r\n precioDescuento: 0,\r\n categoriaId: 0,\r\n aceptaDescargo: 0,\r\n paqueteId: 0,\r\n paqueteIncluye: ''\r\n };\r\n\r\n vm.title = 'Inscripciones';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n vm.eventoId = $routeParams.eventoId ? $routeParams.eventoId : 0;\r\n\r\n\r\n vm.estados = [];\r\n vm.eventos = [];\r\n vm.tallas = [];\r\n vm.estadosVacunacion = [];\r\n vm.categorias = [];\r\n vm.paquetes = [];\r\n\r\n vm.uiData = {\r\n fechaNacimientoOpened: false,\r\n puedeCambiarEstado: false,\r\n descripcionGuardar: UserInfoService.esOrganizador() ? 'Inscribir' : 'Inscribirse',\r\n esOrganizador: UserInfoService.esOrganizador(),\r\n openFechaNacimiento(){\r\n this.fechaNacimientoOpened = !this.fechaNacimientoOpened;\r\n }\r\n };\r\n\r\n var promiseEstados = getComboData(vm.estados, 'api/InscripcionEstados', null, 'Error al cargar los estados');\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n var promiseTallas = getComboData(vm.tallas, 'api/Tallas', null, 'Error al cargar las tallas');\r\n var promiseEstadosVacunacion = getComboData(vm.estadosVacunacion, 'api/EstadosVacunacion', null, 'Error al cargar los estados de vacunacion');\r\n //var promiseCategorias = getComboData(vm.categorias, 'api/Categorias/All', null, 'Error al cargar las Categorias');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n async function getNombreByCedula(){\r\n var cedula = vm.data.cedula;\r\n var data = await ApiBaseService.getNombreByCedula(cedula)\r\n \r\n if(data !== null){\r\n var persona = data.results[0];\r\n\r\n vm.data.nombre = persona.firstname;\r\n vm.data.apellidos = persona.lastname1;\r\n vm.data.apellido2 = persona.lastname2;\r\n\r\n $scope.$apply();\r\n }\r\n };\r\n\r\n async function getNombreBeneficiarioByCedula(){\r\n var cedula = vm.data.cedulaBeneficiario;\r\n var data = await ApiBaseService.getNombreByCedula(cedula)\r\n \r\n if(data !== null){\r\n var persona = data.results[0];\r\n\r\n vm.data.nombreBeneficiario = persona.firstname;\r\n vm.data.beneficiarioApellido1 = persona.lastname1;\r\n vm.data.beneficiarioApellido2 = persona.lastname2;\r\n\r\n $scope.$apply();\r\n }\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n $q.all([promiseEstados, promiseEventos, promiseTallas, promiseEstadosVacunacion])\r\n .then(function(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiInscripciones;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n data.fechaNacimiento = moment(data.fechaNacimiento).toDate();\r\n \r\n if(data.paqueteId == 0)\r\n {\r\n data.precio = getPrecioEvento(data.eventoId);\r\n }\r\n else {\r\n data.precio = getPrecioEventoConPaquete(data.eventoId, data.paqueteId);\r\n }\r\n \r\n data.categoriaId = data.categoriaId == null ? 0 : data.categoriaId;\r\n\r\n if(data.cuponId != null)\r\n {\r\n data.cuponCodigo = data.cupon.codigo;\r\n\r\n if(data.paqueteId == 0)\r\n {\r\n data.precioDescuento = getPrecioEventoConCupon(data.eventoId, data.cupon);\r\n }\r\n }\r\n\r\n var promiseCategorias = getComboData(vm.categorias, 'api/EventosCategorias', [data.eventoId], 'Error al cargar las Categorias')\r\n .then(function(){\r\n\r\n const categoria = vm.categorias.find((e)=>{return e.categoriaId == data.categoriaId;});\r\n\r\n if(categoria == null)\r\n {\r\n data.categoriaId = 0;\r\n }\r\n });\r\n\r\n var promisePaquetes = getComboData(vm.paquetes, 'api/Paquetes/All-Activos-Evento', [data.eventoId], 'Error al cargar los paquetes')\r\n .then(function(){\r\n\r\n const paquete = vm.paquetes.find((e)=>{return e.id == data.paqueteId;});\r\n\r\n if(paquete == null)\r\n {\r\n data.paqueteId = 0;\r\n }\r\n else{\r\n data.precio = getPrecioEventoConPaquete(data.eventoId, data.paqueteId);\r\n data.paqueteIncluye = getPaqueteIncluye(data.paqueteId);\r\n\r\n if(data.cuponId != null)\r\n {\r\n data.precioDescuento = getPrecioEventoConCuponYPaquete(data.eventoId, data.paqueteId, data.cupon);\r\n }\r\n }\r\n });\r\n\r\n $q.all([promiseCategorias, promisePaquetes])\r\n .then(function(){\r\n vm.data = data;\r\n });\r\n \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n else\r\n {\r\n if(!vm.uiData.esOrganizador)\r\n {\r\n const catPromise = getComboData(vm.categorias, 'api/EventosCategorias', [vm.eventoId], 'Error al cargar las Categorias');\r\n const paqPromise = getComboData(vm.paquetes, 'api/Paquetes/All-Activos-Evento', [vm.eventoId], 'Error al cargar los Paquetes');\r\n \r\n $q.all([catPromise, paqPromise])\r\n .then(function(){\r\n cargarDatosUsuario();\r\n vm.data.eventoId = vm.eventoId;\r\n\r\n if(vm.data.paqueteId == 0)\r\n {\r\n vm.data.precio = getPrecioEvento(vm.eventoId);\r\n }\r\n else {\r\n vm.data.precio = getPrecioEventoConPaquete(vm.eventoId, vm.paqueteId);\r\n }\r\n \r\n });\r\n\r\n }\r\n else{\r\n applyAtletaSeleccionado();\r\n }\r\n vm.data.estado = ESTADO_PENDIENTE;\r\n }\r\n });\r\n };\r\n\r\n vm.goConfirmarPago = function(inscripcionId){\r\n \r\n var path = '';\r\n\r\n if(pagosOnlineEnable) {\r\n path = '/editar-pago-v2/' + inscripcionId;\r\n }\r\n else {\r\n path = '/editar-pago/' + inscripcionId;\r\n }\r\n\r\n $location.path(path); \r\n };\r\n\r\n vm.goEventos = function(){\r\n \r\n var path = '/eventos';\r\n\r\n $location.path(path); \r\n };\r\n\r\n function cargarDatosUsuario()\r\n {\r\n const usuario = UserInfoService.getFullUser();\r\n\r\n vm.data.nombre = usuario.nombre;\r\n vm.data.apellidos = usuario.apellidos;\r\n vm.data.apellido2 = usuario.apellido2;\r\n vm.data.cedula = usuario.cedula;\r\n vm.data.cedulaBeneficiario = usuario.cedulaBeneficiario;\r\n vm.data.parentezcoBeneficiario = usuario.parentezcoBeneficiario;\r\n vm.data.nombreBeneficiario = usuario.nombreBeneficiario;\r\n vm.data.beneficiarioApellido1 = usuario.beneficiarioApellido1;\r\n vm.data.beneficiarioApellido2 = usuario.beneficiarioApellido2;\r\n vm.data.fechaNacimiento = moment(usuario.fechaNacimiento).toDate();\r\n vm.data.tallaId = usuario.tallaId;\r\n vm.data.estadoVacunacionId = usuario.estadoVacunacionId;\r\n vm.data.lateralidad = usuario.lateralidad;\r\n vm.data.sexo = usuario.sexo;\r\n vm.data.email = usuario.email;\r\n vm.data.telefono = usuario.telefono;\r\n vm.data.contactoEmergencia = usuario.contactoEmergencia;\r\n vm.data.telefonoContacto = usuario.telefonoContacto;\r\n vm.data.nombreEquipo = usuario.equipo;\r\n\r\n if(usuario.categoriaId != null)\r\n {\r\n const categoria = vm.categorias.find((e)=>{return e.categoriaId == usuario.categoriaId;});\r\n\r\n if(categoria == null)\r\n {\r\n usuario.categoriaId = 0;\r\n }\r\n\r\n vm.data.categoriaId = usuario.categoriaId;\r\n }\r\n\r\n };\r\n\r\n function getMonedaSymbol(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n function getPrecioEvento(eventoId)\r\n {\r\n if(vm.data.paqueteId == 0)\r\n {\r\n const evento = getEvento(eventoId);\r\n\r\n let monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n\r\n return `${monedaSymbol} ${evento.precio}`; \r\n }\r\n\r\n return null;\r\n };\r\n\r\n function getPrecioEventoConPaquete(eventoId, paqueteId)\r\n {\r\n if(eventoId != 0 && paqueteId != 0)\r\n {\r\n const paquete = vm.paquetes.find((e)=>{return e.id == paqueteId;});\r\n const evento = getEvento(eventoId);\r\n\r\n if(paquete != null && evento != null)\r\n {\r\n const monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n return `${monedaSymbol} ${paquete.monto}`;\r\n } \r\n }\r\n return null;\r\n };\r\n\r\n function getPrecioEventoConCupon(eventoId, cupon)\r\n {\r\n if(vm.data.paqueteId == 0)\r\n {\r\n const evento = getEvento(eventoId);\r\n\r\n let monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n \r\n return `${monedaSymbol} ${evento.precio - cupon.monto}`;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n function getPrecioEventoConCuponYPaquete(eventoId, paqueteId, cupon)\r\n {\r\n if(eventoId != 0 && paqueteId != 0)\r\n {\r\n const paquete = vm.paquetes.find((e)=>{return e.id == paqueteId;});\r\n const evento = getEvento(eventoId);\r\n\r\n let monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n \r\n const montoDescuento = paquete.monto - cupon.monto;\r\n return `${monedaSymbol} ${montoDescuento >= 0 ? montoDescuento : 0}`;\r\n }\r\n };\r\n\r\n function getPaqueteIncluye(paqueteId)\r\n {\r\n const paquete = vm.paquetes.find((e)=>{return e.id == paqueteId;});\r\n return paquete ? paquete.incluye : '';\r\n }\r\n\r\n function getEvento(eventoId){\r\n return vm.eventos.find((evento) => {\r\n return evento.id == eventoId;\r\n });\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'eventoId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'paqueteId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'estado' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'tallaId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'estadoVacunacionId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'sexo' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'lateralidad' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'categoriaId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'aceptaDescargo' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiInscripciones;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Inscripción creada con éxito.');\r\n\r\n const inscripcionId = response.data.object.id;\r\n const estadoInscripcion = response.data.object.estado;\r\n\r\n if(estadoInscripcion === ESTADO_CONFIRMADO && !vm.uiData.esOrganizador)\r\n {\r\n vm.goEventos();\r\n }\r\n else{\r\n vm.goConfirmarPago(inscripcionId);\r\n }\r\n \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiInscripciones;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/inscripciones');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n eventoId: vm.eventoId,\r\n estado: 0,\r\n tallaId: 0,\r\n estadoVacunacionId: 0,\r\n lateralidad: 0,\r\n sexo: 0,\r\n cuponCodigo: '',\r\n precioDescuento: 0,\r\n categoriaId: 0,\r\n aceptaDescargo: 0\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n case \"estado\":\r\n onEstadoChanged(property);\r\n break;\r\n case \"tallaId\":\r\n onTallaIdChanged(property);\r\n break;\r\n case \"estadoVacunacionId\":\r\n onEstadoVacunacionIdChanged(property);\r\n break;\r\n case \"sexo\":\r\n onSexoChanged(property);\r\n break;\r\n case \"lateralidad\":\r\n onLateralidadChanged(property);\r\n break;\r\n case \"categoriaId\":\r\n onCategoriaIdChanged(property);\r\n break;\r\n case \"paqueteId\":\r\n onPaqueteIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEstadoChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n var result = validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n vm.categorias = [];\r\n if(result)\r\n {\r\n vm.data.precio = getPrecioEvento(vm.data.eventoId);\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.data.eventoId], 'Error al cargar las Categorias');\r\n getComboData(vm.paquetes, 'api/Paquetes/All-Activos-Evento', [vm.data.eventoId], 'Error al cargar los Paquetes');\r\n }\r\n else{\r\n vm.data.precio = '0';\r\n }\r\n };\r\n\r\n function onTallaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onSexoChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onEstadoVacunacionIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onLateralidadChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onCategoriaIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onPaqueteIdChanged(property)\r\n {\r\n var result = validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n if(result)\r\n {\r\n vm.data.precio = getPrecioEventoConPaquete(vm.data.eventoId, vm.data.paqueteId);\r\n \r\n vm.data.paqueteIncluye = getPaqueteIncluye(vm.data.paqueteId);\r\n\r\n if(vm.data.cuponId != null)\r\n {\r\n vm.data.precioDescuento = getPrecioEventoConCuponYPaquete(vm.data.eventoId, vm.data.paqueteId, vm.data.cupon);\r\n }\r\n }\r\n };\r\n\r\n vm.onCedulaLostFocus = function()\r\n {\r\n var cedula = vm.data.cedula;\r\n if(cedula.length >= 9) {\r\n getNombreByCedula();\r\n }\r\n };\r\n\r\n vm.onCedulaBeneficiarioLostFocus = function()\r\n {\r\n var cedula = vm.data.cedulaBeneficiario;\r\n if(cedula.length >= 9) {\r\n getNombreBeneficiarioByCedula();\r\n }\r\n };\r\n\r\n vm.onTextChanged = function(property){\r\n switch (property) {\r\n case \"cuponCodigo\":\r\n onCuponCodigoChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onCuponCodigoChanged(property)\r\n {\r\n if(vm.data.cuponCodigo != '' && !vm.cuponValidationFired)\r\n {\r\n vm.cuponValidationFired = !vm.cuponValidationFired;\r\n setTimeout(function(){ cuponValidation(); }, 3000);\r\n \r\n }\r\n };\r\n\r\n function cuponValidation()\r\n {\r\n if(vm.data.cuponCodigo != '')\r\n {\r\n vm.cuponValidationFired = !vm.cuponValidationFired;\r\n vm.data.cuponId = null;\r\n getCuponByCodigo(); \r\n }\r\n }\r\n\r\n function getCuponByCodigo(){\r\n ApiBaseService.remoteController = \"api/Cupones/Codigo\";\r\n var promise = ApiBaseService.getAll([vm.data.cuponCodigo, vm.data.eventoId])\r\n .then(function(data){\r\n vm.data.cuponId = data.id;\r\n logger.success(\"Cupon Asignado!\");\r\n if(vm.data.paqueteId == 0)\r\n {\r\n vm.data.precioDescuento = getPrecioEventoConCupon(data.eventoId, data);\r\n }\r\n else {\r\n vm.data.precioDescuento = getPrecioEventoConCuponYPaquete(data.eventoId, vm.data.paqueteId, data);\r\n }\r\n vm.data.cupon = data;\r\n })\r\n .catch(function(error){\r\n logger.error(error.data.Message);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.aceptarDescargo = function()\r\n {\r\n vm.data.aceptaDescargo = true;\r\n validateSelectProperty($scope.dataForm, vm.data, 'aceptaDescargo' );\r\n };\r\n\r\n vm.goToSeleccionarAtleta = function(){\r\n \r\n var path = '/seleccionar-atleta/';\r\n\r\n $location.path(path);\r\n \r\n };\r\n\r\n function applyAtletaSeleccionado()\r\n {\r\n if(vm.id == 0)\r\n {\r\n var atleta = UserInfoService.getAtleta();\r\n\r\n if(atleta != null)\r\n {\r\n vm.data.nombre = atleta.nombre;\r\n vm.data.apellidos = atleta.apellidos;\r\n vm.data.apellido2 = atleta.apellido2;\r\n vm.data.cedula = atleta.cedula;\r\n vm.data.cedulaBeneficiario = atleta.cedulaBeneficiario;\r\n vm.data.parentezcoBeneficiario = atleta.parentezcoBeneficiario;\r\n vm.data.nombreBeneficiario = atleta.nombreBeneficiario;\r\n vm.data.beneficiarioApellido1 = atleta.beneficiarioApellido1;\r\n vm.data.beneficiarioApellido2 = atleta.beneficiarioApellido2;\r\n vm.data.fechaNacimiento = moment(atleta.fechaNacimiento).toDate();\r\n vm.data.tallaId = atleta.tallaId;\r\n vm.data.estadoVacunacionId = atleta.estadoVacunacionId;\r\n vm.data.lateralidad = atleta.lateralidad;\r\n vm.data.sexo = atleta.sexo;\r\n vm.data.email = atleta.email;\r\n vm.data.telefono = atleta.telefono;\r\n vm.data.contactoEmergencia = atleta.contactoEmergencia;\r\n vm.data.telefonoContacto = atleta.telefonoContacto;\r\n vm.data.nombreEquipo = atleta.equipo;\r\n\r\n //limpiar datos del atleta\r\n UserInfoService.setAtleta(null);\r\n }\r\n }\r\n }\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.EditPago', EditPago);\r\n\r\n EditPago.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function EditPago($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n const apiInscripciones = 'api/Inscripciones';\r\n\r\n const ESTADO_PENDIENTE = 1;\r\n\r\n const TIPO_PAGO_EFECTIVO = 3;\r\n\r\n const BANCO_NO_APLICA = 20;\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n eventoId: 0,\r\n bancoId: 0,\r\n metodoPagoId: 0,\r\n fechaDeposito: moment().toDate(),\r\n precioDescuento: 0\r\n };\r\n\r\n vm.title = 'Datos de Pago';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.bancos = [];\r\n vm.eventos = [];\r\n vm.tiposDeposito = [];\r\n vm.paquetes = [];\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n\r\n vm.uiData = {\r\n fechaDepositoOpened: false,\r\n puedeCambiarEstado: permisosInscripciones.modificar === true,\r\n descripcionGuardar: 'Confirmar',\r\n esOrganizador: UserInfoService.esOrganizador(),\r\n openFechaDeposito(){\r\n this.fechaDepositoOpened = !this.fechaDepositoOpened;\r\n }\r\n };\r\n\r\n var promiseBancos = getComboData(vm.bancos, 'api/Bancos', null, 'Error al cargar los bancos');\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n var promiseTiposDeposito = getComboData(vm.tiposDeposito, 'api/TiposDeposito', null, 'Error al cargar los Tipos de Deposito');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n $q.all([promiseBancos, promiseEventos, promiseTiposDeposito])\r\n .then(function(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiInscripciones;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n data.precio = getPrecioEvento(data.eventoId);\r\n data.bancoId = data.bancoId == null ? 0 : data.bancoId;\r\n data.metodoPagoId = data.metodoPagoId == null ? 0 : data.metodoPagoId;\r\n data.fechaDeposito = data.fechaDeposito == null ? moment().toDate() : moment(data.fechaDeposito).toDate();\r\n data.nombreDepositante = `${data.nombre} ${data.apellidos} ${data.apellido2}`;\r\n \r\n if(data.paqueteId == 0)\r\n {\r\n data.montoDeposito = data.montoDeposito == null ? getEvento(data.eventoId).precio : data.montoDeposito;\r\n }\r\n \r\n vm.data = data;\r\n\r\n var promisePaquetes = getComboData(vm.paquetes, 'api/Paquetes/All-Activos-Evento', [data.eventoId], 'Error al cargar los paquetes');\r\n promisePaquetes.then(function(){\r\n if(data.paqueteId != 0)\r\n {\r\n vm.data.paqueteId = data.paqueteId;\r\n const precioObj = getPrecioEventoConPaquete(data.eventoId, data.paqueteId, data.cupon);\r\n vm.data.precio = precioObj.precioText;\r\n vm.data.precioDescuento = precioObj.precioConDescuentoText;\r\n vm.data.montoDeposito = data.montoDeposito == null ? precioObj.precio : data.montoDeposito; \r\n }\r\n });\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n });\r\n };\r\n\r\n function getMonedaSymbol(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n function getPrecioEvento(eventoId)\r\n {\r\n const evento = getEvento(eventoId);\r\n\r\n let monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n\r\n return `${monedaSymbol} ${evento.precio}`;\r\n };\r\n\r\n function getPrecioEventoConPaquete(eventoId, paqueteId, cupon)\r\n {\r\n if(eventoId != 0 && paqueteId != 0)\r\n {\r\n const paquete = vm.paquetes.find((e)=>{return e.id == paqueteId;});\r\n const evento = getEvento(eventoId);\r\n\r\n let montoCupon = 0;\r\n let montoConDescuento = 0;\r\n\r\n if(cupon != null)\r\n {\r\n montoCupon = cupon.monto;\r\n }\r\n\r\n if(paquete != null && evento != null)\r\n {\r\n const monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n montoConDescuento = paquete.monto - montoCupon;\r\n\r\n return {\r\n precioText: `${monedaSymbol} ${paquete.monto}`,\r\n precioConDescuentoText: `${monedaSymbol} ${montoConDescuento >= 0 ? montoConDescuento : 0}`,\r\n precio: montoConDescuento >= 0 ? montoConDescuento : 0\r\n };\r\n } \r\n }\r\n return null;\r\n };\r\n\r\n function getEvento(eventoId){\r\n return vm.eventos.find((evento) => {\r\n return evento.id == eventoId;\r\n });\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'eventoId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'bancoId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'metodoPagoId' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(vm.data.id && $scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiInscripciones + '/Pago';\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Condirmación de Pago realizada.');\r\n\r\n if(vm.uiData.esOrganizador)\r\n {\r\n $location.path('/editar-inscripcion');\r\n }\r\n else{\r\n $location.path('/inscripciones');\r\n }\r\n \r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n case \"bancoId\":\r\n onBancoIdChanged(property);\r\n break;\r\n case \"metodoPagoId\":\r\n onTipoDepositoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n var result = validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n if(result)\r\n {\r\n vm.data.precio = getPrecioEvento(vm.data.eventoId);\r\n }\r\n else{\r\n vm.data.precio = '0';\r\n }\r\n };\r\n\r\n function onBancoIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onTipoDepositoIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n if(vm.data.metodoPagoId === TIPO_PAGO_EFECTIVO)\r\n {\r\n vm.data.bancoId = BANCO_NO_APLICA;\r\n vm.data.referenciaDeposito = 'NO APLICA';\r\n }\r\n else\r\n {\r\n vm.data.bancoId = 0;\r\n vm.data.referenciaDeposito = '';\r\n }\r\n };\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.inscripciones')\r\n .controller('inscripciones.EditPagoV2', EditPagoV2);\r\n\r\n EditPagoV2.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function EditPagoV2($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n const apiInscripciones = 'api/Inscripciones';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n inscripcionId: 0,\r\n eventoId: 0,\r\n depositoTipoId: 0,\r\n depositoIdentificacion: '',\r\n cuentaIban: '',\r\n sinpeTipoId: 0,\r\n sinpeIdentificacion: '',\r\n sinpeTelefono: '',\r\n nombreTarjeta: '',\r\n numeroTarjeta: '',\r\n cvv: '',\r\n mesExpiracion: 1,\r\n annoExpiracion: moment().year(),\r\n metodoPagoId: 0,\r\n precioDescuento: 0\r\n };\r\n\r\n vm.title = 'Datos de Pago';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.bancos = [];\r\n vm.eventos = [];\r\n vm.tiposDeposito = [];\r\n vm.paquetes = [];\r\n vm.tipoCambio = null;\r\n\r\n var permisosInscripciones = UserInfoService.getPermisosInscripciones();\r\n\r\n vm.uiData = {\r\n fechaDepositoOpened: false,\r\n puedeCambiarEstado: permisosInscripciones.modificar === true,\r\n descripcionRecibidoConfirmacion: 'Si he recibido la confirmacion',\r\n descripcionConfirmarPago: 'Confirmar Pago',\r\n descripcionContinuar: 'Continuar',\r\n esOrganizador: UserInfoService.esOrganizador(),\r\n depositoIdentificacionMsg: 'formato: 0#-####-#### (Ej: 01-1393-1919)',\r\n sinpeIdentificacionMsg: 'formato: 0#-####-#### (Ej: 01-1393-1919)',\r\n validationErrors: [],\r\n estaCreandoMetodoPago: true,\r\n estaConfirmandoPago: false,\r\n estaConfirmandoPagoRealizado: false,\r\n openFechaDeposito(){\r\n this.fechaDepositoOpened = !this.fechaDepositoOpened;\r\n }\r\n };\r\n\r\n var promiseBancos = getComboData(vm.bancos, 'api/Bancos', null, 'Error al cargar los bancos');\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n var promiseTiposDeposito = getComboData(vm.tiposDeposito, 'api/TiposDeposito/online-metodos', null, 'Error al cargar los Tipos de Deposito');\r\n var promiseTipoCambio = getTipoCambio('api/indicadores/tipo-cambio-venta', null, 'Error al obtener el indicador');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getTipoCambio(apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n console.log(`tipo cambio: ${data.valor}`);\r\n vm.tipoCambio = data.valor;\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n $q.all([promiseBancos, promiseEventos, promiseTiposDeposito, promiseTipoCambio])\r\n .then(function(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiInscripciones;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n data.precio = getPrecioEvento(data.eventoId);\r\n data.bancoId = data.bancoId == null ? 0 : data.bancoId;\r\n data.metodoPagoId = data.metodoPagoId == null ? 0 : data.metodoPagoId;\r\n data.fechaDeposito = data.fechaDeposito == null ? moment().toDate() : moment(data.fechaDeposito).toDate();\r\n data.nombreDepositante = `${data.nombre} ${data.apellidos} ${data.apellido2}`;\r\n \r\n if(data.paqueteId == 0)\r\n {\r\n data.montoDeposito = data.montoDeposito == null ? getEvento(data.eventoId).precio : data.montoDeposito;\r\n }\r\n \r\n vm.data = data;\r\n vm.data.inscripcionId = data.id;\r\n vm.data.depositoTipoId = 0;\r\n vm.data.depositoIdentificacion = '';\r\n vm.data.cuentaIban = '';\r\n vm.data.sinpeTipoId = 0;\r\n vm.data.sinpeIdentificacion = '';\r\n vm.data.sinpeTelefono = '';\r\n vm.data.nombreTarjeta = '';\r\n vm.data.numeroTarjeta = '';\r\n vm.data.cvv = '';\r\n vm.data.mesExpiracion = 1;\r\n vm.data.annoExpiracion = moment().year();\r\n\r\n var promisePaquetes = getComboData(vm.paquetes, 'api/Paquetes/All-Activos-Evento', [data.eventoId], 'Error al cargar los paquetes');\r\n promisePaquetes.then(function(){\r\n if(data.paqueteId != 0)\r\n {\r\n vm.data.paqueteId = data.paqueteId;\r\n const precioObj = getPrecioEventoConPaquete(data.eventoId, data.paqueteId, data.cupon);\r\n vm.data.precio = precioObj.precioText;\r\n vm.data.precioDescuento = precioObj.precioConDescuentoText;\r\n vm.data.montoDeposito = data.montoDeposito == null ? precioObj.precio : data.montoDeposito; \r\n vm.data.precioSinpe = precioObj.precioSinpe;\r\n vm.data.precioSinpeConDescuento = precioObj.precioSinpeConDescuento; \r\n }\r\n });\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n });\r\n };\r\n\r\n function getMonedaSymbol(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n function getPrecioEvento(eventoId)\r\n {\r\n const evento = getEvento(eventoId);\r\n\r\n let monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n\r\n return `${monedaSymbol} ${evento.precio}`;\r\n };\r\n\r\n function getPrecioEventoConPaquete(eventoId, paqueteId, cupon)\r\n {\r\n if(eventoId != 0 && paqueteId != 0)\r\n {\r\n const paquete = vm.paquetes.find((e)=>{return e.id == paqueteId;});\r\n const evento = getEvento(eventoId);\r\n\r\n let montoCupon = 0;\r\n let montoConDescuento = 0;\r\n\r\n if(cupon != null)\r\n {\r\n montoCupon = cupon.monto;\r\n }\r\n\r\n if(paquete != null && evento != null)\r\n {\r\n const monedaSymbol = getMonedaSymbol(evento.monedaId);\r\n montoConDescuento = paquete.monto - montoCupon;\r\n\r\n const tipoCambio = evento.monedaId === MONEDA_COLONES ? 1 :vm.tipoCambio;\r\n\r\n return {\r\n precioText: `${monedaSymbol} ${paquete.monto}`,\r\n precioConDescuentoText: `${monedaSymbol} ${montoConDescuento >= 0 ? montoConDescuento : 0}`,\r\n precio: montoConDescuento >= 0 ? montoConDescuento : 0,\r\n precioSinpe: `₡ ${paquete.monto * tipoCambio}`,\r\n precioSinpeConDescuento: `₡ ${montoConDescuento * tipoCambio}`\r\n };\r\n } \r\n }\r\n return null;\r\n };\r\n\r\n function getEvento(eventoId){\r\n return vm.eventos.find((evento) => {\r\n return evento.id == eventoId;\r\n });\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'eventoId' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'metodoPagoId' );\r\n };\r\n\r\n function setEstadoConfirmandoPago() {\r\n vm.uiData.estaCreandoMetodoPago = false;\r\n vm.uiData.estaConfirmandoPago = true;\r\n };\r\n\r\n function setEstadoConfirmandoPagoRealizado() {\r\n vm.uiData.estaCreandoMetodoPago = false;\r\n vm.uiData.estaConfirmandoPago = false;\r\n vm.uiData.estaConfirmandoPagoRealizado = true;\r\n };\r\n\r\n vm.getPrecioSinpe = function(){\r\n return vm.data.cuponId == null ? vm.data.precioSinpe : vm.data.precioSinpeConDescuento;\r\n };\r\n\r\n vm.saveMetodo = function(){\r\n\r\n vm.uiData.validationErrors.length = 0;\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(vm.data.id && $scope.dataForm.$dirty){\r\n createMetodoPago();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n };\r\n\r\n vm.confirmIntension = function(){\r\n\r\n vm.uiData.validationErrors.length = 0;\r\n\r\n if(vm.data.metodoPagoId === 2) {\r\n\r\n confirmIntensionPagoSinpe();\r\n\r\n } else if(vm.data.metodoPagoId === 5) {\r\n\r\n confirmIntensionPagoTarjeta();\r\n\r\n }\r\n \r\n };\r\n\r\n vm.checkIntension = function(){\r\n\r\n vm.uiData.validationErrors.length = 0;\r\n\r\n checkIntensionPago();\r\n };\r\n\r\n function createMetodoPago(){\r\n ApiBaseService.remoteController = apiInscripciones + '/Pago-Crear-Metodo';\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n //logger.success('presiona confirmar para finalizar el pago.');\r\n createIntensionPago();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n case 400:\r\n vm.uiData.validationErrors = error.data;\r\n logger.error('Hubo un error al ingresar el metodo de pago');\r\n break;\r\n case 422:\r\n vm.uiData.validationErrors = error.data.errorList;\r\n logger.error('Hubo un error al ingresar el metodo de pago');\r\n break;\r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function createIntensionPago(){\r\n ApiBaseService.remoteController = apiInscripciones + '/Pago-v2-crear-intension';\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Confirma el pago para continuar.');\r\n vm.data.intensionProveedorId = response.data.proveedorId;\r\n setEstadoConfirmandoPago();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n case 400:\r\n vm.uiData.validationErrors = error.data;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n case 422:\r\n vm.uiData.validationErrors = error.data.errorList;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function confirmIntensionPagoSinpe(){\r\n ApiBaseService.remoteController = apiInscripciones + '/Pago-v2-confirmar-intension';\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Confirmación de Pago realizada.');\r\n\r\n setEstadoConfirmandoPagoRealizado();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n case 400:\r\n vm.uiData.validationErrors = error.data;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n case 422:\r\n vm.uiData.validationErrors = error.data.errorList;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function confirmIntensionPagoTarjeta(){\r\n ApiBaseService.remoteController = apiInscripciones + '/Pago-v2-confirmar-intension';\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Pago Realizado.');\r\n\r\n if(vm.uiData.esOrganizador)\r\n {\r\n $location.path('/editar-inscripcion');\r\n }\r\n else{\r\n $location.path('/inscripciones');\r\n }\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n case 400:\r\n vm.uiData.validationErrors = error.data;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n case 422:\r\n vm.uiData.validationErrors = error.data.errorList;\r\n logger.error('Hubo un error al crear la intension de pago');\r\n break;\r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function checkIntensionPago(){\r\n logger.success('Pago Realizado.');\r\n\r\n if(vm.uiData.esOrganizador)\r\n {\r\n $location.path('/editar-inscripcion');\r\n }\r\n else{\r\n $location.path('/inscripciones');\r\n }\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n case \"metodoPagoId\":\r\n onTipoDepositoIdChanged(property);\r\n break;\r\n case \"sinpeTipoId\":\r\n onSinpeTipoIdChanged(property);\r\n break;\r\n case \"depositoTipoId\":\r\n onDepositoTipoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n var result = validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n if(result)\r\n {\r\n vm.data.precio = getPrecioEvento(vm.data.eventoId);\r\n }\r\n else{\r\n vm.data.precio = '0';\r\n }\r\n };\r\n\r\n function onSinpeTipoIdChanged(property)\r\n {\r\n switch (vm.data.sinpeTipoId) {\r\n case 0:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 0#-####-#### (Ej: 01-1393-1919)';\r\n break;\r\n case 1:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 1########### (Ej: 1293817461127)';\r\n break; \r\n case 2:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 2-###-###### (Ej: 2-100-000001)';\r\n break; \r\n case 3:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 3-###-###### (Ej: 3-101-212393)';\r\n break; \r\n case 4:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 4-000-###### (Ej: 4-000-042141)';\r\n break; \r\n case 5:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 5########### (Ej: 5123456789011)';\r\n break;\r\n case 9:\r\n vm.uiData.sinpeIdentificacionMsg = 'formato: 1########### (Ej: 1293817461127)';\r\n break; \r\n default:\r\n vm.uiData.sinpeIdentificacionMsg = 'invalido!';\r\n break;\r\n }\r\n };\r\n\r\n function onDepositoTipoIdChanged(property)\r\n {\r\n switch (vm.data.sinpeTipoId) {\r\n case 0:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 0#-####-#### (Ej: 01-1393-1919)';\r\n break;\r\n case 1:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 1########### (Ej: 1293817461127)';\r\n break; \r\n case 2:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 2-###-###### (Ej: 2-100-000001)';\r\n break; \r\n case 3:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 3-###-###### (Ej: 3-101-212393)';\r\n break; \r\n case 4:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 4-000-###### (Ej: 4-000-042141)';\r\n break; \r\n case 5:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 5########### (Ej: 5123456789011)';\r\n break;\r\n case 9:\r\n vm.uiData.depositoIdentificacionMsg = 'formato: 1########### (Ej: 1293817461127)';\r\n break; \r\n default:\r\n vm.uiData.sinpeIdentificacionMsg = 'invalido!';\r\n break;\r\n }\r\n };\r\n\r\n function onTipoDepositoIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.cupones', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.cupones')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/cupones',\r\n config: {\r\n templateUrl: 'app/cupones/list.html',\r\n controller: 'cupones.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/editar-cupon/:id?',\r\n config: {\r\n templateUrl: 'app/cupones/edit.html',\r\n controller: 'cupones.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.cupones')\r\n .controller('cupones.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n const MONEDA_COLONES = 1;\r\n const MONEDA_DOLARES = 2;\r\n\r\n var permisosCupones = UserInfoService.getPermisosCupones();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosCupones.guardar === true,\r\n puedeModificar: permisosCupones.modificar === true,\r\n puedeEliminar: permisosCupones.eliminar === true,\r\n esOrganizador: UserInfoService.esOrganizador()\r\n };\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n };\r\n\r\n vm.collection = [];\r\n vm.eventos = [];\r\n vm.title = 'Cupones';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-cupon/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.goToInscripcion = function(data){\r\n \r\n var path = '/crear-inscripcion/' + data.id;\r\n\r\n $location.path(path);\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.getMonedaSymbol = function(monedaId)\r\n {\r\n switch (monedaId) {\r\n case MONEDA_COLONES:\r\n return '₡';\r\n case MONEDA_DOLARES:\r\n return '$';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n function getRemoteController()\r\n {\r\n if(UserInfoService.esOrganizador())\r\n {\r\n return 'api/Cupones/All';\r\n }\r\n\r\n return 'api/Cupones/Usuario';\r\n }\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n };\r\n };\r\n\r\n getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Cupones';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.cupones')\r\n .controller('cupones.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n const apiCupones = 'api/Cupones';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n estado: 0,\r\n eventoId: 0,\r\n usosMaximo: 1,\r\n numeroUsos: 0,\r\n precio: 0\r\n };\r\n\r\n vm.title = 'Cupones';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.estados = [];\r\n vm.eventos = [];\r\n\r\n vm.uiData = {\r\n estaEditando: vm.id != 0,\r\n fechaCaducidadOpened: false,\r\n openFechaCaducidad(){\r\n this.fechaCaducidadOpened = !this.fechaCaducidadOpened;\r\n }\r\n };\r\n\r\n var promiseEstados = getComboData(vm.estados, 'api/CuponEstados', null, 'Error al cargar los estados');\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n $q.all([promiseEstados, promiseEventos])\r\n .then(function(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiCupones;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n data.fechaCaducidad = moment(data.fechaCaducidad).toDate();\r\n vm.data = data;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n });\r\n };\r\n\r\n function getEvento(eventoId){\r\n return vm.eventos.find((evento) => {\r\n return evento.id == eventoId;\r\n });\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'estado' );\r\n validateSelectProperty($scope.dataForm, vm.data, 'eventoId' );\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiCupones;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n if(response.data.command.success)\r\n {\r\n logger.success('Registro creado con éxito.');\r\n clearData();\r\n }\r\n else{\r\n logger.error(response.data.command.message);\r\n }\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiCupones;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n if(response.data.command.success)\r\n {\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/cupones');\r\n }\r\n else{\r\n logger.error(response.data.command.message);\r\n }\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n estado: 0,\r\n eventoId: 0,\r\n usosMaximo: 1,\r\n numeroUsos: 0,\r\n monto: 0\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"estado\":\r\n onEstadoChanged(property);\r\n break;\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEstadoChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.data, property );\r\n\r\n if(result)\r\n {\r\n const evento = getEvento(vm.data.eventoId);\r\n if(evento)\r\n {\r\n vm.data.monto = evento.precio;\r\n vm.data.fechaCaducidad = moment(evento.fechaInicio).toDate();\r\n }\r\n }\r\n else{\r\n vm.data.monto = 0;\r\n vm.data.fechaCaducidad = null;\r\n }\r\n };\r\n\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.reportes', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reportes')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/reportes-inscripciones',\r\n config: {\r\n templateUrl: 'app/reportes/inscripciones.html',\r\n controller: 'reportes.Inscripciones',\r\n controllerAs: 'vm',\r\n title: 'Inscripciones'\r\n }\r\n },\r\n {\r\n url: '/reportes-inscripciones-socios',\r\n config: {\r\n templateUrl: 'app/reportes/inscripciones-socios.html',\r\n controller: 'reportes.InscripcionesSocios',\r\n controllerAs: 'vm',\r\n title: 'Inscripciones'\r\n }\r\n },\r\n {\r\n url: '/reportes-tiempos',\r\n config: {\r\n templateUrl: 'app/reportes/resultados-tiempos.html',\r\n controller: 'reportes.ResultadosTiempos',\r\n controllerAs: 'vm',\r\n title: 'ResultadosTiempos'\r\n }\r\n },\r\n {\r\n url: '/reportes-premiacion',\r\n config: {\r\n templateUrl: 'app/reportes/resultados-premiacion.html',\r\n controller: 'reportes.ResultadosPremiacion',\r\n controllerAs: 'vm',\r\n title: 'ResultadosPremiacion'\r\n }\r\n } \r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.reportes')\r\n .controller('reportes.Inscripciones', Inscripciones);\r\n\r\n Inscripciones.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger'];\r\n\r\n function Inscripciones($scope, $animationsSrv, ApiBaseService, logger) {\r\n \r\n $animationsSrv.scrollToTop();\r\n ApiBaseService.remoteController = 'api/Inscripciones'\r\n\r\n const GRUPO_INSCRIPTORES = 3;\r\n const ESTADO_CONFIRMADO = 2;\r\n\r\n var vm = this;\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.categorias = [];\r\n vm.eventos = [];\r\n vm.inscriptores = [];\r\n\r\n vm.collection = [];\r\n vm.title = 'Reporte de Inscripciones';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n getComboData(vm.inscriptores, 'api/Usuarios/ByGrupo', [GRUPO_INSCRIPTORES], 'Error al cargar los inscriptores');\r\n\r\n function getRemoteController(page)\r\n {\r\n return `api/Inscripciones/${page}`;\r\n };\r\n\r\n function getReportRemoteController(page)\r\n {\r\n return `api/reportes-inscripciones/${page}`;\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController('All');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verDetalle = false;\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n vm.getExcel = function()\r\n {\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getReportRemoteController('general');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n \r\n var promise = ApiBaseService.getFile(criterios);\r\n \r\n promise\r\n .then(function(result){\r\n logger.info('Excel descargado!');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n }); \r\n } \r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n\r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.categorias = [];\r\n\r\n if(result)\r\n {\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.reportes')\r\n .controller('reportes.InscripcionesSocios', InscripcionesSocios);\r\n\r\n InscripcionesSocios.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger', 'UserInfoService'];\r\n\r\n function InscripcionesSocios($scope, $animationsSrv, ApiBaseService, logger, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n ApiBaseService.remoteController = 'api/Inscripciones'\r\n\r\n const GRUPO_INSCRIPTORES = 3;\r\n const ESTADO_CONFIRMADO = 2;\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n };\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.categorias = [];\r\n vm.eventos = [];\r\n vm.inscriptores = [];\r\n\r\n vm.collection = [];\r\n vm.title = 'Reporte de Inscripciones';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n getComboData(vm.inscriptores, 'api/Usuarios/ByGrupo', [GRUPO_INSCRIPTORES], 'Error al cargar los inscriptores');\r\n\r\n function getRemoteController(page)\r\n {\r\n return `api/Inscripciones/${page}`;\r\n };\r\n\r\n function getReportRemoteController(page)\r\n {\r\n return `api/reportes-inscripciones/${page}`;\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController('All');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verDetalle = false;\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n vm.getExcel = function()\r\n {\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getReportRemoteController('general-socios');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n \r\n var promise = ApiBaseService.getFile(criterios);\r\n \r\n promise\r\n .then(function(result){\r\n logger.info('Excel descargado!');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n }); \r\n } \r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n\r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.categorias = [];\r\n\r\n if(result)\r\n {\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.reportes')\r\n .controller('reportes.ResultadosTiempos', ResultadosTiempos);\r\n\r\n ResultadosTiempos.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger'];\r\n\r\n function ResultadosTiempos($scope, $animationsSrv, ApiBaseService, logger) {\r\n \r\n $animationsSrv.scrollToTop();\r\n ApiBaseService.remoteController = 'api/Inscripciones'\r\n\r\n const ESTADO_CONFIRMADO = 2;\r\n\r\n var vm = this;\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '0',\r\n apellidos: '0',\r\n apellido2: '0',\r\n usarCategorias: true\r\n };\r\n\r\n vm.categorias = [];\r\n vm.eventos = [];\r\n\r\n vm.collection = [];\r\n vm.title = 'Reporte de Tiempos';\r\n\r\n vm.diasEventoSeleccionado = 1;\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getReportRemoteController(page)\r\n {\r\n return `api/reportes-inscripciones/${page}`;\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '0',\r\n apellidos: '0',\r\n apellido2: '0',\r\n usarCategorias: true\r\n };\r\n };\r\n\r\n vm.getAll = function()\r\n {\r\n $scope.submitted = true;\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n getAll();\r\n }\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getReportRemoteController('all-tiempos');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.usarCategorias\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verDetalle = false;\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n vm.getExcel = function(tipoReporte)\r\n {\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getReportRemoteController(tipoReporte);\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.usarCategorias\r\n ];\r\n \r\n var promise = ApiBaseService.getFile(criterios);\r\n \r\n promise\r\n .then(function(result){\r\n logger.info('Excel descargado!');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n }); \r\n } \r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n\r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.categorias = [];\r\n\r\n if(result)\r\n {\r\n setDiasEventoSeleccionado();\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n }\r\n };\r\n\r\n function setDiasEventoSeleccionado()\r\n {\r\n const evento = vm.eventos.find(e=>e.id === vm.criteriosBusqueda.eventoId);\r\n\r\n if(evento)\r\n {\r\n vm.diasEventoSeleccionado = evento.dias;\r\n }\r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.reportes')\r\n .controller('reportes.ResultadosPremiacion', ResultadosPremiacion);\r\n\r\n ResultadosPremiacion.$inject = ['$scope', '$animationsSrv', 'ApiBaseService', 'logger'];\r\n\r\n function ResultadosPremiacion($scope, $animationsSrv, ApiBaseService, logger) {\r\n \r\n $animationsSrv.scrollToTop();\r\n ApiBaseService.remoteController = 'api/Inscripciones'\r\n\r\n const ESTADO_CONFIRMADO = 2;\r\n\r\n var vm = this;\r\n\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '0',\r\n apellidos: '0',\r\n apellido2: '0',\r\n cantidad: 5\r\n };\r\n\r\n vm.categorias = [];\r\n vm.eventos = [];\r\n\r\n vm.collection = [];\r\n vm.title = 'Reporte de Premiación';\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getReportRemoteController(page)\r\n {\r\n return `api/reportes-inscripciones/${page}`;\r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n eventoId: 0,\r\n estado: ESTADO_CONFIRMADO,\r\n usuarioId: 0,\r\n inscriptorId: 0,\r\n categoriaId: 0,\r\n nombre: '0',\r\n apellidos: '0',\r\n apellido2: '0',\r\n cantidad: 5\r\n };\r\n };\r\n\r\n vm.getAll = function()\r\n {\r\n $scope.submitted = true;\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n getAll();\r\n }\r\n };\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getReportRemoteController('all-premiacion');\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.cantidad,\r\n ];\r\n\r\n var promise = ApiBaseService.getAll(criterios);\r\n\r\n promise\r\n .then(function(collection){\r\n\r\n collection.forEach((c)=>{\r\n c.verDetalle = false;\r\n });\r\n\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, 'eventoId' );\r\n };\r\n\r\n vm.getExcel = function(tipoReporte)\r\n {\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getReportRemoteController(tipoReporte);\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.cantidad\r\n ];\r\n \r\n var promise = ApiBaseService.getFile(criterios);\r\n \r\n promise\r\n .then(function(result){\r\n logger.info('Excel descargado!');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n }); \r\n } \r\n };\r\n\r\n vm.getPDF = function(tipoReporte)\r\n {\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n ApiBaseService.remoteController = getReportRemoteController(tipoReporte);\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.eventoId,\r\n vm.criteriosBusqueda.estado,\r\n vm.criteriosBusqueda.inscriptorId,\r\n vm.criteriosBusqueda.categoriaId,\r\n vm.criteriosBusqueda.cantidad\r\n ];\r\n \r\n var promise = ApiBaseService.getFile(criterios);\r\n \r\n promise\r\n .then(function(result){\r\n logger.info('PDF descargado!');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n }); \r\n } \r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n const result = validateSelectProperty($scope.dataForm, vm.criteriosBusqueda, property );\r\n\r\n vm.criteriosBusqueda.categoriaId = 0;\r\n vm.categorias = [];\r\n\r\n if(result)\r\n {\r\n getComboData(vm.categorias, 'api/EventosCategorias', [vm.criteriosBusqueda.eventoId], 'Error al cargar las Categorias');\r\n }\r\n };\r\n\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.categorias', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.categorias')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/categorias',\r\n config: {\r\n templateUrl: 'app/categorias/list.html',\r\n controller: 'categorias.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/editar-categoria/:id?',\r\n config: {\r\n templateUrl: 'app/categorias/edit.html',\r\n controller: 'categorias.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.categorias')\r\n .controller('categorias.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n var permisosCategorias = UserInfoService.getPermisosCategorias();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosCategorias.guardar === true,\r\n puedeModificar: permisosCategorias.modificar === true,\r\n puedeEliminar: permisosCategorias.eliminar === true\r\n };\r\n\r\n vm.collection = [];\r\n vm.title = 'Categorias';\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-categoria/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n function getRemoteController()\r\n {\r\n return 'api/Categorias/All';\r\n }\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n var promise = ApiBaseService.getAll([]);\r\n\r\n promise\r\n .then(function(collection){\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Categorias';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.categorias')\r\n .controller('categorias.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n const apiCategorias = 'api/Categorias';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n id: 0,\r\n nombre: '',\r\n edadInicial: null,\r\n edadFinal: null\r\n };\r\n\r\n vm.title = 'Categorias';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.uiData = {\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiCategorias;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n vm.data = data;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiCategorias;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro creado con éxito.');\r\n clearData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiCategorias;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/categorias');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n id: 0,\r\n nombre: '',\r\n edadInicial: null,\r\n edadFinal: null\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.parametros', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.parametros')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/parametros',\r\n config: {\r\n templateUrl: 'app/parametros/list.html',\r\n controller: 'parametros.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/editar-parametro/:id?',\r\n config: {\r\n templateUrl: 'app/parametros/edit.html',\r\n controller: 'parametros.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.parametros')\r\n .controller('parametros.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n var vm = this;\r\n\r\n vm.collection = [];\r\n vm.title = 'Parametros';\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-parametro/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n\r\n ApiBaseService.remoteController = 'api/Parametros/All';\r\n var promise = ApiBaseService.getAll([]);\r\n\r\n promise\r\n .then(function(collection){\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Parametros';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.parametros')\r\n .controller('parametros.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n const apiParametros = 'api/Parametros';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n tipo: 0\r\n };\r\n\r\n vm.title = 'Parametros';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n get();\r\n\r\n function get(){\r\n\r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiParametros;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n\r\n promise\r\n .then(function(data){\r\n vm.data = data;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n\r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty('tipo');\r\n };\r\n\r\n function validateSelectProperty(property){\r\n if(vm.data[property] == 0){\r\n $scope.dataForm[property].$setValidity(\"different\", false);\r\n }\r\n else{\r\n $scope.dataForm[property].$setValidity(\"different\", true);\r\n }\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiParametros;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro creado con éxito.');\r\n clearData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiParametros;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/parametros');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n tipo: 0\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('app.paquetes', []);\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.paquetes')\r\n .run(appRun);\r\n\r\n // appRun.$inject = ['routehelper'];\r\n\r\n /* @ngInject */\r\n function appRun(routehelper) {\r\n routehelper.configureRoutes(getRoutes());\r\n }\r\n\r\n function getRoutes() {\r\n return [\r\n {\r\n url: '/paquetes',\r\n config: {\r\n templateUrl: 'app/paquetes/list.html',\r\n controller: 'paquetes.List',\r\n controllerAs: 'vm',\r\n title: 'List'\r\n }\r\n },\r\n {\r\n url: '/editar-paquete/:id?',\r\n config: {\r\n templateUrl: 'app/paquetes/edit.html',\r\n controller: 'paquetes.Edit',\r\n controllerAs: 'vm',\r\n title: 'Edit'\r\n }\r\n }\r\n ];\r\n }\r\n})();\r\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.paquetes')\r\n .controller('paquetes.List', List);\r\n\r\n List.$inject = ['$animationsSrv', 'ApiBaseService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function List($animationsSrv, ApiBaseService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n\r\n var permisosPaquetes = UserInfoService.getPermisosPaquetes();\r\n\r\n var vm = this;\r\n\r\n vm.uiData = {\r\n puedeGuardar: permisosPaquetes.guardar === true,\r\n puedeModificar: permisosPaquetes.modificar === true,\r\n puedeEliminar: permisosPaquetes.eliminar === true\r\n };\r\n\r\n vm.collection = [];\r\n vm.title = 'Paquetes';\r\n\r\n vm.goToEdit = function(data){\r\n \r\n var path = '/editar-paquete/';\r\n\r\n if(data){\r\n $location.path(path + data.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n function getRemoteController()\r\n {\r\n if(UserInfoService.esOrganizador())\r\n {\r\n return 'api/Paquetes/All';\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n ApiBaseService.remoteController = getRemoteController();\r\n var promise = ApiBaseService.getAll([]);\r\n\r\n promise\r\n .then(function(collection){\r\n vm.collection = collection;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los datos.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(data){\r\n ApiBaseService.remoteController = 'api/Paquetes';\r\n var promise = ApiBaseService.remove(data);\r\n \r\n promise\r\n .then(function(response){\r\n vm.collection = vm.collection.filter(function(g) {\r\n return g.id !== data.id;\r\n });\r\n logger.success('Registro eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el Registro');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.paquetes')\r\n .controller('paquetes.Edit', Edit);\r\n\r\n Edit.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams','ApiBaseService', 'logger', '$location', 'UserInfoService', 'moment'];\r\n\r\n function Edit($q, $scope, $animationsSrv, $routeParams, ApiBaseService, logger, $location, UserInfoService, moment) {\r\n \r\n $animationsSrv.scrollToTop();\r\n const apiPaquetes = 'api/Paquetes';\r\n\r\n let vm = this;\r\n\r\n vm.data = {\r\n id: 0,\r\n eventoId: 0,\r\n nombre: '',\r\n incluye: '',\r\n monto: 0,\r\n activo: false\r\n };\r\n\r\n vm.title = 'Paquetes';\r\n vm.id = $routeParams.id ? $routeParams.id : 0;\r\n\r\n vm.uiData = {\r\n };\r\n\r\n vm.eventos = [];\r\n\r\n var promiseEventos = getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n get();\r\n\r\n function get(){\r\n $q.all([promiseEventos])\r\n .then(function(){\r\n \r\n if(vm.id != 0){\r\n ApiBaseService.remoteController = apiPaquetes;\r\n var promise = ApiBaseService.getAll([vm.id]);\r\n \r\n promise\r\n .then(function(data){\r\n vm.data = data;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al obtener el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n }\r\n });\r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n doFormValidations();\r\n\r\n if($scope.dataForm.$valid){\r\n if(!vm.data.id){\r\n create();\r\n }\r\n else if($scope.dataForm.$dirty){\r\n update();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n } \r\n \r\n };\r\n\r\n function create() {\r\n ApiBaseService.remoteController = apiPaquetes;\r\n var promise = ApiBaseService.save(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro creado con éxito.');\r\n clearData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al crear el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function update(){\r\n ApiBaseService.remoteController = apiPaquetes;\r\n var promise = ApiBaseService.update(vm.data);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Registro modificado con éxito.');\r\n $location.path('/paquetes');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al modificar el registro: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, 'eventoId' );\r\n };\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"eventoId\":\r\n onEventoIdChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onEventoIdChanged(property)\r\n {\r\n validateSelectProperty($scope.dataForm, vm.data, property );\r\n };\r\n\r\n function clearData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.data = {\r\n id: 0,\r\n nombre: '',\r\n edadInicial: null,\r\n edadFinal: null,\r\n activo: false\r\n };\r\n // Set back to pristine.\r\n $scope.dataForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.dataForm.$setUntouched();\r\n };\r\n\r\n }\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.organizadores', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.organizadores')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/organizadores',\n config: {\n templateUrl: 'app/organizadores/organizadores.html',\n controller: 'Organizadores',\n controllerAs: 'vm',\n title: 'Organizadores',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/editar-organizador/:id?',\n config: {\n templateUrl: 'app/organizadores/editarOrganizador.html',\n controller: 'EditarOrganizador',\n controllerAs: 'vm',\n title: 'EditarOrganizador',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.organizadores')\r\n .controller('Organizadores', Organizadores);\r\n\r\n Organizadores.$inject = ['$animationsSrv', 'OrganizadoresService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function Organizadores($animationsSrv, OrganizadoresService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n var PERMISO_ID = 3;\r\n\r\n vm.organizadores = [];\r\n vm.title = 'Organizadores';\r\n vm.permisos = UserInfoService.getPermisos(PERMISO_ID);\r\n\r\n vm.goToEdit = function(organizador){\r\n \r\n var path = '/editar-organizador/';\r\n\r\n if(organizador){\r\n $location.path(path + organizador.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n getAll();\r\n\r\n function getAll(){\r\n\r\n var promise = OrganizadoresService.getAll();\r\n\r\n promise\r\n .then(function(organizadores){\r\n vm.organizadores = organizadores;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los organizadores.');\r\n break;\r\n }\r\n });\r\n };\r\n\r\n vm.delete = function(organizador){\r\n var promise = OrganizadoresService.remove(organizador);\r\n \r\n promise\r\n .then(function(response){\r\n vm.organizadores = vm.organizadores.filter(function(g) {\r\n return g.id !== organizador.id;\r\n });\r\n logger.success('Organizador eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el organizador');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.organizadores')\r\n .controller('EditarOrganizador', EditarOrganizador);\r\n\r\n EditarOrganizador.$inject = ['$scope', '$animationsSrv', '$routeParams', 'OrganizadoresService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function EditarOrganizador($scope, $animationsSrv, $routeParams, OrganizadoresService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n vm.organizador;\r\n\r\n var organizadorId = $routeParams.id ? $routeParams.id : 0;\r\n\r\n getOrganizador();\r\n\r\n function getOrganizador(){\r\n\r\n if(organizadorId != 0){\r\n var promise = OrganizadoresService.getById(organizadorId);\r\n\r\n promise\r\n .then(function(organizador){\r\n vm.organizador = organizador;\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al obtener los datos');\r\n }); \r\n }\r\n\r\n };\r\n\r\n vm.save = function(){ \r\n $scope.submitted = true;\r\n\r\n if($scope.organizadorForm.$valid){\r\n if(!vm.organizador.id){\r\n saveOrganizador();\r\n }\r\n else if($scope.organizadorForm.$dirty){\r\n updateOrganizador();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n }\r\n };\r\n\r\n function saveOrganizador(){\r\n vm.organizador.id = 0;\r\n\r\n var promise = OrganizadoresService.save(vm.organizador);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Organizador creado con éxito.');\r\n clearOrganizadorData();\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al crear el organizador' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function updateOrganizador(){\r\n\r\n var promise = OrganizadoresService.update(vm.organizador);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Organizador modificado con éxito.');\r\n $location.path('/organizadores');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sesión ha expirado');\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al modificar el organizador: ' + error.data.Message);\r\n break;\r\n }\r\n }); \r\n };\r\n\r\n function clearOrganizadorData(){\r\n $scope.submitted = false;\r\n // Reset the form model.\r\n vm.organizador = {};\r\n // Set back to pristine.\r\n $scope.organizadorForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.organizadorForm.$setUntouched();\r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.organizadores')\r\n .factory('OrganizadoresService', OrganizadoresService);\r\n\r\n OrganizadoresService.$inject = ['$http', '$q', 'apiSettings', 'UserInfoService'];\r\n\r\n function OrganizadoresService($http, $q, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getAll: getAll,\r\n getById: getById,\r\n save: save,\r\n update: update,\r\n remove: remove\r\n };\r\n\r\n return api;\r\n\r\n function getAll(){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/organizadores';\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getById(organizadorId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/organizadores/' + organizadorId;\r\n \r\n return $http.get(url)\r\n .then(getByIdSuccess, getByIdError);\r\n\r\n function getByIdSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getByIdError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function save(organizador){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/organizadores', \r\n method: 'POST', \r\n data: organizador\r\n }); \r\n return response;\r\n };\r\n\r\n function update(organizador){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/organizadores', \r\n method: 'PUT', \r\n data: organizador\r\n }); \r\n return response;\r\n };\r\n\r\n function remove(organizador){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/organizadores', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: organizador\r\n }); \r\n return response;\r\n };\r\n\r\n };\r\n\r\n})();","(function() {\n 'use strict';\n\n angular.module('app.usuarios-organizador', []);\n})();\n","(function() {\n 'use strict';\n\n angular\n .module('app.usuarios-organizador')\n .run(appRun);\n\n // appRun.$inject = ['routehelper'];\n\n /* @ngInject */\n function appRun(routehelper) {\n routehelper.configureRoutes(getRoutes());\n }\n\n function getRoutes() {\n return [\n {\n url: '/usuarios-organizador',\n config: {\n templateUrl: 'app/usuarios-organizador/usuariosOrganizador.html',\n controller: 'UsuariosOrganizador',\n controllerAs: 'vm',\n title: 'UsuariosOrganizador',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/editar-usuario-organizador/:id?',\n config: {\n templateUrl: 'app/usuarios-organizador/editarUsuarioOrganizador.html',\n controller: 'EditarUsuarioOrganizador',\n controllerAs: 'vm',\n title: 'EditarUsuarioOrganizador',\n settings: {\n nav: 1,\n content: '<i class=\"fa fa-login\"></i> login'\n }\n }\n },\n {\n url: '/cambiar-password-usuario-organizador/:id/:nombre?',\n config: {\n templateUrl: 'app/usuarios-organizador/cambiarPasswordUsuarioOrganizador.html',\n controller: 'CambiarPasswordUsuarioOrganizador',\n controllerAs: 'vm',\n title: 'CambiarPasswordUsuarioOrganizador'\n }\n }\n ];\n }\n})();\n","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios-organizador')\r\n .controller('UsuariosOrganizador', UsuariosOrganizador);\r\n\r\n UsuariosOrganizador.$inject = ['$animationsSrv', 'UsuariosOrganizadorService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function UsuariosOrganizador($animationsSrv, UsuariosOrganizadorService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n var PERMISO_ID = 5;\r\n\r\n vm.criteriosBusqueda = {\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n\r\n vm.usuarios = [];\r\n vm.title = 'UsuariosOrganizador';\r\n vm.permisos = UserInfoService.getPermisos(PERMISO_ID);\r\n\r\n vm.goToEdit = function(usuario){\r\n \r\n var path = '/editar-usuario-organizador/';\r\n\r\n if(usuario){\r\n $location.path(path + usuario.id);\r\n }\r\n else{\r\n $location.path(path);\r\n }\r\n \r\n };\r\n\r\n vm.goToChangePassword = function(usuario){\r\n \r\n var path = `cambiar-password-usuario-organizador/${usuario.id}/${usuario.nombre}`;\r\n \r\n $location.path(path);\r\n \r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.clearCriteria = function()\r\n {\r\n vm.criteriosBusqueda = {\r\n nombre: '',\r\n apellidos: '',\r\n apellido2: ''\r\n };\r\n };\r\n\r\n getAll();\r\n\r\n vm.getAll = function()\r\n {\r\n getAll();\r\n };\r\n\r\n function getAll(){\r\n\r\n const criterios = [\r\n vm.criteriosBusqueda.nombre === '' ? '0' : vm.criteriosBusqueda.nombre,\r\n vm.criteriosBusqueda.apellidos === '' ? '0' : vm.criteriosBusqueda.apellidos,\r\n vm.criteriosBusqueda.apellido2 === '' ? '0' : vm.criteriosBusqueda.apellido2\r\n ];\r\n\r\n var promise = UsuariosOrganizadorService.getAll(criterios);\r\n\r\n promise\r\n .then(function(usuarios){\r\n vm.usuarios = usuarios;\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n \r\n default:\r\n logger.error('Error al obtener los usuarios.');\r\n break;\r\n }\r\n \r\n });\r\n };\r\n\r\n vm.delete = function(usuario){\r\n var promise = UsuariosOrganizadorService.remove(usuario);\r\n \r\n promise\r\n .then(function(response){\r\n vm.usuarios = vm.usuarios.filter(function(u) {\r\n return u.id !== usuario.id;\r\n });\r\n logger.success('Usuario eliminado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al eliminar el usuario');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios-organizador')\r\n .controller('EditarUsuarioOrganizador', EditarUsuarioOrganizador);\r\n\r\n EditarUsuarioOrganizador.$inject = ['$q', '$scope', '$animationsSrv', '$routeParams', 'UsuariosOrganizadorService', 'GruposService', 'logger', '$location', 'UserInfoService', 'ApiBaseService'];\r\n\r\n function EditarUsuarioOrganizador($q, $scope, $animationsSrv, $routeParams, UsuariosOrganizadorService, GruposService, logger, $location, UserInfoService, ApiBaseService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = $routeParams.id ? $routeParams.id : 0;\r\n \r\n vm.grupos = [];\r\n vm.eventos = [];\r\n vm.eventosUsuario = [];\r\n\r\n vm.usuario = {\r\n grupoId: -1,\r\n verTodosLosEventos: true\r\n };\r\n\r\n vm.evento = {\r\n id: 0,\r\n };\r\n\r\n vm.permisoEvento = {\r\n id: 0,\r\n usuarioId: 0,\r\n eventoId: 0\r\n };\r\n\r\n vm.uiData = {\r\n };\r\n\r\n var promiseGrupo = getGrupos();\r\n\r\n if(vm.usuarioId){\r\n getById();\r\n }\r\n\r\n getComboData(vm.eventos, 'api/Eventos/All', null, 'Error al cargar los eventos');\r\n\r\n function getGrupos(){\r\n var promise = GruposService.getAll()\r\n .then(function(grupos){\r\n vm.grupos = grupos;\r\n })\r\n .catch(function(error){\r\n $logger.error('Error al obtener los grupos')\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getComboData(array, apiUrl, params, errorMessage){\r\n ApiBaseService.remoteController = apiUrl;\r\n var promise = ApiBaseService.getAll(params)\r\n .then(function(data){\r\n array.splice(0);\r\n array.push(...data);\r\n })\r\n .catch(function(error){\r\n $logger.error(errorMessage);\r\n }); \r\n \r\n return promise;\r\n };\r\n\r\n function getById(){\r\n\r\n $q.all([promiseGrupo])\r\n .then(function(){\r\n UsuariosOrganizadorService.getById(vm.usuarioId)\r\n .then(function(usuario){\r\n vm.usuario = usuario;\r\n getComboData(vm.eventosUsuario, 'api/permisos-eventos', [vm.usuario.id], 'Error al cargar los eventos del usuario');\r\n })\r\n .catch(function(error){\r\n $logger.error('Error al obtener los datos del usuario')\r\n }); \r\n });\r\n }\r\n\r\n function doFormValidations()\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, 'usergrupo' );\r\n };\r\n\r\n vm.openModal = function(modalName){\r\n $(modalName).modal('toggle'); \r\n };\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if(vm.usuario.grupoId == -1){\r\n $scope.usuarioForm.usergrupo.$setValidity(\"different\", false);\r\n }\r\n\r\n doFormValidations();\r\n\r\n if($scope.usuarioForm.$valid){\r\n if(!vm.usuario.id){\r\n vm.usuario.id = 0;\r\n saveUser();\r\n }\r\n else{\r\n if($scope.usuarioForm.$dirty){\r\n updateUser();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato');\r\n }\r\n }\r\n \r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function saveUser() {\r\n var promise = UsuariosOrganizadorService.save(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n vm.usuario.id = response.data.id;\r\n vm.usuario.organizadorId = response.data.organizadorId;\r\n logger.success('Usuario creado con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(`Hubo un erro al crea el usuario: ${error.data.Message}`);\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un erro al crea el usuario');\r\n break;\r\n }\r\n }); \r\n }\r\n\r\n function updateUser() {\r\n var promise = UsuariosOrganizadorService.update(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n getComboData(vm.eventosUsuario, 'api/permisos-eventos', [vm.usuario.id], 'Error al cargar los eventos del usuario');\r\n logger.success('Usuario modificado con éxito.');\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al modificar el usuario');\r\n }); \r\n }\r\n\r\n vm.clearUserData = function(){\r\n $scope.submitted = false;\r\n\r\n vm.usuarioId = 0;\r\n // Reset the form model.\r\n vm.usuario = {\r\n grupoId: -1,\r\n verTodosLosEventos: true\r\n };\r\n\r\n vm.permisoEvento = {\r\n id: 0,\r\n usuarioId: 0,\r\n eventoId: 0\r\n };\r\n\r\n vm.evento.id = 0;\r\n vm.eventosUsuario = [];\r\n\r\n // Set back to pristine.\r\n $scope.usuarioForm.$setPristine();\r\n // Since Angular 1.3, set back to untouched state.\r\n $scope.usuarioForm.$setUntouched();\r\n }\r\n\r\n function validateSelectProperty(form, object, property){\r\n if(object[property] == 0){\r\n form[property].$setValidity(\"different\", false);\r\n return false;\r\n }\r\n else{\r\n form[property].$setValidity(\"different\", true);\r\n return true;\r\n }\r\n };\r\n\r\n vm.onSelectChanged = function(property){\r\n\r\n switch (property) {\r\n case \"usergrupo\":\r\n onUsergrupoChanged(property);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n function onUsergrupoChanged(property)\r\n {\r\n validateSelectProperty($scope.usuarioForm, vm.usuario, property );\r\n };\r\n\r\n vm.saveEvento = function(){\r\n\r\n if(vm.evento.id == 0){\r\n logger.error('No se ha seleccionado el evento');\r\n return;\r\n }\r\n\r\n if(vm.usuario.id == 0){\r\n logger.error('No se ha seleccionado el usuario');\r\n return;\r\n }\r\n\r\n var existeEvento = vm.eventosUsuario.find((e) => e.eventoId == vm.evento.id);\r\n\r\n if(existeEvento){\r\n logger.error('El evento ya fue agregado');\r\n return;\r\n }\r\n\r\n vm.permisoEvento.usuarioId = vm.usuario.id;\r\n vm.permisoEvento.eventoId = vm.evento.id;\r\n\r\n var promise = UsuariosOrganizadorService.saveEvento(vm.permisoEvento);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Evento agregado con éxito.');\r\n getComboData(vm.eventosUsuario, 'api/permisos-eventos', [vm.usuario.id], 'Error al cargar los eventos del usuario');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(`Hubo un erro al agregar el evento: ${error.data.Message}`);\r\n break;\r\n \r\n default:\r\n logger.error('Hubo un error al agregar el evento');\r\n break;\r\n }\r\n }); \r\n \r\n };\r\n\r\n vm.delete = function(evento){\r\n var promise = UsuariosOrganizadorService.removeEvento(evento);\r\n \r\n promise\r\n .then(function(response){\r\n vm.eventosUsuario = vm.eventosUsuario.filter(function(u) {\r\n return u.id !== evento.id;\r\n });\r\n logger.success('Evento removido con éxito.');\r\n })\r\n .catch(function(error){\r\n switch (error.status) {\r\n case 500:\r\n logger.error(error.data.Message);\r\n break;\r\n case 401:\r\n logger.error('La sessión ha terminado.');\r\n break;\r\n default:\r\n logger.error('Hubo un erro al remover el evento');\r\n break;\r\n }\r\n \r\n }); \r\n };\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular\r\n .module('app.usuarios-organizador')\r\n .controller('CambiarPasswordUsuarioOrganizador', CambiarPasswordUsuarioOrganizador);\r\n\r\n CambiarPasswordUsuarioOrganizador.$inject = ['$scope', '$animationsSrv', '$routeParams', 'UsuariosOrganizadorService', 'logger', '$location', 'UserInfoService'];\r\n\r\n function CambiarPasswordUsuarioOrganizador($scope, $animationsSrv, $routeParams, UsuariosOrganizadorService, logger, $location, UserInfoService) {\r\n \r\n $animationsSrv.scrollToTop();\r\n \r\n var vm = this;\r\n\r\n vm.usuarioId = $routeParams.id ? $routeParams.id : 0;\r\n vm.nombreUsuario = $routeParams.id ? $routeParams.nombre : '';\r\n\r\n if(vm.usuarioId == 0 || vm.nombreUsuario == ''){\r\n $location.path('/usuarios-organizador');\r\n }\r\n\r\n vm.save = function(){\r\n\r\n $scope.submitted = true;\r\n\r\n if($scope.cambiarPasswordForm.$valid){\r\n if($scope.cambiarPasswordForm.$dirty){\r\n updatePassword();\r\n }\r\n else{\r\n logger.info('No has modificado ningún dato!');\r\n }\r\n \r\n }\r\n else{\r\n logger.error('Por favor corrija los datos');\r\n }\r\n \r\n };\r\n\r\n function updatePassword() {\r\n vm.usuario.id = vm.usuarioId;\r\n var promise = UsuariosOrganizadorService.changePassword(vm.usuario);\r\n \r\n promise\r\n .then(function(response){\r\n logger.success('Usuario modificado con éxito.');\r\n $location.path('/usuarios-organizador');\r\n })\r\n .catch(function(error){\r\n logger.error('Hubo un erro al modificar el usuario');\r\n }); \r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict'\r\n\r\n angular.module('app.usuarios-organizador')\r\n .factory('UsuariosOrganizadorService', UsuariosOrganizadorService);\r\n\r\n UsuariosOrganizadorService.$inject = ['$http', '$q', 'apiSettings', 'UserInfoService'];\r\n\r\n function UsuariosOrganizadorService($http, $q, apiSettings, UserInfoService) {\r\n\r\n var api = {\r\n getAll: getAll,\r\n getById: getById,\r\n save: save,\r\n update: update,\r\n remove: remove,\r\n changePassword: changePassword,\r\n saveEvento: saveEvento,\r\n removeEvento: removeEvento\r\n };\r\n\r\n return api;\r\n\r\n function getStringParams(params){\r\n let stringParams = '';\r\n if(params != undefined && params != null)\r\n {\r\n params.forEach(element => {\r\n stringParams += `/${element}`\r\n });\r\n }\r\n return stringParams;\r\n };\r\n\r\n function getAll(params){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/usuarios-organizador' + getStringParams(params);\r\n \r\n return $http.get(url)\r\n .then(getAllSuccess, getAllError);\r\n\r\n function getAllSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getAllError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function getById(usuarioId){\r\n\r\n var url = apiSettings.apiBaseUrl + 'api/usuarios-organizador/' + usuarioId;\r\n \r\n return $http.get(url)\r\n .then(getByIdSuccess, getByIdError);\r\n\r\n function getByIdSuccess(response){\r\n return response.data;\r\n };\r\n\r\n function getByIdError(error) {\r\n return $q.reject(error);\r\n }\r\n };\r\n\r\n function save(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-organizador', \r\n method: 'POST', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function update(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-organizador', \r\n method: 'PUT', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function remove(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-organizador', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function changePassword(usuario){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/usuarios-organizador/change-password', \r\n method: 'PUT', \r\n data: usuario\r\n }); \r\n return response;\r\n };\r\n\r\n function saveEvento(evento){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/permisos-eventos', \r\n method: 'POST', \r\n data: evento\r\n }); \r\n return response;\r\n };\r\n\r\n function removeEvento(evento){\r\n\r\n var response = $http({ \r\n url: apiSettings.apiBaseUrl + 'api/permisos-eventos', \r\n method: 'DELETE', \r\n headers: { \r\n 'Content-Type': 'application/json' },\r\n data: evento\r\n }); \r\n return response;\r\n };\r\n\r\n };\r\n\r\n})();"]}