{"version":3,"file":"main.js","mappings":"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","sources":["es.js","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.config.ts","./src/app/app.routes.ts","./src/app/core/auth/auth.guard.ts","./src/app/core/auth/auth.interceptor.ts","./src/app/core/auth/auth.provider.ts","./src/app/core/auth/auth.service.ts","./src/app/core/auth/auth.utils.ts","./src/app/core/auth/index.ts","./src/app/core/auth/public-api.ts","./src/app/core/core.provider.ts","./src/app/core/errors/errors.provider.ts","./src/app/core/errors/errors.service.ts","./src/app/core/errors/index.ts","./src/app/core/errors/public-api.ts","./src/app/core/http-request/http-request.interceptor.ts","./src/app/core/http-request/http-request.service.ts","./src/app/core/http-request/index.ts","./src/app/core/http-request/public-api.ts","./src/app/core/services/form-util.service.ts","./src/app/core/services/index.ts","./src/app/core/services/localization.service.ts","./src/app/core/services/mail.service.ts","./src/app/core/services/public-api.ts","./src/app/core/services/storage.service.ts","./src/app/modules/home/home.component.ts","./src/app/modules/home/home.component.html","./src/app/shared/animations/growShrink.animation.ts","./src/app/shared/animations/index.ts","./src/app/shared/animations/pageSlide.animation.ts","./src/app/shared/animations/public-api.ts","./src/app/shared/animations/scrollUpList.animation.ts","./src/app/shared/components/at-door/at-door.component.ts","./src/app/shared/components/at-door/at-door.component.html","./src/app/shared/components/dialog/dialog.component.ts","./src/app/shared/components/dialog/dialog.component.html","./src/app/shared/components/dialog/dialog.service.ts","./src/app/shared/components/dialog/dialog.types.ts","./src/app/shared/components/dialog/index.ts","./src/app/shared/components/dialog/public-api.ts","./src/app/shared/components/footer/footer.component.ts","./src/app/shared/components/footer/footer.component.html","./src/app/shared/components/footer/index.ts","./src/app/shared/components/footer/public-api.ts","./src/app/shared/components/header/header.component.ts","./src/app/shared/components/header/header.component.html","./src/app/shared/components/header/index.ts","./src/app/shared/components/header/public-api.ts","./src/app/shared/components/menu/index.ts","./src/app/shared/components/menu/menu.component.ts","./src/app/shared/components/menu/menu.component.html","./src/app/shared/components/menu/public-api.ts","./src/app/shared/components/notifications/index.ts","./src/app/shared/components/notifications/notifications.component.ts","./src/app/shared/components/notifications/notifications.component.html","./src/app/shared/components/notifications/notifications.service.ts","./src/app/shared/components/notifications/notifications.types.ts","./src/app/shared/components/notifications/public-api.ts","./src/app/shared/configuration/regular-expressions.ts","./src/app/shared/configuration/settings.ts","./src/app/shared/lib/blob.ts","./src/app/shared/lib/datetime.ts","./src/app/shared/lib/index.ts","./src/app/shared/lib/number.ts","./src/app/shared/lib/public-api.ts","./src/app/shared/lib/queue.ts","./src/app/shared/lib/string.ts","./src/app/shared/lib/utils.ts","./src/app/shared/pipes/bankaccount.pipe.ts","./src/app/shared/pipes/concat.pipe.ts","./src/app/shared/pipes/datetime.pipe.ts","./src/app/shared/pipes/duration.pipe.ts","./src/app/shared/pipes/filter.pipe.ts","./src/app/shared/pipes/firstcase.pipe.ts","./src/app/shared/pipes/index.ts","./src/app/shared/pipes/minus.pipe.ts","./src/app/shared/pipes/plus.pipe.ts","./src/app/shared/pipes/public-api.ts","./src/app/shared/pipes/safeurl.pipe.ts","./src/app/shared/pipes/titlecase.pipe.ts","./src/app/shared/services/carers.service.ts","./src/app/shared/services/coordinators.service.ts","./src/app/shared/services/index.ts","./src/app/shared/services/planning-events.service.ts","./src/app/shared/services/public-api.ts","./src/app/shared/services/tasks.service.ts","./src/app/shared/services/technical-issue-types.service.ts","./src/app/shared/services/users.service.ts","./src/app/shared/services/workcenters.service.ts","./src/environments/environment.test.ts","./src/main.ts","ignored|C:\\Projects\\Asisto\\ExternalUserWeb\\src|@angular/localize/init"],"sourcesContent":["\"use strict\";(function(global,_global$ng,_global$ng2,_global$ng2$common,_global$ng$common,_global$ng$common$loc){(_global$ng=global.ng)!==null&&_global$ng!==void 0?_global$ng:global.ng={};(_global$ng2$common=(_global$ng2=global.ng).common)!==null&&_global$ng2$common!==void 0?_global$ng2$common:_global$ng2.common={};(_global$ng$common$loc=(_global$ng$common=global.ng.common).locales)!==null&&_global$ng$common$loc!==void 0?_global$ng$common$loc:_global$ng$common.locales={};const u=undefined;function plural(val){const n=val,i=Math.floor(Math.abs(val)),v=val.toString().replace(/^[^.]*\\.?/,\"\").length,e=parseInt(val.toString().replace(/^[^e]*(e([-+]?\\d+))?/,\"$2\"))||0;if(n===1)return 1;if(e===0&&!(i===0)&&i%1000000===0&&v===0||!(e>=0&&e<=5))return 4;return 5}global.ng.common.locales[\"es\"]=[\"es\",[[\"a.\\xA0m.\",\"p.\\xA0m.\"],u,u],u,[[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],[\"dom\",\"lun\",\"mar\",\"mi\\xE9\",\"jue\",\"vie\",\"s\\xE1b\"],[\"domingo\",\"lunes\",\"martes\",\"mi\\xE9rcoles\",\"jueves\",\"viernes\",\"s\\xE1bado\"],[\"DO\",\"LU\",\"MA\",\"MI\",\"JU\",\"VI\",\"SA\"]],u,[[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sept\",\"oct\",\"nov\",\"dic\"],[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]],u,[[\"a. C.\",\"d. C.\"],u,[\"antes de Cristo\",\"despu\\xE9s de Cristo\"]],1,[6,0],[\"d/M/yy\",\"d MMM y\",\"d 'de' MMMM 'de' y\",\"EEEE, d 'de' MMMM 'de' y\"],[\"H:mm\",\"H:mm:ss\",\"H:mm:ss z\",\"H:mm:ss (zzzz)\"],[\"{1}, {0}\",u,u,u],[\",\",\".\",\";\",\"%\",\"+\",\"-\",\"E\",\"\\xD7\",\"\\u2030\",\"\\u221E\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0\\xA0%\",\"#,##0.00\\xA0\\xA4\",\"#E0\"],\"EUR\",\"\\u20AC\",\"euro\",{\"AUD\":[u,\"$\"],\"BRL\":[u,\"R$\"],\"BYN\":[u,\"\\u0440.\"],\"CAD\":[u,\"$\"],\"CNY\":[u,\"\\xA5\"],\"EGP\":[],\"ESP\":[\"\\u20A7\"],\"GBP\":[u,\"\\xA3\"],\"HKD\":[u,\"$\"],\"ILS\":[u,\"\\u20AA\"],\"INR\":[u,\"\\u20B9\"],\"JPY\":[u,\"\\xA5\"],\"KRW\":[u,\"\\u20A9\"],\"MXN\":[u,\"$\"],\"NZD\":[u,\"$\"],\"PHP\":[u,\"\\u20B1\"],\"RON\":[u,\"L\"],\"THB\":[\"\\u0E3F\"],\"TWD\":[u,\"NT$\"],\"USD\":[\"US$\",\"$\"],\"XAF\":[],\"XCD\":[u,\"$\"],\"XOF\":[]},\"ltr\",plural,[[[\"del mediod\\xEDa\",\"de la madrugada\",\"de la ma\\xF1ana\",\"de la tarde\",\"de la noche\"],u,u],[[\"mediod\\xEDa\",\"madrugada\",\"ma\\xF1ana\",\"tarde\",\"noche\"],u,u],[\"12:00\",[\"00:00\",\"06:00\"],[\"06:00\",\"12:00\"],[\"12:00\",\"20:00\"],[\"20:00\",\"24:00\"]]]]})(globalThis);","import { Location } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, NavigationEnd, Router, RouterOutlet } from '@angular/router';\r\nimport { PageSlide } from 'app/shared/animations';\r\nimport { DialogComponent } from 'app/shared/components/dialog';\r\nimport { FooterComponent } from 'app/shared/components/footer';\r\nimport { HeaderComponent } from 'app/shared/components/header';\r\nimport { MenuComponent } from 'app/shared/components/menu';\r\nimport { NotificationsComponent } from 'app/shared/components/notifications';\r\nimport { Settings } from 'luxon';\r\nimport { filter, fromEvent, map, mergeMap, Subscription } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * Component of the application class (loads the icon library, and manages the routing events and\r\n * the title service).\r\n */\r\n@Component({\r\n selector : 'app-root',\r\n templateUrl: './app.component.html',\r\n animations : [PageSlide],\r\n standalone : true,\r\n imports : [DialogComponent, FooterComponent, HeaderComponent, MenuComponent, NotificationsComponent, RouterOutlet]\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy\r\n{\r\n\r\n /** a variable containing the current route url */\r\n private _currentUrl: string;\r\n /** this field stores a reference to the subscription of the offline connection event */\r\n private _offlineEventSubscription: Subscription;\r\n /** this field stores a reference to the subscription of the online connection event */\r\n private _onlineEventSubscription: Subscription;\r\n /** this field stores a reference to the subscription of the router */\r\n private _routerSubscription: Subscription;\r\n\r\n /**\r\n * @constructor\r\n * this function initializes the application class component,\r\n * receiving only the title service, to set the title (it should\r\n * be used in all pages)\r\n * it configures the moment locale library globally\r\n * @param _activatedRoute > this param allows to parse the current url.\r\n * @param _location > this object allows to know which is the current route.\r\n * @param _router > this object allows to subscribe to the changes in the routing service.\r\n * @param _titleService > a service that allows to set custom title in the current page.\r\n */\r\n public constructor(\r\n private _activatedRoute: ActivatedRoute,\r\n private _location: Location,\r\n private _router: Router,\r\n private _titleService: Title) {\r\n Settings.defaultLocale = window.navigator.language.substring(0, 2);\r\n }\r\n\r\n /**\r\n * @method ngOnInit\r\n * initializes the title of the application based on the title property of the data of each route\r\n * (declared in the routing module). Moreover, creates a listener to determine whther to show the\r\n * component or not based on the screen width resolution.\r\n * @see https://toddmotto.com/dynamic-page-titles-angular-2-router-events\r\n */\r\n public ngOnInit(): void {\r\n this._handleAppConnectivityChanges();\r\n this._routerSubscription = this._router.events\r\n .pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n map(_ => this._activatedRoute),\r\n map(route => {\r\n while (route.firstChild) { // traverse over the state tree to find the last activated route\r\n route = route.firstChild;\r\n }\r\n return route;\r\n }),\r\n filter(route => route.outlet === 'primary'), // https://angular.io/api/router/ActivatedRoute\r\n mergeMap(route => route.data)) // from our routes file\r\n .subscribe(event => this._titleService.setTitle(event['title']));\r\n }\r\n\r\n /**\r\n * @method ngOnDestroy\r\n * unsubscribe from the change events of the messages and router, in order to prevent\r\n * from memory leaks. moreover it unsubscribe of the rest of subcriptions.\r\n */\r\n public ngOnDestroy(): void {\r\n this._offlineEventSubscription.unsubscribe();\r\n this._onlineEventSubscription.unsubscribe();\r\n this._routerSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * @method isClosed\r\n * this method checks if the component has any subscription opened or not\r\n * (or even if it has no subscriptions created)\r\n * @returns {boolean} true indicating that there is any subscription opened,\r\n * false otherwise\r\n */\r\n public isClosed(): boolean {\r\n return !this._routerSubscription || this._routerSubscription.closed === true;\r\n }\r\n\r\n /**\r\n * @method prepareRoute\r\n * takes the value of the outlet directive (established through #outlet=\"outlet\") and returns a\r\n * string value representing the state of the animation based on the custom data of the current\r\n * active route. it can be used this data to control which transition to execute for each route\r\n * @param outlet\r\n */\r\n public prepareRoute(outlet: RouterOutlet) {\r\n return outlet &&\r\n outlet.activatedRouteData &&\r\n outlet.activatedRouteData.animation;\r\n }\r\n\r\n /**\r\n * @method _handleAppConnectivityChanges\r\n * creates two subscriptions to monitor when the application loses internet connection and when\r\n * recovers it\r\n */\r\n private _handleAppConnectivityChanges(): void {\r\n this._onlineEventSubscription = fromEvent(window, 'online').subscribe(e => {\r\n if (this._currentUrl)\r\n this._router.navigateByUrl(this._currentUrl);\r\n });\r\n this._offlineEventSubscription = fromEvent(window, 'offline').subscribe(e => {\r\n this._currentUrl = this._location.path();\r\n this._router.navigate(['/offline']);\r\n });\r\n }\r\n\r\n}\r\n","
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n","import { provideHttpClient } from '@angular/common/http';\r\nimport { ApplicationConfig } from '@angular/core';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\nimport { PreloadAllModules, provideRouter, withInMemoryScrolling, withPreloading } from '@angular/router';\r\nimport { appRoutes } from 'app/app.routes';\r\nimport { provideAuth } from 'app/core/auth/auth.provider';\r\nimport { provideCore } from 'app/core/core.provider';\r\n\r\nexport const appConfig: ApplicationConfig = {\r\n providers: [\r\n provideAnimations(),\r\n provideHttpClient(),\r\n provideRouter(appRoutes,\r\n withPreloading(PreloadAllModules),\r\n withInMemoryScrolling({scrollPositionRestoration: 'enabled'}),\r\n ),\r\n provideAuth(),\r\n provideCore()\r\n ],\r\n};\r\n","import { Route } from '@angular/router';\r\nimport { AuthGuard } from 'app/core/auth';\r\nimport { CanDeactivateGuard } from 'app/core/can-deactivate';\r\nimport { HomeComponent } from 'app/modules/home/home.component';\r\nimport { APP_TITLE } from 'app/shared/configuration/settings';\r\n\r\n/** this constant defines the routes of the app */\r\nexport const appRoutes: Route[] = [\r\n {\r\n path : '',\r\n canActivateChild: [AuthGuard],\r\n children : [\r\n {\r\n path : '',\r\n redirectTo : '/home',\r\n pathMatch : 'full'\r\n },\r\n {\r\n path : 'home',\r\n component : HomeComponent,\r\n data : { title: 'Inicio | ' + APP_TITLE }\r\n },\r\n {\r\n path : 'menu',\r\n loadChildren: () => import('app/modules/menu/menu.routes')\r\n },\r\n {\r\n path : 'communication',\r\n loadChildren: () => import('app/modules/communication/communication.routes')\r\n },\r\n {\r\n path : 'info',\r\n loadChildren: () => import('app/modules/info/info.routes')\r\n },\r\n {\r\n path : 'planning',\r\n loadChildren: () => import('app/modules/planning/planning.routes')\r\n },\r\n {\r\n path : 'profile',\r\n loadChildren: () => import('app/modules/profile/profile.routes')\r\n }\r\n ]\r\n },\r\n {\r\n path : 'account',\r\n loadChildren : () => import('app/modules/account/account.routes')\r\n },\r\n {\r\n path : 'help',\r\n loadChildren : () => import('app/modules/help/help.routes')\r\n },\r\n {\r\n path : 'not-found',\r\n loadChildren : () => import('app/modules/not-found/not-found.routes')\r\n },\r\n {\r\n path : 'offline',\r\n loadChildren : () => import('app/modules/offline/offline.routes')\r\n },\r\n {\r\n path : 'rgpd',\r\n loadChildren : () => import('app/modules/rgpd/rgpd.routes')\r\n },\r\n // { path: '**', resolve: { url: PathResolver }, component: NotFoundComponent, data: { title: 'Página no encontrada | ' + APP_TITLE } }\r\n {\r\n path : '**',\r\n redirectTo : '/not-found'\r\n }\r\n];\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, CanActivateChildFn, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { AuthService, ErrorsService } from 'app/core/services';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This guard checks that a user is logged in in order to allow navigation, or, if not,\r\n * redirects to the login page.\r\n */\r\nexport const AuthGuard: CanActivateFn | CanActivateChildFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) =>\r\n{\r\n /** this service allows to authenticate users against the backend server (database) */\r\n const authService = inject(AuthService);\r\n /** manages the renew of the credentials when it is required a guard and they are expired */\r\n const errorsService = inject(ErrorsService);\r\n\r\n // a user is logged in\r\n if (authService.isTokenAlive())\r\n {\r\n return true;\r\n }\r\n // it is possible to renew credentials or redirects to login page (see https://juristr.com/blog/2018/11/better-route-guard-redirects/)\r\n return errorsService.handleUnauthorizedUserError(state.url);\r\n}\r\n","import { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { AuthService } from 'app/core/auth/auth.service';\r\nimport { isTokenExpired } from 'app/core/auth/auth.utils';\r\nimport { JWT_AUTH_SCHEME, JWT_BLACKLISTED_ROUTES, JWT_HEADER_NAME, JWT_SKIP_WHEN_EXPIRED, JWT_THROW_NO_TOKEN_ERROR, JWT_WHITELISTED_DOMAINS } from 'app/shared/configuration/settings';\r\nimport { isInRoutes } from 'app/shared/lib';\r\nimport { mergeMap, Observable } from 'rxjs';\r\n\r\n/**\r\n * @function authInterceptor\r\n * this function intercepts any request and adds an Authorization header (or not) based on the\r\n * configuration of the interceptor and the url of the request.\r\n * first of all, checks the domain and the route of the request, to ensure that it should (or not)\r\n * be processed\r\n * @param request > the request object to be processed, with an Authorization header, if it\r\n * proceeds\r\n * @param next > the next handler in the chain to which pass the request once it has been\r\n * processed\r\n * @returns {Observable>} an observable of the result to the call to the next\r\n * handler in the chain of observables, after processing by the current interceptor\r\n */\r\nexport const authInterceptor = (request: HttpRequest, next: HttpHandlerFn): Observable> =>\r\n{\r\n const authService = inject(AuthService);\r\n\r\n if (!isInRoutes(request.url, JWT_WHITELISTED_DOMAINS, 'startsWith') || isInRoutes(request.url, JWT_BLACKLISTED_ROUTES)) {\r\n return next(request);\r\n }\r\n\r\n const token = authService.getValidToken(request);\r\n\r\n if (token instanceof Observable)\r\n {\r\n return token.pipe(\r\n mergeMap(responseToken => handleInterception(responseToken, request, next))\r\n );\r\n }\r\n else\r\n {\r\n return handleInterception(token, request, next);\r\n }\r\n}\r\n\r\n/**\r\n * @function handleInterception\r\n * this method manages the processing of the current request, determining whether to add or not\r\n * the Authorization header to it\r\n * @param token > the token assigned to the currently logged user, if any\r\n * @param request > the object request to be processed (and added the Authorization header, if\r\n * needed)\r\n * @param next > the next handler to be called after the current interceptor have been processed\r\n * the request\r\n * @return {Observable>} the result of the call to the next interceptor of the chain\r\n * (configured in the global app module)\r\n */\r\nfunction handleInterception(token: string, request: HttpRequest, next: HttpHandlerFn): Observable>\r\n{\r\n if (!token && JWT_THROW_NO_TOKEN_ERROR)\r\n {\r\n throw new Error('Could not get token from tokenGetter function.');\r\n }\r\n if (token && JWT_SKIP_WHEN_EXPIRED && isTokenExpired(token))\r\n {\r\n request = request.clone();\r\n }\r\n else if (token)\r\n {\r\n request = request.clone({\r\n setHeaders: {\r\n [JWT_HEADER_NAME]: `${JWT_AUTH_SCHEME}${token}`\r\n }\r\n });\r\n }\r\n return next(request);\r\n}\r\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport { ENVIRONMENT_INITIALIZER, EnvironmentProviders, inject, Provider } from '@angular/core';\r\nimport { authInterceptor } from 'app/core/auth/auth.interceptor';\r\nimport { AuthService } from 'app/core/auth/auth.service';\r\n\r\nexport const provideAuth = (): Array =>\r\n{\r\n return [\r\n provideHttpClient(withInterceptors([authInterceptor])),\r\n {\r\n provide : ENVIRONMENT_INITIALIZER,\r\n useValue: () => inject(AuthService),\r\n multi : true\r\n }\r\n ];\r\n};\r\n","import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { getTokenExpirationDate, isTokenExpired } from 'app/core/auth';\r\nimport { ErrorsService, StorageService } from 'app/core/services';\r\nimport { ENDPOINT_AUTH, DEFAULT_HTTP_HEADERS, DEFAULT_HTTP_OBSERVE } from 'app/shared/configuration/settings';\r\nimport { User, WorkCenter, WorkCenterConfiguration, WorkCenterExternalUserWebConfiguration } from 'app/shared/models';\r\nimport { UsersService } from 'app/shared/services';\r\nimport { DateTime } from 'luxon';\r\nimport { BehaviorSubject, map, Observable, of, shareReplay, switchMap, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the authentication process in the application using the local storage to\r\n * store the access token of the user when he or she is logged in.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n\r\n /** this variable is used to alert other components of the status of the login */\r\n public user$: BehaviorSubject;\r\n /** contains the url to redirect after the successful login */\r\n public redirectUrl: string;\r\n /** the base uri used to connect to the authentication backend service */\r\n private _uri: string;\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type AuthService, with the core objects needed to its implementation.\r\n * there are needed the following settings (from the settings file):\r\n * - ENDPOINT_AUTH: the base url use to make calls to the authentication\r\n * REST API\r\n * @param _errorsService > the service used to send messages to the messages component.\r\n * @param _http > the object used to send HTTP requests to the backend server.\r\n * @param _jwtService > the class used to deal with JWTs (decode and get the different parts of\r\n * the token).\r\n * @param _storageService > the service used to manage data in the session storage (read, update,\r\n * write and delete operations).\r\n * @param _usersService > the class used to deal with users (gets the data of the user logged in).\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient,\r\n private _storageService: StorageService,\r\n private _usersService: UsersService) {\r\n this._uri = ENDPOINT_AUTH;\r\n //this._usersUri = `${ENDPOINT_BACKEND}/users`;\r\n this.user$ = new BehaviorSubject(this.getUser());\r\n }\r\n\r\n /**\r\n * @function getExpiration\r\n * this function gets the expiration time of the token of the user currently logged in, by\r\n * retrieving it from the local storage.\r\n * @returns {DateTime} the expiration date of the token, or, what is the same, the expiration\r\n * date of the credentials.\r\n */\r\n public getExpiration(): DateTime {\r\n return this.isLoggedIn() ? getTokenExpirationDate(this._storageService.getJwtToken()) : null;\r\n }\r\n\r\n /**\r\n * @function getUser\r\n * this function gets the user object coded in the token, after decoding it, if a user is logged\r\n * in.\r\n * @returns {User} the user currently logged in, without bearing in mind if the token has expired\r\n * or not.\r\n */\r\n public getUser(): User {\r\n return this.isLoggedIn() ? this._storageService.getUser() : null;\r\n }\r\n\r\n /**\r\n * @function setUser\r\n * this function sets the user object passed by parameter, WITHOUT sending an event through the\r\n * user$ observable. the idea is to update the object after a change in the profile or something\r\n * like that.\r\n * @param user > the user to store in the session.\r\n */\r\n public setUser(user: User): void {\r\n this._storageService.setUser(user);\r\n }\r\n\r\n /**\r\n * @function getWorkCenter\r\n * this function gets the workcenter object stored in the \"session\", after a successful\r\n * authentication of the user.\r\n * @returns {WorkCenter} the workcenter that the user currently logged in belongs to, without\r\n * bearing in mind if the token has expired or not.\r\n */\r\n public getWorkCenter(): WorkCenter {\r\n return this._storageService.getWorkCenter();\r\n }\r\n\r\n /**\r\n * @function getWorkCenterExternalUserWebConfiguration\r\n * this function gets the external user web configuration object of the workcenter stored in the\r\n * \"session\", after a successful authentication of a user.\r\n * @returns {WorkCenterExternalUserWebConfiguration} the external user web configuration object\r\n * of the workcenter that the user currently logged in belongs to, without bearing in mind if the\r\n * token has expired or not.\r\n */\r\n public getWorkCenterExternalUserWebConfiguration(): WorkCenterExternalUserWebConfiguration {\r\n return this._storageService.getWorkCenterExternalUserWebConfiguration();\r\n }\r\n\r\n /**\r\n * @function getWorkCenterConfiguration\r\n * this function gets the workcenter configuration object of the workcenter that the user belongs\r\n * to, stored in the \"session\", after a successful authentication of a user.\r\n * @returns {WorkCenterConfiguration} the workcenter configuration object of the user currently\r\n * logged in, without bearing in mind if the token has expired or not.\r\n */\r\n public getWorkCenterConfiguration(): WorkCenterConfiguration {\r\n return this._storageService.getWorkCenterConfiguration();\r\n }\r\n\r\n /**\r\n * @method getValidToken\r\n * this function returns the token stored in the local storage.\r\n * @param request > this object is used to determine if the token to return should be oauth (for\r\n * routes uses in social authentication) or JWT.\r\n * @returns {string} a string with the token stored in the local storage, or null if no token is\r\n * registered.\r\n */\r\n public getValidToken(request: HttpRequest): Observable | string {\r\n if (!this.isTokenExpired()) {\r\n return this._storageService.getJwtToken();\r\n }\r\n else { return null; }\r\n }\r\n\r\n /**\r\n * @method isLoggedIn\r\n * this function checks if there is data of the session for the current user (token and\r\n * expiration time).\r\n * @returns {boolean} a boolean indicating if it exists a token in the local storage or not.\r\n */\r\n public isLoggedIn(): boolean {\r\n return !!this._storageService.getJwtToken();\r\n }\r\n\r\n /**\r\n * @method isTokenAlive\r\n * this function checks that there is data of the session for the current user (token and\r\n * expiration time) and that the token has not expired.\r\n * @returns {boolean} a boolean indicating if there exists a token in the local storage and it\r\n * has not expired.\r\n */\r\n public isTokenAlive(): boolean {\r\n return this.isLoggedIn() && !isTokenExpired(this._storageService.getJwtToken());\r\n }\r\n\r\n /**\r\n * @method isTokenExpired\r\n * this function checks that there is data of the session for the current user (token and\r\n * expiration time) and that the token has expired.\r\n * @returns {boolean} a boolean indicating if there exists a token in the local storage and it\r\n * has expired.\r\n */\r\n public isTokenExpired(): boolean {\r\n return !this.isLoggedIn() || isTokenExpired(this._storageService.getJwtToken());\r\n }\r\n\r\n /**\r\n * @method login\r\n * POST: authenticates a user using their email/password with the backend (database) server.\r\n * this function stores the data of the authenticated user in the local storage, for its use in\r\n * the inmediate future.\r\n * additionally this function clears the session cache, allowing to refresh the planning data\r\n * in the new session.\r\n * @param user > the data of the user to authenticate. the properties\r\n * that are used for the authentication are email and password.\r\n * @param options > (optional) an object with a \"headers\" property\r\n * with the HTTP headers to send in the request.\r\n * @returns {Observable} the token generated to access the\r\n * private zone, with the data of the user encapsulated in it.\r\n */\r\n public logIn(user: User, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable {\r\n // clean cache for planning data\r\n this._storageService.cleanSession();\r\n // gets the authentication token\r\n return this._http\r\n .post<{ TokenValue: string }>(`${this._uri}/login/user-token`, { username: user.UserName, password: user.Password }, { headers })\r\n .pipe(\r\n // prevent the receiver of this Observable from accidentally\r\n // triggering multiple POST requests due to multiple subscriptions\r\n shareReplay(),\r\n map(token => token.TokenValue),\r\n tap(token => {\r\n this._storageService.setJwtToken(token);\r\n }),\r\n // gets the user (checks if exists a user with these credentials)\r\n switchMap(_ => this._usersService.getUser()),\r\n tap(user => {\r\n this._storageService.setUser(user);\r\n this.user$.next(this.getUser());\r\n // sends the identifier to the InAppBrowser in order to register the user for OneSignal\r\n this._postInAppBrowserUserMessage(user);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @method logout\r\n * this function removes the data of the authenticated user from the local storage.\r\n * @returns {Observable} only to inform when the method has completed.\r\n */\r\n public logOut(): Observable {\r\n if (this.isLoggedIn()) {\r\n let _user = this.getUser();\r\n // cleaning\r\n this._storageService.clean();\r\n this.user$.next(null);\r\n // notification\r\n this._errorsService.handleSuccess('successLogout', false, _user.UserName);\r\n return of(true);\r\n }\r\n return of(false);\r\n }\r\n\r\n /**\r\n * @method patchRGPDAccepted\r\n * Updates the user object stored in the session, updating the RGPDAccepted field to the date of\r\n * Now.\r\n * @returns {User} the user with the RGPDAccepted field updated (to true).\r\n */\r\n public patchRGPDAccepted(): User {\r\n let _user = this.getUser();\r\n _user.RGPDAccepted = DateTime.local();\r\n this.setUser(_user);\r\n return _user;\r\n }\r\n\r\n /**\r\n * @method patchLastExternalLogin\r\n * Updates the user object stored in the session, updating the LastExternalLogin field to the\r\n * date of Now.\r\n * @returns {User} the user with the LastExternalLogin field updated (to true).\r\n */\r\n public patchLastExternalLogin(): User {\r\n let _user = this.getUser();\r\n _user.LastExternalLogin = DateTime.local();\r\n this.setUser(_user);\r\n return _user;\r\n }\r\n\r\n /**\r\n * @method postRecoverPasswordRequest\r\n * POST: creates a request of new password, what in case of success generates a new password and\r\n * sends it to the recovery email address (that must match the one passed by parameter).\r\n * @param username > the usename of the user (unique).\r\n * @param email > the email address associated to the user account.\r\n * @returns {Observable} true if the operation succeeded, false otherwise.\r\n */\r\n public postRecoverPasswordRequest(username: string, email: string, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .post(`${this._uri}/users/recover-password`, { username, email }, { headers, observe: DEFAULT_HTTP_OBSERVE })\r\n .pipe(\r\n //tap(_ => this._errorsService.handleSuccess('successPasswordRecover', true)), // useless, since a redirect is done\r\n map(response => response.ok)\r\n );\r\n }\r\n\r\n /**\r\n * @method _postInAppBrowserUserMessage\r\n * Sends a message to the WebView object of the InAppBrowser plugin for registering the device for\r\n * the current user\r\n * @param user > object with the data of the user, whose Id is sent to the InAppBrowser instance\r\n * for registering that Id with the OneSignal service\r\n */\r\n private _postInAppBrowserUserMessage(user: User): void\r\n {\r\n let _window = window as any;\r\n if (_window.webkit && _window.webkit.messageHandlers && _window.webkit.messageHandlers.cordova_iab)\r\n {\r\n _window.webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({ userId: user.Id.toString() }));\r\n }\r\n }\r\n\r\n /**\r\n * @method _postInAppBrowserClearCacheMessage\r\n * Sends a message to the WebView object of the InAppBrowser plugin for clearing the WebView cache.\r\n */\r\n private _postInAppBrowserClearCacheMessage(): void\r\n {\r\n let _window = window as any;\r\n if (_window.webkit && _window.webkit.messageHandlers && _window.webkit.messageHandlers.cordova_iab)\r\n {\r\n _window.webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({ clearCache: true }));\r\n }\r\n }\r\n\r\n}\r\n","import { DateTime } from \"luxon\";\r\n\r\n/**\r\n * @function base64Decode\r\n * decode a base64 string to its ASCII representation.\r\n * credits for decoder goes to https://github.com/atk\r\n * @param str > the base64 string to be decoded\r\n * @returns {string} the ASCII string corresponding to the base64 one\r\n * passed by parameter\r\n */\r\nexport function base64Decode(str: string): string\r\n{\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n let output = '';\r\n str = String(str).replace(/=+$/, '');\r\n if (str.length % 4 === 1)\r\n {\r\n throw new Error('\"atob\" failed: The string to be decoded is not correctly encoded.');\r\n }\r\n // tslint:disable:no-bitwise\r\n for (\r\n // initialize result and counters\r\n let bc = 0, bs: any, buffer: any, idx = 0;\r\n // get next character\r\n (buffer = str.charAt(idx++));\r\n // character found in table? initialize bit storage and add its ascii value;\r\n ~buffer &&\r\n (\r\n (bs = bc % 4 ? bs * 64 + buffer : buffer),\r\n // and if not first of each 4 characters,\r\n // convert the first 8 bits to one ascii character\r\n bc++ % 4\r\n )\r\n ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\r\n : 0\r\n )\r\n {\r\n // try to find character in table (0-63, not found => -1)\r\n buffer = chars.indexOf(buffer);\r\n }\r\n // tslint:enable:no-bitwise\r\n return output;\r\n}\r\n\r\n/**\r\n * @function base64DecodeUnicode\r\n * decode an unicode string to its ASCII representation.\r\n * @param str > the unicode string to be decoded\r\n * @returns {string} the ASCII string corresponding to the unicode one\r\n * passed by parameter\r\n */\r\nexport function base64DecodeUnicode(str: any)\r\n{\r\n return decodeURIComponent(\r\n Array.prototype.map\r\n .call(base64Decode(str), (c: any) => {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join('')\r\n );\r\n}\r\n\r\n/**\r\n * @function decodeToken\r\n * this method decodes the middle part of the JSON Web Token passed by\r\n * parameter, returning the content of it\r\n * @param token > the JWT to decode\r\n * @returns {any} the JSON data parsed from the JWT\r\n */\r\nexport function decodeToken(token: string): { exp: number; [key: string]: unknown; }\r\n{\r\n // checks that there is a token to decode\r\n if (token === null)\r\n {\r\n return null;\r\n }\r\n // splits the token by dot to check the number of parts (3 for JWT)\r\n const parts = token.split('.');\r\n if (parts.length !== 3)\r\n {\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error('The inspected token doesn\\'t appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.');\r\n }\r\n // decode the middle part of the token and returns it\r\n const decoded = urlBase64Decode(parts[1]);\r\n if (!decoded)\r\n {\r\n throw new Error('Cannot decode the token.');\r\n }\r\n return JSON.parse(decoded);\r\n}\r\n\r\n/**\r\n * @function getTokenExpirationDate\r\n * this method decodes the JWT and returns the expiration date encapsulated\r\n * on it\r\n * @param tokDateTime the JWT to decode and from which to extract the expiration\r\n * date\r\n * @returns {DateTime | null} the DateTime extracted from the token, or null if no\r\n * DateTime is present\r\n */\r\nexport function getTokenExpirationDate(token: string): DateTime | null\r\n{\r\n // decodes the token\r\n const decoded = decodeToken(token);\r\n // if the JSON extracted doesn't have the exp property, returns null\r\n if (!decoded.hasOwnProperty('exp'))\r\n {\r\n return null;\r\n }\r\n // builds the date with the seconds extracted from the 'exp' property\r\n return DateTime.fromSeconds(decoded.exp);\r\n}\r\n\r\n/**\r\n * @method isTokenExpired\r\n * this method decodes the JWT and checks that the expiration date encapsulated\r\n * in it is after the current moment\r\n * @param token > the JWT to decode and from which to extract the expiration\r\n * date\r\n * @param offsetSeconds > the number of seconds that are added to the expiration\r\n * date to check if the token is expired or not\r\n * @returns {boolean} returns true if the token is expired, false otherwise\r\n */\r\nexport function isTokenExpired(token: string, offsetSeconds?: number): boolean\r\n{\r\n // if no token or empty returns 'expired'\r\n if (token === null || token === '')\r\n {\r\n return true;\r\n }\r\n // gets the expiration date from the token\r\n const date = getTokenExpirationDate(token);\r\n offsetSeconds = offsetSeconds || 0;\r\n // if no date, returns 'expired'\r\n if (date === null)\r\n {\r\n return true;\r\n }\r\n // returns the comparison between the date parsed and the current moment plus the offset (ms)\r\n return !(date > DateTime.local().plus({ seconds: offsetSeconds }));\r\n}\r\n\r\n/**\r\n * @function urlBase64Decode\r\n * decode a URL string in base64 to its ASCII representation.\r\n * @param str > the URL base64 string to be decoded\r\n * @returns {string} the ASCII string corresponding to the URL one\r\n * passed by parameter\r\n */\r\nexport function urlBase64Decode(str: string): string\r\n{\r\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n switch (output.length % 4)\r\n {\r\n case 0: { break; }\r\n case 2: { output += '=='; break; }\r\n case 3: { output += '='; break; }\r\n default: { throw new Error('Illegal base64url string!'); }\r\n }\r\n return base64DecodeUnicode(output);\r\n}\r\n","export * from 'app/core/auth/public-api';\r\n","export * from 'app/core/auth/auth.guard';\r\nexport * from 'app/core/auth/auth.provider';\r\nexport * from 'app/core/auth/auth.service';\r\nexport * from 'app/core/auth/auth.utils';\r\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport { ENVIRONMENT_INITIALIZER, EnvironmentProviders, inject, LOCALE_ID, Provider } from '@angular/core';\r\nimport { provideAuth } from 'app/core/auth';\r\nimport { provideErrorHandling } from 'app/core/errors';\r\nimport { httpRequestInterceptor, HttpRequestService } from 'app/core/http-request';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This is the app core provider, providing authentication, error handling and http client, among\r\n * other things.\r\n */\r\nexport const provideCore = (): Array =>\r\n{\r\n const providers: Array = [\r\n provideAuth(),\r\n provideErrorHandling(),\r\n provideHttpClient(withInterceptors([httpRequestInterceptor])),\r\n {\r\n provide : LOCALE_ID, // Mandatory for date/currency pipes\r\n useValue: window.navigator.language.substring(0, 2)\r\n },\r\n {\r\n provide : ENVIRONMENT_INITIALIZER,\r\n useValue: () => inject(HttpRequestService),\r\n multi : true,\r\n },\r\n ];\r\n return providers;\r\n}\r\n","import { ErrorHandler, Provider } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/errors';\r\n\r\nexport const provideErrorHandling = (): Array =>\r\n{\r\n return [\r\n {\r\n provide: ErrorHandler,\r\n useClass: ErrorsService\r\n }\r\n ];\r\n};\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { ErrorHandler, Injectable, isDevMode } from '@angular/core';\r\nimport { Router, UrlTree } from '@angular/router';\r\nimport { StorageService } from 'app/core/services';\r\nimport { DEFAULT_COOKIE_NAME, INFO_LEVEL_DANGER, INFO_LEVEL_SUCCESS, INFO_LEVEL_INFO, INFO_LEVEL_WARNING, ERROR_WHITELISTED_ROUTES } from 'app/shared/configuration/settings';\r\nimport { isInRoutes } from 'app/shared/lib';\r\nimport { InfoLevel, Message } from 'app/shared/models';\r\nimport { isBoolean } from 'lodash-es';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { EMPTY, Observable, ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the errors in the application using the messages service to transport the\r\n * messages to the listeners\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorsService implements ErrorHandler\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** sends (and remembers the last 1 value) a true value when an HTTP request is started, and a false value when it is finished */\r\n private _subject: ReplaySubject = new ReplaySubject();\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type BaseService, with the core objects needed to its implementation.\r\n * Basically it provides a service with the base functions to record messages and handle errors.\r\n * @param _cookieService > this service allows to store and retrieve a cookie to save the user\r\n * credentials and allow fast login.\r\n * @param _dialogService > the service used to show alerts in the app.\r\n * @param _messageService > the service used to send messages to the messages component.\r\n * @param _router > the object used to make redirections. this parameter is only required for\r\n * classes that handle HTTP calls.\r\n * @param _storageService > the service used to manage data in the session storage (read, update,\r\n * write and delete operations).\r\n */\r\n constructor(\r\n private _cookieService: CookieService,\r\n private _router: Router,\r\n private _storageService: StorageService\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Accessors\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method onError\r\n * This getter function returns the Observable of the errors that the service has handled, providing that\r\n * information for anyone who wants can subscribe to it through Message objects.\r\n * @returns the Observable of the last error in the application\r\n */\r\n get onError(): Observable\r\n {\r\n return this._subject;\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method handleError\r\n * handle an error (in the server or client) after an (http) operation failed, keeping the\r\n * application running. no needs to unsubscribe, completes after send an empty observable. the\r\n * status classname used to colorize the message is 'error'.\r\n * @param error > object of type Error, HttpErrorResponse, or string to be handled.\r\n * @param notify > (optional) this param is used for non HTTP errors, in which case, decides if it\r\n * should be shown a special method to ensure that the user reads the error (by using a modal pop\r\n * up, a bottom warning, whatever it be used...). this parameter contains the text to shown in that\r\n * such way. there are three possibilities:\r\n * - undefined: (no extra message provided) by default, the message passed in the first parameter\r\n * is taken to be shown in the secure way.\r\n * - null: no message is shown in the secure way.\r\n * - string: the string passed is used to be shown in the secure way.\r\n * @param title > (optional) title associated to the message.\r\n * @param parameters > the collection of parameters that must be passed to the translation message.\r\n * @returns {Observable} an empty observable that lets the application keep running.\r\n */\r\n // tslint:disable-next-line:no-unnecessary-initializer\r\n public handleError(error: HttpErrorResponse | Error | string, notify: boolean = true, title?: string, ...parameters: Object[]): Observable\r\n {\r\n if (error instanceof HttpErrorResponse) // server or connection error happened\r\n {\r\n if (!navigator.onLine) // handle offline error\r\n {\r\n this._log('dangerNoInternetConnection', INFO_LEVEL_DANGER, true);\r\n }\r\n else\r\n {\r\n switch (error.status)\r\n {\r\n case 401: // login error: redirects to login or login-renew\r\n this._log('dangerUserNotAuthorized', INFO_LEVEL_DANGER);\r\n let _result = this.handleUnauthorizedUserError(); // remember me functionality\r\n if (isBoolean(_result))\r\n break;\r\n else\r\n this._router.navigateByUrl(_result);\r\n case 408: // request timeout: no notify\r\n this._log('dangerRequestTimeout', INFO_LEVEL_DANGER);\r\n break;\r\n default: // unspecific error (rest of cases: 404, 500...)\r\n if (!isInRoutes(error.url, ERROR_WHITELISTED_ROUTES))\r\n {\r\n this._log('dangerUnknown', INFO_LEVEL_DANGER, notify);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n else // client error (Angular, ReferenceError...), and library errors (string)\r\n {\r\n this._log(error instanceof Error ? error.message : error, INFO_LEVEL_DANGER, notify, title, parameters);\r\n }\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * @method handleInfo\r\n * handle an object to send an information message which contains regular data. this method is not\r\n * blocking, keeping the application running. no needs to unsubscribe, completes after send the\r\n * message. the status classname used to colorize the message is 'info'.\r\n * @param message > the message to send using the message service to be log or shown in the\r\n * presentation layer (what the observers listening are configured to do with it).\r\n * @param parameters > the collection of parameters that must be passed to the translation message.\r\n * @returns {Observable} an empty observable that lets the application keep running.\r\n */\r\n public handleInfo(message: string, ...parameters: any[]): Observable\r\n {\r\n this._log(message, INFO_LEVEL_INFO, false, undefined, parameters);\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * @method handleMessage\r\n * handle an object to send a message which contains the data to shown in the presentation layer.\r\n * this method is not blocking, keeping the application running. no needs to unsubscribe, completes\r\n * after send the message.\r\n * @param message > the message to send using the message service to be log or shown in the\r\n * presentation layer (what the observers listening are configured to do with it). currently an\r\n * identifier of a translation is used as message.\r\n * @param status > the status message/classname used to colorize the message.\r\n * @param notify > optional value to ensure that a message is seen by the user (using an extra way\r\n * to show the message).\r\n * @param title > (optional) title associated to the message.\r\n * @param parameters > the collection of parameters that must be passed to the translation message.\r\n * @returns {Observable} an empty observable that lets the application keep running.\r\n */\r\n public handleMessage(message: string, status: InfoLevel, notify = false, title?: string, ...parameters: any[]): Observable\r\n {\r\n this._log(message, status, notify, title, parameters);\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * @method handleSuccess\r\n * handle an object to send a message aftera an operation that succeeded. let the app continue. no\r\n * needs to unsubscribe, completes after send the (optional) result. the status classname used to\r\n * colorize the message is 'ok'.\r\n * @param message > the message to send using the message service to be log or shown in the\r\n * presentation layer (what the observers listening are configured to do with it). currently an\r\n * identifier of a translation is used as message.\r\n * @param notify > (optional) value to ensure that a message is seen by the user (using an extra way\r\n * to show the message). by default it takes the same value as the message (first) parameter.\r\n * @param title > (optional) title associated to the message.\r\n * @param parameters > the collection of parameters that must be passed to the translation message.\r\n * @returns {Observable} an empty observable that lets the application keep running.\r\n */\r\n public handleSuccess(message: string, notify = true, title?: string, ...parameters: any[]): Observable\r\n {\r\n this._log(message, INFO_LEVEL_SUCCESS, notify, title, parameters);\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * @method handleUnauthorizedUserError\r\n * handles specifically the 401 errors, redirecting to the login renew page when there exists a\r\n * cookie (not expired) with the user credentials or to the login page in the rest of cases.\r\n * if an url is passed by parameter is handling an authorization request, otherwise is a rejected\r\n * request.\r\n * @param url > the url requested whose access has been denied (optional).\r\n * @return {boolean} a true value if the user can be automatically authenticated, false otherwise.\r\n */\r\n public handleUnauthorizedUserError(url?: string): boolean | UrlTree\r\n {\r\n // if the current url is the login page, a 401 error means nothing\r\n if (this._router.url.match(/\\/account\\/login/gi))\r\n {\r\n return false;\r\n }\r\n // remember me functionality: if the cookie exists is because it has not expired yet\r\n if (this._cookieService.check(DEFAULT_COOKIE_NAME))\r\n {\r\n // clears the cache that stores the planning data\r\n this._storageService.cleanSession();\r\n // redirection to the renew login page\r\n return this._router.createUrlTree(['/account/login-renew'], { queryParams: { returnUrl: url ?? this._router.routerState.snapshot.url } });\r\n }\r\n else\r\n {\r\n // redirection to login page (except if requested login)\r\n return this._router.createUrlTree(['/account/login'], { queryParams: { returnUrl: url ?? this._router.routerState.snapshot.url } });\r\n }\r\n }\r\n\r\n /**\r\n * @method handleWarning\r\n * handle an object to send an information message which contains regular data. this method is not\r\n * blocking, keeping the application running.\r\n * no needs to unsubscribe, completes after send the message. the status classname used to\r\n * colorize the message is 'warning'.\r\n * @param message > the message to send using the message service to be log or shown in the\r\n * presentation layer (what the observers listening are configured to do with it). currently an\r\n * identifier of a translation is used as message.\r\n * @param notify > optional value to ensure that a message is seen by the user (using an extra way\r\n * to show the message).\r\n * @param title > (optional) title associated to the message.\r\n * @param parameters > the collection of parameters that must be passed to the translation message.\r\n * @returns {Observable} an empty observable that lets the application keep running.\r\n */\r\n public handleWarning(message: string, notify = false, title?: string, ...parameters: any[]): Observable\r\n {\r\n this._log(message, INFO_LEVEL_WARNING, notify, title, parameters);\r\n return EMPTY;\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method log\r\n * calls the observer with the data of the error\r\n * @param body > the message, properly said.\r\n * @param type > the status (and classname) of the message (danger, success, info...).\r\n * @param notify > this property (is optional) is used to send the error to the listeners. If\r\n * false or null/undefined, then the message should be managed in a discreet way: the error will\r\n * only be printed in the browser console (if it is a not production environment).\r\n * @param title > the title of the message (optional) contain the message to show to the user (through a\r\n * method that ensures that the message reaches the user).\r\n */\r\n private _log(body: string, type: InfoLevel, notify: boolean = true, title?: string, ...parameters: unknown[]): void\r\n {\r\n if (isDevMode())\r\n {\r\n console.log(body);\r\n }\r\n if (notify)\r\n {\r\n this._subject.next({ body: body, type: type, notify: notify, ...(title ? { title: title } : {}), ...parameters });\r\n }\r\n }\r\n\r\n}\r\n","export * from 'app/core/errors/public-api';\r\n","export * from 'app/core/errors/errors.provider';\r\nexport * from 'app/core/errors/errors.service';\r\n","import { HttpEvent, HttpHandlerFn, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { HttpRequestService } from 'app/core/http-request/http-request.service';\r\nimport { reviveDates } from 'app/shared/lib';\r\nimport { finalize, Observable, tap } from 'rxjs';\r\n\r\n/**\r\n * This interceptor manages the error handling and the loading service for all\r\n * the HTTP requests, catching all the http requests in order to inform the\r\n * presentation layer when a request has begun or finished\r\n *\r\n * @author jmgonzalezr\r\n * @version 2.0\r\n */\r\nexport const httpRequestInterceptor = (request: HttpRequest, next: HttpHandlerFn): Observable> =>\r\n{\r\n const httpRequestService = inject(HttpRequestService);\r\n\r\n // increments the number of pending requests\r\n httpRequestService.increment();\r\n // if (request.responseType === 'json') {\r\n // const newHttpRequest = request.clone({\r\n // responseType: 'text',\r\n // body: JSON.stringify(request.body, dateReplacer)\r\n // });\r\n return next(request)\r\n .pipe(\r\n // retry(1),\r\n tap(\r\n // this method handles a success in the response of the captured request. it parses the\r\n // Date objects in 8601 format and convert them to DateTime objects\r\n (event: HttpEvent): void =>\r\n {\r\n if (event instanceof HttpResponse)\r\n {\r\n reviveDates((event as HttpResponse>).body);\r\n }\r\n }/*,\r\n // Allows to do something when received an error response\r\n (error: any): Observable => EMPTY*/\r\n ),\r\n finalize(() => { // loading service\r\n // decrements the number of pending requests\r\n httpRequestService.decrement();\r\n })\r\n );\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service fires an observable value (to the observers listening) when any of its methods is\r\n * called; false for hide and true for show.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpRequestService\r\n{\r\n /** this variable contains the number of pending http requests in a moment */\r\n private _pendingRequests: number;\r\n /** sends (and remembers the last 1 value) a true value when an HTTP request is started, and a false value when it is finished */\r\n private _subject: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n /**\r\n * @constructor\r\n * Creates an instance of the HttpRequestService service, that controls whether there is a\r\n * request pending or not. Initializes the counter of pending requests.\r\n */\r\n constructor()\r\n {\r\n this._pendingRequests = 0;\r\n }\r\n\r\n /**\r\n * @method loading$\r\n * This getter function returns the Observable of HTTP requests, passing boolean values wheren there\r\n * is a request pending (true) or not (false), for anyone who wants can subscribe to it.\r\n * @returns the Observable of the loading status\r\n */\r\n get loading$(): Observable\r\n {\r\n return this._subject;\r\n }\r\n\r\n /**\r\n * @method increment\r\n * this function increments the number of pending requests and, if the total number is 1 raises the flag\r\n * of active pending requests (because there is at least one pending request).\r\n */\r\n public increment(): void\r\n {\r\n this._pendingRequests++;\r\n if (1 === this._pendingRequests) {\r\n this._subject.next(true);\r\n }\r\n }\r\n\r\n /**\r\n * @method decrement\r\n * this function decrements the number of pending requests and, if the total number is 0 lowers the flag\r\n * of active pending requests (because there are no pending requests).\r\n */\r\n public decrement(): void\r\n {\r\n this._pendingRequests--;\r\n if (0 === this._pendingRequests) {\r\n this._subject.next(false);\r\n }\r\n }\r\n\r\n}\r\n","export * from 'app/core/http-request/public-api';\r\n","export * from 'app/core/http-request/http-request.service';\r\nexport * from 'app/core/http-request/http-request.interceptor';\r\n","import { Injectable } from '@angular/core';\r\nimport { UntypedFormGroup, ValidationErrors, AbstractControl, FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service offers a useful set of utility methods for parsing, encoding, decoding and\r\n * managing images as strings\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormUtilService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @function getFormValidationErrors\r\n * this function retrieves all the errors of the controls of the form passed by parameter (and\r\n * recursively retrieves the errors of all its controls and group of controls), and returns an\r\n * array of strings with all the errors\r\n * @param form > the form to analyze for errors\r\n * @returns {{id:string}[]} an array of strings with all the localization identifiers of all the\r\n * errors found in the analysis of the FormGroup object given\r\n */\r\n public getFormValidationErrors(form: FormGroup): { id: string }[] {\r\n return this._getFormValidationErrors(form.controls)\r\n .map(error =>\r\n {\r\n if (error) {\r\n switch (error.errorName) {\r\n case 'equalvalues': return { id: 'dangerFieldsAreDifferent' };\r\n case 'greaterthan': return { id: 'dangerEndDateMustBeGreaterThanStartDate' };\r\n case 'pattern': return { id: 'dangerFieldIncorrectPattern' };\r\n case 'required': return { id: 'dangerFieldsRequired' };\r\n default: return { id: 'dangerAnyField' };\r\n }\r\n }\r\n return undefined;\r\n })\r\n .filter(Boolean);\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @function getFormValidationErrors\r\n * this function recursively retrieves all the errors of the controls of\r\n * the AbstractControl passed by parameter (and is a control has controls\r\n * itself, retrieves its validation errors too), and returns an array of\r\n * the errors, each item with the name of the control, the type of the\r\n * error, and the value of the error\r\n * @param controls > an object of type AbstractControl susceptible of having\r\n * a collection of controls, which are wanted to be analyzed looking for\r\n * errors\r\n * @returns {{ controlName: string; errorName: string; errorValue: any; }[]}\r\n * an array of the errors found in the analysis of the control given\r\n */\r\n // tslint:disable-next-line:max-line-length\r\n private _getFormValidationErrors(controls: { [key: string]: AbstractControl }): { controlName: string; errorName: string; errorValue: any; }[]\r\n {\r\n let errors: { controlName: string; errorName: string; errorValue: any; }[] = [];\r\n Object.keys(controls).forEach(key =>\r\n {\r\n const control = controls[key];\r\n if (control instanceof FormGroup)\r\n {\r\n errors = errors.concat(this._getFormValidationErrors(control.controls));\r\n }\r\n const controlErrors: ValidationErrors = controls[key].errors;\r\n if (controlErrors !== null)\r\n {\r\n Object.keys(controlErrors).forEach(keyError =>\r\n errors.push({\r\n controlName: key,\r\n errorName: keyError,\r\n errorValue: controlErrors[keyError]\r\n })\r\n );\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n}\r\n","export * from 'app/core/services/public-api';\r\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service returns the translations given the identifier of the translation resource and the\r\n * interpolated parameters needed.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizationService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method get\r\n * this function is used to get the translation given its identifier and the\r\n * needed parameters (if any).\r\n * @param id > the identifier of the resource translation\r\n * @param params > the (optional) parameters needed to interpolate the resource.\r\n * @returns {string} the translation requested.\r\n */\r\n public get(id: string, ...params: (string | Object)[]): string\r\n {\r\n switch(id)\r\n {\r\n case 'dangerAnyField': return $localize `:@@dangerAnyField:`;\r\n case 'dangerAtLeastOneFieldIsRequired': return $localize `:@@dangerAtLeastOneFieldIsRequired:${params[0]}:INTERPOLATION:`;\r\n case 'dangerBackendServer': return $localize `:@@dangerBackendServer:`;\r\n case 'dangerCoordinatorUserCallAlreadyExists': return $localize `:@@dangerCoordinatorUserCallAlreadyExists:`;\r\n case 'dangerCoordinatorUserIssueNotificationAlreadyExists': return $localize `:@@dangerCoordinatorUserIssueNotificationAlreadyExists:`;\r\n case 'dangerDownloadingDocument': return $localize `:@@dangerDownloadingDocument:`;\r\n case 'dangerEndDateMustBeGreaterThanStartDate': return $localize `:@@dangerEndDateMustBeGreaterThanStartDate:`;\r\n case 'dangerFieldIncorrectPattern': return $localize `:@@dangerFieldIncorrectPattern:`;\r\n case 'dangerFieldMaxValue': return $localize `:@@dangerFieldMaxValue:${params[0]}:INTERPOLATION:${params[1]}:INTERPOLATION_1:`;\r\n case 'dangerFieldMessage': return $localize `:@@dangerFieldMessage:${params[0]}:INTERPOLATION:`;\r\n case 'dangerFieldMinValue': return $localize `:@@dangerFieldMinValue:${params[0]}:INTERPOLATION:${params[1]}:INTERPOLATION_1:`;\r\n case 'dangerFieldRequired': return $localize `:@@dangerFieldRequired:${params[0]}:INTERPOLATION:`;\r\n case 'dangerFieldsAreDifferent': return $localize `:@@dangerFieldsAreDifferent:`;\r\n case 'dangerFieldsMustBeEqual': return $localize `:@@dangerFieldsMustBeEqual:${params[0]}:INTERPOLATION:`;\r\n case 'dangerFieldsRequired': return $localize `:@@dangerFieldsRequired:`;\r\n case 'dangerFieldWrongPattern': return $localize `:@@dangerFieldWrongPattern:${params[0]}:INTERPOLATION:`;\r\n case 'dangerIncorrectPassword': return $localize `:@@dangerIncorrectPassword:`;\r\n case 'dangerNoInternetConnection': return $localize `:@@dangerNoInternetConnection:`;\r\n case 'dangerSendingEmail': return $localize `:@@dangerSendingEmail:`;\r\n case 'dangerTitleDefaultModal': return $localize `:@@dangerTitleDefaultModal:`;\r\n case 'dangerUnknown': return $localize `:@@dangerUnknown:`;\r\n case 'dangerUserNotAuthorized': return $localize `:@@dangerUserNotAuthorized:`;\r\n case 'dangerUserNotFound': return $localize `:@@dangerUserNotFound:`;\r\n case 'dangerWorkCenterClosed': return $localize `:@@dangerWorkCenterClosed:`;\r\n case 'infoPhotoNotFound': return $localize `:@@infoPhotoNotFound:`;\r\n case 'infoTitleDefaultModal': return $localize `:@@infoTitleDefaultModal:`;\r\n case 'successCheckedTasksLoaded': return $localize `:@@successCheckedTasksLoaded:`;\r\n case 'successCommentSent': return $localize `:@@successCommentSent:`;\r\n case 'successCoordinatorLoaded': return $localize `:@@successCoordinatorLoaded:`;\r\n case 'successCoordinatorUserCallCreated': return $localize `:@@successCoordinatorUserCallCreated:`;\r\n case 'successCoordinatorUserCallsLoaded': return $localize `:@@successCoordinatorUserCallsLoaded:`;\r\n case 'successCoordinatorUserIssueNotificationCreated': return $localize `:@@successCoordinatorUserIssueNotificationCreated:`;\r\n case 'successCoordinatorUserIssueNotificationDeleted': return $localize `:@@successCoordinatorUserIssueNotificationDeleted:`;\r\n case 'successCoordinatorUserIssueNotificationsLoaded': return $localize `:@@successCoordinatorUserIssueNotificationsLoaded:`;\r\n case 'successCoordinatorUserIssueNotificationUpdated': return $localize `:@@successCoordinatorUserIssueNotificationUpdated:`;\r\n case 'successCopaymentsLoaded': return $localize `:@@successCopaymentsLoaded:`;\r\n case 'successCurrentIncomePerCapitaLoaded': return $localize `:@@successCurrentIncomePerCapitaLoaded:`;\r\n case 'successDocumentDownloaded': return $localize `:@@successDocumentDownloaded:`;\r\n case 'successLogin': return $localize `:@@successLogin:${params[0]}:INTERPOLATION:`;\r\n case 'successLoginRenew': return $localize `:@@successLoginRenew:${params[0]}:INTERPOLATION:`;\r\n case 'successLogout': return $localize `:@@successLogout:${params[0]}:INTERPOLATION:`;\r\n case 'successOpenBtLoaded': return $localize `:@@successOpenBtLoaded:`;\r\n case 'successPasswordChange': return $localize `:@@successPasswordChange:`;\r\n case 'successPasswordRecover': return $localize `:@@successPasswordRecover:`;\r\n case 'successPhotoLoaded': return $localize `:@@successPhotoLoaded:`;\r\n case 'successPlanningEventLoaded': return $localize `:@@successPlanningEventLoaded:`;\r\n case 'successPlanningEventsLoaded': return $localize `:@@successPlanningEventsLoaded:`;\r\n case 'successRGPDAccepted': return $localize `:@@successRGPDAccepted:`;\r\n case 'successTasksLoaded': return $localize `:@@successTasksLoaded:${params[0]}:INTERPOLATION:`;\r\n case 'successTitleDefaultModal': return $localize `:@@successTitleDefaultModal:`;\r\n case 'successUserContractsLoaded': return $localize `:@@successUserContractsLoaded:${params[0]}:INTERPOLATION:`;\r\n case 'successUserLoaded': return $localize `:@@successUserLoaded:${params[0]}:INTERPOLATION:`;\r\n case 'textRGPDAcceptation': return $localize `:@@textRGPDAcceptation:`;\r\n case 'textRGPDTitle': return $localize `:@@textRGPDTitle:`;\r\n case 'warningDeleteCoordinatorUserIssueRequest': return $localize `:@@warningDeleteCoordinatorUserIssueRequest:`;\r\n case 'warningPasswordChange': return $localize `:@@warningPasswordChange:`;\r\n case 'warningPasswordChangeTitle': return $localize `:@@warningPasswordChangeTitle:`;\r\n case 'warningTitleDefaultModal': return $localize `:@@warningTitleDefaultModal:`;\r\n default: return id;\r\n }\r\n }\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { ENDPOINT_BACKEND } from 'app/shared/configuration/settings';\r\nimport { reduce } from 'lodash';\r\nimport { Observable, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the sending of emails.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MailService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to send emails to the backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/mail`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type UsersService, with the core\r\n * objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method send\r\n * GET: sends an email to the backend (database) server given the sender email, the list of files,\r\n * and name of the sender (used as subject).\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param to > the email address of the sender (respond to field).\r\n * @param subject > the subject of the email.\r\n * @param message > the content of the email.\r\n * @param attachments > the list of files wanted to be uploaded (attached to the email)\r\n * @returns {Observable} a true value when the file was successfully uploaded, false\r\n * otherwise.\r\n */\r\n public send(to: string[], subject: string, message: string, attachments: FileList): Observable\r\n {\r\n let data: FormData = new FormData();\r\n data.append('json', JSON.stringify({\r\n to: to,\r\n subject: subject,\r\n body: message\r\n }));\r\n data = reduce(attachments, function (data, file, i)\r\n {\r\n data.append('file' + i, file, file.name);\r\n return data;\r\n }, data);\r\n return this._http\r\n .post(`${this._uri}/send`, data/*, options*/)\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCommentSent'))\r\n //catchError(err => this._errorsService.handleError(err))\r\n );\r\n }\r\n\r\n}\r\n","export * from 'app/core/auth/auth.service';\r\nexport * from 'app/core/errors/errors.service';\r\nexport * from 'app/core/services/localization.service';\r\nexport * from 'app/core/services/mail.service';\r\nexport * from 'app/core/services/storage.service';\r\nexport * from 'app/core/services/form-util.service';\r\n","import { Injectable } from '@angular/core';\r\nimport { DATE, ISSUE_REQUEST, JWT_TOKEN, PLANNING, PLANNING_LIFETIME, TODAY, TODAY_LIFETIME, USER, USER_CONTRACTS, USER_CONTRACTS_LIFETIME, USER_CONTRACT_ID } from 'app/shared/configuration/settings';\r\nimport { dateTimeReviver } from 'app/shared/lib';\r\nimport { CoordinatorUserIssueRequest, PlanningEventOccurrence, Task, User, UserContract, WorkCenter, WorkCenterConfiguration, WorkCenterExternalUserWebConfiguration } from 'app/shared/models';\r\nimport { DateTime } from 'luxon';\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the authentication process in the application using the local storage to\r\n * store the access token of the user when he or she is logged in.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type StorageService, a service to store session data in the local storage.\r\n */\r\n constructor(\r\n private _cookieService: CookieService\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method clean\r\n * this function cleans all the data stored in the local storage.\r\n */\r\n public clean(): void\r\n {\r\n localStorage.removeItem(JWT_TOKEN);\r\n localStorage.removeItem(USER);\r\n sessionStorage.removeItem(DATE);\r\n sessionStorage.removeItem(ISSUE_REQUEST);\r\n sessionStorage.removeItem(PLANNING);\r\n sessionStorage.removeItem(TODAY);\r\n }\r\n\r\n /**\r\n * @method cleanSession\r\n * this function cleans all the data stored in the session storage.\r\n */\r\n public cleanSession(): void\r\n {\r\n sessionStorage.removeItem(DATE);\r\n sessionStorage.removeItem(ISSUE_REQUEST);\r\n sessionStorage.removeItem(PLANNING);\r\n sessionStorage.removeItem(TODAY);\r\n }\r\n\r\n /**\r\n * @method getDate\r\n * this function returns the date stored in the local storage (presumably when the user has\r\n * requested to query the detail of a day in the calendar component).\r\n * @returns {DateTime} the selected date when navigating from calendar to calendar detail.\r\n */\r\n public getDate(): DateTime\r\n {\r\n const _date = sessionStorage.getItem(DATE);\r\n return !!_date\r\n ? DateTime.fromISO(_date)\r\n : null;\r\n }\r\n\r\n /**\r\n * @function getIssueRequest\r\n * this function gets the coordinator user issue request object stored in the session.\r\n * @returns {CoordinatorUserIssueRequest} the issue request currently stored in the session.\r\n */\r\n public getIssueRequest(): CoordinatorUserIssueRequest\r\n {\r\n return JSON.parse(sessionStorage.getItem(ISSUE_REQUEST), dateTimeReviver);\r\n }\r\n\r\n /**\r\n * @method getJwtToken\r\n * this function returns the JWT token stored in the local storage\r\n * @returns {string} a string with the JWT token stored in the local storage,\r\n * or null if no token is registered\r\n */\r\n public getJwtToken(): string\r\n {\r\n return localStorage.getItem(JWT_TOKEN);\r\n }\r\n\r\n /**\r\n * @method getPlanning\r\n * this function returns the cache stored in the session storage (if exists and has a lifetime less\r\n * than the time specified in the PLANNING_LIFETIME).\r\n * @param date > a date (the first day of the month) whose full month schedule is requested.\r\n * @returns {Map} an object with the month schedule that is loaded in the current session.\r\n */\r\n public getPlanning(date: DateTime): { Date: DateTime, Agenda: PlanningEventOccurrence[], Tasks: Task[] }[]\r\n {\r\n // gets the plannings stored in the session storage as an object\r\n const _cache = JSON.parse(sessionStorage.getItem(PLANNING), dateTimeReviver);\r\n if (!_cache)\r\n {\r\n return null;\r\n }\r\n // gets the data of the planning stored as a Map\r\n let _data = new Map(_cache);\r\n // gets the planning of the requested month (if exists)\r\n const _planning = _data.get(date.toMillis());\r\n // checks that there is a planning for the requested month\r\n if (!_planning)\r\n {\r\n return null;\r\n }\r\n // checks validity of the data\r\n if (DateTime.fromMillis(_planning.timestamp).plus({ seconds: PLANNING_LIFETIME }) > DateTime.local())\r\n {\r\n return _planning.schedule;\r\n }\r\n else\r\n {\r\n // if the data is expired remove the entry from the map stored in the session storage\r\n _data.delete(date.toMillis());\r\n }\r\n // stores the map into the session\r\n if (_data.size)\r\n {\r\n sessionStorage.setItem(PLANNING, JSON.stringify(Array.from(_data.entries())));\r\n }\r\n // if no entries in the map, removes the map from the session\r\n else\r\n {\r\n sessionStorage.removeItem(PLANNING);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * @method getPlanningDate\r\n * this function returns the cache stored in the session storage (if exists and has a lifetime\r\n * less than the time specified in the PLANNING_LIFETIME) for the day of the month specified in\r\n * the date parameter.\r\n * @param date > an optional date for which to look for the schedule. If not provided it will\r\n * be used the date stored in the session.\r\n * @returns {Date:DateTime,Agenda:PlanningEventOccurrence[],Tasks:Task[]} an object with the\r\n * schedule planned for s loaded in the current session.\r\n */\r\n public getPlanningDate(date: DateTime = undefined): { Date: DateTime, Agenda: PlanningEventOccurrence[], Tasks: Task[] }\r\n {\r\n // gets the date to use for the request\r\n const _date = date ?? DateTime.fromISO(sessionStorage.getItem(DATE));\r\n // gets the month planning stored in the session storage, if exists\r\n const _planning = this.getPlanning(_date.startOf('month'));\r\n if (!_planning)\r\n {\r\n return null;\r\n }\r\n // looks for the specified date within the month\r\n return _planning.find(item => _date.hasSame(item.Date, 'day'));\r\n }\r\n\r\n /**\r\n * @method getToday\r\n * this function returns the planning of today stored in the session storage (if exists and has a\r\n * lifetime minor than the time specified in the TODAY_LIFETIME settings).\r\n * @returns { Agenda: PlanningEventOccurrence[], Tasks: Task[] } an object with the today schedule\r\n * loaded in the current session.\r\n */\r\n public getToday(): { Agenda: PlanningEventOccurrence[], Tasks: Task[] }\r\n {\r\n let _data = JSON.parse(sessionStorage.getItem(TODAY), dateTimeReviver);\r\n // checks the validity of data\r\n if (_data && _data.timestamp.plus({ seconds: TODAY_LIFETIME }) > DateTime.local())\r\n {\r\n return _data.schedule;\r\n }\r\n // if the data is expired remove the entry from the session storage\r\n sessionStorage.removeItem(TODAY);\r\n return null;\r\n }\r\n\r\n /**\r\n * @function getUser\r\n * this function gets the user object stored in the session.\r\n * @returns {User} the user currently stored in the session.\r\n */\r\n public getUser(): User\r\n {\r\n return JSON.parse(localStorage.getItem(USER), dateTimeReviver);\r\n }\r\n\r\n /**\r\n * @method getUserContract\r\n * this function returns the user contract whose key is pased by parameter if it is stored in the\r\n * session storage (and has a lifetime less than the time specified in the\r\n * USER_CONTRACTS_LIFETIME).\r\n * @param id > the identifier of the contract requested. If not provided the identifier of the\r\n * user contract stored in the session storage will be used.\r\n * @returns {UserContract} the user contract object loaded in the current session with the\r\n * specified identifier.\r\n */\r\n public getUserContract(id: number = undefined): UserContract\r\n {\r\n // gets the identifier of the user contract to use for the request\r\n const _id = id ?? +sessionStorage.getItem(USER_CONTRACT_ID);\r\n // gets the user contracts stored in the session storage, if exists (and the data has not expired)\r\n const _userContracts = this.getUserContracts();\r\n if (!_userContracts)\r\n {\r\n return null;\r\n }\r\n // looks for the specified contract\r\n return _userContracts.find(contract => contract.Id === _id);\r\n }\r\n\r\n /**\r\n * @method getUserContractId\r\n * this function returns the user contract identifier stored in the session storage (presumably\r\n * when the user has requested to query the detail of a user contract in the user contracts\r\n * component).\r\n * @returns {number} the selected contract identifier when navigating from user contracts to user\r\n * contract detail.\r\n */\r\n public getUserContractId(): number\r\n {\r\n const id = sessionStorage.getItem(USER_CONTRACT_ID);\r\n return !!id ? +id : null;\r\n }\r\n\r\n /**\r\n * @method getUserContracts\r\n * this function returns the user contracts stored in the session storage (if exists and has a\r\n * lifetime less than the time specified in the USER_CONTRACTS_LIFETIME).\r\n * @returns {UserContract[]} an object with the user contracts loaded in the current session.\r\n */\r\n public getUserContracts(): UserContract[]\r\n {\r\n const _data = JSON.parse(sessionStorage.getItem(USER_CONTRACTS), dateTimeReviver);\r\n // checks that there is are some contracts stored in the session\r\n if (!_data)\r\n {\r\n return null;\r\n }\r\n // checks the validity of data\r\n if (DateTime.fromMillis(_data.timestamp).plus({ seconds: USER_CONTRACTS_LIFETIME }) > DateTime.local())\r\n {\r\n return _data.contracts;\r\n }\r\n // if the data is expired remove the entry from the session storage\r\n sessionStorage.removeItem(USER_CONTRACTS);\r\n return null;\r\n }\r\n\r\n /**\r\n * @function getWorkCenter\r\n * this function gets the workcenter object stored in the session, if exists.\r\n * @returns {WorkCenter} the workcenter object corresponding to the authenticated user.\r\n */\r\n public getWorkCenter(): WorkCenter\r\n {\r\n let user = this.getUser();\r\n return user\r\n ? user.Area.WorkCenter\r\n : null;\r\n }\r\n\r\n /**\r\n * @function getWorkCenterConfiguration\r\n * this function gets the workcenter configuration object stored in the session, if exists,\r\n * after decoding it.\r\n * @returns {WorkCenterConfiguration} the workcenter configuration object.\r\n */\r\n public getWorkCenterConfiguration(): WorkCenterConfiguration\r\n {\r\n let workCenter = this.getWorkCenter();\r\n return workCenter\r\n ? workCenter.Configuration\r\n : null;\r\n }\r\n\r\n /**\r\n * @function getWorkCenterExternalUserWebConfiguration\r\n * this function gets the external user web configuration object stored in the session, if exists,\r\n * after decoding it.\r\n * @returns {WorkCenterExternalUserWebConfiguration} the external user web configuration object.\r\n */\r\n public getWorkCenterExternalUserWebConfiguration(): WorkCenterExternalUserWebConfiguration\r\n {\r\n let workCenter = this.getWorkCenter();\r\n return workCenter\r\n ? workCenter.ExternalUserWebConfiguration\r\n : null;\r\n }\r\n\r\n /**\r\n * @method removeJwtToken\r\n * this function removes the data stored \"in session\" so, for practical purposes, it is as if\r\n * the user was not logged.\r\n */\r\n public removeJwtToken(): void\r\n {\r\n localStorage.removeItem(USER);\r\n localStorage.removeItem(JWT_TOKEN);\r\n }\r\n\r\n /**\r\n * @method removeUser\r\n * this function removes the data of the currently logged in user stored \"in session\".\r\n */\r\n public removeUser(): void\r\n {\r\n localStorage.removeItem(USER);\r\n }\r\n\r\n /**\r\n * @method reset\r\n * this function removes all the cache and cookie data of the current website.\r\n */\r\n public reset(): void\r\n {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n this._cookieService.deleteAll();\r\n }\r\n\r\n /**\r\n * @method setDate\r\n * this method saves the date requested into the session storage in order to recover it when\r\n * navigating to the calendar detail.\r\n * @param date > the object with the data of the date requested.\r\n */\r\n public setDate(date: DateTime): void\r\n {\r\n if (date)\r\n {\r\n sessionStorage.setItem(DATE, date.toISO());\r\n }\r\n else\r\n {\r\n sessionStorage.removeItem(DATE);\r\n }\r\n }\r\n\r\n /**\r\n * @method setToday\r\n * this method saves the issue request that is being created (or updated) for its use between\r\n * the pages of list, creation and edit.\r\n * @param schedule > the object with the data of the issue request.\r\n */\r\n public setIssueRequest(issueRequest: CoordinatorUserIssueRequest): void\r\n {\r\n if (issueRequest)\r\n {\r\n sessionStorage.setItem(ISSUE_REQUEST, JSON.stringify(issueRequest));\r\n }\r\n else\r\n {\r\n sessionStorage.removeItem(ISSUE_REQUEST);\r\n }\r\n }\r\n\r\n /**\r\n * @method setJwtToken\r\n * this method saves the JWT token in the local storage.\r\n * @param token > the token to store in the local storage.\r\n */\r\n public setJwtToken(token: string): void\r\n {\r\n localStorage.setItem(JWT_TOKEN, token);\r\n }\r\n\r\n /**\r\n * @method setPlanning\r\n * this method saves the planning used in the calendar in order to prevent reloading when\r\n * navigating between that page and the calendar detail. it stores not only the month planning\r\n * given but a timestamp to know the time when it was saved. Internally it uses a Map to store\r\n * the planning of all the months passed in sucessive calls, each month with its own timestamp.\r\n * @param date > the date corresponding to the first date of the planning.\r\n * @param planning > the planning of the month to store in the session storage.\r\n */\r\n public setPlanning(date: DateTime, planning: { Date: DateTime, Agenda: PlanningEventOccurrence[], Tasks: Task[] }[]): void\r\n {\r\n const item = { timestamp: DateTime.local().toMillis(), schedule: planning };\r\n let _cache = sessionStorage.getItem(PLANNING);\r\n let _data = _cache\r\n ? new Map(JSON.parse(_cache, dateTimeReviver))\r\n : new Map();\r\n _data.set(date.toMillis(), item);\r\n sessionStorage.setItem(PLANNING, JSON.stringify(Array.from(_data.entries())));\r\n }\r\n\r\n /**\r\n * @method setToday\r\n * this method saves the planning used in the home page in order to prevent reloading when navigating\r\n * between that page and others. it stores not only the cache but a timestamp to know the time\r\n * when it was saved\r\n * @param schedule > the object with the data of the today's planning.\r\n */\r\n public setToday(schedule: { Agenda: PlanningEventOccurrence[], Tasks: Task[] }): void\r\n {\r\n if (schedule)\r\n {\r\n sessionStorage.setItem(TODAY, JSON.stringify({ timestamp: DateTime.local(), schedule: schedule }));\r\n }\r\n else\r\n {\r\n sessionStorage.removeItem(TODAY);\r\n }\r\n }\r\n\r\n /**\r\n * @function setUser\r\n * this function sets saves the user data in the local storage.\r\n * @param user > the user to store in the local storage.\r\n */\r\n public setUser(user: User): void\r\n {\r\n localStorage.setItem(USER, JSON.stringify(user));\r\n }\r\n\r\n /**\r\n * @method setUserContractId\r\n * this method saves the identifier of the selected user contract requested to be seen on\r\n * detail in the session storage in order to recover it when navigating to the user contract\r\n * detail.\r\n * @param id > the identifier of the user contract.\r\n */\r\n public setUserContractId(id: number): void\r\n {\r\n if (id)\r\n {\r\n sessionStorage.setItem(USER_CONTRACT_ID, id.toString());\r\n }\r\n else\r\n {\r\n sessionStorage.removeItem(USER_CONTRACT_ID);\r\n }\r\n }\r\n\r\n /**\r\n * @function setUserContracts\r\n * this function sets saves the user contracts data in the local storage.\r\n * @param userContracts > the user contracts array to store in the local storage.\r\n */\r\n public setUserContracts(userContracts: UserContract[]): void\r\n {\r\n if (userContracts)\r\n {\r\n sessionStorage.setItem(USER_CONTRACTS, JSON.stringify({ timestamp: DateTime.local().toMillis(), contracts: userContracts }));\r\n }\r\n else\r\n {\r\n sessionStorage.removeItem(USER_CONTRACTS);\r\n }\r\n }\r\n\r\n}\r\n","import { NgFor, NgIf } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from 'app/core/auth/auth.service';\r\nimport { StorageService } from 'app/core/services';\r\nimport { AtDoorComponent } from 'app/shared/components/at-door/at-door.component'\r\nimport { NotificationsService } from 'app/shared/components/notifications';\r\nimport { ENDPOINT_AUTH } from 'app/shared/configuration/settings';\r\nimport { PlanningEventOccurrence, Task, User } from 'app/shared/models';\r\nimport { CoordinatorsService, PlanningEventsService } from 'app/shared/services';\r\nimport { DurationPipe, FirstCasePipe, TitleCasePipe } from 'app/shared/pipes';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This component renders the home area (with all the info related to today).\r\n */\r\n@Component({\r\n selector : 'app-home',\r\n templateUrl: './home.component.html',\r\n standalone : true,\r\n imports : [AtDoorComponent, DurationPipe, FirstCasePipe, NgFor, NgIf, TitleCasePipe],\r\n})\r\nexport class HomeComponent implements OnInit\r\n{\r\n\r\n /** stores a reference to the currently logged user */\r\n private _user: User;\r\n /** an observable variable to the external user web configuration object */\r\n public schedule: { Agenda: PlanningEventOccurrence[], Tasks: Task[] };\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of the home page, showing the main data useful for the user of today.\r\n * @param _authService > this service allows to know if there is a user who has logged in and, if\r\n * so, the configuration of the workcenter that they belong to.\r\n * @param _coordinatorsService > the class used to deal with coordinator tasks and the operations\r\n * that they can do (allows to create coordinator call requests).\r\n * @param _planningEventsService > this service allows to get the planning events of the user\r\n * that are scheduled for today.\r\n * @param _storageService > the service used to manage data in the session storage\r\n * (read, update, write and delete operations).\r\n */\r\n constructor(\r\n private _authService: AuthService,\r\n private _coordinatorsService: CoordinatorsService,\r\n private _notificationsService: NotificationsService,\r\n private _planningEventsService: PlanningEventsService,\r\n private _storageService: StorageService) {\r\n }\r\n\r\n /**\r\n * @method ngOnInit\r\n * this function initializes the component, loading the user and the schedule for today.\r\n */\r\n public ngOnInit(): void {\r\n this._user = this._authService.getUser();\r\n this.schedule = this._storageService.getToday();\r\n // if no schedule is cached, retrieves it from the backend\r\n if (!this.schedule) {\r\n this._planningEventsService.getTodayPlanningEventsPerUser(this._user.Id)\r\n .subscribe(s => {\r\n // filters 0-minutes duration events\r\n s.Agenda = s.Agenda.filter(a => a.LocalStartTime < a.LocalEndTime);\r\n // saves the data in the session cache\r\n this._storageService.setToday(this.schedule = s);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @method generateUrl\r\n * this function generates the URL of the photo of the carer, by prefixing the base of the URL.\r\n * @returns {string} the full URL of the image of the carer (that is inherentment finite)\r\n */\r\n public generateUrl(path: string): string {\r\n return `${ENDPOINT_AUTH}/${path}`;\r\n }\r\n\r\n /**\r\n * @method requestCall\r\n * creates a new request call for the user and their corresponding coordinator.\r\n */\r\n public requestCall(): void {\r\n this._coordinatorsService\r\n .postUserCallRequest(this._user.Coordinator.Id, this._user.Id)\r\n .subscribe();\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
·
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \"\"\r\n
\r\n {{ occurrence.LocalStartTime | duration }} - {{ occurrence.LocalEndTime | duration }}\r\n {{ occurrence.AssistantFullName | titlecase }}\r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n \r\n \r\n \r\n {{ task | firstcase }}\r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n

·

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
·
\r\n
\r\n
\r\n \r\n
    \r\n
  • \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ task.Name | firstcase }}\r\n
    \r\n
      \r\n
    • \r\n {{ assistantFullName | titlecase }}\r\n
    • \r\n
    \r\n
  • \r\n
\r\n
\r\n \r\n

·

\r\n
\r\n
\r\n
\r\n
\r\n","import { animate, group, state, style, transition, trigger } from '@angular/animations';\r\n\r\n/** this animation is used to show status messages in the footer zone of the page */\r\nexport const GrowShrink =\r\n trigger('growShrink', [\r\n state('hidden', style({ height: 0, opacity: 0 })),\r\n state('visible', style({ height: '*', opacity: 1 })),\r\n transition('hidden => visible', [\r\n group([\r\n animate('.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)',\r\n style({ height: '*' })),\r\n animate('.5s ease-in-out',\r\n style({ opacity: 1 }))\r\n ])\r\n ]),\r\n transition('visible => hidden', [\r\n group([\r\n animate('.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)',\r\n style({ height: 0 })),\r\n animate('.5s ease-in-out',\r\n style({ opacity: 0 }))\r\n ])\r\n ])\r\n ]);\r\n","export * from 'app/shared/animations/public-api';\r\n","import { animate, animateChild, group, query, style, transition, trigger } from '@angular/animations';\r\n\r\n/** this animation is used to animate the enter/leave of the Menu page */\r\nexport const PageSlide =\r\n trigger('routeAnimations', [\r\n transition('* <=> MenuPage', [\r\n style({ position: 'relative' }),\r\n query(':enter, :leave', [\r\n style({\r\n //transform: 'translateY(-100%)'\r\n // position: 'absolute',\r\n // top: 0,\r\n // left: 0,\r\n // width: '100%'\r\n })\r\n ], { optional: true }),\r\n query(':enter', [\r\n style({ transform: 'translateY(-100%)' })\r\n ], { optional: true }),\r\n query(':leave', animateChild(), { optional: true }),\r\n group([\r\n query(':leave', [\r\n animate('200ms ease-out', style({ transform: 'translateY(100%)' }))\r\n ], { optional: true }),\r\n query(':enter', [\r\n animate('300ms ease-out', style({ transform: 'translateY(0%)' }))\r\n ], { optional: true })\r\n ]),\r\n query(':enter', animateChild(), { optional: true }),\r\n ])\r\n ]);\r\n","export * from 'app/shared/animations/growShrink.animation';\r\nexport * from 'app/shared/animations/pageSlide.animation';\r\nexport * from 'app/shared/animations/scrollUpList.animation';\r\n","import { animate, style, transition, trigger, query, stagger } from '@angular/animations';\r\n\r\n/** this animation is used to show status messages in the footer zone of the page */\r\nexport const ScrollUpList =\r\n trigger('scrollUpList', [\r\n transition('* => *', [ // each time the binding value changes\r\n query(':leave', [\r\n stagger('300ms', [\r\n animate('.8s', style({ opacity: 0 }))\r\n ])\r\n ], { optional: true }),\r\n query(':enter', [\r\n style({ opacity: 0 }),\r\n stagger('300ms', [\r\n animate('.8s', style({ opacity: 1 }))\r\n ])\r\n ], { optional: true })\r\n ])\r\n ]);\r\n","import { AsyncPipe, NgIf } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from 'app/core/services';\r\nimport { ENDPOINT_AUTH } from 'app/shared/configuration/settings';\r\nimport { Person, User } from 'app/shared/models';\r\nimport { CarersService } from 'app/shared/services';\r\nimport { map } from 'lodash';\r\nimport { Observable, ReplaySubject, share, switchMap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This component renders the at-door component, a component that can appear in\r\n * several points of the application, and shows if there are some carer/s wainting\r\n * at the door of the user's house to enter and perform the service.\r\n */\r\n@Component({\r\n selector : 'app-at-door',\r\n templateUrl: './at-door.component.html',\r\n standalone : true,\r\n imports : [AsyncPipe, NgIf]\r\n})\r\nexport class AtDoorComponent implements OnInit\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** contains the array of carers that are waiting at the user's door */\r\n public carersAtUserDoor$: Observable;\r\n /** variable to hold the data of the currently logged in user */\r\n public user: User;\r\n /** this variable is used with a buffer of 1 as a trigger for the refresh logic */\r\n private _refresh$: ReplaySubject;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * builds the Reactive Form, creating and initializing the basic elements.\r\n * @param _authService > this service allows to get the currently logged user.\r\n * @param _carersService > this service allows to work with data related to carers.\r\n */\r\n constructor(\r\n private _authService: AuthService,\r\n private _carersService: CarersService) {\r\n this._refresh$ = new ReplaySubject(1);\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngOnInit\r\n * this function initializes the componenet, loading the data neccessary to show the info of the\r\n * carer(s) that are waiting at the door of the user's house.\r\n */\r\n public ngOnInit(): void {\r\n // checks that there is a user connected and a valid token stored in session\r\n if (this._authService.isTokenAlive()) {\r\n // gets the user authenticated\r\n this.user = this._authService.getUser();\r\n if (this.user) {\r\n // initializes the observable that returns the carers at their house door\r\n this.carersAtUserDoor$ = this._refresh$.pipe(\r\n switchMap(() => this._carersService.getCarersAtUserDoor(this.user.Id)),\r\n share());\r\n // calls the service that loads the carers at the user's house door\r\n this.refresh();\r\n }\r\n }\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method generate\r\n * @param carersAtUserDoor > the list of objects of type Person with the carers that are currently\r\n * at the user's house door.\r\n */\r\n public generateCarersListNames(carersAtUserDoor: Person[]) {\r\n return map(carersAtUserDoor, 'Name').join(', ')\r\n }\r\n\r\n /**\r\n * @method refresh\r\n * refreshes the data of the carers at the user door (on demand).\r\n */\r\n public refresh() {\r\n this._refresh$.next();\r\n }\r\n\r\n /**\r\n * @method generateUrl\r\n * this function generates the URL of the photo of the carer, by prefixing the base of the URL.\r\n * @returns {string} the full URL of the image of the carer (that is inherentment finite)\r\n */\r\n public generateUrl(carersAtUserDoor: Person[]): string {\r\n return carersAtUserDoor && carersAtUserDoor[0]?.Photo\r\n ? `${ENDPOINT_AUTH}/${carersAtUserDoor[0].Photo}`\r\n : '';\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
{{ generateCarersListNames(carersAtUserDoor) }}
\r\n \"\"\r\n
\r\n
\r\n

·

\r\n
\r\n
\r\n \r\n
\r\n
·
\r\n
\r\n
\r\n

·

\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
·
\r\n
\r\n
\r\n

·

\r\n
\r\n
\r\n
\r\n","import { DOCUMENT, NgClass, NgIf } from '@angular/common';\r\nimport { AfterViewInit, Component, Inject, OnDestroy } from '@angular/core';\r\nimport { DialogService, DialogSettings } from 'app/shared/components/dialog';\r\nimport { LocalizationService } from 'app/core/services';\r\nimport { DEFAULT_TITLE_RESOURCES_SUFFIX } from 'app/shared/configuration/settings';\r\nimport { Queue } from 'app/shared/lib';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\ndeclare const bootstrap: any;\r\n\r\n@Component({\r\n selector : 'app-dialog',\r\n templateUrl: './dialog.component.html',\r\n standalone : true,\r\n imports : [NgIf, NgClass],\r\n})\r\nexport class DialogComponent implements AfterViewInit, OnDestroy\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** for the current request: this property allows to bind an accept callback to the accept/confirm button */\r\n public accept: () => void;\r\n /** for the current request: this variable is used to set the body message of the dialog */\r\n public body: string;\r\n /** for the current request: this property allows to bind a cancel callback to the cancel button */\r\n public cancel: () => void;\r\n /** for the current request: this variable is used to render the accept button */\r\n public showAcceptButton: boolean;\r\n /** for the current request: this variable is used to render the cancel button */\r\n public showCancelButton: boolean;\r\n /** for the current request: this variable is used to set the title of the dialog */\r\n public title: string;\r\n /** for the current request: this variable is used to configure the aspect of the modal dialog */\r\n public type: string;\r\n /** this variable contains the jQuery reference to the HTML component used by bootstrap to show the modal */\r\n private _dialog: any;\r\n /** this variable stores the data of the pending dialog requests */\r\n private _pending = new Queue();\r\n /** this variable operates as a semaphore, to prevent that the dialog backdrop remains visible when showing two dialogs in succession */\r\n private _running = false;\r\n /** for the current request: this variable is used to sending the return value of the dialog operation */\r\n private _subject: Subject;\r\n /** this variable controls whether to receive dialog requests or not */\r\n private _unsubscribeAll= new Subject();\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of the Dialog component, with no need of any other service or component.\r\n */\r\n constructor(\r\n private _dialogService: DialogService,\r\n @Inject(DOCUMENT) private _document: Document,\r\n private _localizationService: LocalizationService,\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngAfterViewInit\r\n * initializes the dialog variable, and creates the semaphore to control when showing dialogs\r\n * in succession.\r\n */\r\n public ngAfterViewInit(): void\r\n {\r\n // gets the DOM element\r\n this._dialog = this._document.getElementById('dialog');\r\n // creates two listeners to manage when a dialog is being shown (including transitions)\r\n this._dialog.addEventListener('show.bs.modal', () => {\r\n this._running = true;\r\n });\r\n // when closing the dialog checks if there is any other dialog pending\r\n this._dialog.addEventListener('hidden.bs.modal', () => {\r\n this._running = false;\r\n this._checkPendingRequests();\r\n });\r\n }\r\n\r\n /**\r\n * @method ngOnDestroy\r\n * checks that the subjects has been closed and if not, closes them.\r\n */\r\n public ngOnDestroy(): void\r\n {\r\n while (this._pending.length)\r\n {\r\n let _dso = this._pending.dequeue();\r\n if (!_dso.response.closed)\r\n {\r\n _dso.response.next(false);\r\n _dso.response.complete();\r\n }\r\n }\r\n this._dialog.dispose();\r\n }\r\n\r\n /**\r\n * @method ngOnDestroy\r\n * configures the listeners for the alert/confirm requests.\r\n */\r\n public ngOnInit(): void\r\n {\r\n // configures the listener for the alert dialog requests\r\n this._dialogService.onAlert\r\n .pipe(\r\n takeUntil(this._unsubscribeAll),\r\n )\r\n .subscribe(request => this._enqueueRequest(request));\r\n // configures the listener for the alert dialog requests\r\n this._dialogService.onConfirm\r\n .pipe(\r\n takeUntil(this._unsubscribeAll),\r\n )\r\n .subscribe(request => this._enqueueRequest(request));\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method acceptHandler\r\n * accepts the alert, calling the accept callback before closing the modal, if exists (if it has\r\n * been declared), and returning true to the listeners of the observable.\r\n */\r\n public acceptHandler(): void\r\n {\r\n this.hide();\r\n this._subject.next(true);\r\n this._subject.complete();\r\n if (this.accept)\r\n {\r\n this.accept();\r\n this.accept = null;\r\n }\r\n }\r\n\r\n /**\r\n * @method cancelHandler\r\n * cancels the alert, calling the cancel callback before closing the modal, if exists (if it has\r\n * been declared), and returning false to the listeners of the observable.\r\n */\r\n public cancelHandler(): void\r\n {\r\n this.hide();\r\n this._subject.next(false);\r\n this._subject.complete();\r\n if (this.cancel)\r\n {\r\n this.cancel();\r\n this.cancel = null;\r\n }\r\n }\r\n\r\n /**\r\n * @method show\r\n * shows the modal confirmation dialog based on bootstrap styles.\r\n */\r\n public show(): void\r\n {\r\n // makes the dialog visible directly\r\n bootstrap.Modal.getOrCreateInstance(this._dialog, { keyboard: true, focus: true }).show();\r\n }\r\n\r\n /**\r\n * @method hide\r\n * hides the opened modal confirmation dialog based on bootstrap styles.\r\n */\r\n public hide(): void\r\n {\r\n // closes dialog\r\n bootstrap.Modal.getInstance(this._dialog).hide();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method _checkPendingRequests\r\n * checks if there is any dialog request pending, and, if so, dequeues the older one, configures\r\n * the dialog, and opens it.\r\n */\r\n private _checkPendingRequests(): void\r\n {\r\n if (!!this._pending.length)\r\n {\r\n let _request = this._pending.dequeue();\r\n switch (_request.dialogType)\r\n {\r\n case 'alert': this._setAlertModal(_request); break;\r\n case 'confirm': this._setConfirmModal(_request); break;\r\n }\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * @method _enqueueRequest\r\n * enqueues a new dialog request, saving its configuration and returning the observable\r\n * associated to it. If there is already a dialog opened then the request will be processed after\r\n * the current one is closed.\r\n * @param request > the object with the dialog settings needed to open a modal dialog.\r\n * @returns {Observable} the observable associated with the new created request.\r\n */\r\n private _enqueueRequest(request: DialogSettings): void\r\n {\r\n // Adds a new element into the queue\r\n this._pending.enqueue(request);\r\n // if a previous instance is running, waits for it to complete\r\n if (!this._running)\r\n {\r\n // processes the request\r\n this._checkPendingRequests();\r\n }\r\n }\r\n\r\n /**\r\n * @method _setAlertModal\r\n * loads the configuration of the request passed by parameter on the dialog, ready to be shown as\r\n * a modal alert.\r\n * @param settings > the object with the dialog settings needed to configure the modal alert\r\n * dialog.\r\n */\r\n private _setAlertModal(settings: DialogSettings): void\r\n {\r\n this._subject = settings.response;\r\n this.accept = settings.onAccept;\r\n this.body = this._localizationService.get(settings.body, settings.parameters);\r\n this.cancel = null;\r\n this.showAcceptButton = true;\r\n this.showCancelButton = false;\r\n this.title = this._localizationService.get(settings.title ?? `${settings.type}${DEFAULT_TITLE_RESOURCES_SUFFIX}`)\r\n this.type = settings.type;\r\n }\r\n\r\n /**\r\n * @method _setConfirmModal\r\n * loads the configuration of the request passed by parameter on the dialog, ready to be shown as\r\n * a modal confirm dialog.\r\n * @param settings > the object with the dialog settings needed to configure the confirm modal\r\n * dialog.\r\n */\r\n private _setConfirmModal(settings: DialogSettings): void\r\n {\r\n this._subject = settings.response;\r\n this.accept = settings.onAccept;\r\n this.body = this._localizationService.get(settings.body, settings.parameters);\r\n this.cancel = settings.onCancel;\r\n this.showAcceptButton = true;\r\n this.showCancelButton = true;\r\n this.title = this._localizationService.get(settings.title)\r\n this.type = settings.type;\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
{{title}}
\r\n \r\n
\r\n
\r\n

{{body}}

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Injectable } from '@angular/core';\r\nimport { DialogRequest, DialogSettings, DialogType } from 'app/shared/components/dialog';\r\nimport { InfoLevel } from 'app/shared/models';\r\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service allows to use configure alert/confirm dialogs.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /* this variable returns an observable for the alert dialogs */\r\n private readonly _onAlert = new ReplaySubject(1);\r\n /* this variable returns an observable for the confirm dialogs */\r\n private readonly _onConfirm = new ReplaySubject(1);\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Accessors\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** @description getter for onAlert */\r\n get onAlert(): Observable\r\n {\r\n return this._onAlert.asObservable();\r\n }\r\n\r\n /** @description getter for onConfirm */\r\n get onConfirm(): Observable\r\n {\r\n return this._onConfirm.asObservable();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method alert\r\n * Shows an alert dialog with the specified parameters.\r\n * @param body > the identifier of the (localization) resource used to show the text shown in the alert dialog.\r\n * @param type > the type of alert, used to modify the aspect of the alert (it is a class name, really).\r\n * @param title > the identifier of the (localization) resource used to show the the title of the window alert.\r\n * @param parameters > the (optional) parameters required to render the body.\r\n * @param accept > the callback function to call when the user accepts the alert dialog.\r\n */\r\n public alert(body: string, type?: InfoLevel, title?: string, parameters?: (string | object)[], accept?: (...args: any[]) => void) : Observable\r\n {\r\n let _settings = this._wrapRequest({\r\n body: body,\r\n onAccept: accept,\r\n parameters: parameters,\r\n title: title,\r\n type: type,\r\n }, 'alert');\r\n this._onAlert.next(_settings);\r\n\r\n return _settings.response.asObservable();\r\n }\r\n\r\n /**\r\n * @method confirm\r\n * Shows a confirm dialog with the specified parameters.\r\n * @param body > the identifier of the (localization) resource used to show the text shown in the confirm dialog.\r\n * @param type > the type of the confirm dialog, used to modify the aspect of the confirm (it is a class name, really).\r\n * @param title > the identifier of the (localization) resource used for the title of the confirm window.\r\n * @param parameters > the (optional) parameters required to render the body.\r\n * @param accept > the callback function to call when the user accepts the confirm dialog.\r\n * @param cancel > the callback function to call when the user cancels the confirm dialog.\r\n * @return {boolean} true when the user accepts the confirm, false otherwise.\r\n */\r\n public confirm(body: string, type?: InfoLevel, title?: string, parameters?: (string | object)[], accept?: () => void, cancel?: () => void) : Observable\r\n {\r\n let _settings = this._wrapRequest({\r\n body: body,\r\n onAccept: accept,\r\n onCancel: cancel,\r\n parameters: parameters,\r\n title: title,\r\n type: type,\r\n }, 'confirm');\r\n this._onConfirm.next(_settings);\r\n\r\n return _settings.response.asObservable();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * Transforms the dialog request into a dialog settings with an observable that allows to listen\r\n * to the response of the dialog.\r\n * @param request > the request to transform.\r\n * @param type > the type of dialog requested.\r\n * @returns {DialogSettings} the request with the properties 'type of dialog' and 'subject' filled.\r\n */\r\n private _wrapRequest(request: DialogRequest, type: DialogType): DialogSettings\r\n {\r\n return { ...request, response: new Subject(), dialogType: type };\r\n }\r\n\r\n}\r\n","import { Message } from 'app/shared/models';\r\nimport { Subject } from 'rxjs';\r\n\r\n/** @description defines the type of dialos supported */\r\nexport type DialogType = 'alert' | 'confirm';\r\n\r\n/**\r\n * @interface DialogRequest\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * defines an interface to send the configuration data needed to use dialogs in the Asisto-Familiares\r\n * application.\r\n */\r\nexport interface DialogRequest extends Message\r\n{\r\n /** this property allows to bind an accept callback to the accept/confirm button */\r\n onAccept?: () => void;\r\n /** this property allows to bind a cancel callback to the cancel button */\r\n onCancel?: () => void;\r\n}\r\n\r\n/**\r\n * @interface DialogSettings\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * defines an interface to send the configuration data needed to use dialogs in the Asisto-Familiares\r\n * application.\r\n */\r\nexport interface DialogSettings extends DialogRequest\r\n{\r\n /** this property determines the type of modal dialog to use for the notification */\r\n dialogType: DialogType;\r\n /** this property allows to return an observable when requesting a confirmation */\r\n response?: Subject;\r\n}\r\n","export * from 'app/shared/components/dialog/public-api';\r\n","export * from 'app/shared/components/dialog/dialog.component';\r\nexport * from 'app/shared/components/dialog/dialog.service';\r\nexport * from 'app/shared/components/dialog/dialog.types';\r\n","import { AsyncPipe, Location, NgClass, NgIf } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, isDevMode, OnInit } from '@angular/core';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { HttpRequestService } from 'app/core/http-request';\r\nimport { AuthService } from 'app/core/services';\r\nimport { GrowShrink } from 'app/shared/animations';\r\nimport { DEFAULT_CONTACT_EMAIL, APP_TITLE } from 'app/shared/configuration/settings';\r\nimport { capitalize } from 'app/shared/lib';\r\nimport { WorkCenterExternalUserWebConfiguration } from 'app/shared/models';\r\nimport { DateTime } from 'luxon';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This component renders the loading dots when there is an HTTP request active,\r\n * the messages area, and the copyright area.\r\n */\r\n@Component({\r\n selector : 'app-footer',\r\n templateUrl: './footer.component.html',\r\n animations : [GrowShrink],\r\n standalone : true,\r\n imports : [AsyncPipe, NgClass, NgIf, RouterLink],\r\n})\r\nexport class FooterComponent implements OnInit\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** A variable used to generate the string with the email address used for contacting */\r\n public contactEmail: string;\r\n /** an observable variable to the external user web configuration object */\r\n public configuration: WorkCenterExternalUserWebConfiguration;\r\n /** a variable containing the current route */\r\n public currentRoute: string;\r\n /** this objects is used to subscribe to the loading event emitter */\r\n public loading$: Observable;\r\n /** this variable contains the status of the extended footer ('visible' or 'hidden') */\r\n public state: string;\r\n /** A variable used to generate the year of the copyright, dinamically */\r\n public year: number;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * the default constructor receives a loading service, in which is\r\n * the logic ued to show the messages component or a loading spinner\r\n * @param authService > this service allows to know if a user is logged in, and,\r\n * therefore, whether it is necessary to show the logout button.\r\n * @param _location > this object allows to know which is the current route.\r\n * @param _httpRequestService > the service used to manage the loading\r\n * display notification when an request is being performed\r\n * @param _router > the object used to make redirections (to the home, calendar...\r\n * pages).\r\n */\r\n constructor(\r\n public authService: AuthService,\r\n private _changeDetector: ChangeDetectorRef,\r\n private _httpRequestService: HttpRequestService,\r\n private _location: Location,\r\n private _router: Router) {\r\n this.loading$ = this._httpRequestService.loading$;\r\n this._location.onUrlChange(url => this.currentRoute = url);\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngOnInit\r\n * this function initializes the component, setting the date of\r\n * the current date and an observable of http requests\r\n */\r\n public ngOnInit(): void {\r\n // generates the string used to send emails\r\n this.contactEmail = `mailto:${DEFAULT_CONTACT_EMAIL}?Subject=${encodeURIComponent(capitalize(APP_TITLE))}`;\r\n // gets the current date as the date (year) used for the copyright\r\n this.year = DateTime.local().year;\r\n // initially the (privacy) footer is hidden\r\n this.state = 'hidden';\r\n // extracts the external user web configuration from the user observable of the authentication service\r\n this.authService.user$.subscribe(user => {\r\n this.configuration = !!user\r\n ? user.Area.WorkCenter.ExternalUserWebConfiguration\r\n : null;\r\n this._changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method goCalendar\r\n * Navigates to the calendar page, only if it allowed the navigation.\r\n */\r\n public goCalendar(): void {\r\n if (!/\\/offline/g.test(this._location.path()))\r\n this._router.navigate(['/planning']);\r\n }\r\n\r\n /**\r\n * @method goCommunication\r\n * Navigates to the issues communication page, only if it allowed the navigation.\r\n */\r\n public goCommunication(): void {\r\n if (!/\\/offline/g.test(this._location.path()))\r\n this._router.navigate(['/communication']);\r\n }\r\n\r\n /**\r\n * @method goHome\r\n * Navigates to home, only if it allowed the navigation.\r\n */\r\n public goHome(): void {\r\n if (!/\\/offline/g.test(this._location.path()))\r\n this._router.navigate(['/home']);\r\n }\r\n\r\n /**\r\n * @method goMore\r\n * Navigates to the more (menu) page, only if it allowed the navigation.\r\n */\r\n public goMore(): void {\r\n if (!/\\/offline/g.test(this._location.path()))\r\n this._router.navigate(['/menu']);\r\n }\r\n\r\n /**\r\n * @method isCalendar\r\n * this function checks if the current route corresponds to the calendar or not.\r\n * @returns {boolean} true if the current route is the calendar page.\r\n */\r\n public isCalendar(): boolean {\r\n return isDevMode()\r\n ? /\\/planning\\/calendar(\\/detail)?/.test(this.currentRoute)\r\n : /\\/[a-z]{2}\\/planning\\/calendar(\\/detail)?/.test(this.currentRoute);\r\n }\r\n\r\n /**\r\n * @method isCommunication\r\n * this function checks if the current route corresponds to the issues communication or not.\r\n * @returns {boolean} true if the current route is the issues commnication page.\r\n */\r\n public isCommunication(): boolean {\r\n return isDevMode()\r\n ? /\\/communication\\/((issues(\\/(detail|create))?)|request-call)/.test(this.currentRoute)\r\n : /\\/[a-z]{2}\\/communication\\/((issues(\\/(detail|create))?)|request-call)/.test(this.currentRoute);\r\n }\r\n\r\n /**\r\n * @method isHome\r\n * this function checks if the current route corresponds to the home or not.\r\n * @returns {boolean} true if the current route is the home page.\r\n */\r\n public isHome(): boolean {\r\n return isDevMode()\r\n ? /\\/home/.test(this.currentRoute)\r\n : /\\/[a-z]{2}\\/home/.test(this.currentRoute);\r\n }\r\n\r\n /**\r\n * @method isMore\r\n * this function checks if the current route corresponds to any of the pages that are located in\r\n * the plus menu.\r\n * @returns {boolean} true if the current route is in the plus menu.\r\n */\r\n public isMore(): boolean {\r\n return isDevMode()\r\n ? /\\/(account\\/logout|info\\/info|menu|profile\\/(config|contracts(\\/detail)?|password|payment|tasks|user)|rgpd)/.test(this.currentRoute)\r\n : /\\/[a-z]{2}\\/(account\\/logout|info\\/info|menu|profile\\/(config|contracts(\\/detail)?|password|payment|tasks|user)|rgpd)/.test(this.currentRoute);\r\n }\r\n\r\n /**\r\n * @method toggleFooter\r\n * this function shows or hides the copyright footer when the app is shown in a PC.\r\n * @returns {false}\r\n */\r\n public toggleFooter(): boolean {\r\n this.state = this.state == 'hidden' ? 'visible' : 'hidden';\r\n return false;\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n ·\r\n © {{ year }}.\r\n ·.\r\n
\r\n \r\n
\r\n","export * from 'app/shared/components/footer/public-api';\r\n","export * from 'app/shared/components/footer/footer.component';\r\n","import { Location, NgIf } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from 'app/core/services';\r\nimport { APP_TITLE } from 'app/shared/configuration/settings';\r\nimport { DateTime } from 'luxon';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This component renders the upper part of the SPA.\r\n */\r\n@Component({\r\n selector : 'app-header',\r\n templateUrl: './header.component.html',\r\n standalone : true,\r\n imports : [NgIf],\r\n})\r\nexport class HeaderComponent implements OnInit\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** a variable used to show the current date */\r\n public date: string;\r\n /** a variable that controls the behavior of the logo/back button */\r\n public logo: boolean;\r\n /** a variable used to control the suffix of the title (and not to show it) */\r\n public suffix: string;\r\n /** a variable containing the current route */\r\n //private _currentRoute: string;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * the default constructor receives a authentication service, in which is\r\n * the logic ued to show or not some components of the header, and the title\r\n * @param authService > this service allows to know if a user is logged in, and,\r\n * therefore, whether it is necessary to show the logout button.\r\n * @param _router > the object used to make redirections (to the home page).\r\n * @param titleService > the service used to get the active title.\r\n */\r\n constructor(\r\n public authService: AuthService,\r\n public titleService: Title,\r\n public location: Location,\r\n private _router: Router) {\r\n //this.location.onUrlChange(url => this._currentRoute = url);\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngOnInit\r\n * this function initializes the title suffix, in order to avoid showing it in the title of the\r\n * header. it initializes the current route too from the window object.\r\n */\r\n public ngOnInit(): void {\r\n this.suffix = ' | ' + APP_TITLE;\r\n // gets the date of today as a local string\r\n this.date = DateTime.local().toLocaleString(DateTime.DATE_FULL); // today date\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method goHome\r\n * this function redirects to the root page of the app (only if the current page is not the\r\n * offline page).\r\n */\r\n public goHome(): void {\r\n if (!/\\/offline/g.test(this.location.path()))\r\n this._router.navigate(['/']);\r\n }\r\n\r\n /**\r\n * @method showLogo\r\n * this function checks the number of slashes that are in the (absolute) path of the current url.\r\n * just like it is currently designed the routing, if there are more than two slashes in the route\r\n * path it is a child page, so it should be shown the back button instead of the logo.\r\n * @returns {boolean} true if the route is a 'parent' page component (and so it should be appear\r\n * the logo), false otherwise.\r\n */\r\n public showLogo(): boolean {\r\n return (this.location.path().match(/\\//g)||[]).length < 3;\r\n }\r\n\r\n /**\r\n * @method showToday\r\n * this function shows the date of today when the current URL is one of the specified.\r\n * @returns {boolean} true if it has to be shown the date of today, false otherwise.\r\n */\r\n public showToday(): boolean {\r\n return /\\/home/g.test(this.location.path());\r\n }\r\n\r\n}\r\n","\r\n","export * from 'app/shared/components/header/public-api';\r\n","export * from 'app/shared/components/header/header.component';\r\n","export * from 'app/shared/components/menu/public-api';\r\n","import { AsyncPipe, NgIf, NgSwitch, NgSwitchCase } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { NavigationEnd, Router, RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { AuthService } from 'app/core/auth/auth.service';\r\nimport { DEFAULT_REPOSITORY_NOTIFICATION_DAYS } from 'app/shared/configuration/settings';\r\nimport { User } from 'app/shared/models';\r\nimport { WorkCenterExternalUserWebConfiguration } from 'app/shared/models/work-center-external-user-web-configuration';\r\nimport { WorkCentersService } from 'app/shared/services';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This component renders the upper menu (the main menu) for the app.\r\n */\r\n@Component({\r\n selector : 'app-navigation-menu',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl : './menu.component.html',\r\n standalone : true,\r\n imports : [AsyncPipe, NgIf, NgSwitch, NgSwitchCase, RouterLink, RouterLinkActive],\r\n})\r\nexport class MenuComponent implements OnInit\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** an observable variable to the external user web configuration object */\r\n public configuration: WorkCenterExternalUserWebConfiguration;\r\n /** this variable controls which item is hovered in order to show the text of it */\r\n public hovered: number;\r\n /** this variable controls when to show the content of the navigation menu */\r\n public isTokenAlive: boolean;\r\n /** a variable used to control when the menu is collapsed or expanded */\r\n public isCollapsed: boolean;\r\n /** this variable holds the number of newly uploaded documents to the workcenter repository */\r\n public newRepositoryDocuments: number;\r\n /** Used to free the subscriptions made for the current service */\r\n private _unsubscribeAll: Subject = new Subject();\r\n /** stores a reference to the currently logged user */\r\n private _user: User;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * builds the menu component, generating the options that it contains.\r\n * @param authService > this service allows to know if a user is logged in, and,\r\n * therefore, whether it is necessary to show the logout button.\r\n * @param _changeDetector > this object is used con manage the moments when the component\r\n * is marked for be rendered because of a change (of the user logged in).\r\n * @param _router > this service is used to detect when an end navigation event has occurred,\r\n * determining whether to show or not the content of the current navigation menu.\r\n * @param _workCentersService > this service is used to count the number of recently uploaded\r\n * files to the workcenter repository.\r\n */\r\n constructor(\r\n private _authService: AuthService,\r\n private _changeDetector: ChangeDetectorRef,\r\n private _router: Router,\r\n private _workCentersService: WorkCentersService,\r\n )\r\n {\r\n // updates the status of the variable that manages the visiblity of the content of the menu after each change of page\r\n this._router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n this.isTokenAlive = this._authService.isTokenAlive();\r\n this._changeDetector.markForCheck();\r\n }\r\n });\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngOnInit\r\n * initializes and updates the object user with the data necessary to be shown in the page.\r\n */\r\n public ngOnInit(): void\r\n {\r\n // gets the currently logged in user\r\n this._user = this._authService.getUser();\r\n // gets the external user web configuration by the workcenter of the area of the user\r\n this.configuration = this._user?.Area.WorkCenter.ExternalUserWebConfiguration;\r\n // configures the repository new documents counter\r\n this._workCentersService\r\n .countNewRepositoryDocuments(this._user?.Area.WorkCenter.Id, DEFAULT_REPOSITORY_NOTIFICATION_DAYS)\r\n .pipe(\r\n takeUntil(this._unsubscribeAll)\r\n )\r\n .subscribe(count => this.newRepositoryDocuments = count);\r\n // initialize the variable that controls the visibility of the content of the menu\r\n this.isTokenAlive = this._authService.isTokenAlive();\r\n // initializes the component collapsed\r\n this.isCollapsed = true;\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method collapse\r\n * this function marks the menu as collapsed, initiating the animation that\r\n * collapses the menu\r\n */\r\n public collapse(): void\r\n {\r\n this.isCollapsed = true;\r\n }\r\n\r\n /**\r\n * @method toggle\r\n * this function marks the menu as collapsed or expanded, initiating the animation that\r\n * collapses/expands the menu, depending on the current status of it (if it is expanded, then\r\n * collapses it, and vice versa)\r\n */\r\n public toggle(): void\r\n {\r\n this.isCollapsed = !this.isCollapsed;\r\n }\r\n\r\n}\r\n","\r\n","export * from 'app/shared/components/menu/menu.component';\r\n","export * from 'app/shared/components/notifications/public-api';\r\n","import { NgClass, NgFor, NgIf } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, QueryList, ViewChildren } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { LocalizationService } from 'app/core/services/localization.service';\r\nimport { NotificationRequest, NotificationsService } from 'app/shared/components/notifications';\r\nimport { DEFAULT_NOTIFICATIONS_INSTANCES, DEFAULT_NOTIFICATIONS_TIMEOUT, DEFAULT_TITLE_RESOURCES_SUFFIX } from 'app/shared/configuration/settings';\r\nimport { DateTime } from 'luxon';\r\nimport { map, merge, Subject, takeUntil } from 'rxjs';\r\n\r\ndeclare var bootstrap: any;\r\n\r\n@Component({\r\n selector : 'app-notifications',\r\n templateUrl : './notifications.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone : true,\r\n imports : [NgClass, NgFor, NgIf],\r\n})\r\nexport class NotificationsComponent implements AfterViewInit\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** this object is used to set the aria-live attribute on the notification, based on the type of it */\r\n public ariaLive = { danger: 'assertive', warning: 'assertive', success: 'assertive', info: 'polite' }\r\n /** time in seconds that the notifications remain on the screen */\r\n public duration = DEFAULT_NOTIFICATIONS_TIMEOUT;\r\n /** This constant contains the maximum number of toasts shown simultaneously and is used to render the view template */\r\n public maxNotifications = DEFAULT_NOTIFICATIONS_INSTANCES;\r\n /** array where to store the notifications, as they are coming */\r\n public notifications = new Array();\r\n /** this variable contains the references to the HTML components used by bootstrap to show the toasts */\r\n @ViewChildren('toast')\r\n public toasts: QueryList;\r\n\r\n /** this variable contains the angular references to the toasts */\r\n private _toasts = new Array<{ show(): void, hide(): void, isShown(): boolean}>();\r\n /** this variable controls whether to receive dialog requests or not */\r\n private _unsubscribeAll= new Subject();\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of the Notifications component, with references to the services needed and\r\n * to the HTML document object.\r\n * @param _changeDetectorRef > this object is used to register the modifications in the page in\r\n * order to update the view.\r\n * @param _errorsService > this object is used to get the errors produced in the app, and show\r\n * them into the notifications area.\r\n * @param _localizationService > this object is needed to translate the messages resources into\r\n * human readable messages.\r\n * @param _notificationsService > this service is used to send (and read) the notifications sent\r\n * to the current component.\r\n */\r\n constructor(\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _errorsService: ErrorsService,\r\n private _localizationService: LocalizationService,\r\n private _notificationsService: NotificationsService,\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method ngAfterViewInit\r\n * initializes the notifications component by initializing the bootstrap Toast components.\r\n */\r\n public ngAfterViewInit(): void\r\n {\r\n // Initializes the bootstrap components\r\n this.toasts.forEach(toast =>\r\n {\r\n this._toasts.push(bootstrap.Toast.getOrCreateInstance(toast.nativeElement));\r\n });\r\n }\r\n\r\n /**\r\n * @method ngOnInit\r\n * configures the listeners for the show notification requests. It uses an array to store a\r\n * maximum of DEFAULT_NOTIFICATIONS_INSTANCES, so when that amount of notifications arrive it\r\n * starts to override the oldest ones. It shows always the last one pushed into the array.\r\n */\r\n public ngOnInit(): void\r\n {\r\n // configures the listener for the alert dialog requests and errors of the application\r\n merge(\r\n this._notificationsService.onShow,\r\n this._errorsService.onError\r\n .pipe(\r\n map(error => {\r\n body : error.body,\r\n parameters: error.parameters,\r\n showHeader: error.title !== undefined,\r\n title : error.title ?? `${error.type}${DEFAULT_TITLE_RESOURCES_SUFFIX}` ,\r\n time : DateTime.now().toFormat('HH:mm:ss'),\r\n type : error.type,\r\n })\r\n )\r\n )\r\n .pipe(\r\n takeUntil(this._unsubscribeAll),\r\n )\r\n .subscribe(notification =>\r\n {\r\n if (this.notifications.length === DEFAULT_NOTIFICATIONS_INSTANCES)\r\n this.notifications.shift();\r\n this.notifications.push({\r\n ...notification,\r\n title: this._localizationService.get(notification.title),\r\n body : this._localizationService.get(notification.body)\r\n });\r\n // Show the bootstrap toast\r\n this._toasts[this.notifications.length - 1].show();\r\n // Notify the change detector\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n {{notifications[i]?.title}}\r\n {{notifications[i]?.time}}\r\n \r\n
\r\n
\r\n
{{notifications[i]?.body}}
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Injectable } from '@angular/core';\r\nimport { NotificationRequest } from 'app/shared/components/notifications';\r\nimport { DEFAULT_TITLE_RESOURCES_SUFFIX } from 'app/shared/configuration/settings';\r\nimport { InfoLevel } from 'app/shared/models';\r\nimport { DateTime } from 'luxon';\r\nimport { Observable, ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service allows to use configure notifications. When using them, you shold specify the body\r\n * (content) and parameters (for rendering the body, if needed), and the title. The title can have\r\n * three possible values:\r\n * - a resource identifier\r\n * - null (and then, based on the type of notification, it will be used the default resource id\r\n * title)\r\n * - undefined (and then, the header will not be rendered)\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationsService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /* this variable returns an observable for the notifications dialogs */\r\n private readonly _onShow = new ReplaySubject(1);\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Accessors\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** @description getter for onShow */\r\n get onShow(): Observable\r\n {\r\n return this._onShow.asObservable();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method show\r\n * Sends a notification request with the specified parameters.\r\n * @param body > the identifier of the (localization) resource used to show the text shown in the\r\n * notification.\r\n * @param type > the type of notification, used to modify the aspect of it.\r\n * @param title > the identifier of the (localization) resource used to show the the title of the\r\n * notification. If title is null the default title will be used based on the type of the\r\n * notification, but if undefined, then the notification will not render the header.\r\n * @param parameters > the (optional) parameters required to render the body.\r\n */\r\n public show(body: string, type?: InfoLevel, title?: string, ...parameters: (string | object)[]) : void\r\n {\r\n this._onShow.next({\r\n body: body,\r\n parameters: parameters,\r\n showHeader: title !== undefined,\r\n title: title ?? `${type}${DEFAULT_TITLE_RESOURCES_SUFFIX}` ,\r\n time: DateTime.now().toFormat('HH:mm:ss'),\r\n type: type,\r\n });\r\n }\r\n\r\n}\r\n","import { Message } from 'app/shared/models/message';\r\n\r\n/**\r\n * @interface Notification\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * defines an interface to send the configuration data needed to use notifications in the Asisto-Familiares\r\n * application.\r\n */\r\nexport interface NotificationRequest extends Message\r\n{\r\n /** determines whether to show a header for the notification or not */\r\n showHeader: boolean;\r\n /** this variable is used to show the time when the notification was shown */\r\n time?: string;\r\n}\r\n","export * from 'app/shared/components/notifications/notifications.component';\r\nexport * from 'app/shared/components/notifications/notifications.service';\r\nexport * from 'app/shared/components/notifications/notifications.types';\r\n","\r\n/** collection of reusable regular expressions */\r\nexport const regularExpressions: { [key: string]: RegExp } = {\r\n date: /^(19|20)[0-9]{2}\\-((0[0-9])|(1[0-2]))\\-(([0-2][0-9])|(3[0-1]))$/,\r\n email: /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i,\r\n nif: /^[0-9XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i,\r\n //password: /^[a-zA-Z0-9¡!<>@#$%€~=¿_\\|\\^\\&\\:\\.\\,\\;\\/\\*\\-\\+\\?\\[\\]\\{\\}\\(\\)\\\\]{4,12}$/,\r\n //password: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]])[a-zA-Z0-9]{12}$/,\r\n password: /^[a-zA-Z0-9]{8,12}$/,\r\n postalCode: /^(0[1-9]|5[0-2]|[1-4][0-9])\\d{3}$/,\r\n // tslint:disable:max-line-length\r\n telephone: /^\\+(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{1,14}$/,\r\n iso8601Date: /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]+)?(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$/,\r\n iso8601Duration: /^P([0-9]+(?:[,\\.][0-9]+)?Y)?([0-9]+(?:[,\\.][0-9]+)?M)?([0-9]+(?:[,\\.][0-9]+)?D)?(?:T([0-9]+(?:[,\\.][0-9]+)?H)?([0-9]+(?:[,\\.][0-9]+)?M)?([0-9]+(?:[,\\.][0-9]+)?S)?)?$/\r\n // tslint:enable:max-line-length\r\n};\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { environment } from 'environments/environment';\r\nimport { DateTime } from 'luxon';\r\n\r\n// tslint:disable:max-line-length\r\n/** the title of the app (appears in the title of the browser) */\r\nexport const APP_TITLE = 'ASISTO FAMILIARES';\r\n\r\n/** the string used for the token used to identify the Authentication service (for the angular injector) */\r\nexport const AUTH_INJECTOR_TOKEN = 'AuthService';\r\n/** the token used for angular to inject the authentication service */\r\nexport const AUTH_OPTIONS: InjectionToken = new InjectionToken(AUTH_INJECTOR_TOKEN);\r\n\r\n/** blob content type header */\r\nexport const BLOB_RESPONSE_TYPE: { [name: string]: string } = { responseType: 'blob' as 'json' };\r\n/** allows redirecting to an anchor within a page */\r\nexport const DEFAULT_ANCHOR_SCROLLING = 'enabled';\r\n/** the default image used for avatar components */\r\nexport const DEFAULT_AVATAR_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAylpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDFENzY2RUIyRTBCMTFFODkzQkRCOTAyQzFGQTEyM0EiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDFENzY2RUEyRTBCMTFFODkzQkRCOTAyQzFGQTEyM0EiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuZGlkOjJkMDQ0MTNmLTA5ZjEtMTg0Ni05NjA0LTQ5YjI1NDBmNGYyMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyZDA0NDEzZi0wOWYxLTE4NDYtOTYwNC00OWIyNTQwZjRmMjIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7newxrAAAAt1BMVEUzMzNQUFD///+ZmZlmZmZKSkrj4+NHR0fMzMx6enpOTk5TU1Pm5uZLS0tGRkazs7NNTU19fX15eXlPT0/l5eW2trZISEji4uLk5OTs7Oy4uLitra3o6Ojp6el7e3u3t7e5ubmurq7g4OBSUlJ+fn6FhYXq6upMTEy0tLSDg4N8fHyEhISAgICysrKvr6+srKzr6+uxsbFRUVGGhobh4eF/f39JSUm1tbXf39+CgoKwsLDn5+f///8TPr4eAAAAPXRSTlP///////////////////////////////////////////////////////////////////////////////8ACS+sXwAAB2JJREFUeNq0Wwl32yAMxkAS5T6aNm163+fWY/fG//9ds7HjODESAqfqe32ba6MPXQghhIkgCbCvVFenlCTZ765S+wAyZiwR+kEbUs7CSSkOaH8qAAlK763YjYZ28lYMw9HqaaJVmCREEPecSUtrpQAGsuAk5QBAKa1bhSRCMHABLFbc09Gx4VPTWL/V3ikAuJlkw/ancOiZmzyEp372bu8H7AwA5NPqjpmCle9d+8EMdgIgZ59KPsS0Cl1oaAyg/WgH+hLs4/LdQridNwIg1c+M/dhE0ZcMQkvJeABW+vpSmkiSl32vHgQ1/UyGKpo9bwwcwJXmWRHHhvUiHAD0Gk+/IoQEQgEoxvTv4JfKCDzhyQpBBQGwqG/o6cO39aLY02p8QgjhCZemE4CkIBfsZ9uL8bUeH6GvW4FKLoCM/wj8xl2jFh4uAUPgAPBP+9QPSEZCxX9IQ4I+4QCQXv5KUIRByFA7ZCCC+ctvwkOIubkRCBf/Q2p10sJLyASyT7UPQCreCcSp3y8EGNadS9T4d1D+VwAXQ8EjfepEMKohEDVnATTF6IkAcqvhosZgA8BgD4s/bTUSgdQCxIOSEwxAZoBTJ/+vLRFBTgTdLVcQm+icwUoqEUeAhFnlBgDEJ3H08Q8JyuACsA2tOX9EoJuCFhvPwwOvhy5dI27MtAQwP3ArAJrwd4sgHbI1qAF4QTzwsREAtwhSof7ZBpCiunahXXSaAXBqVe6tpS3Wevm7cwvIwpFzZ/S6RiZKAbhDgG4IwB2NsmFhA0D6YGl2boICTS0fShEIUgBm+kkA1iLIAdwI4dyAyr5n+E6i9fXPYCtMVxchXtYAUlN3C4DWgFbQlindlZUZbiSwU+sclgAUJinKB/SD3EgXwgCUPEWukNGVCYxCtaQLSdYwACuzE8W/3W/pkHxHPocAMIUZilwa+6ithkxLhQAY5zoQls3E/VZ7EqZXl8SesBT3aGjHEVYDN/iGzsX/Dhv0dMKMA0VyBhaAwjNhb3QFNZ2qr2/l/48DAOzbPwort0EIgL2jbcPvlS5Rt5oLfI9lbV+YwyHlKg46gHquWo6gWIvRCuz9IAUAuJjAnQzc5n/9UX12hmBOBuQuG1IAuAmYU8QNn0HWcvVijLuE6TA5WJUC0KVMA7IBfasRY9t6/kxtdDuia0TKBEd5E557aa4T2PlpKfA4HJaQIQB+UaWWLBoLoFBCYwC+Wg+IBwpAQEq47/yi4wNwLhSJkr0rWNnRlucmdAk1nbwHAFcHZVlRsRKyKoCuGA5MYx3sI+/TANotcSa02KPE9MriP67kmq6giU2vl7LXZLDy58Up3Zc6PJkIfhjIA0H2Y+LLolvpWcBaWLzvB2B8VlDJTpXgr4UlgIQGAPqeZH8GpLC0Jg9dMvY0AAgoBqrABLIAQKrA44WPkmMsymsDMlIA1Q/lNHRzxgKguBtfqoZ9cEX4uKYDkeLVHiTzPUepRqehuNVuCMBXwsfL7wfiiV6MjsmBL3jrRTKPXw1pI1zyVkzcxiyAX2RCklAjn/MAKDohIVMy842xBvsAAJ2SkUmpWYwaq0CTy8xvOi23u3ifbGkAvbknLTczOnNUPuuinWCPzve69NYs7wSZ4AjOAZY64gQxp2W+NQNf3jJXkfXaoX715TpAb88bHhp5spGsNDQoChSHvkYQtFSpnvsR5m/pe1GgwItk3rxgTO3hPYo15n1VogHstNDnC8XW+3foKrxRKCTLdJUzVReLdzJt9U3q6H5Vpsum9yVGBKrcXkSYYLbSKm+pdk0uOffnRKjyarVSqk110PkeIwK9BMDK5OB3rLJYjZfrK/R2v4ODEqRcb9od95ldQHa0nQX5hkszjU57fWTzAzmyCdqjObfLxHReOIdWjLKli7qGEdlg69juwURFI6cCTn1D/d06tuOJgK0E4AugenR7aUzckhDsAdVWgcrhdeIXAatm5Q1q5mhSP7w2fzjIs0MGL/8jjgBua/0DgxZDdwxD7C84chyeuFs4ZHMEwLIkFdDEEoSgxROis4mF6uPamADR1NRhfI+28XCVQO0XtQlUQL2Va+Yfgehp67OCGdrKZU4ShhnICbEPkwwD+Ng496y38y19UYSwgaEPwAPdzmcBjjyGBMSGubPwGyDZ0GgRDCE+HHs+/elt6cyN5Ht0HFB02ZfR1GpdoQ+xazJZ9v3gtPV6G4vPYyMxXPMam1Nn1MR9gLfryJJYdl/B1Wob2Nz+piNX42VAczve3i+B1VYt3ZbbZbf3FxWJJ7nBO7vOxjxDVFv30WQ38IKDqVzxkKdwrGZaH4RVRw60nqlLuJMm6opH9lV2sVC9TnVUS3GZH+ib47hLLsYsGrcSVpSCF+S9F512QVR89F/1aj792KteVgitpuzvPQmG77rf/Lah9AemGYBmetjBhUcLYRbHvrubK58WwksvlHvvZXeXXm0VJ6xivetrv/lqwF8LPuHic4khoZl/fN7V75VfgjrDLr+fKRiEjhcMoFibz1WKo7z+f6bUReT1//8CDAA3+8uP0tHW2QAAAABJRU5ErkJggg==';\r\n/** default content type header */\r\nexport const DEFAULT_CONTACT_EMAIL = 'jmgonzalezr@grupoclece.com'; //'contacto@asistosad.com';\r\n/** default content type header */\r\nexport const DEFAULT_CONTACT_EMAIL_CONTENT = (email: string, message: string, date = DateTime.local()) => `El día ${date.toFormat('D de MMMM')} a las ${date.toFormat('H:mm')} ${email} escribió: ${message}`;\r\n/** default subject for con*/\r\nexport const DEFAULT_CONTACT_EMAIL_SUBJECT = (userName: string) => `${APP_TITLE}: ${userName}`;\r\n/** default content type header */\r\nexport const DEFAULT_CONTENT_TYPE: { [name: string]: string } = { 'Content-Type': 'application/json' };\r\n/** default number of days after that the cookie is considered expired */\r\nexport const DEFAULT_COOKIE_EXPIRATION_DAYS = 90;\r\n/** default name for the cookie used to store the credentials */\r\nexport const DEFAULT_COOKIE_NAME = 'credentials';\r\n/** default folder to store cookies */\r\nexport const DEFAULT_COOKIE_PATH = '/';\r\n/** default currency id */\r\nexport const DEFAULT_CURRENCY_ID = 'EUR';\r\n/** default format for date serializations */\r\nexport const DEFAULT_DATE_FORMAT = 'yyyyMMdd\\'T\\'HHmmssZZZ';\r\n/** default format for date inputs (HTML specification) */\r\nexport const DEFAULT_DATE_INPUT_FORMAT = 'yyyy-MM-dd';\r\n/** default width for a generic form popup */\r\nexport const DEFAULT_DIALOG_FORM_WIDTH = '32em';\r\n/** default width for a generic popup */\r\nexport const DEFAULT_DIALOG_WIDTH = '24em';\r\n/** default domain name linked to the server */\r\nexport const DEFAULT_DOMAIN_NAME = environment.domain;\r\n/** theese are the headers used by default by the service calls */\r\nexport const DEFAULT_HTTP_HEADERS = new HttpHeaders(DEFAULT_CONTENT_TYPE);\r\n/** theese are the default observe configuration options when the full Response object is required */\r\nexport const DEFAULT_HTTP_OBSERVE = 'response';\r\n/** default identifier string for the language cookie */\r\nexport const DEFAULT_LANGUAGE_COOKIE = 'language';\r\n/** the default locale ID used to programmatic format currency values */\r\nexport const DEFAULT_LOCALE_ID = 'es-ES';\r\n/** the image used to generate invoices inline */\r\nexport const DEFAULT_LOGO_IMAGE = 'data:image/png;base64,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';\r\n/** time in milliseconds that the notifications will be visible. 0 means forever */\r\nexport const DEFAULT_NOTIFICATIONS_TIMEOUT = 20000;\r\n/** maximum number of notifications to show at the same time */\r\nexport const DEFAULT_NOTIFICATIONS_INSTANCES = 5;\r\n/** default size for the number of records in a request */\r\nexport const DEFAULT_PAGE_SIZE = 5;\r\n/** number of days a document will be tagged as new since it is uploaded to the workcenter documents repository */\r\nexport const DEFAULT_REPOSITORY_NOTIFICATION_DAYS = 7;\r\n/** default time that the snackbar is visible before vanishing */\r\nexport const DEFAULT_SNACKBAR_TIME = 2500;\r\n/** this variable contains a suffix to append to the type of a message/dialog in order to get the default title localization resource id of that message */\r\nexport const DEFAULT_TITLE_RESOURCES_SUFFIX = 'TitleDefaultModal';\r\n\r\n/** the URL where the API REST server listens */\r\nexport const ENDPOINT_AUTH = `${DEFAULT_DOMAIN_NAME}/asisto-clece-authapi/api`;// `${DEFAULT_PROTOCOL}://${DEFAULT_DOMAIN_NAME}/test-authapi/api`;\r\n/** the URL where the API REST server listens */\r\nexport const ENDPOINT_BACKEND = `${DEFAULT_DOMAIN_NAME}/asisto-clece-webapi/api`;// `${DEFAULT_PROTOCOL}://${DEFAULT_DOMAIN_NAME}/test-webapi/api`;\r\n/** the base URL where the APP server listens */\r\nexport const ENDPOINT_FRONTEND = `${DEFAULT_DOMAIN_NAME}/external`;// `${DEFAULT_PROTOCOL}://${DEFAULT_DOMAIN_NAME}/test`;\r\n/** the URL where the image server listens */\r\nexport const ENDPOINT_IMAGES = `${DEFAULT_DOMAIN_NAME}/asisto-images`;\r\n\r\n/** list of routes/urls for which an error has no notification (through the pop up system) */\r\nexport const ERROR_WHITELISTED_ROUTES: (string | RegExp)[] = [/https?\\:\\/\\/[^\\/]+\\/asisto-clece-webapi\\/api\\/users\\/\\d+\\/profile-photo/];\r\n\r\n/** the value used to not filter emails by folder (sent by user OR admin) */\r\nexport const FOLDER_ALL = null;\r\n/** the value used to filter emails by folder (sent by admin) */\r\nexport const FOLDER_SENT_BY_ADMIN = 1;\r\n/** the value used to filter emails by folder (sent by user) */\r\nexport const FOLDER_SENT_BY_USER = 0;\r\n\r\n/** default class/message to send error messages between components */\r\nexport const INFO_LEVEL_DANGER = 'danger';\r\n/** default class/message to send information messages between components */\r\nexport const INFO_LEVEL_INFO = 'info';\r\n/** default class/message to send success messages between components */\r\nexport const INFO_LEVEL_SUCCESS = 'success';\r\n/** default class/message to send warning messages between components */\r\nexport const INFO_LEVEL_WARNING = 'warning';\r\n\r\n/** the schema used for the JWT token */\r\nexport const JWT_AUTH_SCHEME = 'Bearer ';\r\n/** list of routes for which it is not wanted to replace the authorization headers */\r\nexport const JWT_BLACKLISTED_ROUTES: (string | RegExp)[] = [/(https?\\:\\/\\/)?.*\\.svg|jpg|png/, /https?\\:\\/\\/[^\\/]+\\/api\\/login-password/, /https?\\:\\/\\/[^\\/]+\\/api\\/login-renew/, /https?\\:\\/\\/[^\\/]+\\/api\\/recover-password/];\r\n/** header used to carry the authorization token */\r\nexport const JWT_HEADER_NAME = 'Authorization';\r\n/** the string used for the token used to identify the JWT service (for the angular injector) */\r\nexport const JWT_INJECTOR_TOKEN = 'JwtInterceptor';\r\n/** the token used for angular to inject the JWT service */\r\nexport const JWT_OPTIONS: InjectionToken = new InjectionToken(JWT_INJECTOR_TOKEN);\r\n/** the URL where the authentication service renews the authorization token */\r\nexport const JWT_RENEW_TOKEN_URL = 'login-renew';\r\n/** specifies whether to take into account the JSON web token expiration date */\r\nexport const JWT_SKIP_WHEN_EXPIRED = false;\r\n/** determines if the JWT interceptor should throw an error when no token is present in the Authorization header */\r\nexport const JWT_THROW_NO_TOKEN_ERROR = false;\r\n/** the identifier used to store JSON web tokens in the local storage */\r\nexport const JWT_TOKEN = 'jwt-token';\r\n/** authenticated requests should only be sent to domains known and trusted */\r\nexport const JWT_WHITELISTED_DOMAINS: string[] = [ENDPOINT_BACKEND];\r\n\r\n/** the max size of the user image (must be square, eg.: 128x128) */\r\nexport const MAX_AVATAR_SIZE = 128;\r\n/** max number of messages stored in the messages viewer */\r\nexport const MAX_MESSAGES_STORED = 10;\r\n/** the max number of items shown in the list when rendered */\r\nexport const MAX_PAGINABLE_LIST_ITEMS = 50;\r\n\r\n/** the identifier used to store oAuth tokens in the local storage */\r\nexport const OAUTH_TOKEN = 'oauth-token';\r\n/** the URLs where the authentication service must use social (oauth) tokens */\r\nexport const OAUTH_TOKEN_ROUTES: (string | RegExp)[] = [/https?\\:\\/\\/[^\\/]+\\/api\\/login-facebook/, /https?\\:\\/\\/[^\\/]+\\/api\\/login-google/];\r\n\r\n/** indicates the ascending direction of the results in a rows request */\r\nexport const PAGINATION_ASC = 'asc';\r\n/** indicates the descending direction of the results in a rows request */\r\nexport const PAGINATION_DESC = 'desc';\r\n/** an object with the default configuration used to make requests to a datasource */\r\nexport const PAGINATION_DEFAULT = { filter: '', sort: { field: '', dir: PAGINATION_ASC }, page: 0, pageSize: 6 };\r\n\r\n/** identifier used to payment methods of type bank transference */\r\nexport const PAYMENT_METHOD_TRANSFERENCE = 1;\r\n/** identifier used to payment methods of type payment gateway with card */\r\nexport const PAYMENT_METHOD_GATEWAY = 2;\r\n/** identifier used to payment method of third partners like PayPal */\r\nexport const PAYMENT_METHOD_PAYPAL = 3;\r\n\r\n/** horizontal position by default where the snackbar notifications will be shown */\r\nexport const SNACKBAR_DEFAULT_HORIZONTAL_POSITION = 'center';\r\n/** vertical position by default where the snackbar notifications will be shown */\r\nexport const SNACKBAR_DEFAULT_VERTICAL_POSITION = 'bottom';\r\n\r\n/** the identifier used to store the date used when navigatin to calendar detail */\r\nexport const DATE = 'date';\r\n/** the identifier used to store the issue request created/edited in the session storage */\r\nexport const ISSUE_REQUEST = 'issue-request';\r\n/** the identifier used to store the schedule of the user in the session storage */\r\nexport const PLANNING = 'planning';\r\n/** number of seconds during it is valid the data of the planning stored in the session storage (0 to supress cache) */\r\nexport const PLANNING_LIFETIME = 60;\r\n/** the identifier used to store the today's schedule of the user in the session storage */\r\nexport const TODAY = 'today';\r\n/** number of seconds during it is valid the data of the today's planning stored in the session storage (0 to supress cache) */\r\nexport const TODAY_LIFETIME = 30;\r\n/** the identifier used to store the user data in the local storage */\r\nexport const USER = 'user';\r\n/** identifier of the user contract stored in the session storage (used by the user contract detail page) */\r\nexport const USER_CONTRACT_ID = 'user-contract';\r\n/** the identifier used to store the user contracts data in the session storage */\r\nexport const USER_CONTRACTS = 'user-contracts';\r\n/** number of seconds during it is valid the data of the user contracts stored in the session storage (0 to supress cache) */\r\nexport const USER_CONTRACTS_LIFETIME = 600;\r\n\r\n/** the role code of the guest user */\r\nexport const USER_ROLE_GUEST = 1;\r\n/** the role code of the customer user */\r\nexport const USER_ROLE_CUSTOMER = 3;\r\n/** the role code of the administrator user */\r\nexport const USER_ROLE_ADMINISTRATOR = 7;\r\n\r\n/** the status of the user when he/she has begun the signup process */\r\nexport const USER_STATUS_CREATED = 1;\r\n/** the status of the user when he/she has been sent the signup email */\r\nexport const USER_STATUS_EMAIL_SENT = 2;\r\n/** the status of the user when he/she has finished the signup process */\r\nexport const USER_STATUS_EMAIL_CONFIRMED = 3;\r\n/** the status of the user when he/she has been blacklisted */\r\nexport const USER_STATUS_EMAIL_BLACKLISTED = 4;\r\n\r\n/** the identifier used to store the user's workcenter data in the local storage */\r\nexport const WORKCENTER = 'workcenter';\r\n// tslint:enable:max-line-length\r\n","import { Observable } from \"rxjs\";\r\n\r\n/**\r\n * @function blob2base64\r\n * This function transforms a file into a base64 string, which is\r\n * useful to manage images as strings and store them in database\r\n * (should have in mind that this is not very efficient and should\r\n * only be used with very small images)\r\n * @param blob > the file as a binary stream\r\n * @returns a Promise of the data of the image as a base 64 string\r\n */\r\nexport function blob2base64(blob: Blob): Observable\r\n{\r\n return new Observable(\r\n function (observer) {\r\n const reader = new FileReader();\r\n reader.onloadend = function (event: any): void\r\n {\r\n observer.next(event.target.result);\r\n observer.complete();\r\n };\r\n reader.onerror = function (error: any): void\r\n {\r\n observer.error(error);\r\n };\r\n reader.readAsDataURL(blob);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @function blob2Image\r\n * this function loads an Image object with the data of the File image passed by parameter\r\n * @param blob > the image in binary data format that want to be loaded.\r\n * @returns {Observable} the data of the blob after reading it.\r\n */\r\nexport function blob2Image(blob: Blob): Observable\r\n{\r\n return new Observable((observer) =>\r\n {\r\n const reader = new FileReader();\r\n reader.onload = function (event: any): void\r\n {\r\n observer.next(event.target.result);\r\n };\r\n reader.onerror = function (error): void\r\n {\r\n observer.error(error);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n/**\r\n * @function canvas2Blob\r\n * this function transforms the canvas passed in the first parameter into\r\n * a Blob\r\n * @param canvas > the canvas wanted to be transformed into a blob\r\n * @param type > the type of image that contains the image (jpg, png...)\r\n * @returns {Blob} the Blob created from the canvas passed by parameter\r\n */\r\nexport function canvas2Blob(canvas: HTMLCanvasElement, type: string = 'image/png'): Blob\r\n{\r\n // converts the canvas to URI representation (default, png)\r\n const dataURI = canvas.toDataURL(type);\r\n const dataURIParts = dataURI.split(',');\r\n const byteString = dataURIParts[0].indexOf('base64') >= 0\r\n // converts base64 to raw binary data held in a string:\r\n ? atob(dataURIParts[1])\r\n // converts base64/URLEncoded data component to raw binary data:\r\n : decodeURIComponent(dataURIParts[1]);\r\n const arrayBuffer = new ArrayBuffer(byteString.length);\r\n const intArray = new Uint8Array(arrayBuffer);\r\n // makes a copy byte to byte into the array\r\n for (let i = 0; i < byteString.length; i += 1)\r\n {\r\n intArray[i] = byteString.charCodeAt(i);\r\n }\r\n // extracts the mime type from the serialized canvas\r\n const mimeString = dataURIParts[0].split(':')[1].split(';')[0];\r\n // builds the Blob from the bytes array\r\n return new Blob([hasBlobTypedArraySupport() ? intArray : arrayBuffer], { type: mimeString });\r\n}\r\n\r\n/**\r\n * @function hasBlobConstructor\r\n * this function checks if the browser is capable of create a Blob object\r\n * with the Blob constructor\r\n * @return {Boolean} true if the browser support build Blob objects, false\r\n * otherwise\r\n */\r\nexport function hasBlobConstructor(): Boolean\r\n{\r\n return typeof (Blob) !== 'undefined' && (function ()\r\n {\r\n try\r\n {\r\n return !!new Blob();\r\n }\r\n catch (e)\r\n {\r\n return false;\r\n }\r\n }());\r\n}\r\n\r\n/**\r\n * @function hasBlobSupport\r\n * this function checks if the browser support the Blob, Uint8Array and ArrayBuffer\r\n * objects, plus the atob function\r\n * @return {Boolean} true if the browser supports all of the Blob, Uint8Array and\r\n * ArrayBuffer objects, plus the atob function, false if the browser doesn't\r\n * support even one of them\r\n */\r\nexport function hasBlobSupport(): Boolean\r\n{\r\n return hasToBlobSupport() ||\r\n (typeof Uint8Array !== 'undefined' && typeof ArrayBuffer !== 'undefined' && typeof atob !== 'undefined');\r\n}\r\n\r\n/**\r\n * @function hasBlobTypedArraySupport\r\n * this function checks if the browser is capable of create an Uint8Array object\r\n * with the Uint8Array constructor\r\n * @return {Boolean} true if the browser support build Uint8Array objects, false\r\n * otherwise\r\n */\r\nexport function hasBlobTypedArraySupport(): Boolean\r\n{\r\n return hasBlobConstructor() && typeof (Uint8Array) !== 'undefined' && (function ()\r\n {\r\n try\r\n {\r\n return new Blob([new Uint8Array(100)]).size === 100;\r\n }\r\n catch (e)\r\n {\r\n return false;\r\n }\r\n }());\r\n}\r\n\r\n/**\r\n * @function hasToBlobSupport\r\n * this function checks if the browser support objects of type HTMLCanvasElement\r\n * and is capable of creating an Blob from an HTMLCanvasElement\r\n * @return {Boolean} true if the browser supports HTMLCanvasElement objects with\r\n * the toBlob function in it, false otherwise\r\n */\r\nexport function hasToBlobSupport(): Boolean\r\n{\r\n return (typeof HTMLCanvasElement !== 'undefined' ? !!HTMLCanvasElement.prototype.toBlob : false);\r\n}\r\n\r\n/**\r\n * @function url2blob\r\n * This function loads an image given its url and returns\r\n * the blob with the data of that image\r\n * @param url > the url of the image file\r\n * @returns {Observable} an observable of the data of the\r\n * image as a Blob object\r\n */\r\nexport function imageUrl2blob(url: string): Observable\r\n{\r\n return new Observable(function (observer)\r\n {\r\n fetch(url, { method: 'GET', mode: 'cors' })\r\n .then(response => response.blob())\r\n .then(blob =>\r\n {\r\n observer.next(blob);\r\n observer.complete();\r\n })\r\n .catch(error => observer.error(error));\r\n });\r\n}\r\n\r\n/**\r\n * @function saveBlob\r\n * @description This function allows to save a Blob with the specified file name at client side.\r\n * @param file > the {Blob} object with the data of the file to save at client side.\r\n * @param fileName > the name of the file to suggest when saving the file.\r\n */\r\nexport function saveBlob(file: Blob, fileName: string): void\r\n{\r\n const link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(file);\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));\r\n link.remove();\r\n window.URL.revokeObjectURL(link.href);\r\n}\r\n","import { regularExpressions } from 'app/shared/configuration/regular-expressions';\r\nimport { DateTime, Duration } from 'luxon';\r\n\r\n/**\r\n * @function dateTimeReviver\r\n * this function parses Date objects serialized by JSON stringify using the 8601 format, and transform\r\n * them into javascript DateTime valid objects.\r\n * @param key > the name of the property of type Date to parse.\r\n * @param value > the value to potentially be transformed into a valid DateTime.\r\n * @returns {DateTime|object} the original object if it was not a Date, or a DateTime result of the parsing\r\n * of the value passed by parameter into a DateTime\r\n */\r\nexport function dateTimeReviver(key: string, value: object) : DateTime | object\r\n{\r\n if (typeof value === 'string')\r\n {\r\n let a = regularExpressions.iso8601Date.exec(value);\r\n if (a)\r\n {\r\n return DateTime.fromISO(a[0]);\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * @function getDateFromDateAndTime\r\n * this function creates a DateTime object (regardless of the time zone) from a DateTime (SQL Date)\r\n * and a Duration (SQL Time).\r\n * @param date > the object of type DateTime with the date part.\r\n * @param time > the string of type Duration with the time part (ISO 8601).\r\n * @returns {DateTime} the LOCAL DateTime with the date and time specified by parameters.\r\n */\r\nexport function getDateFromDateAndTime(date: DateTime, time: Duration) : DateTime\r\n{\r\n return date.plus(time);\r\n}\r\n\r\n/**\r\n * @function getTime\r\n * this function creates a Duration object from the time part of a DateTime using the hours, minutes\r\n * and seconds of it.\r\n * @param dateTime > the object of type DateTime whose time part is ranted.\r\n * @returns {Duration} the time part of the given DateTime.\r\n */\r\nexport function getTime(dateTime: DateTime) : Duration\r\n{\r\n return Duration.fromObject({ hours: dateTime.hour, minutes: dateTime.minute, seconds: dateTime.second });\r\n}\r\n","export * from 'app/shared/lib/public-api';\r\n","import { DEFAULT_CURRENCY_ID, DEFAULT_LOCALE_ID } from 'app/shared/configuration/settings';\r\n\r\n/**\r\n * @function formatCurrency\r\n * utility function that transforms a value into a its representation\r\n * as currency, folling the pattern specified in the settings file\r\n * @param value > the value to be transformed into a currency string\r\n * @returns {string} the number formatted with the currency symbol,\r\n * in base to the rules of the locale specified in the settings.ts file\r\n */\r\nexport function formatCurrency(value: number): string\r\n{\r\n return new Intl.NumberFormat(DEFAULT_LOCALE_ID, { style: 'currency', currency: DEFAULT_CURRENCY_ID })\r\n .format(value);\r\n}\r\n","export * from 'app/shared/lib/blob';\r\nexport * from 'app/shared/lib/datetime';\r\nexport * from 'app/shared/lib/number';\r\nexport * from 'app/shared/lib/queue';\r\nexport * from 'app/shared/lib/string';\r\nexport * from 'app/shared/lib/utils';\r\n","export class Queue {\r\n\r\n public constructor(\r\n private elements: Record = {},\r\n private head: number = 0,\r\n private tail: number = 0\r\n )\r\n {\r\n }\r\n\r\n public enqueue(element: T): void\r\n {\r\n this.elements[this.tail] = element;\r\n this.tail++;\r\n }\r\n\r\n public dequeue(): T\r\n {\r\n const item = this.elements[this.head];\r\n delete this.elements[this.head];\r\n this.head++;\r\n\r\n return item;\r\n }\r\n\r\n public peek(): T\r\n {\r\n return this.elements[this.head];\r\n }\r\n\r\n public get length(): number\r\n {\r\n return this.tail - this.head;\r\n }\r\n\r\n public get isEmpty(): boolean\r\n {\r\n return this.length === 0;\r\n }\r\n\r\n}\r\n","import { blob2base64, imageUrl2blob } from 'app/shared/lib';\r\nimport { Observable, mergeMap } from 'rxjs';\r\n\r\n/**\r\n * @function capitalize\r\n * this function capitalizes a string, turning the first letter of each word to uppercase,\r\n * and the rest of letter lowercase.\r\n * @param s > the string to capitalize.\r\n * @returns {string} the original string modified having the first letter of each word uppercased\r\n * and the rest lowercased\r\n */\r\nexport function capitalize(s: string): string\r\n{\r\n return s.replace(/\\w\\S*/g, function (word) { return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase(); });\r\n}\r\n\r\n/**\r\n * @function imageUrl2base64\r\n * This function transforms a url of (supposedly) an image into a\r\n * base64 string, which is useful to manage images as strings and\r\n * store them in database (should have in mind that this is not very\r\n * efficient and should only be used with very small images)\r\n * @param url > the url of the image file\r\n * @returns {Observable} an OBservable of the data of the\r\n * image as a base 64 string\r\n */\r\nexport function imageUrl2base64(url: string): Observable\r\n{\r\n return url\r\n ? imageUrl2blob(url).pipe(mergeMap(blob => blob2base64(blob)))\r\n : null;\r\n}\r\n\r\n/**\r\n * @function parseURL\r\n * this function parses a string that must contains a well-built URL and\r\n * returns an object whose properties are the parts that compose the URL\r\n * @param href > the string containing the URL to parse\r\n * @returns returns an object with all the parts of which the URL is composed\r\n * from the returned object can contain:\r\n * href: an string containing the initial URL (i.e.: http://example.com:13517/pathname/?search=test#hash)\r\n * protocol: the protocol used (i.e.: http)\r\n * host: the domain plus the port (i.e.: example.com:13517)\r\n * hostname: the name of the host without the port (i.e.: example.com)\r\n * port: the port where the server is listen to (i.e.: 13517), or undefined\r\n * if no port is defined\r\n * pathname: the relative path (i.e.: /pathname/)\r\n * search: the part of the url corresponding to the search parameters\r\n * (i.e.: ?search=test)\r\n * hash: the hash part, that is, the location within the page (i.e.: #hash)\r\n * if no hash, returns undefined\r\n */\r\n// tslint:disable-next-line:max-line-length\r\nexport function parseURL(href: string): { href: string, protocol: string, host: string, hostname: string, port: number, pathname: string, search: string, hash: string }\r\n{\r\n const match = href.match(/^((https?\\:)\\/\\/(([^:\\/?#]*)(?:\\:([0-9]+))?))?([\\/]{0,1}[^?#]*)(\\?[^#]*|)(#.*|)$/);\r\n return match && {\r\n href: href,\r\n protocol: match[2] ? match[2] : undefined,\r\n host: match[3] ? match[3] : undefined,\r\n hostname: match[4] ? match[4] : undefined,\r\n port: Number(match[5]) ? Number(match[5]) : undefined,\r\n pathname: match[6] ? match[6] : undefined,\r\n search: match[7] ? match[7] : undefined,\r\n hash: match[8] ? match[8] : undefined\r\n };\r\n}\r\n","import { regularExpressions } from 'app/shared/configuration/regular-expressions';\r\nimport { DateTime, Duration } from 'luxon';\r\n\r\n/**\r\n * @method isInRoutes\r\n * this method checks that the given url matches with an item of the routes array.\r\n * @param url > the url to be processed and checked against the routes array.\r\n * @returns {boolean} a flag that indicates if the route is in the routes array or not\r\n */\r\nexport function isInRoutes(url: string, routes: (string | RegExp)[], match: 'exact' | 'startsWith' | 'endsWith' = 'exact'): boolean {\r\n switch(match)\r\n {\r\n case 'endsWith':\r\n return (\r\n routes.some(\r\n route =>\r\n typeof route === 'string'\r\n ? url.endsWith(route)\r\n : route instanceof RegExp ? route.test(url) : false\r\n )\r\n );\r\n case 'exact':\r\n return (\r\n routes.findIndex(\r\n route =>\r\n typeof route === 'string'\r\n ? route === url\r\n : route instanceof RegExp ? route.test(url) : false\r\n ) > -1\r\n );\r\n case 'startsWith':\r\n return (\r\n routes.some(\r\n domain =>\r\n typeof domain === 'string'\r\n ? url.startsWith(domain)\r\n : domain instanceof RegExp ? domain.test(url) : false\r\n )\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @function reviveDates\r\n * this function parses all the objects in the body of the request and, if some of them is a Date in\r\n * 8601 format, transforms it parsing the string into a DateTime.\r\n * @param object > the object to parse. it can be a composed object, a basic type, an array, or any\r\n * other thing.\r\n */\r\nexport function reviveDates(object: object): void\r\n{\r\n if (!object || !(object instanceof Object))\r\n {\r\n return;\r\n }\r\n if (object instanceof Array)\r\n {\r\n for (const item of object)\r\n reviveDates(item);\r\n }\r\n for (const key of Object.keys(object))\r\n {\r\n const value = object[key];\r\n if (value instanceof Array)\r\n {\r\n for (const item of value)\r\n reviveDates(item);\r\n }\r\n reviveDates(value);\r\n if (typeof value === 'string')\r\n {\r\n if (regularExpressions.iso8601Date.test(value))\r\n {\r\n object[key] = DateTime.fromISO(value);\r\n }\r\n if (regularExpressions.iso8601Duration.test(value))\r\n {\r\n object[key] = Duration.fromISO(value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function luxonReviver(key: string, value: object) {\r\n\r\n}\r\n\r\n/**\r\n * @function rehydrate\r\n * this function copies the values of the source object into the copy object. This is meant to be\r\n * used to copy a presumably deserialized object into a copy of that object, but with the prototype\r\n * and functions of the copy (that should have been created using the class constructor).\r\n * @param source > the object wanted to be rehydrated (the object that is wanted to acquire the\r\n * properties and functions of its class, if it had been created using is own constructor).\r\n * @param copy > the object created using the constructor class, that will be used to create the\r\n * full object by copying the property values of the source object into it.\r\n * @returns {T} the original object like if it had been created using the class constructor.\r\n */\r\nexport function rehydrate(source: T, copy: T) : T\r\n{\r\n for (var prop in source)\r\n {\r\n if (Object.prototype.hasOwnProperty.call(source, prop))\r\n {\r\n copy[prop] = source[prop];\r\n }\r\n }\r\n return copy;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * represents a bank account string into blocks of four digits.\r\n * Usage:\r\n * value | bankaccount\r\n*/\r\n@Pipe({\r\n name : 'bankaccount',\r\n standalone: true,\r\n})\r\nexport class BankaccountPipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * takes a string as parameter and returns the same string in blocks of 4 digits separated by\r\n * white spaces.\r\n * @param value > the string to transform.\r\n * @param hide > replaces the sixteen first characters with asterisks.\r\n * @returns {string} the string separated by white spaces in six blocks of four digits.\r\n */\r\n public transform(value: string, hide: boolean = false): string {\r\n return hide\r\n ? value.replace(/[-\\s]/g, '')\r\n .replace(/^[a-z0-9]{20}/ig, (s: string): string => '*'.repeat(s.length))\r\n .match(/.{4}/g)\r\n .join(' ')\r\n : value.replace(/[-\\s]/g, '')\r\n .toUpperCase()\r\n .match(/.{4}/g)\r\n .join(' ');\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * capitalize the first letter of the string. takes a string as a value.\r\n * Usage:\r\n * value | concat:', '\r\n*/\r\n@Pipe({\r\n name : 'concat',\r\n standalone: true,\r\n})\r\nexport class ConcatPipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * takes aa array of strings as parameter and returns the a string result of the concatenation\r\n * of the items in the array with the separator between them.\r\n * @param array > the array of strings to transform into a concatenated string.\r\n * @param separator > the string to use as the join of the items of the array.\r\n * @returns {string} the string result of the concatenation of the items in the array.\r\n */\r\n public transform(array: string[], separator: string = ', '): string\r\n {\r\n return array.join(separator);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * transforms a DateTime (luxon) object into a string with the specified format.\r\n * Usage:\r\n * value | datetime:'format'\r\n*/\r\n@Pipe({\r\n name : 'datetime',\r\n standalone: true,\r\n})\r\nexport class DateTimePipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * converts the value passed by parameter into a datetime representation of the shape specified.\r\n * if the first argument is of type DateTime, returns it as a string in the specified format.\r\n * if it is a number consider it as unix time (milliseconds) and transforms it into a DateTime,\r\n * returning its representation like in the first case.\r\n * if it is an ISO string parses it and proceeds in the same way.\r\n * @param value > a DateTime to represent in the specified format.\r\n * @param format > the format in which represent the DateTime.\r\n * @param timezone > the timezone in which to perform the rendering (at the moment, not implemented).\r\n * @param locale > the locale in which to perform the rendering (at the moment, not implemented).\r\n * @returns {string} the string with the DateTime formatted.\r\n */\r\n public transform(value: number | string | DateTime, format?: string, timezone?: string, locale?: string): string | null {\r\n if (DateTime.isDateTime(value))\r\n return value.toFormat(format);\r\n switch (typeof(value))\r\n {\r\n case 'number': return DateTime.fromMillis(value).toFormat(format);\r\n case 'string': return DateTime.fromISO(value).toFormat(format);\r\n default: return '';\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { getTime } from 'app/shared/lib';\r\nimport { DateTime, Duration } from 'luxon';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * transforms a number (integer) of minutes into a duration with the shape Xh YY'.\r\n * Usage:\r\n * value | duration\r\n*/\r\n@Pipe({\r\n name : 'duration',\r\n standalone: true,\r\n})\r\nexport class DurationPipe implements PipeTransform\r\n{\r\n\r\n /**\r\n * @method transform\r\n * converts the value passed by parameter into a duration representation of the shape\r\n * 'HH:mm'. if the first argument is of type Duration or DateTime, transforms it into a string.\r\n * if it is a number (of minutes) returns its representation of the corresponding duration\r\n * into a string with the shape 'HH:mm'. if the original value is of type string the\r\n * function supposes that it is in ISO 8601 format and proceeds in the same way.\r\n * @param value > a number with the minutes to represent as a duration.\r\n * @param unit > a string specifying the unit of time in which it is desired the duration to be\r\n * formatted. if specified the function will return the unit of time plus the letter corresponding\r\n * to that unit of time.\r\n * @returns {string} the string with the minutes passed by parameter represented as a\r\n * duration in hours and minutes, or the unit of time plus the corresponding letter, e.g.:\r\n * '2020-10-25T16:12:31' | duration:'hours' -> '16.2 h'\r\n * 'PT2H7M' | duration -> '02:07'\r\n */\r\n public transform(value: number | string | DateTime | Duration, unit?: 'days' | 'hours' | 'minutes' | 'seconds', decimals: number = 1): string\r\n {\r\n let _duration: Duration =\r\n Duration.isDuration(value) // Duration\r\n ? value\r\n : DateTime.isDateTime(value) // DateTime\r\n ? getTime(value)\r\n : typeof(value) === 'number' // number (minutes)\r\n ? Duration.fromObject({ minutes: value || 0 })\r\n : typeof(value) === 'string' // string (ISO 8601)\r\n ? Duration.fromISO(value)\r\n : null;\r\n return !!unit ? _duration.as(unit).toFixed(decimals) + ' ' + unit.charAt(0) : _duration?.toFormat('hh:mm');\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { filter } from 'lodash';\r\n\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * filters an array by the specified field(s).\r\n * Usage:\r\n * value | filter:'active'\r\n * value | filter:'Completed.length'\r\n * value | filter:['age',36]\r\n * value | filter:{'age':36, active:false}\r\n*/\r\n@Pipe({\r\n name : 'filter',\r\n standalone: true,\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * filters the array passed by parameter using the second parameter, which can be of any of the\r\n * following types:\r\n * - string: will filter by a boolean field/path when it is true.\r\n * - [string, any]: will filter the items that have the field whose name matches the first item\r\n * of the given array with the value equals to the second item of the array.\r\n * - object: filter using the fields and values of the given object.\r\n * @param value > an array of items of unknown type (of any type).\r\n * @param args > a string|array|objet specifying the parameters of the filter.\r\n * @returns {unknown[]} the original array filtered by the conditions specified in the second\r\n * parameter.\r\n */\r\n public transform(value: unknown[], args: string | [] | object): unknown[] {\r\n return filter(value, args);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * capitalize the first letter of the string. takes a string as a value.\r\n * Usage:\r\n * value | firstcase\r\n*/\r\n@Pipe({\r\n name : 'firstcase',\r\n standalone: true,\r\n})\r\nexport class FirstCasePipe implements PipeTransform\r\n{\r\n\r\n /**\r\n * @method transform\r\n * takes a string as parameter and returns the same string with the first letter uppercase and\r\n * the rest of the string lowercase. If a separator is provided the original string will be\r\n * splitted by it and then the transformation will be applied to all the substrings, returning\r\n * the concatenation of each substring transformed.\r\n * @param value > the string to transform.\r\n * @param separator > a string used to split the original string and apply the pipe to all the\r\n * substrings.\r\n * @returns {string} the string with the first letter capitalized and the rest of the string in\r\n * lowercase.\r\n */\r\n public transform(value: any, separator: string = undefined): any\r\n {\r\n return typeof value === 'string'\r\n ? value\r\n .split(separator)\r\n .map(s => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase())\r\n .join(separator)\r\n : value;\r\n }\r\n\r\n}\r\n","export * from 'app/shared/pipes/public-api';\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * subtracts the specified number of days to the original date.\r\n * Usage:\r\n * value | plus:1\r\n*/\r\n@Pipe({\r\n name : 'minus',\r\n standalone: true,\r\n})\r\nexport class MinusPipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * takes a date as parameter and returns the date minus the specified days (so, subtracts the specified\r\n * number of days to the original date). usage: | minus:1\r\n * @param value > the original date.\r\n * @param days > the number of days to subtract to the original date.\r\n * @returns {DateTime} the final date, result of subtracting the value of the 'days' parameter to the\r\n * original date.\r\n */\r\n public transform(value?: DateTime, days?: number): DateTime {\r\n return value\r\n ? value.minus({ days: days || 0 })\r\n : null;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * adds the specified number of days to the original date.\r\n * Usage:\r\n * value | plus:1\r\n*/\r\n@Pipe({\r\n name : 'plus',\r\n standalone: true,\r\n})\r\nexport class PlusPipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * takes a date as parameter and returns the date plus the specified days (so, adds the specified\r\n * number of days to the original date). usage: plus:1\r\n * @param value > the original date.\r\n * @param days > the number of days to add to the original date.\r\n * @returns {DateTime} the final date, result of adding the value of the 'days' parameter to the\r\n * original date.\r\n */\r\n public transform(value?: DateTime, days?: number): DateTime {\r\n return value\r\n ? value.plus({ days: days || 0 })\r\n : null;\r\n }\r\n\r\n}\r\n","export * from 'app/shared/pipes/bankaccount.pipe';\r\nexport * from 'app/shared/pipes/concat.pipe';\r\nexport * from 'app/shared/pipes/datetime.pipe';\r\nexport * from 'app/shared/pipes/duration.pipe';\r\nexport * from 'app/shared/pipes/filter.pipe';\r\nexport * from 'app/shared/pipes/firstcase.pipe';\r\nexport * from 'app/shared/pipes/minus.pipe';\r\nexport * from 'app/shared/pipes/plus.pipe';\r\nexport * from 'app/shared/pipes/safeurl.pipe';\r\nexport * from 'app/shared/pipes/titlecase.pipe';\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * sanitizes the url (string) passed by parameter to be used in the DOM safely.\r\n * Usage:\r\n * value | safeUrl\r\n*/\r\n@Pipe({\r\n name : 'safeUrl',\r\n standalone: true,\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n\r\n /**\r\n * @constructor\r\n * builds the pipe with the required services needed to work.\r\n * @param _domSanitizer > this service allows to prevent cross site scripting security bugs (XSS)\r\n * by sanitizing values to be used in the DOM.\r\n */\r\n constructor(private _domSanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * @method transform\r\n * takes a string as parameter and returns the same string converted into a safe URL.\r\n * @param value > the string to transform.\r\n * @returns {string} the string with the URL sanitized.\r\n */\r\n public transform(url: string): SafeResourceUrl {\r\n return this._domSanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * capitalize the first letter of the string. takes a string as a value.\r\n * Usage:\r\n * value | titlecase\r\n*/\r\n@Pipe({\r\n name : 'titlecase',\r\n standalone: true,\r\n})\r\nexport class TitleCasePipe implements PipeTransform {\r\n\r\n /**\r\n * @method transform\r\n * takes a string as parameter and returns the same string with the first letter uppercase and\r\n * the rest of the string lowercase for each word in the string.\r\n * @param value > the string to transform.\r\n * @param separator > a string used to split the original string and apply the pipe to all the\r\n * substrings.\r\n * @returns {string} the string with the first letter of each word capitalized and the rest of the\r\n * string (of each word) in lowercase.\r\n */\r\n public transform(value: any, separator: string = undefined): any {\r\n return typeof value === 'string'\r\n ? value\r\n .split(separator)\r\n .map(s => s.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' '))\r\n .join(separator)\r\n : value;\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND } from 'app/shared/configuration/settings';\r\nimport { Person } from 'app/shared/models';\r\nimport { map, Observable, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the assistants data.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CarersService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the assistants backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/assistants`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type CarersService, with the core objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the backend server.\r\n * @param _errorsService > the service used to send messages to the messages component.\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method getCarersAtUserDoor\r\n * GET: gets the list of the names of the carers that are currently at the door of the user's house.\r\n * @param id > the id of the user that wanna know who carers are at the door of their house.\r\n * @returns {Observable} the list of names of the carers that are NOW at the door of the\r\n * user's house.\r\n */\r\n public getCarersAtUserDoor(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/at-door/user/${id}`, { headers })\r\n .pipe(\r\n map((response: any) => response.map((caud: { Assistant: Person }) => caud.Assistant)),\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventLoaded'))\r\n );\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND } from 'app/shared/configuration/settings';\r\nimport { CoordinatorUserCallRequest, CoordinatorUserIssueRequest } from 'app/shared/models';\r\nimport { catchError, EMPTY, Observable, tap, throwError } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the coordinators data.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CoordinatorsService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the coordinators backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/coordinators`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type CoordinatorsService, with the core\r\n * objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method deleteUserIssueRequest\r\n * POST: deletes a request (notification) to the speficied coordinator, by passing the\r\n * identifier of the given issue request.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param issueRequest > the CoordinatorUserIssueNotification object with the identifier\r\n * used to delete it.\r\n * @returns {Observable} the coordinator-user issue\r\n * notification deleted.\r\n */\r\n public deleteUserIssueRequest(issueRequest: CoordinatorUserIssueRequest, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .delete(`${this._uri}/user-issue/${issueRequest.Id}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleSuccess('successCoordinatorUserIssueNotificationDeleted', true))\r\n );\r\n }\r\n\r\n /**\r\n * @method postUserCallRequest\r\n * POST: creates a pending call object for the coordinator to call the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the identifier of the coordinator that is requested to make the call.\r\n * @param userId > the identifier of the user that has requested the call.\r\n * @returns {Observable} the coordinator-user call created.\r\n */\r\n public postUserCallRequest(id: number, userId: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .post(`${this._uri}/${id}/user-call/${userId}`, null, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleSuccess('successCoordinatorUserCallCreated', true)),\r\n catchError(err =>\r\n {\r\n if (err.status === 412)\r\n {\r\n this._errorsService.handleError('dangerCoordinatorUserCallAlreadyExists', true);\r\n return EMPTY;\r\n }\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @method postUserIssueRequest\r\n * POST: creates a request (notification) to the speficied coordinator, for creating\r\n * an issue to the user specified in the issueRequest parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param issueRequest > the CoordinatorUserIssueNotification object with the\r\n * data precised to create a notification issue request.\r\n * @returns {Observable} the coordinator-user issue\r\n * notification created.\r\n */\r\n public postUserIssueRequest(issueRequest: CoordinatorUserIssueRequest, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .post(`${this._uri}/${issueRequest.Coordinator.Id}/user-issue/${issueRequest.User.Id}`, issueRequest, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleSuccess('successCoordinatorUserIssueNotificationCreated', true)),\r\n catchError(err =>\r\n {\r\n if (err.status === 412)\r\n {\r\n this._errorsService.handleError('dangerCoordinatorUserIssueNotificationAlreadyExists', true);\r\n return EMPTY;\r\n }\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @method putUserIssueRequest\r\n * POST: updates a request (notification) to the speficied coordinator, for updating\r\n * an issue of the user specified in the issueRequest parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param issueRequest > the CoordinatorUserIssueNotification object with the\r\n * data precised to edit a notification issue request.\r\n * @returns {Observable} the coordinator-user issue\r\n * notification updated.\r\n */\r\n public putUserIssueRequest(issueRequest: CoordinatorUserIssueRequest, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .put(`${this._uri}/user-issue/${issueRequest.Id}`, issueRequest, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleSuccess('successCoordinatorUserIssueNotificationUpdated', true))\r\n );\r\n }\r\n\r\n}\r\n","export * from 'app/shared/services/public-api';\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND, DEFAULT_DATE_FORMAT } from 'app/shared/configuration/settings';\r\nimport { getDateFromDateAndTime } from 'app/shared/lib';\r\nimport { PlanningEvent, PlanningEventOccurrence, Task } from 'app/shared/models';\r\nimport { DateTime, Duration } from 'luxon';\r\nimport { Observable, tap, map } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the loading of data related to users/carers planning.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlanningEventsService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the planning events backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/planning`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type UsersService, with the core\r\n * objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method getBasePlanningEventsPerUserAndWeek\r\n * GET: gets the base planning events for the user whose id is passed by parameter, for the\r\n * week whose date is passed in the second parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose base planning events of the week are wanted to be retrieved\r\n * from the database\r\n * @param date > date of the week for which the base planning events are requested\r\n * @returns {Observable} the base planning events that occur in the specified week,\r\n * for the specified user\r\n */\r\n public getBasePlanningEventsPerUserAndWeek(id: number, date: DateTime, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/base/user/${id}/week/${date.startOf('week').toFormat(DEFAULT_DATE_FORMAT)}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventsLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getMonthPlanningEventsPerUser\r\n * GET: gets the planning events of the specified month for the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose planning events and tasks of the month are wanted to be\r\n * retrieved from the database.\r\n * @param month > the number of the month whose planning events are wanted.\r\n * @param year > the year (of the month) requested.\r\n * @returns {Observable<{ DateTime, PlanningEventOccurrence[], Task[] }>} the collection of objects\r\n * containing all the days in month plus the planning events and tasks for each day (if any).\r\n */\r\n public getMonthPlanningEventsPerUser(id: number, month: number, year: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ Date: DateTime, Agenda: PlanningEventOccurrence[], Tasks: Task[] }[]>\r\n {\r\n return this._http\r\n .get<{ Date: DateTime, Agenda: PlanningEventOccurrence[], Tasks: Task[] }[]>(`${this._uri}/month/${month}/${year}/user/${id}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getNextPlanningEventPerUser\r\n * GET: gets the next planning event for the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose next planning event is wanted to be retrieved\r\n * from the database\r\n * @returns {Observable} the planning event with the next service of\r\n * the user whose identifier is passed by parameter\r\n */\r\n public getNextPlanningEventPerUser(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/weekly/active/user/${id}/next`, { headers })\r\n .pipe(\r\n map((response: any) => {\r\n Id: response.Id,\r\n AssistantName: response.Name,\r\n End: getDateFromDateAndTime(response.Date, response.LocalEndTime),\r\n Start: getDateFromDateAndTime(response.Date, response.LocalStartTime)\r\n }),\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getTodayPlanningEventsPerUser\r\n * GET: gets the today's planning events for the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose today's planning events are wanted to be retrieved\r\n * from the database.\r\n * @returns {Observable} the planning events that the specified\r\n * user has scheduled for today.\r\n */\r\n public getTodayPlanningEventsPerUser(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ Agenda: PlanningEventOccurrence[], Tasks: Task[] }>\r\n {\r\n return this._http\r\n .get<{ Agenda: PlanningEventOccurrence[], Tasks: Task[] }>(`${this._uri}/today/user/${id}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getWeeklyPlanningEventsPerUserAndWeek\r\n * GET: gets the weekly planning events for the user whose id is passed by parameter, for the\r\n * week whose date is passed in the second parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose weekly planning events of the week are wanted to be retrieved\r\n * from the database\r\n * @param date > date of the week for which the weekly planning events are requested\r\n * @returns {Observable} the weekly planning events that occur in the specified week,\r\n * for the specified user\r\n */\r\n public getWeeklyPlanningEventsPerUserAndWeek(id: number, date: DateTime, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/weekly/active/user/${id}/week/${date.startOf('week').toFormat(DEFAULT_DATE_FORMAT)}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventsLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getWeeklyPlanningHoursPerUserAndDay\r\n * GET: gets the hours of the weekly planning events for the user whose id is passed by parameter,\r\n * for the day whose date is passed in the second parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose weekly planning event hours of the day are wanted to be\r\n * retrieved from the database.\r\n * @param date > date of the day for which the weekly planning event hours are requested.\r\n * @returns {Observable<{ Id: number, LocalStartTime: Duration }[]>} the hours of the weekly planning\r\n * events that occur in the specified day, for the specified user.\r\n */\r\n public getWeeklyPlanningHoursPerUserAndDay(id: number, date: string | DateTime, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ Id: number, LocalStartTime: Duration }[]>\r\n {\r\n return this._http\r\n .get<{ Id: number, LocalStartTime: Duration }[]>(`${this._uri}/day/${DateTime.isDateTime(date) ? date.toISODate() : date}/user/${id}/hours`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventHoursLoaded'))\r\n );\r\n }\r\n\r\n}\r\n","export * from 'app/shared/services/carers.service';\r\nexport * from 'app/shared/services/coordinators.service';\r\nexport * from 'app/shared/services/planning-events.service';\r\nexport * from 'app/shared/services/tasks.service';\r\nexport * from 'app/shared/services/technical-issue-types.service';\r\nexport * from 'app/shared/services/users.service';\r\nexport * from 'app/shared/services/workcenters.service';\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/errors';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND, DEFAULT_DATE_FORMAT } from 'app/shared/configuration/settings';\r\nimport { Task, TaskOccurrence } from 'app/shared/models';\r\nimport { DateTime } from 'luxon';\r\nimport { Observable, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the loading of data related to the tasks granted (or done) to users.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TasksService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the task occurrences backend service */\r\n private _uriTaskOccurrences = `${ENDPOINT_BACKEND}/task-occurrences`;\r\n /** the base uri used to connect to the tasks backend service */\r\n private _uriTasks = `${ENDPOINT_BACKEND}/tasks`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type UsersService, with the core\r\n * objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method getCheckedTasksPerUserAndWeek\r\n * GET: gets the tasks that have been performed on the user in the specified week.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose performed tasks are wanted to be retrieved from the database.\r\n * @param date > date of the week for what the tasks are requested.\r\n * @returns {Observable} the tasks performed on the user, that occur in the specified\r\n * week.\r\n */\r\n public getCheckedTasksPerUserAndWeek(id: number, date: DateTime, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uriTaskOccurrences}/user/${id}/date/${date.startOf('week').toFormat(DEFAULT_DATE_FORMAT)}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCheckedTasksLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getNextPlanningEventPerUser\r\n * GET: gets the today's planning events for the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose today's planning events are wanted to be retrieved\r\n * from the database.\r\n * @returns {Observable} the planning events that the specified\r\n * user has scheduled for today.\r\n */\r\n public getTodayTasksPerUser(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uriTasks}/today/user/${id}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successPlanningEventLoaded'))\r\n );\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/errors';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND } from 'app/shared/configuration/settings';\r\nimport { TechnicalIssueType } from 'app/shared/models';\r\nimport { Observable, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the loading of data related to the tasks granted (or done) to users.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TechnicalIssueTypesService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the technical issue types backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/technical-issue-types`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type TechnicalIssueTypesService, with the core objects needed to its\r\n * implementation.\r\n * @param _http > the object used to send HTTP requests to the backend server.\r\n * @param _errorsService > the service used to send messages to the messages component.\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method getIssueNotificationsTechnicalIssueTypes\r\n * GET: gets the technical issue types of the technical issue notificationss that can be created\r\n * by a user (and send to their coordinator).\r\n * @param id > the id of the workcenter that the user belongs to (to filter the reasons of the\r\n * technical issue types).\r\n * @returns {Observable} the technical issue types of the technical issue\r\n * notifications that the user can create.\r\n */\r\n public getIssueNotificationsTechnicalIssueTypes(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/workcenter/${id}/issue-notifications`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCheckedTasksLoaded'))\r\n );\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/services';\r\nimport { BLOB_RESPONSE_TYPE, DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND, DEFAULT_DATE_FORMAT } from 'app/shared/configuration/settings';\r\nimport { blob2Image } from 'app/shared/lib';\r\nimport {\r\n CompensationUserContract,\r\n CompensationUserContractTaskDays,\r\n Coordinator,\r\n CoordinatorUserCallRequest,\r\n CoordinatorUserIssueRequest,\r\n Copayment,\r\n DataSourceRequest,\r\n IncomePerCapita,\r\n User,\r\n UserContract,\r\n WorkCenterInfo\r\n} from 'app/shared/models';\r\nimport { DateTime } from 'luxon';\r\nimport { catchError, EMPTY, map, mergeMap, Observable, tap, throwError } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the users data.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UsersService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the users backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/users`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type UsersService, with the core\r\n * objects needed to its implementation.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method getUser\r\n * GET: gets a user from the backend (database) server given its id.\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the user object to be retrieved from the database.\r\n * @returns {Observable} the user whose identifier\r\n * is passed by parameter.\r\n */\r\n public getInfo(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/info`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('User work center info loaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUser\r\n * GET: gets the authenticated user from the backend (database) server (through the token).\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @returns {Observable} the user whose identifier\r\n * is passed by parameter.\r\n */\r\n public getUser(headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}`, { headers })\r\n .pipe(\r\n tap(user => this._errorsService.handleInfo('successUserLoaded', user.FullName))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserContracts\r\n * GET: gets the list of user contracts, public and privates, from the backend (database) server\r\n * given the id of the user. since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the user whose contracts want to be retrieved from the database.\r\n * @returns {Observable} an array with the list of public and private user\r\n * contracts of the user whose identifier is passed by parameter.\r\n */\r\n public getUserContracts(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/contracts`, { headers })\r\n .pipe(\r\n tap(contracts => this._errorsService.handleInfo('successUserContractsLoaded', contracts.length))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserContractsPaged\r\n * GET: gets the list of user contracts plus the info of the official body contract\r\n * and tasks from the backend (database) server given the id of the user.\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the user whose contracts want to be retrieved from the database.\r\n * @returns {Observable<{number, CompensationUserContract[]}>} an object with two properties;\r\n * 1. Total, with the number that specifies the total records that produces the query, and\r\n * 2. Data, an array with the list of compensation user contracts of the user whose identifier\r\n * is passed by parameter, taken in the number of rows specified in the options (what could be\r\n * different from the total number of rows returned).\r\n */\r\n public getUserContractsPaged(id: number, data: DataSourceRequest, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ Total: number, Data: CompensationUserContract[] }>\r\n {\r\n return this._http\r\n .post<{ Total: number, Data: CompensationUserContract[] }>(`${this._uri}/${id}/public-contracts/paged`, data, { headers })\r\n .pipe(\r\n tap(contracts => this._errorsService.handleInfo('successUserContractsLoaded', contracts.Total))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCoordinator\r\n * GET: gets the data of coordinator responsible of the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose coordinator want to be retrieved from the database.\r\n * @returns {Observable} an object with the data of the coordinator responsible\r\n * of the specified (by the id parameter) user.\r\n */\r\n public getUserCoordinator(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/coordinator`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCoordinatorLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCoordinatorCalls\r\n * GET: gets the list of user-coordinator calls (the calls requested by the user and receive from\r\n * the coordinators) from the backend (database) server given the id of the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose coordinator calls want to be retrieved from the database.\r\n * @returns {Observable} an array with the list of coordinator user\r\n * calls of the user whose identifier is passed by parameter.\r\n */\r\n public getUserCoordinatorCallRequests(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/coordinator-call-requests`, { headers })\r\n .pipe(\r\n tap(calls => this._errorsService.handleInfo('successCoordinatorUserCallsLoaded', calls.length))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCoordinatorIssueNotifications\r\n * GET: gets the list of user-coordinator issue notifications (the issue notifications sent by the\r\n * user and receive from their assigned coordinators) from the backend (database) server given the\r\n * id of the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose coordinator issue notifications want to be retrieved from\r\n * the database.\r\n * @returns {Observable} an array with the list of coordinator\r\n * user issue notifications of the user whose identifier is passed by parameter.\r\n */\r\n public getUserCoordinatorIssueRequests(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/coordinator-issue-requests`, { headers })\r\n .pipe(\r\n tap(calls => this._errorsService.handleInfo('successCoordinatorUserIssueNotificationsLoaded', calls.length))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCopayments\r\n * GET: gets the list of user contracts plus the info of the official body contract\r\n * and tasks from the backend (database) server given the id of the user.\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the user whose contracts want to be retrieved from the database.\r\n * @returns {Observable<{number, CompensationUserContract[]}>} an object with two properties;\r\n * 1. Total, with the number that specifies the total records that produces the query, and\r\n * 2. Data, an array with the list of compensation user contracts of the user whose identifier\r\n * is passed by parameter, taken in the number of rows specified in the options (what could be\r\n * different from the total number of rows returned).\r\n */\r\n public getUserCopayments(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/copayments-incomepercapita/current`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCopaymentsLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCurrentIncomePerCapita\r\n * GET: gets the currently in force user income per capita record from the backend (database)\r\n * server given the id of the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose income per capita want to be retrieved from the database.\r\n * @returns {Observable} the in force income per capita of the user.\r\n */\r\n public getUserCurrentIncomePerCapita(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/incomespercapita/current`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successCurrentIncomePerCapitaLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserCurrentTasks\r\n * GET: gets the list of user tasks plus the info of the care types, under which the tasks\r\n * are grouped, from the backend (database) server given the id of the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose contract tasks want to be retrieved from the database.\r\n * @returns {Observable<{ CareType: string, TaskDays: CompensationUserContractTaskDays[] }[]>} an\r\n * array with the list of compensation user contracts tasks grouped by care type, of the user\r\n * whose identifier is passed by parameter.\r\n */\r\n public getUserCurrentTasks(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ CareType: string, TaskDays: CompensationUserContractTaskDays[] }[]>\r\n {\r\n return this._http\r\n .post<{ CareType: string, TaskDays: CompensationUserContractTaskDays[] }[]>(`${this._uri}/${id}/tasks/current`, { headers })\r\n .pipe(\r\n tap(jo => this._errorsService.handleInfo('successTasksLoaded', jo.length))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserOpenBt\r\n * GET: gets the currently open BT issues for the specified user (given their id).\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose open BT want to be loaded.\r\n * @returns {Observable<{ Id: number, LocalStartDate: DateTime }[]>} the list of open BT (defined\r\n * by their Id and StartDate) of the specified user.\r\n */\r\n public getUserOpenBt(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable<{ Id: number, LocalStartDate: DateTime }[]>\r\n {\r\n return this._http\r\n .get<{ Id: number, LocalStartDate: DateTime }[]>(`${this._uri}/${id}/user-technical-issues/open-bt`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successOpenBtLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserPhoto\r\n * GET: gets the photo of the specified user from the backend (database) server given the\r\n * id of the user.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose photo want to be retrieved from the database.\r\n * @returns {Observable} an object of type binary object with the data of the photo.\r\n */\r\n public getUserPhoto(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/profile-photo`, { ...headers, ...BLOB_RESPONSE_TYPE })\r\n .pipe(\r\n mergeMap(blob => blob2Image(blob)),\r\n tap(_ => this._errorsService.handleInfo('successPhotoLoaded')),\r\n catchError(err => err.status === 404 ? EMPTY : throwError(err))\r\n );\r\n }\r\n\r\n /**\r\n * @method getUserPhotoUrl\r\n * GET: gets the URL of the photo of the user whose id is passed by parameter, with the security\r\n * token embedded in it. This token has a very short expiration date, so it is important that the\r\n * page is been rendered as soon as possible once the URL is retrieved.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose open BT want to be loaded.\r\n * @returns {Observable<{ Id: number, LocalStartDate: DateTime }[]>} the list of open BT (defined\r\n * by their Id and StartDate) of the specified user.\r\n */\r\n public getUserPhotoUrl(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get<{ Url: string }>(`${this._uri}/${id}/profile-photo-url`, { headers })\r\n .pipe(\r\n map(_ => _.Url),\r\n tap(_ => this._errorsService.handleInfo('successPhotoUrlLoaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method changeUserPassword\r\n * POST: updates the user password with the new one passed by parameter, if the original password\r\n * passed by parameter matches the one stored in the backend (database) server.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the identifier of the user whose password want to be changed.\r\n * @param oldPassword > the old password used to authenticate the user.\r\n * @param newPasword > the new password that should be saved in database.\r\n * @param email > the new email that should be stored in database.\r\n * @returns {Observable} the user after the update action.\r\n */\r\n public putUserPassword(id: number, oldPassword: string, password: string, email: string, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .put(`${this._uri}/${id}/change-password`, { oldPassword: oldPassword, newPassword: password, email: email, lastExternalLogin: DateTime.local() }, { headers })\r\n .pipe(\r\n //tap(rows => this._errorsService.handleSuccess(`User password updated (${rows})`, true)),\r\n catchError(err => {\r\n if (err.status === 409) {\r\n this._errorsService.handleError('dangerIncorrectPassword', true);\r\n return EMPTY;\r\n }\r\n return throwError(() => err);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * @method putUserPhoto\r\n * POST: updates the user photo with the new one passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the identifier of the user whose photo want to be changed.\r\n * @returns {Observable} the (partial) URL of the new photo.\r\n */\r\n public putUserPhoto(id: number, photo: File): Observable\r\n {\r\n const uploadData = new FormData();\r\n uploadData.append('file', photo);\r\n return this._http\r\n .post<{ Url: string }>(`${this._uri}/${id}/profile-image`, uploadData)\r\n .pipe(\r\n map(_ => _.Url)\r\n );\r\n }\r\n\r\n /**\r\n * @method putUserRGPD\r\n * PUT: updates the date when the user whose id is passed by parameter has accepted the RGPD.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose RGPD acceptation date is wanted to be updated.\r\n * @returns {Observable\r\n {\r\n return this._http\r\n .put(`${this._uri}/${id}/accept-rgpd/${date.startOf('week').toFormat(DEFAULT_DATE_FORMAT)}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('successRGPDAccepted'))\r\n );\r\n }\r\n\r\n}\r\n","import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ErrorsService } from 'app/core/errors';\r\nimport { DEFAULT_HTTP_HEADERS, ENDPOINT_BACKEND } from 'app/shared/configuration/settings';\r\nimport { RepositoryDocument, WorkCenter, WorkCenterConfiguration, WorkCenterExternalUserWebConfiguration, WorkCenterInfo } from 'app/shared/models';\r\nimport { Observable, catchError, map, tap } from 'rxjs';\r\n\r\n/**\r\n * @author jmgonzalezr\r\n * @version 1.0\r\n * This service manages the workcenters data.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkCentersService\r\n{\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Properties\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /** the base uri used to connect to the users backend service */\r\n private _uri = `${ENDPOINT_BACKEND}/workcenters`;\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Constructor\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @constructor\r\n * creates an instance of type WorkCentersService, with the core\r\n * objects needed to its implementation.\r\n * @param _errorsService > the service used to send messages to\r\n * the messages component.\r\n * @param _http > the object used to send HTTP requests to the\r\n * backend server.\r\n */\r\n constructor(\r\n private _errorsService: ErrorsService,\r\n private _http: HttpClient\r\n )\r\n {\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * @method countNewRepositoryDocuments\r\n * Gets the number of documents uploaded to the workcenter repository in the last\r\n * few days (specified in the second parameter) .\r\n * @param id > the identifier of the workcenter whose repository is wanted to know the new\r\n * uploaded files.\r\n * @param days > the number of days to count backwards to know the number of newly uploaded\r\n * files.\r\n * @returns {number} the number of docoments uploaded to the specified workcenter in the\r\n * last days (second parameter).\r\n */\r\n public countNewRepositoryDocuments(id: number, days: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get<{ Count: number }>(`${this._uri}/${id}/user-web-files/uploaded-within/${days}/days`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('Work center info loaded')),\r\n map(_ => _.Count)\r\n );\r\n }\r\n\r\n /**\r\n * @method downloadRepositoryDocument\r\n * Get the document specified by its identifier.\r\n * @param id > identifier of the desired document.\r\n * @returns {Observable>} the requested document as a blob.\r\n */\r\n public downloadRepositoryDocument(id: number): Observable>\r\n {\r\n return this._http.get(`${this._uri}/user-web-files/${id}/download`,\r\n {\r\n responseType: 'blob',\r\n observe: 'response'\r\n })\r\n .pipe(\r\n tap(_ => this._errorsService.handleSuccess('successDocumentDownloaded', true))\r\n );\r\n }\r\n\r\n /**\r\n * @method getConfiguration\r\n * GET: gets the configuration object associated to a workcenter.\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the workcenter object whose configuration data want to be\r\n * retrieved from the database.\r\n * @returns {Observable} the configuration object associated to the\r\n * workcenter whose identifier is passed by parameter.\r\n */\r\n public getConfiguration(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/configuration`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('Work center info loaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getExternalUserWebConfiguration\r\n * GET: gets the configuration object of the external user web associated to a workcenter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the workcenter object whose external user web configuration data want\r\n * to be retrieved from the database.\r\n * @returns {Observable} the configuration object associated\r\n * to the workcenter whose identifier is passed by parameter.\r\n */\r\n public getExternalUserWebConfiguration(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/configuration/external-user-web`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('External user web configuration loaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getInfo\r\n * GET: gets the collection of info fields associated to a workcenter.\r\n * since this method is based on an http call, it is no need for\r\n * unsubscribing.\r\n * @param id > the id of the workcenter object whose general info want to be\r\n * retrieved from the database.\r\n * @returns {Observable} the list of info fields associated to the\r\n * workcenter whose identifier is passed by parameter.\r\n */\r\n public getInfo(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/info`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('Work center info loaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getRepositoryDocuments\r\n * GET: gets the collection of documents that conform the repository of files published for the\r\n * users of the specified workcenter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the workcenter object whose repository documents want to be retrieved\r\n * from database.\r\n * @returns {Observable} the list of documents that conform the repository\r\n * of the workcenter whose identifier is passed by parameter.\r\n */\r\n public getRepositoryDocuments(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/${id}/user-web-files`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo('Work center info loaded'))\r\n );\r\n }\r\n\r\n /**\r\n * @method getWorkCenterPerUser\r\n * GET: gets the data of the workcenter that manages the user whose id is passed by parameter.\r\n * since this method is based on an http call, it is no need for unsubscribing.\r\n * @param id > the id of the user whose workcenter want to be retrieved from the database.\r\n * @returns {Observable} the data of the workcenter associated to the\r\n * user whose identifier is passed by parameter.\r\n */\r\n public getWorkCenterPerUser(id: number, headers: HttpHeaders = DEFAULT_HTTP_HEADERS): Observable\r\n {\r\n return this._http\r\n .get(`${this._uri}/user/${id}`, { headers })\r\n .pipe(\r\n tap(_ => this._errorsService.handleInfo(`Work center loaded (${id})`))\r\n );\r\n }\r\n\r\n}\r\n","export const environment = {\n domain: 'https://asistosad.com',\n virtualDirectory: 'test-user'\n};\n","import { bootstrapApplication } from '@angular/platform-browser';\r\nimport { AppComponent } from 'app/app.component';\r\nimport { appConfig } from 'app/app.config';\r\n\r\nimport '@angular/localize/init';\r\nimport 'zone.js';\r\n\r\nbootstrapApplication(AppComponent, appConfig)\r\n .catch(error => console.error(error));\r\n","/* (ignored) */"],"names":["Location","Title","ActivatedRoute","NavigationEnd","Router","RouterOutlet","PageSlide","DialogComponent","FooterComponent","HeaderComponent","MenuComponent","NotificationsComponent","Settings","filter","fromEvent","map","mergeMap","AppComponent","constructor","_activatedRoute","_location","_router","_titleService","defaultLocale","window","navigator","language","substring","ngOnInit","_handleAppConnectivityChanges","_routerSubscription","events","pipe","event","_","route","firstChild","outlet","data","subscribe","setTitle","ngOnDestroy","_offlineEventSubscription","unsubscribe","_onlineEventSubscription","isClosed","closed","prepareRoute","activatedRouteData","animation","e","_currentUrl","navigateByUrl","path","navigate","i0","ɵɵdirectiveInject","i1","i2","i3","_2","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","AppComponent_Template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","_r0","encapsulation","provideHttpClient","provideAnimations","PreloadAllModules","provideRouter","withInMemoryScrolling","withPreloading","appRoutes","provideAuth","provideCore","appConfig","providers","scrollPositionRestoration","AuthGuard","HomeComponent","APP_TITLE","canActivateChild","children","redirectTo","pathMatch","component","title","loadChildren","inject","AuthService","ErrorsService","state","authService","errorsService","isTokenAlive","handleUnauthorizedUserError","url","isTokenExpired","JWT_AUTH_SCHEME","JWT_BLACKLISTED_ROUTES","JWT_HEADER_NAME","JWT_SKIP_WHEN_EXPIRED","JWT_THROW_NO_TOKEN_ERROR","JWT_WHITELISTED_DOMAINS","isInRoutes","Observable","authInterceptor","request","next","token","getValidToken","responseToken","handleInterception","Error","clone","setHeaders","withInterceptors","ENVIRONMENT_INITIALIZER","provide","useValue","multi","HttpClient","getTokenExpirationDate","StorageService","ENDPOINT_AUTH","DEFAULT_HTTP_HEADERS","DEFAULT_HTTP_OBSERVE","UsersService","DateTime","BehaviorSubject","of","shareReplay","switchMap","tap","_errorsService","_http","_storageService","_usersService","_uri","user$","getUser","getExpiration","isLoggedIn","getJwtToken","setUser","user","getWorkCenter","getWorkCenterExternalUserWebConfiguration","getWorkCenterConfiguration","logIn","headers","cleanSession","post","username","UserName","password","Password","TokenValue","setJwtToken","_postInAppBrowserUserMessage","logOut","_user","clean","handleSuccess","patchRGPDAccepted","RGPDAccepted","local","patchLastExternalLogin","LastExternalLogin","postRecoverPasswordRequest","email","observe","response","ok","_window","webkit","messageHandlers","cordova_iab","postMessage","JSON","stringify","userId","Id","toString","_postInAppBrowserClearCacheMessage","clearCache","ɵɵinject","factory","ɵfac","providedIn","base64Decode","str","chars","output","String","replace","length","bc","bs","buffer","idx","charAt","fromCharCode","indexOf","base64DecodeUnicode","decodeURIComponent","Array","prototype","call","c","charCodeAt","slice","join","decodeToken","parts","split","decoded","urlBase64Decode","parse","hasOwnProperty","fromSeconds","exp","offsetSeconds","date","plus","seconds","LOCALE_ID","provideErrorHandling","httpRequestInterceptor","HttpRequestService","ErrorHandler","useClass","HttpErrorResponse","isDevMode","DEFAULT_COOKIE_NAME","INFO_LEVEL_DANGER","INFO_LEVEL_SUCCESS","INFO_LEVEL_INFO","INFO_LEVEL_WARNING","ERROR_WHITELISTED_ROUTES","isBoolean","CookieService","EMPTY","ReplaySubject","_cookieService","_subject","onError","handleError","error","notify","parameters","onLine","_log","status","_result","message","handleInfo","undefined","handleMessage","match","check","createUrlTree","queryParams","returnUrl","routerState","snapshot","handleWarning","body","type","console","log","HttpResponse","reviveDates","finalize","httpRequestService","increment","decrement","_pendingRequests","loading$","ValidationErrors","AbstractControl","FormGroup","FormUtilService","getFormValidationErrors","form","_getFormValidationErrors","controls","errorName","id","Boolean","errors","Object","keys","forEach","key","control","concat","controlErrors","keyError","push","controlName","errorValue","LocalizationService","get","params","$localize","ENDPOINT_BACKEND","reduce","MailService","send","to","subject","attachments","FormData","append","file","i","name","DATE","ISSUE_REQUEST","JWT_TOKEN","PLANNING","PLANNING_LIFETIME","TODAY","TODAY_LIFETIME","USER","USER_CONTRACTS","USER_CONTRACTS_LIFETIME","USER_CONTRACT_ID","dateTimeReviver","localStorage","removeItem","sessionStorage","getDate","_date","getItem","fromISO","getIssueRequest","getPlanning","_cache","_data","Map","_planning","toMillis","fromMillis","timestamp","schedule","delete","size","setItem","from","entries","getPlanningDate","startOf","find","item","hasSame","Date","getToday","getUserContract","_id","_userContracts","getUserContracts","contract","getUserContractId","contracts","Area","WorkCenter","workCenter","Configuration","ExternalUserWebConfiguration","removeJwtToken","removeUser","reset","clear","deleteAll","setDate","toISO","setIssueRequest","issueRequest","setPlanning","planning","set","setToday","setUserContractId","setUserContracts","userContracts","NgFor","NgIf","AtDoorComponent","NotificationsService","CoordinatorsService","PlanningEventsService","DurationPipe","FirstCasePipe","TitleCasePipe","ɵɵnamespaceSVG","ɵɵnamespaceHTML","ɵɵtext","ɵɵtextInterpolate","ɵɵpipeBind1","task_r10","ɵɵtemplate","HomeComponent_ng_template_21_div_0_li_13_Template","ctx_r7","generateUrl","occurrence_r8","AssistantPhoto","ɵɵsanitizeUrl","ɵɵtextInterpolate2","LocalStartTime","LocalEndTime","AssistantFullName","Tasks","HomeComponent_ng_template_21_div_0_Template","ctx_r0","Agenda","ɵɵi18n","ɵɵi18nExp","assistantFullName_r18","ɵɵi18nApply","HomeComponent_ng_template_29_li_1_ng_template_2_Template","HomeComponent_ng_template_29_li_1_ng_template_3_Template","ɵɵtemplateRefExtractor","HomeComponent_ng_template_29_li_1_li_9_Template","task_r13","Completed","_r16","Name","HomeComponent_ng_template_29_li_1_Template","ctx_r3","_authService","_coordinatorsService","_notificationsService","_planningEventsService","getTodayPlanningEventsPerUser","s","a","requestCall","postUserCallRequest","Coordinator","i4","i18n_0","ngI18nClosureMode","ɵɵlistener","HomeComponent_Template_button_click_1_listener","HomeComponent_Template_button_click_9_listener","HomeComponent_ng_template_21_Template","HomeComponent_ng_template_22_Template","HomeComponent_ng_template_29_Template","HomeComponent_ng_template_30_Template","_r2","_r5","animate","group","style","transition","trigger","GrowShrink","height","opacity","animateChild","query","position","optional","transform","stagger","ScrollUpList","AsyncPipe","CarersService","share","ctx_r4","generateCarersListNames","carersAtUserDoor_r3","ɵɵelementContainerStart","AtDoorComponent_ng_container_0_div_2_Template","AtDoorComponent_ng_container_0_ng_template_3_Template","ɵɵelementContainerEnd","_r6","_carersService","_refresh$","carersAtUserDoor$","getCarersAtUserDoor","refresh","carersAtUserDoor","Photo","AtDoorComponent_ng_container_0_Template","AtDoorComponent_ng_template_2_Template","DOCUMENT","NgClass","DialogService","DEFAULT_TITLE_RESOURCES_SUFFIX","Queue","Subject","takeUntil","DialogComponent_button_11_Template_button_click_0_listener","ɵɵrestoreView","_r3","ctx_r2","ɵɵnextContext","ɵɵresetView","acceptHandler","DialogComponent_button_12_Template_button_click_0_listener","cancelHandler","_dialogService","_document","_localizationService","_pending","_running","_unsubscribeAll","ngAfterViewInit","_dialog","getElementById","addEventListener","_checkPendingRequests","_dso","dequeue","complete","dispose","onAlert","_enqueueRequest","onConfirm","hide","accept","cancel","show","bootstrap","Modal","getOrCreateInstance","keyboard","focus","getInstance","_request","dialogType","_setAlertModal","_setConfirmModal","enqueue","settings","onAccept","showAcceptButton","showCancelButton","onCancel","DialogComponent_button_11_Template","DialogComponent_button_12_Template","_onAlert","_onConfirm","asObservable","alert","_settings","_wrapRequest","confirm","ChangeDetectorRef","RouterLink","DEFAULT_CONTACT_EMAIL","capitalize","_changeDetector","_httpRequestService","onUrlChange","currentRoute","contactEmail","encodeURIComponent","year","configuration","markForCheck","goCalendar","test","goCommunication","goHome","goMore","isCalendar","isCommunication","isHome","isMore","toggleFooter","FooterComponent_div_0_Template","FooterComponent_Template_a_click_4_listener","FooterComponent_Template_a_click_11_listener","FooterComponent_Template_a_click_18_listener","FooterComponent_Template_a_click_25_listener","FooterComponent_Template_a_click_33_listener","ɵɵtextInterpolate1","ɵɵpureFunction0","_c18","HeaderComponent_ng_template_3_Template_a_click_0_listener","HeaderComponent_ng_template_4_Template_a_click_0_listener","_r7","ctx_r6","location","back","titleService","suffix","toLocaleString","DATE_FULL","showLogo","showToday","HeaderComponent_ng_template_3_Template","HeaderComponent_ng_template_4_Template","HeaderComponent_li_9_Template","getTitle","lastIndexOf","NgSwitch","NgSwitchCase","RouterLinkActive","DEFAULT_REPOSITORY_NOTIFICATION_DAYS","WorkCentersService","MenuComponent_div_9_li_22_Template_li_mouseenter_0_listener","ctx_r5","hovered","MenuComponent_div_9_li_22_Template_li_mouseleave_0_listener","_c0","MenuComponent_div_9_li_23_Template_li_mouseenter_0_listener","_r9","ctx_r8","MenuComponent_div_9_li_23_Template_li_mouseleave_0_listener","ctx_r10","_c1","MenuComponent_div_9_li_24_Template_li_mouseenter_0_listener","_r12","ctx_r11","MenuComponent_div_9_li_24_Template_li_mouseleave_0_listener","ctx_r13","_c2","MenuComponent_div_9_Template_li_mouseenter_2_listener","_r15","ctx_r14","MenuComponent_div_9_Template_li_mouseleave_2_listener","ctx_r16","MenuComponent_div_9_Template_li_mouseenter_7_listener","ctx_r17","MenuComponent_div_9_Template_li_mouseleave_7_listener","ctx_r18","MenuComponent_div_9_Template_li_mouseenter_12_listener","ctx_r19","MenuComponent_div_9_Template_li_mouseleave_12_listener","ctx_r20","MenuComponent_div_9_Template_li_mouseenter_17_listener","ctx_r21","MenuComponent_div_9_Template_li_mouseleave_17_listener","ctx_r22","MenuComponent_div_9_li_22_Template","MenuComponent_div_9_li_23_Template","MenuComponent_div_9_li_24_Template","MenuComponent_div_9_Template_li_mouseenter_25_listener","ctx_r23","MenuComponent_div_9_Template_li_mouseleave_25_listener","ctx_r24","MenuComponent_div_9_Template_li_mouseenter_32_listener","ctx_r25","MenuComponent_div_9_Template_li_mouseleave_32_listener","ctx_r26","MenuComponent_div_9_Template_li_mouseenter_39_listener","ctx_r27","MenuComponent_div_9_Template_li_mouseleave_39_listener","ctx_r28","MenuComponent_div_9_Template_li_mouseenter_44_listener","ctx_r29","MenuComponent_div_9_Template_li_mouseleave_44_listener","ctx_r30","MenuComponent_div_9_Template_li_mouseenter_48_listener","ctx_r31","MenuComponent_div_9_Template_li_mouseleave_48_listener","ctx_r32","MenuComponent_div_9_Template_li_mouseenter_53_listener","ctx_r33","MenuComponent_div_9_Template_li_mouseleave_53_listener","ctx_r34","_c3","_c4","_c5","_c6","ViewCompensationContracts","ViewTasks","ViewPaymentMethod","_c7","_c8","newRepositoryDocuments","_c9","_c10","_c11","_c12","MenuComponent_div_10_span_2_Template","MenuComponent_div_10_span_3_Template","MenuComponent_div_10_span_4_Template","MenuComponent_div_10_span_5_Template","MenuComponent_div_10_span_6_Template","MenuComponent_div_10_span_7_Template","MenuComponent_div_10_span_8_Template","MenuComponent_div_10_span_9_Template","MenuComponent_div_10_span_10_Template","MenuComponent_div_10_span_11_Template","MenuComponent_div_10_span_12_Template","MenuComponent_div_10_span_13_Template","MenuComponent_div_10_span_14_Template","ctx_r1","_workCentersService","countNewRepositoryDocuments","count","isCollapsed","collapse","toggle","i18n_13","MenuComponent_div_9_Template","MenuComponent_div_10_Template","changeDetection","ElementRef","QueryList","DEFAULT_NOTIFICATIONS_INSTANCES","DEFAULT_NOTIFICATIONS_TIMEOUT","merge","notifications","i_r2","time","NotificationsComponent_div_1_div_3_Template","NotificationsComponent_div_1_button_7_Template","ɵɵpropertyInterpolate1","ɵɵpropertyInterpolate","duration","ɵɵattribute","ariaLive","showHeader","_changeDetectorRef","danger","warning","success","info","maxNotifications","_toasts","toasts","toast","Toast","nativeElement","onShow","now","toFormat","notification","shift","detectChanges","viewQuery","NotificationsComponent_Query","NotificationsComponent_div_1_Template","_onShow","regularExpressions","nif","postalCode","telephone","iso8601Date","iso8601Duration","HttpHeaders","InjectionToken","environment","AUTH_INJECTOR_TOKEN","AUTH_OPTIONS","BLOB_RESPONSE_TYPE","responseType","DEFAULT_ANCHOR_SCROLLING","DEFAULT_AVATAR_IMAGE","DEFAULT_CONTACT_EMAIL_CONTENT","DEFAULT_CONTACT_EMAIL_SUBJECT","userName","DEFAULT_CONTENT_TYPE","DEFAULT_COOKIE_EXPIRATION_DAYS","DEFAULT_COOKIE_PATH","DEFAULT_CURRENCY_ID","DEFAULT_DATE_FORMAT","DEFAULT_DATE_INPUT_FORMAT","DEFAULT_DIALOG_FORM_WIDTH","DEFAULT_DIALOG_WIDTH","DEFAULT_DOMAIN_NAME","domain","DEFAULT_LANGUAGE_COOKIE","DEFAULT_LOCALE_ID","DEFAULT_LOGO_IMAGE","DEFAULT_PAGE_SIZE","DEFAULT_SNACKBAR_TIME","ENDPOINT_FRONTEND","ENDPOINT_IMAGES","FOLDER_ALL","FOLDER_SENT_BY_ADMIN","FOLDER_SENT_BY_USER","JWT_INJECTOR_TOKEN","JWT_OPTIONS","JWT_RENEW_TOKEN_URL","MAX_AVATAR_SIZE","MAX_MESSAGES_STORED","MAX_PAGINABLE_LIST_ITEMS","OAUTH_TOKEN","OAUTH_TOKEN_ROUTES","PAGINATION_ASC","PAGINATION_DESC","PAGINATION_DEFAULT","sort","field","dir","page","pageSize","PAYMENT_METHOD_TRANSFERENCE","PAYMENT_METHOD_GATEWAY","PAYMENT_METHOD_PAYPAL","SNACKBAR_DEFAULT_HORIZONTAL_POSITION","SNACKBAR_DEFAULT_VERTICAL_POSITION","USER_ROLE_GUEST","USER_ROLE_CUSTOMER","USER_ROLE_ADMINISTRATOR","USER_STATUS_CREATED","USER_STATUS_EMAIL_SENT","USER_STATUS_EMAIL_CONFIRMED","USER_STATUS_EMAIL_BLACKLISTED","WORKCENTER","blob2base64","blob","observer","reader","FileReader","onloadend","target","result","onerror","readAsDataURL","blob2Image","onload","canvas2Blob","canvas","dataURI","toDataURL","dataURIParts","byteString","atob","arrayBuffer","ArrayBuffer","intArray","Uint8Array","mimeString","Blob","hasBlobTypedArraySupport","hasBlobConstructor","hasBlobSupport","hasToBlobSupport","HTMLCanvasElement","toBlob","imageUrl2blob","fetch","method","mode","then","catch","saveBlob","fileName","link","document","createElement","href","URL","createObjectURL","download","appendChild","dispatchEvent","MouseEvent","bubbles","cancelable","view","remove","revokeObjectURL","Duration","value","exec","getDateFromDateAndTime","getTime","dateTime","fromObject","hours","hour","minutes","minute","second","formatCurrency","Intl","NumberFormat","currency","format","elements","head","tail","element","peek","isEmpty","word","toUpperCase","toLowerCase","imageUrl2base64","parseURL","protocol","host","hostname","port","Number","pathname","search","hash","routes","some","endsWith","RegExp","findIndex","startsWith","object","luxonReviver","rehydrate","source","copy","prop","BankaccountPipe","repeat","pure","ConcatPipe","array","separator","DateTimePipe","timezone","locale","isDateTime","unit","decimals","_duration","isDuration","as","toFixed","FilterPipe","args","MinusPipe","days","minus","PlusPipe","DomSanitizer","SafeUrlPipe","_domSanitizer","bypassSecurityTrustResourceUrl","w","caud","Assistant","catchError","throwError","deleteUserIssueRequest","err","postUserIssueRequest","User","putUserIssueRequest","put","getBasePlanningEventsPerUserAndWeek","getMonthPlanningEventsPerUser","month","getNextPlanningEventPerUser","AssistantName","End","Start","getWeeklyPlanningEventsPerUserAndWeek","getWeeklyPlanningHoursPerUserAndDay","toISODate","TasksService","_uriTaskOccurrences","_uriTasks","getCheckedTasksPerUserAndWeek","getTodayTasksPerUser","TechnicalIssueTypesService","getIssueNotificationsTechnicalIssueTypes","getInfo","FullName","getUserContractsPaged","Total","getUserCoordinator","getUserCoordinatorCallRequests","calls","getUserCoordinatorIssueRequests","getUserCopayments","getUserCurrentIncomePerCapita","getUserCurrentTasks","jo","getUserOpenBt","getUserPhoto","getUserPhotoUrl","Url","putUserPassword","oldPassword","newPassword","lastExternalLogin","putUserPhoto","photo","uploadData","putUserRGPD","Count","downloadRepositoryDocument","getConfiguration","getExternalUserWebConfiguration","getRepositoryDocuments","getWorkCenterPerUser","virtualDirectory","bootstrapApplication"],"sourceRoot":"webpack:///"}