{"version":3,"file":"app-fb5330b7.35add5a8732c6c8a.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\nimport { RequestMethod } from \"./RequestMethod\";\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 { // UB: getAdditionalProjectInfo\r\n let omap: Map = new Map();\r\n this.appContext.projects.forEach((project: ProjectDto) => {\r\n let listOfProjects: ProjectDto[] | undefined = omap.get(project.ownerCompanyId);\r\n if (listOfProjects != undefined) {\r\n listOfProjects.push(project);\r\n } else {\r\n omap.set(project.ownerCompanyId, [project]);\r\n }\r\n });\r\n this.orgToProjectMap = omap;// in createOrgToProjectMap.\r\n\t\tconsole.log('createOrgToProjectMap, orgToProjectMap set to: ', omap);\r\n }\r\n\r\n async fetchProjectInfo(): Promise {\r\n\t\tconst has_orgToProjectMap:boolean = !!this.orgToProjectMap;\r\n\t\tconsole.log('fetchProjectInfo, has_orgToProjectMap?', has_orgToProjectMap);\r\n if (!has_orgToProjectMap) { //this.orgToProjectMap) {\r\n\t\t\tconsole.warn('PLDS.fetchProjectInfo, using appContext.projects, as no orgToProjectMap');\r\n\t\t\treturn this.appContext.projects; \r\n\t\t} //If orgToProjectMap is empty we just return the original list.\r\n\r\n\t\tthis.projectLogList = [] //Resetting list.\r\n\r\n\t\t//let the_keys:MapIterator = this.orgToProjectMap!.keys();\r\n\t\tlet the_keys = this.orgToProjectMap!.keys();\r\n\t\tlet orgIdList = Array.from(the_keys); //this.orgToProjectMap?.keys());\r\n\t\tfor (let orgId of orgIdList) {\r\n\t\t\tawait this.fetchProjectInfoByOrg(orgId);\r\n\t\t}\r\n\t\treturn this.createFullProjectDataList();\r\n }\r\n\r\n private createFullProjectDataList(): FullProjectInfo[] {\r\n\t\tconsole.log('createFullProjectDataList');\r\n return this.appContext.projects.map(globalPrj => {\r\n let matchingIdProject = this.projectLogList.find(localPrj => localPrj.id == globalPrj.id);\r\n return new FullProjectInfo('CFPDL', globalPrj, 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 console.log('fetchProjectInfoByOrg, org:', orgId, '#projectIDs:', projectIds?.length);\r\n if (projectIds == undefined || projectIds.length == 0) { \r\n\t\t\tconsole.log('fetchProjectInfoByOrg - no projectIds', projectIds);\r\n\t\t\treturn; \r\n\t\t}\r\n\r\n\t\t// This one is supposed to have org-scope - \r\n\t\t// AuthValues.Claims.ScopeAccess.Org\r\n\t\t// In particular, it is the org-scope, which eventually results in SetSystemPermissionsByOrgId,\r\n\t\t// which is what provides us access to org-scope data-sources.\r\n\t\tlet orgApiClient:RequestMethod = this.apiClient.orgById(orgId);\r\n\r\n\t\tlet result: HttpResponseMessage = \r\n\t\tawait orgApiClient.postJson(\"Project/GetLogFromOrgProjects\", projectIds)\r\n\t\t.handleErrorWithErrorService( \r\n\t\t\tasync () => {console.warn(`An issue occured fetching data from org [${orgId}]`)}\r\n\t )\r\n\t\t.responseNoLoadingIcon();\r\n\r\n\t\tif (result.statusCode == 200) {\r\n\t\t\tconst content1:ProjectLogInfoDto[] = result.content;\r\n\t\t\t//for (var p of content1) { console.warn('fetchProjectInfoByOrg', p.id, p.modelSource); }\r\n\t\t\tthis.projectLogList.push(...content1); //result.content);\r\n\t\t}\r\n }\r\n\r\n public async fetchProjectInfoByProjectId(projectDto: ProjectDto): Promise {\r\n let result: HttpResponseMessage = \r\n\t\t await this.apiClient.orgById(projectDto.ownerCompanyId).postJson(\"Project/GetLogByProjectId\", projectDto.id)\r\n\t\t .handleErrorWithErrorService( async () => {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('FPIBPI', projectDto,result.content);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport interface ProjectLogInfoDto { // Corresponds to LOCAL/SYSTEM db, NOT global.\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\tmodelSource: string; // From GetLogFromOrgProjects.\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\tmodelSource: string; // who provides this: presumably SOMETIMES comes through ProjectLogInfoDto, but possibly ALSO may come from other source?\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\t\r\n constructor(public who:string, GP: ProjectDto, LP?: ProjectLogInfoDto) {\r\n\t\t// GlobalProject, LocalProject GP/LP.\r\n this.id = GP.id,\r\n this.instancesInTotal = LP?.instancesInTotal,\r\n this.instancesInSync = LP?.instancesInSync,\r\n this.typesInTotal = LP?.typesInTotal,\r\n this.typesInSync = LP?.typesInSync,\r\n this.syncDate = LP?.syncDate,\r\n this.with3d = LP?.with3d,\r\n this.revitVersion = LP?.revitVersion,\r\n this.name = GP.name,\r\n this.region = GP.region,\r\n this.number = GP.number,\r\n this.typeId = GP.typeId,\r\n this.classificationId = GP.classificationId;\r\n\r\n\t\tthis.modelSource = '';\r\n\t\tif (GP.modelSource) {\r\n\t\t\tthis.modelSource = GP.modelSource;\r\n\t\t\t//TMI console.log('modelSource from GLOBAL:', GP.modelSource);\r\n\t\t}\r\n\t\tif (LP?.modelSource) {\r\n\t\t\tthis.modelSource = LP.modelSource;\r\n\t\t\t//TMI console.log('modelSource from LOCAL:', LP.modelSource, LP.id);\r\n\t\t}\r\n\t\tif (GP.modelSource == undefined && LP?.modelSource == undefined) {\r\n\t\t\t//TMI console.warn('no modelSource on neither GP nor LP', LP?.id);\r\n\t\t}\r\n\r\n this.whitelistId = GP.whitelistId;\r\n this.grossArea = GP.grossArea,\r\n this.imageFileId = GP.imageFileId,\r\n this.ownerCompanyId = GP.ownerCompanyId,\r\n this.ownerCompanyName = GP.ownerCompanyName,\r\n this.location = GP.location,\r\n this.facilityManager = GP.facilityManager,\r\n this.members = GP.members,\r\n this.projectInvitations = GP.projectInvitations,\r\n this.selected = GP.selected,\r\n this.created_UTC = GP.created_UTC\r\n }\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//import {ErrorService} from \"./error-service\";\r\n\r\n@autoinject\r\nexport class ProjectTokenService {\r\n constructor() {}\r\n\r\n public doesTokenMatchLog(projectId: string, token: string, who:string): void {//ub:buildProjectConfig\r\n\t\tlet decoded:any = jwt_decode(token);\r\n\t\t//console.log('doesTokenMatchLog, decoded:', decoded);\r\n if (decoded.ProjectId == projectId) {\r\n\t\t\tconst token_snippet = token.substring(0,11);\r\n // TMI: console.log(who,\"doesTokenMatchLog, token does match with selected projectId\", projectId, token); // TMI, we don't need info for 'happy path'.\r\n //console.log(who,\"doesTokenMatchLog, token DOES match with selected projectId\", projectId, token_snippet+'...'); // we don't need info for 'happy path'.\r\n } else {\r\n console.warn(who,\"doesTokenMatchLog, token does NOT match with selected projectId\",decoded.ProjectId, projectId);\r\n }\r\n\t}\r\n\r\n\tasync anyFreshPrjToken(projectId: string | undefined, apiClient: ApiClient):Promise {\r\n\t\t// (needed, IF the projectId we want, is NOT what the cached-token holds.)\r\n\t\tconst updateIfNeeded = await this.updatePrjTokenIfNeeded(projectId, apiClient);\r\n\t\treturn updateIfNeeded ? this.getPrjTokenInfo() : null;\r\n\t}\r\n\r\n public async updatePrjTokenIfNeeded(projectId: string | undefined, apiClient: ApiClient): Promise { // UB: .. many\r\n if (projectId == undefined) {\r\n console.log(`pts, updatePrjTokenIfNeeded, removing ${ApiClient.PRJ_ACCESS_TOKEN}, no project-set`);//updatePrjTokenIfNeeded_MSG\r\n sessionStorage.removeItem(ApiClient.PRJ_ACCESS_TOKEN);//updatePrjTokenIfNeeded,DEL.\r\n return true;\r\n }\r\n\r\n let token: string | null = sessionStorage.getItem(ApiClient.PRJ_ACCESS_TOKEN);//updatePrjTokenIfNeeded,READ.\r\n if (token != null) { \r\n let decoded:any = jwt_decode(token);\r\n if (decoded.ProjectId == projectId) {\r\n\t\t\t\tconsole.warn(\"updatePrjTokenIfNeeded: project-id already match with prj-token\",projectId); // TMI, we don't need info for \r\n\t\t\t\treturn false;\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn(`updatePrjTokenIfNeeded: prj-token ${decoded.ProjectId} did not match intended prj:${projectId}, so we make a new one.`); \r\n\t\t\t}\r\n } else {\r\n console.warn(\"(no cached token was found)\"); \r\n }\r\n return await this.createNewProjectToken(projectId, apiClient,'updatePrjTokenIfNeeded');//updatePrjTokenIfNeeded\r\n }\r\n \r\n public async createNewProjectToken(projectId: string, apiClient: ApiClient, who:string): Promise { // UB2: updatePrjTokenIfNeeded and nav.createAndUpdatePrjToken.\r\n let justUseDefaultApiUrl = \"\";\r\n\t\tlet result = await apiClient.custom(justUseDefaultApiUrl).get(`/Authentication/RefreshTokenWithProject/${projectId}`) // in createNewProjectToken\r\n\t\t\t.handleErrorWithErrorService(async(service) => console.log(\"createNewProjectToken: Error when getting token\")).response();\r\n\t\t\r\n\t\tif (result.statusCode === 401) {\t// Cannot create token for project that the users is not a member of\r\n\t\t\tconsole.log(who,\"createNewProjectToken: Error when getting token: 401 Unauthorized\", projectId);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\tsessionStorage.setItem(ApiClient.PRJ_ACCESS_TOKEN, result.content);//createNewProjectToken_WRITE\r\n console.log(who,\"createNewProjectToken: updated prj-token \" , projectId, result.content);\r\n return result.statusCode == 200;\r\n }\r\n\r\n public getPrjTokenInfo(): ProjectTokenInfo {\r\n let token: string | null = sessionStorage.getItem(ApiClient.PRJ_ACCESS_TOKEN);//getPrjTokenInfo,READ.\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}\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","omap","Map","this","projects","forEach","project","listOfProjects","get","ownerCompanyId","undefined","push","set","orgToProjectMap","console","log","fetchProjectInfo","has_orgToProjectMap","warn","the_keys","keys","orgIdList","Array","from","orgId","fetchProjectInfoByOrg","createFullProjectDataList","map","globalPrj","matchingIdProject","find","localPrj","id","FullProjectInfo","projectIds","length","orgApiClient","orgById","result","postJson","handleErrorWithErrorService","async","responseNoLoadingIcon","statusCode","content1","content","fetchProjectInfoByProjectId","projectDto","autoinject","who","GP","LP","instancesInTotal","instancesInSync","typesInTotal","typesInSync","syncDate","with3d","revitVersion","name","region","number","typeId","classificationId","modelSource","whitelistId","grossArea","imageFileId","ownerCompanyName","location","facilityManager","members","projectInvitations","selected","created_UTC","ProjectTokenService","doesTokenMatchLog","projectId","token","decoded","ProjectId","substring","anyFreshPrjToken","updatePrjTokenIfNeeded","getPrjTokenInfo","PRJ_ACCESS_TOKEN","sessionStorage","removeItem","getItem","createNewProjectToken","custom","service","response","setItem","prjRole","Unknown","prjId","orgRole","projectRoleString","ProjectRole","orgRoleString","OrgRole","projectRole","OrgId","QtoExportService","api","sMediator","i18n","events","exportToExcel","publish","quantityFilterName","selectedQF","handleError","tr","downloadFile","e","exportToExcelPivot","I18N","EventAggregator"],"sourceRoot":""}