{"version":3,"file":"main-es2015.js","mappings":"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","sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/layout/admin/admin.component.ts","./src/app/layout/admin/admin.component.html","./src/app/layout/admin/title/title.component.ts","./src/app/layout/auth/auth.component.ts","./src/app/layout/auth/auth.component.html","./src/app/shared/accordion/accordion.directive.ts","./src/app/shared/accordion/accordionanchor.directive.ts","./src/app/shared/accordion/accordionlink.directive.ts","./src/app/shared/card/card-animation.ts","./src/app/shared/card/card-toggle.directive.ts","./src/app/shared/card/card.component.ts","./src/app/shared/card/card.component.html","./src/app/shared/date-range-picker/date-range-picker.component.ts","./src/app/shared/date-range-picker/date-range-picker.component.html","./src/app/shared/directives/input-date.directive.ts","./src/app/shared/directives/input-trim.directive.ts","./src/app/shared/error-handler/error-handler.ts","./src/app/shared/grid-footer/grid-footer.component.ts","./src/app/shared/grid-footer/grid-footer.component.html","./src/app/shared/menu-items/menu-items.ts","./src/app/shared/message-box/message-box.component.ts","./src/app/shared/message-box/message-box.component.html","./src/app/shared/modal-basic/modal-basic.component.ts","./src/app/shared/modal-basic/modal-basic.component.html","./src/app/shared/shared.module.ts","./src/app/shared/spinner/spinner.component.ts","./src/app/shared/spinner/spinner.component.html","./src/app/shared/utilities/utilities.ts","./src/app/shared/web-service/loader.interceptor.ts","./src/app/shared/web-service/loader.service.ts","./src/app/shared/web-service/web.service.ts","./src/environments/environment.ts","./src/main.ts"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AdminComponent } from './layout/admin/admin.component';\r\nimport { AuthComponent } from './layout/auth/auth.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: AdminComponent,\r\n children: [\r\n {\r\n path: '',\r\n redirectTo: 'login',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'projects',\r\n loadChildren: () => import('./pages/projects/projects.module').then(m => m.ProjectsModule)\r\n },\r\n {\r\n path: 'users',\r\n loadChildren: () => import('./pages/users/users.module').then(m => m.UsersModule)\r\n },\r\n {\r\n path: 'contractors',\r\n loadChildren: () => import('./pages/contractors/contractors.module').then(m => m.ContractorsModule)\r\n },\r\n {\r\n path: 'homeowners',\r\n loadChildren: () => import('./pages/homeowners/homeowners.module').then(m => m.HomeownersModule)\r\n },\r\n {\r\n path: 'project-forms',\r\n loadChildren: () => import('./pages/decision-trees/decision-trees.module').then(m => m.DecisionTreesModule)\r\n },\r\n {\r\n path: 'reports',\r\n loadChildren: () => import('./pages/reports/reports.module').then(m => m.ReportsModule)\r\n },\r\n {\r\n path: 'reports',\r\n loadChildren: () => import('./pages/reports/reports.module').then(m => m.ReportsModule)\r\n },\r\n {\r\n path: 'notifications',\r\n loadChildren: () => import('./pages/notifications/notifications.module').then(m => m.NotificationsModule)\r\n },\r\n {\r\n path: 'account',\r\n loadChildren: () => import('./pages/account/account.module').then(m => m.AccountModule)\r\n },\r\n {\r\n path: 'projects/project-overview',\r\n loadChildren: () => import('./pages/project-specs/project-specs.module').then(m => m.ProjectSpecsModule)\r\n },\r\n {\r\n path: 'projects/messaging',\r\n loadChildren: () => import('./pages/messaging/messaging.module').then(m => m.MessagingModule)\r\n },\r\n {\r\n path: 'projects/milestones',\r\n loadChildren: () => import('./pages/milestones/milestones.module').then(m => m.MilestonesModule)\r\n },\r\n {\r\n path: 'projects/materials',\r\n loadChildren: () => import('./pages/materials/materials.module').then(m => m.MaterialsModule)\r\n },\r\n {\r\n path: 'projects/tasks',\r\n loadChildren: () => import('./pages/tasks/tasks.module').then(m => m.TasksModule)\r\n },\r\n {\r\n path: 'projects/notes',\r\n loadChildren: () => import('./pages/notes/notes.module').then(m => m.NotesModule)\r\n },\r\n {\r\n path: 'projects/important-docs',\r\n loadChildren: () => import('./pages/important-docs/important-docs.module').then(m => m.ImportantDocsModule)\r\n },\r\n {\r\n path: 'projects/design-inspiration',\r\n loadChildren: () => import('./pages/design-inspiration/design-inspiration.module').then(m => m.DesignInspirationModule)\r\n },\r\n ]\r\n },\r\n {\r\n path: '',\r\n component: AuthComponent,\r\n children: [\r\n {\r\n path: '',\r\n redirectTo: 'login',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'login',\r\n loadChildren: () => import('./pages/auth/login/login.module').then(m => m.LoginModule)\r\n },\r\n {\r\n path: 'reset-password',\r\n loadChildren: () => import('./pages/auth/reset-password/reset-password.module').then(m => m.ResetPasswordModule)\r\n },\r\n ]\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {NavigationStart, NavigationEnd, Router} from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\ndeclare const gtag: Function;\r\ndeclare var gaTrackingId : string; // This tells the compiler that it's a global variable coming from another file. In our case, it's coming from config.js.\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit {\r\n title = 'BuildSAGE';\r\n\r\n constructor(private router: Router) { }\r\n\r\n ngOnInit() {\r\n this.router.events.subscribe((evt) => {\r\n if (!(evt instanceof NavigationEnd)) {\r\n return;\r\n }\r\n window.scrollTo(0, 0);\r\n });\r\n }\r\n /** Add Google Analytics Script Dynamically */\r\n setUpAnalytics() {\r\n this.router.events.pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe((event: NavigationEnd) => {\r\n console.log(event)\r\n gtag('config', gaTrackingId,\r\n {\r\n page_path: event.urlAfterRedirects\r\n }\r\n );\r\n });\r\n}\r\n\r\n}\r\n","\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule, ErrorHandler } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms'; // <-- NgModel lives here\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport * as $ from 'jquery'; //This is necessary to use jquery throughout the various pages.\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { AdminComponent } from './layout/admin/admin.component';\r\nimport { AuthComponent } from './layout/auth/auth.component';\r\nimport { SharedModule } from './shared/shared.module';\r\nimport { MenuItems } from './shared/menu-items/menu-items';\r\nimport { LoaderInterceptor } from './shared/web-service/loader.interceptor';\r\nimport { GlobalErrorHandler } from './shared/error-handler/error-handler';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport { AngularResizeEventModule } from 'angular-resize-event';\r\nimport { AngularFireModule } from \"@angular/fire\";\r\nimport { AngularFireDatabaseModule } from \"@angular/fire/database\";\r\nimport { environment } from 'src/environments/environment';\r\nimport { ToastrModule } from 'ngx-toastr';\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n AdminComponent,\r\n AuthComponent,\r\n \r\n \r\n \r\n \r\n \r\n ],\r\n imports: [\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n AppRoutingModule,\r\n SharedModule,\r\n FormsModule,\r\n MatSidenavModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n AngularResizeEventModule,\r\n AngularFireModule.initializeApp(environment.firebaseConfig),\r\n AngularFireDatabaseModule,\r\n ToastrModule.forRoot()\r\n \r\n \r\n\r\n ],\r\n providers: [{\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: LoaderInterceptor,\r\n multi: true,\r\n },\r\n {\r\n provide: ErrorHandler,\r\n useClass: GlobalErrorHandler\r\n },\r\n MenuItems],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","//this is the template of the page once the user has logged in: header and main menu. The space on the right will be filled in with sub-pages.\r\nimport { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { animate, AUTO_STYLE, state, style, transition, trigger } from '@angular/animations';\r\nimport { MenuItems, Menu, ChildrenItems } from '../../shared/menu-items/menu-items';\r\nimport { MessageBoxComponent } from '../../shared/message-box/message-box.component';\r\nimport { WebService, ApiResponse, FirebaseNotification, } from '../../shared/web-service/web.service';\r\nimport { Formatter, SessionSave } from '../../shared/utilities/utilities';\r\nimport { MatDrawer, MatSidenav } from '@angular/material/sidenav';\r\nimport { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { AngularFireDatabase } from \"@angular/fire/database\";\r\n\r\nimport { ToastrService } from 'ngx-toastr'\r\nimport { take } from 'rxjs/operators';\r\n\r\ndeclare var buildNumber: string; // This tells the compiler that it's a global variable coming from another file. In our case, it's coming from config.js.\r\n\r\n@Component({\r\n selector: 'app-admin',\r\n templateUrl: './admin.component.html',\r\n styleUrls: ['./admin.component.scss'],\r\n animations: [\r\n trigger('notificationBottom', [\r\n state('an-off, void',\r\n style({\r\n overflow: 'hidden',\r\n height: '0px',\r\n })\r\n ),\r\n state('an-animate',\r\n style({\r\n overflow: 'hidden',\r\n height: AUTO_STYLE,\r\n })\r\n ),\r\n transition('an-off <=> an-animate', [\r\n animate('400ms ease-in-out')\r\n ])\r\n ]),\r\n trigger('mobileHeaderNavRight', [\r\n state('nav-off, void',\r\n style({\r\n overflow: 'hidden',\r\n height: '0px',\r\n })\r\n ),\r\n state('nav-on',\r\n style({\r\n height: AUTO_STYLE,\r\n })\r\n ),\r\n transition('nav-off <=> nav-on', [\r\n animate('400ms ease-in-out')\r\n ])\r\n ]),\r\n ]\r\n})\r\nexport class AdminComponent implements OnInit {\r\n @ViewChild('modalChangePwd') modalChangePwd;\r\n @ViewChild('modalChangeUserInfo') modalChangeUserInfo;\r\n @ViewChild('modalHelpAbout') modalHelpAbout;\r\n @ViewChild('msgBox', { static: true }) msgBox: MessageBoxComponent;\r\n @ViewChild('mainMenu') mainMenu: MatSidenav;\r\n @ViewChild('subMenu') subMenu: MatDrawer;\r\n\r\n public static staticInstance: AdminComponent;\r\n\r\n public navType: string;\r\n public themeLayout: string;\r\n public verticalPlacement: string;\r\n public verticalLayout: string;\r\n public pcodedDeviceType: string;\r\n public verticalNavType: string;\r\n public verticalEffect: string;\r\n public vnavigationView: string;\r\n public freamType: string;\r\n public sidebarImg: string;\r\n public sidebarImgType: string;\r\n public layoutType: string;\r\n\r\n public headerTheme: string;\r\n public pcodedHeaderPosition: string;\r\n\r\n public liveNotification: string;\r\n public liveNotificationClass: string;\r\n\r\n public profileNotification: string;\r\n public profileNotificationClass: string;\r\n\r\n public navRight: string;\r\n public windowWidth: number;\r\n\r\n public toggleOn: boolean;\r\n public navBarTheme: string;\r\n public activeItemTheme: string;\r\n public pcodedSidebarPosition: string;\r\n\r\n public menuTitleTheme: string;\r\n public dropDownIcon: string;\r\n public subItemIcon: string;\r\n\r\n public headerFixedMargin: string;\r\n public sidebarFixedHeight: string;\r\n public itemBorderStyle: string;\r\n public subItemBorder: boolean;\r\n public itemBorder: boolean;\r\n public employeeName: string;\r\n\r\n public config: any;\r\n\r\n newEmail: string;\r\n infoErrorMsg: string;\r\n showInfoErrorMsg: boolean = false;\r\n passwordOld: string;\r\n passwordNew: string;\r\n passwordErrorMsg: string;\r\n showPasswordErrorMsg: boolean = false;\r\n tokenExpirationSeconds: number;\r\n revealPwd1: boolean = false;\r\n revealPwd2: boolean = false;\r\n revealPwd3: boolean = false;\r\n rowDataNavigationPage: object[] = [];\r\n lastPageClickeOn: string;\r\n parentMenuName: string;\r\n artificiallyHighlightedMenuItem: boolean;\r\n projectName: string = sessionStorage.getItem(\"projectName\"); //We save this in sessionStorage in case the page gets refreshed.\r\n userStatusNo: number = Number.parseInt(sessionStorage.userStatusNo);\r\n userNo: number; // userNo of current user\r\n projectNo: number ;\r\n buildNumberFromConfigFile: string = buildNumber;\r\n headerHeight: number = 100; // used to determine header height and the height of the body\r\n\r\n browserRegistered: boolean = (sessionStorage.browserRegistered == \"1\");\r\n selectedProject: string;\r\n showSubMenu: boolean = false;\r\n mainMenuItems: Menu[];\r\n subMenuItems: ChildrenItems[];\r\n isReceived:boolean=false;\r\n isUpdatedbycurrentuser:boolean=false;\r\n notificationCount: number; // number of unread notifications for current user\r\n\r\n constructor(public menuItems: MenuItems, private webService: WebService, private router: Router, private firebaseDB: AngularFireDatabase,private toastr: ToastrService) {\r\n AdminComponent.staticInstance = this;\r\n\r\n // This will go through all the items in the main menu on the left side of the screen and remove any items that the current user doesn't have permission to view. The MainMenuItems array is the top nodes. Each node has a rolesCanView property. Then those might have children of type ChildrenItems that also have a rolesCanView property. The rolesCanView property is a comma-delim list of roles that can access the page. We get an array of roles that the current user has from sessionStoriage. We go through each MainMenuItems node and each ChildrenItems node, and remove any item from the array where the roles of the current user aren't found in the list of roles for the page. For the arrays, we start at the end and go backwards, so things don't get messed up if we remove an item from the array.\r\n this.userNo = parseInt(sessionStorage.getItem(\"userNo\"));\r\n this.projectNo=parseInt(sessionStorage.getItem(\"projectNo\"));\r\n let userRoles: string[] = JSON.parse(sessionStorage.authorityRoles ?? \"[]\");\r\n let tempMenuItems: Menu[] = menuItems.getAllMain();\r\n for (let i = tempMenuItems[0].main.length - 1; i >= 0; i--) {\r\n // check all the top-level nodes\r\n if (!this.foundRoleMatch(userRoles, tempMenuItems[0].main[i].rolesCanView)) {\r\n tempMenuItems[0].main.splice(i, 1);\r\n }\r\n else if (tempMenuItems[0].main[i].children) {\r\n for (let x = tempMenuItems[0].main[i].children.length - 1; x >= 0; x--) {\r\n // check all the children nodes\r\n if (!this.foundRoleMatch(userRoles, tempMenuItems[0].main[i].children[x].rolesCanView)) {\r\n tempMenuItems[0].main[i].children.splice(x, 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // There is HTML that is bound to mainMenuItems and subMenuItems to create the menu\r\n this.mainMenuItems = tempMenuItems;\r\n this.selectedProject = sessionStorage.selectedProject;\r\n\r\n if (sessionStorage.tokenExpirationSeconds) {\r\n this.tokenExpirationSeconds = parseInt(sessionStorage.tokenExpirationSeconds);\r\n setInterval(() => {\r\n if (sessionStorage.lastWebApiCall) {\r\n let numSecondsSinceLastApiCall = (new Date().getTime() - parseInt(sessionStorage.lastWebApiCall)) / 1000;\r\n if (numSecondsSinceLastApiCall > this.tokenExpirationSeconds) {\r\n console.log(\"Auto log out user because it's been too long (past token expiration) since they've done anything that has used an API call.\");\r\n sessionStorage.clear();\r\n sessionStorage.logoutReason = \"AuthorizationError\";\r\n window.location.assign(document.getElementsByTagName('base')[0].href + \"login\");\r\n }\r\n }\r\n }, 60000);\r\n }\r\n\r\n this.employeeName = sessionStorage.employeeName;\r\n if (!this.employeeName || this.employeeName.length === 0 || !sessionStorage.validationToken || sessionStorage.validationToken.length === 0)\r\n this.onLogout();\r\n\r\n this.navType = 'st2';\r\n this.themeLayout = 'vertical';\r\n this.verticalPlacement = 'left';\r\n this.verticalLayout = 'wide';\r\n this.pcodedDeviceType = 'desktop';\r\n this.verticalNavType = 'expanded';\r\n this.verticalEffect = 'shrink';\r\n this.vnavigationView = 'view1';\r\n this.freamType = 'theme1';\r\n this.sidebarImg = 'false';\r\n this.sidebarImgType = 'img1';\r\n this.layoutType = 'light';\r\n\r\n this.pcodedHeaderPosition = 'fixed';\r\n\r\n this.liveNotification = 'an-off';\r\n this.profileNotification = 'an-off';\r\n\r\n this.navRight = 'nav-on';\r\n\r\n this.windowWidth = window.innerWidth;\r\n this.setHeaderAttributes(this.windowWidth);\r\n\r\n this.toggleOn = true;\r\n this.navBarTheme = 'theme1';\r\n //this.activeItemTheme = 'theme10'; \r\n this.pcodedSidebarPosition = 'fixed';\r\n this.menuTitleTheme = 'theme6';\r\n //this.dropDownIcon = 'style3';\r\n this.subItemIcon = 'style7';\r\n\r\n this.headerFixedMargin = '56px';\r\n this.sidebarFixedHeight = 'calc(100vh - 56px)';\r\n this.itemBorderStyle = 'none';\r\n this.subItemBorder = true;\r\n this.itemBorder = true;\r\n\r\n this.setMenuAttributes(this.windowWidth);\r\n this.setHeaderAttributes(this.windowWidth);\r\n\r\n // dark\r\n /*this.setLayoutType('dark');*/\r\n\r\n // light-dark\r\n /*this.setLayoutType('dark');\r\n this.setNavBarTheme('themelight1');*/\r\n\r\n // dark-light\r\n /*this.setNavBarTheme('theme1');*/\r\n\r\n // side-bar image\r\n /*this.setLayoutType('img');*/\r\n //???These are ones customized by Gilmer. See setLayoutType()\r\n this.layoutType = 'light';\r\n this.sidebarImg = 'false';\r\n this.navBarTheme = 'theme1';\r\n this.menuTitleTheme = 'theme1';\r\n document.querySelector('body').classList.remove('dark');\r\n this.headerTheme = 'theme1';\r\n this.dropDownIcon = 'style1';\r\n this.activeItemTheme = 'theme1'//this is for the color of the selected menu item.\r\n\r\n router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n //If we are currently on one of the subpages, then show the subpage menu items.\r\n this.showSubMenu = false;\r\n this.subMenuItems = [];\r\n this.mainMenuItems[0].main.forEach(elem => {\r\n if (elem.children && window.location.pathname.indexOf(elem.state) != -1) {\r\n let children = elem.children.filter((child) => { return window.location.pathname.indexOf(child.state) != -1; });\r\n this.showSubMenu = children.length == 1;\r\n this.subMenuItems = elem.children;\r\n }\r\n });\r\n }\r\n })\r\n }\r\n\r\n //returns true if any of the roles in userRoles (comma-delim list of all the roles for the user) is found in rolesForPage (comma-delim list of the roles that can access a page)\r\n foundRoleMatch(userRoles: string[], rolesForPage: string): boolean {\r\n let rval: boolean = false;\r\n rolesForPage = \",\" + rolesForPage + \",\";\r\n userRoles.forEach(elem => {\r\n if (rolesForPage.indexOf(\",\" + elem + \",\") != -1)\r\n rval = true;\r\n });\r\n return rval;\r\n }\r\n\r\n ngOnInit() {\r\n $(\"*[cdkscrollable]\").css(\"overflow-x\", \"hidden\");//this is to get rid of a little horiz scrollbar that sometimes appears in the main menu. I couldn't put it in the HTML because the div wasn't in the HTML. But the div happened to have the cdkscrollable attribute on it.\r\n\r\n if(sessionStorage.email == '' || sessionStorage.email == undefined) {\r\n console.log(\"Logging out user in ngOnInit() because there is stuff missing from sessionStorage\");\r\n window.location.assign(document.getElementsByTagName('base')[0].href + \"login\");\r\n }\r\n this.notificationCount = 0;\r\n this.countNotifications(); // update the number of unread notifications\r\n this.setBackgroundPattern('pattern1');\r\n\r\n // The msgBox of this component can be used anywhere. Use setTimeout to make sure the object has been created.\r\n setTimeout(() => {\r\n MessageBoxComponent.staticInstance = this.msgBox;\r\n }, 100);\r\n\r\n this.firebaseDB\r\n .object(\r\n `NotificationMonitor/${this.userNo}`\r\n )\r\n .valueChanges()\r\n .subscribe((data: any) => { \r\n if (data?.notification) {\r\n this.countNotifications();\r\n if(!(window.location.href.toLowerCase().includes(\"notifications\") || (window.location.href.toLowerCase().includes(\"messaging\") && Number(sessionStorage.getItem(\"projectNo\")) == data.notification.ProjectNo)) \r\n && !data.isReceived)\r\n {\r\n this.showToasterInfo(data.notification?.CustomText, data.notification?.ProjectNo?.toString(), data.notification?.DestinationURL);\r\n this.firebaseDB\r\n .object(\r\n `NotificationMonitor/${this.userNo}`\r\n )\r\n .update({\r\n isReceived: true\r\n });\r\n }\r\n }\r\n })\r\n \r\n\r\n }\r\n\r\n showToasterInfo(msgText: string, projectNo: string, destinationURL: string){\r\n this.toastr.info(msgText, this.getQueryStringValueByName(destinationURL, \"project\")?.replaceAll(\"_\", \" \")).onTap\r\n .pipe(take(1))\r\n .subscribe(() => this.toasterClickedHandler(projectNo, destinationURL));\r\n }\r\n\r\n toasterClickedHandler(projectNo :string, destinationURL:string){\r\n if(destinationURL == null || destinationURL == undefined || destinationURL == \"\")\r\n return;\r\n sessionStorage.removeItem(\"userNoHomeowner\");\r\n sessionStorage.removeItem(\"userNoContractor\");\r\n sessionStorage.removeItem(\"userNoAdmin\");\r\n sessionStorage.setItem(\"projectNo\", projectNo + '');\r\n sessionStorage.setItem(\"threadNo\", this.getQueryStringValueByName(destinationURL, \"thread\"))\r\n sessionStorage.setItem(\"projectName\", this.getQueryStringValueByName(destinationURL, \"project\")?.replaceAll(\"_\", \" \"))\r\n var route: String = \"/\" + destinationURL.split('?')[0]; // structure the route\r\n this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>\r\n this.router.navigate([route]) // navigate to the new page\r\n );\r\n }\r\n\r\n onResize(event) {\r\n this.windowWidth = event.target.innerWidth;\r\n this.setHeaderAttributes(this.windowWidth);\r\n\r\n let reSizeFlag = true;\r\n if (this.pcodedDeviceType === 'tablet' && this.windowWidth >= 768 && this.windowWidth <= 1024) {\r\n reSizeFlag = false;\r\n } else if (this.pcodedDeviceType === 'mobile' && this.windowWidth < 768) {\r\n reSizeFlag = false;\r\n }\r\n /* for check device */\r\n if (reSizeFlag) {\r\n this.setMenuAttributes(this.windowWidth);\r\n }\r\n }\r\n\r\n setHeaderAttributes(windowWidth) {\r\n if (windowWidth < 992) {\r\n this.navRight = 'nav-off';\r\n } else {\r\n this.navRight = 'nav-on';\r\n }\r\n }\r\n\r\n setMenuAttributes(windowWidth) {\r\n if (windowWidth >= 768 && windowWidth <= 1024) {\r\n this.pcodedDeviceType = 'tablet';\r\n this.verticalNavType = 'offcanvas';\r\n this.verticalEffect = 'overlay';\r\n } else if (windowWidth < 768) {\r\n this.pcodedDeviceType = 'mobile';\r\n this.verticalNavType = 'offcanvas';\r\n this.verticalEffect = 'overlay';\r\n this.headerHeight = 60;\r\n } else {\r\n this.pcodedDeviceType = 'desktop';\r\n this.verticalNavType = 'expanded';\r\n this.verticalEffect = 'shrink';\r\n }\r\n }\r\n\r\n toggleHeaderNavRight() {\r\n this.navRight = this.navRight === 'nav-on' ? 'nav-off' : 'nav-on';\r\n }\r\n\r\n toggleLiveNotification() {\r\n this.liveNotification = this.liveNotification === 'an-off' ? 'an-animate' : 'an-off';\r\n this.liveNotificationClass = this.liveNotification === 'an-animate' ? 'active' : '';\r\n }\r\n\r\n toggleProfileNotification() {\r\n this.profileNotification = this.profileNotification === 'an-off' ? 'an-animate' : 'an-off';\r\n this.profileNotificationClass = this.profileNotification === 'an-animate' ? 'active' : '';\r\n }\r\n\r\n notificationOutsideClick(ele: string) {\r\n if (ele === 'live' && this.liveNotification === 'an-animate') {\r\n this.toggleLiveNotification();\r\n } else if (ele === 'profile' && this.profileNotification === 'an-animate') {\r\n this.toggleProfileNotification();\r\n }\r\n }\r\n\r\n toggleOpened() {\r\n if (this.windowWidth < 992) {\r\n this.toggleOn = this.verticalNavType === 'offcanvas' ? true : this.toggleOn;\r\n if (this.navRight === 'nav-on') {\r\n this.toggleHeaderNavRight();\r\n }\r\n }\r\n this.mainMenu.toggle();\r\n if (this.showSubMenu) {\r\n this.subMenu.toggle();\r\n }\r\n }\r\n\r\n onClickedOutsideSidebar(e: Event) {\r\n if ((this.windowWidth < 992 && this.toggleOn && this.verticalNavType !== 'offcanvas') || this.verticalEffect === 'overlay') {\r\n this.toggleOn = true;\r\n this.verticalNavType = 'offcanvas';\r\n }\r\n }\r\n\r\n setNavBarTheme(theme: string) {\r\n if (theme === 'themelight1') {\r\n this.navBarTheme = 'themelight1';\r\n this.menuTitleTheme = 'theme1';\r\n this.sidebarImg = 'false';\r\n } else {\r\n this.menuTitleTheme = 'theme6';\r\n this.navBarTheme = 'theme1';\r\n this.sidebarImg = 'false';\r\n }\r\n }\r\n\r\n setLayoutType(type: string) {\r\n this.layoutType = type;\r\n if (type === 'dark') {\r\n this.headerTheme = 'theme1';\r\n this.sidebarImg = 'false';\r\n this.navBarTheme = 'theme1';\r\n this.menuTitleTheme = 'theme6';\r\n document.querySelector('body').classList.add('dark');\r\n } else if (type === 'light') {\r\n this.sidebarImg = 'false';\r\n this.headerTheme = 'themelight5';\r\n this.navBarTheme = 'themelight1';\r\n this.menuTitleTheme = 'theme1';\r\n document.querySelector('body').classList.remove('dark');\r\n } else if (type === 'img') {\r\n this.sidebarImg = 'true';\r\n this.headerTheme = 'theme1';\r\n this.navBarTheme = 'theme1';\r\n this.menuTitleTheme = 'theme6';\r\n document.querySelector('body').classList.remove('dark');\r\n }\r\n }\r\n\r\n setBackgroundPattern(pattern: string) {\r\n document.querySelector('body').setAttribute('themebg-pattern', pattern);\r\n }\r\n\r\n onShowAbout() {\r\n this.modalHelpAbout.show();\r\n setTimeout(function () { $(\"#aboutModalOkButton\").focus() }, 300); //set focus on button so if user clicks Enter, it will close. We have to use setTimeout to set the focus because you can't set focus until it appears, which takes a moment.\r\n }\r\n\r\n onChangePwd() {\r\n this.passwordOld = \"\";\r\n this.passwordNew = \"\";\r\n this.showPasswordErrorMsg = false;\r\n this.modalChangePwd.show();\r\n setTimeout(function () { $(\"#passwordOld\").focus() }, 300); //set focus on first field\r\n }\r\n\r\n finishChangePwd() {\r\n if (this.passwordOld.length === 0 || this.passwordNew.length === 0) {\r\n this.passwordErrorMsg = \"Please enter your old password and a new password.\";\r\n this.showPasswordErrorMsg = true;\r\n return;\r\n }\r\n\r\n this.showPasswordErrorMsg = false;\r\n\r\n this.webService.users_ChangePassword(sessionStorage.email, this.passwordOld, this.passwordNew).subscribe(\r\n apiResponse => {\r\n if (apiResponse.errorCode === 0) {\r\n //change pwd worked\r\n this.modalChangePwd.hide();\r\n this.msgBox.show(\"Success\", \"Your password has been changed.\", false);\r\n this.revealPwd1 = false;\r\n this.revealPwd2 = false;\r\n this.revealPwd3 = false;\r\n }\r\n else {\r\n //server says something didn't work, so show message from server.\r\n this.passwordErrorMsg = apiResponse.errorMessage;\r\n this.showPasswordErrorMsg = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n onLogout() {\r\n this.webService.authentication_LogUserLogout();\r\n sessionStorage.clear();\r\n //we redirect the browser URL to the login page. We do it after a 10 ms pause to allow the API call above to get going.\r\n //we can't just do window.location.pathname = \"login\" because it's possible our URL has a virtual folder we need to worry about.\r\n setTimeout(() => window.location.assign(document.getElementsByTagName('base')[0].href + \"login\"), 10);\r\n }\r\n\r\n onForgetMe() {\r\n this.msgBox.show(\"Confirm\", `Are you sure you want to remove your registration on this browser? If you do this, you will need to go through two-step authentication the next time you log in.`, true,\r\n () => {\r\n this.webService.authentication_DeleteUserAuth(localStorage.browserGuid).subscribe();\r\n this.browserRegistered = false;\r\n });\r\n }\r\n\r\n //This is the event when you click on a page to view something in the system, and it's a top-level menu item. \r\n onMainMenuItemClicked(pageName: string, clickEvent) {\r\n if (this.pcodedDeviceType != 'desktop') {\r\n if (this.mainMenu)\r\n this.mainMenu.close();\r\n if (this.subMenu)\r\n this.subMenu.close();\r\n }\r\n }\r\n\r\n selectProject(projName) {\r\n this.showSubMenu = true;\r\n this.selectedProject = projName;\r\n sessionStorage.setItem(\"projectName\", projName);\r\n sessionStorage.selectedProject = this.selectedProject;\r\n }\r\n\r\n getCurrentYear() {\r\n return new Date().getFullYear();\r\n }\r\n\r\n // get the number of unread notifications for current user to display on side menu\r\n countNotifications() { \r\n \r\n this.webService.notifications_GetNotificationsByUser(this.userNo).subscribe(\r\n apiResponse => {\r\n if (ApiResponse.checkStatus(apiResponse)) {\r\n var notifications = 0;\r\n for (const notification of apiResponse.notifications) {\r\n if (notification.readUTC == null) {\r\n notifications++;\r\n }\r\n }\r\n this.notificationCount = notifications;\r\n if(!window.location.href.toLowerCase().includes('notifications') && this.notificationCount>0)\r\n { let notification=apiResponse.notifications[0]; \r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n //on click of submenu navigation will be hide \r\n onSubMenuItemClicked() {\r\n if (this.pcodedDeviceType != 'desktop') {\r\n if (this.mainMenu)\r\n this.mainMenu.close();\r\n if (this.subMenu)\r\n this.subMenu.close();\r\n }\r\n }\r\n\r\n getQueryStringValueByName(destinationUrl, name) {\r\n var queryStringFromStartOfValue = destinationUrl?.split(name + '=')[1];\r\n return (typeof queryStringFromStartOfValue === 'string' ? queryStringFromStartOfValue.split('&')[0] : null);\r\n }\r\n}\r\n","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
About BuildSAGE
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
https://buildsage.com
Build Version: {{buildNumberFromConfigFile}}
© {{getCurrentYear()}}, BuildSAGE, LLC - ALL RIGHTS RESERVED
Unauthorized access to this system is prohibited by law - Title 18 U.S. Code Section 1030
Contact us at hello@buildsage.com
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
Change password for {{employeeName}}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{passwordErrorMsg}}\r\n
Old Password\r\n \r\n \r\n
New password\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n","//This sets the title in the browser window as well as the header bar at the top of the application based on each page's routing module. For example, in feedback-percentage-routing-module.cs, it defines the title for the component.\r\nimport { Component } from '@angular/core';\r\nimport {Title} from '@angular/platform-browser';\r\nimport {Router, NavigationEnd, ActivatedRoute} from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-title',\r\n template: ''\r\n})\r\nexport class TitleComponent {\r\n public titleString: string;\r\n constructor(private router: Router, private route: ActivatedRoute, private titleService: Title) {\r\n this.router.events\r\n .pipe(filter((event: any): event is NavigationEnd => event instanceof NavigationEnd))\r\n .subscribe(() => {\r\n let currentRoute = this.route.root;\r\n let title = '';\r\n do {\r\n const childrenRoutes = currentRoute.children;\r\n currentRoute = null;\r\n childrenRoutes.forEach(routes => {\r\n if (routes.outlet === 'primary') {\r\n title = routes.snapshot.data.title;\r\n currentRoute = routes;\r\n }\r\n });\r\n } while (currentRoute);\r\n if (title !== undefined) {\r\n //This is for the title that shows up in the top of the browser (e.g. the part of the tab that sticks up and you can see even when you are looking at another tab).\r\n this.titleService.setTitle('BuildSAGE | ' + title);\r\n //This is for the title that shows up near the top of the page to the right of the GR logo. This used to be set by setting the variable titleString, which is the Angular way, but then we wanted to sometimes update this title from another place (admin compoenent), and it didn't play nicely to do it this way. So we are using old fashioned JS here.\r\n const t = document.getElementById(\"titleString\");\r\n if (t)\r\n t.innerText = title;\r\n //this.titleString = title;\r\n }\r\n });\r\n }\r\n}\r\n","//this is the template of the page before the user has logged in. It hosts the login page and any other pages we create (e.g. forgot pwd, if we create that at some point).\r\nimport { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-auth',\r\n templateUrl: './auth.component.html',\r\n styleUrls: ['./auth.component.scss']\r\n})\r\nexport class AuthComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","\r\n \r\n\r\n","\r\nimport {filter} from 'rxjs/operators';\r\nimport { Directive, OnInit } from '@angular/core';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { AccordionLinkDirective } from './accordionlink.directive';\r\nimport { Subscription } from 'rxjs';\r\n\r\n\r\n@Directive({\r\n selector: '[appAccordion]',\r\n})\r\nexport class AccordionDirective implements OnInit {\r\n\r\n protected navlinks: Array = [];\r\n private countState = 1;\r\n private _router: Subscription;\r\n closeOtherLinks(openLink: AccordionLinkDirective): void {\r\n this.countState++;\r\n if ((openLink.group !== 'sub-toggled' || openLink.group !== 'main-toggled') && this.countState === 1) {\r\n if (window.innerWidth < 768 || (window.innerWidth >= 768 && window.innerWidth <= 1024)) {\r\n const toggled_element = document.querySelector('#mobile-collapse');\r\n toggled_element.click();\r\n }\r\n }\r\n this.navlinks.forEach((link: AccordionLinkDirective) => {\r\n if (link !== openLink && (link.group === 'sub-toggled' || openLink.group !== 'sub-toggled')) {\r\n //link.open = false;//???Gilmer: commented this out so the menu groups stay open rather than close when you go to a different group.\r\n }\r\n });\r\n }\r\n\r\n addLink(link: AccordionLinkDirective): void {\r\n this.navlinks.push(link);\r\n }\r\n\r\n removeGroup(link: AccordionLinkDirective): void {\r\n const index = this.navlinks.indexOf(link);\r\n if (index !== -1) {\r\n this.navlinks.splice(index, 1);\r\n }\r\n }\r\n\r\n getUrl() {\r\n return this.router.url;\r\n }\r\n\r\n ngOnInit(): any {\r\n this._router = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: NavigationEnd) => {\r\n this.countState = 0;\r\n this.navlinks.forEach((link: AccordionLinkDirective) => {\r\n if (link.group) {\r\n const routeUrl = this.getUrl();\r\n const currentUrl = routeUrl.split('/');\r\n if (currentUrl.indexOf( link.group ) > 0) {\r\n link.open = true;\r\n this.closeOtherLinks(link);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n constructor( private router: Router) {}\r\n}\r\n","import { Directive, HostListener, Inject } from '@angular/core';\r\n\r\nimport { AccordionLinkDirective } from './accordionlink.directive';\r\n\r\n@Directive({\r\n selector: '[appAccordionToggle]'\r\n})\r\nexport class AccordionAnchorDirective {\r\n\r\n protected navlink: AccordionLinkDirective;\r\n\r\n constructor( @Inject(AccordionLinkDirective) navlink: AccordionLinkDirective) {\r\n this.navlink = navlink;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(e: any) {\r\n this.navlink.toggle();\r\n }\r\n}\r\n","import {\r\n Directive, HostBinding, Inject, Input, OnInit, OnDestroy\r\n} from '@angular/core';\r\n\r\nimport { AccordionDirective } from './accordion.directive';\r\n\r\n@Directive({\r\n selector: '[appAccordionLink]'\r\n})\r\nexport class AccordionLinkDirective implements OnInit, OnDestroy {\r\n\r\n @Input() public group: any;\r\n\r\n @HostBinding('class.pcoded-trigger')\r\n @Input()\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n\r\n set open(value: boolean) {\r\n this._open = value;\r\n /*for slimscroll on and off*/\r\n document.querySelector('.pcoded-inner-navbar').classList.toggle('scroll-sidebar');\r\n if (value) {\r\n this.nav.closeOtherLinks(this);\r\n }\r\n }\r\n\r\n protected _open: boolean;\r\n protected nav: AccordionDirective;\r\n\r\n constructor(@Inject(AccordionDirective) nav: AccordionDirective) {\r\n this.nav = nav;\r\n }\r\n\r\n ngOnInit(): any {\r\n this.nav.addLink(this);\r\n }\r\n\r\n ngOnDestroy(): any {\r\n this.nav.removeGroup(this);\r\n }\r\n\r\n toggle(): any {\r\n /*for slimscroll on and off*/\r\n document.querySelector('.pcoded-inner-navbar').classList.add('scroll-sidebar');\r\n\r\n this.open = !this.open;\r\n }\r\n}\r\n","import {trigger, state, style, AUTO_STYLE, transition, animate} from '@angular/animations';\r\n\r\nexport const cardToggle = trigger('cardToggle', [\r\n state('collapsed, void',\r\n style({\r\n overflow: 'hidden',\r\n height: '0px',\r\n })\r\n ),\r\n state('expanded',\r\n style({\r\n overflow: 'hidden',\r\n height: AUTO_STYLE,\r\n })\r\n ),\r\n transition('collapsed <=> expanded', [\r\n animate('400ms ease-in-out')\r\n ])\r\n]);\r\n\r\nexport const cardClose = trigger('cardClose', [\r\n state('open', style({\r\n opacity: 1\r\n })),\r\n state('closed', style({\r\n opacity: 0,\r\n display: 'none'\r\n })),\r\n transition('open <=> closed', animate('400ms')),\r\n]);\r\n\r\nexport const cardIconToggle = trigger('cardIconToggle', [\r\n state('an-off, void',\r\n style({\r\n overflow: 'hidden',\r\n width: '35px',\r\n })\r\n ),\r\n state('an-animate',\r\n style({\r\n overflow: 'hidden',\r\n width: AUTO_STYLE,\r\n })\r\n ),\r\n transition('an-off <=> an-animate', [\r\n animate('400ms ease-in-out')\r\n ])\r\n]);\r\n","import {Directive, ElementRef, HostListener} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appCardToggleEvent]'\r\n})\r\nexport class CardToggleDirective {\r\n constructor(private el: ElementRef) { }\r\n\r\n @HostListener('click', ['$event'])\r\n onToggle($event: any) {\r\n $event.preventDefault();\r\n this.el.nativeElement.classList.toggle('fa-minus');\r\n this.el.nativeElement.classList.toggle('fa-plus');\r\n }\r\n}\r\n","import {Component, OnInit, Input, ViewEncapsulation} from '@angular/core';\r\nimport {cardToggle, cardClose, cardIconToggle} from './card-animation';\r\n\r\n@Component({\r\n selector: 'app-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss'],\r\n animations: [cardToggle, cardClose, cardIconToggle],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class CardComponent implements OnInit {\r\n @Input() headerContent: string;\r\n @Input() title: string;\r\n @Input() blockClass: string;\r\n @Input() cardClass: string;\r\n @Input() classHeader = false;\r\n @Input() cardOptionBlock = false;\r\n cardToggle = 'expanded';\r\n cardClose = 'open';\r\n fullCard: string;\r\n fullCardIcon: string;\r\n loadCard = false;\r\n isCardToggled = false;\r\n cardLoad: string;\r\n cardIconToggle: string;\r\n\r\n constructor() {\r\n this.fullCardIcon = 'fa-expand';\r\n this.cardIconToggle = 'an-off';\r\n }\r\n\r\n ngOnInit() {\r\n if (this.cardOptionBlock) {\r\n this.cardToggle = 'false';\r\n }\r\n }\r\n\r\n toggleCard(event) {\r\n this.cardToggle = this.cardToggle === 'collapsed' ? 'expanded' : 'collapsed';\r\n }\r\n\r\n toggleCardOption() {\r\n this.isCardToggled = !this.isCardToggled;\r\n this.cardIconToggle = this.cardIconToggle === 'an-off' ? 'an-animate' : 'an-off';\r\n }\r\n\r\n closeCard(event) {\r\n this.cardClose = this.cardClose === 'closed' ? 'open' : 'closed';\r\n }\r\n\r\n fullScreen(event) {\r\n this.fullCard = this.fullCard === 'full-card' ? '' : 'full-card';\r\n this.fullCardIcon = this.fullCardIcon === 'fa-expand' ? 'fa-compress' : 'fa-expand';\r\n }\r\n\r\n cardRefresh() {\r\n this.loadCard = true;\r\n this.cardLoad = 'card-load';\r\n setTimeout( () => {\r\n this.cardLoad = '';\r\n this.loadCard = false;\r\n }, 3000);\r\n }\r\n}\r\n","
\r\n
\r\n
{{ title }}
\r\n {{ headerContent }}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n","// To use this, put this in your HTML:\r\n// \r\n// Then put this in your TS file:\r\n// @ViewChild('dateRangePicker') dateRangePicker: DateRangePickerComponent;\r\n// Then initialize it by calling the init() function. \r\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { Option, ServiceArea, WebService } from '../web-service/web.service';\r\nimport { ChromeDateFixer } from '../../shared/utilities/utilities';\r\n\r\n@Component({\r\n selector: 'date-range-picker',\r\n templateUrl: './date-range-picker.component.html',\r\n styleUrls: ['./date-range-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class DateRangePickerComponent implements OnInit {\r\n filterData: FilterData;\r\n callbackRefreshData: Function;\r\n yearOptions: Option[];\r\n\r\n dateRangeOptions = [\r\n { optionName: 'Custom Dates', optionNo: 14 },\r\n { optionName: 'Quarter1', optionNo: -1 },\r\n { optionName: 'Quarter2', optionNo: -2 },\r\n { optionName: 'Quarter3', optionNo: -3 },\r\n { optionName: 'Quarter4', optionNo: -4 },\r\n { optionName: 'Year', optionNo: 13 },\r\n { optionName: 'January', optionNo: 1 },\r\n { optionName: 'February', optionNo: 2 },\r\n { optionName: 'March', optionNo: 3 },\r\n { optionName: 'April', optionNo: 4 },\r\n { optionName: 'May', optionNo: 5 },\r\n { optionName: 'June', optionNo: 6 },\r\n { optionName: 'July', optionNo: 7 },\r\n { optionName: 'August', optionNo: 8 },\r\n { optionName: 'September', optionNo: 9 },\r\n { optionName: 'October', optionNo: 10 },\r\n { optionName: 'November', optionNo: 11 },\r\n { optionName: 'December', optionNo: 12 }\r\n ];\r\n\r\n constructor(private webService: WebService) {\r\n this.filterData = new FilterData();\r\n\r\n // Fetch years list\r\n const currentYear = new Date().getFullYear();\r\n this.yearOptions = [];\r\n for (let i = 2022; i <= currentYear; i++) {\r\n this.yearOptions.push(new Option(i, i.toString()));\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n ChromeDateFixer.initFixer();\r\n }\r\n\r\n // Hide the year selector if \"Year\" or \"Custom Date\" are selected\r\n showYearSelector() {\r\n return this.filterData.periodNo != null && this.filterData.periodNo < 14;\r\n }\r\n\r\n // Hide custom dates unless specifically selected\r\n showCustomDates() {\r\n return this.filterData.periodNo == 14;\r\n }\r\n\r\n // Call this to initalize the control.\r\n initDateRangePicker(callbackRefreshData: Function) {\r\n this.callbackRefreshData = callbackRefreshData;\r\n }\r\n\r\n clearRange() {\r\n this.filterData = new FilterData();\r\n this.refreshData();\r\n }\r\n\r\n clearYear() {\r\n this.filterData.yearNo = null;\r\n this.filterData.periodNo = null;\r\n this.refreshData();\r\n }\r\n\r\n // Main ingress for dynamic data\r\n refreshData() {\r\n if (this.callbackRefreshData)\r\n this.demuxDates(this.filterData.periodNo); // Updates state of filterData variables\r\n\r\n if (this.validDateInput(this.filterData))\r\n this.callbackRefreshData(this.filterData); // Run the callback defined by the initiating component. This is the piece that makes the date picker able to be dynamically inserted into any form.\r\n }\r\n\r\n // Because date range can be quarterly or monthly, we must set fromDate and toDate accordingly \r\n demuxDates(dateRangeNo: number): void {\r\n var year;\r\n (this.filterData.yearNo == null) ? year = new Date().getFullYear() : year = this.filterData.yearNo;\r\n\r\n // Happens in the event that a user clears the year selector\r\n if (dateRangeNo == null) {\r\n this.filterData.fromDate = new Date('1/1/' + year);\r\n this.filterData.toDate = new Date('12/31/' + year);\r\n return;\r\n }\r\n\r\n // Ideally this would be in its own class with enums & decorator functionality\r\n switch(dateRangeNo) {\r\n // Quarter 1\r\n case -1: {\r\n this.filterData.yearNo = year;\r\n this.filterData.fromDate = new Date('1/1/' + year);\r\n this.filterData.toDate = new Date('3/31/' + year);\r\n break;\r\n }\r\n // Quarter 2\r\n case -2: {\r\n this.filterData.yearNo = year;\r\n this.filterData.fromDate = new Date('4/1/' + year);\r\n this.filterData.toDate = new Date('6/30/' + year);\r\n break;\r\n }\r\n // Quarter 3\r\n case -3: {\r\n this.filterData.yearNo = year;\r\n this.filterData.fromDate = new Date('7/1/' + year);\r\n this.filterData.toDate = new Date('9/30/' + year);\r\n break;\r\n }\r\n // Quarter 4\r\n case -4: {\r\n this.filterData.yearNo = year;\r\n this.filterData.fromDate = new Date('10/1/' + year);\r\n this.filterData.toDate = new Date('12/31/' + year);\r\n break;\r\n }\r\n // Year\r\n case 13: {\r\n // Year to Date\r\n if (this.filterData.yearNo == null) {\r\n this.filterData.yearNo = new Date().getFullYear();\r\n this.filterData.fromDate = new Date('1/1/' + this.filterData.yearNo);\r\n this.filterData.toDate = new Date();\r\n } else {\r\n // Full Year\r\n this.filterData.fromDate = new Date('1/1/' + this.filterData.yearNo);\r\n this.filterData.toDate = new Date('12/31/' + this.filterData.yearNo);\r\n }\r\n break;\r\n }\r\n // Custom Dates\r\n case 14: {\r\n this.filterData.fromDate = new Date($(\"#customDateFrom\").val() + \" 00:00:00\");\r\n this.filterData.toDate = new Date($(\"#customDateTo\").val() + \" 00:00:00\");\r\n break;\r\n }\r\n // Months\r\n default: {\r\n if (dateRangeNo < 13) {\r\n var monthSelector = this.dateRangeOptions.filter(option => option.optionNo == dateRangeNo);\r\n var month = monthSelector[0].optionName;\r\n var startDate = new Date(month + \" \" + year);\r\n\r\n this.filterData.yearNo = year;\r\n this.filterData.fromDate = startDate;\r\n this.filterData.toDate = new Date(year, startDate.getMonth() + 1, 0); // This will give the last day of the month\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Assert that entered date info for CUSTOM DATES is greater than Jan 1, 1950\r\n validDateInput(dateData: FilterData): boolean {\r\n this.clearValidationClasses();\r\n\r\n var datesValid = true;\r\n const dbMinDate = new Date('1/1/1850'); // Don't send nonsensical data to the API\r\n\r\n // No action to take, custom dates not selected.\r\n if (dateData.periodNo != 14)\r\n return datesValid;\r\n\r\n if (new Date(dateData.fromDate) < dbMinDate) {\r\n // Add front end message and red form box\r\n $(\"#customDateFrom\").addClass(\"validation-error\")\r\n datesValid = false;\r\n }\r\n if (new Date(dateData.toDate) < dbMinDate) {\r\n // Add front end message and red form box\r\n $(\"#customDateTo\").addClass(\"validation-error\")\r\n datesValid = false;\r\n }\r\n\r\n return datesValid;\r\n }\r\n\r\n clearValidationClasses(): void {\r\n $(\"#customDateFrom\").removeClass(\"validation-error\")\r\n $(\"#customDateTo\").removeClass(\"validation-error\")\r\n }\r\n}\r\n\r\nexport class FilterData {\r\n periodNo: number;\r\n yearNo: number;\r\n fromDate: Date;\r\n toDate: Date;\r\n}\r\n","
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n \r\n From\r\n \r\n \r\n \r\n To\r\n \r\n \r\n\r\n","import { formatDate } from '@angular/common';\r\nimport { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\n\r\n@Directive({\r\n selector: 'input[type=date]',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: DateInputDirective,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DateInputDirective,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DateInputDirective implements ControlValueAccessor, Validator {\r\n minDate: Date;\r\n maxDate: Date;\r\n\r\n constructor(\r\n private _elementRef: ElementRef,\r\n private _renderer: Renderer2\r\n ) {\r\n this.minDate = new Date(_elementRef.nativeElement.getAttribute('min') || '2000-01-01');\r\n if (_elementRef.nativeElement.getAttribute('max'))\r\n this.maxDate = new Date(_elementRef.nativeElement.getAttribute('max'))\r\n }\r\n\r\n @HostListener('input', ['$event.target.valueAsNumber'])\r\n onInput = (_: any) => {};\r\n\r\n writeValue(dateISOString: string): void {\r\n if (dateISOString == null || dateISOString == '')\r\n return;\r\n\r\n const UIValue = dateISOString.substring(0, 10);\r\n\r\n this._renderer.setAttribute(\r\n this._elementRef.nativeElement,\r\n 'value',\r\n UIValue\r\n );\r\n }\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.onInput = (value: number) => {\r\n fn(this.getDate(value).toISOString());\r\n };\r\n }\r\n registerOnTouched(fn: any): void {}\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value)\r\n return null;\r\n\r\n const date = new Date(control.value.substring(0, 10));\r\n return control.value && this.isValidDate(date) ? null : { date: true };\r\n }\r\n\r\n isValidDate(d: Date | number | null) {\r\n return d instanceof Date && !isNaN(d as unknown as number) && this.minDate <= d && d <= this.maxDate;\r\n }\r\n\r\n getDate(value: number) {\r\n if (value) {\r\n const date = new Date(value);\r\n return this.isValidDate(date) ? date : { toISOString: () => null };\r\n }\r\n return { toISOString: () => null };\r\n }\r\n}\r\n","import { Directive } from \"@angular/core\";\r\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\r\n\r\n@Directive({ selector: '[inputTrim]' })\r\nexport class InputTrimDirective {\r\n constructor(private ngControl: NgControl) {\r\n trimValueAccessor(ngControl.valueAccessor)\r\n }\r\n}\r\n\r\nfunction trimValueAccessor(valueAccessor: ControlValueAccessor) {\r\n const original = valueAccessor.registerOnChange;\r\n\r\n valueAccessor.registerOnChange = (fn: (_: unknown) => void) => {\r\n return original.call(valueAccessor, (value: unknown) => {\r\n return fn(typeof value === 'string' ? value.trim() : value);\r\n });\r\n };\r\n}\r\n","import { ErrorHandler, Injectable } from '@angular/core';\r\n\r\ndeclare var debugModeForErrors: boolean;//This tells the compiler that it's a global variable coming from another file. In our case, it's coming from config.js.\r\n\r\n@Injectable()\r\n\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n constructor() { }\r\n\r\n handleError(error: Error) {\r\n //Occasionally when you click on one of the pages in the menu, it will fail to load and create an error that contains the string \"ChunkLoadError.\" We do something special when this happens.\r\n if (error.message && error.message.indexOf(\"ChunkLoadError\") != -1)\r\n alert(\"The screen failed to load. Please click on the screen in the menu again.\");\r\n else if (error.message && error.message.indexOf(\"ExpressionChangedAfterIt\") != -1) {\r\n //This is a special Angular error that I haven't been able to figure out how to fix. So ignore it because sometimes it keeps popping up many times.\r\n }\r\n else if (!sessionStorage.validationToken) {\r\n //If we just got a 401 error from the server, in loader.interceptor.ts we empty the session storage and do an auto-logout. So if this entry isn't in sessionStorage, we don't need to pop up an error.\r\n }\r\n else if (debugModeForErrors)\r\n alert(error.message);\r\n console.error(\"Error from global error handler\", error);\r\n //I had an instance where there was an error, and when I rethrew it, it messed something up within JS or angular or something, and then future things didn't work right. When I commented out this line, it no longer had the problem.\r\n //throw error;\r\n }\r\n \r\n}\r\n","//This grid footer component has a button to export the grid data and a select dropdown to change the number of rows in a page.\r\n//If you use the component, you must call initialize() after the page is loaded.\r\n//When the user changes the page size, it's saved in sessionStorage so that if you come back to the page later, it will remember.\r\nimport { Component, OnInit, ViewEncapsulation, ViewChild } from '@angular/core';\r\nimport { GridOptions, ColDef } from 'ag-grid-community';\r\nimport { MessageBoxComponent } from '../message-box/message-box.component';\r\n\r\n@Component({\r\n selector: 'grid-footer',\r\n templateUrl: './grid-footer.component.html',\r\n styleUrls: ['./grid-footer.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GridFooterComponent implements OnInit {\r\n sessionStorageKeyPageSize: string;\r\n uniqueName: string;\r\n gridOptions: GridOptions;\r\n columnsToExport: string[];\r\n msgBox: MessageBoxComponent;\r\n gridID: string;\r\n oldGridHeight: string;\r\n oldGridWidth: string;\r\n hideActions: boolean;\r\n static displayedMessageAboutDataNotFittingOnPrintout: boolean = false;\r\n @ViewChild('pageSizeSelect') pageSizeSelect;\r\n \r\n constructor() {}\r\n\r\n ngOnInit() {\r\n }\r\n\r\n //uniqueName is used in the file name of the exported file and to save the page size in sessionStorage (which is why it must be unique, so each grid in the system has a different value).\r\n //columnsToExport is an array of the columns to be included if the user exports the grid. If you don't pass it in, the default is to export them all except for any with the header label \"Actions\"\r\n initializeFooter(uniqueName: string, gridOptions: GridOptions, defaultPageSize: number = 500, columnsToExport: string[], gridID: string, msgBox: MessageBoxComponent) {\r\n this.gridOptions = gridOptions;\r\n this.uniqueName = uniqueName;\r\n this.sessionStorageKeyPageSize = \"gridPageSize\" + uniqueName;\r\n this.columnsToExport = columnsToExport;\r\n this.gridID = gridID;\r\n this.msgBox = msgBox;\r\n let numRecords: string = sessionStorage[this.sessionStorageKeyPageSize];\r\n if (!numRecords) {\r\n numRecords = defaultPageSize.toString();\r\n }\r\n //See the comment at the top of this function about columnsToExport.\r\n if (!columnsToExport && gridOptions.columnDefs) {\r\n this.columnsToExport = [];\r\n for (let i: number = 0; i < gridOptions.columnDefs.length; i++) {\r\n if (gridOptions.columnDefs[i].headerName != \"Actions\")\r\n this.columnsToExport.push((gridOptions.columnDefs[i]).field);\r\n }\r\n }\r\n this.pageSizeSelect.nativeElement.value = numRecords;\r\n this.onGridPageSizeChanged();\r\n }\r\n\r\n //resize the column widths to best fit the grid.\r\n //This will also set up remembering column and sort settings in sessionStorage, so that when you leave a page and come back, the settings are still there. uniqueName is used to save the settings in sessionStorage (which is why it must be unique, so each grid in the system has a different value). If you don't want the grid column settings saved in sessionStorage, pass in null for uniqueName.\r\n static sizeColumnWidths(dontResizeColumnNames: string, gridId: string, gridOptions: GridOptions, uniqueName: string, skipResizingUnlessSavedInSesstion: boolean = false) {\r\n if (!gridOptions.columnApi)\r\n return;\r\n\r\n //The column settings (which includes their order and their widths) is stored in sessionStorage separately from the sorting info.\r\n if (uniqueName && window.sessionStorage[\"column\" + uniqueName]) {\r\n //The columns settings are stored in sessionStorage, so we read them out and apply them to the grid.\r\n gridOptions.columnApi.setColumnState(JSON.parse(window.sessionStorage[\"column\" + uniqueName]));\r\n }\r\n else if (!skipResizingUnlessSavedInSesstion) {\r\n //dontResizeColumnNames might be a comma-delimited list of column names that shouldn't be resized. We split it into an array to easily search.\r\n let dontResizeColumnNamesArray: string[] = [];\r\n if (dontResizeColumnNames)\r\n dontResizeColumnNamesArray = dontResizeColumnNames.split(\",\");\r\n //This makes an array of all the column IDs and passes it to autoSizeColumns, so all the columns will be sized to try to appropriately fit the data in the grid.\r\n var allColumnIds = [];\r\n gridOptions.columnApi.getAllColumns().forEach(column => {\r\n if (dontResizeColumnNamesArray.indexOf(column.getColId()) == -1) //there might be a column we don't want to resize, like the Action column, because we hardcode its width in the gridOptions\r\n allColumnIds.push(column.getColId());\r\n });\r\n gridOptions.columnApi.autoSizeColumns(allColumnIds);\r\n\r\n // if the grid has service areas or specialties, keep the initial width at a max of 800px. The user can adjust the column to be bigger if they prefer.\r\n allColumnIds.forEach((id) => {\r\n if(gridOptions.columnApi.getColumn(id).getActualWidth() > 800) {\r\n gridOptions.columnApi.setColumnWidth(id, 800);\r\n }\r\n })\r\n\r\n //If the grid is wider than the width of all the columns, the grid will have an extra column-ish area to the right, which looks weird. So this code below looks for that condition and if it exists, changes the method of sizing the columns to sizeColumnsToFit(), which will increase the size of all the columns to take up the whole width of the grid.\r\n let cols = gridOptions.columnApi.getColumnState();\r\n let i: number;\r\n let colWidths: number = 0;\r\n for (i = 0; i < cols.length; ++i) {\r\n colWidths += cols[i].width;\r\n }\r\n let gridWidth: number = $(\"#\" + gridId).width();\r\n if (gridWidth > colWidths) {\r\n gridOptions.api.sizeColumnsToFit();\r\n //There's a weird issue where sizeColumnsToFit() is supposed to make all the columns fit perfectly. But it ends up being 1 pixel too wide, which causes a scroll bar to appear at the bottom of the grid, so this will decrease the width of the last column by one pixel.\r\n cols = gridOptions.columnApi.getColumnState();\r\n if (cols.length != 0) {\r\n cols[cols.length - 1].width = cols[cols.length - 1].width - 1;\r\n gridOptions.columnApi.setColumnState(cols);\r\n }\r\n }\r\n }\r\n\r\n if (uniqueName) {\r\n if (window.sessionStorage[\"sort\" + uniqueName])\r\n gridOptions.api.setSortModel(JSON.parse(window.sessionStorage[\"sort\" + uniqueName])); //The sort settings are stored in sessionStorage, so we read them out and apply them to the grid.\r\n\r\n //Set up various event handlers so that if the grid settings are changed by the user, we save them in sessionStorage.\r\n gridOptions.onSortChanged = () => { GridFooterComponent.saveState(gridOptions.api.getSortModel(), \"sort\" + uniqueName) };\r\n gridOptions.onColumnResized = () => { GridFooterComponent.saveState(gridOptions.columnApi.getColumnState(), \"column\" + uniqueName) };\r\n gridOptions.onColumnMoved = () => { GridFooterComponent.saveState(gridOptions.columnApi.getColumnState(), \"column\" + uniqueName) };\r\n }\r\n }\r\n\r\n //event for if the user clicks the button to export.\r\n public onExportGrid() {\r\n //We have to pass an array of columns to the export function, so it knows which cols to export. But we want to skip any that are currently invisible.\r\n let cols: string[] = [];\r\n for (let i = 0; i < this.columnsToExport.length; i++)\r\n if (this.gridOptions.columnApi.getColumn(this.columnsToExport[i]).isVisible())\r\n cols.push(this.columnsToExport[i]);\r\n\r\n let params = {\r\n fileName: this.uniqueName + \"_Grid_Data.csv\",\r\n columnKeys: cols\r\n };\r\n this.gridOptions.api.exportDataAsCsv(params);\r\n }\r\n\r\n //event for if the user changes the page size.\r\n public onGridPageSizeChanged() {\r\n let pageSize: string = this.pageSizeSelect.nativeElement.value;\r\n this.gridOptions.api.paginationSetPageSize(Number(pageSize));\r\n sessionStorage[this.sessionStorageKeyPageSize] = pageSize;\r\n }\r\n\r\n //This will save the state of something in session storage using a key\r\n static saveState(obj: any, key: string) {\r\n window.sessionStorage[key] = JSON.stringify(obj);\r\n }\r\n\r\n //event handler when the user clicks the Print button. \r\n onPrint() {\r\n //We have to change some things in the layout of the page to make it suitable for printing. After we do this, we want to pause for 300 ms before showing the print dialog because it takes some time for the browser to rerender stuff, and once we show the print dialog, it stops rerendering. But we also want to show the user a dialog with some info (about how to fit stuff on a printed page) once per login session (i.e. the first time they print after logging in but not every time). So if we've never shown the dialog yet, we show that, and when they close that dialog, we'll show the print dialog. If we've already shown the dialog about fitting stuff on a printout, we just delay for 300 ms and then show the print dialog.\r\n let grid = document.getElementById(this.gridID);\r\n if (!grid)\r\n this.msgBox.show(\"Warning\", \"The grid has not been initialized.\", false);\r\n //Per the instructions from ag-grid, we must get rid of the height and width properties of the grid and then call api.setDomLayout('print'). This will reformat the grid for printing.\r\n this.oldGridHeight = grid.style.height;\r\n this.oldGridWidth = grid.style.width;\r\n grid.style.height = '';\r\n grid.style.width = '';\r\n this.gridOptions.api.setDomLayout('print');\r\n //If there's an Action column, make it invisible\r\n for (let i: number = 0; i < this.gridOptions.columnDefs.length; i++) {\r\n if (this.gridOptions.columnDefs[i].headerName == \"Actions\"){\r\n // @ts-ignore\r\n this.hideActions = this.gridOptions.columnDefs[i].hide;\r\n this.gridOptions.columnApi.setColumnVisible((this.gridOptions.columnDefs[i]).field, false);\r\n }\r\n }\r\n\r\n if (GridFooterComponent.displayedMessageAboutDataNotFittingOnPrintout) {\r\n setTimeout(() => {\r\n this.finishPrint();\r\n }, 300);\r\n }\r\n else {\r\n this.msgBox.show(\"Information\", \"If the data is too wide to fit on a printed page, you can make the columns more narrow and print again. You may also export to CSV and print the data from a spreadsheet program. Many browsers have options to change the margins, scale, or landscape mode on the settings of their print dialog to allow more data to fit on the page.

