{"version":3,"file":"app-fb5330b7.48a1f55b00cfdd87.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/services/project-log-data-service.ts","webpack://client-app/./src/app/services/project-token-service.ts","webpack://client-app/./src/app/services/qto-export-service.ts"],"sourcesContent":["import { FacilityManager, Location, Member, ProjectDto, ProjectInvitation } from \"app/models/project-dto\";\r\nimport { AppContextService } from \"./app-context-service\";\r\nimport { autoinject } from \"aurelia-framework\";\r\nimport { ApiClient } from \"./api-client\";\r\nimport { HttpResponseMessage } from \"aurelia-http-client\";\r\n\r\n@autoinject\r\nexport class ProjectLogDataService {\r\n\t\r\n private orgToProjectMap: Map | undefined;\r\n public projectLogList: ProjectLogInfoDto[] = []\r\n\r\n constructor(private appContext: AppContextService, private apiClient: ApiClient) { }\r\n \r\n createOrgToProjectMap(): void {\r\n let map: Map = new Map();\r\n this.appContext.projects.forEach((project: ProjectDto) => {\r\n let listOfProjects: ProjectDto[] | undefined = map.get(project.ownerCompanyId);\r\n if (listOfProjects != undefined) {\r\n listOfProjects.push(project);\r\n } else {\r\n map.set(project.ownerCompanyId, [project]);\r\n }\r\n });\r\n this.orgToProjectMap = map;\r\n }\r\n\r\n async fetchProjectInfo(): Promise {\r\n if (this.orgToProjectMap) {\r\n this.projectLogList = [] //Resetting list.\r\n let orgIdList = Array.from(this.orgToProjectMap?.keys());\r\n for (let orgId of orgIdList) {\r\n await this.fetchProjectInfoByOrg(orgId);\r\n }\r\n return this.createFullProjectDataList();\r\n }\r\n return this.appContext.projects; //If orgToProjectMap is empty we just return the original list.\r\n\r\n }\r\n\r\n private createFullProjectDataList(): FullProjectInfo[] {\r\n return this.appContext.projects.map(p1 => {\r\n let matchingIdProject = this.projectLogList.find(p2 => p2.id == p1.id);\r\n return new FullProjectInfo(p1, matchingIdProject)\r\n }); \r\n }\r\n\r\n private async fetchProjectInfoByOrg(orgId: string): Promise {\r\n let projectIds = this.orgToProjectMap?.get(orgId)?.map(project => project.id);\r\n if (projectIds != undefined && projectIds.length > 0) {\r\n let result: HttpResponseMessage = await this.apiClient.orgById(orgId).postJson(\"Project/GetLogFromOrgProjects\", projectIds).handleErrorWithErrorService(() => {console.warn(`An issue occured fetching data from org [${orgId}]`)}).responseNoLoadingIcon();\r\n if (result.statusCode == 200) {\r\n this.projectLogList.push(...result.content);\r\n }\r\n }\r\n }\r\n\r\n public async fetchProjectInfoByProjectId(projectDto: ProjectDto): Promise {\r\n let result: HttpResponseMessage = await this.apiClient.orgById(projectDto.ownerCompanyId).postJson(\"Project/GetLogByProjectId\", projectDto.id).handleErrorWithErrorService(() => {console.warn(`An issue occured fetching data from from project with id [${projectDto.id}]`)}).responseNoLoadingIcon();\r\n if (result.statusCode == 200) {\r\n return new FullProjectInfo(projectDto,result.content);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport interface ProjectLogInfoDto {\r\n id?: string,\r\n instancesInTotal?: number,\r\n instancesInSync?: number,\r\n typesInTotal?: number,\r\n typesInSync?: number,\r\n syncDate?: string,\r\n with3d?: boolean,\r\n revitVersion?: number,\r\n}\r\n\r\nexport class FullProjectInfo implements ProjectLogInfoDto, ProjectDto {\r\n id: string;\r\n name: string;\r\n region: string;\r\n number?: string | undefined;\r\n typeId?: string | undefined;\r\n classificationId: string;\r\n whitelistId: string;\r\n grossArea?: string | undefined;\r\n imageFileId?: string | undefined;\r\n ownerCompanyId: string;\r\n ownerCompanyName: string;\r\n location?: Location | undefined;\r\n facilityManager?: FacilityManager | undefined;\r\n members: Member[];\r\n projectInvitations: ProjectInvitation[];\r\n selected: boolean;\r\n created_UTC: Date;\r\n instancesInTotal?: number | undefined;\r\n instancesInSync?: number | undefined;\r\n typesInTotal?: number | undefined;\r\n typesInSync?: number | undefined;\r\n syncDate?: string | undefined;\r\n with3d?: boolean | undefined;\r\n revitVersion?: number | undefined;\r\n constructor(p1: ProjectDto, p2?: ProjectLogInfoDto) {\r\n this.id = p1.id,\r\n this.instancesInTotal = p2?.instancesInTotal,\r\n this.instancesInSync = p2?.instancesInSync,\r\n this.typesInTotal = p2?.typesInTotal,\r\n this.typesInSync = p2?.typesInSync,\r\n this.syncDate = p2?.syncDate,\r\n this.with3d = p2?.with3d,\r\n this.revitVersion = p2?.revitVersion,\r\n this.name = p1.name,\r\n this.region = p1.region,\r\n this.number = p1.number,\r\n this.typeId = p1.typeId,\r\n this.classificationId = p1.classificationId,\r\n this.whitelistId = p1.whitelistId,\r\n this.grossArea = p1.grossArea,\r\n this.imageFileId = p1.imageFileId,\r\n this.ownerCompanyId = p1.ownerCompanyId,\r\n this.ownerCompanyName = p1.ownerCompanyName,\r\n this.location = p1.location,\r\n this.facilityManager = p1.facilityManager,\r\n this.members = p1.members,\r\n this.projectInvitations = p1.projectInvitations,\r\n this.selected = p1.selected,\r\n this.created_UTC = p1.created_UTC\r\n }\r\n\r\n}","import { ProjectRole } from \"app/models/project-role\";\r\nimport { ApiClient } from \"./api-client\";\r\nimport { autoinject } from 'aurelia-framework';\r\nimport jwt_decode from \"jwt-decode\";\r\nimport { OrgRole } from \"app/models/org-role\";\r\nimport { ProjectTokenInfo } from \"app/models/project-token-info\";\r\n\r\n@autoinject\r\nexport class ProjectTokenService {\r\n constructor() {}\r\n\r\n public doesTokenMatchLog(projectId: string, token: string): void {\r\n\t\tlet decoded:any = jwt_decode(token);\r\n if (decoded.ProjectId == projectId) {\r\n console.log(\"token does match with selected projectId\");\r\n } else {\r\n console.warn(\"token does NOT match with selected projectId\");\r\n }\r\n\t}\r\n\r\n public async updatePrjTokenIfNeeded(projectId: string | undefined, apiClient: ApiClient): Promise {\r\n if (projectId == undefined) {\r\n console.log(\"removing prj-token, no project-set\");\r\n sessionStorage.removeItem('prj_access_token');\r\n return true;\r\n }\r\n let token: string | null = sessionStorage.getItem('prj_access_token');\r\n if (token == null) { \r\n console.warn(\"no token was found\"); \r\n } else {\r\n let decoded:any = jwt_decode(token);\r\n console.log(\"project-id already match with prj-token\");\r\n if (decoded.ProjectId == projectId) {return false;}\r\n }\r\n return await this.createNewProjectToken(projectId, apiClient);\r\n }\r\n \r\n public async createNewProjectToken(projectId: string, apiClient: ApiClient): Promise {\r\n let justUseDefaultApiUrl = \"\";\r\n\t\tlet result = await apiClient.custom(justUseDefaultApiUrl).get(`/Authentication/RefreshTokenWithProject/${projectId}`).response();\r\n\t\tsessionStorage.setItem('prj_access_token', result.content);\r\n console.log(\"updated prj-token \" , projectId);\r\n return result.statusCode == 200;\r\n }\r\n\r\n public getPrjTokenInfo(): ProjectTokenInfo {\r\n let token: string | null = sessionStorage.getItem('prj_access_token');\r\n if (token == null) { return {prjRole: ProjectRole.Unknown,prjId: \"00000000-0000-0000-0000-000000000000\", orgRole: OrgRole.Unknown, orgId: \"00000000-0000-0000-0000-000000000000\"} }\r\n let decoded:any = jwt_decode(token);\r\n let projectRoleString: string | undefined = decoded.ProjectRole;\r\n let orgRoleString: string | undefined = decoded.OrgRole;\r\n let projectRole: ProjectRole | undefined = ProjectRole[projectRoleString];\r\n let orgRole: OrgRole | undefined = OrgRole[orgRoleString];\r\n return {\r\n prjRole: projectRole != undefined ? projectRole : ProjectRole.Unknown, \r\n prjId: decoded.ProjectId ? decoded.ProjectId : \"00000000-0000-0000-0000-000000000000\",\r\n orgRole: orgRole != undefined ? orgRole : OrgRole.Unknown,\r\n orgId: decoded.OrgId ? decoded.OrgId : \"00000000-0000-0000-0000-000000000000\"\r\n };\r\n }\r\n}","import { SourceMediator } from \"app/project/quantity-takeoff/source-mediator\";\r\nimport { I18N } from \"aurelia-i18n\";\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { AppContextService } from \"./app-context-service\";\r\nimport { ApiClient } from \"./api-client\";\r\nimport { EventAggregator } from \"aurelia-event-aggregator\";\r\n\r\n\r\n@autoinject\r\nexport class QtoExportService {\r\n constructor(private api: ApiClient, public sMediator: SourceMediator, \r\n private i18n: I18N, private appContext: AppContextService,\r\n private events: EventAggregator) {}\r\n\r\n async exportToExcel(): Promise {\r\n\t\t// (Dumps OUR pivot directly to Excel.)\r\n this.events.publish('is-loading', true);\r\n\t\tconsole.log('directToExcel');\r\n let quantityFilterName = \"\";\r\n if (this.sMediator.selectedQF) {\r\n try {\r\n quantityFilterName = this.sMediator.selectedQF.name; \r\n await this.api.project(this.appContext.projectId).get(`QuantityFilter/RenderOwnPivotXL/${this.sMediator.selectedQF.id}`)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .downloadFile(`${quantityFilterName}.xlsx`);\r\n } catch (e) {\r\n console.log(\"Download Error \" , e);\r\n } finally {\r\n this.events.publish('is-loading', false);\r\n }\r\n }\r\n\t}\r\n\r\n async exportToExcelPivot(): Promise {\r\n\t\t// (Uses Excel's own Pivot.)\r\n this.events.publish('is-loading', true);\r\n\t\tif (this.sMediator.selectedQF) {\r\n let quantityFilterName = this.sMediator.selectedQF.name; \r\n try {\r\n await this.api.project(this.appContext.projectId).get(`QuantityFilter/RenderQuantityPivot/${this.sMediator.selectedQF.id}`)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .downloadFile(`${quantityFilterName}.xlsx`);\r\n } catch (e) {\r\n console.log(\"Download Error \" , e);\r\n } finally {\r\n this.events.publish('is-loading', false);\r\n }\r\n }\r\n\t}\r\n}"],"names":["ProjectLogDataService","constructor","appContext","apiClient","projectLogList","createOrgToProjectMap","map","Map","this","projects","forEach","project","listOfProjects","get","ownerCompanyId","undefined","push","set","orgToProjectMap","async","orgIdList","Array","from","keys","orgId","fetchProjectInfoByOrg","createFullProjectDataList","p1","matchingIdProject","find","p2","id","FullProjectInfo","projectIds","length","result","orgById","postJson","handleErrorWithErrorService","console","warn","responseNoLoadingIcon","statusCode","content","projectDto","autoinject","instancesInTotal","instancesInSync","typesInTotal","typesInSync","syncDate","with3d","revitVersion","name","region","number","typeId","classificationId","whitelistId","grossArea","imageFileId","ownerCompanyName","location","facilityManager","members","projectInvitations","selected","created_UTC","ProjectTokenService","doesTokenMatchLog","projectId","token","ProjectId","log","sessionStorage","removeItem","getItem","decoded","createNewProjectToken","custom","response","setItem","getPrjTokenInfo","prjRole","prjId","orgRole","projectRoleString","ProjectRole","orgRoleString","OrgRole","projectRole","OrgId","QtoExportService","api","sMediator","i18n","events","publish","quantityFilterName","selectedQF","handleError","tr","downloadFile","e","I18N"],"sourceRoot":""}