{"version":3,"sources":["webpack:///./src/components/kpi-reports/kpi-reports.ts","webpack:///./src/components/kpi-reports/kpi-reports.html","webpack:///./src/components/manage-organization-users/manage-organization-users.ts","webpack:///./src/components/manage-organization-users/manage-organization-users.html","webpack:///./src/components/manage-organizations/manage-organizations.ts","webpack:///./src/components/manage-organizations/manage-organizations.html","webpack:///./src/components/organization-create/organization-create.ts","webpack:///./src/components/organization-create/organization-create.html","webpack:///./src/components/organization-edit/organization-edit.ts","webpack:///./src/components/organization-edit/organization-edit.html","webpack:///./src/components/organization-user-create/organization-user-create.ts","webpack:///./src/components/organization-user-create/organization-user-create.html","webpack:///./src/components/manage-organizations/OrganizationGridItem.ts"],"names":["allReportService","signalr","authService","storage","dialogService","reportingPeriodService","searchStorageKey","reportingPeriodsSub","selectedReportingPeriodSub","reportingPeriods","isReset","isChartVisible","isGeneratingKpi","signalreventhandlers","initializeMemberGaugeChart","Chart","window","value","getRandomNumber","memberGaugeChart","memberGaugeCanvas","gaugeConfig","detachMemberGaugeChart","destroy","initializeAmGaugeChart","amGaugeChart","amGaugeCanvas","detachAmGaugeChart","initializePmGaugeChart","pmGaugeChart","pmGaugeCanvas","detachPmGaugeChart","initializeBmGaugeChart","bmGaugeChart","bmGaugeCanvas","detachBmGaugeChart","initializeWmGaugeChart","wmGaugeChart","wmGaugeCanvas","detachWmGaugeChart","initializeDmGaugeChart","dmGaugeChart","dmGaugeCanvas","detachDmGaugeChart","initializeAllGaugeCharts","detachAllGaugeCharts","data","chartTitle","type","labels","datasets","label","minValue","backgroundColor","borderWidth","options","legend","display","position","generateLabels","responsive","title","text","layout","padding","bottom","needle","radiusPercentage","widthPercentage","lengthPercentage","color","valueLabel","fontSize","formatter","context","plugins","datalabels","chart","dataIndex","font","innerRadius","Math","round","weight","size","this","kpiReportSearchTerms","get","attached","key","hasOwnProperty","on","detached","off","generateKpi","set","reset","resetToDefault","organization","selectedOrganizationChanged","newValue","oldValue","loadYears","getReportingPeriodsToCreatePlan","allReportingPeriods","filter","r","reportingFrequency","Yearly","min","max","floor","random","KpiReports","of","module","exports","organizationUserService","organizationUserSearchTerms","undefined","mapDtoToGridItem","dto","OrganizationUserGridItem","id","username","role","timestamp","isSystemAdmin","onOrganizationUserDeleted","organizationUserId","deletedItemIndex","grid","items","findIndex","item","isDeleting","splice","toastr","success","onOrganizationUserDeleteFailed","e","error","$values","join","search","locale","format","minYear","autoUpdateInput","showDropdowns","timePicker","timePickerSeconds","singleDatePicker","showAll","searchAllRecords","searchUsers","page","clearSearch","quickSearch","deleteConfirmed","delete","deleteConfirmationDialog","open","viewModel","model","whenClosed","response","wasCancelled","ManageOrganizationUsers","isSysAdmin","organizationService","organizationSearchTerms","viewList","viewPrimaryGraph","viewSecondaryGraph","parentDescriptions","parents","length","map","p","description","organizationType","organizationTypeDescription","reportingFrequencyDescription","details","onOrganizationCreated","gridItem","unshift","searchResult","pagingData","totalRecords","onOrganizationUpdated","index","org","onOrganizationDeleted","organizationId","onOrganizationCreateFailed","onOrganizationUpdateFailed","onOrganizationDeleteFailed","show","showGraph","parentIndex","height","i","Unit","primaryOrNonPrimaryParentId","toString","orgDescription","push","parent","name","inverted","marginBottom","align","series","tooltip","pointFormat","marker","radius","increaseHeight","container","document","getElementById","getComputedStyle","getPropertyValue","split","newHeight","parseInt","decreaseHeight","searchOrganizations","ManageOrganizations","router","selectedParents","availableParents","isCreatingOrganization","isSearching","nodatafound","loadAvailableParents","getAvailableParents","message","createOrganization","create","selectedOrganizationType","selectedReportingFrequency","includes","organizationid","navigate","OrganizationCreate","isUpdatingOrganization","reload","activate","params","loadOrganization","getOrganization","save","update","OrganizationEdit","isCreatingOrganizationUser","filterText","myorganizations","organizations","forEach","afterSearching","createOrganizationUser","selectedOrganizationRoleType","getOrganizationReference","selectedOrganization","selectOrganization","loadOrganizations","onOrganizationUserCreated","onOrganizationUserCreateFailed","trim","toLowerCase","desc","orgType","itemindex","Central","State","Zone","OrganizationUserCreate"],"mappings":"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","file":"app~822c24a6.14ccf00ec8c51a5869c4.chunk.js","sourcesContent":["import { DialogService, DialogSettings } from \"aurelia-dialog\";\r\nimport { inject, autoinject, NewInstance } from \"aurelia-framework\";\r\nimport { AllKpiReportService } from \"../../services/AllKpiReportsService\";\r\nimport { KpiReportSearchTerms } from \"models/KpiReportSearchTerms\";\r\nimport { SignalrWrapper } from \"signalrwrapper\";\r\nimport { AuthService } from \"auth-service\";\r\nimport { BrowserStorage } from \"../../utils/browserStorage\";\r\nimport { ReportingPeriodViewModel } from \"models/ReportingPeriodViewModel\";\r\nimport { ReportingPeriodService } from \"services/ReportingPeriodService\";\r\nimport { ReportingFrequency } from \"models/ReportingFrequency\";\r\n\r\n@inject(\r\n AllKpiReportService,\r\n SignalrWrapper,\r\n AuthService,\r\n NewInstance.of(BrowserStorage, [\"KpiReports\"]),\r\n DialogService)\r\nexport class KpiReports {\r\n\r\n private storage: BrowserStorage;\r\n private searchStorageKey: string = \"searchTerms\";\r\n private kpiReportSearchTerms: KpiReportSearchTerms;\r\n\r\n private memberGaugeChart: Chart | undefined;\r\n private memberGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private amGaugeChart: Chart | undefined;\r\n private amGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private pmGaugeChart: Chart | undefined;\r\n private pmGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private bmGaugeChart: Chart | undefined;\r\n private bmGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private wmGaugeChart: Chart | undefined;\r\n private wmGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private dmGaugeChart: Chart | undefined;\r\n private dmGaugeCanvas: HTMLCanvasElement | undefined;\r\n\r\n private reportingPeriodsSub: string[] = [\"2022-Yearly Oct 2022 to Sep 2023\", \"2023-Yearly Oct 2023 to Sep 2024\", \"2024-Yearly Oct 2024 to Sep 2025 (Active)\", \"2025-Yearly Oct 2025 to Sep 2026\"];\r\n private selectedReportingPeriodSub = \"2024-Yearly Oct 2024 to Sep 2025 (Active)\";\r\n reportingPeriods: ReportingPeriodViewModel[] = [];\r\n selectedReportingPeriod: ReportingPeriodViewModel;\r\n\r\n\r\n isReset = false;\r\n isChartVisible = false;\r\n isGeneratingKpi = false;\r\n signalreventhandlers: any = {};\r\n constructor(public allReportService: AllKpiReportService,\r\n public signalr: SignalrWrapper,\r\n public authService: AuthService,\r\n storage: BrowserStorage,\r\n public dialogService: DialogService, public reportingPeriodService: ReportingPeriodService) {\r\n this.signalreventhandlers = {\r\n };\r\n\r\n this.storage = storage;\r\n this.kpiReportSearchTerms = new KpiReportSearchTerms(this.storage.get(this.searchStorageKey))\r\n\r\n }\r\n\r\n async attached() {\r\n\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n\r\n }\r\n\r\n detached() {\r\n\r\n this.detachAmGaugeChart();\r\n\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n \r\n }\r\n\r\n initializeMemberGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(60,70);\r\n var chartTitle = \"Member Increase Target Vs Actual\"\r\n this.memberGaugeChart = new Chart(this.memberGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachMemberGaugeChart = () =>{\r\n if (this.memberGaugeChart) {\r\n this.memberGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializeAmGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(70, 85);\r\n var chartTitle = \"AM Increase Target Vs Actual\"\r\n this.amGaugeChart = new Chart(this.amGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachAmGaugeChart = () =>{\r\n if (this.amGaugeChart) {\r\n this.amGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializePmGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(75,95);\r\n var chartTitle = \"PM Increase Target Vs Actual\"\r\n this.pmGaugeChart = new Chart(this.pmGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachPmGaugeChart = () =>{\r\n if (this.pmGaugeChart) {\r\n this.pmGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializeBmGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(60,80);\r\n var chartTitle = \"BM Increase Target Vs Actual\"\r\n this.bmGaugeChart = new Chart(this.bmGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachBmGaugeChart = () =>{\r\n if (this.bmGaugeChart) {\r\n this.bmGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializeWmGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(70, 85);\r\n var chartTitle = \"Worker Meeting Target Vs Actual\"\r\n this.wmGaugeChart = new Chart(this.wmGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachWmGaugeChart = () =>{\r\n if (this.wmGaugeChart) {\r\n this.wmGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializeDmGaugeChart = () =>{\r\n const Chart = (window as any).Chart;\r\n var data = [25, 50, 75, 100];\r\n var value = this.getRandomNumber(50,70);\r\n var chartTitle = \" Dawah Meeting Target Vs Actual\"\r\n this.dmGaugeChart = new Chart(this.dmGaugeCanvas, this.gaugeConfig(data, value, chartTitle));\r\n }\r\n\r\n detachDmGaugeChart = () =>{\r\n if (this.dmGaugeChart) {\r\n this.dmGaugeChart.destroy();\r\n }\r\n }\r\n\r\n initializeAllGaugeCharts = () =>{\r\n this.initializeMemberGaugeChart();\r\n this.initializeAmGaugeChart();\r\n this.initializePmGaugeChart();\r\n this.initializeBmGaugeChart();\r\n this.initializeWmGaugeChart();\r\n this.initializeDmGaugeChart();\r\n }\r\n\r\n detachAllGaugeCharts = () =>{\r\n this.detachMemberGaugeChart();\r\n this.detachAmGaugeChart();\r\n this.detachPmGaugeChart();\r\n this.detachBmGaugeChart();\r\n this.detachWmGaugeChart();\r\n this.detachDmGaugeChart();\r\n }\r\n\r\n gaugeConfig = (data, value, chartTitle) =>{\r\n\r\n var config = {\r\n type: \"gauge\",\r\n data: {\r\n labels: [\"Poor\", \"Fair\", \"Good\", \"Very Good\"],\r\n datasets: [\r\n {\r\n label: \"\",\r\n data: data,\r\n value: value,\r\n minValue: 0,\r\n backgroundColor: [\"#fc5b5b\", \"orange\", \"yellow\", \"#1c9e46\"],//\"#5bd97d\"\r\n borderWidth: 2\r\n }\r\n ]\r\n },\r\n options: {\r\n legend: {\r\n display: false,\r\n position: \"bottom\",\r\n labels: {\r\n generateLabels: {}\r\n }\r\n },\r\n responsive: true,\r\n title: {\r\n display: true,\r\n text: chartTitle,\r\n position: \"bottom\",\r\n },\r\n layout: {\r\n padding: {\r\n bottom: 30\r\n }\r\n },\r\n needle: {\r\n radiusPercentage: 1,\r\n widthPercentage: 1,\r\n lengthPercentage: 60,\r\n color: \"rgba(0, 0, 0, 1)\"\r\n },\r\n valueLabel: {\r\n fontSize: 15,\r\n formatter: function (value, context) {\r\n return value + \"%\";\r\n },\r\n color: \"white\",\r\n backgroundColor:\"#6c7a6e\"\r\n\r\n },\r\n plugins: {\r\n datalabels: {\r\n display: \"auto\",\r\n formatter: function (value, context) {\r\n return context.chart.data.labels[context.dataIndex];\r\n },\r\n color: function (context) {\r\n return \"#2d2d2e\";\r\n },\r\n font: function (context) {\r\n var innerRadius = Math.round(context.chart.innerRadius);\r\n var size = Math.round(innerRadius / 8);\r\n \r\n return {\r\n weight: \"normal\",\r\n size: size\r\n };\r\n }\r\n }\r\n }\r\n }\r\n };\r\n return config;\r\n }\r\n\r\n \r\n async generateKpi(){\r\n this.initializeAllGaugeCharts();\r\n this.isChartVisible = true;\r\n this.storage.set(\"searchTerms\", this.kpiReportSearchTerms);\r\n }\r\n\r\n async reset() {\r\n this.isReset = true;\r\n this.kpiReportSearchTerms.resetToDefault();\r\n this.detachAllGaugeCharts();\r\n this.isReset = false;\r\n this.isChartVisible = false;\r\n this.selectedReportingPeriodSub = \"2024-Yearly Oct 2024 to Sep 2025 (Active)\";\r\n }\r\n \r\n\r\n get canGenerateKpi() {\r\n if (this.kpiReportSearchTerms.organization) \r\n return true;\r\n }\r\n\r\n get canReset() {\r\n if (this.kpiReportSearchTerms.organization) \r\n return true;\r\n }\r\n\r\n selectedOrganizationChanged(newValue, oldValue) {\r\n this.loadYears();\r\n }\r\n \r\n\r\n async loadYears() {\r\n const allReportingPeriods = await this.reportingPeriodService.getReportingPeriodsToCreatePlan(this.kpiReportSearchTerms.organization);\r\n this.reportingPeriods = allReportingPeriods.filter(r => r.reportingFrequency === ReportingFrequency.Yearly);\r\n }\r\n\r\n getRandomNumber(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { DialogService, DialogSettings } from \"aurelia-dialog\";\r\nimport { inject, autoinject } from \"aurelia-framework\";\r\nimport $ from \"jquery\";\r\nimport moment from \"moment\";\r\nimport { OrganizationUserService } from \"../../services/OrganizationUserService\";\r\nimport { OrganizationUserSearchTerms } from \"models/OrganizationUserSearchTerms\";\r\nimport { OrganizationUserViewModelDto } from \"models/OrganizationUserViewModelDto\";\r\nimport { Grid } from \"resources/grid/grid\";\r\nimport { EntityReference } from \"models/EntityReference\";\r\nimport { AuthService } from \"auth-service\";\r\nimport { SignalrWrapper } from \"signalrwrapper\";\r\nimport { YesNoDialog } from \"../../resources/yes-no-dialog/yes-no-dialog\"\r\nimport { YesNo } from \"../../resources/yes-no-dialog/YesNo\";\r\n\r\n@autoinject\r\nexport class ManageOrganizationUsers {\r\n organizationUserSearchTerms = new OrganizationUserSearchTerms(undefined, 1, 10);\r\n grid: Grid;\r\n signalreventhandlers: any = {};\r\n\r\n\r\n constructor(public organizationUserService: OrganizationUserService,\r\n public signalr: SignalrWrapper,\r\n public authService: AuthService,\r\n public dialogService: DialogService) {\r\n \r\n this.signalreventhandlers = {\r\n \"OrganizationUserDeleted\": this.onOrganizationUserDeleted,\r\n \"OrganizationUserDeleteFailed\": this.onOrganizationUserDeleteFailed\r\n };\r\n\r\n this.grid = new Grid(this.organizationUserSearchTerms,\r\n this.organizationUserService.search, this.mapDtoToGridItem);\r\n \r\n }\r\n\r\n async attached() {\r\n const options: any = {\r\n locale: {\r\n format: 'DD/M/YYYY hh:mm:ss A'\r\n },\r\n minYear: 2019,\r\n autoUpdateInput: false, // initially empty\r\n showDropdowns: true,\r\n timePicker: true,\r\n timePickerSeconds: true,\r\n singleDatePicker: true\r\n };\r\n\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n \r\n await this.grid.search();\r\n }\r\n\r\n async showAll() {\r\n this.grid = new Grid(this.organizationUserSearchTerms,\r\n this.organizationUserService.searchAllRecords, this.mapDtoToGridItem);\r\n\r\n await this.grid.search();\r\n }\r\n\r\n detached() {\r\n for(const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n }\r\n\r\n mapDtoToGridItem = (dto: OrganizationUserViewModelDto) => {\r\n return new OrganizationUserGridItem(\r\n dto.id,\r\n dto.username,\r\n dto.role,\r\n dto.organization,\r\n dto.timestamp,\r\n false,\r\n this.authService ? this.authService.isSystemAdmin : false\r\n );\r\n\r\n }\r\n\r\n get canDelete() {\r\n return this.authService.isSystemAdmin == true;\r\n }\r\n\r\n async searchUsers() {\r\n this.organizationUserSearchTerms.page = 1;\r\n this.grid = new Grid(\r\n this.organizationUserSearchTerms,\r\n this.organizationUserService.search,\r\n this.mapDtoToGridItem\r\n );\r\n await this.grid.search();\r\n }\r\n\r\n async clearSearch() {\r\n this.organizationUserSearchTerms.quickSearch = undefined;\r\n this.organizationUserSearchTerms.page = 1;\r\n this.grid = new Grid(\r\n this.organizationUserSearchTerms,\r\n this.organizationUserService.search,\r\n this.mapDtoToGridItem\r\n );\r\n await this.grid.search();\r\n }\r\n\r\n async deleteConfirmed(item: OrganizationUserGridItem) {\r\n await this.organizationUserService.delete(item.id);\r\n item.isDeleting = true;\r\n return;\r\n }\r\n\r\n async deleteConfirmationDialog(item: OrganizationUserGridItem) {\r\n await this.dialogService.open({\r\n viewModel: YesNoDialog,\r\n model: new YesNo(\"Are you sure you want to delete?\", \"This operation cannot be undone.\")\r\n }).whenClosed((response) => {\r\n if (response.wasCancelled) {\r\n return;\r\n } else {\r\n return this.deleteConfirmed(item);\r\n }\r\n });\r\n }\r\n\r\n async delete(item: OrganizationUserGridItem) {\r\n return this.deleteConfirmationDialog(item);\r\n }\r\n\r\n onOrganizationUserDeleted = (organizationUserId: number) => {\r\n const deletedItemIndex = this.grid.items.findIndex(item => item.id === organizationUserId);\r\n if (deletedItemIndex !== -1) {\r\n this.grid.items[deletedItemIndex].isDeleting = false;\r\n this.grid.items.splice(deletedItemIndex, 1);\r\n }\r\n toastr.success(\"Deleted successfully\");\r\n }\r\n\r\n onOrganizationUserDeleteFailed = (e: { $values: string[] }) => {\r\n toastr.error(e.$values.join(\", \"));\r\n }\r\n}\r\n\r\nexport class OrganizationUserGridItem {\r\n constructor(public id: number, \r\n public username: string,\r\n public role: string,\r\n public organization: EntityReference,\r\n public timestamp: Date,\r\n public isDeleting: boolean,\r\n public isSysAdmin: boolean) { }\r\n}\r\n","module.exports = \"\\r\\n\";","import { DialogService, DialogSettings } from \"aurelia-dialog\";\r\nimport { inject, autoinject } from \"aurelia-framework\";\r\nimport $ from \"jquery\";\r\nimport moment from \"moment\";\r\nimport { OrganizationService } from \"../../services/OrganizationService\";\r\nimport { OrganizationSearchTerms } from \"models/OrganizationSearchTerms\";\r\nimport { OrganizationType } from \"models/OrganizationType\";\r\nimport { OrganizationViewModelDto } from \"models/OrganizationViewModelDto\";\r\nimport { OrganizationGridItem } from \"./OrganizationGridItem\";\r\nimport { Grid } from \"resources/grid/grid\";\r\nimport { AuthService } from \"auth-service\";\r\nimport { SignalrWrapper } from \"signalrwrapper\";\r\nimport { YesNoDialog } from \"../../resources/yes-no-dialog/yes-no-dialog\"\r\nimport { YesNo } from \"../../resources/yes-no-dialog/YesNo\";\r\n\r\nimport Highcharts from 'highcharts';\r\nimport addMore from \"highcharts/highcharts-more\";\r\nimport addDrilldown from \"highcharts/modules/drilldown\";\r\nimport addNoData from \"highcharts/modules/no-data-to-display\";\r\nimport addTreemap from \"highcharts/modules/treemap\";\r\nimport addTreegraph from \"highcharts/modules/treegraph\";\r\nimport addAccesibility from \"highcharts/modules/accessibility\";\r\nimport addExporting from \"highcharts/modules/exporting\";\r\n\r\n\r\n@autoinject\r\nexport class ManageOrganizations {\r\n organizationSearchTerms = new OrganizationSearchTerms(undefined, undefined, 1, 10);\r\n grid: Grid;\r\n signalreventhandlers: any = {};\r\n viewList: boolean = true;\r\n viewPrimaryGraph: boolean = false;\r\n viewSecondaryGraph: boolean = false;\r\n\r\n constructor(public organizationService: OrganizationService,\r\n public signalr: SignalrWrapper,\r\n public authService: AuthService,\r\n public dialogService: DialogService) {\r\n this.signalreventhandlers = {\r\n \"OrganizationCreated\": this.onOrganizationCreated,\r\n \"OrganizationUpdated\": this.onOrganizationUpdated,\r\n \"OrganizationDeleted\": this.onOrganizationDeleted,\r\n \"OrganizationCreateFailed\": this.onOrganizationCreateFailed,\r\n \"OrganizationUpdateFailed\": this.onOrganizationUpdateFailed,\r\n \"OrganizationDeleteFailed\": this.onOrganizationDeleteFailed\r\n };\r\n\r\n this.grid = new Grid(\r\n this.organizationSearchTerms,\r\n this.organizationService.search,\r\n this.mapDtoToGridItem\r\n );\r\n }\r\n\r\n async attached() {\r\n const options: any = {\r\n locale: {\r\n format: 'DD/M/YYYY hh:mm:ss A'\r\n },\r\n minYear: 2019,\r\n autoUpdateInput: false, // initially empty\r\n showDropdowns: true,\r\n timePicker: true,\r\n timePickerSeconds: true,\r\n singleDatePicker: true\r\n };\r\n\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n \r\n await this.grid.search();\r\n }\r\n\r\n async show() {\r\n this.grid = new Grid(\r\n this.organizationSearchTerms,\r\n this.organizationService.search,\r\n this.mapDtoToGridItem\r\n );\r\n\r\n await this.grid.search();\r\n\r\n addMore(Highcharts)\r\n addDrilldown(Highcharts)\r\n addNoData(Highcharts)\r\n addTreemap(Highcharts)\r\n addTreegraph(Highcharts)\r\n addAccesibility(Highcharts)\r\n addExporting(Highcharts)\r\n\r\n var chart = Highcharts.chart('highcharts-container', {});\r\n chart.destroy();\r\n\r\n this.viewList = true;\r\n this.viewPrimaryGraph = false;\r\n this.viewSecondaryGraph = false;\r\n }\r\n\r\n async showAll() {\r\n this.grid = new Grid(\r\n this.organizationSearchTerms,\r\n this.organizationService.searchAllRecords,\r\n this.mapDtoToGridItem\r\n );\r\n\r\n await this.grid.search();\r\n\r\n this.viewList = true;\r\n this.viewPrimaryGraph = false;\r\n this.viewSecondaryGraph = false;\r\n }\r\n\r\n async showGraph(parentIndex: number, height: number) {\r\n this.grid = new Grid(\r\n this.organizationSearchTerms,\r\n this.organizationService.searchAllRecords,\r\n this.mapDtoToGridItem\r\n );\r\n\r\n await this.grid.search();\r\n\r\n addMore(Highcharts)\r\n addDrilldown(Highcharts)\r\n addNoData(Highcharts)\r\n addTreemap(Highcharts)\r\n addTreegraph(Highcharts)\r\n addAccesibility(Highcharts)\r\n addExporting(Highcharts)\r\n\r\n const data = [];\r\n for (var i = 0; i < this.grid.items.length; i++) {\r\n var orgDescription;\r\n const gridItem = this.grid.items[i];\r\n var primaryOrNonPrimaryParentId;\r\n\r\n // For tree graph visualization, use first/second parent only.\r\n //\r\n // Note: TreeGraph doesn't support DAG (multiple parents), so we show only the\r\n // first/second parent.\r\n //\r\n // Append the number of parents information to the Unit to verify if\r\n // there is any inconsistency of the number of parents for Unit\r\n // or not\r\n if (gridItem.organizationType === OrganizationType.Unit){\r\n // An Unit may have single or multiple parents\r\n primaryOrNonPrimaryParentId = gridItem.parents && gridItem.parents.length > parentIndex\r\n ? gridItem.parents[parentIndex].id.toString() : '';\r\n orgDescription = \"[\" + gridItem.parents.length + \"] \" + gridItem.description.toString();\r\n }\r\n else {\r\n // A non-Unit can have a maximum of 1 parent \r\n primaryOrNonPrimaryParentId = gridItem.parents && gridItem.parents.length == 1\r\n ? gridItem.parents[0].id.toString() : '';\r\n orgDescription = gridItem.description.toString();\r\n }\r\n\r\n data.push({\r\n id: gridItem.id.toString(),\r\n parent: primaryOrNonPrimaryParentId,\r\n name: orgDescription\r\n });\r\n }\r\n\r\n Highcharts.chart('highcharts-container', {\r\n chart: {\r\n inverted: false,\r\n height: height,\r\n marginBottom: 0\r\n },\r\n title: {\r\n text: 'Organisation Graph',\r\n align: 'center'\r\n },\r\n series: [\r\n {\r\n data,\r\n tooltip: {\r\n pointFormat: '{point.name}'\r\n },\r\n marker: {\r\n radius: 6\r\n },\r\n type: 'treegraph',\r\n }\r\n ]\r\n });\r\n\r\n this.viewList = false;\r\n\r\n if (parentIndex == 0) {\r\n this.viewPrimaryGraph = true;\r\n this.viewSecondaryGraph = false;\r\n }\r\n else {\r\n this.viewPrimaryGraph = false;\r\n this.viewSecondaryGraph = true;\r\n }\r\n }\r\n\r\n increaseHeight(parentIndex: number) {\r\n var container = document.getElementById('highcharts-container');\r\n var styles = getComputedStyle(container);\r\n var height = styles.getPropertyValue('height').split('px')[0];\r\n var newHeight = parseInt(height) + 1000;\r\n\r\n this.showGraph(parentIndex, newHeight);\r\n }\r\n\r\n decreaseHeight(parentIndex: number) {\r\n var container = document.getElementById('highcharts-container');\r\n var styles = getComputedStyle(container);\r\n var height = styles.getPropertyValue('height').split('px')[0];\r\n var newHeight = parseInt(height) - 1000 < 400 ? 400 : parseInt(height) - 1000;\r\n\r\n this.showGraph(parentIndex, newHeight);\r\n }\r\n\r\n detached() {\r\n for(const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n }\r\n\r\n mapDtoToGridItem = (dto: OrganizationViewModelDto) => {\r\n // Generate comma-separated list of parent descriptions\r\n const parentDescriptions = dto.parents && dto.parents.length > 0\r\n ? dto.parents.map(p => p.description).join(', ')\r\n : '';\r\n\r\n return new OrganizationGridItem(\r\n dto.id,\r\n dto.organizationType,\r\n dto.organizationTypeDescription,\r\n dto.description,\r\n dto.reportingFrequency,\r\n dto.reportingFrequencyDescription,\r\n dto.parents,\r\n parentDescriptions,\r\n dto.timestamp,\r\n false,\r\n this.authService ? this.authService.isSystemAdmin : false,\r\n dto.details\r\n );\r\n }\r\n\r\n get isViewList() {\r\n return this.viewList;\r\n }\r\n\r\n get isViewPrimaryGraph() {\r\n return this.viewPrimaryGraph;\r\n }\r\n\r\n get isViewSecondaryGraph() {\r\n return this.viewSecondaryGraph;\r\n }\r\n\r\n get canDelete() {\r\n return this.authService.isSystemAdmin == true;\r\n }\r\n\r\n async searchOrganizations() {\r\n this.organizationSearchTerms.page = 1;\r\n this.grid = new Grid(\r\n this.organizationSearchTerms,\r\n this.organizationService.search,\r\n this.mapDtoToGridItem\r\n );\r\n\r\n await this.grid.search();\r\n\r\n addMore(Highcharts)\r\n addDrilldown(Highcharts)\r\n addNoData(Highcharts)\r\n addTreemap(Highcharts)\r\n addTreegraph(Highcharts)\r\n addAccesibility(Highcharts)\r\n addExporting(Highcharts)\r\n\r\n var chart = Highcharts.chart('highcharts-container', {});\r\n chart.destroy();\r\n\r\n this.viewList = true;\r\n this.viewPrimaryGraph = false;\r\n this.viewSecondaryGraph = false;\r\n }\r\n\r\n async clearSearch() {\r\n this.organizationSearchTerms.quickSearch = undefined;\r\n this.organizationSearchTerms.page = 1;\r\n await this.show();\r\n }\r\n\r\n async deleteConfirmed(item: OrganizationGridItem) {\r\n await this.organizationService.delete(item.id);\r\n item.isDeleting = true;\r\n return;\r\n }\r\n\r\n async deleteConfirmationDialog(item: OrganizationGridItem) {\r\n await this.dialogService.open({\r\n viewModel: YesNoDialog,\r\n model: new YesNo(\"Are you sure you want to delete?\", \"This operation cannot be undone.\")\r\n }).whenClosed((response) => {\r\n if (response.wasCancelled) {\r\n return;\r\n } else {\r\n return this.deleteConfirmed(item);\r\n }\r\n });\r\n }\r\n\r\n async delete(item: OrganizationGridItem) {\r\n return this.deleteConfirmationDialog(item);\r\n }\r\n\r\n onOrganizationCreated = (data: OrganizationViewModelDto) => {\r\n // Map DTO to grid item (handles parents[] array)\r\n const gridItem = this.mapDtoToGridItem(data);\r\n // Add new organization to the start of the list\r\n this.grid.items.unshift(gridItem);\r\n // Update total count\r\n if (this.grid.searchResult && this.grid.searchResult.pagingData) {\r\n this.grid.searchResult.pagingData.totalRecords++;\r\n }\r\n toastr.success(\"Organization created successfully\");\r\n }\r\n\r\n onOrganizationUpdated = (data: OrganizationViewModelDto) => {\r\n // Find and update the organization in the list\r\n const index = this.grid.items.findIndex(org => org.id === data.id);\r\n if (index !== -1) {\r\n // Re-map to grid item with updated parents array\r\n this.grid.items[index] = this.mapDtoToGridItem(data);\r\n toastr.success(\"Organization updated successfully\");\r\n }\r\n }\r\n\r\n onOrganizationDeleted = (organizationId: number) => {\r\n const deletedItemIndex = this.grid.items.findIndex(item => item.id === organizationId);\r\n if (deletedItemIndex !== -1) {\r\n this.grid.items[deletedItemIndex].isDeleting = false;\r\n this.grid.items.splice(deletedItemIndex, 1);\r\n // Update total count\r\n if (this.grid.searchResult && this.grid.searchResult.pagingData) {\r\n this.grid.searchResult.pagingData.totalRecords--;\r\n }\r\n }\r\n toastr.success(\"Deleted successfully\");\r\n }\r\n\r\n onOrganizationCreateFailed = (e: { $values: string[] }) => {\r\n toastr.error(\"Create failed: \" + e.$values.join(\", \"));\r\n }\r\n\r\n onOrganizationUpdateFailed = (e: { $values: string[] }) => {\r\n toastr.error(\"Update failed: \" + e.$values.join(\", \"));\r\n }\r\n\r\n onOrganizationDeleteFailed = (e: { $values: string[] }) => {\r\n toastr.error(\"Delete failed: \" + e.$values.join(\", \"));\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import {autoinject} from \"aurelia-framework\";\r\nimport {AppRouter} from \"aurelia-router\";\r\nimport * as toastr from \"toastr\";\r\nimport {OrganizationType} from \"models/OrganizationType\";\r\nimport {OrganizationService} from \"services/OrganizationService\";\r\nimport {OrganizationViewModelDto} from \"models/OrganizationViewModelDto\";\r\nimport {SignalrWrapper} from \"signalrwrapper\";\r\nimport {EntityReference} from \"models/EntityReference\";\r\nimport { ReportingFrequency } from \"models/ReportingFrequency\";\r\n\r\n@autoinject\r\nexport class OrganizationCreate {\r\n description: string;\r\n details: string;\r\n selectedOrganizationType: OrganizationType;\r\n selectedReportingFrequency: ReportingFrequency;\r\n selectedParents: EntityReference[] = [];\r\n availableParents: EntityReference[] = [];\r\n\r\n isCreatingOrganization = false;\r\n signalreventhandlers: any = {};\r\n\r\n isSearching = false;\r\n items: OrganizationViewModelDto[] = [];\r\n nodatafound = false;\r\n\r\n constructor(public organizationService: OrganizationService,\r\n public signalr: SignalrWrapper,\r\n public router: AppRouter) {\r\n this.signalreventhandlers = {\r\n \"OrganizationCreated\": this.onOrganizationCreated,\r\n \"OrganizationCreateFailed\": this.onOrganizationCreateFailed,\r\n };\r\n }\r\n\r\n async attached() {\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n await this.loadAvailableParents();\r\n }\r\n\r\n loadAvailableParents = async () => {\r\n try {\r\n this.isSearching = true;\r\n this.availableParents = await this.organizationService.getAvailableParents();\r\n this.isSearching = false;\r\n } catch (error) {\r\n this.isSearching = false;\r\n toastr.error(\"Failed to load available parent organizations: \" + error.message);\r\n }\r\n }\r\n\r\n detached() {\r\n for(const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n }\r\n\r\n createOrganization = async () => {\r\n // Validate that at least one parent is selected\r\n if (!this.selectedParents || this.selectedParents.length === 0) {\r\n toastr.error(\"Please select at least one parent organization\");\r\n return;\r\n }\r\n\r\n try {\r\n this.isCreatingOrganization = true;\r\n await this.organizationService.create(\r\n this.description,\r\n this.details,\r\n this.selectedOrganizationType,\r\n this.selectedReportingFrequency,\r\n this.selectedParents\r\n );\r\n } catch (error) {\r\n this.isCreatingOrganization = false;\r\n if (error.message && (error.message.includes('cycle') || error.message.includes('circular'))) {\r\n toastr.error(\"Cannot save: This would create a circular hierarchy.\");\r\n } else {\r\n toastr.error(\"Failed to create organization: \" + error.message);\r\n }\r\n }\r\n }\r\n\r\n onOrganizationCreated = (organizationid: number) => {\r\n this.isCreatingOrganization = false;\r\n toastr.success(\"Organisation Created\");\r\n this.router.navigate(`manage-organizations`);\r\n }\r\n\r\n onOrganizationCreateFailed = (e: {$values: string[]}) => {\r\n this.isCreatingOrganization = false;\r\n toastr.error(e.$values.join(\", \"));\r\n }\r\n}\r\n","module.exports = \">\\r\\n\";","import {autoinject} from \"aurelia-framework\";\r\nimport {AppRouter} from \"aurelia-router\";\r\nimport * as toastr from \"toastr\";\r\nimport {OrganizationType} from \"models/OrganizationType\";\r\nimport {OrganizationService} from \"services/OrganizationService\";\r\nimport {OrganizationViewModelDto} from \"models/OrganizationViewModelDto\";\r\nimport {SignalrWrapper} from \"signalrwrapper\";\r\nimport {EntityReference} from \"models/EntityReference\";\r\nimport { ReportingFrequency } from \"models/ReportingFrequency\";\r\n\r\n@autoinject\r\nexport class OrganizationEdit {\r\n organizationId: number;\r\n organization: OrganizationViewModelDto;\r\n description: string;\r\n details: string;\r\n selectedOrganizationType: OrganizationType;\r\n selectedReportingFrequency: ReportingFrequency;\r\n selectedParents: EntityReference[] = [];\r\n availableParents: EntityReference[] = [];\r\n\r\n isUpdatingOrganization = false;\r\n signalreventhandlers: any = {};\r\n\r\n isSearching = false;\r\n items: OrganizationViewModelDto[] = [];\r\n nodatafound = false;\r\n\r\n constructor(public organizationService: OrganizationService,\r\n public signalr: SignalrWrapper,\r\n public router: AppRouter) {\r\n this.signalreventhandlers = {\r\n \"OrganizationUpdated\": this.onOrganizationUpdated,\r\n \"OrganizationUpdateFailed\": this.onOrganizationUpdateFailed,\r\n };\r\n }\r\n\r\n \r\n activate(params: {organizationId: number}) {\r\n this.organizationId = params.organizationId;\r\n }\r\n\r\n async attached() {\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n await this.loadOrganization();\r\n await this.loadAvailableParents();\r\n }\r\n\r\n detached() {\r\n for(const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n }\r\n\r\n loadAvailableParents = async () => {\r\n try {\r\n this.isSearching = true;\r\n // Exclude the current organization from available parents\r\n this.availableParents = await this.organizationService.getAvailableParents(this.organizationId);\r\n this.isSearching = false;\r\n } catch (error) {\r\n this.isSearching = false;\r\n toastr.error(\"Failed to load available parent organizations: \" + error.message);\r\n }\r\n }\r\n\r\n async loadOrganization() {\r\n try {\r\n const organization = await this.organizationService.getOrganization(this.organizationId);\r\n this.organization = organization;\r\n this.description = organization.description;\r\n this.details = organization.details;\r\n this.selectedOrganizationType = organization.organizationType;\r\n this.selectedReportingFrequency = organization.reportingFrequency;\r\n // Initialize selectedParents with current parents\r\n this.selectedParents = organization.parents ? [...organization.parents] : [];\r\n } catch (error) {\r\n toastr.error(\"Failed to load organization: \" + error.message);\r\n }\r\n }\r\n\r\n async reload() {\r\n await this.loadOrganization();\r\n await this.loadAvailableParents();\r\n }\r\n\r\n async save() {\r\n // Validate that at least one parent is selected\r\n if (!this.selectedParents || this.selectedParents.length === 0) {\r\n toastr.error(\"Please select at least one parent organization\");\r\n return;\r\n }\r\n\r\n try {\r\n this.isUpdatingOrganization = true;\r\n await this.organizationService.update(\r\n this.organization.id,\r\n this.description,\r\n this.details,\r\n this.selectedOrganizationType,\r\n this.selectedReportingFrequency,\r\n this.selectedParents\r\n );\r\n } catch (error) {\r\n this.isUpdatingOrganization = false;\r\n if (error.message && (error.message.includes('cycle') || error.message.includes('circular'))) {\r\n toastr.error(\"Cannot save: This would create a circular hierarchy.\");\r\n } else {\r\n toastr.error(\"Failed to update organization: \" + error.message);\r\n }\r\n }\r\n }\r\n\r\n onOrganizationUpdated = (organizationId: number) => {\r\n this.isUpdatingOrganization = false;\r\n toastr.success(\"Organisation Updated\");\r\n this.reload();\r\n }\r\n\r\n onOrganizationUpdateFailed = (e: {$values: string[]}) => {\r\n this.isUpdatingOrganization = false;\r\n toastr.error(e.$values.join(\", \"));\r\n }\r\n}\r\n","module.exports = \">\";","import {autoinject} from \"aurelia-framework\";\r\nimport {AppRouter} from \"aurelia-router\";\r\nimport * as toastr from \"toastr\";\r\nimport {OrganizationType} from \"models/OrganizationType\";\r\nimport {OrganizationRoleType} from \"models/OrganizationRoleType\";\r\nimport {OrganizationService} from \"services/OrganizationService\";\r\nimport {OrganizationViewModelDto} from \"models/OrganizationViewModelDto\";\r\nimport {SignalrWrapper} from \"signalrwrapper\";\r\nimport {EntityReference} from \"models/EntityReference\";\r\nimport { OrganizationUserService } from \"services/OrganizationUserService\";\r\n\r\n@autoinject\r\nexport class OrganizationUserCreate { \r\n username: string;\r\n selectedOrganizationRoleType: OrganizationRoleType;\r\n selectedOrganization: OrganizationViewModelDto;\r\n \r\n isCreatingOrganizationUser = false;\r\n signalreventhandlers: any = {};\r\n \r\n isSearching = false;\r\n items: OrganizationViewModelDto[] = [];\r\n nodatafound = false;\r\n filterText: string = '';\r\n\r\n constructor(public organizationService: OrganizationService,\r\n public organizationUserService: OrganizationUserService,\r\n public signalr: SignalrWrapper,\r\n public router: AppRouter) {\r\n this.signalreventhandlers = {\r\n \"OrganizationUserCreated\": this.onOrganizationUserCreated,\r\n \"OrganizationUserCreateFailed\": this.onOrganizationUserCreateFailed,\r\n };\r\n }\r\n\r\n get filteredItems(): OrganizationViewModelDto[] {\r\n if (!this.filterText || this.filterText.trim() === '') {\r\n return this.items;\r\n }\r\n const search = this.filterText.toLowerCase().trim();\r\n return this.items.filter(item => {\r\n const desc = item.description && item.description.toLowerCase().includes(search);\r\n const orgType = item.organizationTypeDescription && item.organizationTypeDescription.toLowerCase().includes(search);\r\n const parents = item.parentDescriptions && item.parentDescriptions.toLowerCase().includes(search);\r\n return desc || orgType || parents;\r\n });\r\n }\r\n\r\n async attached() {\r\n for (const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.on(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n await this.search();\r\n }\r\n\r\n search = async () => {\r\n this.isSearching = true;\r\n const organizations = await this.organizationService.myorganizations();\r\n this.isSearching = false;\r\n this.nodatafound = organizations.length == 0;\r\n this.items.splice(0, this.items.length);\r\n organizations.forEach(org => this.items.push(org));\r\n await this.afterSearching();\r\n }\r\n\r\n async afterSearching() {\r\n this.selectOrganization(undefined);\r\n let itemindex=-1;\r\n if(this.items.length === 1) {\r\n await this.selectOrganization(this.items[0]);\r\n return;\r\n }\r\n\r\n if((itemindex = this.items.findIndex(item => item.organizationType === OrganizationType.Central)) !== -1){\r\n await this.selectOrganization(this.items[itemindex]);\r\n return;\r\n }\r\n else if((itemindex = this.items.findIndex(item => item.organizationType === OrganizationType.State)) !== -1){\r\n await this.selectOrganization(this.items[itemindex]);\r\n return;\r\n }\r\n else if((itemindex = this.items.findIndex(item => item.organizationType === OrganizationType.Zone)) !== -1){\r\n await this.selectOrganization(this.items[itemindex]);\r\n return;\r\n }\r\n else if(this.items.length === 1) {\r\n await this.selectOrganization(this.items[0]);\r\n return;\r\n }\r\n }\r\n\r\n detached() {\r\n for(const key in this.signalreventhandlers) {\r\n if (this.signalreventhandlers.hasOwnProperty(key)) {\r\n this.signalr.off(key, this.signalreventhandlers[key]);\r\n }\r\n }\r\n }\r\n\r\n createOrganizationUser = async () => {\r\n try {\r\n await this.organizationUserService.create(this.username, this.selectedOrganizationRoleType, this.getOrganizationReference(this.selectedOrganization));\r\n } catch(error) {\r\n toastr.error(error);\r\n return;\r\n }\r\n this.isCreatingOrganizationUser = true;\r\n }\r\n\r\n selectOrganization = async (item: OrganizationViewModelDto) => {\r\n this.selectedOrganization = item;\r\n await this.loadOrganizations();\r\n }\r\n\r\n loadOrganizations = async () => {\r\n if(!this.selectedOrganization) return;\r\n }\r\n\r\n getOrganizationReference(org: OrganizationViewModelDto) {\r\n return new EntityReference(org.id, org.description);\r\n }\r\n\r\n onOrganizationUserCreated = (organizationid: number) => {\r\n this.isCreatingOrganizationUser = false;\r\n toastr.success(\"Organisation User Created\");\r\n this.router.navigate(`manage-organization-users`);\r\n }\r\n\r\n onOrganizationUserCreateFailed = (e: {$values: string[]}) => {\r\n this.isCreatingOrganizationUser = false;\r\n toastr.error(e.$values.join(\", \"));\r\n }\r\n}\r\n","module.exports = \">\\r\\n\";","import { OrganizationType } from \"models/OrganizationType\";\r\nimport { ReportingFrequency } from \"models/ReportingFrequency\";\r\nimport { EntityReference } from \"models/EntityReference\";\r\n\r\n/**\r\n * Organization Grid Item\r\n *\r\n * Represents an organization item displayed in the grid with support for multi-parent hierarchy.\r\n * Organizations can have multiple parent organizations, enabling complex organizational structures.\r\n */\r\nexport class OrganizationGridItem {\r\n constructor(public id: number,\r\n public organizationType: OrganizationType,\r\n public organizationTypeDescription: string,\r\n public description: string,\r\n public reportingFrequency: ReportingFrequency,\r\n public reportingFrequencyDescription: string,\r\n /**\r\n * Array of parent organizations.\r\n * Supports multi-parent hierarchy where an organization can have multiple parents.\r\n * Empty array indicates a root-level organization with no parents.\r\n */\r\n public parents: EntityReference[],\r\n public parentDescriptions: string,\r\n public timestamp: Date,\r\n public isDeleting: boolean,\r\n public isSysAdmin: boolean,\r\n public details?: string) { }\r\n}"],"sourceRoot":""}