Click Close to continue printing.\", false, null,\r\n () => {\r\n //This function will be called when the user clicks the Close button. But use setTimeout to wait some milliseconds because the msgBox dialog has to disappear before we call print().\r\n setTimeout(() => {\r\n this.finishPrint();\r\n }, 200);\r\n });\r\n GridFooterComponent.displayedMessageAboutDataNotFittingOnPrintout = true;\r\n }\r\n }\r\n\r\n //This will call print(), which opens the browser's print dialog. And then we set the grid display properties back to normal since it was reformatted for printing in onPrint().\r\n finishPrint() {\r\n print(); //this is a global JS function\r\n let grid = document.getElementById(this.gridID);\r\n grid.style.height = this.oldGridHeight;\r\n grid.style.width = this.oldGridWidth;\r\n this.gridOptions.api.setDomLayout(null);\r\n //If there's an Action column, make it visible\r\n for (let i: number = 0; i < this.gridOptions.columnDefs.length; i++) {\r\n if (this.gridOptions.columnDefs[i].headerName == \"Actions\" && !this.hideActions)\r\n this.gridOptions.columnApi.setColumnVisible((this.gridOptions.columnDefs[i]).field, true);\r\n }\r\n }\r\n}\r\n","
\r\n  \r\n \r\n  Page size:\r\n \r\n
\r\n","import {Injectable} from '@angular/core';\r\n\r\nexport interface BadgeItem {\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface ChildrenItems {\r\n state: string;\r\n target?: boolean;\r\n name: string;\r\n type?: string;\r\n children?: ChildrenItems[];\r\n rolesCanView: string;\r\n tooltip: string;\r\n badge: BadgeItem;\r\n}\r\n\r\nexport interface MainMenuItems {\r\n state: string;\r\n main_state?: string;\r\n target?: boolean;\r\n name: string;\r\n type: string;\r\n tooltip: string;\r\n badge: BadgeItem;\r\n children?: ChildrenItems[];\r\n rolesCanView: string;\r\n}\r\n\r\nexport interface Menu {\r\n label: string;\r\n main: MainMenuItems[];\r\n}\r\n\r\nconst SUB_MENU_ITEMS: ChildrenItems[] = [\r\n {\r\n state: 'tasks',\r\n name: 'Tasks',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Review your Project\\'s current and closed Tasks and complete open Tasks assigned to you',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n {\r\n state: 'messaging',\r\n name: 'Messages',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Communicate with your Project Team or privately with BuildSAGE about your Project',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n {\r\n state: 'design-inspiration',\r\n name: 'Design Inspirations',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Share photos, drawings, and links to examples of the types of designs that inspire you for your project',\r\n badge: {\r\n type: '',\r\n value: ''\r\n },\r\n },\r\n {\r\n state: 'milestones',\r\n name: 'Milestones',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Review important goals and target dates for your Project',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n {\r\n state: 'important-docs',\r\n name: 'Important Documents',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Upload and review official Project documents for your Project',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n {\r\n state: 'project-overview',\r\n name: 'Project Overview',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Review a summary overview of your Project',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n {\r\n state: 'notes',\r\n name: 'Notes',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager',\r\n tooltip: '',\r\n badge: {\r\n type: '',\r\n value: ''\r\n }\r\n },\r\n];\r\n\r\nconst MAIN_MENU_ITEMS = [\r\n {\r\n label: '',\r\n main: [ //See https://icon-sets.iconify.design/bx/ for icons to fill in the badge type and value properties\r\n {\r\n state: 'projects',\r\n name: 'My Projects',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Manage your BuildSAGE projects',\r\n badge: {\r\n type: \"bxs\",\r\n value: \"school\"\r\n },\r\n children: SUB_MENU_ITEMS,\r\n },\r\n {\r\n state: 'users',\r\n name: 'Users',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,office manager',\r\n tooltip: '',\r\n badge: {\r\n type: \"bxs\",\r\n value: \"group\"\r\n },\r\n },\r\n {\r\n state: 'contractors',\r\n name: 'Contractors',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,office manager',\r\n tooltip: '',\r\n badge: {\r\n type: \"bxs\",\r\n value: \"wrench\"\r\n },\r\n },\r\n {\r\n state: 'homeowners',\r\n name: 'Homeowners',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,office manager',\r\n tooltip: '',\r\n badge: {\r\n type: \"bxs\",\r\n value: \"home-circle\"\r\n },\r\n },\r\n {\r\n state: 'project-forms',\r\n name: 'Project Forms',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator',\r\n tooltip: '',\r\n badge: {\r\n type: \"bx\",\r\n value: \"file\"\r\n }\r\n },\r\n {\r\n state: 'reports',\r\n name: 'Reports',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,data analyst,office manager',\r\n tooltip: '',\r\n badge: {\r\n type: \"bxs\",\r\n value: \"bar-chart-alt-2\"\r\n }\r\n },\r\n {\r\n state: 'notifications',\r\n name: 'Notifications',\r\n type: 'link',\r\n rolesCanView: 'superadmin,administrator,homeowner rep,office manager,contractor,homeowner',\r\n tooltip: 'Messages from your Project Team and updates on the status of your Projects',\r\n badge: {\r\n type: 'bxs',\r\n value: 'bell'\r\n }\r\n },\r\n {\r\n state: 'account',\r\n name: 'My Account',\r\n type: 'link',\r\n rolesCanView: 'superadmin,contractor,homeowner',\r\n tooltip: 'Review and manage your BuildSAGE account details',\r\n badge: {\r\n type: 'bx',\r\n value: 'user-circle'\r\n }\r\n },\r\n ]\r\n }\r\n];\r\n\r\n@Injectable()\r\nexport class MenuItems {\r\n getAllMain(): Menu[] {\r\n return MAIN_MENU_ITEMS;\r\n }\r\n getAllSub(): ChildrenItems[] {\r\n return SUB_MENU_ITEMS;\r\n }\r\n}\r\n","//To use this, put this in your HTML:\r\n// \r\n//Then put this in your TS file:\r\n// @ViewChild('msgBox') msgBox: MessageBoxComponent;\r\n//Then show it by calling:\r\n// this.msgBox.show(\"title\", \"message\", true, () => { alert(1); }, () => { alert(0); });\r\n//\r\nimport { Component, OnInit, ViewEncapsulation, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'message-box',\r\n templateUrl: './message-box.component.html',\r\n styleUrls: ['./message-box.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class MessageBoxComponent implements OnInit {\r\n @ViewChild('modalMessageBox', { static: true }) modalMessageBox;\r\n @ViewChild('noButtonModal', { static: true }) noButtonModal;\r\n callbackYes: Function;\r\n callbackNo: Function;\r\n modalTitle: string;\r\n modalMessage: string;\r\n noButtonText: string;\r\n showYes: boolean;\r\n showPrint: boolean;\r\n includeWarningIcon: boolean;\r\n static staticInstance: MessageBoxComponent;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n $(\"#msgBoxModal .basic.modal\").css(\"z-index\", \"99995\"); //The thing that defines which dialog is on top is a div that has the class basic.modal. By default it has a z-index of 1050. This will put this dialog on top of the others.\r\n }\r\n\r\n // If the yesNo param is true, it will show Yes/No buttons. If it's false, it will show one OK button. This is an optional param, so if you don't pass it in, it's false.\r\n // callbackYes and callbackNo are optional functions to be called back as the dialog is closed. If yesNo is false, the callbackNo function will be called.\r\n show(title: string, message: string, yesNo = false, callbackYes?: Function, callbackNo?: Function, showPrintButton: boolean = false, noButtonText: string = \"\", includeWarningIcon: boolean = false) {\r\n this.modalMessage = message;\r\n this.modalTitle = title;\r\n this.showPrint = showPrintButton;\r\n this.showYes = yesNo;\r\n this.noButtonText = noButtonText == \"\" ? (yesNo ? \"No\" : \"Close\") : noButtonText;\r\n this.includeWarningIcon = includeWarningIcon;\r\n this.modalMessageBox.show();\r\n this.callbackNo = callbackNo;\r\n this.callbackYes = callbackYes;\r\n var buttonNativeElement = this.noButtonModal.nativeElement;\r\n if (!yesNo)\r\n setTimeout(function () { buttonNativeElement.focus(); }, 200); //set focus on button so if user clicks Enter, it will close. Don't do this if there are Yes/No buttons, because it's not obvious which is the default. We have to use setTimeout to set the focus because you can't set focus until it appears, which takes a moment.\r\n }\r\n\r\n onClickYes() {\r\n this.modalMessageBox.hide();\r\n if (this.callbackYes)\r\n this.callbackYes();\r\n }\r\n\r\n onClickNo() {\r\n this.modalMessageBox.hide();\r\n if (this.callbackNo)\r\n this.callbackNo();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n \r\n \r\n {{modalTitle}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","//This is a class that came with the template, but Gilmer made some changes.\r\nimport { Component, OnInit, Input, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-modal-basic',\r\n templateUrl: './modal-basic.component.html',\r\n styleUrls: ['./modal-basic.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ModalBasicComponent implements OnInit {\r\n @Input() dialogClass: string;\r\n @Input() hideHeader = false;\r\n @Input() hideFooter = false;\r\n public visible = false;\r\n public visibleAnimate = false;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n public show(): void {\r\n this.visible = true;\r\n setTimeout(() => this.visibleAnimate = true, 0); //???This was 100 ms in the template. Gilmer lowered it to make it faster. If you take it out of the setTimeout, it will appear immediately rather than fading in.\r\n }\r\n\r\n public hide(): void {\r\n this.visibleAnimate = false;\r\n setTimeout(() => this.visible = false, 100);; //???This was 300 ms in the template. Gilmer lowered it to make it faster. If you change it to 0 ms, it will disappear immediately.\r\n }\r\n\r\n public onContainerClicked(event: MouseEvent): void {\r\n if ((event.target).classList.contains('modal')) {\r\n //this.hide();//???Gilmer: if this is not commented out, if the user clicks on the page outside of the dialog, the dialog closes. I like it better where the user is forced to click the button to close the dialog.\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\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 { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {AccordionAnchorDirective} from './accordion/accordionanchor.directive';\r\nimport {AccordionLinkDirective} from './accordion/accordionlink.directive';\r\nimport {AccordionDirective} from './accordion/accordion.directive';\r\nimport {HttpClientModule} from '@angular/common/http';\r\nimport {PERFECT_SCROLLBAR_CONFIG, PerfectScrollbarConfigInterface, PerfectScrollbarModule} from 'ngx-perfect-scrollbar';\r\nimport {TitleComponent} from '../layout/admin/title/title.component';\r\nimport {CardComponent} from './card/card.component';\r\nimport {CardToggleDirective} from './card/card-toggle.directive';\r\nimport {ModalBasicComponent} from './modal-basic/modal-basic.component';\r\nimport {MessageBoxComponent} from './message-box/message-box.component';\r\nimport {DateRangePickerComponent} from './date-range-picker/date-range-picker.component';\r\nimport {GridFooterComponent} from './grid-footer/grid-footer.component';\r\nimport {SpinnerComponent} from './spinner/spinner.component';\r\nimport {ClickOutsideModule} from 'ng-click-outside';\r\nimport { TrimOnBlurModule } from 'ng2-trim-on-blur';\r\nimport { NgSelectModule, NgSelectComponent } from '@ng-select/ng-select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\nimport { NgxMaskModule, IConfig } from 'ngx-mask'; //needed for textbox mask\r\nimport { InputTrimDirective } from './directives/input-trim.directive';\r\nimport { DateInputDirective } from './directives/input-date.directive';\r\n\r\nexport const options: Partial | (() => Partial) = {}; //needed for textbox mask\r\n\r\nconst DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n suppressScrollX: true\r\n};\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n PerfectScrollbarModule,\r\n ClickOutsideModule,\r\n AgGridModule.withComponents([]),\r\n NgxMaskModule.forRoot(options), //needed for textbox mask\r\n FormsModule,\r\n NgSelectModule\r\n ],\r\n exports: [\r\n AccordionAnchorDirective,\r\n AccordionLinkDirective,\r\n AccordionDirective,\r\n CardToggleDirective,\r\n InputTrimDirective,\r\n DateInputDirective,\r\n HttpClientModule,\r\n PerfectScrollbarModule,\r\n TitleComponent,\r\n CardComponent,\r\n ModalBasicComponent,\r\n MessageBoxComponent,\r\n DateRangePickerComponent,\r\n AgGridModule,\r\n NgxMaskModule,\r\n GridFooterComponent,\r\n SpinnerComponent,\r\n ClickOutsideModule,\r\n TrimOnBlurModule,\r\n NgSelectModule,\r\n FormsModule\r\n ],\r\n declarations: [\r\n AccordionAnchorDirective,\r\n AccordionLinkDirective,\r\n AccordionDirective,\r\n CardToggleDirective,\r\n InputTrimDirective,\r\n DateInputDirective,\r\n TitleComponent,\r\n CardComponent,\r\n ModalBasicComponent,\r\n MessageBoxComponent,\r\n DateRangePickerComponent,\r\n GridFooterComponent,\r\n SpinnerComponent\r\n ],\r\n providers: [\r\n {\r\n provide: PERFECT_SCROLLBAR_CONFIG,\r\n useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG\r\n }\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","//???This spinner came with the template but didn't really seem to work. I (Gilmer) changed the HTML and CSS to be this spinner: https://codepen.io/WebSonata/pen/bRaONB. I then had to pass the LoaderService into this class. I don't think we need anything to do with Spinkit, which is the spinner that came with the template.\r\nimport { Component, Input, OnDestroy, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { LoaderService } from '../web-service/loader.service';\r\n\r\n@Component({\r\n selector: 'app-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: [\r\n './spinner.component.scss',\r\n ],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SpinnerComponent implements OnDestroy {\r\n public isSpinnerVisible = true;\r\n constructor(public loaderService: LoaderService, private router: Router, @Inject(DOCUMENT) private document: Document) {\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationStart) {\r\n this.isSpinnerVisible = true;\r\n } else if ( event instanceof NavigationEnd || event instanceof NavigationCancel || event instanceof NavigationError) {\r\n this.isSpinnerVisible = false;\r\n }\r\n }, () => {\r\n this.isSpinnerVisible = false;\r\n });\r\n\r\n setInterval(() => { }, 1000);//Kludge. I was trying to figure out why (when the browser is a mobile size) when you navigate from the Projects page to the Project Overview page, it would often sit there churning for many seconds before showing the PO page. It appears the problem is with navigating to the page, not in the API calls or rendering the HTML. So I put a timer interval function here to write out the value of isSpinnerVisible to the log once a second. When I did that, it stopped taking so long to navigate. So then I removed writing to the log, and left a timer function that does nothing, and it sill seemed to help.\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.isSpinnerVisible = false;\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n","//helper functions to save stuff in sessionStorage and retrieve it later\r\nexport class SessionSave {\r\n public static readonly receivingAccountsKey: string = \"ReceivingAccounts\";\r\n public static readonly defaultDesignationKey: string = \"defaultDesignationKey\";\r\n public static readonly pledgesFilterKey: string = \"PledgesFilter\";\r\n public static readonly reportsGivingFilterKey: string = \"ReportsGivingFilter\";\r\n public static readonly reportsDevFilterKey: string = \"ReportsDevFilter\";\r\n public static readonly reportsPledgesFilterKey: string = \"ReportsPledgesFilter\";\r\n public static readonly depositsFilterKey: string = \"DepositsFilter\";\r\n\r\n //This will save an object in sessionStorage. \r\n static save(key: string, data: object) {\r\n sessionStorage[key] = JSON.stringify(data);\r\n }\r\n //This function will get an object out of sessionStorage and (if it exists) copy all of its properties to the \"data\" parameter passed in. If nothing is found in sessionStorage, do nothing. The \"data\" object should already exist before being passed in.\r\n static get(key: string, data: object) {\r\n const str: string = sessionStorage[key];\r\n\r\n if (str && str != 'null' && str != 'undefined') {\r\n const newData: object = JSON.parse(str);\r\n for (var prop in newData)\r\n data[prop] = newData[prop];\r\n }\r\n return data;\r\n }\r\n\r\n //This function will get an object out of sessionStorage and (if it exists) copy all of its properties to the \"data\" parameter passed in. It's designed for objects that have filter data. If nothing is found in sessionStorage, initalize the properties of the \"data\" param: it's assumed that the filter object might have properties for toDate and fromDate, which are initialized to today (toDate) and a month ago (fromDate). All other properties are set to blank. The \"data\" object should already exist with all its properties before being passed in.\r\n static filterGet(key: string, data: object, monthsBackEndDateDefault: number = 1) {\r\n const str: string = sessionStorage[key];\r\n\r\n if (str && str != 'null' && str != 'undefined') {\r\n const newData: object = JSON.parse(str);\r\n for (var prop in data)\r\n data[prop] = newData[prop];\r\n for (var prop in newData)\r\n data[prop] = newData[prop];\r\n }\r\n else {\r\n let dateFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit' } as const;\r\n for (var prop in data) {\r\n if (prop == \"toDate\") {\r\n data[prop] = new Date().toLocaleString(\"en-US\", dateFormatOptions);\r\n }\r\n else if (prop == \"fromDate\") {\r\n var d = new Date();\r\n d.setMonth(d.getMonth() - monthsBackEndDateDefault);\r\n data[prop] = d.toLocaleString(\"en-US\", dateFormatOptions);\r\n }\r\n else if (typeof data[prop] === \"boolean\") {\r\n data[prop] = false;\r\n }\r\n else {\r\n data[prop] = \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n //This will get an array out of sessionStorage and (if it exists) copy all of its objects to the \"arr\" parameter passed in. If it doesn't exist, nothing will happen to \"arr\". The \"arr\" should already exist before being passed in.\r\n static arrayGet(key: string, arr: any[]) {\r\n const str: string = sessionStorage[key];\r\n\r\n if (str && str != 'null' && str != 'undefined') {\r\n const newData: any[] = JSON.parse(str);\r\n arr.length = 0;\r\n for (let i = 0; i < newData.length; ++i) {\r\n arr.push(newData[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n//helper functions to format things, validate things, and compare things\r\nexport class Formatter {\r\n //This is used for grid column sorting. If two number strings are passed in, this will convert them to numbers and compare them.\r\n static stringNumberComparator(valueA: string, valueB: string, nodeA, nodeB, isInverted) {\r\n let a: number = 0;\r\n let b: number = 0;\r\n //If the number string is in parentheses, it means it's negative, so we take off the parentheses and add a minus sign.\r\n if (valueA && valueA != '') {\r\n if (valueA.substring(0, 1) == '(')\r\n valueA = '-' + valueA.substring(1, valueA.length - 1);\r\n a = Formatter.toNumber(valueA);\r\n }\r\n if (valueB && valueB != '') {\r\n if (valueB.substring(0, 1) == '(')\r\n valueB = '-' + valueB.substring(1, valueB.length - 1);\r\n b = Formatter.toNumber(valueB);\r\n }\r\n return a - b;\r\n }\r\n\r\n //This is used for grid column sorting. If two date strings are passed in, this will convert them to dates and compare them.\r\n static stringDateComparator(valueA: string, valueB: string, nodeA, nodeB, isInverted) {\r\n let a: number = 0;\r\n let b: number = 0;\r\n //Date.parse() returns the number of ms since Jan 1 1970.\r\n if (valueA && valueA != '')\r\n a = Date.parse(valueA);\r\n if (valueB && valueB != '')\r\n b = Date.parse(valueB);\r\n return a - b;\r\n }\r\n\r\n //This will take a date object or date string and convert it into a date/time string that is consistent throughout the system. This function is often used as the cellRenderer for a grid column; in this case the object passed in is of type ICellRendererParams, so we have to use param.value as the date string.\r\n static toDateTime(param): string {\r\n if (param && param.column)\r\n param = param.value; // param is of type ICellRendererParams\r\n\r\n if (!param || (typeof param == \"string\" && param.trim() == \"\"))\r\n return \"\";\r\n\r\n //This kludge is for the weird case where param is a string in the format yyyy-mm-dd. In this case, when you create a Date object from the string, it assumes the date is at time 00:00 UTC, which would put it the day before in local time. So we have to add a time of noon on it so that it doesn't do this. Otherwise, I was having problems where a date passed in like \"2020-1-2\" was being returned as 1/1/2020. This problem doesn't occur if the param passed in is in the format mm/dd/yyyy.\r\n if (typeof param == \"string\" && param.indexOf('-') == 4 && param.length < 11)\r\n param += 'T12:00:00';\r\n\r\n let options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric', hour12: true } as const;\r\n return (new Date(param)).toLocaleString(\"en-US\", options);\r\n }\r\n\r\n //This will take a date object or date string and convert it into a date that is consistent throughout the system. This function is often used as the cellRenderer for a grid column; in this case the object passed in is of type ICellRendererParams, so we have to use param.value as the date string.\r\n static toDate(param): string {\r\n if (param && param.column)\r\n param = param.value; // param is of type ICellRendererParams\r\n\r\n if (!param || (typeof param == \"string\" && param.trim() == \"\"))\r\n return \"\";\r\n\r\n //This kludge is for the weird case where param is a string in the format yyyy-mm-dd. In this case, when you create a Date object from the string, it assumes the date is at time 00:00 UTC, which would put it the day before in local time. So we have to add a time of noon on it so that it doesn't do this. Otherwise, I was having problems where a date passed in like \"2020-1-2\" was being returned as 1/1/2020. This problem doesn't occur if the param passed in is in the format mm/dd/yyyy.\r\n if (typeof param == \"string\" && param.indexOf('-') == 4 && param.length < 11)\r\n param += 'T12:00:00';\r\n\r\n let options = { year: 'numeric', month: '2-digit', day: '2-digit' } as const;\r\n return (new Date(param)).toLocaleString(\"en-US\", options);\r\n }\r\n\r\n // Convert ISO 8601 formatted date in UTC (as string) to local datetime\r\n // String returned -> this.toDateTime\r\n static dateToLocalTime(param: string): string {\r\n var d = new Date(param + \"Z\"); // Z indicates the parameter is in UTC\r\n var str = d.toString();\r\n return this.toDateTime(str);\r\n }\r\n\r\n // Convert ISO 8601 formatted date in UTC (as string) to local date\r\n static dateToLocalDate(param: string): string {\r\n var d = new Date(param + \"Z\");\r\n return this.toDate(d.toString());\r\n }\r\n\r\n //The reason for this is because if the string has commas in it (e.g. \"23,000\"), the normal JS conversion functions can't handle it.\r\n static toNumber(param: any): number {\r\n if (typeof param != \"string\")\r\n return param;\r\n if (param === null || param === undefined)\r\n return null;\r\n //Remove anything that isn't a digit, decimal point, or minus sign (-):\r\n return +param.replace(/[^\\d\\.\\-]/g, \"\");\r\n }\r\n\r\n //This will take a string and put a dollar sign at the front and add commas to large numbers. Will not add dollar sign if string is blank. If it's negative, it will surround with parens instead of negative sign.\r\n static toCurrency(param, addDollarSign: boolean = false) {\r\n if (param && param.column)\r\n param = param.value; // param is of type ICellRendererParams\r\n\r\n if (param === null || param === undefined || (typeof param == \"string\" && param.trim() == \"\"))\r\n return \"\";\r\n\r\n if (typeof param == \"string\")\r\n param = Formatter.toNumber(param); //convert to number\r\n\r\n //If the number is negative, make it positive so the minus sign won't display, and put it inside parantheses\r\n const prefix: string = (param < 0 ? \"(\" : \"\");\r\n const suffix: string = (param < 0 ? \")\" : \"\");\r\n\r\n if (addDollarSign)\r\n return \"$\" + prefix + Math.abs(param).toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + suffix;\r\n else\r\n return prefix + Math.abs(param).toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + suffix;\r\n }\r\n\r\n //This will take a string and add commas to large numbers. If it's negative, it will surround with parens instead of negative sign.\r\n static addCommas(param) {\r\n if (param && param.column)\r\n param = param.value; // param is of type ICellRendererParams\r\n\r\n if (param === null || param === undefined || (typeof param == \"string\" && param.trim() == \"\"))\r\n return \"\";\r\n\r\n if (typeof param == \"string\")\r\n param = Formatter.toNumber(param); //convert to number\r\n\r\n //If the number is negative, make it positive so the minus sign won't display, and put it inside parantheses\r\n const prefix: string = (param < 0 ? \"(\" : \"\");\r\n const suffix: string = (param < 0 ? \")\" : \"\");\r\n\r\n return prefix + Math.abs(param).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + suffix;\r\n }\r\n\r\n //returns true only if the passed-in string is a valid email format.\r\n static validateEmail(str): boolean {\r\n if (!str)\r\n return false;\r\n var pattern = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return pattern.test(str.toLowerCase());\r\n }\r\n\r\n //returns true only if the passed-in string is a valid phone number format ###-###-#### or (###) ###-####.\r\n static validatePhone(str): boolean {\r\n if (!str)\r\n return false;\r\n var pattern = /(?:\\(\\d{3}\\)|\\d{3})[- ]?\\d{3}[- ]?\\d{4}/;\r\n return pattern.test(str.toLowerCase());\r\n }\r\n\r\n //returns true only if the passed-in string is a string with length 5 or 6 and has all alphanumeric (supports Canadian as well as US)\r\n static validateZip(str): boolean {\r\n if (!str)\r\n return false;\r\n if (str.length != 5 && str.length != 10)\r\n return false;\r\n var pattern = /^\\d{5}(?:[- ]?\\d{4})?$/i;\r\n return pattern.test(str.toLowerCase());\r\n }\r\n\r\n //returns true only if the passed-in string is a valid date format.\r\n //There are limits on how good this function is. \r\n static validateDate(str: string): boolean {\r\n if (!str || isNaN(Date.parse(str)))\r\n return false;\r\n if (typeof str != \"string\")\r\n return true;\r\n let arr: string[];\r\n if (str.indexOf(\"/\") != -1)\r\n arr = str.split(\"/\");\r\n else if (str.indexOf(\"-\") != -1)\r\n arr = str.split(\"-\");\r\n else\r\n return false;\r\n\r\n if (arr.length == 3) { //only accept years greater than 1900. But the date could be separated with either dashes or slashes, and the year could be either the first or third token in the string.\r\n let year: string;\r\n if (arr[0].length === 4)\r\n year = arr[0];\r\n if (arr[2].length === 4)\r\n year = arr[2];\r\n if (parseInt(year) > 1900)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //returns true if they are the same, false if different. This is not a deep comparison. The properties of the objects are compared with ==\r\n static compareArraysOfSimpleObjects(arr1, arr2) {\r\n if (arr1.length !== arr2.length)\r\n return false;\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (!Formatter.compareSimpleObjects(arr1[i], arr2[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n //returns true if they are the same, false if different. This is not a deep comparison. The properties of the objects are compared with ==\r\n static compareSimpleObjects(obj1, obj2) {\r\n for (var prop in obj1) {\r\n if (obj1[prop] != obj2[prop])\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n static caseInsensitiveComparator(valueA, valueB) {\r\n if(valueA == null)\r\n valueA = '';\r\n if(valueB == null)\r\n valueB = '';\r\n return valueA.toLowerCase().localeCompare(valueB.toLowerCase())\r\n }\r\n\r\n}\r\n\r\n//This class is used to fix the issue that when you are keying in a date in a Chrome date input (not using the dropdown picker), and get to the year, it handles it completely wrong. If the year is highlighted and you try to type in \"2020\", it will clear out the entire input. So this class will attach handlers to the keyup and keydown events for any date inputs to keep track of user input and overwrite the input value if needed. The algorithm will take the old year, shift all the digits to the left (so that the leftmost digit is gone) and put the newest key pressed on the right. So if the old year is 1234, and you type in 5, we'll write in a new year of 2345.\r\nexport class ChromeDateFixer {\r\n static lastDateValue: string = '';\r\n\r\n static initFixer() {\r\n //This problem shows up on Chrome and Edge (which uses the Chrome engine), but not FF. Since both of them have the word \"Chrome\" in their userAgent, we can use it to decide whether or not to attach the event handlers to override the behavior\r\n if (navigator.userAgent.indexOf(\"Chrome\") != -1) {\r\n $('input[type=\"date\"]').each(function () {\r\n //We put a custom attribute on the inputs when we add the handlers to them, and then check to make sure that attribute isn't there before adding them. This is in case this method initFixer is called twice, we don't add the handlers twice.\r\n if (!this[\"alreadyHasHandlersAdded\"]) {\r\n this[\"alreadyHasHandlersAdded\"] = true;\r\n //This remembers the value of the date input before the key is pressed\r\n $(this).keydown(function (event) {\r\n ChromeDateFixer.lastDateValue = (event.target).value;\r\n });\r\n //This looks at the value of the date input after the key is pressed. When you get the value from the input, it has the format yyyy-mm-dd. So we want to know if the key press affected the year or some other part of the date (month or day). The wrong behavior only affects the year. So if the user is changing the month or day, we don't do overrid anything. So we look at the first four characters of the value to see if it's different than before the key press. If it is, then the user must be changing the year. \r\n $(this).keyup(function (event) {\r\n let input: HTMLInputElement = event.target;\r\n if (ChromeDateFixer.lastDateValue != \"\" && ChromeDateFixer.lastDateValue.substr(0, 4) != input.value.substr(0, 4) && !isNaN(+event.key)) { //We make sure the key pressed is a number. It's possible for the user to change the date with the up/down arrows, but we want to ingore that.\r\n //User is changing the year, so then we caculate what the year should be, given the old year and the key pressed. Then we combine that with the month/day of the value.\r\n let newYear = ChromeDateFixer.lastDateValue.substr(1, 3) + event.key;\r\n input.value = newYear + ChromeDateFixer.lastDateValue.substr(4, 6);\r\n //This will force Angular to update the model data source with the new value.\r\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","//this class intercepts every web service API call to do a few things, like:\r\n// - tell the LoaderService that an API call is active, which the spinner component will use to show the spinner.\r\n// - get the security token from every response header and save it in sessionStorage.\r\n// - put the security token into every request header.\r\n// - catch connection errors from the server and handle them consistently. We pop up a message box for the user with the error. But if the error is a 401, then we automatically log out the user because it's a security error. The most likely cause of a security error is that it's been too long since the user has accessed the API, so their security token has expired, which is cause for auto-logout.\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpErrorResponse, HttpResponse, HttpRequest, HttpHandler, HttpInterceptor } from '@angular/common/http';\r\nimport { LoaderService } from './loader.service';\r\nimport { tap, catchError, finalize } from 'rxjs/operators';\r\nimport { throwError } from 'rxjs';\r\nimport { MessageBoxComponent } from '../message-box/message-box.component';\r\n\r\ndeclare var MatchingUiVersion: string; // This is a copy of a variable declared in config.js\r\n\r\n@Injectable()\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n private totalRequests: number = 0;\r\n\r\n constructor(private loaderService: LoaderService) { }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler) {\r\n //Gilmer: I looked at a bunch of different examples of how to do this online, and they were all a bit different. This one made the most sense to me. You have the totalRequests variable in case there's more than one at a time. You increase totalRequests when the request is generated and decrease it when the web call is finished.\r\n //Gilmer: A number of examples I looked at said you'd know when to hide the spinner because the response comes back or there's an error. But another example I saw showed that you can do it in the finalize. That's why there's a decreaseRequests() call in two places that are commented out in case we need to go back to that.\r\n this.totalRequests++;\r\n this.loaderService.isLoading = true;\r\n //To add a header for the security token to the request, we have to clone the request object because it is immutable. See https://angular.io/guide/http#immutability. We store the validation token in SessionStorage. If it's there, clone the request and add the token to the headers. If it's not there (e.g. we are on the login page so we don't have a token yet), then just use the request without cloning.\r\n let clonedRequest: HttpRequest;\r\n const valToken: string = sessionStorage.validationToken;\r\n if (valToken && valToken.length > 0)\r\n clonedRequest = request.clone({ setHeaders: { ValidationToken: valToken } });\r\n else\r\n clonedRequest = request;\r\n\r\n return next.handle(clonedRequest).pipe(\r\n tap(res => {\r\n if (res instanceof HttpResponse) {\r\n // If there's a security token in the response headers, save it in sessionStorage to pass back with the next request.\r\n const token: string = res.headers.get(\"ValidationToken\");\r\n sessionStorage.lastWebApiCall = new Date().getTime();\r\n\r\n if (token)\r\n sessionStorage.validationToken = token;\r\n //this.decreaseRequests();\r\n\r\n // We get a version string from the API; it's take from web.config and sent back to the UI in the response header. The UI uses this to compare to its own version string in its config file (MatchingUiVersion). Whenever we do a new build, both of these should be updated to match each other. It doesn't matter what they are as long as they are the same. I suggest \"1\", then \"2\", etc. The reason for doing this is if someone is using the website, and we do an udpate, their UI will no longer match with the API. The UI will notice the mismatch and prompt the user to update their UI.\r\n const version: string = res.headers.get(\"MatchingUiVersion\");\r\n if (MessageBoxComponent.staticInstance && version && version != MatchingUiVersion) {\r\n //We want to ask the user if they want to refresh their browser. If they answer yes, we'll trigger the refresh. But we don't want to ask them with every single API call because it's possible they are in the middle of doing something and want to wait a few minutes. So if they say no, we won't ask them again for 1 minute. We keep track of the last time we asked with sessionStorage.timeAskedUserQuestion\r\n if (!sessionStorage.timeAskedUserQuestion || (new Date().getTime() - parseInt(sessionStorage.timeAskedUserQuestion)) / 60000 > 1) { //divide by 60000 to convert from ms to minutes\r\n sessionStorage.timeAskedUserQuestion = new Date().getTime(); //converts the date to milliseconds\r\n\r\n let msg: string = `There has been an important update to the BuildSAGE system. You need to refresh your browser, clearing the cache for this site, to get the latest version. Would you like to do this now? Clicking \"Yes\" will attempt to trigger the refresh. `;\r\n if (navigator.platform.toLowerCase().indexOf(\"win\") != -1) { //windows\r\n msg += \"You can also press CTRL-F5 to trigger the refresh.\";\r\n }\r\n else if (navigator.platform.toLowerCase().indexOf(\"mac\") != -1) { //mac\r\n if (navigator.userAgent.toLowerCase().indexOf(\"chrome\") != -1)\r\n msg += \"You can also press Command, Shift and 'R' to trigger the refresh.\"; //Chrome\r\n else\r\n msg += \"You can also press Command and 'E' to trigger the refresh.\"; //Safari\r\n }\r\n else if (navigator.platform.indexOf(\"iP\") != -1) { //ios\r\n if (navigator.userAgent.toLowerCase().indexOf(\"crios\") != -1) //Chrome\r\n msg += \"For Chrome on iOS: Tap More, tap History, tap Clear Browsing Data, and clear 'Cookies, Site Data.'\"\r\n else //Safari, hopefully\r\n msg += \"For Safari on iOS: Open the Settings app, tap Safari, scroll down and tap Advanced, tap Website Data, tap Edit in the upper-right corner, tap BuildSage.com to delete the data from this site.\";\r\n }\r\n\r\n MessageBoxComponent.staticInstance.show(\"Warning\", msg, true,\r\n () => {\r\n //We trigger a refresh by adding a random string to the query string, which will reload the page, and should get all new files\r\n let randomParam: string = '' + Math.floor(Math.random() * 100000) + 1000;\r\n window.location.href = window.location.href.split('?')[0] + '?' + randomParam + '=reload'\r\n });\r\n }\r\n }\r\n }\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n let isAuthorizationError: boolean = false;\r\n //this.decreaseRequests();\r\n let errMsg = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // Client Side Error (???Gilmer: I copied this from somewhere and am not sure it's right)\r\n errMsg = `Client Error: ${error.error.message}`;\r\n }\r\n else {\r\n // Server Side Error\r\n errMsg = `Server Error. Code: ${error.status}, Message: ${error.message}`;\r\n if (error.error && error.error.message)\r\n errMsg += ' ---- Inner Error: ' + error.error.message;\r\n if (error.status == 401) {\r\n console.log(\"Auto log out user because an API call had an authentication error.\");\r\n isAuthorizationError = true;\r\n sessionStorage.clear();\r\n sessionStorage.logoutReason = \"AuthorizationError\";\r\n window.location.assign(document.getElementsByTagName('base')[0].href + \"login\");\r\n }\r\n }\r\n //???I don't know if this is what we want to do.\r\n if (!isAuthorizationError) {\r\n if (MessageBoxComponent.staticInstance)\r\n MessageBoxComponent.staticInstance.show(\"Error connecting to the server\", errMsg, false);\r\n else\r\n console.log(errMsg);\r\n }\r\n return throwError(errMsg);\r\n }),\r\n finalize(() => {\r\n this.decreaseRequests();\r\n })\r\n );\r\n }\r\n\r\n private decreaseRequests() {\r\n this.totalRequests--;\r\n if (this.totalRequests === 0) {\r\n this.loaderService.isLoading = false;\r\n }\r\n }\r\n}\r\n","//This is a simple class that gets shared between the interceptor and the spinner component, so the interceptor can tell the spinner if a web service call is going.\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoaderService {\r\n public isLoading: boolean = false;\r\n\r\n constructor() {}\r\n}\r\n\r\n","// This file includes everything needed to call the server's web service API methods. The functions here all start with a word that's like a namespace and then an underscore, which denotes the controller on the server. For example, authentication_ValidateUser will call the API method ValidateUser that is part of the Authentication controller.\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {MessageBoxComponent} from '../message-box/message-box.component';\r\n\r\n// For the API URL, we either get it from config.js or we get it passed into the constructor as the baseURL. Currently it's the former, as the latter only works in certain circumstances (see comment below about baseURL).\r\ndeclare var webApiBaseUrl: string; // This tells the compiler that it's a global variable coming from another file. In our case, it's coming from config.js.\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WebService {\r\n // Only use the baseURL param if the baseURL for the web API is the same as for the UI (i.e. index.html). The baseURL string passed in comes from main.ts, which grabs the URL from the element in index.html.\r\n constructor(private http: HttpClient, @Inject('BASE_URL') baseURL: string) {\r\n // webApiBaseUrl = baseURL;\r\n if (!webApiBaseUrl) {\r\n alert('config.js not loaded');\r\n }\r\n }\r\n\r\n // Authentication Methods\r\n authentication_ValidateUser(email: string, password: string, timeZoneOffsetMinutes: number, browserGuid: string, passcode: string, registerBrowser: boolean, passcodeDelivery: string): Observable {\r\n const requestParams = new ValidateUserRequest(email, password, timeZoneOffsetMinutes, browserGuid, passcode, registerBrowser, passcodeDelivery);\r\n return this.http.post(webApiBaseUrl + 'api/Authentication/ValidateUser', requestParams);\r\n }\r\n\r\n authentication_DeleteUserAuth(browserGuid: string): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Authentication/DeleteUserAuth?browserGuid=' + browserGuid, null);\r\n }\r\n\r\n // This will send a message to the server that the user is logging out. We use native AJAX support rather than the typcial Anular method because I found that using Angular made the browser pause for a second before navigating to the login page.\r\n authentication_LogUserLogout() {\r\n const Http = new XMLHttpRequest();\r\n const url = webApiBaseUrl + 'api/Authentication/LogUserLogout?userNo=' + sessionStorage.userNo;\r\n Http.open('GET', url);\r\n Http.send();\r\n }\r\n\r\n // Report Methods\r\n reports_getContractorsGraph(request: ContractorRequest):Observable{\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GrowthStatisticsContractors/', request);\r\n }\r\n\r\n reports_getHomeownersGraph(request: HomeownerRequest):Observable{\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GrowthStatisticsHomeowners/', request);\r\n }\r\n\r\n reports_getProjectsGraph(request: ProjectGraphRequest):Observable{\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GrowthStatisticsProjects/', request);\r\n }\r\n\r\n reports_getContractsSignedGraph(request: ContractsSignedRequest):Observable{\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GrowthStatisticsContractsSigned/', request);\r\n }\r\n\r\n reports_getProjectStages(request: ProjectStagesRequest):Observable{\r\n return this.http.post(webApiBaseUrl + 'api/Reports/StageBreakdown/', request);\r\n }\r\n\r\n reports_getProjectStatistics(request: ProjectStatisticsRequest): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GetProjectStatistics/', request);\r\n }\r\n\r\n reports_getBudgeting(request: BudgetingRequest): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GetBudgeting/', request);\r\n }\r\n\r\n reports_GetKpiDashboard(): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Reports/GetKpiDashboard/', null);\r\n }\r\n\r\n users_getUserList(userType: string, includeDisabled = true): Observable {\r\n return this.http.get(webApiBaseUrl + `api/Users/GetUserList?userType=${userType}&includeDisabled=${includeDisabled}`);\r\n }\r\n\r\n // User Methods\r\n users_SendEmailToResetPassword(email: string, urlBase: string): Observable {\r\n const requestParams = new ResetPasswordRequest(email, urlBase);\r\n return this.http.post(webApiBaseUrl + 'api/Users/SendEmailToResetPassword', requestParams);\r\n }\r\n\r\n users_GetUsersByType(roleNo: number, userNo = null): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Users/GetUsersByType?roleNo=${roleNo}&serviceAreaNos=${sessionStorage.serviceAreaNos}&userNo=${userNo}`, null);\r\n }\r\n\r\n users_GetUser(): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/GetUser', null);\r\n }\r\n\r\n users_AddUser(user: User): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/AddUser', user);\r\n }\r\n\r\n users_EditUser(user: User): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/EditUser', user);\r\n }\r\n\r\n users_DeleteUser(userNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/DeleteUser?userNo=' + userNo, null);\r\n }\r\n\r\n users_EditContractor(contractor: Contractor, newFiles: object[]): Observable {\r\n let formData = new FormData();\r\n formData.append('Contractor', JSON.stringify(contractor));\r\n newFiles.forEach(doc => {\r\n const file: File = doc;\r\n formData.append(JSON.stringify(doc), file, file.name);\r\n })\r\n return this.http.post(webApiBaseUrl + 'api/Users/EditContractor', formData);\r\n }\r\n\r\n users_ChangePasswordWithoutOldPassword(email: string, newPassword: string, guid: string): Observable {\r\n const requestParams = new ChangePasswordRequest(email, '', newPassword);\r\n return this.http.post(webApiBaseUrl + 'api/Users/ChangePasswordWithoutOldPassword?guid=' + guid, requestParams);\r\n }\r\n\r\n users_ChangePassword(email: string, oldPassword: string, newPassword: string): Observable {\r\n const requestParams = new ChangePasswordRequest(email, oldPassword, newPassword);\r\n return this.http.post(webApiBaseUrl + 'api/Users/ChangePassword', requestParams);\r\n }\r\n\r\n users_SendReferenceEmail(applicantName: string, userNo: number, referenceName: string, referenceEmail: string, referenceNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/SendReferenceEmail?applicantName=' + applicantName + '&userNo=' + userNo + '&referenceName=' + referenceName + '&referenceEmail=' + referenceEmail + '&referenceNo=' + referenceNo, null);\r\n }\r\n\r\n users_SendEmail(emailType: number, emailAddress: string, emailSubject: string = \"\", emailBody: string = \"\"): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Users/SendEmail?emailType=' + emailType + '&emailAddress=' + emailAddress + '&emailSubject=' + emailSubject, emailBody);\r\n }\r\n\r\n // Project Methods\r\n projects_GetProjects(includeTasks: boolean, userNoHomeowner: number = -1, userNoAdmin: number = -1, userNoContractor: number = -1): Observable {\r\n // Find a way to get the serviceArea number\r\n // I pull the direct array position because it is now coming in differently\r\n let url = webApiBaseUrl + `api/Projects/GetProjectsAndTasks?includeTasks=${includeTasks}&serviceAreaNos=${sessionStorage.serviceAreaNos}`;\r\n if (userNoHomeowner != -1) {\r\n url += '&UserNoHomeowner=' + userNoHomeowner;\r\n } else if (userNoAdmin != -1) {\r\n url += '&UserNoAdmin=' + userNoAdmin;\r\n } else if (userNoContractor != -1) {\r\n url += '&UserNoContractor=' + userNoContractor;\r\n }\r\n return this.http.post(url, null);\r\n }\r\n\r\n projects_GetProject(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Projects/GetProject?projectNo=' + projectNo, null);\r\n }\r\n\r\n projects_SaveProjectDetails(project: Project, didStatusChange = false): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Projects/SaveProjectDetails?didStatusChange=${didStatusChange}`, project);\r\n }\r\n\r\n projects_DeleteProject(project: Project): Observable {\r\n project.projectStatusNo = ProjectStatus.Deleted;\r\n return this.http.post(webApiBaseUrl + 'api/Projects/SaveProjectDetails?didStatusChange=true', project);\r\n }\r\n\r\n projects_SaveProjectAndUserAnswers(project: Project, files: object): Observable {\r\n var formData = new FormData();\r\n formData.append('Project', JSON.stringify(project));\r\n for (const doc in files) {\r\n if (files[doc]) {\r\n const file: File = files[doc];\r\n formData.append(doc, file, file.name);\r\n }\r\n }\r\n\r\n return this.http.post(webApiBaseUrl + 'api/Projects/SaveProjectAndUserAnswers', formData);\r\n }\r\n\r\n projects_SaveScopeOfWorkJobs(scopeOfWorkJobs: ScopeOfWorkJob[]): Observable {\r\n const param = { scopeOfWorkJobs: scopeOfWorkJobs};\r\n return this.http.post(webApiBaseUrl + 'api/Projects/SaveScopeOfWorkJobs', param);\r\n }\r\n\r\n projects_deleteScopeOfWorkJob(ScopeOfWorkJobNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Projects/DeleteScopeOfWorkJob?ScopeOfWorkJobNo=' + ScopeOfWorkJobNo, null);\r\n }\r\n\r\n projects_SaveRoom(room: Room, img: object): Observable {\r\n const formData = new FormData();\r\n formData.append(\"Room\", JSON.stringify(room));\r\n // something here throws an error\r\n if (img != null) {\r\n const file: File = img;\r\n formData.append('img', file, file.name);\r\n }\r\n return this.http.post(webApiBaseUrl + `api/Projects/SaveRoom`, formData);\r\n }\r\n\r\n projects_deleteRoom(roomNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Projects/DeleteRoom?roomNo=' + roomNo, null);\r\n }\r\n\r\n projects_GetUserDecisionTree(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Projects/GetUserDecisionTree?projectNo=' + projectNo, null);\r\n }\r\n\r\n // Get contract PDF\r\n // tslint:disable-next-line:max-line-length\r\n projects_GetContract(responseContentsInline: boolean, projectNo: number, userNoHomeowner: number, userNoContractor: number, saveDocument: boolean): Observable {\r\n const url = webApiBaseUrl + `api/Projects/GetContract?responseContentsInline=${responseContentsInline}&projectNo=${projectNo}&userNoHomeowner=${userNoHomeowner}&userNoContractor=${userNoContractor}&saveDocument=${saveDocument}`;\r\n // @ts-ignore\r\n return this.http.post(url, null, {responseType: 'blob'});\r\n }\r\n\r\n projects_SaveProjectStatus(projectNo: number, projectStatusNo: number): Observable {\r\n // tslint:disable-next-line:max-line-length\r\n return this.http.post(webApiBaseUrl + 'api/Projects/SaveProjectStatus?projectNo=' + projectNo + '&projectStatusNo=' + projectStatusNo, null);\r\n }\r\n\r\n // Inspirations methods\r\n inspirations_GetInspirations(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Inspiration/GetInspirations?projectNo=' + projectNo, null);\r\n }\r\n\r\n inspirations_SaveInspiration(data: FormData): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Inspiration/SaveInspiration', data);\r\n }\r\n\r\n inspirations_DeleteInspiration(InspirationNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Inspiration/DeleteInspiration?InspirationNo=' + InspirationNo, null);\r\n }\r\n\r\n // Notes Methods\r\n notes_GetNotes(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Notes/GetNotes?projectNo=' + projectNo, null);\r\n }\r\n\r\n notes_SaveNote(note: object, newFiles: object): Observable {\r\n const formData = new FormData();\r\n formData.append('Note', JSON.stringify(note));\r\n for (const f in newFiles) {\r\n const file: File = newFiles[f];\r\n formData.append(f, file, file.name);\r\n }\r\n return this.http.post(webApiBaseUrl + 'api/Notes/SaveNote', formData);\r\n }\r\n\r\n notes_DeleteNote(noteNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Notes/DeleteNote?noteNo=' + noteNo, null);\r\n }\r\n\r\n // Important Docs Methods\r\n importantDocuments_GetImportantDocuments(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/ImportantDocuments/GetImportantDocuments?projectNo=' + projectNo, null);\r\n }\r\n\r\n // Important Docs Types\r\n importantDocuments_GetImportantDocumentsTypes(): Observable {\r\n return this.http.get(webApiBaseUrl + 'api/ImportantDocuments/GetImportantDocumentTypes');\r\n }\r\n\r\n importantDocuments_SaveImportantDocument(importantDocument: ImportantDocument, newFiles: object): Observable {\r\n const formData = new FormData();\r\n formData.append('ImportantDocument', JSON.stringify(importantDocument));\r\n for (const doc in newFiles) {\r\n const file: File = newFiles[doc];\r\n formData.append(doc, file, file.name);\r\n }\r\n return this.http.post(webApiBaseUrl + `api/ImportantDocuments/SaveImportantDocument`, formData);\r\n }\r\n\r\n importantDocuments_DeleteImportantDocument(importantDocumentNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + `api/ImportantDocuments/DeleteImportantDocument?importantDocumentNo=` + importantDocumentNo, null);\r\n }\r\n\r\n // Milestones methods\r\n milestones_GetMilestones(projectNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Milestones/GetMilestones?projectNo=' + projectNo, null);\r\n }\r\n\r\n milestones_SaveMilestone(milestone: Milestone): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Milestones/SaveMilestone', milestone);\r\n }\r\n\r\n milestones_DeleteMilestone(milestoneNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Milestones/DeleteMilestone?milestoneNo=' + milestoneNo , null);\r\n }\r\n\r\n // Visits methods\r\n milestones_DeleteVisit(visitNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Milestones/DeleteVisit?visitNo=' + visitNo, null);\r\n }\r\n\r\n // Notifications methods\r\n notifications_GetNotificationsByUser(userNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Notifications/GetNotificationsByUser?userNo=` + userNo, null);\r\n }\r\n\r\n notifications_ReadNotifications(notificationNos: number[]): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Notifications/ReadNotifications`, notificationNos);\r\n }\r\n\r\n notifications_ClearNotifications(notificationNos: number[]): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Notifications/ClearNotifications`, notificationNos);\r\n }\r\n\r\n notifications_AddUpdateNotification(notification: Notification, sendExternalNotification: boolean = true): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Notifications/AddUpdateNotification?sendExternalNotification=` + sendExternalNotification.toString(), notification);\r\n }\r\n\r\n messaging_GetMessages(projectNo: number, messageTypeNo: number, lastMessageNo?: number, messageFlags: string = \"\", messageText: string = \"\"): Observable {\r\n let endpoint = `projectNo=${projectNo}&messageTypeNo=${messageTypeNo}&messageFlags=${messageFlags}&messageText=${messageText}`;\r\n if (lastMessageNo != null) {\r\n endpoint += `&lastMessageNo=${lastMessageNo}`;\r\n }\r\n return this.http.post(webApiBaseUrl + 'api/Messaging/GetMessages?' + endpoint, null);\r\n }\r\n\r\n messaging_SaveMessage(message: object, newFiles: File[]): Observable {\r\n let formData = new FormData();\r\n formData.append('Message', JSON.stringify(message));\r\n for (var i = 0; i < newFiles.length; i++) {\r\n formData.append((i + 1).toString(), newFiles[i], newFiles[i].name);\r\n }\r\n return this.http.post(webApiBaseUrl + 'api/Messaging/SaveMessage', formData);\r\n }\r\n\r\n // Tree Methods\r\n tree_GetTreeList(includeDisabled: boolean = false): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Tree/GetTreeList?includeDisabled=' + includeDisabled, null);\r\n }\r\n\r\n tree_GetBlankTree(treeNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Tree/GetBlankDecisionTree?treeNo=' + treeNo, null);\r\n }\r\n\r\n tree_GetTreeQuestionTypes(): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Tree/GetTreeQuestionTypes', null);\r\n }\r\n\r\n tree_SaveTree(tree: object, img: object): Observable {\r\n let formData = new FormData();\r\n formData.append('Tree', JSON.stringify(tree));\r\n if (img != null) {\r\n let file: File = img;\r\n formData.append('img', file, file.name);\r\n\r\n }\r\n return this.http.post(webApiBaseUrl + 'api/Tree/SaveDecisionTree', formData);\r\n }\r\n\r\n tree_DisableTree(treeNo: number): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Tree/SetTreeStatus?treeNo=' + treeNo + '&treeStatusNo=2', null);\r\n }\r\n // Tasks methods\r\n\r\n tasks_GetTasks(projectNo: number, roleNo: number = -1): Observable {\r\n return this.http.post(webApiBaseUrl + 'api/Tasks/GetTasks?projectNo=' + projectNo + (roleNo != -1 ? '&roleNo=' + roleNo: ''), null);\r\n }\r\n\r\n tasks_SaveTask(task: Task): Observable {\r\n return this.http.post(webApiBaseUrl + `api/Tasks/TransitTask`, task);\r\n }\r\n}\r\n\r\n// base class for response objects\r\nexport class ApiResponse {\r\n errorMessage: string;\r\n errorCode: number;\r\n\r\n static checkStatus(resp: ApiResponse): boolean {\r\n if (resp.errorCode != 0) {\r\n if (MessageBoxComponent.staticInstance) {\r\n MessageBoxComponent.staticInstance.show('Error', resp.errorMessage, false);\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport class ValidateUserResponse extends ApiResponse {\r\n userValidated: boolean; // this is passed back from the server, but we don't actually use it because we are able to tell from other fields if the user is validated.\r\n browserRegistered: boolean;\r\n userNo: number;\r\n serviceAreaNos: string;\r\n firstName: string;\r\n lastName: string;\r\n validationToken: string;\r\n browserGuid: string;\r\n tokenExpirationSeconds: number;\r\n userStatusNo: number;\r\n officeManagerEditPermission: boolean;\r\n phone: string;\r\n email: string;\r\n browserMfaExpiresDays: string;\r\n authorityRoles: string[];\r\n serviceAreas: ServiceArea[];\r\n taskCategories: TaskCategory[];\r\n projectStatuses: Option[];\r\n}\r\n\r\nexport class Option {\r\n constructor( // These params will automatically become the properties of this class\r\n public optionNo: number,\r\n public optionName: string,\r\n ) { }\r\n}\r\n\r\nexport class ValidateUserRequest {\r\n constructor( // These params will automatically become the properties of this class\r\n public email: string,\r\n public password: string,\r\n public TimeZoneOffsetMinutes: number,\r\n public browserGuid: string,\r\n public passcode: string,\r\n public registerBrowser: boolean,\r\n public passcodeDelivery: string\r\n ) { }\r\n}\r\n\r\nexport class ChangePasswordRequest {\r\n constructor( // These params will automatically become the properties of this class\r\n public email: string,\r\n public oldPassword: string,\r\n public newPassword: string\r\n ) { }\r\n}\r\n\r\nexport class ResetPasswordRequest {\r\n constructor( // These params will automatically become the properties of this class\r\n public email: string,\r\n public urlBase: string\r\n ) { }\r\n}\r\n\r\nexport class ServiceArea {\r\n public serviceAreaNo: number;\r\n public serviceAreaName: string;\r\n public serviceAreaZipCode: string;\r\n}\r\n\r\nexport class User {\r\n constructor( // These params will automatically become the properties of this class\r\n public userNo: number,\r\n public serviceAreaNos: string, // comma-delimited list\r\n public roleNo: number,\r\n public userStatusNo: number,\r\n public email: string,\r\n public firstName: string,\r\n public lastName: string,\r\n public phone: string,\r\n public enableEmailNotifications: boolean,\r\n public enableTextNotifications: boolean,\r\n public secondaryFirstName: string,\r\n public secondaryLastName: string,\r\n public businessName: string,\r\n public secondaryPhone: string,\r\n public officeManagerEditPermission: boolean,\r\n public addresses: Address[],\r\n public isLockedOut: boolean,\r\n public deletedUTC: Date,\r\n public createdUTC: Date,\r\n public lastLoginUTC: Date,\r\n public TotalBudgetOfProjects: number,\r\n public TotalNumberOfActiveProjects: number,\r\n public userRoles: string,\r\n public password: string,\r\n public submittedProjects: string[],\r\n public activeProjects: string[],\r\n public completedProjects: string[],\r\n public serviceAreaNames: string, // This is not in the DTO returned by the API. But we set it on the UI.\r\n ) { }\r\n\r\n static create() {\r\n return new User(0, '', 1, 1, '', '', '', '', true, false, '', '', '', '', null, [], false, null, null, null, null, null, '', '', [], [], [], '');\r\n }\r\n\r\n static statusArrayUsers = [\r\n new Option(0, 'Disabled'),\r\n new Option(1, 'Enabled')\r\n ];\r\n\r\n \r\n\r\n static statusArrayContractors = [\r\n new Option(0, \"Disabled\"),\r\n new Option(1, \"Approved\"),\r\n new Option(2, \"Account Just Created\"),\r\n new Option(3, \"Application Submitted, Part 1\"),\r\n new Option(4, \"Application Part 1 Approved\"),\r\n new Option(5, \"Application Submitted, Part 2\"),\r\n new Option(6, \"Declined\"),\r\n new Option(7, \"Temporarily disabled\"),\r\n ];\r\n}\r\n\r\n\r\n\r\nexport class UsersResponse extends ApiResponse {\r\n public users: User[];\r\n public contractors: Contractor[];\r\n}\r\n\r\nexport class UserResponse extends ApiResponse {\r\n public user: User;\r\n public contractor: Contractor;\r\n}\r\n\r\nexport class GetStringResponse extends ApiResponse {\r\n public message: string;\r\n}\r\n\r\nexport class TaskCategory {\r\n constructor(\r\n public taskCategoryNo: number,\r\n public roleNo: number,\r\n public taskCategoryText: string,\r\n public currentStatusNo: number,\r\n public nextStatusNo: number,\r\n ) { }\r\n}\r\n\r\nexport class Project {\r\n projectNo: number = null;\r\n treeNo: number = 0;\r\n projectType: string = '';\r\n userNoHomeowner: number = 0;\r\n homeownerName: string = '';\r\n userNoAdmin: number = null;\r\n buildSageRepName: string = '';\r\n userNoContractor: number = null;\r\n contractorName: string = '';\r\n projectName: string = '';\r\n projectStatusNo: number = 13;\r\n projectStatusDescription: string = '';\r\n address: string = null;\r\n city: string = '';\r\n stateCode: string = '';\r\n zipCode: string = '';\r\n budget: number = 0;\r\n estimatedBudget: number = 0;\r\n startDate: string = null;\r\n months: number = 0;\r\n weeks: number = 0;\r\n days: number = 0;\r\n endDate: string = null;\r\n lastUpdatedUTC: string = '';\r\n firstHomeownerAvailabilityUTC: string = '';\r\n secondHomeownerAvailabilityUTC: string = '';\r\n thirdHomeownerAvailabilityUTC: string = '';\r\n contractorSelectedTimeNo: number = 0;\r\n addressNo: number = null;\r\n lastMessageUTC: string = '';\r\n proposalEstimateTimeNo: number = 0;\r\n additionalNotes: string = '';\r\n isArchitectAssigned: boolean = false;\r\n architectName: string = null;\r\n isFixedPrice: boolean = false;\r\n fixedPrice: number = null;\r\n fixedPriceText: string = '';\r\n contractorFee: number = null;\r\n contractorFeeText: string = null;\r\n notToExceedPrice: number = null;\r\n notToExceedPriceText: string = null;\r\n isEscrowFreeText: boolean = false;\r\n escrowFreeText: string = null;\r\n contractYear: number = null;\r\n contractMonth: string = null;\r\n contractDay: number = null;\r\n projectDescription: string = null;\r\n allowances: string = null;\r\n isActive: boolean = false;\r\n displayThumbnailUrl: string = null;\r\n signerName: string = null;\r\n signerRole: string = null;\r\n didHomeownerSign: boolean = false;\r\n didContractorSign: boolean = false;\r\n createdUTC: Date = null;\r\n completedUTC: Date = null;\r\n submittedUTC: Date = null;\r\n additionalProvisions: string = null;\r\n scopeOfWorkJobs: ScopeOfWorkJob[] = [];\r\n userAnswers: UserAnswer[] = [];\r\n rooms: Room[] = [];\r\n tasks: Task[] = [];\r\n\r\n static EstimatedBudgetOptions = [\r\n { id: 7, value: '> $300,000' },\r\n { id: 6, value: '$200,001 - $300,000' },\r\n { id: 5, value: '$150,001 - $200,000' },\r\n { id: 4, value: '$100,001 - $150,000' },\r\n { id: 3, value: '$75,001 - $100,000' },\r\n { id: 2, value: '$50,001 - $75,000' },\r\n { id: 1, value: '$25,001 - $50,000' },\r\n { id: 0, value: '$10,000 - $25,000' },\r\n { id: 8, value: 'Not sure' },\r\n ];\r\n}\r\n\r\nexport enum ProjectStatus\r\n{\r\n Submitted = 1,\r\n Accepted = 2,\r\n Declined = 3,\r\n InitialVisitScheduled = 4,\r\n AwaitingProposal = 5,\r\n ContractApprovalPending = 6,\r\n PreConstruction = 7,\r\n ActiveConstruction = 8,\r\n Punchlist = 9,\r\n FinalBilling =10,\r\n Warranty = 11,\r\n Legacy = 12,\r\n Incomplete = 13,\r\n Deleted = 14\r\n}\r\n\r\n export class Room {\r\n constructor(\r\n public displayDocumentUrl: string,\r\n public documentNo: number,\r\n public numberOfDoors: number,\r\n public numberOfWindows: number,\r\n public projectNo: number,\r\n public roomDimensions: string,\r\n public roomNo: number,\r\n public roomText: string,\r\n public thumbnailUrl: string,\r\n ) { }\r\n static create() {\r\n return new Room(\r\n null, null, null, null, null, null, null, null, null\r\n );\r\n }\r\n }\r\n \r\n export class RoomDimensions {\r\n constructor(\r\n public lengthFeet: number,\r\n public lengthInches: number,\r\n public widthFeet: number,\r\n public widthInches: number,\r\n public heightFeet: number,\r\n public heightInches: number,\r\n ) { }\r\n static create() {\r\n return new RoomDimensions(\r\n null, null, null, null, null, null\r\n );\r\n }\r\n }\r\n \r\n export class ScopeOfWorkJob {\r\n constructor(\r\n public jobNo: number,\r\n public projectNo: number,\r\n public jobText: string,\r\n public weeks: number,\r\n public days: number,\r\n public scopeOfWorkItems: ScopeOfWorkItem[],\r\n ) { }\r\n static create() {\r\n return new ScopeOfWorkJob(\r\n null, null, null, null, null, null\r\n );\r\n }\r\n\r\n}export class ScopeOfWorkResponse extends ApiResponse {\r\n // this may have to be an array of SoW\r\n public scopeOfWork: ScopeOfWorkJob[];\r\n}\r\n\r\nexport class ScopeOfWorkItem {\r\n constructor(\r\n public itemNo: number,\r\n public jobNo: number,\r\n public itemText: string,\r\n public isComplete: boolean,\r\n ) { }\r\n\r\n static create() {\r\n return new ScopeOfWorkItem(\r\n null, null, null, null\r\n );\r\n }\r\n}\r\nexport class ProjectResponse extends ApiResponse {\r\n public project: Project;\r\n}\r\n\r\nexport class ProjectsResponse extends ApiResponse {\r\n public projects: Project[];\r\n}\r\n\r\nexport class RoomResponse extends ApiResponse {\r\n public room: Room;\r\n}\r\n\r\nexport class InspirationsResponse extends ApiResponse {\r\n public inspirations: Inspiration[];\r\n}\r\n\r\nexport class GetTasksResponse extends ApiResponse {\r\n public tasks: Task[];\r\n}\r\n\r\nexport class Inspiration {\r\n constructor(\r\n public inspirationNo: number,\r\n public projectNo: number,\r\n public userNo: number,\r\n public userName: string,\r\n public inspirationName: string,\r\n public inspirationNote: string,\r\n public inspirationLink: string,\r\n public documentNo?: number,\r\n public thumbnailUrl?: string,\r\n public displayDocumentUrl?: string,\r\n ) { }\r\n}\r\n\r\nexport class Contractor extends User {\r\n constructor(\r\n public specialties: string,\r\n public ein: string,\r\n public areaOfWorkDistance: number,\r\n public yearsOfExperience: number,\r\n public applicationSubmissionUTC: Date,\r\n public licenseNo: string,\r\n public otherTradeNames: string,\r\n public yearsInBusiness: number,\r\n public hasBusinessInsurance: boolean,\r\n public classifications: string,\r\n public website: string,\r\n public referenceName1: string,\r\n public referenceEmail1: string,\r\n public referenceName2: string,\r\n public referenceEmail2: string,\r\n public referenceName3: string,\r\n public referenceEmail3: string,\r\n public referenceEmailSent1: boolean,\r\n public referenceEmailSent2: boolean,\r\n public referenceEmailSent3: boolean,\r\n public contractorDocuments: ContractorDocument[],\r\n ) { super(0, '', 0, 1, '', '', '', '', true, false, '', '', '', '', null, [], false, null, null, null, null, null, '', '', [], [], [], ''); }\r\n\r\n static create() {\r\n return new Contractor('', '', 0, 0, null, '', '', 0, false, '', '', '', '', '', '', '', '', false, false, false,[]);\r\n }\r\n}\r\n\r\nexport class Address {\r\n constructor(\r\n public addressNo: number,\r\n public isMailingAddress: boolean,\r\n public streetAddress: string,\r\n public city: string,\r\n public stateCode: string,\r\n public zipCode: string,\r\n ) {}\r\n static create() {\r\n return new Address(null, false, '', '', null, '' );\r\n }\r\n}\r\n\r\nexport class ContractorDocument {\r\n constructor(\r\n public documentNo: number,\r\n public originalDocumentName: string,\r\n public expirationDate: Date,\r\n public downloadDocumentUrl: string,\r\n public thumbnailUrl: string,\r\n ) { }\r\n static create() {\r\n return new ContractorDocument(null, '', null, '', null);\r\n }\r\n}\r\n\r\nexport class Note {\r\n constructor(\r\n public noteNo: number,\r\n public projectNo: number,\r\n public userNo: number,\r\n public userName: string,\r\n public noteText: string,\r\n public lastUpdatedUTC: Date,\r\n ) { }\r\n\r\n static create() {\r\n return new Note(null, 0, 0, '', '', new Date());\r\n }\r\n}\r\n\r\nexport class NotesResponse extends ApiResponse {\r\n public notes: Note[];\r\n}\r\n\r\nexport class ImportantDocument {\r\n constructor(\r\n public importantDocumentNo: number,\r\n public projectNo: number,\r\n public userNo: number,\r\n public userName: string,\r\n public documentNo: number,\r\n public documentName: string,\r\n public originalDocumentName: string,\r\n public documentTypeNo: number,\r\n public documentTypeName: string,\r\n public uploadedUTC: Date,\r\n public downloadDocumentUrl: string,\r\n ) { }\r\n\r\n static create() {\r\n return new ImportantDocument(null, 0, 0, '', 0, '', '', 0, '', new Date(), '');\r\n }\r\n}\r\n\r\nexport class ImportantDocumentsResponse extends ApiResponse {\r\n public importantDocuments: ImportantDocument[];\r\n}\r\n\r\nexport class Milestone {\r\n constructor(\r\n public milestoneNo: number,\r\n public projectNo: number,\r\n public milestoneName: string,\r\n public isComplete: boolean,\r\n public isVisit: boolean,\r\n public milestoneDate: Date,\r\n public paymentInformation: string,\r\n ) { }\r\n\r\n static create() {\r\n return new Milestone(null, 0, '', false, false, null, '');\r\n }\r\n}\r\n\r\nexport class Visit {\r\n visitNo: number = null;\r\n visitName: string = '';\r\n firstDate: Date = null;\r\n firstTime: string = '';\r\n secondDate: Date = null;\r\n secondTime: string = '';\r\n thirdDate: Date = null;\r\n thirdTime: string = '';\r\n selectedDate: Date = null;\r\n selectedTime: string = '';\r\n isComplete: boolean = false; \r\n}\r\n\r\nexport class MilestonesResponse extends ApiResponse {\r\n public milestones: Milestone[];\r\n public visits: Visit[];\r\n public projectStatusNo: number;\r\n}\r\n\r\n\r\n\r\nexport class Message {\r\n constructor(\r\n public messageNo: number | null,\r\n public projectNo: number,\r\n public userNo: number,\r\n public messageText: string,\r\n public messageTypeNo: number,\r\n public messageFlags: string,\r\n public messageTimeUTC: Date,\r\n public messageTimeString: string,\r\n public messageSender: string,\r\n public messageDocuments: MessageDocument[],\r\n public hideFlagDropdown: boolean = true\r\n ) { }\r\n\r\n static create() {\r\n return new Message(null, 0, 0, '', 0, null, new Date(), '', '', [], true);\r\n }\r\n}\r\nexport class firbaseOBJ{\r\n public messages:Message;\r\n public projectN:string;\r\n}\r\nexport class MessagesResponse extends ApiResponse {\r\n public messages: Message[];\r\n public reachedFirstMessage: boolean;\r\n}\r\n\r\nexport class MessageDocument {\r\n messageDocumentNo: number | null;\r\n documentNo: number | null;\r\n messageNo: number;\r\n originalDocumentName: string;\r\n downloadDocumentUrl: string;\r\n thumbnailUrl: string;\r\n}\r\n\r\n\r\n\r\n\r\nexport class Notification {\r\n constructor(\r\n public notificationNo: number,\r\n public projectNo: number,\r\n public projectName: string,\r\n public userNo: number,\r\n public notificationTypeNo: number,\r\n public notificationTypeText: string,\r\n public customText: string,\r\n public createdUTC: Date,\r\n public readUTC: Date,\r\n public destinationURL: string,\r\n public dueTimeUTC: Date,\r\n public isResolved: boolean,\r\n ) { };\r\n\r\n static create() {\r\n return new Notification(null, null, '', null, null, '', '', null, null, '', null, null);\r\n }\r\n}\r\n\r\nexport class FirebaseNotification {\r\n constructor(\r\n public isReceived: boolean,\r\n public notification: Notification\r\n ) { };\r\n}\r\n\r\nexport class NotificationsResponse extends ApiResponse {\r\n public notifications: Notification[];\r\n}\r\n\r\nexport class ImportantDocumentTypesResponse extends ApiResponse {\r\n public importantDocumentTypes: ImportantDocumentType[];\r\n}\r\n\r\nexport class ImportantDocumentType {\r\n public documentTypeNo: number;\r\n public documentTypeName: string;\r\n}\r\nexport class UserAnswer {\r\n answerNo: number;\r\n answerText: string;\r\n questionText: string;\r\n documentNo: number;\r\n documentUrl: string;\r\n}\r\n\r\nexport class UserAnswersResponse extends ApiResponse {\r\n public userAnswersStructure: UserAnswerStructure;\r\n}\r\n\r\nexport class UserAnswerStructure {\r\n public userNo: number;\r\n public projectNo: number;\r\n public userAnswers: UserAnswer[];\r\n}\r\n\r\nexport class Tree {\r\n constructor(\r\n public treeNo: number | null,\r\n public treeName: string,\r\n public firstQuestionNo: number | null,\r\n public treeStatusNo: number | null,\r\n public lastUpdatedUTC: Date,\r\n public treeQuestions: TreeQuestion[],\r\n public documentNo: number | null,\r\n public thumbnailUrl: string,\r\n public projectInqueries: number,\r\n public declinedProjects: number,\r\n public liveProjects: number,\r\n public completedProjects: number,\r\n public numberOfQuestions: number\r\n ) { };\r\n\r\n\r\n static create() {\r\n return new Tree(null, '', null, null, new Date(), [], null, '', 0, 0, 0, 0, 0)\r\n }\r\n}\r\n\r\nexport class TreeQuestion {\r\n constructor(\r\n public questionNo: number,\r\n public questionTypeNo: number,\r\n public questionText: string,\r\n public toolTip: string,\r\n public treePossibleAnswers: TreePossibleAnswer[],\r\n ) { }\r\n}\r\n\r\nexport class TreePossibleAnswer {\r\n constructor(\r\n public answerNo: number,\r\n public questionNo: number,\r\n public answerText: string,\r\n public nextQuestionNo: number | null,\r\n ) { };\r\n}\r\n\r\nexport class TreeResponse extends ApiResponse {\r\n tree: Tree;\r\n}\r\n\r\nexport class TreeListResponse extends ApiResponse {\r\n trees: Tree[];\r\n}\r\n\r\nexport class TreeQuestionType {\r\n questionTypeNo: number;\r\n questionType: string;\r\n}\r\n\r\nexport class TreeQuestionTypeResponse extends ApiResponse {\r\n treeQuestionTypes: TreeQuestionType[];\r\n}\r\n\r\nexport class ContractorRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n Speciality: string\r\n}\r\nexport class ContractorResponse {\r\n contractorsCreated: number;\r\n contractorsCreatedEarlier: number;\r\n monthAbbreviation: string;\r\n year: number;\r\n}\r\n\r\n\r\nexport class HomeownerRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n}\r\nexport class HomeownerResponse {\r\n homeownersCreated: number;\r\n homeownersCreatedEarlier: number;\r\n monthAbbreviation: string;\r\n year: number;\r\n}\r\n\r\nexport class ProjectGraphRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n ProjectTypeNo: number;\r\n ContractorNo: number;\r\n}\r\n\r\nexport class ProjectGraphResponse {\r\n projectsCompleted: number;\r\n projectsSubmited: number;\r\n projectsSigned: number;\r\n year: number;\r\n monthAbbreviation: string;\r\n}\r\n\r\nexport class ContractsSignedRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n ProjectTypeNo: number;\r\n ContractorNo: number;\r\n}\r\nexport class ContractsSignedResponse {\r\n year: number;\r\n monthAbbrev: string;\r\n treeName: string;\r\n numSigned: string;\r\n}\r\nexport class AddressModel {\r\n serviceAreaNo: number;\r\n serviceAreaName: string;\r\n serviceAreaZipCode: string;\r\n}\r\nexport class ContracterModel {\r\n userNo: number;\r\n}\r\nexport class HomeOwnerModel {\r\n userNo: number;\r\n}\r\nexport class ProjectTypeModel {\r\n treeNo: number;\r\n treeName: string;\r\n}\r\n\r\nexport class ProjectFilter {\r\n addressList: AddressModel[] = [];\r\n homeOwnerList: HomeOwnerModel[] = [];\r\n projectTypeList: ProjectTypeModel[] = [];\r\n contractorList: ContracterModel[] = [];\r\n}\r\nexport class ProjectStatisticsRequest {\r\n HomeOwnerNo: number;\r\n ServiceAreaNo: number;\r\n ProjectTypeNo: number;\r\n ContractorNo: number;\r\n}\r\n\r\nexport class ProjectStatisticsResponse {\r\n projectStatusDescription: string;\r\n projectStatusNo: number;\r\n numProjects: number;\r\n percentProjects: number;\r\n avgDays: number;\r\n percentActive: number;\r\n}\r\n\r\nexport enum TaskType\r\n{\r\n ScheduleInitialVisitH = 1,\r\n ScheduleInitialVisitC = 2,\r\n CompleteInitialVisit = 3,\r\n SubmitProposal = 4,\r\n SubmitContract = 5,\r\n SignContractC = 6,\r\n SignContractH = 7,\r\n StartConstruction = 8,\r\n SubmitInvoice = 9,\r\n ReviewInvoice = 10,\r\n StartPunchlist = 11,\r\n StartFinalBilling = 12,\r\n StartWarranty = 13\r\n}\r\n\r\nexport class Task {\r\n taskNo: number | null;\r\n projectNo: number | null;\r\n taskCategoryNo: number | null;\r\n roleNo: number | null;\r\n taskCategoryText: string | null;\r\n completedUTC: Date | null;\r\n createdUTC: Date | null;\r\n canceledUTC: Date | null;\r\n visit: Visit;\r\n extraInfo: string;\r\n currentStatusNo: number | null;\r\n nextStatusNo: number | null;\r\n project: Project;\r\n ownerName: string;\r\n\r\n constructor(options: {\r\n taskNo?: number,\r\n projectNo?: number,\r\n taskCategoryNo?: number,\r\n roleNo?: number,\r\n taskCategoryText?: string,\r\n completedUTC?: Date,\r\n createdUTC?: Date,\r\n canceledUTC?: Date,\r\n visit?: Visit,\r\n extraInfo?: string,\r\n currentStatusNo?: number,\r\n nextStatusNo?: number,\r\n project?: Project\r\n } = {}) {\r\n this.taskNo = options.taskNo || null;\r\n this.projectNo = options.projectNo || null;\r\n this.taskCategoryNo = options.taskCategoryNo || null;\r\n this.roleNo = options.roleNo || null;\r\n this.taskCategoryText = options.taskCategoryText || null;\r\n this.completedUTC = options.completedUTC || null;\r\n this.createdUTC = options.createdUTC || null;\r\n this.canceledUTC = options.canceledUTC || null;\r\n this.visit = options.visit || new Visit();\r\n this.extraInfo = options.extraInfo || '';\r\n this.currentStatusNo = options.currentStatusNo || null;\r\n this.nextStatusNo = options.nextStatusNo || null;\r\n this.project = options.project || new Project();\r\n }\r\n}\r\nexport class BudgetingRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n ContractorNo: number;\r\n BudgetMin: number;\r\n BudgetMax: number;\r\n}\r\nexport class BudgetingResponse {\r\n budgetingStatistics: BudgetingStatistics[];\r\n budgetingPercents: BudgetingPercents;\r\n}\r\nexport class BudgetingStatistics {\r\n ProjectType: string;\r\n ProjectCount: number;\r\n ProjectAvgCost: number;\r\n ProjectMinCost: number;\r\n ProjectMaxCost: number;\r\n AvgOpenMonth: number;\r\n AvgCloseMonth: number;\r\n}\r\nexport class BudgetingPercents {\r\n percentDeclined: number;\r\n percentAccepted: number;\r\n percentPending: number;\r\n percentConstruction: number;\r\n percentCompleted: number;\r\n}\r\n\r\nexport class ProjectStagesRequest {\r\n StartDate: Date;\r\n EndDate: Date;\r\n ServiceAreaNo: number;\r\n ContractorNo: number;\r\n BudgetMin: number;\r\n BudgetMax: number;\r\n}\r\n\r\nexport class GraphObject\r\n{\r\n name: string;\r\n value: number;\r\n constructor(name:string,value:number)\r\n {\r\n this.name = name;\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class ProjectStages {\r\n constructor (\r\n public CategoryType: string,\r\n public CreatedAcceptedAvg: number,\r\n public InitialVisitScheduledAvg: number,\r\n public AwaitingProposalAvg: number,\r\n public ContractPendingAvg: number,\r\n public PreConstructionAvg: number,\r\n public ActiveConstructionAvg: number,\r\n public PunchlistAvg: number,\r\n public FinalBillingAvg: number,\r\n public WarrantyAvg: number,\r\n public LegacyAvg: number\r\n ) {};\r\n}\r\n\r\nexport class ProjectStagesResponse extends ApiResponse {\r\n public projectStages: ProjectStages[];\r\n}\r\n\r\nexport class ContractorInfo {\r\n constructor (\r\n public userNo: number,\r\n public firstName: string,\r\n public lastName: string\r\n ) {};\r\n}\r\n\r\nexport class ContractorListResponse {\r\n public contractors: ContractorInfo[];\r\n}\r\n\r\nexport class ProjectYear {\r\n public year: number;\r\n}\r\n\r\nexport class ProjectYearsResponse {\r\n public years: ProjectYear[];\r\n}\r\n\r\nexport class KPIMonthYearWiseStats\r\n{\r\n currentMonthProjectCount: number;\r\n currentYearProjectCount: number;\r\n lastMonthProjectCount: number;\r\n lastYearProjectCount: number;\r\n monthMinBudget: number; \r\n monthMaxBudget: number;\r\n yearMinBudget: number; \r\n yearMaxBudget: number;\r\n completedProjectsCount: number;\r\n liveProjectsCount: number;\r\n liveHomeOwnersCount: number;\r\n liveContractorsCount: number;\r\n}\r\n\r\nexport class KPIActiveProjectsStats\r\n{\r\n currentMonthContractorCount: number;\r\n currentYearContractorCount: number;\r\n currentMonthHomeOwnerCount: number;\r\n currentYearHomeOwnerCount: number;\r\n lastMonthContractorCount: number;\r\n lastYearContractorCount: number;\r\n lastMonthHomeOwnerCount: number;\r\n lastYearHomeOwnerCount: number;\r\n}\r\n\r\nexport class KPIDashBoardStats\r\n{\r\n kpiActiveProjects: KPIActiveProjectsStats;\r\n kpiMonthYearStats: KPIMonthYearWiseStats;\r\n constructor()\r\n {\r\n this.kpiActiveProjects = new KPIActiveProjectsStats();\r\n this.kpiMonthYearStats = new KPIMonthYearWiseStats()\r\n }\r\n}\r\nexport class UserList {\r\n public userNo: number;\r\n public descriptor: string;\r\n}\r\n\r\nexport class UserListResponse extends ApiResponse {\r\n public users: UserList[];\r\n}\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = {\r\n production: false,\r\n firebaseConfig:{\r\n \tapiKey: \"AIzaSyAqSrqa72aHHaEzHTNTuaWGTgb84BYbyiM\",\r\n \tauthDomain: \"buildsageprodnotifications.firebaseapp.com\",\r\n \tdatabaseURL: \"https://buildsageprodnotifications-default-rtdb.firebaseio.com\",\r\n \tprojectId: \"buildsageprodnotifications\",\r\n \tstorageBucket: \"buildsageprodnotifications.appspot.com\",\r\n \tmessagingSenderId: \"475820989456\",\r\n \tappId: \"1:475820989456:web:9f548cb2b983409780be95\"\r\n }\r\n};\r\n\r\n/*\r\n * In development mode, to ignore zone related error stack frames such as\r\n * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can\r\n * import the following file, but please comment it out in production mode\r\n * because it will have performance impact when throw error\r\n */\r\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nexport function getBaseUrl() {\r\n return document.getElementsByTagName('base')[0].href;\r\n}\r\n\r\nconst providers = [\r\n { provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] }\r\n];\r\n\r\nplatformBrowserDynamic(providers).bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n"],"names":[],"sourceRoot":"webpack:///"}