DashboardController¶
- Namespace:
Insorce.Controllers - Project:
Andromeda.Web
Overview¶
The DashboardController manages a comprehensive set of endpoints for project dashboard functionalities. It serves users who require detailed project analytics, risk management, resource allocation, and performance visualization.
Feature Summary¶
- Implements project dashboard features including activity properties, actor clustering, process mapping, SIPOC visualization, and interaction models.
- Supports detailed analyses such as deadline paths, rework paths, risk metrics, control effectiveness, and team utilization.
- Provides endpoints for managing custom widget views, playbooks, and project comparisons.
- Enables data retrieval and processing for HR-related metrics, infrastructure costs, and organizational structures.
- Facilitates exporting and downloading of project-related files and images.
- Handles specialized views for issues, levers, and various project improvement initiatives.
UX Summary¶
- Delivers JSON and view results that directly influence dashboard visualizations and user interface responsiveness.
- Caching mechanisms improve response times but risk stale data presentation if not managed properly.
- Large JSON payloads and complex data processing can degrade frontend performance and user experience.
- Error handling and input validation inconsistencies may cause confusing or incomplete UI feedback.
- Dynamic partial views and customized dashboards enhance user interaction and personalization.
- Some methods lack proper validation, risking unauthorized data exposure and inconsistent UI states.
Data Dependencies¶
- Relies on session-stored ProjectData and various project-related models including ActorModel, RiskModel, HRModel, and ControlModel.
- Uses LINQ queries extensively for filtering and aggregating project activities, actors, risks, controls, and schedules.
- Interacts with caching layers to store and retrieve computed metrics and JSON data.
- Processes data from multiple sources such as project revisions, schedules, skills, and infrastructure details.
- Handles file system operations for image saving and file downloads with MIME type determination.
Authentication / Authorization Notes¶
- Most methods depend on session data for project context, requiring secure session management to prevent tampering and data exposure.
- Several endpoints lack explicit authentication or authorization checks, potentially exposing sensitive project data.
- Input parameters often require sanitization to prevent SQL injection and other injection attacks.
- Direct use of request parameters without validation introduces risks of data tampering and cross-site scripting.
- Cookie management for dashboard views should include validation to avoid security vulnerabilities.
Controller Call Chain Diagram¶
flowchart TD
Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
Andromeda_Core_DataManager_ExecuteScalar["Andromeda.Core.DataManager.ExecuteScalar"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_GetNVAType["Andromeda.Core.Entities.Activity.GetNVAType"]
Andromeda_Core_Entities_Activity_IterationEffort["Andromeda.Core.Entities.Activity.IterationEffort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Activity_getFrequency["Andromeda.Core.Entities.Activity.getFrequency"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_OverCapacity["Andromeda.Core.Entities.Actor.OverCapacity"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_EdgeInfo_Clone["Andromeda.Core.Entities.EdgeInfo.Clone"]
Andromeda_Core_Entities_Gantt_ActivityUnitGantt["Andromeda.Core.Entities.Gantt.ActivityUnitGantt"]
Andromeda_Core_Entities_Gantt_ActorGantt["Andromeda.Core.Entities.Gantt.ActorGantt"]
Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
Andromeda_Core_Entities_OutProcessProps_getDay["Andromeda.Core.Entities.OutProcessProps.getDay"]
Andromeda_Core_Entities_ProductFormBRMapping_GetMappedData["Andromeda.Core.Entities.ProductFormBRMapping.GetMappedData"]
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls["Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetAllLoops["Andromeda.Core.Entities.ProjectData.GetAllLoops"]
Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetConnectivityDetails["Andromeda.Core.Entities.ProjectData.GetConnectivityDetails"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetInfraDetails["Andromeda.Core.Entities.ProjectData.GetInfraDetails"]
Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails["Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails"]
Andromeda_Core_Entities_ProjectData_GetKmeansCluster["Andromeda.Core.Entities.ProjectData.GetKmeansCluster"]
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl["Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl"]
Andromeda_Core_Entities_ProjectData_GetObjActivities["Andromeda.Core.Entities.ProjectData.GetObjActivities"]
Andromeda_Core_Entities_ProjectData_GetObjRisks["Andromeda.Core.Entities.ProjectData.GetObjRisks"]
Andromeda_Core_Entities_ProjectData_GetObjectivesList["Andromeda.Core.Entities.ProjectData.GetObjectivesList"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
Andromeda_Core_Entities_ProjectData_GetOfficePremises["Andromeda.Core.Entities.ProjectData.GetOfficePremises"]
Andromeda_Core_Entities_ProjectData_GetRiskControls["Andromeda.Core.Entities.ProjectData.GetRiskControls"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_ProjectData_GetSkillMatrix["Andromeda.Core.Entities.ProjectData.GetSkillMatrix"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Entities_ProjectData_GetTransferModes["Andromeda.Core.Entities.ProjectData.GetTransferModes"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
Andromeda_Core_Entities_Sched_EndTimeHour["Andromeda.Core.Entities.Sched.EndTimeHour"]
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars["Andromeda.Core.Extensions.LinqExtensions.RemoveInvalidFileNameChars"]
Andromeda_Core_Extensions_LinqExtensions_RemoveLineBreakChars["Andromeda.Core.Extensions.LinqExtensions.RemoveLineBreakChars"]
Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialChar["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialChar"]
Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
Andromeda_Core_Extensions_LinqExtensions_ToNameString["Andromeda.Core.Extensions.LinqExtensions.ToNameString"]
Andromeda_Core_Extensions_LinqExtensions_ToOrdinalHtmlString["Andromeda.Core.Extensions.LinqExtensions.ToOrdinalHtmlString"]
Andromeda_Core_Extensions_LinqExtensions_ToOrdinalString["Andromeda.Core.Extensions.LinqExtensions.ToOrdinalString"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_LoggingManager_Exception["Andromeda.Core.LoggingManager.Exception"]
Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
Andromeda_Core_Models_ModelHelper_GetPlaybooks["Andromeda.Core.Models.ModelHelper.GetPlaybooks"]
Andromeda_Core_Models_ModelHelper_GetProjectDetails["Andromeda.Core.Models.ModelHelper.GetProjectDetails"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows["Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows"]
Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths["Andromeda.Core.Services.Algorithms.Delooper.GetPossiblePaths"]
Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping["Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping"]
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath["Andromeda.Core.Services.Algorithms.Delooper.PossiblePath"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
Andromeda_Core_Services_Registry_GetPermissions["Andromeda.Core.Services.Registry.GetPermissions"]
Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
Andromeda_Core_Utility_Compress_CreateZip["Andromeda.Core.Utility.Compress.CreateZip"]
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX["Andromeda.Core.Utility.PPTXGenerate.ExportPPTX"]
Andromeda_Web_Views_DataFormatFile_getSkillLevel["Andromeda.Web.Views.DataFormatFile.getSkillLevel"]
DashboardController_ActivitiesProperties["DashboardController.ActivitiesProperties"]
DashboardController_ActivityEffortGraph["DashboardController.ActivityEffortGraph"]
DashboardController_ActivityVsCompensatoryActivity["DashboardController.ActivityVsCompensatoryActivity"]
DashboardController_ActorCluster["DashboardController.ActorCluster"]
DashboardController_ActorHourlyDelays["DashboardController.ActorHourlyDelays"]
DashboardController_ActorHourlyUtilization["DashboardController.ActorHourlyUtilization"]
DashboardController_AdequacyDashboard["DashboardController.AdequacyDashboard"]
DashboardController_ChartsTeamSchedule["DashboardController.ChartsTeamSchedule"]
DashboardController_ChartsUnitSchedule["DashboardController.ChartsUnitSchedule"]
DashboardController_ClusterVSM["DashboardController.ClusterVSM"]
DashboardController_ControlExistenceTable["DashboardController.ControlExistenceTable"]
DashboardController_ControlProcedures["DashboardController.ControlProcedures"]
DashboardController_CostOfControl["DashboardController.CostOfControl"]
DashboardController_CriticalPathActivities["DashboardController.CriticalPathActivities"]
DashboardController_CriticalPathDelaysGraph["DashboardController.CriticalPathDelaysGraph"]
DashboardController_CustomDashboard["DashboardController.CustomDashboard"]
DashboardController_CycleTime["DashboardController.CycleTime"]
DashboardController_DaywiseTeamUtilization["DashboardController.DaywiseTeamUtilization"]
DashboardController_DeadlinePaths["DashboardController.DeadlinePaths"]
DashboardController_DeleteCustomWidgetView["DashboardController.DeleteCustomWidgetView"]
DashboardController_DownloadFileFromPath["DashboardController.DownloadFileFromPath"]
DashboardController_EAControls["DashboardController.EAControls"]
DashboardController_EffectivenessTable["DashboardController.EffectivenessTable"]
DashboardController_EfficacyOfCompensatingControls["DashboardController.EfficacyOfCompensatingControls"]
DashboardController_EnterpriseClusters["DashboardController.EnterpriseClusters"]
DashboardController_FormsBrsByTeam["DashboardController.FormsBrsByTeam"]
DashboardController_GenerateAndSaveJSONProjectData["DashboardController.GenerateAndSaveJSONProjectData"]
DashboardController_GetActivitiesPotentialData["DashboardController.GetActivitiesPotentialData"]
DashboardController_GetActivityDetails["DashboardController.GetActivityDetails"]
DashboardController_GetActivityPotentialData["DashboardController.GetActivityPotentialData"]
DashboardController_GetActivityUnitsData["DashboardController.GetActivityUnitsData"]
DashboardController_GetActorInfraCost["DashboardController.GetActorInfraCost"]
DashboardController_GetAutomatableGridData["DashboardController.GetAutomatableGridData"]
DashboardController_GetCompetencyandCompensation["DashboardController.GetCompetencyandCompensation"]
DashboardController_GetCompleteActivityData["DashboardController.GetCompleteActivityData"]
DashboardController_GetControlsNodeData["DashboardController.GetControlsNodeData"]
DashboardController_GetEffortDrillData["DashboardController.GetEffortDrillData"]
DashboardController_GetPeakUtilizationData["DashboardController.GetPeakUtilizationData"]
DashboardController_GetTeamSkillCharts["DashboardController.GetTeamSkillCharts"]
DashboardController_GetUnitsAndEffortOfSelectedActivities["DashboardController.GetUnitsAndEffortOfSelectedActivities"]
DashboardController_HRActorActivities["DashboardController.HRActorActivities"]
DashboardController_HROverallUtilization["DashboardController.HROverallUtilization"]
DashboardController_HRProductComparison["DashboardController.HRProductComparison"]
DashboardController_HRTeamOverView["DashboardController.HRTeamOverView"]
DashboardController_HRTeamsComparison["DashboardController.HRTeamsComparison"]
DashboardController_HRTeamsHiring["DashboardController.HRTeamsHiring"]
DashboardController_InfraCostComponents["DashboardController.InfraCostComponents"]
DashboardController_InfraLocations["DashboardController.InfraLocations"]
DashboardController_InfraModes["DashboardController.InfraModes"]
DashboardController_InteractionModel["DashboardController.InteractionModel"]
DashboardController_InterfaceRequirements["DashboardController.InterfaceRequirements"]
DashboardController_IssuesLevers["DashboardController.IssuesLevers"]
DashboardController_LinesOfDefence["DashboardController.LinesOfDefence"]
DashboardController_LoadDashboard["DashboardController.LoadDashboard"]
DashboardController_NonProductivePath["DashboardController.NonProductivePath"]
DashboardController_OPActivitiesData["DashboardController.OPActivitiesData"]
DashboardController_OPActivitiesDayData["DashboardController.OPActivitiesDayData"]
DashboardController_ObjectiveAndControls["DashboardController.ObjectiveAndControls"]
DashboardController_ObjectiveDetails["DashboardController.ObjectiveDetails"]
DashboardController_OrganizationStructure["DashboardController.OrganizationStructure"]
DashboardController_PathClusterAnalysis["DashboardController.PathClusterAnalysis"]
DashboardController_Playbooks["DashboardController.Playbooks"]
DashboardController_ReworkPaths["DashboardController.ReworkPaths"]
DashboardController_RiskCoverage["DashboardController.RiskCoverage"]
DashboardController_RiskMetrics["DashboardController.RiskMetrics"]
DashboardController_RiskMetricsByActivity["DashboardController.RiskMetricsByActivity"]
DashboardController_SIPOC["DashboardController.SIPOC"]
DashboardController_SaveImagesAndTables["DashboardController.SaveImagesAndTables"]
DashboardController_SetDashBoardCookie["DashboardController.SetDashBoardCookie"]
DashboardController_TeamAnalysis["DashboardController.TeamAnalysis"]
DashboardController_TeamCompetency["DashboardController.TeamCompetency"]
DashboardController_TeamCompetencyChart["DashboardController.TeamCompetencyChart"]
DashboardController_TeamCompetencyandCostGraph["DashboardController.TeamCompetencyandCostGraph"]
DashboardController_TeamDelayReduction["DashboardController.TeamDelayReduction"]
DashboardController_TeamDelaysGraph["DashboardController.TeamDelaysGraph"]
DashboardController_TeamEffortUtilization["DashboardController.TeamEffortUtilization"]
DashboardController_TeamHourlyAHT["DashboardController.TeamHourlyAHT"]
DashboardController_TeamMergeWithOutProcess["DashboardController.TeamMergeWithOutProcess"]
DashboardController_TeamMonthlyUtilization["DashboardController.TeamMonthlyUtilization"]
DashboardController_TeamsUtilization["DashboardController.TeamsUtilization"]
DashboardController_TotalCost["DashboardController.TotalCost"]
DashboardController_UndesiredOutcomeTable["DashboardController.UndesiredOutcomeTable"]
DashboardController_UnitsAndEffortDetailedData["DashboardController.UnitsAndEffortDetailedData"]
DashboardController_UnitsAndResourceHourlyGraph["DashboardController.UnitsAndResourceHourlyGraph"]
DashboardController_UpdateActivityName["DashboardController.UpdateActivityName"]
DashboardController_UpdateCustomWidgetView["DashboardController.UpdateCustomWidgetView"]
DashboardController_UpdatePlaybooksOrder["DashboardController.UpdatePlaybooksOrder"]
DashboardController_WorkAllocationandSkillingGraph["DashboardController.WorkAllocationandSkillingGraph"]
Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
Insorce_Helpers_Helpers_Deadline["Insorce.Helpers.Helpers.Deadline"]
Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
Insorce_Helpers_Helpers_ProductName["Insorce.Helpers.Helpers.ProductName"]
Insorce_Helpers_Helpers_SetDashboardIdToCookie["Insorce.Helpers.Helpers.SetDashboardIdToCookie"]
Insorce_Helpers_Helpers_Waittype["Insorce.Helpers.Helpers.Waittype"]
Insorce_Helpers_Helpers_getDashboardIdFromCookie["Insorce.Helpers.Helpers.getDashboardIdFromCookie"]
Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToNameString
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToOrdinalHtmlString
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToOrdinalString
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetActivities
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetArrows
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetRiskControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Services_ProcessExtensions_FindByID
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetRiskControls --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_ExecuteScalar
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetTransferModes --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath --> Andromeda_Core_LoggingManager_Exception
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
Andromeda_Core_Services_Registry_GetPermissions --> Andromeda_Core_Models_ModelHelper_GetProjectDetails
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialChar
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Utility_Compress_CreateZip
Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_ActivitiesProperties --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActivitiesProperties --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_ActivityEffortGraph --> Insorce_Helpers_Helpers_getSkillLevel
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_ActorCluster --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_Gantt_ActorGantt
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_Gantt_ActivityUnitGantt
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_Effort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetAllLoops
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_CostOfControl --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_CostOfControl --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_CostOfControl --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_TimeRange_ContainsValue
DashboardController_CriticalPathDelaysGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_CustomDashboard --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
DashboardController_CustomDashboard --> Insorce_Helpers_Helpers_getDashboardIdFromCookie
DashboardController_CycleTime --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_CycleTime --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_CycleTime --> Insorce_Helpers_Helpers_CurrencyConverter
DashboardController_CycleTime --> Insorce_Helpers_Helpers_DaysConverter
DashboardController_CycleTime --> Insorce_Helpers_Helpers_GetIndividualPath
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_Activity_Clone
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_DeadlinePaths --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_DeadlinePaths --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_DeadlinePaths --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_DeleteCustomWidgetView --> Andromeda_Core_DataManager_Execute
DashboardController_DeleteCustomWidgetView --> Andromeda_Core_LoggingManager_Error
DashboardController_DownloadFileFromPath --> Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars
DashboardController_EAControls --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_EAControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetTransferModes
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProductFormBRMapping_GetMappedData
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_Clone
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GenerateAndSaveJSONProjectData --> Insorce_Helpers_Helpers_DaysConverter
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetActivityDetails --> Andromeda_Core_Extensions_LinqExtensions_RemoveLineBreakChars
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_Sched_EndTimeHour
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_Sched_StartTimeHour
DashboardController_GetActorInfraCost --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_GetActorInfraCost --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_GetActorInfraCost --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GetActorInfraCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetAutomatableGridData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetCompetencyandCompensation --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_GetNVAType
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_getFrequency
DashboardController_GetCompleteActivityData --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_GetCompleteActivityData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetCompleteActivityData --> Insorce_Helpers_Helpers_getSkillLevel
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_OverCapacity
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetTeamSkillCharts --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetTeamSkillCharts --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_GetTeamSkillCharts --> Insorce_Helpers_ClusterHelper_GenerateCluster
DashboardController_GetUnitsAndEffortOfSelectedActivities --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetUnitsAndEffortOfSelectedActivities --> Andromeda_Core_Entities_Sched_EndTimeHour
DashboardController_HRActorActivities --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HRActorActivities --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HRActorActivities --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_HRTeamsComparison --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRTeamsHiring --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRTeamsHiring --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_InfraCostComponents --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_InfraCostComponents --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_InfraLocations --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_InfraLocations --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_InfraModes --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_InterfaceRequirements --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_InterfaceRequirements --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetKmeansCluster
DashboardController_IssuesLevers --> Andromeda_Core_Models_ModelHelper_GetPlaybooks
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_LoadDashboard --> Andromeda_Core_LoggingManager_Info
DashboardController_LoadDashboard --> Andromeda_Core_Services_Registry_GetPermissions
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetTransferModes
DashboardController_NonProductivePath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_NonProductivePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_Activity_getFrequency
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_OutProcessProps_getDay
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_OPActivitiesDayData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_OPActivitiesDayData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_OrganizationStructure --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_Activity_Clone
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_PathClusterAnalysis --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_Playbooks --> Andromeda_Core_Models_ModelHelper_GetPlaybooks
DashboardController_ReworkPaths --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_SIPOC --> Insorce_Helpers_Helpers_Deadline
DashboardController_SIPOC --> Insorce_Helpers_Helpers_ProductName
DashboardController_SIPOC --> Insorce_Helpers_Helpers_Waittype
DashboardController_SaveImagesAndTables --> Andromeda_Core_Utility_PPTXGenerate_ExportPPTX
DashboardController_SetDashBoardCookie --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
DashboardController_TeamAnalysis --> Andromeda_Core_Entities_Sched_GetHourEffort
DashboardController_TeamAnalysis --> Andromeda_Core_Entities_Sched_StartTimeHour
DashboardController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_TeamCompetency --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_TeamCompetency --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_TeamCompetency --> Andromeda_Web_Views_DataFormatFile_getSkillLevel
DashboardController_TeamCompetency --> Insorce_Helpers_Helpers_getSkillLevel
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_Effort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_TeamCompetencyChart --> Insorce_Helpers_Helpers_getSkillLevel
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamDelaysGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
DashboardController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Sched_EndTimeHour
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Sched_StartTimeHour
DashboardController_UnitsAndResourceHourlyGraph --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_UpdateActivityName --> Andromeda_Core_DataManager_Execute
DashboardController_UpdateActivityName --> Andromeda_Core_LoggingManager_Error
DashboardController_UpdateCustomWidgetView --> Andromeda_Core_DataManager_Execute
DashboardController_UpdateCustomWidgetView --> Andromeda_Core_LoggingManager_Error
DashboardController_UpdatePlaybooksOrder --> Andromeda_Core_DataManager_Execute
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetTalentPools
Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
Insorce_Helpers_Helpers_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
Insorce_Helpers_Helpers_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_Arrow_Clone
Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_EdgeInfo_Clone
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
System Dependencies¶
Incoming Dependencies (Fan-In): None
Outgoing Dependencies (Fan-Out): None
Cycle Detection¶
No dependency cycles detected for this controller.
View → Action Mapping¶
| Action | View | Model | Path |
|---|---|---|---|
activitiesproperties |
ActivitiesProperties |
- |
Andromeda.Web\Views\Dashboard\ActivitiesProperties.cshtml |
activitycostgraph |
ActivityCostGraph |
- |
Andromeda.Web\Views\Dashboard\ActivityCostGraph.cshtml |
activityeffortgraph |
ActivityEffortGraph |
- |
Andromeda.Web\Views\Dashboard\ActivityEffortGraph.cshtml |
activitylevelcontrols |
ActivityLevelControls |
- |
Andromeda.Web\Views\Dashboard\ActivityLevelControls.cshtml |
activitypotentialdata |
ActivityPotentialData |
object |
Andromeda.Web\Views\Dashboard\ActivityPotentialData.cshtml |
activityvscompensatoryactivity |
ActivityVsCompensatoryActivity |
- |
Andromeda.Web\Views\Dashboard\ActivityVsCompensatoryActivity.cshtml |
actorcluster |
ActorCluster |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\ActorCluster.cshtml |
actorcost |
ActorCost |
- |
Andromeda.Web\Views\Dashboard\ActorCost.cshtml |
actorhourlydelays |
ActorHourlyDelays |
- |
Andromeda.Web\Views\Dashboard\ActorHourlyDelays.cshtml |
actorhourlyutilization |
ActorHourlyUtilization |
- |
Andromeda.Web\Views\Dashboard\ActorHourlyUtilization.cshtml |
actorhrcost |
ActorHRCost |
- |
Andromeda.Web\Views\Dashboard\ActorHRCost.cshtml |
actorinfracost |
ActorInfraCost |
- |
Andromeda.Web\Views\Dashboard\ActorInfraCost.cshtml |
actortime |
ActorTime |
- |
Andromeda.Web\Views\Dashboard\ActorTime.cshtml |
actorutilization |
ActorUtilization |
- |
Andromeda.Web\Views\Dashboard\ActorUtilization.cshtml |
adequacydashboardtable |
AdequacyDashboardTable |
- |
Andromeda.Web\Views\Dashboard\AdequacyDashboardTable.cshtml |
adequacyvalidation |
AdequacyValidation |
- |
Andromeda.Web\Views\Dashboard\AdequacyValidation.cshtml |
automatabletask |
AutomatableTask |
- |
Andromeda.Web\Views\Dashboard\AutomatableTask.cshtml |
automationgraph |
AutomationGraph |
- |
Andromeda.Web\Views\Dashboard\AutomationGraph.cshtml |
chartsunitschedule |
ChartsUnitSchedule |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\ChartsUnitSchedule.cshtml |
chartteamschedule |
ChartTeamSchedule |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\ChartTeamSchedule.cshtml |
clusterdashboard |
ClusterDashboard |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\ClusterDashboard.cshtml |
clustermaxdelay |
ClusterMaxDelay |
- |
Andromeda.Web\Views\Dashboard\ClusterMaxDelay.cshtml |
clustervsm |
ClusterVSM |
- |
Andromeda.Web\Views\Dashboard\ClusterVSM.cshtml |
constraintsgraph |
ConstraintsGraph |
- |
Andromeda.Web\Views\Dashboard\ConstraintsGraph.cshtml |
controlenvironment |
ControlEnvironment |
- |
Andromeda.Web\Views\Dashboard\ControlEnvironment.cshtml |
controlexistencetable |
ControlExistenceTable |
- |
Andromeda.Web\Views\Dashboard\ControlExistenceTable.cshtml |
controlprocedures |
ControlProcedures |
- |
Andromeda.Web\Views\Dashboard\ControlProcedures.cshtml |
costcomponents |
CostComponents |
- |
Andromeda.Web\Views\Dashboard\CostComponents.cshtml |
costofcontrol |
CostOfControl |
- |
Andromeda.Web\Views\Dashboard\CostOfControl.cshtml |
criticalpath |
CriticalPath |
- |
Andromeda.Web\Views\Dashboard\CriticalPath.cshtml |
criticalpathactivities |
CriticalPathActivities |
- |
Andromeda.Web\Views\Dashboard\CriticalPathActivities.cshtml |
criticalpathdelaysgraph |
CriticalPathDelaysGraph |
- |
Andromeda.Web\Views\Dashboard\CriticalPathDelaysGraph.cshtml |
customanalysis |
CustomAnalysis |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\CustomAnalysis.cshtml |
customdashboard |
CustomDashboard |
IList<Andromeda.Core.Entities.CustomWidgetView> |
Andromeda.Web\Views\Dashboard\CustomDashboard.cshtml |
customgraphicsview |
CustomGraphicsView |
- |
Andromeda.Web\Views\Dashboard\CustomGraphicsView.cshtml |
customviewwidget |
CustomViewWidget |
string |
Andromeda.Web\Views\Dashboard\CustomViewWidget.cshtml |
customwidgetviews |
CustomWidgetViews |
Tuple<IList<Andromeda.Core.Entities.CustomWidgetView>, IList<Andromeda.Core.Entities.DashBoardWidgets>, int, string> |
Andromeda.Web\Views\Dashboard\CustomWidgetViews.cshtml |
cycletime |
CycleTime |
- |
Andromeda.Web\Views\Dashboard\CycleTime.cshtml |
cycletimebetweenactivities |
CycleTimeBetweenActivities |
- |
Andromeda.Web\Views\Dashboard\CycleTimeBetweenActivities.cshtml |
cycletimebyproduct |
CycleTimeByProduct |
- |
Andromeda.Web\Views\Dashboard\CycleTimeByProduct.cshtml |
daywiseteamutilization |
DaywiseTeamUtilization |
- |
Andromeda.Web\Views\Dashboard\DaywiseTeamUtilization.cshtml |
deadlinepaths |
DeadlinePaths |
- |
Andromeda.Web\Views\Dashboard\DeadlinePaths.cshtml |
deltaanalysis |
DeltaAnalysis |
IList<Andromeda.Core.Entities.ProjectData> |
Andromeda.Web\Views\Dashboard\DeltaAnalysis.cshtml |
eacontrols |
EAControls |
- |
Andromeda.Web\Views\Dashboard\EAControls.cshtml |
editallany |
EditAllAny |
- |
Andromeda.Web\Views\Dashboard\EditAllAny.cshtml |
editanyallbatchconstraint |
EditAnyAllBatchConstraint |
- |
Andromeda.Web\Views\Dashboard\EditAnyAllBatchConstraint.cshtml |
editconstraints |
EditConstraints |
- |
Andromeda.Web\Views\Dashboard\EditConstraints.cshtml |
editdeadlines |
EditDeadlines |
- |
Andromeda.Web\Views\Dashboard\EditDeadlines.cshtml |
editoperationteams |
EditOperationTeams |
- |
Andromeda.Web\Views\Dashboard\EditOperationTeams.cshtml |
editprocessdecisions |
EditProcessDecisions |
- |
Andromeda.Web\Views\Dashboard\EditProcessDecisions.cshtml |
editprocessproductfactors |
EditProcessProductFactors |
- |
Andromeda.Web\Views\Dashboard\EditProcessProductFactors.cshtml |
editprocessvolumes |
EditProcessVolumes |
- |
Andromeda.Web\Views\Dashboard\EditProcessVolumes.cshtml |
editwaittypes |
EditWaitTypes |
- |
Andromeda.Web\Views\Dashboard\EditWaitTypes.cshtml |
effectivenesstable |
EffectivenessTable |
- |
Andromeda.Web\Views\Dashboard\EffectivenessTable.cshtml |
efficacyofcompensatingcontrols |
EfficacyOfCompensatingControls |
- |
Andromeda.Web\Views\Dashboard\EfficacyOfCompensatingControls.cshtml |
effortbyteam |
EffortByTeam |
- |
Andromeda.Web\Views\Dashboard\EffortByTeam.cshtml |
enterprisearchitecture |
EnterpriseArchitecture |
- |
Andromeda.Web\Views\Dashboard\EnterpriseArchitecture.cshtml |
formsbrsbyteam |
FormsBrsByTeam |
- |
Andromeda.Web\Views\Dashboard\FormsBrsByTeam.cshtml |
formsbusinessrules |
FormsBusinessRules |
- |
Andromeda.Web\Views\Dashboard\FormsBusinessRules.cshtml |
getdashboard |
GetDashboard |
IList<Andromeda.Core.Entities.CustomWidgetView> |
Andromeda.Web\Views\Dashboard\GetDashboard.cshtml |
hractorcost |
HRActorCost |
- |
Andromeda.Web\Views\Dashboard\HRActorCost.cshtml |
hractortime |
HRActorTime |
- |
Andromeda.Web\Views\Dashboard\HRActorTime.cshtml |
hroverallutilizationgraph |
HROverallUtilizationGraph |
- |
Andromeda.Web\Views\Dashboard\HROverallUtilizationGraph.cshtml |
hrproductcomparison |
HRProductComparison |
- |
Andromeda.Web\Views\Dashboard\HRProductComparison.cshtml |
hrteamoverview |
HRTeamOverView |
- |
Andromeda.Web\Views\Dashboard\HRTeamOverView.cshtml |
hrteamscomparison |
HRTeamsComparison |
- |
Andromeda.Web\Views\Dashboard\HRTeamsComparison.cshtml |
hrteamseffort |
HRTeamsEffort |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\HRTeamsEffort.cshtml |
hrutilization |
HRUtilization |
- |
Andromeda.Web\Views\Dashboard\HRUtilization.cshtml |
implementationanalysis |
ImplementationAnalysis |
IList<Andromeda.Core.Entities.ProjectData> |
Andromeda.Web\Views\Dashboard\ImplementationAnalysis.cshtml |
infracostcomponents |
InfraCostComponents |
- |
Andromeda.Web\Views\Dashboard\InfraCostComponents.cshtml |
infralocations |
InfraLocations |
- |
Andromeda.Web\Views\Dashboard\InfraLocations.cshtml |
inframodeschart |
InfraModesChart |
- |
Andromeda.Web\Views\Dashboard\InfraModesChart.cshtml |
interactionmodel |
InteractionModel |
- |
Andromeda.Web\Views\Dashboard\InteractionModel.cshtml |
interfacerequirements |
InterfaceRequirements |
- |
Andromeda.Web\Views\Dashboard\InterfaceRequirements.cshtml |
issueslevers |
IssuesLevers |
IList<Andromeda.Core.Entities.DashBoardWidgets> |
Andromeda.Web\Views\Dashboard\IssuesLevers.cshtml |
linesofdefence |
LinesOfDefence |
- |
Andromeda.Web\Views\Dashboard\LinesOfDefence.cshtml |
loadwidgetview |
LoadWidgetView |
- |
Andromeda.Web\Views\Dashboard\LoadWidgetView.cshtml |
milestonevolumeflow |
MilestoneVolumeFlow |
- |
Andromeda.Web\Views\Dashboard\MilestoneVolumeFlow.cshtml |
minimumcycletime |
minimumCycleTime |
- |
Andromeda.Web\Views\Dashboard\minimumCycleTime.cshtml |
modessystembyteam |
ModesSystemByTeam |
- |
Andromeda.Web\Views\Dashboard\ModesSystemByTeam.cshtml |
npapartialpage |
NPAPartialPage |
- |
Andromeda.Web\Views\Dashboard\NPAPartialPage.cshtml |
npapath |
NPAPath |
- |
Andromeda.Web\Views\Dashboard\NPAPath.cshtml |
objectivedetails |
ObjectiveDetails |
- |
Andromeda.Web\Views\Dashboard\ObjectiveDetails.cshtml |
objectivesandcontrols |
ObjectivesAndControls |
- |
Andromeda.Web\Views\Dashboard\ObjectivesAndControls.cshtml |
organizationstructure |
OrganizationStructure |
- |
Andromeda.Web\Views\Dashboard\OrganizationStructure.cshtml |
pathclusteranalysis |
PathClusterAnalysis |
Tuple<Andromeda.Core.Entities.ProjectData, Dictionary<Andromeda.Core.Entities.MapPath, double[]>> |
Andromeda.Web\Views\Dashboard\PathClusterAnalysis.cshtml |
peakutilizationbyteam |
PeakUtilizationByTeam |
- |
Andromeda.Web\Views\Dashboard\PeakUtilizationByTeam.cshtml |
processcharacteristics |
ProcessCharacteristics |
- |
Andromeda.Web\Views\Dashboard\ProcessCharacteristics.cshtml |
processmapviews |
ProcessMapViews |
- |
Andromeda.Web\Views\Dashboard\ProcessMapViews.cshtml |
productsgraph |
ProductsGraph |
- |
Andromeda.Web\Views\Dashboard\ProductsGraph.cshtml |
projectchart |
ProjectChart |
IEnumerable<int> |
Andromeda.Web\Views\Dashboard\ProjectChart.cshtml |
projectcomparison |
ProjectComparison |
IEnumerable<int> |
Andromeda.Web\Views\Dashboard\ProjectComparison.cshtml |
reportwidget |
ReportWidget |
- |
Andromeda.Web\Views\Dashboard\ReportWidget.cshtml |
reworkpaths |
ReworkPaths |
- |
Andromeda.Web\Views\Dashboard\ReworkPaths.cshtml |
riskcoverage |
RiskCoverage |
- |
Andromeda.Web\Views\Dashboard\RiskCoverage.cshtml |
riskmetricescalation |
RiskMetricEscalation |
- |
Andromeda.Web\Views\Dashboard\RiskMetricEscalation.cshtml |
riskmetrics |
RiskMetrics |
- |
Andromeda.Web\Views\Dashboard\RiskMetrics.cshtml |
riskmetricsbyactivity |
RiskMetricsByActivity |
- |
Andromeda.Web\Views\Dashboard\RiskMetricsByActivity.cshtml |
rootproduct |
RootProduct |
- |
Andromeda.Web\Views\Dashboard\RootProduct.cshtml |
sipoc |
SIPOC |
- |
Andromeda.Web\Views\Dashboard\SIPOC.cshtml |
speedograph |
Speedograph |
- |
Andromeda.Web\Views\Dashboard\Speedograph.cshtml |
systemautomationpartial |
SystemAutomationPartial |
- |
Andromeda.Web\Views\Dashboard\SystemAutomationPartial.cshtml |
teamanalysis |
TeamAnalysis |
- |
Andromeda.Web\Views\Dashboard\TeamAnalysis.cshtml |
teamcompetency |
TeamCompetency |
- |
Andromeda.Web\Views\Dashboard\TeamCompetency.cshtml |
teamcompetencyandcostgraph |
TeamCompetencyandCostGraph |
- |
Andromeda.Web\Views\Dashboard\TeamCompetencyandCostGraph.cshtml |
teamcompetencychart |
TeamCompetencyChart |
- |
Andromeda.Web\Views\Dashboard\TeamCompetencyChart.cshtml |
teamdashboard |
TeamDashboard |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\TeamDashboard.cshtml |
teamdelayreduction |
TeamDelayReduction |
- |
Andromeda.Web\Views\Dashboard\TeamDelayReduction.cshtml |
teamdelaysgraph |
TeamDelaysGraph |
- |
Andromeda.Web\Views\Dashboard\TeamDelaysGraph.cshtml |
teameffortutilization |
TeamEffortUtilization |
- |
Andromeda.Web\Views\Dashboard\TeamEffortUtilization.cshtml |
teamhourlyaht |
TeamHourlyAHT |
- |
Andromeda.Web\Views\Dashboard\TeamHourlyAHT.cshtml |
teamlocation |
TeamLocation |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\TeamLocation.cshtml |
teammaxdelay |
TeamMaxDelay |
- |
Andromeda.Web\Views\Dashboard\TeamMaxDelay.cshtml |
teammergewithoutprocess |
TeamMergeWithOutProcess |
- |
Andromeda.Web\Views\Dashboard\TeamMergeWithOutProcess.cshtml |
teammonthlyutilization |
TeamMonthlyUtilization |
- |
Andromeda.Web\Views\Dashboard\TeamMonthlyUtilization.cshtml |
teamnoofftepresent |
TeamNoOfFTEPresent |
- |
Andromeda.Web\Views\Dashboard\TeamNoOfFTEPresent.cshtml |
teamshiftsschedule |
TeamShiftsSchedule |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\TeamShiftsSchedule.cshtml |
teamsutilization |
TeamsUtilization |
- |
Andromeda.Web\Views\Dashboard\TeamsUtilization.cshtml |
teamwidgetdashboard |
TeamWidgetDashboard |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\TeamWidgetDashboard.cshtml |
technologydashboard |
TechnologyDashboard |
Andromeda.Core.Entities.ProjectData |
Andromeda.Web\Views\Dashboard\TechnologyDashboard.cshtml |
totalcost |
TotalCost |
- |
Andromeda.Web\Views\Dashboard\TotalCost.cshtml |
undesiredoutcometable |
UndesiredOutcomeTable |
- |
Andromeda.Web\Views\Dashboard\UndesiredOutcomeTable.cshtml |
unitsandresourcehourlygraph |
UnitsAndResourceHourlyGraph |
- |
Andromeda.Web\Views\Dashboard\UnitsAndResourceHourlyGraph.cshtml |
unitsandresourcehourlytabformat |
UnitsAndResourceHourlyTabFormat |
- |
Andromeda.Web\Views\Dashboard\UnitsAndResourceHourlyTabFormat.cshtml |
utilization |
Utilization |
- |
Andromeda.Web\Views\Dashboard\Utilization.cshtml |
volumesgraph |
VolumesGraph |
- |
Andromeda.Web\Views\Dashboard\VolumesGraph.cshtml |
workallocationandskilling |
WorkAllocationandSkilling |
- |
Andromeda.Web\Views\Dashboard\WorkAllocationandSkilling.cshtml |
workallocationcluster |
WorkAllocationCluster |
- |
Andromeda.Web\Views\Dashboard\WorkAllocationCluster.cshtml |
Methods at a Glance¶
Command / Save Operations¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | DeltaAnalysis |
POST |
/Dashboard/DeltaAnalysis |
Parse form data to initialize projects, retrieve and update parent-child... |
| entrypoint | ImplementationAnalysis |
POST |
/Dashboard/ImplementationAnalysis |
Parse input, update project mappings, prepare project data, and return the view... |
| entrypoint | UpdateProjectsData |
GET |
/Dashboard/UpdateProjectsData |
UpdateProjectsData retrieves and updates project data, clears cache, performs... |
| entrypoint | GenerateAndSaveJSONProjectData |
`` | /Dashboard/GenerateAndSaveJSONProjectData |
Generate and save detailed project data by retrieving, filtering, and... |
| entrypoint | SaveProjectJson |
POST |
/Dashboard/SaveProjectJson |
Update project IDs by adding missing ones and removing obsolete ones based on... |
| entrypoint | SaveSelectedTeams |
POST |
/Dashboard/SaveSelectedTeams |
Retrieve selected teams and widget ID from POST data and return a JsonResult to... |
| entrypoint | DeltaAnalysis |
POST |
/Dashboard/DeltaAnalysis |
Parse form data to initialize projects, retrieve and update parent-child... |
| entrypoint | ImplementationAnalysis |
POST |
/Dashboard/ImplementationAnalysis |
Parse input, update project mappings, prepare project data, and return the view... |
| entrypoint | AddCustomWidgetView |
POST |
/Dashboard/AddCustomWidgetView |
AddCustomWidgetView retrieves parameters, saves the custom widget view, and... |
| entrypoint | UpdateCustomWidgetView |
POST |
/Dashboard/UpdateCustomWidgetView |
Extract widget view data from POST request, update model, and return JSON... |
| entrypoint | UpdateActivityName |
POST |
/Dashboard/UpdateActivityName |
Update the activity name in ShapeList and project XML, then return a success... |
Export & Reporting¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | SaveImagesAndTables |
POST |
/Dashboard/SaveImagesAndTables |
The method decodes slide data and URLs, processes images into JPEGs, saves... |
| entrypoint | IssuesLevers |
GET |
/Dashboard/IssuesLevers |
Retrieve project and playbook data, initialize reports and widgets... |
File & Import Operations¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | CriticalPathDelaysGraph |
GET |
/Dashboard/CriticalPathDelaysGraph |
The method retrieves project data using a valid ProjID, processes related... |
| entrypoint | DownloadFileFromPath |
GET |
/Dashboard/DownloadFileFromPath |
DownloadFileFromPath validates inputs, determines MIME type, verifies file... |
Query & View Methods¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | GetScheduledActivities |
GET |
/Dashboard/GetScheduledActivities |
Retrieves and returns deduplicated, ordered scheduled activities for a valid... |
| entrypoint | TreeProjects |
`` | /Dashboard/TreeProjects |
Initialize project variables, retrieve and filter child projects, then return... |
| entrypoint | GetActPotentialData |
GET |
/Dashboard/GetActPotentialData |
GetActPotentialData handles HTTP GET requests and returns a partial view result. |
| entrypoint | GetActivityPotentialData |
GET |
/Dashboard/GetActivityPotentialData |
Retrieve project data using valid IDs, collect related entities, compute... |
| entrypoint | GetUnitsAndEffortOfSelectedActivities |
POST |
/Dashboard/GetUnitsAndEffortOfSelectedActivities |
Filter schedule data by selected activities, group by day and hour, calculate... |
| entrypoint | ObjectiveDetails |
GET |
/Dashboard/ObjectiveDetails |
Retrieve objective details from session if project data matches; otherwise... |
| entrypoint | HRTeamsComparison |
GET |
/Dashboard/HRTeamsComparison |
Retrieve project data, filter active non-system actors, and return their... |
| entrypoint | TeamCompetencyChart |
GET |
/Dashboard/TeamCompetencyChart |
Retrieve project data and related actor details, skill sets, and activities... |
| entrypoint | HRTeamOverView |
GET |
/Dashboard/HRTeamOverView |
Retrieve project data from session using valid ProjID and extract related... |
| entrypoint | InfraCostComponents |
GET |
/Dashboard/InfraCostComponents |
Retrieve infrastructure details and locations from session when ProjID matches... |
| entrypoint | EnterpriseClusters |
GET |
/Dashboard/EnterpriseClusters |
Retrieve project data when ProjID matches session data and filter... |
| entrypoint | GetProjectsData |
GET |
/Dashboard/GetProjectsData |
Retrieve the latest project revision and generate JSON data for response if not... |
| entrypoint | GetProjectTime |
`` | /Dashboard/GetProjectTime |
GetProjectTime retrieves hired personnel time by ProjectID and returns the... |
| entrypoint | GetAllChildProjects |
`` | /Dashboard/GetAllChildProjects |
GetAllChildProjects recursively adds child projects not in CycleProjects by... |
| entrypoint | ProjectChart |
GET |
/Dashboard/ProjectChart |
Filters projects by type to return views with related project IDs and parent... |
| entrypoint | ClusterDashboard |
GET |
/Dashboard/ClusterDashboard |
ClusterDashboard handles an HTTP GET request, retrieves customized views, and... |
| entrypoint | TeamWidgetDashboard |
GET |
/Dashboard/TeamWidgetDashboard |
Handles GET requests by retrieving project ID, fetching and decoding 'Team'... |
| entrypoint | LoadDashboard |
GET |
/Dashboard/LoadDashboard |
LoadDashboard sets preview mode for widgets starting with 'C' and retrieves... |
| entrypoint | CustomDashboard |
GET |
/Dashboard/CustomDashboard |
Set default dashboard view if unset, load project and dashboard data, and... |
| entrypoint | CustomWidgetViews |
GET |
/Dashboard/CustomWidgetViews |
Fetch dashboard and custom widget views, sort them, and render the view with... |
| entrypoint | DeleteCustomWidgetView |
POST |
/Dashboard/DeleteCustomWidgetView |
DeleteCustomWidgetView retrieves the view ID, deletes the custom widget view... |
| entrypoint | GetPrePath |
`` | /Dashboard/GetPrePath |
Build the path by adding the current EndId and iterating over arrows to include... |
| entrypoint | GetActivityDetails |
GET |
/Dashboard/GetActivityDetails |
Retrieve and aggregate detailed activity data including predecessors and... |
| entrypoint | Standardization |
GET |
/Dashboard/Standardization |
The method handles a GET request by invoking IssuesLevers and returning its... |
| entrypoint | Consolidation |
GET |
/Dashboard/Consolidation |
Handle HTTP GET request by calling IssuesLevers with parameter 9 and returning... |
| entrypoint | NVA |
GET |
/Dashboard/NVA |
The method handles an HTTP GET request and returns the result of IssuesLevers... |
| entrypoint | Automation |
GET |
/Dashboard/Automation |
Handles HTTP GET request by calling IssuesLevers with parameter 12 and returns... |
| entrypoint | EnsureControls |
GET |
/Dashboard/EnsureControls |
EnsureControls handles HTTP GET requests by calling IssuesLevers with parameter... |
| entrypoint | LocationCost |
GET |
/Dashboard/LocationCost |
LocationCost handles HTTP GET requests, calls IssuesLevers with parameter 14... |
| entrypoint | WorkAllocation |
GET |
/Dashboard/WorkAllocation |
WorkAllocation handles HTTP GET requests by calling IssuesLevers with parameter... |
| entrypoint | WorkWindow |
GET |
/Dashboard/WorkWindow |
The WorkWindow method handles an HTTP GET request by calling IssuesLevers with... |
| entrypoint | LEAN |
GET |
/Dashboard/LEAN |
The method handles an HTTP GET request, calls IssuesLevers with parameter 17... |
| entrypoint | FTRImprovement |
GET |
/Dashboard/FTRImprovement |
Handle HTTP GET request by calling IssuesLevers with parameter 18 and returning... |
| entrypoint | Delaymanagement |
GET |
/Dashboard/Delaymanagement |
The method handles an HTTP GET request, calls IssuesLevers with 20, and returns... |
| entrypoint | ConfigureControl |
GET |
/Dashboard/ConfigureControl |
ConfigureControl handles HTTP GET requests by calling IssuesLevers with... |
| entrypoint | TrainingandSkilling |
GET |
/Dashboard/TrainingandSkilling |
Handles HTTP GET requests by invoking IssuesLevers with parameter 23 and... |
| entrypoint | FTESizeUtilization |
GET |
/Dashboard/FTESizeUtilization |
FTESizeUtilization handles HTTP GET requests by calling IssuesLevers with... |
| entrypoint | LoadPartialView |
`` | /Dashboard/LoadPartialView |
LoadPartialView sets WidgetID in ViewData and returns the PartialViewResult for... |
| entrypoint | InputSummaryPartialView |
`` | /Dashboard/InputSummaryPartialView |
Clears 'ProjectData' session and returns the specified PartialView. |
| entrypoint | LoadWidgetView |
`` | /Dashboard/LoadWidgetView |
LoadWidgetView populates ViewData with widget details when the view string... |
| entrypoint | TeamAnalysis |
`` | /Dashboard/TeamAnalysis |
Retrieve project and team data, calculate effort metrics, filter active teams... |
| entrypoint | GetEffortDrillData |
GET |
/Dashboard/GetEffortDrillData |
Retrieve and filter project activities and actors, then calculate and aggregate... |
| entrypoint | GetTeamwiseCost |
GET |
/Dashboard/GetTeamwiseCost |
Retrieve activities and actor costs, calculate team costs, and return... |
| entrypoint | GetPeakUtilizationData |
GET |
/Dashboard/GetPeakUtilizationData |
Aggregate hourly actor effort data to compute daily and hourly utilization... |
| entrypoint | GetControlsNodeData |
GET |
/Dashboard/GetControlsNodeData |
Aggregate project activities, risks, and controls, calculate control... |
| entrypoint | GetCompetencyandCompensation |
GET |
/Dashboard/GetCompetencyandCompensation |
Retrieve project data, calculate actor costs in USD and another currency, then... |
| entrypoint | GetActorInfraCost |
GET |
/Dashboard/GetActorInfraCost |
Calculate and group actor infrastructure costs by location, then return as JSON. |
| entrypoint | GetProductsOfProjects |
GET |
/Dashboard/GetProductsOfProjects |
Retrieve current project ID, fetch associated product factors, and return as... |
| entrypoint | GetActivitiesActorsOfProject |
GET |
/Dashboard/GetActivitiesActorsOfProject |
The method handles an HTTP GET request to fetch activities and actors with... |
| entrypoint | GetTeamIncrementData |
GET |
/Dashboard/GetTeamIncrementData |
GetTeamIncrementData returns scheduled observations for a valid team excluding... |
Validation & Rules¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | FormsBrsByTeam |
GET |
/Dashboard/FormsBrsByTeam |
Process forms and business rules by team using session or external project data... |
| entrypoint | GetSelectedTeams |
GET |
/Dashboard/GetSelectedTeams |
GetSelectedTeams validates inputs and returns selected teams as JSON or an... |
| entrypoint | ActivityEffortGraph |
GET |
/Dashboard/ActivityEffortGraph |
Retrieve and validate project data, process skills and schedules, calculate... |
| entrypoint | UnitsAndEffortDetailedData |
GET |
/Dashboard/UnitsAndEffortDetailedData |
Initialize project data, validate and retrieve schedules and actors, process... |
| entrypoint | TeamEffortUtilization |
GET |
/Dashboard/TeamEffortUtilization |
Retrieve and validate project data, calculate and aggregate team effort by... |
Workflow & Routing¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | ProcessMapViews |
GET |
/Dashboard/ProcessMapViews |
ProcessMapViews retrieves and returns control data for a valid ProjID... |
| entrypoint | DeadlinePaths |
GET |
/Dashboard/DeadlinePaths |
Fetch project data, process activities and units, compute deadline paths, and... |
| entrypoint | ReworkPaths |
GET |
/Dashboard/ReworkPaths |
ReworkPaths retrieves project data by ID, processes components to compute... |
| entrypoint | NonProductivePath |
GET |
/Dashboard/NonProductivePath |
Process valid ProjID from session and return aggregated non-productive path... |
| entrypoint | ActorUtilization |
GET |
/Dashboard/ActorUtilization |
Process valid session project data to filter schedule analysis delays greater... |
| entrypoint | TeamHourlyAHT |
GET |
/Dashboard/TeamHourlyAHT |
Process valid project data to filter schedule analysis, calculate AHT metrics... |
| entrypoint | TeamDelayReduction |
GET |
/Dashboard/TeamDelayReduction |
Retrieve and process actors and schedule data with delays from session project... |
| entrypoint | GetActivitiesPotentialData |
GET |
/Dashboard/GetActivitiesPotentialData |
GetActivitiesPotentialData retrieves and processes potential activity data for... |
| entrypoint | GetActivityUnitsData |
GET |
/Dashboard/GetActivityUnitsData |
The method retrieves project and schedule data, filters in-process activities... |
| entrypoint | TeamMergeWithOutProcess |
GET |
/Dashboard/TeamMergeWithOutProcess |
Retrieve project data from session, filter out-process activities, calculate... |
| entrypoint | EfficacyOfCompensatingControls |
GET |
/Dashboard/EfficacyOfCompensatingControls |
Retrieve and process project data when a valid ProjID matches session data. |
| entrypoint | ControlExistenceTable |
GET |
/Dashboard/ControlExistenceTable |
The method retrieves project data from session or models, processes objectives... |
| entrypoint | HRTeamsHiring |
GET |
/Dashboard/HRTeamsHiring |
Retrieve project data from session if matching ProjID; otherwise, fetch and... |
| entrypoint | OrganizationStructure |
GET |
/Dashboard/OrganizationStructure |
Retrieve project data by ProjID, filter and process actors, then return JSON... |
| entrypoint | TeamCompetency |
GET |
/Dashboard/TeamCompetency |
Retrieve valid project data and actor skills from session, process skill... |
| entrypoint | TeamCompetencyandCostGraph |
GET |
/Dashboard/TeamCompetencyandCostGraph |
Process valid project data to filter relevant actors and activities, calculate... |
| entrypoint | WorkAllocationandSkillingGraph |
GET |
/Dashboard/WorkAllocationandSkillingGraph |
The method processes a valid project ID to retrieve and filter project data... |
| entrypoint | ClusterVSM |
GET |
/Dashboard/ClusterVSM |
ClusterVSM retrieves and processes project data from session, calculates... |
| entrypoint | TeamDashboard |
GET |
/Dashboard/TeamDashboard |
Handles HTTP GET request, retrieves and processes customized views, then... |
| entrypoint | TechnologyDashboard |
GET |
/Dashboard/TechnologyDashboard |
Fetch the current project ID, obtain customized views, process data, and render... |
| entrypoint | GetDashboard |
GET |
/Dashboard/GetDashboard |
Process 'view' parameter to configure dashboard, including special handling for... |
| entrypoint | MilestoneVolumeFlow |
GET |
/Dashboard/MilestoneVolumeFlow |
MilestoneVolumeFlow retrieves and processes project activities and arrows... |
| entrypoint | Digitization |
GET |
/Dashboard/Digitization |
Process HTTP GET request by calling IssuesLevers with parameter 11 and return... |
| entrypoint | SLArationalization |
GET |
/Dashboard/SLArationalization |
Process HTTP GET request by calling IssuesLevers with parameter 19 and return... |
| entrypoint | UpdatePlaybooksOrder |
POST |
/Dashboard/UpdatePlaybooksOrder |
UpdatePlaybooksOrder processes a POST request to reorder playbooks by updating... |
| entrypoint | OPActivitiesData |
GET |
/Dashboard/OPActivitiesData |
Fetch and filter activities and product factors by project and actor, then... |
| entrypoint | CustomAnalysis |
`` | /Dashboard/CustomAnalysis |
Retrieve and filter custom views and expressions, then assign them to ViewBag... |
| entrypoint | GetCompleteActivityData |
GET |
/Dashboard/GetCompleteActivityData |
Retrieve and process project data to analyze activities, risks, controls, and... |
| entrypoint | GetAutomatableGridData |
GET |
/Dashboard/GetAutomatableGridData |
Retrieve and process project automation data, calculate metrics, and return... |
| entrypoint | GetTeamSkillCharts |
GET |
/Dashboard/GetTeamSkillCharts |
Retrieve project data, generate or assign cluster evaluations, associate skill... |
| entrypoint | GetModesandSystemsByTeam |
GET |
/Dashboard/GetModesandSystemsByTeam |
Retrieve and process activity and actor data to analyze transfer modes, DOE... |
Other Methods¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | ActivitiesProperties |
GET |
/Dashboard/ActivitiesProperties |
Populate ArrowProperties and ActivityProperties from session cache or retrieve... |
| entrypoint | ActorCluster |
GET |
/Dashboard/ActorCluster |
Retrieve project data by ProjID, filter activity actor arrows, and return... |
| entrypoint | SIPOC |
GET |
/Dashboard/SIPOC |
Retrieve actors, arrows, and product factors directly when ProjID matches... |
| entrypoint | InteractionModel |
GET |
/Dashboard/InteractionModel |
Retrieve project data from session if valid; otherwise, fetch from models using... |
| entrypoint | UndesiredOutcomeTable |
GET |
/Dashboard/UndesiredOutcomeTable |
No key flows are defined in the UndesiredOutcomeTable section. |
| entrypoint | ActorHourlyDelays |
GET |
/Dashboard/ActorHourlyDelays |
Retrieve and analyze actor delay data using session or database project info... |
| entrypoint | ActorHourlyUtilization |
GET |
/Dashboard/ActorHourlyUtilization |
Retrieve project data, filter actors, initialize scheduling, compute hourly... |
| entrypoint | TeamDelaysGraph |
GET |
/Dashboard/TeamDelaysGraph |
Extract actors and filtered schedule analysis from session projectData when... |
| entrypoint | CriticalPathActivities |
GET |
/Dashboard/CriticalPathActivities |
Load project and schedule data, compute critical path activities and metrics... |
| entrypoint | ChartsUnitSchedule |
GET |
/Dashboard/ChartsUnitSchedule |
Generate Gantt chart using valid ProjID and matching ProjectData from session. |
| entrypoint | ChartsTeamSchedule |
GET |
/Dashboard/ChartsTeamSchedule |
ChartsTeamSchedule retrieves project activities and schedules from cache or... |
| entrypoint | UnitsAndResourceHourlyGraph |
`` | /Dashboard/UnitsAndResourceHourlyGraph |
Retrieve and group project activities and schedules by actor and activity for... |
| entrypoint | TeamsUtilization |
GET |
/Dashboard/TeamsUtilization |
Retrieve project data by ProjID, calculate actor efforts from activities and... |
| entrypoint | DaywiseTeamUtilization |
GET |
/Dashboard/DaywiseTeamUtilization |
Retrieve project data from session, calculate daily actor utilization, and... |
| entrypoint | RiskMetricEscalation |
GET |
/Dashboard/RiskMetricEscalation |
Retrieve escalation metrics joined with project risks if session project... |
| entrypoint | RiskMetrics |
GET |
/Dashboard/RiskMetrics |
Retrieve risk data when ProjID matches project data in session. |
| entrypoint | RiskCoverage |
GET |
/Dashboard/RiskCoverage |
The method verifies project ID, calculates risk coverage using project risk... |
| entrypoint | ActivityVsCompensatoryActivity |
GET |
/Dashboard/ActivityVsCompensatoryActivity |
No key flows are defined for ActivityVsCompensatoryActivity. |
| entrypoint | LinesOfDefence |
GET |
/Dashboard/LinesOfDefence |
Retrieve project data from session if valid; otherwise, fetch from multiple... |
| entrypoint | ObjectiveAndControls |
GET |
/Dashboard/ObjectiveAndControls |
Retrieve project data from session if valid; otherwise, load from multiple... |
| entrypoint | RiskMetricsByActivity |
GET |
/Dashboard/RiskMetricsByActivity |
Retrieve project data from session if valid; otherwise, fetch from external... |
| entrypoint | ControlProcedures |
GET |
/Dashboard/ControlProcedures |
Retrieve project data from session if ProjID matches; otherwise, fetch from... |
| entrypoint | EAControls |
GET |
/Dashboard/EAControls |
Retrieve compensatory activities and properties from session or model based on... |
| entrypoint | AdequacyDashboard |
GET |
/Dashboard/AdequacyDashboard |
Retrieve project data from session when ProjID matches, then extract relevant... |
| entrypoint | EffectivenessTable |
GET |
/Dashboard/EffectivenessTable |
Retrieve project data by ProjID, fetch related risk and control data, calculate... |
| entrypoint | CostOfControl |
GET |
/Dashboard/CostOfControl |
No key flows are defined for the CostOfControl method. |
| entrypoint | HRActorActivities |
GET |
/Dashboard/HRActorActivities |
Retrieve project data using ProjID, calculate actor utilization, and return... |
| entrypoint | HROverallUtilization |
`` | /Dashboard/HROverallUtilization |
HROverallUtilization fetches project actors and activities by ProjID... |
| entrypoint | TeamMonthlyUtilization |
GET |
/Dashboard/TeamMonthlyUtilization |
The method calculates utilization by retrieving and filtering project actors... |
| entrypoint | HRProductComparison |
GET |
/Dashboard/HRProductComparison |
Retrieve project-related actors, activities, and skills from session or... |
| entrypoint | InfraModes |
GET |
/Dashboard/InfraModes |
No key flows are defined for InfraModes. |
| entrypoint | InfraLocations |
GET |
/Dashboard/InfraLocations |
Load offices and actors when ProjID matches projectData in session. |
| entrypoint | InterfaceRequirements |
GET |
/Dashboard/InterfaceRequirements |
Retrieve project data from session matching project ID and ensure unique nodes... |
| entrypoint | TotalCost |
GET |
/Dashboard/TotalCost |
TotalCost calculates project costs by retrieving data from session or models... |
| entrypoint | CycleTime |
GET |
/Dashboard/CycleTime |
CycleTime retrieves project optimization history, calculates costs and cycle... |
| entrypoint | ClusterMaxDelay |
GET |
/Dashboard/ClusterMaxDelay |
Fetch project schedules and activities, group activities by cluster, compute... |
| entrypoint | TeamMaxDelay |
GET |
/Dashboard/TeamMaxDelay |
The method retrieves schedule and actor data for a valid ProjID, filters... |
| entrypoint | PathClusterAnalysis |
GET |
/Dashboard/PathClusterAnalysis |
Collect project data, build paths with activities, perform clustering analysis... |
| entrypoint | SetDashBoardCookie |
GET |
/Dashboard/SetDashBoardCookie |
SetDashBoardCookie sets the dashboard ID cookie and confirms the action via... |
| entrypoint | ControlRedundancy |
GET |
/Dashboard/ControlRedundancy |
No key flows are defined in the ControlRedundancy method. |
| entrypoint | Playbooks |
GET |
/Dashboard/Playbooks |
Retrieve and filter playbooks by validating and matching playbook IDs. |
| entrypoint | OPActivitiesDayData |
GET |
/Dashboard/OPActivitiesDayData |
Retrieve and filter project data, calculate effort for activities, and return... |
Associated Screens / Views¶
- ActivitiesProperties →
ActivitiesProperties(Andromeda.Web\Views\Dashboard\ActivitiesProperties.cshtml) - ActorCluster →
ActorCluster(Andromeda.Web\Views\Dashboard\ActorCluster.cshtml) - ProcessMapViews →
ProcessMapViews(Andromeda.Web\Views\Dashboard\ProcessMapViews.cshtml) - SIPOC →
SIPOC(Andromeda.Web\Views\Dashboard\SIPOC.cshtml) - InteractionModel →
InteractionModel(Andromeda.Web\Views\Dashboard\InteractionModel.cshtml) - FormsBrsByTeam →
FormsBrsByTeam(Andromeda.Web\Views\Dashboard\FormsBrsByTeam.cshtml) - DeadlinePaths →
DeadlinePaths(Andromeda.Web\Views\Dashboard\DeadlinePaths.cshtml) - ReworkPaths →
ReworkPaths(Andromeda.Web\Views\Dashboard\ReworkPaths.cshtml) - UndesiredOutcomeTable →
UndesiredOutcomeTable(Andromeda.Web\Views\Dashboard\UndesiredOutcomeTable.cshtml) - ActorUtilization →
ActorUtilization(Andromeda.Web\Views\Dashboard\ActorUtilization.cshtml) - ActorHourlyDelays →
ActorHourlyDelays(Andromeda.Web\Views\Dashboard\ActorHourlyDelays.cshtml) - ActorHourlyUtilization →
ActorHourlyUtilization(Andromeda.Web\Views\Dashboard\ActorHourlyUtilization.cshtml) - TeamHourlyAHT →
TeamHourlyAHT(Andromeda.Web\Views\Dashboard\TeamHourlyAHT.cshtml) - TeamDelayReduction →
TeamDelayReduction(Andromeda.Web\Views\Dashboard\TeamDelayReduction.cshtml) - TeamDelaysGraph →
TeamDelaysGraph(Andromeda.Web\Views\Dashboard\TeamDelaysGraph.cshtml) - CriticalPathActivities →
CriticalPathActivities(Andromeda.Web\Views\Dashboard\CriticalPathActivities.cshtml) - DeltaAnalysis →
DeltaAnalysis(Andromeda.Web\Views\Dashboard\DeltaAnalysis.cshtml) - ImplementationAnalysis →
ImplementationAnalysis(Andromeda.Web\Views\Dashboard\ImplementationAnalysis.cshtml) - ActivityEffortGraph →
ActivityEffortGraph(Andromeda.Web\Views\Dashboard\ActivityEffortGraph.cshtml) - ChartsUnitSchedule →
ChartsUnitSchedule(Andromeda.Web\Views\Dashboard\ChartsUnitSchedule.cshtml) - UnitsAndResourceHourlyGraph →
UnitsAndResourceHourlyGraph(Andromeda.Web\Views\Dashboard\UnitsAndResourceHourlyGraph.cshtml) - CriticalPathDelaysGraph →
CriticalPathDelaysGraph(Andromeda.Web\Views\Dashboard\CriticalPathDelaysGraph.cshtml) - TeamsUtilization →
TeamsUtilization(Andromeda.Web\Views\Dashboard\TeamsUtilization.cshtml) - DaywiseTeamUtilization →
DaywiseTeamUtilization(Andromeda.Web\Views\Dashboard\DaywiseTeamUtilization.cshtml) - TeamMergeWithOutProcess →
TeamMergeWithOutProcess(Andromeda.Web\Views\Dashboard\TeamMergeWithOutProcess.cshtml) - RiskMetricEscalation →
RiskMetricEscalation(Andromeda.Web\Views\Dashboard\RiskMetricEscalation.cshtml) - RiskMetrics →
RiskMetrics(Andromeda.Web\Views\Dashboard\RiskMetrics.cshtml) - RiskCoverage →
RiskCoverage(Andromeda.Web\Views\Dashboard\RiskCoverage.cshtml) - ActivityVsCompensatoryActivity →
ActivityVsCompensatoryActivity(Andromeda.Web\Views\Dashboard\ActivityVsCompensatoryActivity.cshtml) - EfficacyOfCompensatingControls →
EfficacyOfCompensatingControls(Andromeda.Web\Views\Dashboard\EfficacyOfCompensatingControls.cshtml) - LinesOfDefence →
LinesOfDefence(Andromeda.Web\Views\Dashboard\LinesOfDefence.cshtml) - ObjectiveDetails →
ObjectiveDetails(Andromeda.Web\Views\Dashboard\ObjectiveDetails.cshtml) - RiskMetricsByActivity →
RiskMetricsByActivity(Andromeda.Web\Views\Dashboard\RiskMetricsByActivity.cshtml) - ControlProcedures →
ControlProcedures(Andromeda.Web\Views\Dashboard\ControlProcedures.cshtml) - EAControls →
EAControls(Andromeda.Web\Views\Dashboard\EAControls.cshtml) - ControlExistenceTable →
ControlExistenceTable(Andromeda.Web\Views\Dashboard\ControlExistenceTable.cshtml) - EffectivenessTable →
EffectivenessTable(Andromeda.Web\Views\Dashboard\EffectivenessTable.cshtml) - CostOfControl →
CostOfControl(Andromeda.Web\Views\Dashboard\CostOfControl.cshtml) - TeamMonthlyUtilization →
TeamMonthlyUtilization(Andromeda.Web\Views\Dashboard\TeamMonthlyUtilization.cshtml) - HRTeamsComparison →
HRTeamsComparison(Andromeda.Web\Views\Dashboard\HRTeamsComparison.cshtml) - HRProductComparison →
HRProductComparison(Andromeda.Web\Views\Dashboard\HRProductComparison.cshtml) - OrganizationStructure →
OrganizationStructure(Andromeda.Web\Views\Dashboard\OrganizationStructure.cshtml) - TeamCompetency →
TeamCompetency(Andromeda.Web\Views\Dashboard\TeamCompetency.cshtml) - TeamCompetencyChart →
TeamCompetencyChart(Andromeda.Web\Views\Dashboard\TeamCompetencyChart.cshtml) - HRTeamOverView →
HRTeamOverView(Andromeda.Web\Views\Dashboard\HRTeamOverView.cshtml) - TeamCompetencyandCostGraph →
TeamCompetencyandCostGraph(Andromeda.Web\Views\Dashboard\TeamCompetencyandCostGraph.cshtml) - TeamEffortUtilization →
TeamEffortUtilization(Andromeda.Web\Views\Dashboard\TeamEffortUtilization.cshtml) - InfraCostComponents →
InfraCostComponents(Andromeda.Web\Views\Dashboard\InfraCostComponents.cshtml) - InfraLocations →
InfraLocations(Andromeda.Web\Views\Dashboard\InfraLocations.cshtml) - InterfaceRequirements →
InterfaceRequirements(Andromeda.Web\Views\Dashboard\InterfaceRequirements.cshtml) - TotalCost →
TotalCost(Andromeda.Web\Views\Dashboard\TotalCost.cshtml) - CycleTime →
CycleTime(Andromeda.Web\Views\Dashboard\CycleTime.cshtml) - ClusterVSM →
ClusterVSM(Andromeda.Web\Views\Dashboard\ClusterVSM.cshtml) - ProjectChart →
ProjectChart(Andromeda.Web\Views\Dashboard\ProjectChart.cshtml) - ClusterDashboard →
ClusterDashboard(Andromeda.Web\Views\Dashboard\ClusterDashboard.cshtml) - ClusterMaxDelay →
ClusterMaxDelay(Andromeda.Web\Views\Dashboard\ClusterMaxDelay.cshtml) - TeamDashboard →
TeamDashboard(Andromeda.Web\Views\Dashboard\TeamDashboard.cshtml) - TeamWidgetDashboard →
TeamWidgetDashboard(Andromeda.Web\Views\Dashboard\TeamWidgetDashboard.cshtml) - TeamMaxDelay →
TeamMaxDelay(Andromeda.Web\Views\Dashboard\TeamMaxDelay.cshtml) - TechnologyDashboard →
TechnologyDashboard(Andromeda.Web\Views\Dashboard\TechnologyDashboard.cshtml) - PathClusterAnalysis →
PathClusterAnalysis(Andromeda.Web\Views\Dashboard\PathClusterAnalysis.cshtml) - GetDashboard →
GetDashboard(Andromeda.Web\Views\Dashboard\GetDashboard.cshtml) - CustomDashboard →
CustomDashboard(Andromeda.Web\Views\Dashboard\CustomDashboard.cshtml) - CustomWidgetViews →
CustomWidgetViews(Andromeda.Web\Views\Dashboard\CustomWidgetViews.cshtml) - MilestoneVolumeFlow →
MilestoneVolumeFlow(Andromeda.Web\Views\Dashboard\MilestoneVolumeFlow.cshtml) - IssuesLevers →
IssuesLevers(Andromeda.Web\Views\Dashboard\IssuesLevers.cshtml) - LoadWidgetView →
LoadWidgetView(Andromeda.Web\Views\Dashboard\LoadWidgetView.cshtml) - TeamAnalysis →
TeamAnalysis(Andromeda.Web\Views\Dashboard\TeamAnalysis.cshtml) - CustomAnalysis →
CustomAnalysis(Andromeda.Web\Views\Dashboard\CustomAnalysis.cshtml)
Entrypoint Methods¶
ActivitiesProperties¶
Summary: Populate ArrowProperties and ActivityProperties from session cache or retrieve from models if cache is missing or mismatched.
JsonResult DashboardController.ActivitiesProperties(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActivitiesProperties
Cross-layer call chain - DashboardController.ActivitiesProperties → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.ActivitiesProperties → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
DashboardController_ActivitiesProperties["DashboardController.ActivitiesProperties"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ActivitiesProperties --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActivitiesProperties --> Andromeda_Core_Entities_ProjectData_GetArrows
View Metadata
- View:
ActivitiesProperties(Andromeda.Web\Views\Dashboard\ActivitiesProperties.cshtml)
Detailed Analysis
Key Flows - Summary: Populate ArrowProperties and ActivityProperties from session cache or retrieve from models if cache is missing or mismatched. - Populate properties from session cache when project data matches project ID, Retrieve and populate properties from ProcessMapModel, ControlModel, and ActorModel if session data is missing or mismatched
Error Flows - Summary: Prevent null reference exceptions by validating session data and LINQ query properties. - Null reference risk in LINQ queries accessing TransferMode or VolumeFormula without checks
Security Issues - Summary: No security issues identified in ActivitiesProperties method.
Performance Issues - Summary: Cache Session['ProjectData'] to improve performance. - Repeated access to Session['ProjectData'] without caching
Maintainability Issues - Summary: Remove unused code and magic strings; simplify complex, incomplete code for maintainability. - Unused commented-out code and unclear variable declarations reduce clarity, Magic strings like 'ProjectData', 'CONSTANT', 'WORKFLOW', 'DIGITAL' reduce readability and increase error risk, Dense, complex data retrievals and transformations hinder understanding and maintenance, Incomplete or incorrectly formatted code complicates maintenance
UX Impact Notes - Summary: Accurate project data ensures correct activity properties display to users. - Calculated metrics support detailed activity and product displays - No direct UI impact, Incorrect or missing project data causes inaccurate activity properties
Test Case Ideas - Summary: Verify JsonResult output, session data handling, LINQ filtering, data retrieval, and performance. - Handle mismatched session project data - Handle matching session project data - Return JsonResult - Assess performance with large datasets
Dependencies & Called Services - Summary: Uses core system types and domain-specific models for activity properties. - Enumerable utilities, Actor model interface, Control model interface, Mathematical functions, Project data structures, String operations, TimeSpan for time intervals - Process model interface
ActorCluster¶
Summary: Retrieve project data by ProjID, filter activity actor arrows, and return aggregated cluster actor data as JSON.
JsonResult DashboardController.ActorCluster(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActorCluster
Cross-layer call chain - DashboardController.ActorCluster → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
DashboardController_ActorCluster["DashboardController.ActorCluster"]
DashboardController_ActorCluster --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
View Metadata
- View:
ActorCluster(Andromeda.Web\Views\Dashboard\ActorCluster.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - and return aggregated cluster actor data as JSON. - Return aggregated data as JSON - Validate projectData.ProjectID matches expected value
Error Flows - Summary: Handle null references and fix incomplete project ID condition to prevent errors. - Null reference exception from null ProjID parameter, Null reference exception from null ActivityProperties during filtering and grouping, Incomplete projectData.ProjectID condition causing compilation errors or unexpected behavior
Security Issues - Summary: No security issues identified in ActorCluster method.
Performance Issues - Summary: Session object use and heavy LINQ operations degrade performance on large datasets. - Filtering large datasets with Where
Maintainability Issues - Summary: Improve naming, reduce magic strings, fix incomplete conditions, simplify lambdas, and decouple dependencies. - Incomplete condition in projectData.ProjectID check
UX Impact Notes - Summary: Returned JSON structure directly affects frontend user interface. - Returned JSON object structure
Test Case Ideas - and large datasets. - Check activity filtering by different ProjID values from RiskModel - Handle empty activity lists correctly - Validate processing with valid ProjID - Validate correctness of filtering - Confirm ActivityProperties assignment from GetActivitiesActorArrow - Evaluate performance with large datasets during filtering
Dependencies & Called Services - Summary: Uses data collections, risk modeling, project data, and string manipulation. - Enumerable collections, Risk model interface, Project data structures, String operations
ProcessMapViews¶
Summary: ProcessMapViews retrieves and returns control data for a valid ProjID, leveraging caching to improve performance.
JsonResult DashboardController.ProcessMapViews(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ProcessMapViews
View Metadata
- View:
ProcessMapViews(Andromeda.Web\Views\Dashboard\ProcessMapViews.cshtml)
Detailed Analysis
Key Flows - Summary: ProcessMapViews retrieves and returns control data for a valid ProjID - Return data as JSON
Error Flows - Summary: Check ProjID for null before accessing its Value to prevent null reference exceptions. - Null reference exception from dereferencing ProjID.Value without null check - Request failure due to unhandled null ProjID
Security Issues - Summary: No security issues identified in ProcessMapViews method.
Performance Issues - Summary: No performance issues identified in ProcessMapViews method.
Maintainability Issues - Summary: ProcessMapViews tightly couples ControlModel and RiskModel, reducing flexibility and maintainability. - Tight coupling with ControlModel and RiskModel, Reduced flexibility to modify or replace dependencies independently
Test Case Ideas - Summary: Test ProcessMapViews for correct HTTP GET handling, valid ProjID response, and caching behavior. - Handle HTTP GET requests correctly - Return correct JSON for valid ProjID
Dependencies & Called Services - Summary: ProcessMapViews depends on IControlModel service. - IControlModel service dependency
SIPOC¶
Summary: Retrieve actors, arrows, and product factors directly when ProjID matches session projectData.
JsonResult DashboardController.SIPOC(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/SIPOC
Cross-layer call chain - DashboardController.SIPOC → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.SIPOC → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.SIPOC → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow - DashboardController.SIPOC → Insorce.Helpers.Helpers.Waittype - DashboardController.SIPOC → Insorce.Helpers.Helpers.Deadline - DashboardController.SIPOC → Insorce.Helpers.Helpers.ProductName - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_SIPOC["DashboardController.SIPOC"]
Insorce_Helpers_Helpers_Deadline["Insorce.Helpers.Helpers.Deadline"]
Insorce_Helpers_Helpers_ProductName["Insorce.Helpers.Helpers.ProductName"]
Insorce_Helpers_Helpers_Waittype["Insorce.Helpers.Helpers.Waittype"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_SIPOC --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_SIPOC --> Insorce_Helpers_Helpers_Deadline
DashboardController_SIPOC --> Insorce_Helpers_Helpers_ProductName
DashboardController_SIPOC --> Insorce_Helpers_Helpers_Waittype
View Metadata
- View:
SIPOC(Andromeda.Web\Views\Dashboard\SIPOC.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve actors, arrows, and product factors directly when ProjID matches session projectData. - ProjID provided and matches session projectData, Direct retrieval of actors, arrows, and product factors from projectData
Error Flows - Summary: Prevent null reference exceptions by validating objects before access. - Null reference risk from ProjID without null check - Null reference risk from projectData without null check
Security Issues - Summary: Prevent SQL injection by sanitizing inputs in LINQ queries. - SQL injection risk from unsanitized ActivityID, SQL injection risk from unsanitized DeadlineRef
Performance Issues - Summary: Excessive session data, redundant database calls, and inefficient LINQ usage degrade performance. - Unnecessary ToList() calls without null checks - OrderBy sorting with O(n log n) complexity - Inefficient looping over large datasets
Maintainability Issues - Summary: Code complexity and unclear structure reduce maintainability and readability. - Unclear list initialization, Tight coupling with multiple models, Commented out incomplete code, High complexity from nested LINQ and anonymous types, Use of magic strings, Poor formatting and incomplete code snippets, Complex lambda expressions and anonymous object creation
UX Impact Notes - Summary: Conditional styling and data filtering affect SIPOC visualization clarity and element highlighting. - Conditional CSS styling highlights UI elements, Data transformations and filtering affect SIPOC visualization clarity and accuracy
Test Case Ideas - Summary: Verify JSON output, session data retrieval, activity processing, LINQ query correctness, and UI styling. - Return JsonResult - Reset DFSIndex on activities - Assign DeadLineActivity based on act.DeadlineRef - Ensure LINQ query performance and correctness with large datasets - Validate matching of closing brackets to prevent syntax errors
Dependencies & Called Services - Summary: Utilizes core utilities, interfaces, and data models for service operations. - Core utilities: Convert, Enumerable, Helpers, Math, String, TimeSpan, Interface models: IActorModel, IControlModel, IProcessModel, IRiskModel, Project-specific data: ProjectData
InteractionModel¶
Summary: Retrieve project data from session if valid; otherwise, fetch from models using project ID.
JsonResult DashboardController.InteractionModel(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/InteractionModel
Cross-layer call chain - DashboardController.InteractionModel → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.InteractionModel → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.InteractionModel → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_InteractionModel["DashboardController.InteractionModel"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_InteractionModel --> Andromeda_Core_Entities_ProjectData_GetArrows
View Metadata
- View:
InteractionModel(Andromeda.Web\Views\Dashboard\InteractionModel.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session if valid; otherwise, fetch from models using project ID. - Extract project data from session when present and matching project ID - Fetch project data from multiple models when session data is missing or mismatched
Error Flows - Summary: Handle null project ID and null session project data to prevent exceptions and enable fallback retrieval. - Null reference risk from unchecked optional project ID
Security Issues - Summary: Secure Session['ProjectData'] to prevent session tampering and data exposure. - Session['ProjectData'] security risk, Potential session tampering, Risk of data exposure
Performance Issues - Summary: Session data size and multiple database calls degrade InteractionModel performance. - Large or unmanaged Session['ProjectData'] usage, Multiple database calls to ActorModel, ControlModel, ProcessMapModel, Repeated Convert.ToInt32() and ToList() in complex LINQ queries
Maintainability Issues - Summary: Code uses hardcoded strings, undefined variables, tight coupling, complex queries, and unclear variable usage. - Hardcoded cache profile string instead of constant or config, Undefined variable 'p' reduces code clarity, Tight coupling with projectData and multiple models hinders changes, Complex nested LINQ queries with repeated conversions reduce readability, Anonymous types in projections complicate understanding, Unclear initialization and usage of 'actorData' variable
Test Case Ideas - Summary: Verify JSON result correctness, session and model data retrieval, method calls, and data transformations. - Handle different actor IDs for interaction counts and anonymous objects - Return valid JsonResult with ProjID - Return complete and accurate JSON for activities - Compile successfully and return expected JSON structure
Dependencies & Called Services - Summary: Uses data conversion, collection handling, and multiple model interfaces. - Data conversion utilities, Enumerable collections, List collections, IActorModel interface, IControlModel interface, IProcessModel interface, ProjectData model
FormsBrsByTeam¶
Summary: Process forms and business rules by team using session or external project data and return JSON results.
JsonResult DashboardController.FormsBrsByTeam(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/FormsBrsByTeam
Cross-layer call chain - DashboardController.FormsBrsByTeam → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.FormsBrsByTeam → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.FormsBrsByTeam → Andromeda.Core.Entities.ProductFormBRMapping.GetMappedData - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProductFormBRMapping_GetMappedData["Andromeda.Core.Entities.ProductFormBRMapping.GetMappedData"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_FormsBrsByTeam["DashboardController.FormsBrsByTeam"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProductFormBRMapping_GetMappedData
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_FormsBrsByTeam --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
FormsBrsByTeam(Andromeda.Web\Views\Dashboard\FormsBrsByTeam.cshtml)
Detailed Analysis
Key Flows - Summary: Process forms and business rules by team using session or external project data and return JSON results. - Happy path: Use session data matching ProjID to filter actors, activities, and group forms by team, Alternative path: Retrieve actors and activities from external models when session data is missing
Error Flows - Summary: Handle null ProjID and empty mappedData to prevent runtime exceptions. - Null reference exception from ProjID.Value without null check
Security Issues - Summary: Sanitize projectId to prevent SQL injection in database queries. - SQL injection risk from unsanitized projectId, Need input validation for projectId
Performance Issues - Summary: Session storage and multiple LINQ operations on large datasets degrade performance. - Session storage of project data impacts performance, Multiple ToList() calls cause memory overhead and repeated enumeration, LINQ Any and First with lambdas slow on large collections, Multiple database and complex LINQ queries degrade performance, Aggregate with Concat and ToList causes memory overhead, String splitting on large strings impacts performance
Maintainability Issues - Summary: Code uses unclear naming, magic strings, complex queries, and has malformed conditionals reducing maintainability. - Tight coupling of data structure and transformation logic
UX Impact Notes - Summary: Large data processing and JSON structure may degrade frontend user experience. - Returned JSON data structure affecting frontend user flows
Test Case Ideas - Summary: Verify data retrieval, filtering, grouping, joining, aggregation, and JSON output correctness. - Valid ProjID with matching session project data, Correct retrieval and filtering of activities and properties, Filtering out empty property values and grouping by name, Joining actors and activities by ActorId, Any method behavior on mappedData with and without matches, String splitting with and without '^' character, Aggregate method combining business rule collections, Grouping and filtering business rules by team and cluster, Correct JSON structure and data for various inputs, Handling edge cases with empty actors or teams collections
Dependencies & Called Services - Summary: Uses collections, interfaces, and domain models for form and project data processing. - Enumerable for collection operations, IActorModel interface for actor abstraction, IProcessModel interface for process abstraction, List collection for managing items, ProductFormBRMapping domain model, ProjectData domain model, String type for text data
DeadlinePaths¶
Summary: Fetch project data, process activities and units, compute deadline paths, and return top results as JSON.
JsonResult DashboardController.DeadlinePaths(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/DeadlinePaths
Cross-layer call chain - DashboardController.DeadlinePaths → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.DeadlinePaths → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.DeadlinePaths → Andromeda.Core.Entities.Arrow.Clone - DashboardController.DeadlinePaths → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.DeadlinePaths → Andromeda.Core.Entities.Activity.Clone - DashboardController.DeadlinePaths → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.DeadlinePaths → Andromeda.Core.Services.Algorithms.Delooper.deloop - DashboardController.DeadlinePaths → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping["Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_DeadlinePaths["DashboardController.DeadlinePaths"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_Activity_Clone
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_DeadlinePaths --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_DeadlinePaths --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_DeadlinePaths --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_DeadlinePaths --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
DeadlinePaths(Andromeda.Web\Views\Dashboard\DeadlinePaths.cshtml)
Detailed Analysis
Key Flows - and return top results as JSON. - return JSON with AllowGet - Return empty MapPath list if no 'Absolute' or 'Relative' deadline activities
Error Flows - Summary: Handle null project ID to prevent exceptions and fix conditional syntax errors. - Null reference exception from unwrapping null project ID, Syntax error in project ID conditional causing compilation or runtime failure
Security Issues - Summary: No security issues identified in DeadlinePaths method.
Performance Issues - Summary: Inefficient data handling and unbounded collection operations degrade performance. - Multiple ToList() calls cause high memory usage with large datasets - Take(10) and ToArray() on large datasets increase memory usage
Maintainability Issues - Summary: Magic strings, numbers, undefined variables, and incomplete code reduce maintainability and clarity. - Use of magic strings reduces code clarity, Use of magic numbers reduces readability, Undefined variables reduce code clarity, Incomplete and syntactically incorrect conditionals cause compilation issues, Incomplete and truncated code hinders maintenance, Use of unexplained magic properties hinders understanding
UX Impact Notes - Summary: Handle null ProjID and empty MapPath responses to prevent user errors and confusion. - Null ProjID causes errors or unexpected behavior, Empty MapPath list affects UI and user experience, Availability time shown as string with '-' may confuse users
Test Case Ideas - Summary: Verify DeadlinePaths methods handle data retrieval - getDeadlinePath method returns expected results for inputs - Behavior when no activities have 'Absolute' or 'Relative' deadlines returns empty list
Dependencies & Called Services - Summary: Uses core data structures, math utilities, time handling, and project-specific models. - Core data structures: List, Dictionary, Enumerable, Mathematical operations: Math, Double, Time management: TimeSpan, Project-specific models and extensions: Activity, Arrow, IFinalPlanModel, ProcessExtensions, ProjectData, String manipulation
ReworkPaths¶
Summary: ReworkPaths retrieves project data by ID, processes components to compute rework reduction paths, and returns JSON results.
JsonResult DashboardController.ReworkPaths(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ReworkPaths
Cross-layer call chain - DashboardController.ReworkPaths → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.ReworkPaths → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ReworkPaths → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.ReworkPaths → Andromeda.Core.Entities.Arrow.Clone - DashboardController.ReworkPaths → Andromeda.Core.Entities.ProjectData.GetDelooperObj - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_ReworkPaths["DashboardController.ReworkPaths"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_ReworkPaths --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ReworkPaths --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
View Metadata
- View:
ReworkPaths(Andromeda.Web\Views\Dashboard\ReworkPaths.cshtml)
Detailed Analysis
Key Flows - and returns JSON results. - Return results as JSON
Error Flows - Summary: Handle null references and empty collections to prevent exceptions and ensure complete conditionals. - Null reference exceptions from unchecked optional project ID - Incomplete conditional statements causing unhandled cases - Exceptions from calling First() or FirstOrDefault() on empty collections without checks
Security Issues - Summary: ReworkPaths exposes JSON data without authentication, risking information disclosure. - Lack of authentication and authorization checks
Performance Issues - Summary: Optimize data handling and method calls to prevent performance degradation. - Unchecked TryParse results risk incorrect data processing
Maintainability Issues - Summary: ReworkPaths suffers from unclear naming, magic values, incomplete code, and complex LINQ harming maintainability. - Use of magic strings and numbers without explanations, Incomplete conditional statements reducing readability, Extensive use of anonymous types complicating understanding, Unclear and inconsistent variable naming, Complex lambda expressions and multiple LINQ calls, Incomplete or ineffective code lines
UX Impact Notes - Summary: ReworkPaths updates JSON data that directly affects UI display and user experience. - Data processing influences displayed content - Update UI with returned JSON data
Test Case Ideas - Summary: Verify JSON output, data retrieval, cloning, grouping, filtering, and calculation accuracy. - Return JsonResult for valid ProjID - Return JSON with expected properties and allow GET
Dependencies & Called Services - Summary: ReworkPaths uses common data types and interfaces for data manipulation and calculations. - Arrow library, Decimal type, Double type, Enumerable interface, IFinalPlanModel interface, List collection, Math utilities, ProjectData structure, String type, TimeSpan type
UndesiredOutcomeTable¶
Summary: No key flows are defined in the UndesiredOutcomeTable section.
JsonResult DashboardController.UndesiredOutcomeTable(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/UndesiredOutcomeTable
Cross-layer call chain - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Services.Algorithms.Delooper.deloop - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - DashboardController.UndesiredOutcomeTable → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows["Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows"]
Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping["Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_UndesiredOutcomeTable["DashboardController.UndesiredOutcomeTable"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_UndesiredOutcomeTable --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
UndesiredOutcomeTable(Andromeda.Web\Views\Dashboard\UndesiredOutcomeTable.cshtml)
Detailed Analysis
Key Flows - Summary: No key flows are defined in the UndesiredOutcomeTable section.
Error Flows - Summary: Handle null references in ProjID - Null reference exception on null ProjID parameter access, Null reference exception if session ProjectData is null, Null reference exception during activity FindByID in arrow validation
Security Issues - Summary: No security issues identified in UndesiredOutcomeTable method.
Performance Issues - Summary: Excessive database calls and inefficient collection operations degrade performance. - Use of ToList() and GroupBy loading large datasets into memory - Use of OrderBy on large datasets
Maintainability Issues - Summary: Code contains unused variables, tight coupling, unclear snippets, and reduces readability. - Unused 'products' variable indicating dead code, Incomplete or improperly formatted code causing compilation errors, Tight coupling with projectData, ActorModel, and ControlModel reducing modularity, Use of magic string 'BusinessRule' reducing clarity, Unclear code snippets and variable declarations reducing readability, Anonymous types and complex inline calculations reducing maintainability, Lambda expressions with multiple statements and incomplete snippets reducing clarity
UX Impact Notes - Summary: Calculation results and data errors directly affect user experience. - Calculated benefit and effort values influence UI data display - Errors in data retrieval and processing degrade user experience
Test Case Ideas - Summary: Validate data retrieval - Calculate effort, effort saved, and benefit correctly in JSON - Valid ProjID returns expected JSON - Retrieve 'team' object and set OS based on IsActive status
Dependencies & Called Services - Summary: Uses collections, interfaces, math utilities, process extensions, and project data models. - Dictionary collection, Enumerable utilities, IActorModel interface, IControlModel interface, IFinalPlanModel interface, List collection, Math utilities, ProjectData model, String utilities - ProcessExtensions utilities
NonProductivePath¶
Summary: Process valid ProjID from session and return aggregated non-productive path metrics as JSON.
JsonResult DashboardController.NonProductivePath(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/NonProductivePath
Cross-layer call chain - DashboardController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetTransferModes - DashboardController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.NonProductivePath → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.NonProductivePath → Andromeda.Core.Services.Algorithms.Delooper.deloop - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetTransferModes → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_ProjectData_GetTransferModes["Andromeda.Core.Entities.ProjectData.GetTransferModes"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_NonProductivePath["DashboardController.NonProductivePath"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetTransferModes --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetTransferModes
DashboardController_NonProductivePath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_NonProductivePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - Summary: Process valid ProjID from session and return aggregated non-productive path metrics as JSON. - Return JSON with aggregated metrics and processed data - Validate ProjID and retrieve project data from session
Error Flows - Summary: Handle null references in parameters - NullReferenceException from nullable ProjID without null check
Security Issues - Summary: No security issues identified in NonProductivePath method.
Performance Issues - Summary: Optimize data retrieval and caching to prevent stale data and reduce memory usage. - Improper output caching causes stale data, Multiple ToList() calls increase memory usage, Repeated LINQ queries cause multiple enumerations, Repeated FindByID calls degrade performance
Maintainability Issues - Summary: Code complexity and duplication reduce maintainability and readability. - Repeated logic for effort and count calculations requires refactoring
UX Impact Notes - Summary: Errors in data processing affect UI display of non-productive path metrics. - Returned JSON data displays non-productive path metrics on UI
Test Case Ideas - Summary: Verify data retrieval, filtering, grouping, and method outputs for NonProductivePath. - Return correct data for valid ProjID - Validate outputs of GetNPAActivities and GetPeakTasks methods
Dependencies & Called Services - Summary: Uses core system types and domain-specific models for processing and control. - IControlModel for control logic - ProcessExtensions for process utilities
ActorUtilization¶
Summary: Process valid session project data to filter schedule analysis delays greater than zero.
JsonResult DashboardController.ActorUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActorUtilization
View Metadata
- View:
ActorUtilization(Andromeda.Web\Views\Dashboard\ActorUtilization.cshtml)
Detailed Analysis
Key Flows - Summary: Process valid session project data to filter schedule analysis delays greater than zero. - Filter schedule analysis data for delays > 0 - Validate session project data matches project ID
Error Flows - Summary: Handle null session variables and ensure all variables are properly initialized. - Null reference risk from unhandled 'ProjectData' session variable
Security Issues - Summary: No security issues identified in ActorUtilization method.
Performance Issues - Summary: Optimize data access and LINQ operations to improve performance on large datasets. - Repeated access to Session['ProjectData'], In-memory filtering and conversion of large ScheduleAnalysisData collections, Multiple Max and Count calls within LINQ Select statements
Maintainability Issues - Summary: Improve naming conventions and replace magic strings and numbers with constants. - Non-standard method and parameter naming, Use of magic strings for session keys instead of constants or enums, Undefined or unclear variable names, Magic numbers in Math.Round calls without named constants
Test Case Ideas - and conditional logic handling. - Handle non-matching projectData.ProjectID - Handle empty schedule analysis data from ActorModel service - Handle different D.Value conditions - Process schedule analysis data with no actor present records - Return JsonResult
Dependencies & Called Services - Summary: Utilizes collections and actor model interfaces for service operations. - Enumerable for collection operations, IActorModel interface for actor abstraction, List for data storage, Math for calculations
ActorHourlyDelays¶
Summary: Retrieve and analyze actor delay data using session or database project info, then return JSON results.
JsonResult DashboardController.ActorHourlyDelays(int? ProjID, int? isCriticalPath)
Routing
- HTTP:
GET - URL:
/Dashboard/ActorHourlyDelays
Cross-layer call chain - DashboardController.ActorHourlyDelays → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.ActorHourlyDelays → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.ActorHourlyDelays → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - DashboardController.ActorHourlyDelays → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_ActorHourlyDelays["DashboardController.ActorHourlyDelays"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActorHourlyDelays --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
ActorHourlyDelays(Andromeda.Web\Views\Dashboard\ActorHourlyDelays.cshtml)
Detailed Analysis
Key Flows - then return JSON results. - Fetch actors and schedule analysis from ActorModel if session data missing or mismatched - Return final analysis as JSON
Error Flows - Summary: Handle null references and conversion errors in session data and actor method calls. - Null references from actor methods returning null values - Unhandled exceptions from ActorModel method calls without error handling
Security Issues - Summary: No security issues identified in ActorHourlyDelays method.
Performance Issues - Summary: Inefficient data handling and LINQ usage degrade performance on large datasets. - Excessive memory allocation from ToList() on large datasets
Maintainability Issues - Summary: The method uses unclear naming, magic strings, anonymous types, and unfinished code, harming maintainability. - Use magic strings instead of constants, Undefined or undocumented variables like 'ProjID', Commented-out and incomplete code present, Anonymous types in LINQ reduce clarity, Non-descriptive variable names like 'al', 'schedData', 'analysisData', Unclear code snippets reduce readability
UX Impact Notes - Summary: Improper data formatting and filtering cause misleading user experience. - Improper JSON formatting affects user experience, Errors during data processing degrade UX, Incorrect filtering of delay data misleads users
Test Case Ideas - Summary: Verify data retrieval, filtering, grouping, method calls, and correct JSON output. - Correct retrieval and assignment of actors and AllUnitsSched from project data and ActorModel - Filtering schedData by ActivityID and performance on large datasets - Method executes without errors and returns expected JSON
Dependencies & Called Services - Summary: Uses Actor model and data processing libraries for hourly delay calculations. - Actor model interface, Data conversion utilities, Enumerable collections, List data structure, Mathematical functions, Project-specific data
ActorHourlyUtilization¶
Summary: Retrieve project data, filter actors, initialize scheduling, compute hourly utilization, aggregate team efforts, and return JSON results.
JsonResult DashboardController.ActorHourlyUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActorHourlyUtilization
Cross-layer call chain - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Gantt.TeamCountByHourly - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.ActorHourlyUtilization → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Sched.StartTimeHourMin - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_ActorHourlyUtilization["DashboardController.ActorHourlyUtilization"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ActorHourlyUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
ActorHourlyUtilization(Andromeda.Web\Views\Dashboard\ActorHourlyUtilization.cshtml)
Detailed Analysis
Key Flows - and return JSON results. - Calculate cumulative capacities and minimum FTEs - Return results as JSON - Validate ProjID and retrieve project data from session
Error Flows - Summary: Fix null reference risks, undefined variables, typos, and incomplete code causing errors. - Null reference exception from unchecked ProjID - Typo in null check for location property
Security Issues - Summary: No security issues identified in ActorHourlyUtilization method.
Performance Issues - Summary: Multiple LINQ queries and nested loops over large datasets degrade performance. - Multiple LINQ queries over large datasets
Maintainability Issues - Summary: Code uses unclear names, magic values, complex queries, and contains dead code. - Use constants instead of magic strings, Replace magic numbers with named constants, Avoid anonymous objects and nested LINQ for clarity, Improve variable naming for readability, Remove commented out and dead code
Test Case Ideas - Summary: Validate data retrieval - Calculate office close time scenarios before and after current time, Calculate cumulative capacity and minimum FTE correctly - Handle empty and large actor collections for performance and correctness - Test attendance version logic for version 0 and above - Return early when actor ID is in 'nt' collection and continue otherwise
Dependencies & Called Services - Summary: Uses models and utilities to calculate actor hourly utilization. - Actor model interfaces, Project data structures, Mathematical utilities, Enumerable collections, Gantt chart utilities
TeamHourlyAHT¶
Summary: Process valid project data to filter schedule analysis, calculate AHT metrics, and extract team info with max hours.
JsonResult DashboardController.TeamHourlyAHT(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamHourlyAHT
Cross-layer call chain - DashboardController.TeamHourlyAHT → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamHourlyAHT → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.TeamHourlyAHT → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - DashboardController.TeamHourlyAHT → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamHourlyAHT["DashboardController.TeamHourlyAHT"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_TeamHourlyAHT --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamHourlyAHT(Andromeda.Web\Views\Dashboard\TeamHourlyAHT.cshtml)
Detailed Analysis
Key Flows - Summary: Process valid project data to filter schedule analysis, calculate AHT metrics, and extract team info with max hours. - Calculate total and individual AHT metrics, Calculate maximum hour from grouped data - Filter schedule analysis data with delays, Retrieve actors from project data, Extract and order team names - Validate session ProjectData against ProjID
Error Flows - Summary: Handle null or missing ProjectData by retrieving fallback data from model methods. - Null reference risk from uninitialized ProjectData session variable, Fallback data retrieval on null or mismatched project data
Security Issues - Summary: No security issues identified.
Performance Issues - Summary: LINQ filtering and multiple database calls degrade schedule analysis performance. - LINQ Where filtering on large schedule analysis data sets
Maintainability Issues - Summary: Code uses magic strings and numbers, complex conditions, and risky caching harming maintainability. - Use of magic strings reducing readability, Use of magic numbers without named constants, Complex conditional statements hindering understanding, Unclear method call relations affecting maintenance, OutputCache attribute risking stale data if misconfigured
UX Impact Notes - Summary: Calculating office hours affects how team availability displays in the UI. - Office hours calculation, Team availability UI display
Test Case Ideas - Summary: Validate project ID handling - Valid ProjID with matching session ProjectData, Mismatched project IDs between session and ProjID parameter, Caching behavior and stale data due to OutputCache, Filtering schedule analysis for delays greater than zero, Correct invocation of Actors method in else condition, AHT calculations with and without actor presence, Ordering of team names and maximum hour calculation, Office hour calculations for different actor locations
Dependencies & Called Services - Summary: Uses core libraries and project-specific models for data processing and actor management. - Core library Enumerable for data operations, Actor and IActorModel for actor management, Math for calculations, ProjectData for project-specific data handling
TeamDelayReduction¶
Summary: Retrieve and process actors and schedule data with delays from session project matching ProjID.
JsonResult DashboardController.TeamDelayReduction(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamDelayReduction
Cross-layer call chain - DashboardController.TeamDelayReduction → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamDelayReduction → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.TeamDelayReduction → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - DashboardController.TeamDelayReduction → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamDelayReduction["DashboardController.TeamDelayReduction"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_TeamDelayReduction --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamDelayReduction(Andromeda.Web\Views\Dashboard\TeamDelayReduction.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and process actors and schedule data with delays from session project matching ProjID. - Process filtered delay data - Session project data exists and matches ProjID, Retrieve actors and schedule data from session, Filter schedule data for delays greater than zero
Error Flows - Summary: Prevent null reference exceptions in project and schedule data access. - Null reference risk in projectData despite partial null checks
Security Issues - Summary: Lack of session data validation risks exposure and tampering. - Missing session data validation, Session data exposure risk, Session data tampering risk
Performance Issues - Summary: Caching and LINQ operations may degrade performance with large datasets or slow methods. - and Select degrade performance on large datasets
Maintainability Issues - Summary: Code uses unclear constants and complex logic - Use of magic strings requiring updates if changed - Complex conditional logic for AHT calculations
UX Impact Notes - Summary: Displays team delay reduction and cycle hours data in the user interface. - Display team delay reduction data, Display team cycle hours data
Test Case Ideas - Summary: Verify caching, filtering, data calculations, and correct actor retrieval across varied inputs. - GetActors method returns expected actor list - Method compiles and returns expected results
Dependencies & Called Services - Summary: Uses core models and utilities for actor management and project data handling. - Actor model, Enumerable utilities, IActorModel interface, Math utilities, ProjectData management
TeamDelaysGraph¶
Summary: Extract actors and filtered schedule analysis from session projectData when ProjectID matches ProjID.
JsonResult DashboardController.TeamDelaysGraph(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamDelaysGraph
Cross-layer call chain - DashboardController.TeamDelaysGraph → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamDelaysGraph["DashboardController.TeamDelaysGraph"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamDelaysGraph --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamDelaysGraph(Andromeda.Web\Views\Dashboard\TeamDelaysGraph.cshtml)
Detailed Analysis
Key Flows - Summary: Extract actors and filtered schedule analysis from session projectData when ProjectID matches ProjID. - Check projectData existence in session - Verify ProjectID matches ProjID, Extract actors from projectData, Extract filtered schedule analysis from projectData
Error Flows - Summary: Handle null references - and fix incomplete condition checks. - Null reference risk if projectData is null despite prior null checks - mitigated by conditional zero return
Security Issues - Summary: Accessing Session data without validation risks security breaches. - Direct access to Session data, Lack of validation or sanitization of Session data
Performance Issues - Summary: Multiple LINQ queries and missing pagination degrade performance on large datasets. - Multiple LINQ queries with ToList() materialization, No pagination or limits on schedule analysis filtering with delays
Maintainability Issues - error-prone logic. - Violates single responsibility principle by combining data retrieval and caching, Incomplete or corrupted conditional statement risks compilation or runtime errors, Use of magic number '0' reduces code clarity, Complex LINQ queries and conditional calculations hinder readability and maintenance
UX Impact Notes - Summary: Provides JSON data for rendering delay analysis graphs in the UI. - JSON data for delay analysis graphs, Supports UI rendering of delay reports
Test Case Ideas - Summary: Verify data retrieval, filtering, caching, zero-value handling, and method completion. - Schedule analysis data with and without delays for filtering logic - Method returns control correctly after execution
Dependencies & Called Services - Summary: Uses data structures, actor models, math functions, and project data for processing. - Enumerable for data iteration, IActorModel for actor-based processing, Math for calculations, ProjectData for project-specific information
GetSelectedTeams¶
Summary: GetSelectedTeams validates inputs and returns selected teams as JSON or an empty list if inputs are invalid.
JsonResult DashboardController.GetSelectedTeams(int? ProjID, int? WidgetID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetSelectedTeams
Detailed Analysis
Key Flows - Summary: GetSelectedTeams validates inputs and returns selected teams as JSON or an empty list if inputs are invalid. - Return empty JSON list if inputs invalid - Return team list as JsonResult - Validate ProjID and WidgetID greater than zero
Error Flows - Summary: Return empty list for null or non-positive ProjID or WidgetID. - Return empty list for invalid parameters
Security Issues - Summary: No security issues identified in GetSelectedTeams method.
Performance Issues - Summary: No performance issues identified in GetSelectedTeams method.
Maintainability Issues - Summary: Remove hardcoded delimiters and ensure method returns to improve maintainability. - Missing return statement risks compilation errors
UX Impact Notes - Summary: Returning empty lists on invalid input causes confusing - Empty list return on invalid input
Test Case Ideas - Summary: Verify JsonResult return and performance with large JSON data in GetSelectedTeams. - Return JsonResult with valid ProjID and WidgetID
Dependencies & Called Services - Summary: Uses project model and string collections for team selection. - Enumerable collections, IProjectModel interface, String data type
GetScheduledActivities¶
Summary: Retrieves and returns deduplicated, ordered scheduled activities for a valid project ID.
JsonResult DashboardController.GetScheduledActivities(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetScheduledActivities
Detailed Analysis
Key Flows - Summary: Retrieves and returns deduplicated - Return activities as JSON - Validate project ID
Error Flows - Summary: Check project ID parameter for null to prevent null reference exceptions. - Null check for project ID parameter
Security Issues - Summary: No security issues identified in GetScheduledActivities method.
Performance Issues - Summary: Distinct() and OrderBy() on activities degrade performance with large datasets. - Use of Distinct() on activities, Use of OrderBy() on activities
Maintainability Issues - Summary: Anonymous types in Select() reduce code clarity and maintainability. - Use of anonymous types in Select() projection
UX Impact Notes - Summary: Returning JSON with AllowGet risks UX issues if request is not GET. - Returning JSON with JsonRequestBehavior.AllowGet
Test Case Ideas - and performance with large datasets. - Performance with large datasets using Distinct and OrderBy
Dependencies & Called Services - Summary: Uses Enumerable for collections and IActorModel for actor interactions. - Enumerable for collection operations, IActorModel for actor interactions
CriticalPathActivities¶
Summary: Load project and schedule data, compute critical path activities and metrics, then return JSON for dashboard.
JsonResult DashboardController.CriticalPathActivities(int? ProjID, string ActivityID, string onlyPath)
Routing
- HTTP:
GET - URL:
/Dashboard/CriticalPathActivities
Cross-layer call chain - DashboardController.CriticalPathActivities → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.CriticalPathActivities → Andromeda.Core.Services.Algorithms.Delooper.GetPossiblePaths - DashboardController.CriticalPathActivities → Andromeda.Core.Services.TimeRange.ContainsValue
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths["Andromeda.Core.Services.Algorithms.Delooper.GetPossiblePaths"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
DashboardController_CriticalPathActivities["DashboardController.CriticalPathActivities"]
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_CriticalPathActivities --> Andromeda_Core_Services_TimeRange_ContainsValue
View Metadata
- View:
CriticalPathActivities(Andromeda.Web\Views\Dashboard\CriticalPathActivities.cshtml)
Detailed Analysis
Key Flows - then return JSON for dashboard. - Calculate recommendations and metrics using schedule, actor presence, delays, effort, utilization - Fetch project-related data: business rules, automated systems, risks, lines of defence - Load project data from session and schedule data from project or ActorModel - Construct and return JSON with path activities
Error Flows - Summary: Handle null references - IndexOutOfRangeExceptions from unchecked array accesses during file parsing - Null pointer exceptions in arrow and actor object checks
Security Issues - Summary: Address configuration caching, SQL injection, and condition validation to ensure security. - Uncached ConfigurationManager.AppSettings usage risks performance and security
Performance Issues - Summary: Optimize caching, reduce LINQ and ToList() calls, avoid full file reads, and minimize repeated queries. - Sum) on large datasets
Maintainability Issues - Summary: Code suffers from unclear naming, magic numbers, complex queries, and poor structure reducing maintainability. - Use of magic numbers reduces code clarity, Non-descriptive variable names reduce readability, Complex nested LINQ queries reduce clarity, Hardcoded file names and paths reduce flexibility, Extensive use of anonymous types complicates understanding, Lack of comments and unclear code structure complicate maintenance, Tight coupling with external models reduces modularity, Incomplete code snippets and syntax errors hinder maintainability, Incomplete conditional statements and missing context reduce maintainability
UX Impact Notes - handle errors - Returning null causes poor user feedback and confusion - Performance issues with large datasets degrade user experience
Test Case Ideas - Summary: Verify file handling, data parsing, filtering, calculations, output, performance, and caching behaviors. - File existence checks for Activity.txt - compensatory activities with varied datasets - Performance testing with large datasets for bottlenecks - Caching behavior with varied inputs and cache profile settings
Dependencies & Called Services - Summary: Uses core data types, collections, date-time utilities, math functions, file operations, and domain-specific models. - Core data types (Array, Double, Int32, String), Collections and LINQ utilities (List, Dictionary, Enumerable), Date and time handling (DateTime, TimeSpan, TimeRange), Mathematical functions (Math), File operations (File), Domain-specific interfaces (IActorModel, IControlModel, IFinalPlanModel, IProcessModel, IRiskModel) - Process-related extensions (ProcessExtensions)
DeltaAnalysis¶
Summary: Parse form data to initialize projects, retrieve and update parent-child mappings, create project data objects, and return the view.
ViewResult DashboardController.DeltaAnalysis(FormCollection collection)
Routing
- HTTP:
POST - URL:
/Dashboard/DeltaAnalysis
View Metadata
- View:
DeltaAnalysis(Andromeda.Web\Views\Dashboard\DeltaAnalysis.cshtml) - Model:
IList<Andromeda.Core.Entities.ProjectData>
Detailed Analysis
Key Flows - retrieve and update parent-child mappings - create project data objects - and return the view. - Create ProjectData objects from second project collection - Add project data to ProjectsComp collection and return view - Update mappings with current project ID and assign to ViewBag
Error Flows - Summary: Parsing user input without validation causes exceptions. - Direct parsing of user input without validation, Exceptions from invalid input during parsing
Security Issues - Summary: Direct parsing of user input risks runtime exceptions and injection attacks. - Injection vulnerabilities from unvalidated JSON decoding
Performance Issues - Summary: Inefficient data handling degrades performance on large project collections. - Use of ToList() on large datasets impacts performance
Maintainability Issues - Summary: Replace magic strings with constants and simplify complex, incomplete code for better maintainability. - Replace magic strings with constants, Reduce constructor parameter count in ProjectData, Fix incomplete or truncated code segments, Simplify long, complex method calls for clarity
Test Case Ideas - Summary: Validate data initialization - and ViewBag assignments in project mapping. - Return expected data from GetAllMappingDetailsForParentChildProj - Update MappingDetails with current project ID and assign to ViewBag
Dependencies & Called Services - Summary: Uses collections and process model interfaces for data handling and processing. - Enumerable for data enumeration, ICollection for collection management, IProcessModel for process abstraction, Int32 for integer operations, List for dynamic data storage
ImplementationAnalysis¶
Summary: Parse input, update project mappings, prepare project data, and return the view with data.
ViewResult DashboardController.ImplementationAnalysis(FormCollection collection)
Routing
- HTTP:
POST - URL:
/Dashboard/ImplementationAnalysis
View Metadata
- View:
ImplementationAnalysis(Andromeda.Web\Views\Dashboard\ImplementationAnalysis.cshtml) - Model:
IList<Andromeda.Core.Entities.ProjectData>
Detailed Analysis
Key Flows - update project mappings - and return the view with data. - Assign updated mappings to ViewBag property with typo - Iterate collections to create ProjectData instances - Return ViewResult with prepared project data - Update mapping details' CurrentProjId to base project ID
Error Flows - Summary: Lack of error handling causes unhandled exceptions during JSON parsing. - No error handling for JSON parsing or decoding, No validation around System.Web.Helpers.Json.Decode usage
Security Issues - Summary: Direct parsing of user input causes SQL injection and data tampering risks. - Unvalidated JSON decoding from user input
Performance Issues - Summary: Inefficient data handling and object creation degrade performance and increase memory use. - Lack of error handling in JSON decoding risks performance with malformed input, Excessive memory allocation from ToList() on large collections, High memory pressure from creating ProjectData objects inside loops, Incomplete or inefficient loop structure reduces iteration performance
Maintainability Issues - Summary: Tight coupling and poor naming reduce modularity and readability, risking bugs. - Tight coupling with specific models and helper classes reduces modularity, Typo in ViewBag property name causes confusion and bugs, Non-descriptive variable and collection names hinder readability
UX Impact Notes - Summary: Security and performance issues indirectly degrade user experience. - Security issues impact UX, Performance issues impact UX
Test Case Ideas - property updates - and return value correctness. - Assign correct ViewBag value and handle typos - Return expected ViewResult - Create ProjectData objects for different project types - Handle various input data including malformed JSON - Update CurrentProjId for each MappingDetails item
Dependencies & Called Services - Summary: Uses collections and process model interfaces for data handling and processing. - Enumerable for data querying, ICollection for collection abstraction, IProcessModel for process representation, Int32 for integer operations, List for dynamic data storage
TreeProjects¶
Summary: Initialize project variables, retrieve and filter child projects, then return selected project details.
IEnumerable<dynamic> DashboardController.TreeProjects()
Routing
- URL:
/Dashboard/TreeProjects
Detailed Analysis
Key Flows - then return selected project details. - Return ProjectId
Error Flows - Summary: Handle missing projects and null references to prevent exceptions and runtime failures. - Missing exception handling for empty project queries, Potential null reference exceptions from unverified variables, Incomplete code causing compilation and runtime errors
Security Issues - Summary: No security issues identified in TreeProjects method.
Performance Issues - Summary: Optimize LINQ queries and reduce repeated collection iterations to improve performance. - Inefficient LINQ joins and where clauses on large collections, Repeated 'Any' method calls inside loops causing multiple collection iterations
Maintainability Issues - Summary: Remove dead code, fix typos, explain magic numbers, and correct syntax errors. - Unused variables indicating dead code, Typos and misspelled variables reducing clarity, Unexplained magic number usage, Incomplete and incorrect code fragments
Test Case Ideas - LatestRevision update - Confirm 'LatestRevision' updates on matching project - Ensure method returns control to caller - Handle empty Projects collection - Handle Projects collection with matching ProjectId - Validate 'Any' method for existing and non-existing ProjectId - Validate LINQ query filters and selects project details
Dependencies & Called Services - Summary: TreeProjects depends on Dashboard, Enumerable, and IProjectModel services. - Dashboard service dependency, Enumerable utility usage, IProjectModel interface dependency
ActivityEffortGraph¶
Summary: Retrieve and validate project data, process skills and schedules, calculate team efforts and attendance, and aggregate activity volumes and costs.
JsonResult DashboardController.ActivityEffortGraph(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActivityEffortGraph
Cross-layer call chain - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Gantt.TeamCountByHourly - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.ActivityEffortGraph → Insorce.Helpers.Helpers.getSkillLevel - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.ActivityEffortGraph → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Sched.StartTimeHourMin - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_ActivityEffortGraph["DashboardController.ActivityEffortGraph"]
Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ActivityEffortGraph --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_ActivityEffortGraph --> Insorce_Helpers_Helpers_getSkillLevel
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
View Metadata
- View:
ActivityEffortGraph(Andromeda.Web\Views\Dashboard\ActivityEffortGraph.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and validate project data - Calculate team hourly counts and attendance over time intervals with work time handling - Initialize and validate project data from session and ProjID - Process and group skill matrices and schedules for relevant skills and activity times
Error Flows - Summary: Prevent null reference errors by checking session data - Null checks for session project data - Null checks for locations before calculations - Null checks for activity times before calculations
Security Issues - Summary: Accessing Session data without validation exposes security risks. - Direct access to Session data without validation, Lack of sanitization of Session data
Performance Issues - Summary: Optimize LINQ queries and loops to improve performance on large datasets. - Inefficient OrderByDescending on large datasets
Maintainability Issues - Summary: The method suffers from unclear naming, magic numbers, tight coupling, and incomplete code. - Use of magic numbers without named constants, Non-descriptive variable names, Incomplete or truncated code snippets and empty statements, Tight coupling with external models and projectData, Complex LINQ expressions and anonymous types, Commented-out and incomplete conditional code, Typo in variable name 'eamEffort'
UX Impact Notes - Summary: Formatting and lack of error feedback degrade user time display and experience. - ActualTime string formatting affects time range display, No user-facing error handling reduces feedback on data issues
Test Case Ideas - conditional logic - Calculate work slots and effort with varying office close times and working hours - Assess performance with large datasets for bottlenecks - Handle empty and non-empty tchoutput and matchinput collections - Validate behavior when ProjID matches session project data
Dependencies & Called Services - Summary: Uses core data types, collections, interfaces, and project-specific models for activity effort graph. - Core data types: Int32, Decimal, String, Collections: List, Dictionary, Enumerable, Interfaces: IActorModel, IHRModel, IInfraModel, Project-specific classes: Activity, Actor, ProjectData, Utility classes: Convert, Math, Helpers, UI components: Gantt
GetActPotentialData¶
Summary: GetActPotentialData handles HTTP GET requests and returns a partial view result.
PartialViewResult DashboardController.GetActPotentialData(int? activityID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetActPotentialData
Detailed Analysis
Key Flows - Summary: GetActPotentialData handles HTTP GET requests and returns a partial view result. - Return PartialViewResult rendering partial view to client
UX Impact Notes - Summary: Renders partial view enabling dynamic UI updates without full page reload. - Return PartialViewResult - Enable dynamic UI updates
Test Case Ideas - Summary: Verify GetActPotentialData returns PartialViewResult with and without activityID. - Return PartialViewResult with valid activityID - Return PartialViewResult without activityID
GetActivityPotentialData¶
Summary: Retrieve project data using valid IDs, collect related entities, compute potential activity data, and return JSON.
JsonResult DashboardController.GetActivityPotentialData(int? activityID, int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetActivityPotentialData
Cross-layer call chain - DashboardController.GetActivityPotentialData → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.GetActivityPotentialData → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - DashboardController.GetActivityPotentialData → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.GetActivityPotentialData → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_GetActivityPotentialData["DashboardController.GetActivityPotentialData"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_GetActivityPotentialData --> Andromeda_Core_Entities_ProjectData_GetSchedData
Detailed Analysis
Key Flows - and return JSON. - Return data as JSON - Validate activity and project IDs
Error Flows - Summary: Handle invalid IDs and null project data to prevent exceptions and ensure data retrieval. - Invalid or non-positive activity ID returns empty JSON list
Security Issues - Summary: Sanitize project ID parameter to prevent SQL injection. - Unsanitized project ID parameter, SQL injection vulnerability
Performance Issues - Summary: Avoid loading large data sets fully and summing unfiltered collections to prevent performance degradation. - Use of ToList() on large data sets causes high memory usage and slow performance
Maintainability Issues - Summary: The method suffers from unclear parameters, unused variables, magic values, tight coupling, and leftover code. - Truncated or incomplete method parameter 'ProjI', Early declaration of unused variables reducing readability, Use of magic strings and magic numbers decreasing clarity, Tight coupling with projectData and multiple model dependencies, Presence of commented-out and incomplete code snippets, Unused variable 'leAnalysis' declared
UX Impact Notes - Summary: Improper handling of invalid or error responses degrades user experience. - Confusing empty JSON list for invalid activity IDs, Negative UX from improperly formatted or error-prone JSON responses
Test Case Ideas - Summary: Test caching, empty project data handling, and ToString() method stability. - Cache behavior with various valid activityID values, Handling empty projectData with no actors or activities, Stability of ToString() calls and subsequent method calls
Dependencies & Called Services - Summary: Uses data models and utilities to calculate activity potential. - Enumerable for data manipulation, IActorModel for actor data, IFinalPlanModel for final plan data, IHRModel for HR data, IInfraModel for infrastructure data, Int32 for integer operations, Math for mathematical calculations, ProjectData for project-specific information
GetActivitiesPotentialData¶
Summary: GetActivitiesPotentialData retrieves and processes potential activity data for analysis.
JsonResult DashboardController.GetActivitiesPotentialData(string actIds, int? ProjectID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetActivitiesPotentialData
Cross-layer call chain - DashboardController.GetActivitiesPotentialData → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.GetActivitiesPotentialData → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - DashboardController.GetActivitiesPotentialData → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.GetActivitiesPotentialData → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_GetActivitiesPotentialData["DashboardController.GetActivitiesPotentialData"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_GetActivitiesPotentialData --> Andromeda_Core_Entities_ProjectData_GetSchedData
Detailed Analysis
Key Flows - Summary: GetActivitiesPotentialData retrieves and processes potential activity data for analysis. - Fetch potential activity data - Process and analyze activity data
Error Flows - Summary: Handle null references for ProjectID and projectData to prevent exceptions. - Null check prevents exception when projectData is null
Security Issues - Summary: No security issues identified in GetActivitiesPotentialData method.
Performance Issues - Summary: Optimize JSON decoding and LINQ operations to improve performance. - Expensive LINQ operations like Select and OrderByDescending on large datasets
Maintainability Issues - Summary: Uninitialized variables and complex method chains reduce code clarity and maintainability. - Uninitialized variables at method start, Long method call chains on projectData, Anonymous types in LINQ reduce clarity, Incomplete or unclear variable declarations
Test Case Ideas - Summary: Validate data retrieval - Performance and decoding with large actIds input, Handling projectData without Project property, Correct data retrieval when projectData ID matches ProjID, Proper handling of empty lists for non-matching IDs, Filtering activities by ring() equals w.ActivityID, Initialization and population of suggestions list, Sorting team recommendations by business rules count
Dependencies & Called Services - Summary: Uses multiple models and data structures for activity potential data processing. - Enumerable for data iteration, IActorModel for actor-related data, IFinalPlanModel for final plan data, IHRModel for human resources data, IInfraModel for infrastructure data, List for collection management, Math for calculations, ProjectData for project-specific information
ChartsUnitSchedule¶
Summary: Generate Gantt chart using valid ProjID and matching ProjectData from session.
JsonResult DashboardController.ChartsUnitSchedule(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ChartsUnitSchedule
Cross-layer call chain - DashboardController.ChartsUnitSchedule → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ChartsUnitSchedule → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.ChartsUnitSchedule → Andromeda.Core.Entities.Gantt.ActivityUnitGantt - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Gantt_ActivityUnitGantt["Andromeda.Core.Entities.Gantt.ActivityUnitGantt"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
DashboardController_ChartsUnitSchedule["DashboardController.ChartsUnitSchedule"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_Gantt_ActivityUnitGantt
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ChartsUnitSchedule --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
ChartsUnitSchedule(Andromeda.Web\Views\Dashboard\ChartsUnitSchedule.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - Summary: Generate Gantt chart using valid ProjID and matching ProjectData from session. - Validate ProjID presence - Verify session contains matching ProjectData, Retrieve activities and schedule from ProjectData, Generate Gantt chart based on retrieved data
Error Flows - Summary: Handle null references for ProjID and Session['ProjectData'] to prevent exceptions. - NullReferenceException risk from unchecked ProjID.Value - Null reference risk from unhandled null Session['ProjectData']
Performance Issues - Summary: Optimize caching and decouple actor filtering to improve performance. - Cache thrashing from output caching varying only by frequently changing ProjID, Database query overhead from LINQ Where filtering of actors, Tight coupling with ActorModel and GetActors method reducing flexibility and performance
Maintainability Issues - Summary: Improve code clarity, naming conventions, and reduce tight coupling for maintainability. - Unclear code in schedule data assignment from projectData.GetS
Test Case Ideas - fallback logic - Cache behavior with varying ProjID values, Session ProjectData matching ProjID for activity and schedule retrieval, Fallback to ProcessMapModel.GetActivities on session mismatch, Correct operation of chedData method, ActivityUnitGantt called with filtered actor data and initialized Gantt chart
Dependencies & Called Services - Summary: Uses data structures and models for project scheduling and process management. - Enumerable for data iteration, Gantt for scheduling visualization, IActorModel for actor-based modeling, IProcessModel for process representation, ProjectData for project information
ChartsTeamSchedule¶
Summary: ChartsTeamSchedule retrieves project activities and schedules from cache or model, then generates and returns a Gantt chart for active actors.
JsonResult DashboardController.ChartsTeamSchedule(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ChartsTeamSchedule
Cross-layer call chain - DashboardController.ChartsTeamSchedule → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ChartsTeamSchedule → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.ChartsTeamSchedule → Andromeda.Core.Entities.Gantt.ActorGantt - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Gantt_ActorGantt["Andromeda.Core.Entities.Gantt.ActorGantt"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
DashboardController_ChartsTeamSchedule["DashboardController.ChartsTeamSchedule"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_Gantt_ActorGantt
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ChartsTeamSchedule --> Andromeda_Core_Entities_ProjectData_GetSchedData
Detailed Analysis
Key Flows - then generates and returns a Gantt chart for active actors. - Fetch activities from ProcessMapModel and create new Gantt if no cached data - Return Gantt data as JSON
Error Flows - Summary: The method throws null reference exceptions and contains incomplete code causing failures. - Null reference exception from accessing ProjID.Value when ProjID is null, Incomplete conditional statements and method calls causing compilation or runtime errors
Security Issues - Summary: No security issues identified in ChartsTeamSchedule method.
Performance Issues - Summary: Session storage and actor filtering cause performance degradation with large data sets. - Session storage of project data risks performance issues with large data or poor session management, Filtering and converting actors to list degrades performance with very large actor collections
Maintainability Issues - Summary: Magic strings, incomplete code, and unused variables reduce maintainability. - Use of magic strings for session keys and cache profiles, Incomplete and syntactically incorrect code segments causing compilation issues, Unused variables indicating code quality problems
UX Impact Notes - Summary: Returning large JSON data slows load times and risks client errors. - Large JSON data causes slow load times, Large JSON data risks client-side errors
Test Case Ideas - Summary: Verify correct data retrieval, actor filtering, and method flow for valid and invalid project sessions. - Create new Gantt object and retrieve activities from ProcessMapModel if no session data - Handle non-matching ProjectID in session project data - Return correct data for valid ProjID with matching session project - Return expected active actors from ActorModel.GetActors for given project - Call ActorGantt with filtered actors and return expected scheduling data - Return control correctly at method end
Dependencies & Called Services - Summary: Uses data structures and models for project scheduling and process management. - Enumerable data structures, Gantt chart utilities, Actor model interface, Project data management - Process model interface
UnitsAndResourceHourlyGraph¶
Summary: Retrieve and group project activities and schedules by actor and activity for JSON output.
JsonResult DashboardController.UnitsAndResourceHourlyGraph(int? ProjID)
Routing
- URL:
/Dashboard/UnitsAndResourceHourlyGraph
Cross-layer call chain - DashboardController.UnitsAndResourceHourlyGraph → Andromeda.Core.Entities.ProjectData.GetSchedData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
DashboardController_UnitsAndResourceHourlyGraph["DashboardController.UnitsAndResourceHourlyGraph"]
DashboardController_UnitsAndResourceHourlyGraph --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
UnitsAndResourceHourlyGraph(Andromeda.Web\Views\Dashboard\UnitsAndResourceHourlyGraph.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and group project activities and schedules by actor and activity for JSON output. - Check project data and attempt scheduling data retrieval - Retrieve all in-process activities for ProjID, Initialize Gantt with ActorModel, ProjID, and base activities, Group schedule data by actor ID, Group project activities by activity ID and version, Order grouped data and prepare JSON output
Error Flows - Summary: Handle null ProjectData and empty sequences to prevent exceptions and incomplete code errors. - First() usage without empty check causes exceptions
Performance Issues - Summary: The method risks stale cache data and inefficient data processing causing performance degradation. - First() method without empty check risks performance issues on large or empty sequences
Maintainability Issues - Summary: The method is incomplete, undocumented, and contains code that hinders maintainability. - Incomplete method implementation, Lack of documentation and comments, Non-standard C# syntax risking compilation errors, Missing error handling and input validation in method calls, Commented-out code reducing code clarity, Use of anonymous types complicating code understanding
Test Case Ideas - Summary: Verify method returns correct JsonResult with proper caching and accurate data processing. - Return JsonResult validation - Correct assignment of schedData - Return list of names in correct order
Dependencies & Called Services - Summary: Uses data models and collections to process project and actor information. - Enumerable for data operations, IActorModel for actor data, Int32 for numeric values, ProjectData for project details
GetUnitsAndEffortOfSelectedActivities¶
Summary: Filter schedule data by selected activities, group by day and hour, calculate effort, and return JSON.
JsonResult DashboardController.GetUnitsAndEffortOfSelectedActivities(string[] activities)
Routing
- HTTP:
POST - URL:
/Dashboard/GetUnitsAndEffortOfSelectedActivities
Cross-layer call chain - DashboardController.GetUnitsAndEffortOfSelectedActivities → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.GetUnitsAndEffortOfSelectedActivities → Andromeda.Core.Entities.Sched.EndTimeHour
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_EndTimeHour["Andromeda.Core.Entities.Sched.EndTimeHour"]
DashboardController_GetUnitsAndEffortOfSelectedActivities["DashboardController.GetUnitsAndEffortOfSelectedActivities"]
DashboardController_GetUnitsAndEffortOfSelectedActivities --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetUnitsAndEffortOfSelectedActivities --> Andromeda_Core_Entities_Sched_EndTimeHour
Detailed Analysis
Key Flows - and return JSON. - Calculate effort for each group - Return grouped data as JSON
Error Flows - Summary: Handle null Session data and add explicit exception handling to prevent unhandled errors. - Null reference exception from unhandled null Session['ProjectData'] - Lack of explicit exception handling allows unhandled runtime errors
Security Issues - Summary: No security issues identified in GetUnitsAndEffortOfSelectedActivities.
Performance Issues - Summary: Multiple ToList() calls and FindByID usage cause performance degradation on large datasets. - Multiple ToList() calls on large datasets during filtering and grouping
Maintainability Issues - Summary: The method uses unclear variables, magic strings, and complex LINQ queries, reducing maintainability. - Use of magic string 'ProjectData' in session access, Undefined variable 'Proj' causing potential confusion, Unclear purpose and parameters in edData() method call, Complex, nested LINQ queries for filtering and grouping activities
UX Impact Notes - Summary: Return JSON data requires proper client-side handling for good UX. - JSON data return
Test Case Ideas - Summary: Verify project data retrieval, activity filtering, Gantt initialization, and performance under various conditions. - Performance with large datasets
Dependencies & Called Services - Summary: Uses data conversion, enumeration, math operations, and project scheduling models. - Data conversion utilities, Enumeration handling, Actor model interface, Integer operations, Mathematical calculations, Project data management, Scheduling services
UnitsAndEffortDetailedData¶
Summary: Initialize project data, validate and retrieve schedules and actors, process schedules by hour, and return aggregated JSON results.
JsonResult DashboardController.UnitsAndEffortDetailedData(string teams)
Routing
- HTTP:
GET - URL:
/Dashboard/UnitsAndEffortDetailedData
Cross-layer call chain - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.Sched.StartTimeHour - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.Sched.EndTimeHour - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - DashboardController.UnitsAndEffortDetailedData → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_EndTimeHour["Andromeda.Core.Entities.Sched.EndTimeHour"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_UnitsAndEffortDetailedData["DashboardController.UnitsAndEffortDetailedData"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Sched_EndTimeHour
DashboardController_UnitsAndEffortDetailedData --> Andromeda_Core_Entities_Sched_StartTimeHour
Detailed Analysis
Key Flows - validate and retrieve schedules and actors - and return aggregated JSON results. - Iterate schedule entries to create detailed schedule objects per relevant hour with time conditions - Construct and return JSON with teams - Validate project data and conditionally retrieve scheduling data and actors
Error Flows - Summary: Handle null project data and prevent null reference exceptions. - Missing null checks on object property access
Security Issues - Summary: No security issues identified in UnitsAndEffortDetailedData method.
Performance Issues - Summary: Multiple LINQ operations and data conversions cause inefficient memory use and slow processing. - Multiple ToList() calls loading large datasets into memory - Multiple GroupBy and Select LINQ operations on large datasets
Maintainability Issues - Summary: The method contains unclear code, poor naming, magic values, and incomplete syntax hindering maintainability. - Incomplete and truncated code lines, Use of magic strings and numbers instead of named constants, Anonymous types and complex LINQ reducing readability, Unclear and unused variable names, Non-standard method naming, Commented out, abandoned code, Syntax errors preventing compilation
Test Case Ideas - Summary: Verify correct data retrieval, processing, and property calculations for various input scenarios. - Calculate MHour property correctly from analysisData collection - Handle objects with same or consecutive start and end time hours - Return correct project data with 'teams' parameter - Return correct data for ActorID and handle empty datasets - Set 'Time' and 'ActorUnit' properties correctly for inputs
Dependencies & Called Services - Summary: Uses data models, collections, and conversion utilities for detailed unit and effort processing. - Actor data model, Conversion utilities, Enumerable collections, IActorModel interface, Integer data type, List collection, ProjectData model, Sched model, String data type
GetActivityUnitsData¶
Summary: The method retrieves project and schedule data, filters in-process activities by time and cycle, and groups results by activity units and actors.
JsonResult DashboardController.GetActivityUnitsData(string activityID, int? hour, string cycle)
Routing
- HTTP:
GET - URL:
/Dashboard/GetActivityUnitsData
Cross-layer call chain - DashboardController.GetActivityUnitsData → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.GetActivityUnitsData → Andromeda.Core.Entities.Sched.StartTimeHour - DashboardController.GetActivityUnitsData → Andromeda.Core.Entities.Sched.EndTimeHour
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_EndTimeHour["Andromeda.Core.Entities.Sched.EndTimeHour"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
DashboardController_GetActivityUnitsData["DashboardController.GetActivityUnitsData"]
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_ProjectData_GetSchedData
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_Sched_EndTimeHour
DashboardController_GetActivityUnitsData --> Andromeda_Core_Entities_Sched_StartTimeHour
Detailed Analysis
Key Flows - Summary: The method retrieves project and schedule data, filters in-process activities by time and cycle, and groups results by activity units and actors. - Calculate total distinct units and time intervals - Fetch all in-process activities for project ID - Retrieve current project ID and data from session, Retrieve schedule data from project data, Extract hour parameter to filter activities by time range, Apply cycle-specific filtering when cycle equals 'FC', Filter and group activities by units and actors - Validate project data matches current project ID
Error Flows - Summary: The method validates inputs and prevents null reference and temporal errors. - Return empty list if activityID is null or whitespace
Security Issues - Summary: No security issues identified in GetActivityUnitsData method.
Performance Issues - Summary: Repeated method calls and collection enumerations degrade performance. - Session data access impacts performance, ToString() calls inside LINQ Where clauses degrade performance, Multiple StartTimeHour() and EndTimeHour() calls cause inefficiencies, Repeated ToList() calls cause multiple collection enumerations, FindByID method has O(n) complexity causing performance issues if used
Maintainability Issues - Summary: The method uses unclear naming, magic strings/numbers, incomplete code, and tight coupling, reducing maintainability. - Use of magic strings for session keys, Tight coupling with external service for project ID, Incomplete code fragments causing clarity and compilation issues, Anonymous types in grouping reduce code clarity, Non-descriptive variable names, Commented out and incomplete code confusing maintainers, Unexplained magic number in time calculations
UX Impact Notes - Summary: The method ensures clear feedback, data integrity, and proper JSON formatting for better UX. - Return empty list for null or whitespace activityID - Validate event times to prevent invalid data
Test Case Ideas - Summary: Verify data retrieval, filtering, grouping, caching, temporal validation, and JSON output correctness. - Accurate extraction and assignment of hour parameter - Filtering logic for cycle values including 'FC' - Method returns expected JSON structure and data under various inputs
Dependencies & Called Services - Summary: Uses data conversion, math operations, project scheduling, and string manipulation services. - Data conversion utilities, Enumerable collections, Actor model interface, Integer operations, Math functions, Project data management, Scheduling services, String manipulation
CriticalPathDelaysGraph¶
Summary: The method retrieves project data using a valid ProjID, processes related files, calculates delay metrics, and prepares JSON output.
JsonResult DashboardController.CriticalPathDelaysGraph(int? ProjID, string ActivityID)
Routing
- HTTP:
GET - URL:
/Dashboard/CriticalPathDelaysGraph
Cross-layer call chain - DashboardController.CriticalPathDelaysGraph → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_CriticalPathDelaysGraph["DashboardController.CriticalPathDelaysGraph"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_CriticalPathDelaysGraph --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
CriticalPathDelaysGraph(Andromeda.Web\Views\Dashboard\CriticalPathDelaysGraph.cshtml)
Detailed Analysis
Key Flows - Summary: The method retrieves project data using a valid ProjID, processes related files, calculates delay metrics, and prepares JSON output. - Calculate delay metrics - Retrieve project data from session or ActorModel using ProjID, Read related files: Activity.txt, Actor.txt, Arrow.txt, Filter schedule data by activity IDs, Prepare data for JSON output
Error Flows - and returns null improperly. - Unconditional null return causing invalid JsonResult for callers
Security Issues - Summary: Validate project folder paths and file names to prevent unauthorized file access. - Improper validation of project folder paths, Improper validation of file names, Risk of unauthorized file access
Performance Issues - Summary: Inefficient data processing and type conversions degrade performance in critical path analysis. - Inefficient LINQ 'Where' and 'ToList' usage on large collections causing multiple iterations, Reading entire files into memory with File.ReadAllLines inefficient for large files, Multiple type conversions during data parsing impacting performance, Potential slow or resource-intensive ActorModel methods affecting performance
Maintainability Issues - Summary: Code uses hardcoded values and tight coupling, reducing clarity, flexibility, and testability. - Use of magic strings and numbers reduces code clarity, Hardcoded file names and paths decrease flexibility and increase error risk, Incomplete code snippets hinder understanding and maintenance, Tight coupling with ActorModel and Registry classes reduces modularity and testability
UX Impact Notes - Summary: The method returns data for delay visualization but lacks error handling and returns null unconditionally. - Unconditional null return harms user flow
Test Case Ideas - Summary: Validate data retrieval - Check existence of Activity.txt - Validate data retrieval with valid ProjID and ActivityID - Validate string splitting and array length with valid and malformed data - Assess performance impact processing large datasets and ActorModel methods - Ensure method compiles and returns expected results despite incomplete code
Dependencies & Called Services - Summary: Uses core data structures, math, time, file handling, and domain-specific models. - Array data structure, Enumerable collections, File handling, IActorModel interface, Int32 data type, List collection, Math utilities, ProjectData domain model, String data type, TimeSpan for time intervals
TeamsUtilization¶
Summary: Retrieve project data by ProjID, calculate actor efforts from activities and schedules, and return utilization JSON.
JsonResult DashboardController.TeamsUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamsUtilization
Cross-layer call chain - DashboardController.TeamsUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamsUtilization → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.TeamsUtilization → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.TeamsUtilization → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamsUtilization["DashboardController.TeamsUtilization"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamsUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
TeamsUtilization(Andromeda.Web\Views\Dashboard\TeamsUtilization.cshtml)
Detailed Analysis
Key Flows - and return utilization JSON. - Calculate hourly actor effort from schedule data - Return JSON response with utilization metrics - Validate ProjID and match with session projectData
Error Flows - Summary: Handle null references and conversion errors in TeamsUtilization method. - Null reference risk on SelectedTeams or SelectedTeams.JsonData access despite null check
Security Issues - Summary: No security issues identified in TeamsUtilization method.
Performance Issues - Summary: Inefficient data retrieval and in-memory filtering cause performance and memory issues. - Use of ToList on large datasets increases memory and reduces performance - Multiple LINQ operations on large datasets impact performance
Maintainability Issues - Summary: Code uses unclear names, magic values, and complex statements reducing maintainability. - Undefined variable 'ProjI' in conditional check - Unclear purpose of calling SchedData method without parameters or return - Complex return statement with multiple anonymous types
UX Impact Notes - Summary: Returns JSON data to update UI with team utilization metrics. - UI update with utilization data
Test Case Ideas - Summary: Verify data retrieval, filtering, initialization, calculations, and error-free method execution. - Check fallback on expired or missing Session data - Check proper Gantt object initialization - Handle empty actorsList correctly - Confirm projectData.GetActors() and GetSchedData() return expected results - Ensure method returns control without errors - Validate data retrieval with valid ProjID - Validate correct activities and actors retrieval per project - Validate cumulative effort and actor work hours calculations
Dependencies & Called Services - Summary: Utilizes core data types, collections, models, and UI components for team utilization. - Core data types (Int32, String), Collections and LINQ (Enumerable, Dictionary), UI components (Activity, Gantt), Domain models (IActorModel, IProjectModel, ProjectData), Conversion utilities (Convert)
DaywiseTeamUtilization¶
Summary: Retrieve project data from session, calculate daily actor utilization, and return JSON results.
JsonResult DashboardController.DaywiseTeamUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/DaywiseTeamUtilization
Cross-layer call chain - DashboardController.DaywiseTeamUtilization → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.DaywiseTeamUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.DaywiseTeamUtilization → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.DaywiseTeamUtilization → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_DaywiseTeamUtilization["DashboardController.DaywiseTeamUtilization"]
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_DaywiseTeamUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
DaywiseTeamUtilization(Andromeda.Web\Views\Dashboard\DaywiseTeamUtilization.cshtml)
Detailed Analysis
Key Flows - and return JSON results. - Calculate hourly utilization using Gantt object - Compile and return JSON with actor utilization data - Update FTE values based on utilization and out-process filtering
Error Flows - Summary: Handle null projectData - and validate data before Convert.ToDouble calls. - Null reference exception from unhandled null projectData - Incomplete if statement causing logical errors or runtime exceptions
Security Issues - Summary: Using Session data without validation risks security vulnerabilities. - Direct use of Session data without validation, Lack of sanitization of Session data
Performance Issues - Summary: Inefficient data handling and repeated LINQ queries degrade performance. - Repeated LINQ Max and Where on large datasets degrades performance
Maintainability Issues - Summary: Replace magic values with constants and remove incomplete code for clarity and maintainability. - Use named constants instead of magic strings and numbers, Remove incomplete and commented-out code fragments, Avoid anonymous types in JSON results for better readability
Test Case Ideas - Summary: Verify data retrieval, filtering, caching, utilization calculation, and performance across projects and years. - Caching behavior with different project IDs, Accurate data retrieval from projectData, Correct filtering of actors, Accurate retrieval of activities and actors via ActorModel, Correct hourly utilization calculation, Filtering of out-process activities, Performance with empty and large actor collections, Handling different years including leap years in GetDaysInYear
Dependencies & Called Services - Summary: Utilizes core system libraries and project-specific models for data processing and scheduling. - System libraries: Calendar, Convert, Dictionary, Enumerable, Math, Project-specific components: Gantt, ProjectData, Model interfaces: IActorModel, IProcessModel
TeamMergeWithOutProcess¶
Summary: Retrieve project data from session, filter out-process activities, calculate daily efforts per actor, and return team data as JSON.
JsonResult DashboardController.TeamMergeWithOutProcess(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamMergeWithOutProcess
Cross-layer call chain - DashboardController.TeamMergeWithOutProcess → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.TeamMergeWithOutProcess → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamMergeWithOutProcess → Andromeda.Core.Entities.Actor.GetLocation - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamMergeWithOutProcess["DashboardController.TeamMergeWithOutProcess"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamMergeWithOutProcess --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamMergeWithOutProcess(Andromeda.Web\Views\Dashboard\TeamMergeWithOutProcess.cshtml)
Detailed Analysis
Key Flows - and return team data as JSON. - Convert team data collection to list and return as JSON
Error Flows - Summary: Handle null references and array bounds to prevent runtime errors. - Null reference risk from unchecked projectData - IndexOutOfRangeException from unchecked actor ID array access
Security Issues - Summary: The method risks security by using unvalidated session data. - Use of unvalidated session data
Performance Issues - Summary: Fetching and processing large collections causes high memory and CPU usage. - High memory usage from ToList() on large collections, Excessive memory and CPU from creating new arrays per actor, Repeated method calls like GetLocation() without caching, Inefficient loops over large or fixed-size collections
Maintainability Issues - Summary: Code clarity suffers from unclear naming, magic values, redundant calls, and complex queries. - Incomplete or malformed code fragments, Use of magic numbers without named constants, Non-descriptive variable names, Complex anonymous types and nested LINQ queries, Repeated method calls without caching
Test Case Ideas - Summary: Verify correct project data retrieval, actor filtering, performance, and accurate calculations. - Performance and correctness with large GetActivities and GetActors datasets
Dependencies & Called Services - Summary: Uses core data structures, math utilities, and project-specific models without process handling. - Core data structures: Array, Dictionary, Enumerable, Mathematical utilities: Math, Project-specific models: Actor, IActorModel, ProjectData, Calendar utilities - Process interface excluded: IProcessModel
RiskMetricEscalation¶
Summary: Retrieve escalation metrics joined with project risks if session project matches ProjID; otherwise, join all risks with escalation metrics.
JsonResult DashboardController.RiskMetricEscalation(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/RiskMetricEscalation
View Metadata
- View:
RiskMetricEscalation(Andromeda.Web\Views\Dashboard\RiskMetricEscalation.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve escalation metrics joined with project risks if session project matches ProjID; otherwise, join all risks with escalation metrics. - Join project risks with escalation metrics and return JSON - join all risks with escalation metrics and return JSON - Validate session project data matches ProjID
Performance Issues - Summary: Caching by ProjID and retrieving all risks cause performance bottlenecks. - OutputCache with VaryByParam 'ProjID' creates many cache entries - GetAllRisks() retrieves entire dataset causing slow performance on large data
Maintainability Issues - Summary: Improve code clarity and consistency by fixing syntax, naming, and replacing magic strings. - OutputCache attribute complicates debugging and testing due to stale cached data, Variable 'EscalationMetrics' violates C# camelCase naming conventions, Use constant instead of magic string 'ProjectData' for session key, Incomplete conditional statement reduces code clarity and maintainability, Anonymous types in LINQ join hinder code readability and maintenance, Incomplete code fragments lack context, impairing understanding and maintenance
Test Case Ideas - Summary: Verify correct risk metric retrieval, cache behavior, and data consistency for various ProjID values. - Assignment of allRisks from projectData.AllRisks
Dependencies & Called Services - Summary: Uses Enumerable for collection handling and IRiskModel for risk calculations. - Enumerable for collection operations, IRiskModel for risk assessment
RiskMetrics¶
Summary: Retrieve risk data when ProjID matches project data in session.
JsonResult DashboardController.RiskMetrics(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/RiskMetrics
Cross-layer call chain - DashboardController.RiskMetrics → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.RiskMetrics → Andromeda.Core.Entities.ProjectData.GetObjRisks - DashboardController.RiskMetrics → Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl - Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl["Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl"]
Andromeda_Core_Entities_ProjectData_GetObjRisks["Andromeda.Core.Entities.ProjectData.GetObjRisks"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_RiskMetrics["DashboardController.RiskMetrics"]
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl --> Andromeda_Core_DataManager_GetDataList
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_RiskMetrics --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
RiskMetrics(Andromeda.Web\Views\Dashboard\RiskMetrics.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve risk data when ProjID matches project data in session. - ProjID provided, Project data exists in session, ProjectID matches session data, Retrieve risk data from session's projectData
Error Flows - Summary: Handle null references and fallback to alternative data retrieval on project data mismatch. - Null reference risk accessing ProjID.Value without null check
Security Issues - Summary: No security issues identified in RiskMetrics method.
Performance Issues - Summary: Session use and multiple database calls degrade performance; LINQ on large datasets slows execution. - LINQ Distinct() and OrderBy() slow on large datasets
Maintainability Issues - Summary: RiskMetrics method has naming inconsistencies, tight coupling, and unclear variable usage. - Method name 'RiskMetrics' mismatches returned JSON name 'RiskMetri'
UX Impact Notes - Summary: Deliver ordered risk metrics in JSON for easy client-side use. - Ordered risk metrics list, JSON response format, Facilitates client-side consumption
Test Case Ideas - Summary: Validate data retrieval - Performance testing with large datasets
Dependencies & Called Services - Summary: Uses interfaces and data structures for risk and project control. - Enumerable collection, IControlModel interface, IRiskModel interface, ProjectData structure
RiskCoverage¶
Summary: The method verifies project ID, calculates risk coverage using project risk data, and returns it as JSON.
JsonResult DashboardController.RiskCoverage(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/RiskCoverage
Cross-layer call chain - DashboardController.RiskCoverage → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.RiskCoverage → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.RiskCoverage → Andromeda.Core.Entities.ProjectData.GetObjRisks - DashboardController.RiskCoverage → Andromeda.Core.Entities.ProjectData.GetObjActivities - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetObjActivities["Andromeda.Core.Entities.ProjectData.GetObjActivities"]
Andromeda_Core_Entities_ProjectData_GetObjRisks["Andromeda.Core.Entities.ProjectData.GetObjRisks"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_RiskCoverage["DashboardController.RiskCoverage"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_RiskCoverage --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
RiskCoverage(Andromeda.Web\Views\Dashboard\RiskCoverage.cshtml)
Detailed Analysis
Key Flows - and returns it as JSON. - Calculate RiskActivitiesCoverage using RiskControlData with project risk collections - Return RiskActivitiesCoverage as JSON response
Error Flows - Summary: Fix syntax error and clarify incomplete method call to prevent runtime failures. - Syntax error in conditional statement preventing compilation, Incomplete and unclear method call to 'ies' causing runtime errors
Security Issues - Summary: The method risks security flaws by using unvalidated session data and incomplete method calls. - Use of unvalidated session data (Session["ProjectData"])
Performance Issues - Summary: Output caching risks stale data; multiple data retrieval calls increase latency. - Output caching with fixed profile risks stale data, Multiple method calls increase latency and resource usage
Maintainability Issues - Summary: The method uses unclear naming, magic strings, syntax errors, and complex code reducing maintainability. - Use of magic strings for cache profile and session key, Syntax error preventing compilation, Unclear and incomplete method call lacking standard naming, Long chained method calls reducing readability, Naming inconsistency between method and variable, Incomplete code snippets and missing context
UX Impact Notes - Summary: RiskActivitiesCoverage JSON response impacts UI updates and user flow triggers. - UI updates based on response
Test Case Ideas - Summary: Verify correct data return - Handle projectData with matching and non-matching ProjectID - Return correct data with and without ProjID - Proper output cache configuration and updates - Performance with large projectData sets - Method returns control without errors
Dependencies & Called Services - Summary: RiskCoverage depends on IRiskModel and ProjectData services. - IRiskModel service dependency, ProjectData service dependency
ActivityVsCompensatoryActivity¶
Summary: No key flows are defined for ActivityVsCompensatoryActivity.
JsonResult DashboardController.ActivityVsCompensatoryActivity(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ActivityVsCompensatoryActivity
Cross-layer call chain - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Services.Algorithms.Delooper.PossiblePath - DashboardController.ActivityVsCompensatoryActivity → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Services.Algorithms.Delooper.PossiblePath → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.PossiblePath → Andromeda.Core.LoggingManager.Exception
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
Andromeda_Core_LoggingManager_Exception["Andromeda.Core.LoggingManager.Exception"]
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath["Andromeda.Core.Services.Algorithms.Delooper.PossiblePath"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_ActivityVsCompensatoryActivity["DashboardController.ActivityVsCompensatoryActivity"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath --> Andromeda_Core_LoggingManager_Exception
Andromeda_Core_Services_Algorithms_Delooper_PossiblePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
DashboardController_ActivityVsCompensatoryActivity --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
ActivityVsCompensatoryActivity(Andromeda.Web\Views\Dashboard\ActivityVsCompensatoryActivity.cshtml)
Detailed Analysis
Key Flows - Summary: No key flows are defined for ActivityVsCompensatoryActivity.
Error Flows - Summary: Handle null references and ensure correct comparisons to prevent runtime errors. - Null reference risk from unchecked projectData before accessing ProjectID - Incorrect or incomplete comparison operators causing logical errors - Null activities in pathfinding requiring null checks before deLooper.PossiblePath calls
Security Issues - Summary: No security issues identified in ActivityVsCompensatoryActivity method.
Performance Issues - Summary: Inefficient data handling causes excessive memory use and multiple database queries. - ToList() retrieves entire datasets
Maintainability Issues - Summary: The method suffers from unclear naming, tight coupling, incomplete code, and complex LINQ usage. - Unclear variable names, Method performs multiple unrelated tasks, Incomplete or incorrect comparison operators, Tight coupling to projectData, ActorModel, and ControlModel, Use of anonymous types in LINQ complicates maintenance, Complex lambda expressions reduce readability, Incomplete code snippets reduce clarity
UX Impact Notes - Summary: Returning null without handling degrades user experience despite no initial UX issues. - Returning null without handling harms user experience
Test Case Ideas - Summary: Verify data retrieval, processing, error handling, and correct JSON output. - Valid ProjID with matching session projectData, Data retrieval from session and fallback models, Correct join and processing of compensatory activities and control details, Handling incomplete or malformed data and partial code paths, Method compilation and expected JSON output under normal and edge cases
Dependencies & Called Services - Summary: Uses core collections, actor and control models, math utilities, process handling, and project data. - Enumerable for collections, IActorModel for actor data, IControlModel for control data, Math utilities, ProjectData for project information - ProcessExtensions for process handling
EfficacyOfCompensatingControls¶
Summary: Retrieve and process project data when a valid ProjID matches session data.
JsonResult DashboardController.EfficacyOfCompensatingControls(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/EfficacyOfCompensatingControls
Cross-layer call chain - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetRiskControls - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls - DashboardController.EfficacyOfCompensatingControls → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetRiskControls → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetArrows - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetRiskControls - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.GetDelooperObj - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls - Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls["Andromeda.Core.Entities.ProjectData.EfficacyOfCompensatingControls"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetRiskControls["Andromeda.Core.Entities.ProjectData.GetRiskControls"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_EfficacyOfCompensatingControls["DashboardController.EfficacyOfCompensatingControls"]
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetActivities
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetArrows
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetRiskControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls --> Andromeda_Core_Services_ProcessExtensions_FindByID
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetRiskControls --> Andromeda_Core_DataManager_GetData
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_EfficacyOfCompensatingControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_EfficacyOfCompensatingControls --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
EfficacyOfCompensatingControls(Andromeda.Web\Views\Dashboard\EfficacyOfCompensatingControls.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and process project data when a valid ProjID matches session data. - Match ProjID with session project data, Retrieve projectData object - Process retrieved project data - Validate ProjID
Error Flows - Summary: Handle null ProjID to prevent exceptions and fix malformed code to avoid runtime errors. - Null reference exception from unchecked ProjID
Security Issues - Summary: No security concerns identified in the efficacy of compensating controls.
Performance Issues - Summary: Optimize data retrieval and collection operations to improve performance. - Repeated Distinct() and OrderBy() on large datasets during compensatory activity processing
Maintainability Issues - Summary: The method suffers from unclear variables, tight coupling, poor naming, magic strings, and code quality issues. - Uninitialized variables reduce code clarity, Tight coupling with projectData and multiple models limits flexibility, Non-descriptive method name reduces readability, Magic strings decrease code clarity and maintainability, Incomplete or malformed code fragments indicate quality problems
UX Impact Notes - Summary: Returned JSON data enhances UI by detailing risk activities and control efficacy. - Detailed risk activities list, Existing controls information, Control efficacy data for UI
Test Case Ideas - conditional logic - Calculate efficacy of compensating controls from model data, Calculate control ratings based on compensatory activities - Handle presence and absence of 'Proje' property in projectData - Return valid JsonResult for valid ProjID
Dependencies & Called Services - Summary: Uses models and collections to manage actors, controls, processes, risks, and project data. - Enumerable for collection operations, IActorModel for actor representation, IControlModel for control representation, IProcessModel for process representation, IRiskModel for risk representation, List for data storage, ProjectData for project-specific information - ProcessExtensions for process-related utilities
LinesOfDefence¶
Summary: Retrieve project data from session if valid; otherwise, fetch from multiple models using projectId.
JsonResult DashboardController.LinesOfDefence(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/LinesOfDefence
Cross-layer call chain - DashboardController.LinesOfDefence → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.LinesOfDefence → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.LinesOfDefence → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.LinesOfDefence → Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_LinesOfDefence["DashboardController.LinesOfDefence"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_LinesOfDefence --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
LinesOfDefence(Andromeda.Web\Views\Dashboard\LinesOfDefence.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session if valid; otherwise, fetch from multiple models using projectId. - Fetch project data from multiple models when session data is missing or mismatched - Retrieve project data from session with valid ProjID
Error Flows - Summary: Handle null references and incomplete conditionals to prevent runtime errors. - Null reference risk accessing ProjID.Value without null check - Null reference risk calling methods on projectData without null check
Security Issues - Summary: Storing project data in sessions risks security without proper session management. - Insecure session management risks, Storing sensitive data in sessions
Performance Issues - Summary: Inefficient session use and multiple database calls degrade performance. - Performance bottlenecks from Distinct() and OrderBy() on large datasets
Maintainability Issues - Summary: The method uses unclear names, magic strings, tight coupling, anonymous types, and contains a typo. - Use of magic strings for cache profile and session keys, Non-descriptive variable names reducing readability, Tight coupling with multiple models in one method, Use of anonymous types complicating data processing, Typo in method name 'ctivityRisk' causing confusion
UX Impact Notes - Summary: Returning large or invalid JSON data without error handling degrades user experience. - Returning large or improperly formatted JSON data impacts user experience - Lack of error handling for null or invalid inputs causes unhandled exceptions and incomplete data
Test Case Ideas - Summary: Verify data accuracy, method calls, JSON output, performance, and proper method completion. - Validate correct data return for valid ProjID - GetAllObjActivityRisk return and assign expected data - Assess performance impact on large datasets with Distinct() and OrderBy() - Confirm method returns control to caller properly
Dependencies & Called Services - Summary: Uses core interfaces and data models for control, process, risk, and project management. - Enumerable utilities, Control model interface, Risk model interface, Project data model - Process model interface
ObjectiveDetails¶
Summary: Retrieve objective details from session if project data matches; otherwise, fetch from external models and compile results.
JsonResult DashboardController.ObjectiveDetails(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ObjectiveDetails
Cross-layer call chain - DashboardController.ObjectiveDetails → Andromeda.Core.Entities.ProjectData.GetObjectivesList - DashboardController.ObjectiveDetails → Andromeda.Core.Entities.ProjectData.GetObjRisks - DashboardController.ObjectiveDetails → Andromeda.Core.Entities.ProjectData.GetObjActivities - DashboardController.ObjectiveDetails → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetObjActivities["Andromeda.Core.Entities.ProjectData.GetObjActivities"]
Andromeda_Core_Entities_ProjectData_GetObjRisks["Andromeda.Core.Entities.ProjectData.GetObjRisks"]
Andromeda_Core_Entities_ProjectData_GetObjectivesList["Andromeda.Core.Entities.ProjectData.GetObjectivesList"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_ObjectiveDetails["DashboardController.ObjectiveDetails"]
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_ObjectiveDetails --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
ObjectiveDetails(Andromeda.Web\Views\Dashboard\ObjectiveDetails.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve objective details from session if project data matches; otherwise, fetch from external models and compile results. - Fetch objectives, risks, activities, and controls from RiskModel and ControlModel if session data is missing or mismatched - Return compiled objective details as JSON
Error Flows - Summary: Handle null ProjID and fix incomplete conditional to prevent runtime errors. - Null reference exception from unchecked nullable ProjID - Incomplete conditional statement causing logical or runtime errors
Security Issues - Summary: No security issues identified in ObjectiveDetails method.
Performance Issues - Summary: Session use and multiple database calls degrade performance when retrieving objective details. - Multiple Count() and Where() operations on large datasets affect performance
Maintainability Issues - and incomplete logic. - Use of magic string 'ProjectData' as session key, Non-descriptive variable and method names, Incomplete conditional statement, Unclear magic method calls and dependencies, Tight coupling with RiskModel and ControlModel, Use of anonymous types in Select() complicates readability
UX Impact Notes - Summary: Returns JSON with objective details to support UI display and user flow. - JSON output with objective details, Supports UI display, Impacts user flow
Test Case Ideas - Summary: Verify project data retrieval, correct objective details, and proper method behavior. - Return control to caller without errors
Dependencies & Called Services - Summary: Uses multiple interfaces and data collections for service dependencies. - Enumerable collection usage, IControlModel interface dependency, IRiskModel interface dependency, ProjectData data dependency
ObjectiveAndControls¶
Summary: Retrieve project data from session if valid; otherwise, load from multiple models.
JsonResult DashboardController.ObjectiveAndControls(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ObjectiveAndControls
Cross-layer call chain - DashboardController.ObjectiveAndControls → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ObjectiveAndControls → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.ObjectiveAndControls → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.ObjectiveAndControls → Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_ObjectiveAndControls["DashboardController.ObjectiveAndControls"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ObjectiveAndControls --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
Detailed Analysis
Key Flows - Summary: Retrieve project data from session if valid; otherwise, load from multiple models. - Load project data from ProcessMapModel, RiskModel, and ControlModel if session data is absent or mismatched - Retrieve project data from session when present and matching project ID
Error Flows - Summary: Prevent null reference exceptions by validating optional parameters and collection contents. - Null reference risk from accessing optional ProjID without null checks
Security Issues - Summary: No security issues identified in the ObjectiveAndControls method.
Performance Issues - Summary: Optimize data access and session usage to prevent performance degradation. - Aggregate() with string concatenation in LINQ harms large dataset performance
Maintainability Issues - Summary: The method's complex, tightly coupled code with magic values reduces maintainability and clarity. - Uninitialized list variables causing confusion, Hardcoded ProjectID values in conditionals, Strong dependency on projectData structure and methods, Tight coupling with multiple external models, Complex, deeply nested LINQ queries with magic strings and numbers, Undefined method call jActivityRisk reducing code clarity
UX Impact Notes - Summary: Correct and efficient data retrieval in objDetails enhances user experience. - Correctness of objDetails data, Performance of data retrieval and processing, Impact of objDetails display on user experience
Test Case Ideas - conditional logic - Valid ProjID with matching session project data, Presence and absence of ProjectData in session, ProjectData with differing ProjectID values, Correct data retrieval from projectData object, Data retrieval from ProcessMapModel, RiskModel, ControlModel when projectData absent or mismatched, Proper population of CompensatoryActivityDetails and CompensatoryControlDetails lists, Correct grouping and selection of objectiveControls list, Accurate construction and ordering of objDetails list, Correct invocation and outcome of jActivityRisk method
Dependencies & Called Services - Summary: Uses models and data types for control, process, risk management, and project data handling. - IControlModel for control logic
RiskMetricsByActivity¶
Summary: Retrieve project data from session if valid; otherwise, fetch from external models and filter metrics by risk controls and activity risks.
JsonResult DashboardController.RiskMetricsByActivity(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/RiskMetricsByActivity
Cross-layer call chain - DashboardController.RiskMetricsByActivity → Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk - DashboardController.RiskMetricsByActivity → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.RiskMetricsByActivity → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.RiskMetricsByActivity → Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl["Andromeda.Core.Entities.ProjectData.GetMetricsDataWithRiskControl"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_RiskMetricsByActivity["DashboardController.RiskMetricsByActivity"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl --> Andromeda_Core_DataManager_GetDataList
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetAllObjActivityRisk
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetMetricsDataWithRiskControl
DashboardController_RiskMetricsByActivity --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
RiskMetricsByActivity(Andromeda.Web\Views\Dashboard\RiskMetricsByActivity.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session if valid; otherwise, fetch from external models and filter metrics by risk controls and activity risks. - Fetch project data from external models if session data missing or mismatched - Retrieve project data from session when ProjectID matches, Filter and process metrics by risk controls and activity risks for final JSON
Error Flows - Summary: Handle null project ID and null projectData to prevent runtime errors. - Null reference risk from unchecked optional project ID
Security Issues - Summary: Risk of SQL injection from unsanitized inputs in LINQ queries. - SQL injection risk from unsanitized MetricsDataWithRiskControl, SQL injection risk from unsanitized objActivityRisks
Performance Issues - Summary: Session misuse and repeated database calls degrade performance in RiskMetricsByActivity. - Session storage of large project data causes performance degradation, Multiple consecutive calls on projectData and database without caching or error handling, Inefficient LINQ Any() and First() usage causing multiple database queries
Maintainability Issues - Summary: Unclear variable initialization, tight coupling, complex queries, and incomplete code reduce maintainability. - Uninitialized variables reduce code clarity, Tight coupling with projectData and multiple external models complicates changes, Unclear purpose of RiskControl method call, Complex LINQ queries hinder understanding and maintenance, Incomplete code at method end reduces readability
UX Impact Notes - Summary: Returned JSON data structure shapes risk metrics UI rendering. - Returned JSON data structure
Test Case Ideas - and filtering logic. - Correct data return for valid ProjID - Filtering logic with empty MetricsDataWithRiskControl and objActivityRisks - Filtering logic with multiple metrics and activity risks ensuring correct joins and distinctness
Dependencies & Called Services - Summary: Uses interfaces and data models to analyze risk metrics by activity. - Enumerable utilities, Control model interface, Risk model interface, Project data model - Process model interface
ControlProcedures¶
Summary: Retrieve project data from session if ProjID matches; otherwise, fetch from multiple models using ProjID.
JsonResult DashboardController.ControlProcedures(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ControlProcedures
Cross-layer call chain - DashboardController.ControlProcedures → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ControlProcedures → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.ControlProcedures → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_ControlProcedures["DashboardController.ControlProcedures"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ControlProcedures --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
ControlProcedures(Andromeda.Web\Views\Dashboard\ControlProcedures.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session if ProjID matches; otherwise, fetch from multiple models using ProjID. - Fetch project data from multiple models when session data is missing or mismatched - Retrieve project data from session when ProjID matches
Error Flows - Summary: Handle null references and mismatched ProjectID to prevent data retrieval errors. - Null reference exception from ProjID or Session['ProjectData'] without null checks
Security Issues - Summary: Sanitize all input parameters to prevent SQL injection vulnerabilities. - SQL injection risk from unsanitized input parameters, Need for input parameter sanitization
Performance Issues - Summary: Multiple database calls and inefficient LINQ operations degrade performance. - Excessive ToList() calls on large datasets
Maintainability Issues - Summary: The method mixes data retrieval with JSON construction, uses unclear variables, and has tight coupling. - Violates single responsibility principle by mixing data retrieval and JSON construction, Inconsistent variable naming reduces code clarity, Undefined variable 'Proj' causes maintainability issues, Tight coupling with projectData and multiple models hinders modification, Complex LINQ queries and anonymous types reduce readability, Dead code like ineffective statements indicates unclear intent
UX Impact Notes - Summary: Null ProjID and data issues cause exceptions and UI responsiveness problems. - Null ProjID causes exceptions, Data retrieval and processing errors degrade UI responsiveness
Test Case Ideas - data retrieval logic - and performance with large datasets. - Handle empty ControlActivitiesInfo and related collections - Return JsonResult for valid ProjID - Ensure performance and correctness with large activity and control datasets
Dependencies & Called Services - Summary: Uses interfaces and data types to manage control and process models within projects. - Enumerable for collection handling, IControlModel interface, IProcessModel interface, ProjectData type, String type
EAControls¶
Summary: Retrieve compensatory activities and properties from session or model based on project data availability, then filter activities from RiskModel.
JsonResult DashboardController.EAControls(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/EAControls
Cross-layer call chain - DashboardController.EAControls → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.EAControls → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
DashboardController_EAControls["DashboardController.EAControls"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_EAControls --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_EAControls --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
View Metadata
- View:
EAControls(Andromeda.Web\Views\Dashboard\EAControls.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve compensatory activities and properties from session or model based on project data availability, then filter activities from RiskModel. - Fetch compensatory activities and properties from ControlModel if session data missing or mismatched - Retrieve compensatory activities and properties from session if project data matches ProjID, Retrieve all activities with arrows from RiskModel, Filter compensatory activity details by IdType and ControlType
Error Flows - Summary: Handle null references and add exception handling for external method calls. - Null reference risk from ProjID.Value without null check
Security Issues - Summary: No security issues identified in EAControls method.
Performance Issues - Summary: Optimize collection operations and caching to prevent stale data and slow performance. - Multiple Distinct() and OrderBy() calls degrade performance on large datasets - Processing large collections with Distinct and OrderBy before JSON serialization impacts performance
Maintainability Issues - Summary: Method mixes multiple responsibilities and uses unclear, hard-to-maintain code patterns. - Violates single responsibility principle by combining HTTP handling, session management, data retrieval, and processing, Uses magic string 'ProjectData' for session key, reducing maintainability, Contains incomplete and unclear code for retrieving activities from project data, Uses anonymous types in LINQ queries, complicating code readability and maintenance
Test Case Ideas - Summary: Verify JsonResult output, caching by ProjID, session and model data handling, filtering, grouping, sorting, and empty collections. - Handle valid ProjectData in session matching ProjID - Handle ProjectData in session with different ProjectID - Handle empty collections correctly - Return JsonResult
Dependencies & Called Services - Summary: Uses interfaces and data models for control, risk, and project management. - Enumerable for collections, IControlModel interface, IRiskModel interface, ProjectData model, String type
AdequacyDashboard¶
Summary: Retrieve project data from session when ProjID matches, then extract relevant data.
JsonResult DashboardController.AdequacyDashboard(int? ProjID, string screen)
Routing
- HTTP:
GET - URL:
/Dashboard/AdequacyDashboard
Cross-layer call chain - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetObjectivesList - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetRiskControls - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.Arrow.Clone - DashboardController.AdequacyDashboard → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.AdequacyDashboard → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.AdequacyDashboard → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - DashboardController.AdequacyDashboard → Andromeda.Core.Services.Algorithms.Delooper.deloop - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetRiskControls → Andromeda.Core.DataManager.GetData - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetObjectivesList["Andromeda.Core.Entities.ProjectData.GetObjectivesList"]
Andromeda_Core_Entities_ProjectData_GetRiskControls["Andromeda.Core.Entities.ProjectData.GetRiskControls"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows["Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_AdequacyDashboard["DashboardController.AdequacyDashboard"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetRiskControls --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_AdequacyDashboard --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_AdequacyDashboard --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - Summary: Retrieve project data from session when ProjID matches, then extract relevant data. - ProjID provided and matches session project ID, Successful project data retrieval from session, Data extraction from session object
Error Flows - Summary: Handle null references and fix code errors to prevent runtime exceptions. - Null reference risk accessing ProjID.Value without null check
Security Issues - Summary: Sanitize projectID to prevent SQL injection in RiskModel queries. - Unsanitized projectID causes SQL injection risk, RiskModel queries vulnerable without input validation
Performance Issues - Summary: Session misuse and heavy model calls degrade performance and scalability. - Session storage of large project data degrades performance, Multiple database calls in single code blocks impact data retrieval speed, Tight coupling with multiple models reduces scalability and responsiveness
Maintainability Issues - Summary: The method's complexity and poor naming reduce maintainability and hinder debugging. - Excessive variables and tight coupling with projectData and multiple models, Use of magic strings for session keys reduces clarity, Typographical errors and incomplete statements degrade code quality, Numerous method calls and data processing steps increase complexity
UX Impact Notes - Summary: Accurate JSON structure and data ensure a positive user experience. - Accurate JSON structure, Error-free data retrieval, Proper data formatting
Test Case Ideas - Summary: Verify data retrieval, performance, filtering accuracy, and code correctness in AdequacyDashboard. - Assess performance with large project data sets
Dependencies & Called Services - Summary: Uses core collections, interfaces, and project-specific models for service operations. - Core collections: List, Enumerable, Project-specific interfaces: IActorModel, IControlModel, IProcessModel, IRiskModel, Utility classes: Arrow, ProcessExtensions, Data container: ProjectData
ControlExistenceTable¶
Summary: The method retrieves project data from session or models, processes objectives, risks, and activities, calculates coverage metrics, and returns aggregated JSON results.
JsonResult DashboardController.ControlExistenceTable(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ControlExistenceTable
Cross-layer call chain - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetObjRisks - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetObjActivities - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetObjectivesList - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow - DashboardController.ControlExistenceTable → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetObjActivities["Andromeda.Core.Entities.ProjectData.GetObjActivities"]
Andromeda_Core_Entities_ProjectData_GetObjRisks["Andromeda.Core.Entities.ProjectData.GetObjRisks"]
Andromeda_Core_Entities_ProjectData_GetObjectivesList["Andromeda.Core.Entities.ProjectData.GetObjectivesList"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_ControlExistenceTable["DashboardController.ControlExistenceTable"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjActivities
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjRisks
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
DashboardController_ControlExistenceTable --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
ControlExistenceTable(Andromeda.Web\Views\Dashboard\ControlExistenceTable.cshtml)
Detailed Analysis
Key Flows - and returns aggregated JSON results. - Calculate control coverage percentages and compile activity and control lists - Prepare and return aggregated JSON response
Error Flows - Summary: Handle null references in parameters - Null reference risk accessing ProjID.Value without null check
Security Issues - Summary: Storing project data in session risks stale data; unsanitized collections expose sensitive data. - Session storage risks stale or inconsistent project data, Unsanitized ToArray() and ToList() expose sensitive data in JSON
Performance Issues - Summary: LINQ methods and nested operations cause memory overhead and slow execution. - Nested GroupBy and ToDictionary operations degrade performance on large datasets
Maintainability Issues - Summary: The method uses complex, tightly coupled code with unclear naming and incomplete fragments. - Excessive IList variables increase complexity, Tight coupling with session and multiple models, Use of magic strings reduces clarity, Anonymous types hinder maintainability, Non-descriptive variable names reduce readability, Complex nested LINQ queries impair understanding, Incomplete or typo code fragments risk errors
UX Impact Notes - Summary: Returns JSON for UI updates on control coverage and risk - JSON output for control coverage and risk UI updates - Potential UI slowdowns from synchronous large dataset processing
Test Case Ideas - Summary: Verify data retrieval, processing, calculations, JSON output, and performance under various conditions. - Calculate risk coverage metrics accurately, Calculate control coverage percentage correctly - Handle large datasets efficiently - Return valid JsonResult for valid ProjID - Retrieve and assign session data matching ProjID
Dependencies & Called Services - and basic types for control existence checks. - Enumerable for collection operations, ICollection for collection interfaces, IControlModel for control data representation, IRiskModel for risk data representation, Int32 for integer operations, List for list data structures, Math for mathematical functions, ProjectData for project-specific data, String for text handling
EffectivenessTable¶
Summary: Retrieve project data by ProjID, fetch related risk and control data, calculate and return control effectiveness ratings as JSON.
JsonResult DashboardController.EffectivenessTable(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/EffectivenessTable
Cross-layer call chain - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetRiskControls - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.EffectivenessTable → Andromeda.Core.Entities.ProjectData.GetArrows - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetRiskControls → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetRiskControls["Andromeda.Core.Entities.ProjectData.GetRiskControls"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
DashboardController_EffectivenessTable["DashboardController.EffectivenessTable"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetRiskControls --> Andromeda_Core_DataManager_GetData
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetRiskControls
DashboardController_EffectivenessTable --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
View Metadata
- View:
EffectivenessTable(Andromeda.Web\Views\Dashboard\EffectivenessTable.cshtml)
Detailed Analysis
Key Flows - calculate and return control effectiveness ratings as JSON. - Calculate control effectiveness ratings - Fetch related project risk and control data - Aggregate and return ratings as JSON - Validate ProjID parameter
Error Flows - Summary: Handle null ProjID to prevent exceptions and add error logging for null JSON responses. - Lack of error handling and logging on returning null JSON
Security Issues - Summary: Sanitize projectId to prevent SQL injection vulnerabilities. - SQL injection risk from unsanitized projectId, Ensure proper input sanitization for projectId
Performance Issues - Summary: Session serialization, multiple database calls, repeated collection operations, and large ToList() usage degrade performance. - Session object serialization overhead, Multiple database calls with complex LINQ queries, Repeated Count() and Average() on control ratings collection, Excessive memory use from large ToList() calls
Maintainability Issues - Summary: Remove magic strings and numbers, decouple models, and simplify complex LINQ queries. - Magic strings in Session object retrieval and project ID comparison, Tight coupling between models and methods, Complex LINQ queries reducing code clarity, Magic numbers in rank threshold conditions, Unclear use of magic methods like Json
UX Impact Notes - Summary: Data processing risks performance issues and null JSON responses degrade user experience. - Potential performance issues affecting user experience, Effectiveness data delivered in JSON format impacting display and usage, Null JSON responses without feedback harming user experience
Test Case Ideas - Summary: Verify data retrieval, aggregation, and JSON output correctness for various project and control rating scenarios. - Calculate and aggregate control effectiveness ratings - Handle empty control ratings collection - Return expected JSON result for different input scenarios
Dependencies & Called Services - Summary: Uses core libraries and domain-specific models for processing and risk evaluation. - Enumerable library, Risk model interface, Math library, Project data model - Process model interface
CostOfControl¶
Summary: No key flows are defined for the CostOfControl method.
JsonResult DashboardController.CostOfControl(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/CostOfControl
Cross-layer call chain - DashboardController.CostOfControl → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.CostOfControl → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.CostOfControl → Andromeda.Core.Entities.Arrow.Clone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
DashboardController_CostOfControl["DashboardController.CostOfControl"]
DashboardController_CostOfControl --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_CostOfControl --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_CostOfControl --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
View Metadata
- View:
CostOfControl(Andromeda.Web\Views\Dashboard\CostOfControl.cshtml)
Detailed Analysis
Key Flows - Summary: No key flows are defined for the CostOfControl method.
Error Flows - Summary: Ensure 'ProjectData' session variable is initialized to prevent null reference errors. - Null reference risk from uninitialized 'ProjectData' session variable
Security Issues - Summary: No security concerns identified in CostOfControl method.
Performance Issues - Summary: Optimize expensive repeated calls, reduce nested loops with Contains, and minimize LINQ and ToList usage. - Repeated calls to projectData.GetDelooperObj() without caching, Use of Contains inside loops causing O(n^2) complexity, Multiple LINQ operations within loops degrading performance, Excessive ToList() calls increasing memory usage, Count method calls inside loops causing slowdowns, String.Equals with InvariantCultureIgnoreCase slower than alternatives
Maintainability Issues - Summary: Incomplete implementation and unclear code reduce maintainability and cause errors. - Incomplete method implementation and missing return statement
UX Impact Notes - Summary: Returns cost of control data for dashboard but risks stale data from caching issues. - Returns cost of control data in JSON for dashboard UI
Test Case Ideas - Summary: Validate session handling - Initialization and population of 'ctrlActdIds' with large datasets - Return of correctly ordered JSON data by team with accurate cost sums
Dependencies & Called Services - Summary: Uses data structures, algorithms, math, and project utilities for control cost calculation. - Graph data structures, Algorithm utilities, Mathematical functions, String manipulation, Enumerable and list collections, Project-specific data handling
HRTeamsHiring¶
Summary: Retrieve project data from session if matching ProjID; otherwise, fetch and process actors and catchments from HRModel.
JsonResult DashboardController.HRTeamsHiring(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/HRTeamsHiring
Cross-layer call chain - DashboardController.HRTeamsHiring → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.HRTeamsHiring → Andromeda.Core.Entities.ProjectData.GetTalentPools - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HRTeamsHiring["DashboardController.HRTeamsHiring"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_HRTeamsHiring --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRTeamsHiring --> Andromeda_Core_Entities_ProjectData_GetTalentPools
Detailed Analysis
Key Flows - fetch and process actors and catchments from HRModel. - Fetch actors and catchments from HRModel - Retrieve project data from session and filter actors and catchments if ProjID matches
Error Flows - Summary: Prevent null reference errors when accessing ProjectData and ProjID values. - Null reference risk from missing ProjectData in session, Null reference risk from null ProjID when accessing ProjID.Value
Security Issues - Summary: Prevent SQL injection by sanitizing ProjID.Value before HRModel calls. - SQL injection risk from unsanitized ProjID.Value, Sanitize ProjID.Value before database queries
Performance Issues - Summary: Repeated data access and inefficient LINQ operations degrade performance. - Use of ToList() on large data sets causes performance degradation
Maintainability Issues - Summary: Code contains unused variables, magic literals, complex queries, and unclear conditionals reducing maintainability. - Unused variable declaration causing confusion, Magic strings for session keys instead of constants, Complex LINQ queries with nested filtering and grouping, Magic numbers in calculations without explanation, Unclear and incomplete conditional statements around ID parameter
UX Impact Notes - Summary: Caching improves response times; data accuracy ensures correct user information. - Cache method response by ProjID for faster repeated requests, Ensure correct project data in session to display accurate information, Accurate hiring and training calculations for clear user information
Test Case Ideas - Summary: Test HRTeamsHiring method for caching, parameter handling, actor filtering, data retrieval, and calculations. - Retrieve and verify catchmentsList from project data - Verify grouping and filtering with varied catchment hiring counts - Handle mixed system and non-system - Validate hiring and training data calculations
Dependencies & Called Services - Summary: Uses data models and utilities for HR team hiring processes. - Enumerable utilities, HR data models, Mathematical functions, Project data access
HRActorActivities¶
Summary: Retrieve project data using ProjID, calculate actor utilization, and return JSON results.
JsonResult DashboardController.HRActorActivities(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/HRActorActivities
Cross-layer call chain - DashboardController.HRActorActivities → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.HRActorActivities → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.HRActorActivities → Andromeda.Core.Entities.Activity.TotalEffort - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HRActorActivities["DashboardController.HRActorActivities"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_HRActorActivities --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HRActorActivities --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HRActorActivities --> Andromeda_Core_Entities_ProjectData_GetActors
Detailed Analysis
Key Flows - and return JSON results. - Calculate actor utilization from activity volumes and handling times - Fetch and filter actors and activities - Return processed actor activity data as JSON - Validate ProjID and retrieve project data from session
Error Flows - Summary: Handle null ProjID and missing or expired project session data to prevent exceptions. - Null reference exception from unverified ProjID.Value access, Null projectData from expired or missing session project data
Security Issues - Summary: No security issues identified in HRActorActivities method.
Performance Issues - Summary: Session misuse and inefficient LINQ queries degrade performance with large datasets. - Use of ToList() on large datasets causes high memory use
Maintainability Issues - Summary: The code uses unclear strings, tight coupling, and incomplete segments, reducing maintainability. - Use of magic string 'ProjectData' as session key, Incomplete or truncated code segments and conditions, Tight coupling with projectData object and its methods, Use of anonymous objects in utilization calculation, Use of 'var' reduces code readability, Presence of commented-out code indicates incomplete functionality
UX Impact Notes - Summary: The JSON result supports the HR dashboard UX but lacks clear context. - JSON result provides HR dashboard data, Variable naming issues affect code readability
Test Case Ideas - Summary: Verify correct data retrieval, filtering, calculation, JSON output, and performance under load. - Conditional logic with matching and non-matching ProjectID - Performance with large datasets - Error-free method completion and return
Dependencies & Called Services - Summary: Uses models and data types for HR actor activities processing. - Activity model, Enumerable collections, IActorModel interface, IHRModel interface, IRiskModel interface, Math utilities, ProjectData structure, String operations
HROverallUtilization¶
Summary: HROverallUtilization fetches project actors and activities by ProjID, calculates effort metrics, and returns utilization data as JSON.
JsonResult DashboardController.HROverallUtilization(int? ProjID)
Routing
- URL:
/Dashboard/HROverallUtilization
Cross-layer call chain - DashboardController.HROverallUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.HROverallUtilization → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.HROverallUtilization → Andromeda.Core.Entities.Activity.TotalEffort - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HROverallUtilization["DashboardController.HROverallUtilization"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HROverallUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
Detailed Analysis
Key Flows - and returns utilization data as JSON. - Calculate effort metrics per actor - Return utilization data as JSON
Error Flows - Summary: Handle null ProjID to prevent exceptions and fix incomplete code to avoid errors. - Null reference exception from unchecked nullable ProjID
Security Issues - Summary: No security issues identified in HROverallUtilization method.
Performance Issues - Summary: Optimize data handling and queries to improve performance with large datasets. - ToList() on large datasets causes memory and performance overhead
Maintainability Issues - Summary: Replace magic strings and numbers with constants, use descriptive variable names, and remove incomplete code. - Use named constants instead of magic strings and numbers, Replace unclear variables with descriptive names, Remove commented-out and incomplete code to prevent compilation errors
Test Case Ideas - Summary: Verify data retrieval, filtering, calculations, and JSON output correctness. - Calculate daysinYear for current year accurately, Calculate effort percentages correctly including zero effort and empty arrays - Check conditional branches with matching and non-matching project IDs - Return correct values from TotalEffort method for actors - Return correct out-process effort values from OutProcessActsToDailyEffort - Return valid JSON result - Validate data retrieval with valid project ID
Dependencies & Called Services - Summary: Utilizes core system, data models, and utility libraries for HR overall utilization. - Activity module, Calendar utilities, Enumerable collections, IActorModel interface, IHRModel interface, IProcessModel interface, Math utilities, ProjectData module, String utilities
TeamMonthlyUtilization¶
Summary: The method calculates utilization by retrieving and filtering project actors and activities from session data or external models.
JsonResult DashboardController.TeamMonthlyUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamMonthlyUtilization
Cross-layer call chain - DashboardController.TeamMonthlyUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamMonthlyUtilization → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.TeamMonthlyUtilization → Andromeda.Core.Entities.Activity.TotalEffort - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamMonthlyUtilization["DashboardController.TeamMonthlyUtilization"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamMonthlyUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamMonthlyUtilization(Andromeda.Web\Views\Dashboard\TeamMonthlyUtilization.cshtml)
Detailed Analysis
Key Flows - Summary: The method calculates utilization by retrieving and filtering project actors and activities from session data or external models. - Retrieve and filter actors and activities from session project data, Fallback to retrieve and filter actors and activities from HRModel and ActorModel
Error Flows - Summary: Handle null ProjID - Null reference exception from unchecked optional ProjID
Security Issues - Summary: No security issues identified in TeamMonthlyUtilization method.
Performance Issues - Summary: Improper Session use and repeated ToList() calls degrade performance and increase memory use. - Repeated ToList() calls on large datasets
Maintainability Issues - Summary: The method uses unclear magic strings and numbers, incomplete code, and undefined variables, reducing maintainability. - Use of magic strings for session data access, Use of magic numbers without named constants, Undefined or unclear variable names, Incomplete or typo method calls, Incomplete conditionals and empty code blocks, Commented out or unfinished code sections
UX Impact Notes - Summary: Incomplete calls and missing error handling cause errors; caching improves response times. - Lack of error handling and validation causing unhandled exceptions
Test Case Ideas - filtering logic - Utilization calculation with valid ProjID and session data, Filtering actors by location code, system status, and activity state, Filtering activities by 'OutProcess' property, Effort sum and utilization percentage calculations with varied inputs, Conditional branches for specific frequency values, Output caching behavior with different ProjID values, Edge case handling for zero/negative effort and division safety
Dependencies & Called Services - Summary: Uses core data models and utilities for activity and project calculations. - Activity model, Enumerable utilities, Actor data model, HR data model, Math utilities, Project data model, String utilities
HRTeamsComparison¶
Summary: Retrieve project data, filter active non-system actors, and return their capacity details as JSON.
JsonResult DashboardController.HRTeamsComparison()
Routing
- HTTP:
GET - URL:
/Dashboard/HRTeamsComparison
Cross-layer call chain - DashboardController.HRTeamsComparison → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HRTeamsComparison["DashboardController.HRTeamsComparison"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_HRTeamsComparison --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
HRTeamsComparison(Andromeda.Web\Views\Dashboard\HRTeamsComparison.cshtml)
Detailed Analysis
Key Flows - and return their capacity details as JSON. - Return transformed data as JSON
Error Flows - Summary: Fallback to HRModel when session project data is null or mismatched. - Null or mismatched session project data, Fallback retrieval of actors from HRModel
Security Issues - Summary: Using Session['ProjectData'] without validation risks security breaches. - Unvalidated Session['ProjectData'] usage
Performance Issues - Summary: Session data and LINQ operations cause performance issues with large datasets. - LINQ Where and ToList filtering slow on large datasets
Maintainability Issues - Summary: The method uses unclear magic strings, tight coupling, and undocumented properties, reducing maintainability. - Use of magic string 'ProjectData' for session key, Incomplete conditional statement causing confusion, Undocumented magic properties IsSystem and IsActive, Tight coupling to HRModel class, Use of anonymous types for actor details, Unclear context around List() method call
UX Impact Notes - Summary: Returning large JSON actor details degrades user responsiveness. - Returning JSON with actor details
Test Case Ideas - Summary: Verify correct project data retrieval, actor filtering, method calls, and performance under load. - Handle large actor detail collections efficiently - Return correct project ID and data - Return correct list of actors for given project ID - Compile method successfully and return expected result
Dependencies & Called Services - Summary: Uses data collections, HR models, project data, and string operations. - Enumerable collections, HR model interface, Project data access, String manipulation
HRProductComparison¶
Summary: Retrieve project-related actors, activities, and skills from session or external models based on ProjID availability.
JsonResult DashboardController.HRProductComparison(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/HRProductComparison
Cross-layer call chain - DashboardController.HRProductComparison → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.HRProductComparison → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow - DashboardController.HRProductComparison → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.ExecuteScalar
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_ExecuteScalar["Andromeda.Core.DataManager.ExecuteScalar"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSkillMatrix["Andromeda.Core.Entities.ProjectData.GetSkillMatrix"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HRProductComparison["DashboardController.HRProductComparison"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_ExecuteScalar
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_GetData
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRProductComparison --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
View Metadata
- View:
HRProductComparison(Andromeda.Web\Views\Dashboard\HRProductComparison.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project-related actors, activities, and skills from session or external models based on ProjID availability. - Fetch activities, skills, activity properties, and actor details from external models when project data is missing - Retrieve and filter actors, activities, and skills from session data when ProjID and project data exist
Error Flows - Summary: Handle null references and fix malformed conditionals in project data access. - Null reference risk accessing ProjID.Value without null check
Security Issues - Summary: Prevent SQL injection by sanitizing user input in BusinessRule name filter. - SQL injection risk in BusinessRule name filter, Lack of input sanitization for user-provided filters
Performance Issues - Summary: Session use and repeated data calls degrade performance and increase memory usage. - Multiple ToList() calls on large datasets increase memory usage and slow performance
Maintainability Issues - Summary: Uninitialized variables, malformed conditionals, tight model coupling, magic numbers, and unused variables reduce maintainability. - Uninitialized variables reduce code clarity, Malformed conditional statements cause runtime issues, Tight coupling with multiple models complicates maintenance and testing, Magic numbers in calculations reduce readability, Unused or unclear variables add confusion
UX Impact Notes - Summary: Returned JSON data directly influences UI presentation and user experience. - Returned JSON data
Test Case Ideas - and method return behavior. - Correct method return to caller
Dependencies & Called Services - Summary: Uses core data models and enumerable utilities for HR product comparison. - Enumerable utilities, HR data model (IHRModel), Risk data model (IRiskModel), Project data container (ProjectData) - Process data model (IProcessModel)
OrganizationStructure¶
Summary: Retrieve project data by ProjID, filter and process actors, then return JSON with actor details.
JsonResult DashboardController.OrganizationStructure(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/OrganizationStructure
Cross-layer call chain - DashboardController.OrganizationStructure → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_OrganizationStructure["DashboardController.OrganizationStructure"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_OrganizationStructure --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
OrganizationStructure(Andromeda.Web\Views\Dashboard\OrganizationStructure.cshtml)
Detailed Analysis
Key Flows - then return JSON with actor details. - Calculate actor counts and transform data - Return processed actors as JSON
Error Flows - Summary: Handle null ProjID - Null reference risk accessing ProjID.Value, Fallback on missing ProjectData in session, No error handling for invalid project IDs or downstream call failures
Security Issues - Summary: No security issues identified in the OrganizationStructure method.
Performance Issues - Summary: Optimize data storage and calculations to improve performance. - Session storage of ProjectData impacts performance, LINQ filtering and ordering on large actor collections degrades performance, Repeated Convert.ToDecimal() and Math.Ceiling() calls require caching intermediate results
Maintainability Issues - Summary: Code uses unclear naming, magic strings, complex expressions, and lacks error handling. - Use of magic string 'ProjectData' as session key, Use of magic properties 'IsSystem' and 'IsActive' without explanation, Non-descriptive method name 'oList' violating naming conventions, Anonymous types and complex LINQ conditional expressions reducing clarity, Missing error handling and validation in getListOfActors calls
UX Impact Notes - Summary: Returned JSON structure directly controls organizational display. - JSON data structure, Organizational display rendering
Test Case Ideas - Summary: Verify actor retrieval, filtering, sorting, counts, and fallback behavior in OrganizationStructure. - Calculate correct manager and supervisor counts - Handle empty actor lists correctly - Return only non-system - Ensure method returns control properly
Dependencies & Called Services - Summary: Uses utility, data, and model services for project and mathematical operations. - Conversion utilities, Enumerable collections, IHR data model, Mathematical functions, Project data services
TeamCompetency¶
Summary: Retrieve valid project data and actor skills from session, process skill matrices with LINQ, and return ordered team competency data.
JsonResult DashboardController.TeamCompetency(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamCompetency
Cross-layer call chain - DashboardController.TeamCompetency → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamCompetency → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - DashboardController.TeamCompetency → Insorce.Helpers.Helpers.getSkillLevel - DashboardController.TeamCompetency → Andromeda.Web.Views.DataFormatFile.getSkillLevel - DashboardController.TeamCompetency → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.TeamCompetency → Andromeda.Core.Services.Algorithms.Delooper.deloop - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.ExecuteScalar - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Web.Views.DataFormatFile.getSkillLevel → Andromeda.Core.Constants.GetSkill - Andromeda.Web.Views.DataFormatFile.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
Andromeda_Core_DataManager_ExecuteScalar["Andromeda.Core.DataManager.ExecuteScalar"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSkillMatrix["Andromeda.Core.Entities.ProjectData.GetSkillMatrix"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
Andromeda_Web_Views_DataFormatFile_getSkillLevel["Andromeda.Web.Views.DataFormatFile.getSkillLevel"]
DashboardController_TeamCompetency["DashboardController.TeamCompetency"]
Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_ExecuteScalar
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_TeamCompetency --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_TeamCompetency --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_TeamCompetency --> Andromeda_Web_Views_DataFormatFile_getSkillLevel
DashboardController_TeamCompetency --> Insorce_Helpers_Helpers_getSkillLevel
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
View Metadata
- View:
TeamCompetency(Andromeda.Web\Views\Dashboard\TeamCompetency.cshtml)
Detailed Analysis
Key Flows - and return ordered team competency data. - Extract actor details and skill sets from project data - Return ordered data as JsonResult - Process skill matrices and input skills using LINQ for grouping, ordering, and competency calculation - Validate ProjID and retrieve matching project data from session
Error Flows - Summary: Handle null ProjID and fix malformed projectData condition to prevent runtime errors. - Null reference exception from unchecked ProjID.Value
Security Issues - Summary: No security issues identified in the TeamCompetency method.
Performance Issues - Summary: Inefficient LINQ usage causes multiple iterations and high overhead on large collections. - Use of ToList() on large collections causing memory and performance overhead, Multiple LINQ methods (Any, ToList, OrderBy, GroupBy, Max) causing repeated iterations, Use of FirstOrDefault() on large lists causing performance degradation
Maintainability Issues - Summary: Code uses hardcoded values and tight coupling, reducing clarity and maintainability. - Use of hardcoded string 'DashboardCache' instead of constant or config, Malformed code segments with missing syntax reducing clarity, Extensive use of anonymous types complicating code understanding, Tight coupling with HRModel class hindering future changes, Use of unexplained magic numbers like ActorId > 0
Test Case Ideas - Summary: Verify correct data retrieval, filtering, ordering, and performance in team competency calculations. - Handle large collections efficiently without performance loss - Handle cases with no actors or skills found - Return JsonResult for valid ProjID - Validate getSkillLevel helper method calls and results
Dependencies & Called Services - Summary: Uses utility, data models, and string handling services. - Enumerable utilities, Helper functions, IHR data model, Project data access, String operations
TeamCompetencyChart¶
Summary: Retrieve project data and related actor details, skill sets, and activities using a valid project ID from session.
JsonResult DashboardController.TeamCompetencyChart(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamCompetencyChart
Cross-layer call chain - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.TeamCompetencyChart → Insorce.Helpers.Helpers.getSkillLevel - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.Activity.IterationEffort - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.Activity.Effort - DashboardController.TeamCompetencyChart → Andromeda.Core.Entities.Activity.ReworkEffort - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.ExecuteScalar - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
Andromeda_Core_DataManager_ExecuteScalar["Andromeda.Core.DataManager.ExecuteScalar"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_IterationEffort["Andromeda.Core.Entities.Activity.IterationEffort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSkillMatrix["Andromeda.Core.Entities.ProjectData.GetSkillMatrix"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamCompetencyChart["DashboardController.TeamCompetencyChart"]
Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_ExecuteScalar
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_GetData
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_Effort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamCompetencyChart --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_TeamCompetencyChart --> Insorce_Helpers_Helpers_getSkillLevel
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
View Metadata
- View:
TeamCompetencyChart(Andromeda.Web\Views\Dashboard\TeamCompetencyChart.cshtml)
Detailed Analysis
Key Flows - skill sets - Extract skill sets - Validate ProjID
Error Flows - Summary: Handle null ProjID and null projectData to prevent exceptions and ensure data retrieval. - Null reference exception from unchecked ProjID parameter
Security Issues - Summary: No security concerns identified in TeamCompetencyChart method.
Performance Issues - Summary: Excessive database calls and inefficient data loading degrade performance. - Loading entire datasets into memory via ToList() - Session storage of ProjectData risks performance if unmanaged, Multiple rapid database calls to HRModel and ActorModel, Repeated ToList() calls causing multiple database queries, Repeated queries and calculations on ActorSkillMatrix, Complex conditions in LINQ Where clauses impacting query efficiency
Maintainability Issues - Summary: The method suffers from unclear naming, tight coupling, magic values, and complex conditions reducing maintainability. - Use of magic string 'ProjectData' as Session key, Incomplete conditional statements, Typo in variable name 'ojectId', Unclear and non-standard method name 'ctivities', Tight coupling with HRModel and ActorModel dependencies, Complex LINQ Where clause conditions, Use of magic numbers in ternary operators, Anonymous objects without explicit types, Unclear variable names like 'pervises' and 'ActorA', Incomplete code snippets and missing context
Test Case Ideas - Summary: Verify data retrieval, filtering, calculations, grouping, JSON output, and error-free handling of all data scenarios. - Calculate average complexity and skill scores accurately, Calculate effort and rework values for activity types - Handle empty collections and no data scenarios - Validate data retrieval with valid and invalid ProjID - Validate grouping and selection logic for complexity levels - Ensure method returns expected JSON with actorName and effortInHours - Ensure method returns control without errors on partial or incomplete data
Dependencies & Called Services - Summary: Uses core utilities, data models, and project-related helpers. - Activity module, Enumerable utilities, Helper functions, Actor data model, HR data model, Math utilities, Project data module
HRTeamOverView¶
Summary: Retrieve project data from session using valid ProjID and extract related actors, talent pools, and activities.
JsonResult DashboardController.HRTeamOverView(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/HRTeamOverView
Cross-layer call chain - DashboardController.HRTeamOverView → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.HRTeamOverView → Andromeda.Core.Entities.ProjectData.GetTalentPools - DashboardController.HRTeamOverView → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.HRTeamOverView → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.HRTeamOverView → Andromeda.Core.Entities.Actor.GetLocation - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_HRTeamOverView["DashboardController.HRTeamOverView"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_HRTeamOverView --> Andromeda_Core_Entities_ProjectData_GetTalentPools
View Metadata
- View:
HRTeamOverView(Andromeda.Web\Views\Dashboard\HRTeamOverView.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session using valid ProjID and extract related actors, talent pools, and activities. - Retrieve project data from session, Match project ID, Extract actors from project data, Extract talent pools from project data, Extract activities from project data - Validate ProjID
Error Flows - Summary: Handle null ProjID safely but add explicit exception handling for session and method call errors. - Unvalidated and unclear 'ctivities' method call risks runtime errors
Security Issues - Summary: Call to 'ctivities' lacks validation and error handling, risking security breaches. - Potential security risk from unvalidated sensitive operations
Performance Issues - Summary: Session storage and multiple unoptimized data calls degrade performance. - Use of ToList() on large datasets causes bottlenecks
Maintainability Issues - and anonymous returns. - Anonymous object return complicates understanding data structure
UX Impact Notes - Summary: Returns accurate JSON data to ensure correct user interface display. - Return accurate and complete JSON data - Avoid incomplete or missing return statements
Test Case Ideas - Summary: Verify JSON result correctness, data filtering, retrieval, calculations, and output structure. - Calculate control volume accurately for varied inputs, Calculate in-process activity volumes accurately, Calculate HR cost correctly for different inputs - Fetch in-process activities from ActorModel - Return JsonResult for valid ProjID - Return expected JSON data structure
Dependencies & Called Services - Summary: Uses models and utilities for HR, risk, activity tracking, and project data management. - Activity tracking module, Actor and IActorModel interfaces, HR and IHRModel interfaces, Risk and IRiskModel interfaces, Enumerable utilities, Math utilities, Project data management
TeamCompetencyandCostGraph¶
Summary: Process valid project data to filter relevant actors and activities, calculate competency, and return cost-ordered results.
JsonResult DashboardController.TeamCompetencyandCostGraph(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamCompetencyandCostGraph
Cross-layer call chain - DashboardController.TeamCompetencyandCostGraph → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamCompetencyandCostGraph → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - DashboardController.TeamCompetencyandCostGraph → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamCompetencyandCostGraph["DashboardController.TeamCompetencyandCostGraph"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_TeamCompetencyandCostGraph --> Andromeda_Core_Entities_ProjectData_GetActors
View Metadata
- View:
TeamCompetencyandCostGraph(Andromeda.Web\Views\Dashboard\TeamCompetencyandCostGraph.cshtml)
Detailed Analysis
Key Flows - and return cost-ordered results. - Calculate competency using maximum 'BusinessRule' activity property - Return final data as JSON - Validate ProjID and retrieve matching project data from session
Error Flows - Summary: Handle null ProjID and add exception handling to prevent runtime errors. - Null reference exception from unchecked optional ProjID - Lack of exception handling causes unhandled runtime errors
Security Issues - Summary: Storing project data in session risks security without proper session management. - Session storage of project data, Risk from improper session management
Performance Issues - Summary: Optimize database calls and LINQ queries to prevent performance bottlenecks. - Multiple unoptimized database or model calls without caching, Inefficient LINQ usage with Any() inside Where and combined Any() and Max() causing extra queries, Ordering and converting large lists to in-memory collections causing bottlenecks
Maintainability Issues - Summary: The method mixes multiple responsibilities and has unclear, tightly coupled code with potential errors. - Violates single responsibility principle by combining request processing, data handling, and formatting, Tight coupling with projectData and multiple models reduces code flexibility, Use of magic strings like 'BusinessRule' lowers code clarity, Non-descriptive variable names hinder readability, Commented out code indicates incomplete or abandoned functionality, Undefined variable 'p' risks errors and confusion
UX Impact Notes - Summary: Deliver properly formatted, filtered, and performant JSON data for clear, responsive graphs. - Performance optimization for large data sets
Test Case Ideas - Summary: Validate data retrieval - Calculate total team costs and filter cost data, Calculate competency with and without 'BusinessRule' activity properties - Return valid JsonResult for valid ProjID - Ensure performance and correctness with large data sets
Dependencies & Called Services - Summary: Uses multiple models and data types for team competency and cost analysis. - Enumerable for collections, IActorModel for actor data, IInfraModel for infrastructure data, IProcessModel for process data, ProjectData for project-specific information, String for textual data
WorkAllocationandSkillingGraph¶
Summary: The method processes a valid project ID to retrieve and filter project data, calculate efforts, costs, and benefits, and prepare skill data for visualization.
JsonResult DashboardController.WorkAllocationandSkillingGraph(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/WorkAllocationandSkillingGraph
Cross-layer call chain - DashboardController.WorkAllocationandSkillingGraph → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.WorkAllocationandSkillingGraph → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - DashboardController.WorkAllocationandSkillingGraph → Andromeda.Core.Entities.ProjectData.GetTalentPools - DashboardController.WorkAllocationandSkillingGraph → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.WorkAllocationandSkillingGraph → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.ExecuteScalar - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_ExecuteScalar["Andromeda.Core.DataManager.ExecuteScalar"]
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActCostBreakUp["Andromeda.Core.Entities.ProjectData.GetActCostBreakUp"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSkillMatrix["Andromeda.Core.Entities.ProjectData.GetSkillMatrix"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_WorkAllocationandSkillingGraph["DashboardController.WorkAllocationandSkillingGraph"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_ExecuteScalar
Andromeda_Core_Entities_ProjectData_GetSkillMatrix --> Andromeda_Core_DataManager_GetData
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
DashboardController_WorkAllocationandSkillingGraph --> Andromeda_Core_Entities_ProjectData_GetTalentPools
Detailed Analysis
Key Flows - Summary: The method processes a valid project ID to retrieve and filter project data, calculate efforts, costs, and benefits, and prepare skill data for visualization. - Calculate daily efforts per actor - skill sets - Process project properties - Retrieve and confirm project data, Filter relevant project data, Aggregate activities, Compute team costs and benefits, Prepare skill data for graph visualization
Error Flows - Summary: The method lacks exception handling, risking runtime errors from null references and incomplete calls. - Absence of explicit exception handling, Risk of runtime exceptions from null references, Incomplete method calls causing unexpected errors
Security Issues - Summary: Improper session handling risks session fixation and related vulnerabilities. - Use of Session['ProjectData'] without proper session security, Risk of session fixation and session-related vulnerabilities
Performance Issues - Summary: Reduce database calls and optimize loops to improve performance and memory usage. - Excessive database or model calls increase latency and resource usage, Calling OutProcessActsToDailyEffort per actor degrades performance on large collections, Using FirstOrDefault inside loops slows performance with large collections, AddRange with large collections causes memory reallocation overhead
Maintainability Issues - Summary: The method uses hardcoded strings, tight coupling, unclear code, and lacks comments. - Hardcoded string 'ProjectData' reduces maintainability and risks refactoring, Tight coupling with projectData and multiple models hinders data source changes, Incomplete method calls and code snippets reduce clarity, Anonymous types in skill extraction impair readability and maintenance, Lack of comments and unclear variable names reduce understandability
Test Case Ideas - Summary: Verify correct data handling, calculations, and performance for various input scenarios. - Calculate daily effort per actor accurately - Handle incomplete ctCostBreakUp method calls without errors - Handle large data sets without performance degradation - Return correct data with valid ProjID - skill sets
Dependencies & Called Services - Summary: Uses multiple interfaces and collections for data modeling and processing. - Enumerable for collection operations, IActorModel for actor data, IHRModel for HR data, IInfraModel for infrastructure data, IProcessModel for process data, List for data storage, ProjectData for project-specific information
TeamEffortUtilization¶
Summary: Retrieve and validate project data, calculate and aggregate team effort by actor and time, then return JSON results.
JsonResult DashboardController.TeamEffortUtilization(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamEffortUtilization
Cross-layer call chain - DashboardController.TeamEffortUtilization → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TeamEffortUtilization → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.TeamEffortUtilization → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_TeamEffortUtilization["DashboardController.TeamEffortUtilization"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TeamEffortUtilization --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
TeamEffortUtilization(Andromeda.Web\Views\Dashboard\TeamEffortUtilization.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and validate project data - then return JSON results. - Calculate hourly effort per actor and aggregate by day and hour - Return aggregated data as JSON response - Validate project data from session against project ID
Error Flows - Summary: Handle null or mismatched project data by returning null JSON response. - Return null JSON if project data is null or project ID mismatches
Security Issues - Summary: No security issues identified in TeamEffortUtilization method.
Performance Issues - Summary: Manage session and optimize database calls and loops to prevent performance degradation. - Improper session management causing performance issues, Multiple rapid database calls (GetActors, GetSchedData), Large 'teamMinFTE' iteration causing slow loops, String.Split(',') on large capacity distributions impacting performance
Maintainability Issues - Summary: Replace magic strings and numbers, improve variable names, and avoid anonymous types for clarity. - Magic number 6 in grouping logic instead of named constant
UX Impact Notes - Summary: Empty or null JSON responses degrade user experience by showing no data. - Empty or null JSON responses, No data displayed to user
Test Case Ideas - Summary: Validate method behavior with varied session data - Session with and without project data, Mismatched ProjectID in session, Empty actor list, Actors without scheduling data, Actors with scheduling data and varied effort values, 'actorMinFTE' population for different 'teamMinFTE' inputs, Empty capacity distribution, Large capacity distribution, JSON response correctness when data is available
Dependencies & Called Services - Summary: Utilizes core data structures and project-specific models for service coordination. - Dictionary data structure, Enumerable collections, Gantt chart representation, IActorModel interface, Int32 data type, ProjectData model, String data type
InfraModes¶
Summary: No key flows are defined for InfraModes.
JsonResult DashboardController.InfraModes(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/InfraModes
Cross-layer call chain - DashboardController.InfraModes → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
DashboardController_InfraModes["DashboardController.InfraModes"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_InfraModes --> Andromeda_Core_Entities_ProjectData_GetActivities
Detailed Analysis
Key Flows - Summary: No key flows are defined for InfraModes.
Error Flows - Summary: Handle null values to prevent NullReferenceExceptions in ProjID and Session access. - NullReferenceException risk from unchecked nullable ProjID.Value
Security Issues - Summary: No security issues identified in InfraModes method.
Performance Issues - Summary: Optimize repeated data access and LINQ operations to improve performance on large collections. - Repeated access to Session["ProjectData"], Use of ToList() loading large data into memory, Unoptimized LINQ Where and Select on large collections, Use of All with lambda modifying external list, Multiple counts on transfer collection with lambda
Maintainability Issues - and unclear logic. - Confusing variable names 'ProjId' and 'ProjID', Use constants instead of magic strings for session keys, Incomplete and truncated code causing compilation errors, Anonymous types reduce code clarity and maintainability, Unclear conditional statements reduce code readability, Use of ToUpper() without error handling or culture specification, Undefined variable 'emailCount' causes compilation errors, Incomplete or unused variable 'FaxC'
Test Case Ideas - Summary: Verify data retrieval, processing, and correct output transformations in InfraModes. - Check HRModel.getListOfA returns correct actor list - Validate ProjID assignment and session matching - Validate projectData.GetActivities returns expected activities - Validate manualCount and physicalCount calculations - Confirm LINQ query returns expected results
Dependencies & Called Services - Summary: Uses collections and interfaces for control, HR, process models, and project data management. - Enumerable collection, IControlModel interface, IHRModel interface, IProcessModel interface, List collection, ProjectData class, String type
InfraCostComponents¶
Summary: Retrieve infrastructure details and locations from session when ProjID matches project data.
JsonResult DashboardController.InfraCostComponents(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/InfraCostComponents
Cross-layer call chain - DashboardController.InfraCostComponents → Andromeda.Core.Entities.ProjectData.GetInfraDetails - DashboardController.InfraCostComponents → Andromeda.Core.Entities.ProjectData.GetOfficeList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_ProjectData_GetInfraDetails["Andromeda.Core.Entities.ProjectData.GetInfraDetails"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
DashboardController_InfraCostComponents["DashboardController.InfraCostComponents"]
DashboardController_InfraCostComponents --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_InfraCostComponents --> Andromeda_Core_Entities_ProjectData_GetOfficeList
View Metadata
- View:
InfraCostComponents(Andromeda.Web\Views\Dashboard\InfraCostComponents.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve infrastructure details and locations from session when ProjID matches project data. - ProjID provided, Session contains matching project data, Retrieve infrastructure details, Retrieve locations from session project data
Error Flows - Summary: Handle null ProjID to prevent exceptions and ensure code completeness for reliable compilation. - Null reference exception risk from unchecked ProjID
Security Issues - Summary: No security issues identified in InfraCostComponents.
Performance Issues - Summary: Sequential data fetching and multiple LINQ operations degrade performance. - Sequential execution of GetInfraData and LoadOffices, Multiple LINQ operations causing slow query execution, Multiple ToList() calls causing repeated data enumeration
Maintainability Issues - Summary: Method mixes unrelated tasks and uses complex code patterns, reducing maintainability and flexibility. - Multiple unrelated tasks in one method, Incomplete or corrupted code segments, Use of anonymous types in LINQ reduces clarity, Long conditional chains reduce readability, Tight coupling with MyInfraModel class
UX Impact Notes - Summary: Caching improves response times; JSON responses require proper client handling. - Output caching improves response times for repeated ProjID requests, JSON response requires proper client-side handling for good UX
Test Case Ideas - Summary: Verify correct data retrieval, filtering, aggregation, caching, and error-free execution. - Correct data return for valid ProjID with matching session project - Filtering of cost components based on location inclusion settings
Dependencies & Called Services - Summary: Uses core libraries and project-specific models for infrastructure cost calculations. - Enumerable for collection operations, IInfraModel interface for infrastructure modeling, Math for calculations, ProjectData for project-specific data, String for text manipulation
EnterpriseClusters¶
Summary: Retrieve project data when ProjID matches session data and filter infrastructure details by location and category.
JsonResult DashboardController.EnterpriseClusters(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/EnterpriseClusters
Cross-layer call chain - DashboardController.EnterpriseClusters → Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow - DashboardController.EnterpriseClusters → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.EnterpriseClusters → Andromeda.Core.Entities.ProjectData.GetTransferModes - DashboardController.EnterpriseClusters → Andromeda.Core.Entities.ProjectData.GetInfraDetails - DashboardController.EnterpriseClusters → Andromeda.Core.Entities.ProjectData.GetOfficeList - Andromeda.Core.Entities.ProjectData.GetTransferModes → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow["Andromeda.Core.Entities.ProjectData.GetActivitiesActorArrow"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetInfraDetails["Andromeda.Core.Entities.ProjectData.GetInfraDetails"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
Andromeda_Core_Entities_ProjectData_GetTransferModes["Andromeda.Core.Entities.ProjectData.GetTransferModes"]
DashboardController_EnterpriseClusters["DashboardController.EnterpriseClusters"]
Andromeda_Core_Entities_ProjectData_GetTransferModes --> Andromeda_Core_DataManager_GetDataList
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetActivitiesActorArrow
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_EnterpriseClusters --> Andromeda_Core_Entities_ProjectData_GetTransferModes
Detailed Analysis
Key Flows - Summary: Retrieve project data when ProjID matches session data and filter infrastructure details by location and category. - Retrieve project-specific data via projectData methods, Filter infrastructure details by location flags, Filter infrastructure details by category IDs - Validate ProjID against session projectData
Error Flows - Summary: Handle null references and fix incomplete code to prevent runtime and compilation errors. - Null reference risk accessing ProjID.Value without null check
Security Issues - Summary: No security issues identified in EnterpriseClusters method.
Performance Issues - Summary: Excessive database calls and inefficient LINQ usage degrade performance and increase memory use. - Resource-intensive multiple LINQ queries on large datasets - ToList() in grouping loads entire datasets into memory
Maintainability Issues - Summary: Uninitialized variables, inconsistent naming, magic values, and complex code reduce maintainability. - Uninitialized variables causing confusion and errors, Magic numbers and strings reducing code clarity, Inconsistent variable naming harming readability, Malformed and incomplete code segments obstructing understanding, Tight coupling with multiple models increasing complexity, Complex anonymous types and dense LINQ queries reducing readability, Long conditional statements with repeated Equals calls, Lambda expressions without explicit typing decreasing clarity
UX Impact Notes - Summary: Returned JSON data directly affects the user interface and caching risks stale display. - Returned JSON data impacts user interface
Test Case Ideas - and performance with large datasets. - Caching behavior with various CacheProfile settings - Correct variable assignment from projectData methods - Performance testing of LINQ operations on large datasets
Dependencies & Called Services - Summary: Uses collections and interfaces for control, infrastructure, risk models, and project data management. - Enumerable collection, IControlModel interface, IInfraModel interface, IRiskModel interface, List collection, ProjectData class, String type
InfraLocations¶
Summary: Load offices and actors when ProjID matches projectData in session.
JsonResult DashboardController.InfraLocations(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/InfraLocations
Cross-layer call chain - DashboardController.InfraLocations → Andromeda.Core.Entities.ProjectData.GetOfficeList - DashboardController.InfraLocations → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_InfraLocations["DashboardController.InfraLocations"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_InfraLocations --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_InfraLocations --> Andromeda_Core_Entities_ProjectData_GetOfficeList
View Metadata
- View:
InfraLocations(Andromeda.Web\Views\Dashboard\InfraLocations.cshtml)
Detailed Analysis
Key Flows - Summary: Load offices and actors when ProjID matches projectData in session. - Load offices from projectData, Load actors from projectData - ProjID provided, projectData matches ProjID
Error Flows - Summary: Handle null checks and exceptions to prevent runtime errors in InfraLocations. - Null reference exception from accessing ProjID.Value without null check
Security Issues - Summary: No security issues identified in InfraLocations method.
Performance Issues - Summary: Session storage and LINQ operations on large datasets degrade performance. - OrderBy sorting on large office datasets impacts performance
Maintainability Issues - Summary: Fix incomplete code and improve error handling and type clarity for maintainability. - Incomplete or malformed if statement in projectData check
UX Impact Notes - Summary: InfraLocations method directly affects dashboard display of infrastructure locations and actors. - Display infrastructure locations and actors on dashboard, Risk of incomplete or incorrect data impacting user experience
Test Case Ideas - Summary: Validate InfraLocations method for data accuracy - Handle non-matching projectData ProjectID - Handle large projectData in session for performance - Handle empty collections gracefully - Load offices from projectData when condition met, Load actors from projectData when condition met, Load offices from MyInfraModel when projectData condition not met - Return expected JSON data structure - Validate projectData matches ProjID
Dependencies & Called Services - Summary: InfraLocations depends on date-time handling, data enumeration, control and infrastructure models, and project data. - IControlModel for control logic - IInfraModel for infrastructure logic
InterfaceRequirements¶
Summary: Retrieve project data from session matching project ID and ensure unique nodes in collection.
JsonResult DashboardController.InterfaceRequirements(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/InterfaceRequirements
Cross-layer call chain - DashboardController.InterfaceRequirements → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.InterfaceRequirements → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
DashboardController_InterfaceRequirements["DashboardController.InterfaceRequirements"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_InterfaceRequirements --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_InterfaceRequirements --> Andromeda_Core_Entities_ProjectData_GetArrows
View Metadata
- View:
InterfaceRequirements(Andromeda.Web\Views\Dashboard\InterfaceRequirements.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project data from session matching project ID and ensure unique nodes in collection. - Retrieve project data from session matching project ID, Extract data from projectData object, Ensure node uniqueness in nodes collection
Error Flows - Summary: Fix null reference exceptions and syntax errors to ensure stable code execution. - Null reference exceptions from unchecked Session['ProjectData'] access
Security Issues - Summary: Unclear code with possible typo risks unexpected behavior and security flaws. - Unclear intent in 'oject(ProjID.Value)', Possible typo causing errors, Risk of unexpected behavior leading to security issues
Performance Issues - Summary: Optimize data storage and reduce repeated expensive operations to improve performance. - Repeated LINQ 'Where' and 'Select' on large datasets - Repeated 'Contains' checks within loops on Nodes collection
Maintainability Issues - Summary: The method mixes responsibilities, uses unclear naming, and contains incomplete, tightly coupled, and unclear code. - Violates single responsibility principle by mixing data retrieval and initialization, Incomplete statements and missing parentheses hinder maintenance, Tight coupling with ActorModel and ControlModel increases complexity, Non-descriptive variable names reduce readability, Use of magic strings instead of named constants lowers maintainability, Dynamic objects complicate understanding and maintenance, Anonymous types obscure data grouping and selection, Malformed code snippets and typos cause confusion and errors, Use of 'var' without explicit types reduces code clarity
UX Impact Notes - Summary: Ensure JSON formatting and response speed to maintain good user experience. - Proper JSON formatting, Fast response times, Avoid frontend performance issues
Test Case Ideas - Summary: Test data matching, initialization, filtering, node management, and performance under various conditions. - Property setting in various scenarios - Handling large datasets without performance degradation
Dependencies & Called Services - Summary: Uses collections and interfaces for actor, control models, project data, and strings. - Enumerable collection, IActorModel interface, IControlModel interface, List collection, ProjectData type, String type
TotalCost¶
Summary: TotalCost calculates project costs by retrieving data from session or models, filtering relevant actors, and converting costs to USD using exchange rates.
JsonResult DashboardController.TotalCost(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TotalCost
Cross-layer call chain - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetTalentPools - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficeList - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraDetails - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficePremises - DashboardController.TotalCost → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - DashboardController.TotalCost → Insorce.Helpers.Helpers.CurrencyConverter - DashboardController.TotalCost → Andromeda.Core.Entities.Activity.Clone - DashboardController.TotalCost → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.TotalCost → Andromeda.Core.Services.Algorithms.Delooper.deloop - DashboardController.TotalCost → Andromeda.Core.Entities.Activity.TotalEffort - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Insorce.Helpers.Helpers.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetConnectivityDetails["Andromeda.Core.Entities.ProjectData.GetConnectivityDetails"]
Andromeda_Core_Entities_ProjectData_GetInfraDetails["Andromeda.Core.Entities.ProjectData.GetInfraDetails"]
Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails["Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
Andromeda_Core_Entities_ProjectData_GetOfficePremises["Andromeda.Core.Entities.ProjectData.GetOfficePremises"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_TotalCost["DashboardController.TotalCost"]
Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
DashboardController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
DashboardController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
Insorce_Helpers_Helpers_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
View Metadata
- View:
TotalCost(Andromeda.Web\Views\Dashboard\TotalCost.cshtml)
Detailed Analysis
Key Flows - Summary: TotalCost calculates project costs by retrieving data from session or models, filtering relevant actors, and converting costs to USD using exchange rates. - Calculate infrastructure and total costs - Retrieve project data from session or fallback to ActorModel and HRModel, Filter out system and inactive actors, Obtain foreign exchange rates, Convert individual action costs to USD using exchange rates
Error Flows - Summary: Handle null project data and complete code to prevent runtime and compilation errors. - Null reference exception from unchecked null project data
Security Issues - Summary: Incomplete code segments risk unexpected behavior and potential security flaws. - Incomplete code segments, Risk of unexpected behavior, Potential security flaws
Performance Issues - Summary: Optimize data caching, storage, filtering, and calculations to improve performance and accuracy. - Improper caching causes stale data, Session storage inefficient for large project data, LINQ filtering on large actor lists degrades performance and increases memory use, First() method slow on large FX rates lists, Math.Round causes precision loss in cost calculations
Maintainability Issues - Summary: Method name and unclear properties reduce clarity; magic values and tight coupling hinder maintainability. - Method name lacks caching indication, Incomplete code reduces clarity, Use of magic strings and numbers, Tight coupling with projectData and MyInfraModel, Unclear property names like 'IsSy'
Test Case Ideas - Summary: Verify TotalCost method correctness, performance, and data handling under varied inputs. - Return expected results with valid inputs - Retrieve catchment lists and talent pools - Performance with large datasets - Calculate infrastructure cost with varied data, Calculate total cost with different exchange rates and currencies - Handle empty actor lists - Handle empty action lists during cost calculation
Dependencies & Called Services - Summary: Utilizes data models, helper utilities, and standard libraries for cost calculation. - Data models: IActorModel, IHRModel, IInfraModel, ProjectData, Helper utilities: Enumerable, Helpers, Standard libraries: Convert, Math, String
CycleTime¶
Summary: CycleTime retrieves project optimization history, calculates costs and cycle times, and returns serialized results.
JsonResult DashboardController.CycleTime(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/CycleTime
Cross-layer call chain - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetTalentPools - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetOfficeList - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetInfraDetails - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetOfficePremises - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.CycleTime → Insorce.Helpers.Helpers.DaysConverter - DashboardController.CycleTime → Insorce.Helpers.Helpers.CurrencyConverter - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk - DashboardController.CycleTime → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.CycleTime → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.CycleTime → Andromeda.Core.Entities.Arrow.Clone - DashboardController.CycleTime → Andromeda.Core.Services.Algorithms.Delooper.deloop - DashboardController.CycleTime → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - DashboardController.CycleTime → Insorce.Helpers.Helpers.GetIndividualPath - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Insorce.Helpers.Helpers.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Insorce.Helpers.Helpers.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Insorce.Helpers.Helpers.GetIndividualPath → Andromeda.Core.Entities.Arrow.Clone - Insorce.Helpers.Helpers.GetIndividualPath → Andromeda.Core.Entities.EdgeInfo.Clone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_EdgeInfo_Clone["Andromeda.Core.Entities.EdgeInfo.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
Andromeda_Core_Entities_ProjectData_GetConnectivityDetails["Andromeda.Core.Entities.ProjectData.GetConnectivityDetails"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetInfraDetails["Andromeda.Core.Entities.ProjectData.GetInfraDetails"]
Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails["Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails"]
Andromeda_Core_Entities_ProjectData_GetOfficeList["Andromeda.Core.Entities.ProjectData.GetOfficeList"]
Andromeda_Core_Entities_ProjectData_GetOfficePremises["Andromeda.Core.Entities.ProjectData.GetOfficePremises"]
Andromeda_Core_Entities_ProjectData_GetTalentPools["Andromeda.Core.Entities.ProjectData.GetTalentPools"]
Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows["Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_CycleTime["DashboardController.CycleTime"]
Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_CycleTime --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficeList
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetTalentPools
DashboardController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
DashboardController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_CycleTime --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_CycleTime --> Insorce_Helpers_Helpers_CurrencyConverter
DashboardController_CycleTime --> Insorce_Helpers_Helpers_DaysConverter
DashboardController_CycleTime --> Insorce_Helpers_Helpers_GetIndividualPath
Insorce_Helpers_Helpers_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
Insorce_Helpers_Helpers_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_Arrow_Clone
Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_EdgeInfo_Clone
View Metadata
- View:
CycleTime(Andromeda.Web\Views\Dashboard\CycleTime.cshtml)
Detailed Analysis
Key Flows - and returns serialized results. - Calculate infrastructure and HR costs - Group and filter catchment data
Error Flows - Summary: Handle null references - Null reference exceptions from missing ProjID or projectData, Empty or invalid optimizeHistory causing missing milestone data, JSON deserialization errors from malformed milestone breakup data, Division by zero error if sinkVolumes equals zero
Security Issues - Summary: Deserializing milestone breakup JSON without validation risks JSON deserialization attacks. - JSON deserialization vulnerability, Lack of input validation on milestone breakup JSON
Performance Issues - Summary: Optimize data handling and serialization to reduce memory use and improve speed. - Output caching reduces database load but risks stale data, Multiple iterations over optimizeHistory cause performance overhead, JavaScriptSerializer is slower than alternative JSON serializers, ToList() and Sum() cause extra memory allocation and multiple iterations
Maintainability Issues - Summary: Code uses unexplained magic values, tight coupling, unclear variable declarations, and leftover commented code. - Unexplained magic numbers in conditions and rounding, Unexplained magic strings instead of constants, Tight coupling to specific serializer limits flexibility, Multiple variables declared without initialization, Commented-out and incomplete code reduces clarity
UX Impact Notes - Summary: Output caching risks stale data, affecting UI freshness and milestone display accuracy. - Returned JSON affects UI milestone and project outcome display
Test Case Ideas - Summary: Verify correct data retrieval, calculation accuracy, serialization, caching, and error handling in CycleTime. - Correct optimize history retrieval by project ID, Accurate serialization of milestone cycle time and project outcome JSON, Retrieve and populate project data from session matching ProjID, Correct calculations of infrastructure cost, HR cost, and cycle time, Prevent division by zero when sinkVolumes is zero, Ensure output caching varies by ProjID, Replace or manage magic numbers and strings with constants - Handle empty and simulation-only optimizeHistory collections
Dependencies & Called Services - Summary: Utilizes core libraries and multiple interface models for data processing and serialization. - Core libraries: Convert, Enumerable, Math, String, Interface models: IActorModel, IControlModel, IHRModel, IInfraModel, IProcessModel, Helpers utilities, JavaScriptSerializer for data serialization, ProjectData for project-specific data handling
ClusterVSM¶
Summary: ClusterVSM retrieves and processes project data from session, calculates cluster metrics, and prepares JSON output.
JsonResult DashboardController.ClusterVSM(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ClusterVSM
Cross-layer call chain - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetSchedData - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetDelooperObj - DashboardController.ClusterVSM → Andromeda.Core.Entities.ProjectData.GetAllLoops - DashboardController.ClusterVSM → Andromeda.Core.Entities.Arrow.Clone - DashboardController.ClusterVSM → Andromeda.Core.Entities.Activity.Effort - DashboardController.ClusterVSM → Andromeda.Core.Entities.Activity.IterationEffort - DashboardController.ClusterVSM → Andromeda.Core.Entities.Activity.ReworkEffort - DashboardController.ClusterVSM → Andromeda.Core.Entities.Actor.GetLocation - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_IterationEffort["Andromeda.Core.Entities.Activity.IterationEffort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetAllLoops["Andromeda.Core.Entities.ProjectData.GetAllLoops"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Entities_ProjectData_GetDelooperObj["Andromeda.Core.Entities.ProjectData.GetDelooperObj"]
Andromeda_Core_Entities_ProjectData_GetSchedData["Andromeda.Core.Entities.ProjectData.GetSchedData"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_ClusterVSM["DashboardController.ClusterVSM"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_Effort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_ClusterVSM --> Andromeda_Core_Entities_Arrow_Clone
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetAllLoops
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
DashboardController_ClusterVSM --> Andromeda_Core_Entities_ProjectData_GetSchedData
View Metadata
- View:
ClusterVSM(Andromeda.Web\Views\Dashboard\ClusterVSM.cshtml)
Detailed Analysis
Key Flows - Summary: ClusterVSM retrieves and processes project data from session, calculates cluster metrics, and prepares JSON output. - Calculate cluster metrics - Process activities, schedule analysis, actors, arrows, product factors - Retrieve project data from session, Prepare final data object for JSON serialization
Error Flows - Summary: Handle null 'ProjectData' and prevent null reference exceptions in LINQ queries. - Null check for 'ProjectData' session variable - Validate collections before accessing objective activity risks
Security Issues - Summary: No security issues identified in ClusterVSM method.
Performance Issues - Summary: Complex LINQ queries and costly property accesses degrade performance on large datasets. - Complex nested LINQ queries with grouping, joining, filtering, Costly property accesses without clear usage, Use of Count, IndexOf, FirstOrDefault on large collections within LINQ
Maintainability Issues - Summary: The method's complexity and tight coupling reduce readability and modularity. - Use of magic strings and unclear assignments reduce code clarity
UX Impact Notes - Summary: Method indirectly degrades UX by increasing response times due to performance issues. - No direct user interface impact, Performance issues from multiple database calls, Complex data processing increases response times
Test Case Ideas - Summary: Validate data accuracy - Correct data return for valid ProjID - Performance with large project datasets - Robustness against incomplete or unclear assignments
Dependencies & Called Services - Summary: Uses core data types, collections, time handling, math, and domain-specific models. - Core data types: Int32, String, TimeSpan, Collections: List, Enumerable, Mathematical operations: Math, Domain models: Activity, Actor, Arrow, ProjectData, Interfaces: IActorModel, IControlModel, IProcessModel
UpdateProjectsData¶
Summary: UpdateProjectsData retrieves and updates project data, clears cache, performs an action, and returns JSON.
JsonResult DashboardController.UpdateProjectsData(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/UpdateProjectsData
Detailed Analysis
Key Flows - Summary: UpdateProjectsData retrieves and updates project data - and returns JSON. - Return resulting JSON data - Update root variable
Error Flows - Summary: Handle exceptions when no matching project is found during iteration. - Use of First method without safeguards, Potential exceptions if no matching project exists
Performance Issues - Summary: Inefficient caching and repeated collection scans degrade UpdateProjectsData performance. - Excessive cache entries from VaryByParam set to 'ProjID' with many unique values - Unfiltered First method causing slow queries on large datasets
Maintainability Issues - Summary: Rename method for clarity and fix typos and incomplete code to improve maintainability. - Method name UpdateProjectsData misleads about returning data - Assignment operator used in condition causes logical errors
Test Case Ideas - conditional logic - and method calls in UpdateProjectsData. - Return expected data for given ProjID - Correct assignment of root from ProjID.Value - Accurate update of tRoot variable - Correct update of LatestRevision when matching project found - Conditional logic with LatestRevision true and false - Proper update of root variable to LatestRevision
Dependencies & Called Services - and IProjectModel services for project data updates. - Dashboard service, Enumerable utilities, IProjectModel interface
GenerateAndSaveJSONProjectData¶
Summary: Generate and save detailed project data by retrieving, filtering, and aggregating metrics across multiple models and activities.
string DashboardController.GenerateAndSaveJSONProjectData(int root, IList<Project> Projects, List<Project> projectIds)
Routing
- URL:
/Dashboard/GenerateAndSaveJSONProjectData
Cross-layer call chain - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Entities.Activity.Clone - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Entities.Activity.Effort - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Entities.Activity.IterationEffort - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Entities.Activity.ReworkEffort - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.GenerateAndSaveJSONProjectData → Insorce.Helpers.Helpers.DaysConverter - DashboardController.GenerateAndSaveJSONProjectData → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Insorce.Helpers.Helpers.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_IterationEffort["Andromeda.Core.Entities.Activity.IterationEffort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GenerateAndSaveJSONProjectData["DashboardController.GenerateAndSaveJSONProjectData"]
Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_Clone
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GenerateAndSaveJSONProjectData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GenerateAndSaveJSONProjectData --> Insorce_Helpers_Helpers_DaysConverter
Insorce_Helpers_Helpers_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
Detailed Analysis
Key Flows - Summary: Generate and save detailed project data by retrieving, filtering, and aggregating metrics across multiple models and activities. - Calculate financial metrics using actor salaries and FX rates, Calculate rework volumes, undesired outcomes, adequacy and effectiveness benefits - Fetch project data from Actor, ProcessMap, Risk, Control, and Infra models - Process objectives, activities, and risks to calculate mitigation counts and coverage - Retrieve and filter child projects by status and ID, Aggregate activity IDs from automation paths and compute benefit efforts and cycle times, Retrieve and filter activity properties and automated systems to compute effort percentages and team sizes, Construct detailed project data object
Error Flows - Summary: Handle null references and empty collections to prevent runtime exceptions. - Null reference exceptions from unchecked property access - InvalidOperationException from First() without collection emptiness checks - Unexpected null returns leading to missing data
Security Issues - Summary: No security issues found in the analyzed code sections.
Performance Issues - Summary: Optimize data access and reduce redundant operations to improve method performance. - High memory usage from ToList() on large collections, Multiple database queries in one method degrade performance, Unnecessary string conversions inside loops and LINQ queries, Inefficient data access from LINQ methods without caching or indexing, Repeated iterations over FX rates using First inside loops, Performance degradation from complex nested LINQ and multiple groupings
Maintainability Issues - and complex logic that hinder maintainability. - Use of anonymous types reducing code clarity, Tight coupling with multiple models and dependencies, Non-descriptive variable names reducing readability, Complex nested conditions and LINQ queries, Incomplete and truncated code segments, Use of unexplained magic numbers, Unused variables indicating dead code, Long, complex lines reducing readability
UX Impact Notes - Summary: Returns detailed project metrics but null returns cause inconsistent user data display. - Null returns cause missing user data
Test Case Ideas - Summary: Verify project data calculations, filtering, aggregation, and financial metrics accuracy. - Calculate mitigation counts, total records, and coverage metrics, Calculate rework volumes, undesired outcomes, and benefit effectiveness - Retrieve and filter child projects with correct ordering, Perform financial calculations with varying FX rates and salaries, Aggregate activity IDs and compute benefit efforts and volumes, Filter and process activity properties for effort percentages and team sizes, Replace magic numbers with constants to prevent unexpected behavior
Dependencies & Called Services - Summary: Uses data models, collections, serialization, and utility classes for JSON project data generation. - Data models: IActorModel, IControlModel, IFinalPlanModel, IInfraModel, IProcessModel, IRiskModel, Collections and LINQ: List, Enumerable, LinqExtensions, Serialization: JavaScriptSerializer, Utility classes: Math, String, Convert, ProcessExtensions, Helpers, UI components: Activity, Dashboard
GetProjectsData¶
Summary: Retrieve the latest project revision and generate JSON data for response if not already present.
JsonResult DashboardController.GetProjectsData(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetProjectsData
Detailed Analysis
Key Flows - Summary: Retrieve the latest project revision and generate JSON data for response if not already present. - Check for latest project revision existence and return early if found - Generate and save JSON project data from current root and project list, Prepare JSON data for response
Error Flows - Summary: Handle exceptions from calling First() on empty collections when retrieving latest revisions. - Exception from First() on empty collection, Failure retrieving latest revision
Security Issues - Summary: Using ToString() on user ID risks exposing sensitive data without validation. - Use of ToString() on user ID without validation, Potential exposure of sensitive information
Performance Issues - Summary: GetProjectsData suffers from inefficient data retrieval and repeated collection scans. - Large data loads from GetAllProjects() degrade performance, Repeated 'Any' method calls inside loops cause redundant project collection scans, GenerateAndSaveJSONProjectData call may be resource-intensive
Maintainability Issues - Summary: Improve code clarity by fixing naming, removing magic numbers, and clarifying unclear code. - Replace magic numbers (status codes 8 and 3) with named constants, Correct typo in variable name 'curentRoot' to 'currentRoot', Rename unclear property 'La' to a descriptive name, Clarify and complete incomplete code snippets, Rename variable 'Data' to a more descriptive identifier
Test Case Ideas - revision assignment - Early return on matching project - Correct LatestRevision assignment for matching ProjectId - Return on project matching LatestRevision - GenerateAndSaveJSONProjectData returns expected data
Dependencies & Called Services - Summary: Uses dashboard, date-time utilities, enumerable collections, and project models. - Dashboard service, DateTime utilities, Enumerable collections, Project model interface
GetProjectTime¶
Summary: GetProjectTime retrieves hired personnel time by ProjectID and returns the total hours.
double DashboardController.GetProjectTime(int ProjectID)
Routing
- URL:
/Dashboard/GetProjectTime
Detailed Analysis
Key Flows - Summary: GetProjectTime retrieves hired personnel time by ProjectID and returns the total hours. - Return total time
Error Flows - Summary: Return zero total project time if no hired personnel data is found. - Empty dataset from HRModel.GetSummaryInfo - Sum operation returns zero as total project time
Performance Issues - Summary: In-memory filtering and summing cause performance issues with large datasets. - In-memory filtering of large datasets - In-memory summing of large datasets
Maintainability Issues - Summary: The method returns an undefined variable causing a compilation error. - Returns undefined variable 'tim' causing compilation error
Test Case Ideas - Summary: Verify GetProjectTime handles valid - Valid ProjectID with hired personnel returns correct sum - Valid ProjectID with empty dataset returns zero - Valid ProjectID with no hired personnel returns zero
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IHRModel for data modeling. - Enumerable for collection processing, IHRModel for data representation
GetAllChildProjects¶
Summary: GetAllChildProjects recursively adds child projects not in CycleProjects by filtering allProjects on LatestRevision.
void DashboardController.GetAllChildProjects(int rootId, IList<Project> allProjects, List<Project> CycleProjects)
Routing
- URL:
/Dashboard/GetAllChildProjects
Detailed Analysis
Key Flows - Summary: GetAllChildProjects recursively adds child projects not in CycleProjects by filtering allProjects on LatestRevision. - Check if child ProjectId exists in CycleProjects - Filter allProjects for children with LatestRevision equal to rootId, Add child to CycleProjects if absent, Recursively call GetAllChildProjects with child's ProjectId
Performance Issues - Summary: Inefficient loops and lack of cycle detection degrade GetAllChildProjects performance. - Foreach loop with Where clause on large allProjects collection, Use of Any method inside loop causing multiple iterations, No cycle detection causing potential infinite recursion
Maintainability Issues - Summary: Improve variable naming and add comments to enhance code clarity and maintainability. - Unclear variable names reduce code clarity, Lack of comments decreases readability, Insufficient context hinders understanding of method structure
Test Case Ideas - Summary: Verify GetAllChildProjects correctly retrieves child projects across various project hierarchies and empty inputs. - Handle empty allProjects list with valid rootId - Handle empty CycleProjects collection - Validate 'Any' method detects child projects in CycleProjects - Verify recursive retrieval in simple project hierarchy
Dependencies & Called Services - Summary: Uses Dashboard service and collection types Enumerable and List. - Dashboard service dependency, Enumerable collection usage, List collection usage
ProjectChart¶
Summary: Filters projects by type to return views with related project IDs and parent objects.
ActionResult DashboardController.ProjectChart(string type)
Routing
- HTTP:
GET - URL:
/Dashboard/ProjectChart
View Metadata
- View:
ProjectChart(Andromeda.Web\Views\Dashboard\ProjectChart.cshtml) - Model:
IEnumerable<int>
Detailed Analysis
Key Flows - Summary: Filters projects by type to return views with related project IDs and parent objects. - Filter projects by LatestRevision for type 'Child' and return view with project IDs - Filter projects by ProjectId for other types and return view with parent object
Error Flows - Summary: Null reference and runtime errors occur due to incomplete and incorrect code. - Null reference exception from null Model in GetReletiveProjects, Runtime errors and compilation failures from incomplete code and missing method calls
Security Issues - Summary: No security issues identified in ProjectChart.
Performance Issues - Summary: LINQ's Where and Select on large datasets degrade performance. - LINQ Select on large datasets
Maintainability Issues - Summary: Improve method naming, fix syntax errors, and use descriptive variable names for clarity. - Unclear method name 'ProjectChart', Incomplete and incorrect code segments, Non-descriptive variable names
UX Impact Notes - Summary: Project type filtering changes displayed data, directly affecting user experience. - Project type filtering affects displayed data, Incomplete code limits full UX impact assessment
Test Case Ideas - Summary: Verify ProjectChart handles various 'type' values - and returns correct views. - Return correct view with appropriate data for all 'type' values - Handle different 'type' parameter values including 'Child' and others - Handle empty 'type' parameter - Handle different and empty ctIdList values
Dependencies & Called Services - Summary: Uses collections and project model interfaces for service management. - Enumerable for collection operations, IProjectModel interface for project data, List for storing items, String for text data
SaveProjectJson¶
Summary: Update project IDs by adding missing ones and removing obsolete ones based on current selections.
JsonResult DashboardController.SaveProjectJson()
Routing
- HTTP:
POST - URL:
/Dashboard/SaveProjectJson
Detailed Analysis
Key Flows - Summary: Update project IDs by adding missing ones and removing obsolete ones based on current selections. - Add project IDs missing from selProjIds
Error Flows - Summary: Handle JSON deserialization failures and null references to prevent runtime exceptions. - Incomplete code causing unhandled error cases
Security Issues - Summary: Direct JSON decoding and unsanitized inputs risk deserialization, SQL injection, and XSS vulnerabilities. - JSON deserialization vulnerability from unvalidated System.Web.Helpers.Json.Decode on request data - SQL injection and XSS risks from unsanitized projectData and selProjIds in UpdateComparisionFilter
Performance Issues - Summary: Optimize data access and collection operations to improve SaveProjectJson performance. - Repeated Request.Form access degrades performance, Contains method on large collections causes O(n) complexity, String concatenation with Aggregate inefficient for large JSON arrays, Any() method may fully iterate large collections
Maintainability Issues - Summary: The method uses unclear naming, magic strings, incomplete code, and lacks documentation. - Use of magic strings reduces readability and maintainability, Incomplete and malformed code snippets with typos hinder understanding, Non-descriptive variable names decrease code clarity, Unused variables and incomplete conditionals cause confusion, Lack of documentation for lambda expressions and methods reduces clarity
UX Impact Notes - Summary: Updated comparison filter affects project comparison views. - Impact on project comparison views - Updated comparison filter
Test Case Ideas - selection updates - Handle large datasets to assess performance of Contains - and empty strings for rootId assignment - Call UpdateComparisionFilter with correct JSON array for selected IDs or empty array - Ensure method returns control to caller as expected
Dependencies & Called Services - Summary: Uses conversion and collection services to process project model data. - Enumerable conversion, IProjectModel interface, Integer processing, List collection, String handling
SaveSelectedTeams¶
Summary: Retrieve selected teams and widget ID from POST data and return a JsonResult to the client.
JsonResult DashboardController.SaveSelectedTeams()
Routing
- HTTP:
POST - URL:
/Dashboard/SaveSelectedTeams
Detailed Analysis
Key Flows - Summary: Retrieve selected teams and widget ID from POST data and return a JsonResult to the client. - Return JsonResult to client
Error Flows - Summary: Handle widget ID conversion errors during team selection saving. - Widget ID conversion to integer failure, FormatException on invalid widget ID
Security Issues - Summary: Ensure input parameters are sanitized to prevent SQL injection in SaveSelectedTeams. - Potential SQL injection from unsanitized input in InsertUpdateWidgetFilter
Performance Issues - Summary: No performance issues identified in SaveSelectedTeams method.
Maintainability Issues - Summary: The method contains an empty code block indicating missing implementation or a bug. - Empty code block, Potential missing implementation, Possible bug risk
UX Impact Notes - Summary: Returning JsonResult requires proper client-side handling to maintain user flow. - JsonResult return type
Test Case Ideas - Summary: Verify SaveSelectedTeams processes input correctly and returns expected JsonResult. - Handle valid input and call InsertUpdateWidgetFilter with correct parameters - Return expected JsonResult response
Dependencies & Called Services - Summary: Convert IProjectModel for processing selected teams. - Convert IProjectModel
DeltaAnalysis¶
Summary: Parse form data to initialize projects, retrieve and update parent-child mappings, create project data objects, and return the view.
ViewResult DashboardController.DeltaAnalysis(FormCollection collection)
Routing
- HTTP:
POST - URL:
/Dashboard/DeltaAnalysis
View Metadata
- View:
DeltaAnalysis(Andromeda.Web\Views\Dashboard\DeltaAnalysis.cshtml) - Model:
IList<Andromeda.Core.Entities.ProjectData>
Detailed Analysis
Key Flows - retrieve and update parent-child mappings - create project data objects - and return the view. - Create ProjectData objects from second project collection - Add project data to ProjectsComp collection and return view - Update mappings with current project ID and assign to ViewBag
Error Flows - Summary: Parsing user input without validation causes exceptions. - Direct parsing of user input without validation, Exceptions from invalid input during parsing
Security Issues - Summary: Direct parsing of user input risks runtime exceptions and injection attacks. - Injection vulnerabilities from unvalidated JSON decoding
Performance Issues - Summary: Inefficient data handling degrades performance on large project collections. - Use of ToList() on large datasets impacts performance
Maintainability Issues - Summary: Replace magic strings with constants and simplify complex, incomplete code for better maintainability. - Replace magic strings with constants, Reduce constructor parameter count in ProjectData, Fix incomplete or truncated code segments, Simplify long, complex method calls for clarity
Test Case Ideas - Summary: Validate data initialization - and ViewBag assignments in project mapping. - Return expected data from GetAllMappingDetailsForParentChildProj - Update MappingDetails with current project ID and assign to ViewBag
Dependencies & Called Services - Summary: Uses collections and process model interfaces for data handling and processing. - Enumerable for data enumeration, ICollection for collection management, IProcessModel for process abstraction, Int32 for integer operations, List for dynamic data storage
ImplementationAnalysis¶
Summary: Parse input, update project mappings, prepare project data, and return the view with data.
ViewResult DashboardController.ImplementationAnalysis(FormCollection collection)
Routing
- HTTP:
POST - URL:
/Dashboard/ImplementationAnalysis
View Metadata
- View:
ImplementationAnalysis(Andromeda.Web\Views\Dashboard\ImplementationAnalysis.cshtml) - Model:
IList<Andromeda.Core.Entities.ProjectData>
Detailed Analysis
Key Flows - update project mappings - and return the view with data. - Assign updated mappings to ViewBag property with typo - Iterate collections to create ProjectData instances - Return ViewResult with prepared project data - Update mapping details' CurrentProjId to base project ID
Error Flows - Summary: Lack of error handling causes unhandled exceptions during JSON parsing. - No error handling for JSON parsing or decoding, No validation around System.Web.Helpers.Json.Decode usage
Security Issues - Summary: Direct parsing of user input causes SQL injection and data tampering risks. - Unvalidated JSON decoding from user input
Performance Issues - Summary: Inefficient data handling and object creation degrade performance and increase memory use. - Lack of error handling in JSON decoding risks performance with malformed input, Excessive memory allocation from ToList() on large collections, High memory pressure from creating ProjectData objects inside loops, Incomplete or inefficient loop structure reduces iteration performance
Maintainability Issues - Summary: Tight coupling and poor naming reduce modularity and readability, risking bugs. - Tight coupling with specific models and helper classes reduces modularity, Typo in ViewBag property name causes confusion and bugs, Non-descriptive variable and collection names hinder readability
UX Impact Notes - Summary: Security and performance issues indirectly degrade user experience. - Security issues impact UX, Performance issues impact UX
Test Case Ideas - property updates - and return value correctness. - Assign correct ViewBag value and handle typos - Return expected ViewResult - Create ProjectData objects for different project types - Handle various input data including malformed JSON - Update CurrentProjId for each MappingDetails item
Dependencies & Called Services - Summary: Uses collections and process model interfaces for data handling and processing. - Enumerable for data querying, ICollection for collection abstraction, IProcessModel for process representation, Int32 for integer operations, List for dynamic data storage
ClusterDashboard¶
Summary: ClusterDashboard handles an HTTP GET request, retrieves customized views, and filters them using LINQ.
ViewResult DashboardController.ClusterDashboard()
Routing
- HTTP:
GET - URL:
/Dashboard/ClusterDashboard
View Metadata
- View:
ClusterDashboard(Andromeda.Web\Views\Dashboard\ClusterDashboard.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - Summary: ClusterDashboard handles an HTTP GET request - Call GetCustomizedViews to retrieve views, Filter and transform views with LINQ - Handle HTTP GET request
UX Impact Notes - Summary: Renders a view to the user, directly affecting user experience. - Returns ViewResult
Test Case Ideas - Summary: Verify ClusterDashboard returns ViewResult and applies LINQ operations correctly. - Return ViewResult on valid HTTP GET
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IProcessModel for process abstraction. - Enumerable for collection handling, IProcessModel for process abstraction
ClusterMaxDelay¶
Summary: Fetch project schedules and activities, group activities by cluster, compute each cluster's maximum delay, and return results as JSON.
JsonResult DashboardController.ClusterMaxDelay(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/ClusterMaxDelay
View Metadata
- View:
ClusterMaxDelay(Andromeda.Web\Views\Dashboard\ClusterMaxDelay.cshtml)
Detailed Analysis
Key Flows - and return results as JSON. - Calculate maximum delay per cluster - Return cluster delays as JSON response
Error Flows - Summary: Check for null project ID to prevent null reference exceptions. - Missing null check on project ID Value property
Security Issues - Summary: No security issues identified in ClusterMaxDelay method.
Performance Issues - Summary: ClusterMaxDelay suffers from inefficient data retrieval and caching issues. - Resource-intensive retrieval of all activities and schedule data for large projects, Multiple data iterations caused by combined LINQ Any() and Where() usage, OutputCache caching risks stale data without proper configuration
Maintainability Issues - Summary: Tight coupling and unclear code reduce maintainability and complicate changes. - Confusing conditional expressions for data assignment
UX Impact Notes - Summary: Caching delays data updates but JSON responses enable dynamic UI updates. - Caching delays data updates - JSON responses enable dynamic UI updates
Test Case Ideas - Summary: Verify correct cluster delay calculation, caching, and JSON response handling. - Correct cluster data and max delay for valid project ID, Graceful handling of empty schedule data, Accurate filtering and delay calculation with multiple activities, Delay defaults to zero when no matching activities, Effective caching without stale data, Proper JSON serialization and HTTP status code
Dependencies & Called Services - Summary: Uses core system types and interfaces for actor modeling and data manipulation. - Enumerable for collection operations, IActorModel interface for actor behavior, Int32 for integer data, Math for mathematical functions, String for text handling
TeamDashboard¶
Summary: Handles HTTP GET request, retrieves and processes customized views, then returns them for rendering.
ViewResult DashboardController.TeamDashboard()
Routing
- HTTP:
GET - URL:
/Dashboard/TeamDashboard
View Metadata
- View:
TeamDashboard(Andromeda.Web\Views\Dashboard\TeamDashboard.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - Summary: Handles HTTP GET request - then returns them for rendering. - Return processed views in ViewResult
UX Impact Notes - Summary: Renders customized team dashboard views to enhance user experience. - Return ViewResult
Test Case Ideas - Summary: Verify TeamDashboard returns ViewResult and correctly processes customized views. - Return ViewResult on valid HTTP GET
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IProcessModel for process abstraction. - Enumerable for collection handling, IProcessModel for process abstraction
TeamWidgetDashboard¶
Summary: Handles GET requests by retrieving project ID, fetching and decoding 'Team' views, then rendering the dashboard.
ViewResult DashboardController.TeamWidgetDashboard()
Routing
- HTTP:
GET - URL:
/Dashboard/TeamWidgetDashboard
View Metadata
- View:
TeamWidgetDashboard(Andromeda.Web\Views\Dashboard\TeamWidgetDashboard.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - Summary: Handles GET requests by retrieving project ID - Fetch customized views filtered by 'Team' type - Retrieve current project ID, Decode JSON data of views, Render dashboard view with processed data
Performance Issues - Summary: Avoid client-side evaluation by using AsQueryable with LINQ Where and Select methods. - Client-side evaluation risk from LINQ Where and Select without AsQueryable
Maintainability Issues - Summary: Replace magic string 'Team' with constant or enum to improve maintainability. - Use constant or enum instead of magic string 'Team' for filtering views
UX Impact Notes - Summary: Prepares and passes customized team data to dashboard for user display. - Prepare team-specific view data, Pass customized data to dashboard view, Render customized dashboard to user
Test Case Ideas - Summary: Verify TeamWidgetDashboard handles GET requests - Invoke TeamWidgetDashboard on HTTP GET request, Filter views by 'Team' view type, Pass filtered views to the view, Decode JSON input accurately
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IProcessModel for process management. - Enumerable for collection handling, IProcessModel for process management
TeamMaxDelay¶
Summary: The method retrieves schedule and actor data for a valid ProjID, filters actors, calculates maximum delays, and returns JSON results.
JsonResult DashboardController.TeamMaxDelay(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/TeamMaxDelay
View Metadata
- View:
TeamMaxDelay(Andromeda.Web\Views\Dashboard\TeamMaxDelay.cshtml)
Detailed Analysis
Key Flows - and returns JSON results. - Calculate maximum in-office and out-office delays per actor using LINQ - Return delay results as JSON
Error Flows - Summary: Handle null ProjID and missing schedule or actor data gracefully. - Return empty or default JSON if no schedule analysis or actor data for ProjID
Security Issues - Summary: No security issues identified in TeamMaxDelay method.
Performance Issues - Summary: Caching and repeated data queries degrade performance with large datasets. - Repeated LINQ Where and Max operations degrade performance on large datasets
Maintainability Issues - Summary: Tight coupling and complex logic reduce maintainability; incomplete Json call indicates code quality issues. - Tight coupling with ActorModel and HRModel dependencies, Complex conditional statements and repeated delay calculations, Incomplete final Json method call
UX Impact Notes - Summary: Returned JSON data controls delay display in the dashboard UI. - Returned JSON data
Test Case Ideas - Summary: Verify TeamMaxDelay returns correct delay data under various schedule and actor conditions. - Correct delay data for valid ProjID, Empty or default JSON for missing schedule or actor data, Delay calculations with only in-office or only out-office entries, Delay aggregation with multiple actors and correct filtering - Handle empty schedule data without errors
Dependencies & Called Services - Summary: Uses core libraries and actor models for team delay calculations. - Enumerable library, IActorModel interface, IHRModel interface, Math library
TechnologyDashboard¶
Summary: Fetch the current project ID, obtain customized views, process data, and render the technology dashboard.
ViewResult DashboardController.TechnologyDashboard()
Routing
- HTTP:
GET - URL:
/Dashboard/TechnologyDashboard
View Metadata
- View:
TechnologyDashboard(Andromeda.Web\Views\Dashboard\TechnologyDashboard.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - and render the technology dashboard. - Return ViewResult with prepared dashboard data
Error Flows - Summary: Handle invalid or missing project ID to prevent method failure. - Invalid or missing project ID handling, Prevent unexpected method failure
Maintainability Issues - Summary: The method's multiple calls complicate understanding and maintenance without proper documentation. - Multiple method calls, Lack of proper documentation
UX Impact Notes - Summary: Displays the technology dashboard view to the user. - Returns ViewResult - Displays technology dashboard view
Test Case Ideas - Summary: Verify method returns correct view for valid project ID. - Correct view returned for valid project ID
Dependencies & Called Services - Summary: Uses Enumerable and IProcessModel for data processing and model interaction. - Enumerable for data operations, IProcessModel for process modeling
PathClusterAnalysis¶
Summary: Collect project data, build paths with activities, perform clustering analysis, and prepare results for display.
ActionResult DashboardController.PathClusterAnalysis()
Routing
- HTTP:
GET - URL:
/Dashboard/PathClusterAnalysis
Cross-layer call chain - DashboardController.PathClusterAnalysis → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - DashboardController.PathClusterAnalysis → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.PathClusterAnalysis → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.PathClusterAnalysis → Andromeda.Core.Entities.ProjectData.GetArrows - DashboardController.PathClusterAnalysis → Andromeda.Core.Entities.Activity.Clone - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_PathClusterAnalysis["DashboardController.PathClusterAnalysis"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_Activity_Clone
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_PathClusterAnalysis --> Andromeda_Core_Entities_ProjectData_GetArrows
DashboardController_PathClusterAnalysis --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
View Metadata
- View:
PathClusterAnalysis(Andromeda.Web\Views\Dashboard\PathClusterAnalysis.cshtml) - Model:
Tuple<Andromeda.Core.Entities.ProjectData, Dictionary<Andromeda.Core.Entities.MapPath, double[]>>
Detailed Analysis
Key Flows - Summary: Collect project data, build paths with activities, perform clustering analysis, and prepare results for display. - Calculate effort and extract start activity names for each path - Retrieve project ID and initialize ProjectData with actors, activities, arrows, Group activities by actor and extract properties and products, Construct MapPath objects from end points using pre-paths and filtered activities, Invoke ActorModel.PathClusterAnalysis with data and references for clustering, Prepare arrow data with predecessor and successor properties for ViewData display - Update cluster ranks in path data records based on clustering results
Error Flows - Summary: The method lacks explicit exception handling and error flow definitions. - Absence of explicit exception handling, No handling of incomplete or invalid data
Performance Issues - Summary: Optimize data retrieval, avoid repeated config calls, and reduce inefficient collection operations. - High memory usage from ToList() on large datasets causing multiple enumerations - Slow GroupBy and LINQ Any/Where operations on large datasets
Maintainability Issues - Summary: Tight coupling and unclear code reduce modularity and readability. - Tight coupling with ProjectData and multiple models reduces modularity, Unclear and non-descriptive variable names hinder readability, Long, complex lines reduce code readability, Use of anonymous types and magic strings complicates maintenance, Remove unnecessary empty code blocks
UX Impact Notes - Summary: Assigning arrow data to ViewData affects arrow display in the UI. - Arrow data assignment to ViewData
Test Case Ideas - data assignment - Calculate effort and extract start activity names with varied data - Handle edge cases: duplicate ActorIds - Group activities by actor and verify grouping logic - Prepare and assign arrow data to ViewData - Update cluster ranks based on clustering results and path data - Validate string concatenation performance and correctness
Dependencies & Called Services - Summary: PathClusterAnalysis uses data structures and interfaces for activity and process modeling. - Activity handling, Array and List data structures, Enumerable operations, Data conversion utilities, IActorModel interface, IFinalPlanModel interface, IProcessModel interface, ProjectData management
SaveImagesAndTables¶
Summary: The method decodes slide data and URLs, processes images into JPEGs, saves them, and prepares slides for PowerPoint export.
JsonResult DashboardController.SaveImagesAndTables()
Routing
- HTTP:
POST - URL:
/Dashboard/SaveImagesAndTables
Cross-layer call chain - DashboardController.SaveImagesAndTables → Andromeda.Core.Utility.PPTXGenerate.ExportPPTX - Andromeda.Core.Utility.PPTXGenerate.ExportPPTX → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialChar - Andromeda.Core.Utility.PPTXGenerate.ExportPPTX → Andromeda.Core.Extensions.LinqExtensions.RemoveInvalidFileNameChars - Andromeda.Core.Utility.PPTXGenerate.ExportPPTX → Andromeda.Core.Utility.Compress.CreateZip
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars["Andromeda.Core.Extensions.LinqExtensions.RemoveInvalidFileNameChars"]
Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialChar["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialChar"]
Andromeda_Core_Utility_Compress_CreateZip["Andromeda.Core.Utility.Compress.CreateZip"]
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX["Andromeda.Core.Utility.PPTXGenerate.ExportPPTX"]
DashboardController_SaveImagesAndTables["DashboardController.SaveImagesAndTables"]
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialChar
Andromeda_Core_Utility_PPTXGenerate_ExportPPTX --> Andromeda_Core_Utility_Compress_CreateZip
DashboardController_SaveImagesAndTables --> Andromeda_Core_Utility_PPTXGenerate_ExportPPTX
Detailed Analysis
Key Flows - Summary: The method decodes slide data and URLs, processes images into JPEGs, saves them, and prepares slides for PowerPoint export. - Create temporary directory for files - Retrieve configuration settings
Error Flows - Summary: Handle errors in JSON decoding - JSON decoding errors from malformed or missing data, Exceptions creating temporary directory, Errors converting base64 strings or processing invalid or large images
Security Issues - Summary: Prevent JSON deserialization and directory traversal vulnerabilities in image saving. - Unvalidated JSON deserialization from request form data
Performance Issues - Summary: Optimize temporary directory creation, JPEG encoder retrieval, and image encoding to improve performance. - Repeated temporary directory creation degrades performance, Inefficient JPEG encoder retrieval using First(), High cost of repeated image encoding operations
Maintainability Issues - Summary: Replace magic strings and hardcoded paths with named constants and explicit types to improve maintainability. - Use named constants instead of magic strings, Explicitly type variables for clarity, Avoid hardcoded folder paths and filename patterns
Test Case Ideas - Summary: Validate data handling - Handle empty or malformed request data - Retrieve folder path from application settings
Dependencies & Called Services - Summary: Uses image processing, file handling, collection management, and PPTX generation services. - Image processing, File directory management, Enumerable collections, Image codec information, List collections, PPTX generation, String manipulation
DownloadFileFromPath¶
Summary: DownloadFileFromPath validates inputs, determines MIME type, verifies file existence, and returns the file with a custom filename.
ActionResult DashboardController.DownloadFileFromPath(string file, string extension, string module)
Routing
- HTTP:
GET - URL:
/Dashboard/DownloadFileFromPath
Cross-layer call chain - DashboardController.DownloadFileFromPath → Andromeda.Core.Extensions.LinqExtensions.RemoveInvalidFileNameChars
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars["Andromeda.Core.Extensions.LinqExtensions.RemoveInvalidFileNameChars"]
DashboardController_DownloadFileFromPath["DashboardController.DownloadFileFromPath"]
DashboardController_DownloadFileFromPath --> Andromeda_Core_Extensions_LinqExtensions_RemoveInvalidFileNameChars
Detailed Analysis
Key Flows - Summary: DownloadFileFromPath validates inputs - and returns the file with a custom filename. - Return file with custom filename including project and module details - Handle various file extensions with appropriate MIME types - Validate file
Error Flows - Summary: Return ASCII-encoded 'File Not Found' byte array if file path is invalid. - File not found error returns ASCII-encoded byte array
Security Issues - Summary: Malformed MIME types cause security vulnerabilities and unexpected behavior. - Malformed MIME type strings, Security vulnerabilities from MIME handling
Performance Issues - Summary: No performance issues identified in DownloadFileFromPath method.
Maintainability Issues - Summary: Hardcoded strings and complex logic reduce code clarity and maintainability. - Complex filename generation logic hinders understanding and maintenance
UX Impact Notes - Summary: The method's file download approach risks poor UX and security issues. - Returning 'File Not Found' as byte array risks poor client-side handling
Test Case Ideas - Summary: Verify correct file retrieval, MIME handling, path security, and error messaging. - Handle incomplete or corrupted MIME type strings - Validate file name and extension for valid inputs - Validate ASCII encoding of 'File Not Found' message - Verify correct MIME type assignment for various extensions - Ensure correct file path construction and existence check
Dependencies & Called Services - Summary: Uses encoding, file handling, LINQ extensions, and string operations. - Encoding utilities, File handling, LINQ extensions, String operations
SetDashBoardCookie¶
Summary: SetDashBoardCookie sets the dashboard ID cookie and confirms the action via JSON response.
JsonResult DashboardController.SetDashBoardCookie(string module, string DashboardId)
Routing
- HTTP:
GET - URL:
/Dashboard/SetDashBoardCookie
Cross-layer call chain - DashboardController.SetDashBoardCookie → Insorce.Helpers.Helpers.SetDashboardIdToCookie
Call Chain Diagram¶
flowchart TD
DashboardController_SetDashBoardCookie["DashboardController.SetDashBoardCookie"]
Insorce_Helpers_Helpers_SetDashboardIdToCookie["Insorce.Helpers.Helpers.SetDashboardIdToCookie"]
DashboardController_SetDashBoardCookie --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
Detailed Analysis
Key Flows - Summary: SetDashBoardCookie sets the dashboard ID cookie and confirms the action via JSON response. - Set dashboard ID cookie - Return JSON confirmation response
UX Impact Notes - Summary: Setting the dashboard cookie changes the user's dashboard view. - Dashboard cookie affects user dashboard view, Alters user experience
Test Case Ideas - Summary: Verify SetDashboardIdToCookie method calls and correct cookie setting. - SetDashboardIdToCookie method invocation
Dependencies & Called Services - Summary: Uses Helpers service for dashboard cookie management. - Helpers service dependency
LoadDashboard¶
Summary: LoadDashboard sets preview mode for widgets starting with 'C' and retrieves customized views based on culture.
ActionResult DashboardController.LoadDashboard(string name, string title, string subTitle, int? ViewID, string WidgetID, int PID, int? IsTable, bool? isPreview)
Routing
- HTTP:
GET - URL:
/Dashboard/LoadDashboard
Cross-layer call chain - DashboardController.LoadDashboard → Andromeda.Core.Services.Registry.GetPermissions - DashboardController.LoadDashboard → Andromeda.Core.LoggingManager.Info - Andromeda.Core.Services.Registry.GetPermissions → Andromeda.Core.Models.ModelHelper.GetProjectDetails
Call Chain Diagram¶
flowchart TD
Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
Andromeda_Core_Models_ModelHelper_GetProjectDetails["Andromeda.Core.Models.ModelHelper.GetProjectDetails"]
Andromeda_Core_Services_Registry_GetPermissions["Andromeda.Core.Services.Registry.GetPermissions"]
DashboardController_LoadDashboard["DashboardController.LoadDashboard"]
Andromeda_Core_Services_Registry_GetPermissions --> Andromeda_Core_Models_ModelHelper_GetProjectDetails
DashboardController_LoadDashboard --> Andromeda_Core_LoggingManager_Info
DashboardController_LoadDashboard --> Andromeda_Core_Services_Registry_GetPermissions
Detailed Analysis
Key Flows - Summary: LoadDashboard sets preview mode for widgets starting with 'C' and retrieves customized views based on culture. - Set 'Preview' key if WidgetID starts with 'C' based on isPreview parameter
Error Flows - Summary: Validate project data and permissions - Log 'Access Denied' and throw 403 HttpException if permissions missing - Return null if ProjectData is null or ProjectID mismatches
Security Issues - Summary: No security issues identified in LoadDashboard method.
Performance Issues - Summary: LINQ Any with string concatenation and case-insensitive checks slows large CustomViews collections. - LINQ Any method with lambda expressions, String concatenation in lambda, Case-insensitive comparisons on CustomViews, Performance impact on large collections
Maintainability Issues - Summary: Replace magic strings with constants and standardize variable naming for clarity. - Complete code logic for better understanding and maintenance
UX Impact Notes - Summary: Handle invalid ProjectData and unauthorized access to ensure clear user feedback and dynamic dashboard rendering. - Null return on invalid ProjectData risks poor UX if unhandled
Test Case Ideas - culture-aware logic - Test WidgetID starting with and without 'C' for preview assignment - Ensure PartialView '_Widget' returns with correct widgetText model - Test string comparisons under different cultural settings and case variations - Validate 'Access Denied' log message includes correct PID - Validate widgetText assignment based on widget type conditions
Dependencies & Called Services - Summary: LoadDashboard uses services for data processing, logging, and configuration management. - Enumerable for data iteration, IProcessModel for process handling, Registry for configuration access, String for text manipulation - LoggingManager for logging operations
GetDashboard¶
Summary: Process 'view' parameter to configure dashboard, including special handling for case 'e'.
ActionResult DashboardController.GetDashboard(int? view, string isCustExp)
Routing
- HTTP:
GET - URL:
/Dashboard/GetDashboard
View Metadata
- View:
GetDashboard(Andromeda.Web\Views\Dashboard\GetDashboard.cshtml) - Model:
IList<Andromeda.Core.Entities.CustomWidgetView>
Detailed Analysis
Key Flows - Summary: Process 'view' parameter to configure dashboard, including special handling for case 'e'. - Configure dashboard view, Special case handling for 'e' - Handle 'view' parameter
Error Flows - Summary: No error flows defined for GetDashboard method.
Performance Issues - Summary: Retrieving and ordering custom widget views causes performance issues with large data sets. - Inefficient ordering of large widget data sets
Maintainability Issues - Summary: Remove magic numbers and complete code to improve clarity and maintainability. - Use of magic numbers reduces code clarity, Incomplete code segments cause compilation errors and hinder understanding
UX Impact Notes - Summary: The method customizes the dashboard view based on user experience parameters. - View setup handles specific cases affecting dashboard presentation
Test Case Ideas - Summary: Verify view setup - Switch statement handling for view setup including case 'e' - Correct data retrieval and assignment to view data properties - Handling of isCustExp parameter setting ViewData['isCustExp'] correctly
Dependencies & Called Services - Summary: Uses data models and string utilities for dashboard processing. - Enumerable utilities, Project model interface, String operations - Process model interface
CustomDashboard¶
Summary: Set default dashboard view if unset, load project and dashboard data, and redirect if no activities.
ActionResult DashboardController.CustomDashboard(int? view)
Routing
- HTTP:
GET - URL:
/Dashboard/CustomDashboard
Cross-layer call chain - DashboardController.CustomDashboard → Insorce.Helpers.Helpers.getDashboardIdFromCookie - DashboardController.CustomDashboard → Insorce.Helpers.Helpers.SetDashboardIdToCookie
Call Chain Diagram¶
flowchart TD
DashboardController_CustomDashboard["DashboardController.CustomDashboard"]
Insorce_Helpers_Helpers_SetDashboardIdToCookie["Insorce.Helpers.Helpers.SetDashboardIdToCookie"]
Insorce_Helpers_Helpers_getDashboardIdFromCookie["Insorce.Helpers.Helpers.getDashboardIdFromCookie"]
DashboardController_CustomDashboard --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
DashboardController_CustomDashboard --> Insorce_Helpers_Helpers_getDashboardIdFromCookie
View Metadata
- View:
CustomDashboard(Andromeda.Web\Views\Dashboard\CustomDashboard.cshtml) - Model:
IList<Andromeda.Core.Entities.CustomWidgetView>
Detailed Analysis
Key Flows - Summary: Set default dashboard view if unset - and redirect if no activities. - Redirect to 'ProcessCreati' if projectData.Activities is empty - Set default dashboard ID '6' in cookie if 'view' is unset
Error Flows - Summary: Handle null references and complete condition checks to prevent runtime errors. - Null reference exception from unchecked 'view' property access - Incomplete condition checks causing unclear logic and unexpected behavior
Security Issues - Summary: Hardcoded dashboard ID in cookie risks security without validation. - Hardcoded dashboard ID in cookie, Lack of validation or sanitization of dashboard ID
Performance Issues - Summary: Using ToList() on large collections degrades performance during filtering and ordering. - Use of ToList() on large collections, Filtering and ordering custom widgets
Maintainability Issues - Summary: Replace magic strings and complete conditions to improve code readability and maintainability. - Incomplete condition statements reduce readability and maintainability, Hardcoded dashboard ID '6' reduces code clarity, Replace 'Dashboard' string in widget filtering with a constant
UX Impact Notes - Summary: Controls user navigation and persists dashboard state via cookies. - Flexible user flow control with ActionResult, Persist dashboard ID in cookies - Redirect to 'ProcessCreati' when no activities exist
Test Case Ideas - view assignment - Check ViewBag.ViewId and ViewData for expected custom reports and views - Validate dashboard data loading with valid 'view' parameter - Verify getDashboardIdFromCookie returns and assigns 'view' correctly
Dependencies & Called Services - Summary: Uses core data types and interfaces for processing and project management. - Enumerable utilities, Helper functions, Project model interface, Integer data type, String data type - Process model interface
CustomWidgetViews¶
Summary: Fetch dashboard and custom widget views, sort them, and render the view with this data.
ActionResult DashboardController.CustomWidgetViews()
Routing
- HTTP:
GET - URL:
/Dashboard/CustomWidgetViews
View Metadata
- View:
CustomWidgetViews(Andromeda.Web\Views\Dashboard\CustomWidgetViews.cshtml) - Model:
Tuple<IList<Andromeda.Core.Entities.CustomWidgetView>, IList<Andromeda.Core.Entities.DashBoardWidgets>, int, string>
Detailed Analysis
Key Flows - Summary: Fetch dashboard and custom widget views, sort them, and render the view with this data. - Retrieve dashboard widgets and assign to ViewBag - Return ActionResult to render view with data
Error Flows - Summary: The method throws an exception if the Model is null during data retrieval. - Null Model causes exception on data retrieval
Performance Issues - Summary: Using ToList() after ordering loads entire dataset into memory - Full dataset loaded into memory
Maintainability Issues - Summary: The method's tight coupling to the Model reduces flexibility and complicates testing. - Tight coupling to Model, Reduced flexibility, Complicated testing and future changes
UX Impact Notes - Summary: Determines rendered view based on data, directly controlling user flow. - Returns ActionResult
Test Case Ideas - Summary: Verify method returns correct data and handles empty datasets without errors. - Handle empty dataset gracefully without errors - Return correct data with valid dashboard widgets and custom widget views
Dependencies & Called Services - Summary: Uses Enumerable and IProjectModel for data manipulation and project abstraction. - Enumerable for data operations, IProjectModel for project abstraction
AddCustomWidgetView¶
Summary: AddCustomWidgetView retrieves parameters, saves the custom widget view, and returns success status.
JsonResult DashboardController.AddCustomWidgetView()
Routing
- HTTP:
POST - URL:
/Dashboard/AddCustomWidgetView
Detailed Analysis
Key Flows - and returns success status. - Return JsonResult indicating success
Error Flows - risking unhandled errors. - Missing validation for 'ViewName' and 'WidgetIds' inputs, No exception handling for runtime errors
Security Issues - Summary: Direct use of Request parameters causes SQL injection and XSS vulnerabilities. - Lack of input validation, No input sanitization, SQL injection risk, Cross-site scripting (XSS) risk
Maintainability Issues - Summary: Replace magic strings with constants and implement the placeholder method fully. - Use constants or enums instead of magic strings for request parameters, Implement the currently empty or placeholder method to avoid maintainability issues
Test Case Ideas - Summary: Verify method returns correct JsonResult and saves custom widget view with valid input. - Return expected JsonResult
Dependencies & Called Services - Summary: AddCustomWidgetView depends on IProjectModel service. - IProjectModel service dependency
UpdateCustomWidgetView¶
Summary: Extract widget view data from POST request, update model, and return JSON response.
JsonResult DashboardController.UpdateCustomWidgetView()
Routing
- HTTP:
POST - URL:
/Dashboard/UpdateCustomWidgetView
Cross-layer call chain - DashboardController.UpdateCustomWidgetView → Andromeda.Core.DataManager.Execute - DashboardController.UpdateCustomWidgetView → Andromeda.Core.LoggingManager.Error - Andromeda.Core.DataManager.Execute → Andromeda.Core.LoggingManager.Debug - Andromeda.Core.DataManager.Execute → Andromeda.Core.Database.helper.SqlParameters
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
DashboardController_UpdateCustomWidgetView["DashboardController.UpdateCustomWidgetView"]
Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
DashboardController_UpdateCustomWidgetView --> Andromeda_Core_DataManager_Execute
DashboardController_UpdateCustomWidgetView --> Andromeda_Core_LoggingManager_Error
Detailed Analysis
Key Flows - update model - and return JSON response. - Return JsonResult response to client - Update custom widget view via Model.UpdateCustomWidgetView
Security Issues - Summary: Direct use of Request data without validation risks SQL injection and data tampering. - Lack of input validation, SQL injection vulnerability, Data tampering risk
Performance Issues - Summary: Lack of input validation causes unnecessary database queries and updates. - Unnecessary database updates
Maintainability Issues - Summary: Replace magic strings with constants to improve maintainability. - Use constants for Request keys instead of magic strings
UX Impact Notes - Summary: No direct UX impact, but security or performance issues could indirectly affect UX. - No direct UX impact, Potential indirect UX impact from security issues, Potential indirect UX impact from performance issues
Test Case Ideas - Summary: Test UpdateCustomWidgetView for valid data and missing request keys. - Valid request data updates widget and returns correct JsonResult
Dependencies & Called Services - Summary: Uses conversion service for IProjectModel. - Conversion service, IProjectModel dependency
DeleteCustomWidgetView¶
Summary: DeleteCustomWidgetView retrieves the view ID, deletes the custom widget view, and returns success.
JsonResult DashboardController.DeleteCustomWidgetView()
Routing
- HTTP:
POST - URL:
/Dashboard/DeleteCustomWidgetView
Cross-layer call chain - DashboardController.DeleteCustomWidgetView → Andromeda.Core.DataManager.Execute - DashboardController.DeleteCustomWidgetView → Andromeda.Core.LoggingManager.Error - Andromeda.Core.DataManager.Execute → Andromeda.Core.LoggingManager.Debug - Andromeda.Core.DataManager.Execute → Andromeda.Core.Database.helper.SqlParameters
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
DashboardController_DeleteCustomWidgetView["DashboardController.DeleteCustomWidgetView"]
Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
DashboardController_DeleteCustomWidgetView --> Andromeda_Core_DataManager_Execute
DashboardController_DeleteCustomWidgetView --> Andromeda_Core_LoggingManager_Error
Detailed Analysis
Key Flows - and returns success. - Return successful JsonResult
Error Flows - Summary: Handle missing or invalid view ID errors during widget view deletion. - Missing view ID causes integer conversion failure, Invalid view ID triggers deletion error with JsonResult response
Security Issues - Summary: Sanitize view ID to prevent SQL injection in DeleteCustomWidgetView. - Unsanitized view ID causes SQL injection risk, Sanitize input before passing to Model.DeleteCustomWidgetView
Maintainability Issues - Summary: Replace magic string with named constant to improve maintainability. - Use named constant instead of magic string 'ViewId'
Test Case Ideas - Summary: Verify DeleteCustomWidgetView handles valid and missing view ID cases correctly. - Successful deletion with valid existing view ID, Error handling for missing view ID in request
Dependencies & Called Services - Summary: Uses conversion service and project model interface. - Conversion service, Project model interface
MilestoneVolumeFlow¶
Summary: MilestoneVolumeFlow retrieves and processes project activities and arrows, returning structured JSON while caching results by project ID.
JsonResult DashboardController.MilestoneVolumeFlow(int? ProjID)
Routing
- HTTP:
GET - URL:
/Dashboard/MilestoneVolumeFlow
View Metadata
- View:
MilestoneVolumeFlow(Andromeda.Web\Views\Dashboard\MilestoneVolumeFlow.cshtml)
Detailed Analysis
Key Flows - returning structured JSON while caching results by project ID. - Return structured JSON with relevant properties
Error Flows - Summary: Returns null on missing data or unmet conditions - Return null on missing expected data - Return null when conditions are unmet - Potential negative impact on user experience without proper null checks
Performance Issues - Summary: Excessive ToList() calls and unfiltered LINQ queries degrade performance and increase memory use. - Excessive ToList() calls load entire datasets into memory
Maintainability Issues - Summary: Anonymous types and unclear variables reduce code clarity and maintainability. - Use of anonymous types obscures data structure, Commented-out code confuses maintainers, Incomplete or truncated code complicates debugging, Undefined conditions and variables reduce clarity
UX Impact Notes - Summary: Cached data and null returns cause outdated info and UI errors. - Null returns cause UI errors if unhandled
Test Case Ideas - path assignment - Return correct data for valid project ID - OutputCache returns cached results for repeated requests - Correct inPath assignment with and without Successor in pathActivities - Return correct anonymous object properties when Path is 0 - Correct JSON serialization of returned data
Dependencies & Called Services - Summary: Uses collections and actor model for dashboard-related data handling. - Dashboard component, Enumerable collections, IActorModel interface, List collection
GetPrePath¶
Summary: Build the path by adding the current EndId and iterating over arrows to include predecessors not yet in the path.
void DashboardController.GetPrePath(int EndId, List<int> path, List<Arrow> allArrows)
Routing
- URL:
/Dashboard/GetPrePath
Detailed Analysis
Key Flows - Summary: Build the path by adding the current EndId and iterating over arrows to include predecessors not yet in the path. - Add current EndId to path, Retrieve arrows with successor equal to current EndId, Iterate over retrieved arrows - Check if arrow predecessor is absent in path
Error Flows - Summary: No error flows are defined for GetPrePath method.
Performance Issues - Summary: LINQ queries on large collections degrade performance. - Inefficient LINQ Where and ToList on large allArrows collections, Inefficient Any method with lambda on large path collections
Maintainability Issues - Summary: The private method's unclear name and recursion reduce code clarity and maintainability. - Private method with non-descriptive name, Incomplete and fragmented code blocks, Recursive implementation complicates debugging and comprehension
Test Case Ideas - Summary: Verify GetPrePath handles empty inputs - and error-free returns. - Check behavior with empty path collection - Handle empty allArrows list - Ensure method returns without errors
Dependencies & Called Services - Summary: Uses collections and dashboard services for pre-path processing. - Dashboard service, Enumerable collection, List collection
GetActivityDetails¶
Summary: Retrieve and aggregate detailed activity data including predecessors and related entities, then return as JSON.
JsonResult DashboardController.GetActivityDetails(int? ActivityID)
Routing
- HTTP:
GET - URL:
/Dashboard/GetActivityDetails
Cross-layer call chain - DashboardController.GetActivityDetails → Andromeda.Core.Extensions.LinqExtensions.RemoveLineBreakChars
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Extensions_LinqExtensions_RemoveLineBreakChars["Andromeda.Core.Extensions.LinqExtensions.RemoveLineBreakChars"]
DashboardController_GetActivityDetails["DashboardController.GetActivityDetails"]
DashboardController_GetActivityDetails --> Andromeda_Core_Extensions_LinqExtensions_RemoveLineBreakChars
Detailed Analysis
Key Flows - then return as JSON. - Fetch related products, properties, transfer modes, inputs, and outputs - Aggregate data and return as JSON result
Error Flows - Summary: Return empty JSON if ActivityID is null. - Null ActivityID check - Return empty JSON result
Security Issues - Summary: Prevent SQL injection by sanitizing ActivityID input. - SQL injection risk from unsanitized ActivityID
Performance Issues - Summary: Sequential database queries degrade performance with large or complex data. - Performance degradation with large datasets
Maintainability Issues - Summary: The method's complex nested LINQ and conditionals reduce readability and maintainability. - Dense and complex code, Many nested LINQ queries, Numerous conditional statements, Difficult to read and maintain
UX Impact Notes - Summary: Returning empty JSON for null or empty ActivityID risks poor UX if unhandled. - Empty JSON response for null or empty ActivityID, Potential negative UX if client lacks handling
Test Case Ideas - Summary: Test GetActivityDetails with valid and invalid ActivityID inputs and ensure region markers do not affect execution. - Valid ActivityID returns correct detailed data - Non-existent ActivityID handles missing data properly
Dependencies & Called Services - Summary: Uses models and utility libraries for data processing and time management. - Enumerable for collection operations, IActorModel for actor data, IControlModel for control data, IProcessModel for process data, IRiskModel for risk data, LinqExtensions for LINQ enhancements, Math for mathematical functions, String for string manipulation, TimeSpan for time interval handling
UpdateActivityName¶
Summary: Update the activity name in ShapeList and project XML, then return a success JSON response.
JsonResult DashboardController.UpdateActivityName()
Routing
- HTTP:
POST - URL:
/Dashboard/UpdateActivityName
Cross-layer call chain - DashboardController.UpdateActivityName → Andromeda.Core.DataManager.Execute - DashboardController.UpdateActivityName → Andromeda.Core.LoggingManager.Error - Andromeda.Core.DataManager.Execute → Andromeda.Core.LoggingManager.Debug - Andromeda.Core.DataManager.Execute → Andromeda.Core.Database.helper.SqlParameters
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
DashboardController_UpdateActivityName["DashboardController.UpdateActivityName"]
Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
DashboardController_UpdateActivityName --> Andromeda_Core_DataManager_Execute
DashboardController_UpdateActivityName --> Andromeda_Core_LoggingManager_Error
Detailed Analysis
Key Flows - Summary: Update the activity name in ShapeList and project XML - then return a success JSON response. - Update activity name in ShapeList - Update project XML with new activity name - Return JSON success response
Error Flows - Summary: Catch and log exceptions - return JSON error response on invalid input or processing failure. - Catch exceptions during processing - Return JSON response with isSuccess=false and error message - Log errors using LoggingManager - Validate ActivityID and Name parameters to prevent format exceptions
Security Issues - Summary: UpdateActivityName risks SQL injection - and lacks authentication checks. - SQL injection and XSS risk from unvalidated request parameters
Performance Issues - Summary: Reading project XML shapes causes performance overhead. - Reading project XML shapes, Performance overhead from XML processing
Maintainability Issues - Summary: The method uses unclear variables, magic strings, incomplete code, and lacks error handling. - Use of magic strings for Unicode constants, Incomplete or truncated code segments, Lack of handling for missing ActivityID in ShapeList, Unclear variable declarations and usage
UX Impact Notes - Summary: Invalid or missing parameters cause errors and expose sensitive info to users. - Errors from invalid or missing request parameters, Uninformative or sensitive error messages exposed to users
Test Case Ideas - Summary: Verify UpdateActivityName correctly updates names and XML with valid and invalid ActivityIDs. - Handle missing ActivityID in ShapeList - Return correct XML shapes from ReadProjectXml - Update activity name when ActivityID exists in ShapeList - Update project XML correctly in ProcessMapModel after name change
Dependencies & Called Services - and logging services. - Data conversion utilities, Actor model interface, Control model interface, String manipulation - Logging management - Process model interface
Standardization¶
Summary: The method handles a GET request by invoking IssuesLevers and returning its result.
ActionResult DashboardController.Standardization()
Routing
- HTTP:
GET - URL:
/Dashboard/Standardization
Detailed Analysis
Key Flows - Summary: The method handles a GET request by invoking IssuesLevers and returning its result. - Return IssuesLevers result
Maintainability Issues - Summary: No maintainability issues identified.
Test Case Ideas - Summary: Verify IssuesLevers method call and Standardization method's return value. - Validate Standardization method return matches IssuesLevers output - Verify IssuesLevers method invocation
Dependencies & Called Services - Summary: Uses Dashboard service as a dependency. - Dashboard service usage
Consolidation¶
Summary: Handle HTTP GET request by calling IssuesLevers with parameter 9 and returning its ActionResult.
ActionResult DashboardController.Consolidation()
Routing
- HTTP:
GET - URL:
/Dashboard/Consolidation
Detailed Analysis
Key Flows - Summary: Handle HTTP GET request by calling IssuesLevers with parameter 9 and returning its ActionResult. - Return ActionResult response
Maintainability Issues - Summary: Replace magic number 9 with a named constant to improve maintainability. - Use named constant instead of magic number 9 in IssuesLevers method call
Test Case Ideas - Summary: Verify Consolidation method handles GET requests and correctly calls IssuesLevers with parameter 9. - Return expected ActionResult from IssuesLevers call - Handle HTTP GET request in Consolidation method
Dependencies & Called Services - Summary: Uses Dashboard service for UI rendering. - Dashboard service dependency
NVA¶
Summary: The method handles an HTTP GET request and returns the result of IssuesLevers called with parameter 10.
ActionResult DashboardController.NVA()
Routing
- HTTP:
GET - URL:
/Dashboard/NVA
Detailed Analysis
Key Flows - Summary: The method handles an HTTP GET request and returns the result of IssuesLevers called with parameter 10. - Return IssuesLevers result
Maintainability Issues - Summary: Replace magic number 10 with a named constant to improve code readability and maintainability. - Use named constant instead of magic number 10 in IssuesLevers call
Test Case Ideas - Summary: Verify NVA method handles GET requests - and returns its ActionResult. - Return expected ActionResult from IssuesLevers call - Handle HTTP GET requests in NVA method
Dependencies & Called Services - Summary: NVA method depends on the Dashboard service. - Dashboard service dependency
Digitization¶
Summary: Process HTTP GET request by calling IssuesLevers with parameter 11 and return the ActionResult.
ActionResult DashboardController.Digitization()
Routing
- HTTP:
GET - URL:
/Dashboard/Digitization
Detailed Analysis
Key Flows - Summary: Process HTTP GET request by calling IssuesLevers with parameter 11 and return the ActionResult. - Return ActionResult to client
Maintainability Issues - Summary: Hardcoded integer reduces maintainability by requiring code changes for updates. - Hardcoded integer value in IssuesLevers call, Lack of configurability for critical value
Test Case Ideas - Summary: Verify Digitization handles GET requests and correctly calls and returns IssuesLevers results. - Return IssuesLevers ActionResult from Digitization - Handle HTTP GET request in Digitization
Dependencies & Called Services - Summary: Uses Dashboard service for digitization. - Dashboard service dependency
Automation¶
Summary: Handles HTTP GET request by calling IssuesLevers with parameter 12 and returns the ActionResult.
ActionResult DashboardController.Automation()
Routing
- HTTP:
GET - URL:
/Dashboard/Automation
Detailed Analysis
Key Flows - Summary: Handles HTTP GET request by calling IssuesLevers with parameter 12 and returns the ActionResult. - Return ActionResult
Maintainability Issues - Summary: Hardcoded values reduce flexibility and complicate future maintenance. - Hardcoded value in IssuesLevers call, Reduced flexibility, Increased maintenance complexity
Test Case Ideas - Summary: Verify Automation method's HTTP GET response and correct IssuesLevers invocation. - Automation method handles HTTP GET request correctly - Automation method returns ActionResult matching IssuesLevers output
Dependencies & Called Services - Summary: Automation method depends on the Dashboard service. - Dashboard service dependency
EnsureControls¶
Summary: EnsureControls handles HTTP GET requests by calling IssuesLevers with parameter 13 and returning its ActionResult.
ActionResult DashboardController.EnsureControls()
Routing
- HTTP:
GET - URL:
/Dashboard/EnsureControls
Detailed Analysis
Key Flows - Summary: EnsureControls handles HTTP GET requests by calling IssuesLevers with parameter 13 and returning its ActionResult. - Return ActionResult from IssuesLevers - Handle HTTP GET request
Maintainability Issues - Summary: Rename EnsureControls to clarify purpose and explain hardcoded parameter 13. - Unclear method name EnsureControls, Unexplained hardcoded parameter value 13
Test Case Ideas - Summary: Verify EnsureControls handles GET requests - and returns its ActionResult. - Handle HTTP GET request in EnsureControls
Dependencies & Called Services - Summary: EnsureControls method depends on the Dashboard service. - Dashboard service dependency
LocationCost¶
Summary: LocationCost handles HTTP GET requests, calls IssuesLevers with parameter 14, and returns its result.
ActionResult DashboardController.LocationCost()
Routing
- HTTP:
GET - URL:
/Dashboard/LocationCost
Detailed Analysis
Key Flows - Summary: LocationCost handles HTTP GET requests - and returns its result. - Return result from IssuesLevers - Handle HTTP GET request in LocationCost
Error Flows - Summary: LocationCost allows exceptions from IssuesLevers to propagate without handling. - Lack of exception handling in LocationCost, Exceptions from IssuesLevers propagate through LocationCost
Maintainability Issues - Summary: Replace magic number 14 with a named constant to improve code clarity and maintainability. - Use named constant instead of magic number 14 in IssuesLevers method
Test Case Ideas - Summary: Verify LocationCost handles HTTP GET and returns correct ActionResult for IssuesLevers(14). - Handle HTTP GET requests in LocationCost - Return expected ActionResult for IssuesLevers with parameter 14
Dependencies & Called Services - Summary: LocationCost method depends on the Dashboard service. - Dashboard service dependency
WorkAllocation¶
Summary: WorkAllocation handles HTTP GET requests by calling IssuesLevers with parameter 15 and returning its ActionResult.
ActionResult DashboardController.WorkAllocation()
Routing
- HTTP:
GET - URL:
/Dashboard/WorkAllocation
Detailed Analysis
Key Flows - Summary: WorkAllocation handles HTTP GET requests by calling IssuesLevers with parameter 15 and returning its ActionResult. - Return ActionResult response
Maintainability Issues - Summary: Hardcoded value reduces maintainability by requiring code changes for updates. - Hardcoded value in IssuesLevers call, Code modification needed to change value
UX Impact Notes - Summary: Enables users to access WorkAllocation via HTTP GET requests. - HTTP GET attribute enables method access via GET requests, Defines user/client interaction with endpoint
Test Case Ideas - Summary: Verify WorkAllocation handles HTTP GET and returns correct ActionResult matching IssuesLevers output. - WorkAllocation returns expected ActionResult for GET
Dependencies & Called Services - Summary: WorkAllocation method depends on the Dashboard service. - Dashboard service dependency
WorkWindow¶
Summary: The WorkWindow method handles an HTTP GET request by calling IssuesLevers with parameter 16 and returning its result.
ActionResult DashboardController.WorkWindow()
Routing
- HTTP:
GET - URL:
/Dashboard/WorkWindow
Detailed Analysis
Key Flows - Summary: The WorkWindow method handles an HTTP GET request by calling IssuesLevers with parameter 16 and returning its result. - Return result from IssuesLevers - Handle HTTP GET request to WorkWindow
Test Case Ideas - Summary: Verify WorkWindow handles HTTP GET - and returns correct ActionResult. - Return expected ActionResult from IssuesLevers
Dependencies & Called Services - Summary: WorkWindow depends on the Dashboard service. - Dashboard service dependency
LEAN¶
Summary: The method handles an HTTP GET request, calls IssuesLevers with parameter 17, and returns its result.
ActionResult DashboardController.LEAN()
Routing
- HTTP:
GET - URL:
/Dashboard/LEAN
Detailed Analysis
Key Flows - Summary: The method handles an HTTP GET request - and returns its result. - Return ActionResult from IssuesLevers
Maintainability Issues - Summary: The method name 'LEAN' reduces code readability and maintainability. - Non-descriptive method name 'LEAN', Method name violates naming conventions
Test Case Ideas - Summary: Verify LEAN method handles GET requests - and returns its ActionResult. - Return ActionResult from IssuesLevers method - Handle HTTP GET requests in LEAN method
Dependencies & Called Services - Summary: Uses Dashboard service as a dependency. - Dashboard service dependency
FTRImprovement¶
Summary: Handle HTTP GET request by calling IssuesLevers with parameter 18 and returning the ActionResult.
ActionResult DashboardController.FTRImprovement()
Routing
- HTTP:
GET - URL:
/Dashboard/FTRImprovement
Detailed Analysis
Key Flows - Summary: Handle HTTP GET request by calling IssuesLevers with parameter 18 and returning the ActionResult. - Return resulting ActionResult
Test Case Ideas - and expected ActionResult return. - Expected ActionResult returned from IssuesLevers call
Dependencies & Called Services - Summary: Uses Dashboard service for UI rendering and data display. - Dashboard service dependency
SLArationalization¶
Summary: Process HTTP GET request by calling IssuesLevers with parameter 19 and return its ActionResult.
ActionResult DashboardController.SLArationalization()
Routing
- HTTP:
GET - URL:
/Dashboard/SLArationalization
Detailed Analysis
Key Flows - Summary: Process HTTP GET request by calling IssuesLevers with parameter 19 and return its ActionResult. - Return ActionResult response
Test Case Ideas - Summary: Verify SLArationalization handles GET requests and correctly calls IssuesLevers with expected results. - Return expected ActionResult from IssuesLevers - Handle HTTP GET request in SLArationalization
Dependencies & Called Services - Summary: Uses Dashboard service dependency. - Dashboard service dependency
Delaymanagement¶
Summary: The method handles an HTTP GET request, calls IssuesLevers with 20, and returns the ActionResult.
ActionResult DashboardController.Delaymanagement()
Routing
- HTTP:
GET - URL:
/Dashboard/Delaymanagement
Detailed Analysis
Key Flows - Summary: The method handles an HTTP GET request - and returns the ActionResult. - Return ActionResult
Maintainability Issues - Summary: Hardcoded value reduces flexibility and complicates future maintenance. - Hardcoded value in IssuesLevers call, Lack of configurability for critical parameter
Test Case Ideas - Summary: Verify Delaymanagement handles GET requests and returns correct ActionResult. - Handle HTTP GET request correctly - Return expected ActionResult from IssuesLevers call
Dependencies & Called Services - Summary: Delaymanagement depends on the Dashboard service. - Dashboard service dependency
ConfigureControl¶
Summary: ConfigureControl handles HTTP GET requests by calling IssuesLevers with parameter 21 and returning its ActionResult.
ActionResult DashboardController.ConfigureControl()
Routing
- HTTP:
GET - URL:
/Dashboard/ConfigureControl
Detailed Analysis
Key Flows - Summary: ConfigureControl handles HTTP GET requests by calling IssuesLevers with parameter 21 and returning its ActionResult. - Return ActionResult from IssuesLevers
Test Case Ideas - Summary: Verify ConfigureControl calls IssuesLevers with parameter 21 and returns its ActionResult on HTTP GET. - Return ActionResult from IssuesLevers
Dependencies & Called Services - Summary: ConfigureControl depends on the Dashboard service. - Dashboard service dependency
ControlRedundancy¶
Summary: No key flows are defined in the ControlRedundancy method.
ActionResult DashboardController.ControlRedundancy()
Routing
- HTTP:
GET - URL:
/Dashboard/ControlRedundancy
Detailed Analysis
Key Flows - Summary: No key flows are defined in the ControlRedundancy method.
Maintainability Issues - Summary: Using unexplained magic number 22 reduces code clarity and maintainability. - Unexplained magic number 22
Test Case Ideas - Summary: Verify ControlRedundancy handles GET requests and returns correct ActionResult from IssuesLevers. - Return expected ActionResult from IssuesLevers - Handle HTTP GET request in ControlRedundancy
Dependencies & Called Services - Summary: Uses Dashboard service for core functionality. - Dashboard service dependency
TrainingandSkilling¶
Summary: Handles HTTP GET requests by invoking IssuesLevers with parameter 23 and returning its output.
ActionResult DashboardController.TrainingandSkilling()
Routing
- HTTP:
GET - URL:
/Dashboard/TrainingandSkilling
Detailed Analysis
Key Flows - Summary: Handles HTTP GET requests by invoking IssuesLevers with parameter 23 and returning its output. - Return IssuesLevers result - Handle HTTP GET request
Maintainability Issues - Summary: Rename method to follow C# naming conventions for better readability and maintainability. - Non-conventional method name reduces readability, Method name violates C# naming standards
UX Impact Notes - Summary: The method handles GET requests - HTTP GET attribute defines request type, User interaction depends on GET request handling
Test Case Ideas - and expected ActionResult return. - Return expected ActionResult from IssuesLevers
Dependencies & Called Services - Summary: Uses Dashboard service for training and skilling functionality. - Dashboard service dependency
FTESizeUtilization¶
Summary: FTESizeUtilization handles HTTP GET requests by calling IssuesLevers with parameter 24 and returning its response.
ActionResult DashboardController.FTESizeUtilization()
Routing
- HTTP:
GET - URL:
/Dashboard/FTESizeUtilization
Detailed Analysis
Key Flows - Summary: FTESizeUtilization handles HTTP GET requests by calling IssuesLevers with parameter 24 and returning its response. - Return IssuesLevers ActionResult response
Test Case Ideas - Summary: Verify FTESizeUtilization handles GET requests and correctly calls IssuesLevers with expected results. - Return expected ActionResult from IssuesLevers - Handle HTTP GET request in FTESizeUtilization
Dependencies & Called Services - Summary: FTESizeUtilization depends on the Dashboard service. - Dashboard service dependency
IssuesLevers¶
Summary: Retrieve project and playbook data, initialize reports and widgets, conditionally load view-specific data, and render the dashboard.
ActionResult DashboardController.IssuesLevers(int? view)
Routing
- HTTP:
GET - URL:
/Dashboard/IssuesLevers
Cross-layer call chain - DashboardController.IssuesLevers → Andromeda.Core.Models.ModelHelper.GetPlaybooks - DashboardController.IssuesLevers → Andromeda.Core.Entities.ProjectData.GetKmeansCluster - DashboardController.IssuesLevers → Andromeda.Core.Entities.ProjectData.GetActors - DashboardController.IssuesLevers → Andromeda.Core.Entities.ProjectData.GetActivities - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Entities_ProjectData_GetKmeansCluster["Andromeda.Core.Entities.ProjectData.GetKmeansCluster"]
Andromeda_Core_Models_ModelHelper_GetPlaybooks["Andromeda.Core.Models.ModelHelper.GetPlaybooks"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_IssuesLevers["DashboardController.IssuesLevers"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetActors
DashboardController_IssuesLevers --> Andromeda_Core_Entities_ProjectData_GetKmeansCluster
DashboardController_IssuesLevers --> Andromeda_Core_Models_ModelHelper_GetPlaybooks
View Metadata
- View:
IssuesLevers(Andromeda.Web\Views\Dashboard\IssuesLevers.cshtml) - Model:
IList<Andromeda.Core.Entities.DashBoardWidgets>
Detailed Analysis
Key Flows - Summary: Retrieve project and playbook data, initialize reports and widgets, conditionally load view-specific data, and render the dashboard. - Load activity properties and automated systems for view 12, Load active actors and activities with positive handling time for view 10 - Set ViewData with playbook and project data - Assign all relevant data to ViewData and ViewBag - Return dashboard view
Error Flows - Summary: The method lacks explicit exception handling, risking runtime errors from invalid inputs. - Risk of unhandled null project ID and invalid data inputs
Security Issues - Summary: Prevent SQL injection by sanitizing user-derived 'ords' string used in playbook filtering. - SQL injection risk from unsanitized 'ords' string, Need input sanitization for 'ords' filter
Performance Issues - Summary: Unfiltered data fetching and inefficient queries degrade performance and increase memory use. - Fetching all playbooks without filtering or pagination - Using FirstOrDefault inside Select causing multiple database queries, Multiple database calls in one execution path reducing responsiveness, Using ToList on large collections increasing memory usage
Maintainability Issues - Summary: Code uses magic numbers, tight model coupling, incomplete snippets, and unclear variables, hindering maintenance. - Use of magic numbers reduces readability and increases error risk, Tight coupling to specific models complicates refactoring and replacement, Incomplete code snippets and unused variables cause confusion, Undefined or unclear variables reduce code clarity
UX Impact Notes - Summary: Dashboard data assignment and filtering directly affect user experience and UI responsiveness. - Direct assignment of ViewData and ViewBag affects dashboard display - Dynamic texts from LogModel enhance UI content and user engagement
Test Case Ideas - Summary: Verify correct data retrieval, filtering, clustering, and view rendering for IssuesLevers. - Handle incomplete or truncated code paths gracefully - Return correct playbooks for project ID - Return expected data from GetKmeans and IssuesLevers - Call Cluster method and update state accordingly - Assign ViewData and ViewBag to influence rendered view
Dependencies & Called Services - Summary: Uses core models, data types, and utility classes for service operations. - ILoginModel interface
UpdatePlaybooksOrder¶
Summary: UpdatePlaybooksOrder processes a POST request to reorder playbooks by updating their order in the model.
JsonResult DashboardController.UpdatePlaybooksOrder()
Routing
- HTTP:
POST - URL:
/Dashboard/UpdatePlaybooksOrder
Cross-layer call chain - DashboardController.UpdatePlaybooksOrder → Andromeda.Core.DataManager.Execute - Andromeda.Core.DataManager.Execute → Andromeda.Core.LoggingManager.Debug - Andromeda.Core.DataManager.Execute → Andromeda.Core.Database.helper.SqlParameters
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_Execute["Andromeda.Core.DataManager.Execute"]
Andromeda_Core_Database_helper_SqlParameters["Andromeda.Core.Database.helper.SqlParameters"]
Andromeda_Core_LoggingManager_Debug["Andromeda.Core.LoggingManager.Debug"]
DashboardController_UpdatePlaybooksOrder["DashboardController.UpdatePlaybooksOrder"]
Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
DashboardController_UpdatePlaybooksOrder --> Andromeda_Core_DataManager_Execute
Detailed Analysis
Key Flows - Summary: UpdatePlaybooksOrder processes a POST request to reorder playbooks by updating their order in the model. - Call Model.UpdatePlaybooksOrder with project ID and playbook IDs
Error Flows - Summary: Return error response for invalid playbook IDs in request. - Invalid playbook IDs in request, Error response on invalid input
Security Issues - Summary: Validate and sanitize request IDs to prevent SQL injection and data tampering. - Lack of ID validation and sanitization, Risk of SQL injection, Risk of data tampering
Performance Issues - Summary: Optimize UpdatePlaybooksOrder for large input performance. - Lack of optimization in UpdatePlaybooksOrder method
Maintainability Issues - Summary: Decoupling controller from model improves maintainability and flexibility. - Tight coupling between controller and model, Difficulty changing or replacing model without affecting controller
Test Case Ideas - Summary: Verify UpdatePlaybooksOrder handles POST requests and updates playbooks with valid IDs. - Invoke UpdatePlaybooksOrder on HTTP POST - Update playbooks with valid IDs
Dependencies & Called Services - Summary: UpdatePlaybooksOrder depends on IProjectModel for project data operations. - IProjectModel dependency for project data access
Playbooks¶
Summary: Retrieve and filter playbooks by validating and matching playbook IDs.
ActionResult DashboardController.Playbooks()
Routing
- HTTP:
GET - URL:
/Dashboard/Playbooks
Cross-layer call chain - DashboardController.Playbooks → Andromeda.Core.Models.ModelHelper.GetPlaybooks
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Models_ModelHelper_GetPlaybooks["Andromeda.Core.Models.ModelHelper.GetPlaybooks"]
DashboardController_Playbooks["DashboardController.Playbooks"]
DashboardController_Playbooks --> Andromeda_Core_Models_ModelHelper_GetPlaybooks
Detailed Analysis
Key Flows - Summary: Retrieve and filter playbooks by validating and matching playbook IDs. - Retrieve playbooks from ModelHelper and database, Split playbook ID string and select matching playbook models - Validate non-empty playbook ID string
Performance Issues - Summary: Using FirstOrDefault inside Select causes multiple database queries, harming performance. - FirstOrDefault inside Select triggers multiple database queries, Multiple queries degrade performance
Maintainability Issues - Summary: Chained calls and incomplete code reduce readability and maintainability. - Incomplete RedirectToAction calls
UX Impact Notes - Summary: Redirects on filtered collection and incomplete playbook handling degrade user experience. - Incomplete playbook request handling harms user experience - Redirect user if filtered collection is not empty
Test Case Ideas - and conditional redirects. - Handle empty playbook ID input - Verify redirect action on filtered collection conditions - Validate List method call and related conditions
Dependencies & Called Services - Summary: Uses core data types and project-specific models for service operations. - Enumerable for collections, IProjectModel interface, Int32 data type, ModelHelper utility, String data type
LoadPartialView¶
Summary: LoadPartialView sets WidgetID in ViewData and returns the PartialViewResult for valid inputs.
PartialViewResult DashboardController.LoadPartialView(string view, int? ViewId)
Routing
- URL:
/Dashboard/LoadPartialView
Detailed Analysis
Key Flows - Summary: LoadPartialView sets WidgetID in ViewData and returns the PartialViewResult for valid inputs. - Set 'WidgetID' in ViewData - Return corresponding PartialViewResult
Error Flows - Summary: Handle null or empty 'view' and invalid 'ViewId' parameters explicitly. - Null or empty 'view' parameter handling, Invalid 'ViewId' parameter handling
Maintainability Issues - Summary: Incomplete property names and code snippets reduce code clarity and maintainability. - Incomplete property name 'HasVa' causes confusion, Lone closing parenthesis indicates incomplete code and poor readability
UX Impact Notes - Summary: Dynamically loads partial views to update the user interface. - Returns PartialViewResult
Test Case Ideas - Summary: Verify PartialViewResult return - and ViewData logic based on ViewId. - Check for syntax errors and code completeness - Return PartialViewResult for valid view and ViewId - Conditional logic testing based on ViewId presence - Set correct WidgetID in ViewData for true/false ViewId - Return correct PartialView based on ViewId condition
InputSummaryPartialView¶
Summary: Clears 'ProjectData' session and returns the specified PartialView.
PartialViewResult DashboardController.InputSummaryPartialView(string view)
Routing
- URL:
/Dashboard/InputSummaryPartialView
Detailed Analysis
Key Flows - Summary: Clears 'ProjectData' session and returns the specified PartialView. - Return PartialView matching 'view' parameter
Security Issues - Summary: Removing 'ProjectData' session variable without checks risks information disclosure and session tampering. - Unvalidated removal of 'ProjectData' session variable
Maintainability Issues - Summary: Replace magic string 'ProjectData' with a constant for better maintainability. - Magic string 'ProjectData' used as session key, Define constant for session key
UX Impact Notes - Summary: Removing session data risks breaking UI consistency; dynamic PartialView updates UI. - Returning PartialView based on 'view' parameter updates UI dynamically
Test Case Ideas - Summary: Verify PartialView output, session variable removal, and model properties. - Verify returned PartialView model has 'InputSummary' set to true
LoadWidgetView¶
Summary: LoadWidgetView populates ViewData with widget details when the view string matches a dashboard widget.
ActionResult DashboardController.LoadWidgetView(string view)
Routing
- URL:
/Dashboard/LoadWidgetView
View Metadata
- View:
LoadWidgetView(Andromeda.Web\Views\Dashboard\LoadWidgetView.cshtml)
Detailed Analysis
Key Flows - Summary: LoadWidgetView populates ViewData with widget details when the view string matches a dashboard widget. - Set flags IsTable and ShowFilter accordingly
Error Flows - Summary: Handle null references and complete all conditional branches to prevent runtime errors. - Null reference risk from incomplete ViewData assignments - Empty else block causing unhandled cases and unexpected behavior
Security Issues - Summary: Failing to validate 'view' parameter risks unauthorized widget access and data leaks. - Lack of 'view' parameter validation, Unauthorized dashboard widget access, Potential information disclosure
Performance Issues - Summary: LoadWidgetView calls GetDashBoardWidgets without caching, risking performance degradation. - Uncached GetDashBoardWidgets call, Potential performance degradation on frequent calls
Maintainability Issues - Summary: Remove magic strings, fix syntax errors, eliminate dead code, and improve code clarity. - Use of magic strings for session keys and view identifiers, Incomplete code snippets with syntax errors and unclear variables, Unnecessary false statement reducing readability, Empty else block indicating dead or incomplete code
UX Impact Notes - Summary: ViewData properties and dashboard widget data directly control widget display and user experience. - ViewData properties control widget display and information presentation, Dashboard widget model population and data formatting affect user experience
Test Case Ideas - model assignment - Return expected data from GetActors and assign to ViewData['Model'] - Set ViewData['ShowFilter'] based on viewInfo and module value
Dependencies & Called Services - Summary: LoadWidgetView depends on data collections, actor and project models, and string processing. - Enumerable for data handling, IActorModel for actor data, IProjectModel for project data, String for text operations
OPActivitiesData¶
Summary: Fetch and filter activities and product factors by project and actor, then return processed data as JSON.
JsonResult DashboardController.OPActivitiesData(int? ProjID, int ActorID)
Routing
- HTTP:
GET - URL:
/Dashboard/OPActivitiesData
Cross-layer call chain - DashboardController.OPActivitiesData → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.OPActivitiesData → Andromeda.Core.Entities.Activity.getFrequency - DashboardController.OPActivitiesData → Andromeda.Core.Entities.OutProcessProps.getDay - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.OutProcessProps.getDay → Andromeda.Core.Extensions.LinqExtensions.ToOrdinalHtmlString - Andromeda.Core.Entities.OutProcessProps.getDay → Andromeda.Core.Extensions.LinqExtensions.ToOrdinalString - Andromeda.Core.Entities.OutProcessProps.getDay → Andromeda.Core.Extensions.LinqExtensions.ToNameString
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_Activity_getFrequency["Andromeda.Core.Entities.Activity.getFrequency"]
Andromeda_Core_Entities_OutProcessProps_getDay["Andromeda.Core.Entities.OutProcessProps.getDay"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Extensions_LinqExtensions_ToNameString["Andromeda.Core.Extensions.LinqExtensions.ToNameString"]
Andromeda_Core_Extensions_LinqExtensions_ToOrdinalHtmlString["Andromeda.Core.Extensions.LinqExtensions.ToOrdinalHtmlString"]
Andromeda_Core_Extensions_LinqExtensions_ToOrdinalString["Andromeda.Core.Extensions.LinqExtensions.ToOrdinalString"]
DashboardController_OPActivitiesData["DashboardController.OPActivitiesData"]
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToNameString
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToOrdinalHtmlString
Andromeda_Core_Entities_OutProcessProps_getDay --> Andromeda_Core_Extensions_LinqExtensions_ToOrdinalString
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_Activity_getFrequency
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_OutProcessProps_getDay
DashboardController_OPActivitiesData --> Andromeda_Core_Entities_ProjectData_GetActivities
Detailed Analysis
Key Flows - then return processed data as JSON. - Fetch activities and product factors from ActorModel and ControlModel if project data invalid - Return processed data as JsonResult
Error Flows - Summary: Handle null or mismatched project data by fetching from alternative models without explicit exception handling. - Fallback to ActorModel and ControlModel if project data is null or ProjectID mismatches ProjID, No explicit exception handling for potential code errors
Security Issues - Summary: Prevent SQL injection by sanitizing ProjID.Value and ActorID in LINQ queries. - SQL injection risk from unsanitized ProjID.Value, SQL injection risk from unsanitized ActorID
Performance Issues - Summary: Multiple LINQ joins and filters degrade performance on large datasets. - Multiple LINQ joins on large datasets - Multiple LINQ filters on large datasets
Maintainability Issues - Summary: Improve naming and replace magic strings and numbers with named constants. - Incomplete variable name 'facto' risks compilation errors, Magic strings like 'ProjectData' reduce maintainability, Magic numbers like 2 in Math.Round reduce code clarity
UX Impact Notes - Summary: Proper JSON formatting and error-free data ensure a positive user experience. - Proper JSON formatting, Error-free and complete data
Test Case Ideas - Summary: Verify correct data retrieval, filtering, output formatting, error handling, and performance of OPActivitiesData. - Fetch activities and product factors from ActorModel and ControlModel if projectData unavailable or mismatched - Handle matching and mismatching projectData.ProjectID and ProjID - Handle errors when database or dependencies are unavailable - Return JsonResult - Ensure performance with large datasets
Dependencies & Called Services - Summary: Uses models and data structures for activity processing and project management. - Activity model, Enumerable collections, Actor interface, Control interface, Mathematical utilities, OutProcess properties, Project data - Process interface
OPActivitiesDayData¶
Summary: Retrieve and filter project data, calculate effort for activities, and return filtered results as JSON.
JsonResult DashboardController.OPActivitiesDayData(int? ProjID, int ActorID, int day)
Routing
- HTTP:
GET - URL:
/Dashboard/OPActivitiesDayData
Cross-layer call chain - DashboardController.OPActivitiesDayData → Andromeda.Core.Entities.ProjectData.GetActivities - DashboardController.OPActivitiesDayData → Andromeda.Core.Entities.ProjectData.GetActors - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActors → Andromeda.Core.Models.ModelHelper.ProjectTimeZone
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
Andromeda_Core_Entities_ProjectData_GetActivities["Andromeda.Core.Entities.ProjectData.GetActivities"]
Andromeda_Core_Entities_ProjectData_GetActors["Andromeda.Core.Entities.ProjectData.GetActors"]
Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
DashboardController_OPActivitiesDayData["DashboardController.OPActivitiesDayData"]
Andromeda_Core_Entities_ProjectData_GetActivities --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_DataManager_GetDataList
Andromeda_Core_Entities_ProjectData_GetActors --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
DashboardController_OPActivitiesDayData --> Andromeda_Core_Entities_ProjectData_GetActivities
DashboardController_OPActivitiesDayData --> Andromeda_Core_Entities_ProjectData_GetActors
Detailed Analysis
Key Flows - and return filtered results as JSON. - Calculate daily effort based on team presence and activity type - Return filtered activities and effort data as JSON
Error Flows - Summary: Handle missing or mismatched data by fallback or skipping calculations - return empty if no effort. - Return empty JSON array if no activities have effort greater than zero
Security Issues - Summary: Direct session data access risks injection and unauthorized manipulation. - Direct session data access without validation, Lack of session data sanitization
Performance Issues - Summary: Optimize data retrieval and reduce memory usage and redundant queries. - Inefficient large data retrieval from session, High memory usage from ToList() on large collections, Multiple database calls for activities and actors, Repeated FirstOrDefault calls causing redundant queries
Maintainability Issues - Summary: The method mixes concerns, uses unclear magic values, and has tight coupling reducing maintainability. - Violates single responsibility by mixing data retrieval, filtering, and calculation, Uses unexplained magic properties and numbers without constants, Tightly coupled with ActorModel and ProcessMapModel, reducing flexibility, Unclear purpose of parameterless method call oList(), Complex method call chains hinder debugging and understanding
UX Impact Notes - Summary: Empty data responses and large data processing degrade user experience. - Empty JSON array responses without frontend handling, Large data retrieval and processing impacting response times
Test Case Ideas - and conditional logic. - Handling empty activities or actors returns empty JSON array - Conditional logic for orId equal and not equal to ActorID
Dependencies & Called Services - Summary: Uses data models and utilities for processing project activities. - Enumerable utilities, Actor data model, Mathematical functions, Project data structures - Process data model
TeamAnalysis¶
Summary: Retrieve project and team data, calculate effort metrics, filter active teams, aggregate tasks, and prepare data for view rendering.
ActionResult DashboardController.TeamAnalysis()
Routing
- URL:
/Dashboard/TeamAnalysis
Cross-layer call chain - DashboardController.TeamAnalysis → Andromeda.Core.Entities.Sched.StartTimeHour - DashboardController.TeamAnalysis → Andromeda.Core.Entities.Sched.GetHourEffort
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
DashboardController_TeamAnalysis["DashboardController.TeamAnalysis"]
DashboardController_TeamAnalysis --> Andromeda_Core_Entities_Sched_GetHourEffort
DashboardController_TeamAnalysis --> Andromeda_Core_Entities_Sched_StartTimeHour
View Metadata
- View:
TeamAnalysis(Andromeda.Web\Views\Dashboard\TeamAnalysis.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve project and team data, calculate effort metrics, filter active teams, aggregate tasks, and prepare data for view rendering. - Calculate minimum FTE from activities, Calculate peak tasks using scheduling and activity data - Fetch teams with location, arrows, activities, and properties - Retrieve current project ID, Initialize actor effort dictionary, Populate dictionary with minimum FTE data, Filter active, non-system teams, Group tasks by text ID and start hour, aggregate effort, Store processed data in ViewData for rendering
Performance Issues - Summary: Multiple LINQ operations and non-unique dictionary keys degrade performance and risk data loss. - Multiple LINQ operations on large datasets causing slow performance
Maintainability Issues - Summary: Commented-out code, unclear variables, incomplete declarations, and unclear types reduce maintainability. - Commented-out code reduces clarity, Unclear variable purpose (e.g., 'factors'), Incomplete variable declaration for 'actorEffort', Use of generic or unclear types (e.g., 'ring, int>'), Anonymous types in LINQ queries reduce readability
UX Impact Notes - Summary: Storing data in ViewData enhances the view with detailed team effort and peak task information. - Data storage in ViewData, Detailed team effort display, Peak task information presentation
Test Case Ideas - Summary: Validate TeamAnalysis data accuracy - Correct data return for valid project ID - Performance impact with large datasets and multiple LINQ operations
Dependencies & Called Services - Summary: Uses core collections, interfaces, and scheduling components for team analysis. - Dictionary collection, Enumerable utilities, IActorModel interface, IControlModel interface, Int32 data type, Sched scheduling component
CustomAnalysis¶
Summary: Retrieve and filter custom views and expressions, then assign them to ViewBag for the view.
ActionResult DashboardController.CustomAnalysis()
Routing
- URL:
/Dashboard/CustomAnalysis
View Metadata
- View:
CustomAnalysis(Andromeda.Web\Views\Dashboard\CustomAnalysis.cshtml) - Model:
Andromeda.Core.Entities.ProjectData
Detailed Analysis
Key Flows - then assign them to ViewBag for the view. - Assign filtered views and expressions to ViewBag
Performance Issues - Summary: Multiple database calls in quick succession degrade performance. - Multiple rapid database calls, Inefficient database access pattern
Maintainability Issues - Summary: The method has incomplete code and uses unclear magic strings. - Empty code chunk indicating incomplete implementation, Use of magic string 'CustomAnalysis' reduces code clarity and maintainability
Test Case Ideas - Summary: Verify ViewBag properties populate correctly with expected data and filter by viewType. - Populate ViewBag.CustomExpressions with expected properties, Filter ViewBag.CustomizeViewProperties by viewType 'CustomAnalysis'
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IProcessModel for process abstraction. - Enumerable for collection operations, IProcessModel for process abstraction
GetEffortDrillData¶
Summary: Retrieve and filter project activities and actors, then calculate and aggregate effort metrics per actor and team.
JsonResult DashboardController.GetEffortDrillData()
Routing
- HTTP:
GET - URL:
/Dashboard/GetEffortDrillData
Cross-layer call chain - DashboardController.GetEffortDrillData → Andromeda.Core.Entities.Activity.Effort - DashboardController.GetEffortDrillData → Andromeda.Core.Entities.Activity.IterationEffort - DashboardController.GetEffortDrillData → Andromeda.Core.Entities.Activity.ReworkEffort
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_IterationEffort["Andromeda.Core.Entities.Activity.IterationEffort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
DashboardController_GetEffortDrillData["DashboardController.GetEffortDrillData"]
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_IterationEffort
DashboardController_GetEffortDrillData --> Andromeda_Core_Entities_Activity_ReworkEffort
Detailed Analysis
Key Flows - Summary: Retrieve and filter project activities and actors, then calculate and aggregate effort metrics per actor and team. - Calculate total and rework effort per actor - Retrieve arrow details, activities, and actors for the project, Filter out OutProcess activities and link to actors, Retrieve minimum FTE per actor from activities, Aggregate and round effort metrics at team level
Error Flows - Summary: The method lacks explicit error handling for invalid or missing project IDs. - Missing error handling for invalid project IDs, No exception management for missing project IDs
Performance Issues - Summary: Multiple database calls and repeated LINQ Sum operations degrade performance. - Excessive database calls in ProcessMapModel.GetArrowDetail and ActorModel.getActivities, Repeated LINQ Sum operations on ActorActivities and Teams causing redundant iterations
Maintainability Issues - anonymous return objects - Anonymous objects for data return reducing clarity
Test Case Ideas - Summary: Validate accurate effort drill data calculations and correct aggregation by actor and team. - Correct effort drill data for valid project ID, Accurate effort and rework effort calculations per actor, Correct retrieval of minimum FTE values per actor, Accurate team-level effort sums and rounding
Dependencies & Called Services - Summary: Uses activity tracking, enumerable collections, actor and process models, and math utilities. - Activity tracking, Enumerable collections, Actor model interface, Mathematical utilities - Process model interface
GetTeamwiseCost¶
Summary: Retrieve activities and actor costs, calculate team costs, and return aggregated results as JSON.
JsonResult DashboardController.GetTeamwiseCost()
Routing
- HTTP:
GET - URL:
/Dashboard/GetTeamwiseCost
Detailed Analysis
Key Flows - and return aggregated results as JSON. - Calculate team costs by matching actors and applying count and factor - Fetch activities from process model - Return aggregated team-wise costs as JSON
Performance Issues - Summary: Multiple database queries degrade performance in LINQ using Any() and FirstOrDefault(). - Multiple database queries, Use of Any() in LINQ, Use of FirstOrDefault() in LINQ
Maintainability Issues - Summary: Replace magic number with named constant to improve code clarity and maintainability. - Use named constant instead of magic number in cost calculation
UX Impact Notes - Summary: Improper client-side handling of JSON response degrades user experience. - JSON response requires proper client-side handling, Improper display harms user experience
Test Case Ideas - Summary: Verify HTTP GET routing and correct team-wise cost retrieval with edge case handling. - HTTP GET routing verification, Correct team-wise cost retrieval for project ID, Handling no activities or actors, Handling no actor total costs
Dependencies & Called Services - Summary: Uses models and enumerable collections for team-wise cost calculation. - Enumerable collections, IActorModel dependency, IInfraModel dependency, IProcessModel dependency
GetCompleteActivityData¶
Summary: Retrieve and process project data to analyze activities, risks, controls, and efforts for risk and automation insights.
JsonResult DashboardController.GetCompleteActivityData()
Routing
- HTTP:
GET - URL:
/Dashboard/GetCompleteActivityData
Cross-layer call chain - DashboardController.GetCompleteActivityData → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GetCompleteActivityData → Andromeda.Core.Entities.Activity.ReworkEffort - DashboardController.GetCompleteActivityData → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.GetCompleteActivityData → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - DashboardController.GetCompleteActivityData → Andromeda.Core.Entities.Activity.Effort - DashboardController.GetCompleteActivityData → Insorce.Helpers.Helpers.getSkillLevel - DashboardController.GetCompleteActivityData → Andromeda.Core.Entities.Activity.GetNVAType - DashboardController.GetCompleteActivityData → Andromeda.Core.Entities.Activity.getFrequency - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_GetNVAType["Andromeda.Core.Entities.Activity.GetNVAType"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Activity_getFrequency["Andromeda.Core.Entities.Activity.getFrequency"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GetCompleteActivityData["DashboardController.GetCompleteActivityData"]
Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_GetNVAType
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_ReworkEffort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetCompleteActivityData --> Andromeda_Core_Entities_Activity_getFrequency
DashboardController_GetCompleteActivityData --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_GetCompleteActivityData --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetCompleteActivityData --> Insorce_Helpers_Helpers_getSkillLevel
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
Detailed Analysis
Key Flows - Summary: Retrieve and process project data to analyze activities, risks, controls, and efforts for risk and automation insights. - Calculate and enrich activity data with effort metrics, skill scores, and automation classifications - Retrieve project data from activities, actors, controls, risks, and process maps, Group and process risk controls and lines of defence to identify control paths and end nodes, Filter and aggregate actors and activities for effort and risk analysis, Aggregate undesired path efforts to compute overall undesired effort metrics
Error Flows - Summary: Handle exceptions from invalid conversions and null references in activity data processing. - Null reference exceptions from unchecked null collections or objects
Security Issues - Summary: Sanitize CurProjId to prevent SQL injection. - SQL injection risk from unsanitized CurProjId
Performance Issues - Summary: Excessive LINQ and list operations cause high CPU and memory usage, risking N+1 queries. - Multiple database queries causing overhead, Extensive use of LINQ methods like ToList, GroupBy, Distinct, Any, Repeated Contains calls on large lists with O(n) complexity, Loops combined with LINQ increasing computational cost, Multiple ToList calls causing large memory allocations, FirstOrDefault and Any usage causing N+1 query problems, Incomplete or incorrect loop declarations reducing processing efficiency
Maintainability Issues - Summary: The method suffers from poor readability, unclear naming, missing documentation, and potential syntax errors. - Dense, complex code with many variables and method calls, Use of magic numbers reduces code clarity, Non-descriptive variable names hinder readability, Long parameter lists complicate understanding and maintenance, Lack of comments and documentation, Potential syntax errors and incomplete lambda expressions
UX Impact Notes - Summary: Conditional input logic affects data display and incomplete code causes UX issues. - Conditional logic based on input strings affects data presentation
Test Case Ideas - conditional logic - and performance with varied datasets. - Filtering and grouping logic correctness and performance - Performance impact on LINQ queries and list operations with large datasets - Processing automation paths and schedules including missing or empty child paths
Dependencies & Called Services - Summary: Uses data models, collections, and utility classes for activity data processing. - Activity data model, Boolean operations, Type conversion utilities, Enumerable collections, Helper functions, Actor, Control, FinalPlan, Process, Risk models, Integer operations, LINQ extensions, List collections, Mathematical functions, String operations, TimeSpan handling - Process extensions
GetPeakUtilizationData¶
Summary: Aggregate hourly actor effort data to compute daily and hourly utilization metrics.
JsonResult DashboardController.GetPeakUtilizationData()
Routing
- HTTP:
GET - URL:
/Dashboard/GetPeakUtilizationData
Cross-layer call chain - DashboardController.GetPeakUtilizationData → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GetPeakUtilizationData → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - DashboardController.GetPeakUtilizationData → Andromeda.Core.Entities.Activity.TotalEffort - DashboardController.GetPeakUtilizationData → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - DashboardController.GetPeakUtilizationData → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - DashboardController.GetPeakUtilizationData → Andromeda.Core.Entities.Actor.OverCapacity
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Entities_Actor_OverCapacity["Andromeda.Core.Entities.Actor.OverCapacity"]
Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GetPeakUtilizationData["DashboardController.GetPeakUtilizationData"]
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_OverCapacity
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_GetPeakUtilizationData --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - Summary: Aggregate hourly actor effort data to compute daily and hourly utilization metrics. - Calculate daily utilization, Calculate hourly utilization - Group hourly actor effort data
Performance Issues - Summary: Multiple database calls and repeated LINQ operations degrade performance with large datasets. - Multiple database calls impact performance, Complex and nested LINQ queries degrade performance under load, Repeated Sum operations on the same collection require optimization
Maintainability Issues - Summary: Code uses unclear magic numbers, complex nested queries, anonymous types, and commented-out code. - Unexplained magic numbers reduce code clarity, Commented-out code indicates incomplete or abandoned functionality, Extensive anonymous types hinder readability and maintainability, Nested LINQ queries increase complexity and reduce readability
UX Impact Notes - Summary: Returns detailed utilization and team metrics for dashboard visualization. - Detailed utilization metrics, Team performance data, Supports dashboard UI elements
Test Case Ideas - Summary: Test GetPeakUtilizationData for correctness, performance, and calculation accuracy. - Return expected data for valid projects - Performance and responsiveness under load and large datasets
Dependencies & Called Services - Summary: Uses models and collections to process and analyze activity data for peak utilization. - Activity data model, Actor interface, DateTime handling, Enumerable collections, Gantt chart utilities, IActorModel interface, IFinalPlanModel interface, IProcessModel interface, List collections, Math utilities - ProcessExtensions methods
GetAutomatableGridData¶
Summary: Retrieve and process project automation data, calculate metrics, and return results as JSON.
JsonResult DashboardController.GetAutomatableGridData()
Routing
- HTTP:
GET - URL:
/Dashboard/GetAutomatableGridData
Cross-layer call chain - DashboardController.GetAutomatableGridData → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GetAutomatableGridData → Andromeda.Core.Services.Algorithms.Delooper.deloop - DashboardController.GetAutomatableGridData → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - DashboardController.GetAutomatableGridData → Andromeda.Core.Entities.Activity.Effort - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping["Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GetAutomatableGridData["DashboardController.GetAutomatableGridData"]
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetAutomatableGridData --> Andromeda_Core_Entities_Activity_Effort
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_GetAutomatableGridData --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - and return results as JSON. - Calculate effort and benefit metrics with division-by-zero handling - Return aggregated metrics and processed data as JSON
Performance Issues - Summary: Optimize data access and iteration to prevent slowdowns on large datasets. - Multiple ToList() calls loading entire datasets into memory
Maintainability Issues - Summary: Remove magic strings, use descriptive variable names, and eliminate unused variables. - Use constants instead of magic strings and hardcoded numeric indices, Rename variables to descriptive names for clarity, Remove unused variables indicating dead code
UX Impact Notes - Summary: Provides automation metrics to improve automation grid UI display. - Return JSON with automation effort metrics
Test Case Ideas - Summary: Verify accurate data retrieval, correct activity mapping, metric calculations, and performance under load. - Performance and correctness with large datasets
Dependencies & Called Services - Summary: Uses core collections, interfaces, and utility classes for data processing and modeling. - Activity service, Dictionary collection, Enumerable utilities, IActorModel interface, IControlModel interface, IFinalPlanModel interface, IProcessModel interface, List collection, Math utilities, String utilities - ProcessExtensions methods
GetControlsNodeData¶
Summary: Aggregate project activities, risks, and controls, calculate control effectiveness and detail level, then return results as JSON.
JsonResult DashboardController.GetControlsNodeData()
Routing
- HTTP:
GET - URL:
/Dashboard/GetControlsNodeData
Cross-layer call chain - DashboardController.GetControlsNodeData → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GetControlsNodeData → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - DashboardController.GetControlsNodeData → Andromeda.Core.Services.Algorithms.Delooper.deloop - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID
Call Chain Diagram¶
flowchart TD
Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows["Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows"]
Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GetControlsNodeData["DashboardController.GetControlsNodeData"]
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_Algorithms_Delooper_deloop
DashboardController_GetControlsNodeData --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - then return results as JSON. - Calculate control effectiveness and level of detail using aggregated data and config - Return aggregated and calculated data as JsonResult
Performance Issues - Summary: Using Any() and FirstOrDefault() inside Select() causes multiple database queries and degrades performance. - Use of Any() inside Select() triggers multiple database queries, Use of FirstOrDefault() inside Select() triggers multiple database queries, Multiple queries degrade performance during grouping objective risks
Maintainability Issues - Summary: Refactor method to improve clarity and reduce complexity for maintainability. - Avoid magic numbers like -1 in filtering, Replace anonymous types with named types for grouping and selection, Reduce method complexity by simplifying variables and calls
Test Case Ideas - Summary: Verify GetControlsNodeData returns accurate - Calculate control effectiveness and level of detail accurately - Handle no objective risks scenario - Return correct data for valid project ID
Dependencies & Called Services - Summary: Uses collections and domain models for process, control, actor, and risk data handling. - Enumerable for collection operations, List for data storage, IActorModel for actor data, IControlModel for control data, IProcessModel for process data, IRiskModel for risk data - ProcessExtensions for process-related utilities
GetCompetencyandCompensation¶
Summary: Retrieve project data, calculate actor costs in USD and another currency, then return JSON results.
JsonResult DashboardController.GetCompetencyandCompensation()
Routing
- HTTP:
GET - URL:
/Dashboard/GetCompetencyandCompensation
Cross-layer call chain - DashboardController.GetCompetencyandCompensation → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
DashboardController_GetCompetencyandCompensation["DashboardController.GetCompetencyandCompensation"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GetCompetencyandCompensation --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
Detailed Analysis
Key Flows - then return JSON results. - Calculate actor costs in USD using FX rates - Fetch project actor list with location data - Return processed data as JSON
Performance Issues - Summary: GetCompetencyandCompensation suffers performance issues from slow dependencies and inefficient LINQ usage. - Performance degradation from slow GetActorsWithLocation or GetFxRates methods, Inefficient LINQ First() and Any() calls on large fxRts collection
Maintainability Issues - Summary: External dependencies and magic numbers reduce code maintainability and clarity. - Dependence on multiple external dependencies complicates maintenance and testing, Use of magic numbers reduces code clarity and maintainability
Test Case Ideas - Summary: Verify data retrieval, currency conversion, actor filtering, cost calculation, and JSON output. - Calculate costs in USD for diverse skill currencies - Return correct JSON data - Handle empty actor list gracefully
Dependencies & Called Services - Summary: Utilizes data conversion, enumeration, actor and infrastructure models, LINQ, and string operations. - Data conversion utilities, Enumerable collections, Actor model interfaces, Infrastructure model interfaces, LINQ extensions, String manipulation
GetTeamSkillCharts¶
Summary: Retrieve project data, generate or assign cluster evaluations, associate skill scores with activities, and group data for JSON output.
JsonResult DashboardController.GetTeamSkillCharts()
Routing
- HTTP:
GET - URL:
/Dashboard/GetTeamSkillCharts
Cross-layer call chain - DashboardController.GetTeamSkillCharts → Insorce.Helpers.ClusterHelper.GenerateCluster - DashboardController.GetTeamSkillCharts → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - DashboardController.GetTeamSkillCharts → Andromeda.Core.Entities.Activity.TotalEffort - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Services.KClusters.RunClustering - Insorce.Helpers.ClusterHelper.GenerateCluster → Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse - Insorce.Helpers.ClusterHelper.GenerateCluster → Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace["Andromeda.Core.Extensions.LinqExtensions.ReplaceSpecialCharwithSpace"]
Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
Andromeda_Core_Services_KClusters_RunClustering["Andromeda.Core.Services.KClusters.RunClustering"]
DashboardController_GetTeamSkillCharts["DashboardController.GetTeamSkillCharts"]
Insorce_Helpers_ClusterHelper_GenerateCluster["Insorce.Helpers.ClusterHelper.GenerateCluster"]
Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse["Insorce.Helpers.InsorceOpenAICalls.GenerateClusterResponse"]
DashboardController_GetTeamSkillCharts --> Andromeda_Core_Entities_Activity_TotalEffort
DashboardController_GetTeamSkillCharts --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
DashboardController_GetTeamSkillCharts --> Insorce_Helpers_ClusterHelper_GenerateCluster
Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Extensions_LinqExtensions_ReplaceSpecialCharwithSpace
Insorce_Helpers_ClusterHelper_GenerateCluster --> Andromeda_Core_Services_KClusters_RunClustering
Insorce_Helpers_ClusterHelper_GenerateCluster --> Insorce_Helpers_InsorceOpenAICalls_GenerateClusterResponse
Detailed Analysis
Key Flows - generate or assign cluster evaluations - Assign cluster keys from cluster evaluation results
Error Flows - Summary: Handles null checks to prevent errors and conditionally exits on missing cluster data. - Null checks for rEval and actData to handle missing data
Performance Issues - Summary: LINQ operations on large in-memory collections degrade performance. - High memory usage during grouping and summing large datasets
Maintainability Issues - Summary: Tight coupling and unclear code reduce maintainability and complicate testing. - Tight coupling with multiple models complicates modifications and testing, Incomplete and truncated code snippets reduce clarity, Anonymous types in LINQ queries hinder understanding and maintenance, Undescriptive variable names reduce readability, Typos indicate code quality issues, Magic numbers reduce readability, Commented out code obscures intended functionality
Test Case Ideas - and data updates. - Check for syntax errors and code completeness - Handle empty actors list and large datasets - Return correct data for valid project ID - Set 'ta.ClusterRank' with various input values - Update 'actData.Cost' with populated and empty skillMatrix lists
Dependencies & Called Services - Summary: Uses utility, data processing, and model interfaces for team skill chart generation. - Activity service, ClusterHelper utility, Data conversion utilities, Enumerable collections, Actor, Control, HR, Process model interfaces, LinqExtensions for query operations, Math utilities, String utilities
GetActorInfraCost¶
Summary: Calculate and group actor infrastructure costs by location, then return as JSON.
JsonResult DashboardController.GetActorInfraCost()
Routing
- HTTP:
GET - URL:
/Dashboard/GetActorInfraCost
Cross-layer call chain - DashboardController.GetActorInfraCost → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - DashboardController.GetActorInfraCost → Andromeda.Core.Services.ProcessExtensions.FindByID - DashboardController.GetActorInfraCost → Andromeda.Core.Entities.Actor.GetLocation - DashboardController.GetActorInfraCost → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter
Call Chain Diagram¶
flowchart TD
Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
DashboardController_GetActorInfraCost["DashboardController.GetActorInfraCost"]
Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GetActorInfraCost --> Andromeda_Core_Entities_Actor_GetLocation
DashboardController_GetActorInfraCost --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
DashboardController_GetActorInfraCost --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
DashboardController_GetActorInfraCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis
Key Flows - then return as JSON. - Calculate actor infrastructure costs using total costs, hourly efforts, currency conversion, count, and time period - Return grouped data as JSON
Error Flows - Summary: Handle empty or null data collections to prevent calculation failures. - Handle empty data collections - Handle null data collections - Prevent calculation failures from missing data
Performance Issues - Summary: Excessive ToList(), Any(), and FirstOrDefault() calls degrade performance on large collections. - Multiple ToList() calls load large datasets into memory
Maintainability Issues - Summary: Hardcoded values and anonymous types reduce code readability and maintainability. - Hardcoded project IDs and numeric constants, Use of anonymous types in LINQ projections
UX Impact Notes - Summary: Improperly formatted or erroneous JSON grouped by location code degrades user experience. - JSON grouped by location code, Data formatting errors, User experience degradation
Test Case Ideas - Summary: Verify GetActorInfraCost returns accurate - Correct infrastructure cost data for project ID, Accurate currency conversion on cost fields, Proper grouping by LocationCode in JSON response
Dependencies & Called Services - Summary: Uses actor models, process and infrastructure extensions, and collection utilities. - Actor models (IActorModel, IControlModel, IHRModel, IInfraModel, IProcessModel), Enumerable and List collections, Gantt for scheduling or visualization - Process and LINQ extensions
GetProductsOfProjects¶
Summary: Retrieve current project ID, fetch associated product factors, and return as JSON.
JsonResult DashboardController.GetProductsOfProjects()
Routing
- HTTP:
GET - URL:
/Dashboard/GetProductsOfProjects
Detailed Analysis
Key Flows - and return as JSON. - Fetch product factors for project - Return product factors as JSON result
Error Flows - Summary: Handle missing project ID gracefully in GetProductsOfProjects. - Missing project ID in registry, Graceful error handling for invalid project ID
Performance Issues - Summary: Large product factor lists degrade performance due to list conversion and JSON serialization. - Performance degradation with large product factor lists, Inefficient list conversion, Costly JSON serialization
Maintainability Issues - Summary: The method's tight coupling with Registry and ControlModel hinders maintenance and testing. - Tight coupling with Registry class, Tight coupling with ControlModel class, Complicates maintenance and testing
Test Case Ideas - Summary: Verify GetProductsOfProjects handles HTTP GET - returns correct products - Handle HTTP GET requests - Return correct product factors for project ID
Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IControlModel for project control logic. - IControlModel for project control logic
GetActivitiesActorsOfProject¶
Summary: The method handles an HTTP GET request to fetch activities and actors with locations for the current project and returns them as JSON.
JsonResult DashboardController.GetActivitiesActorsOfProject()
Routing
- HTTP:
GET - URL:
/Dashboard/GetActivitiesActorsOfProject
Detailed Analysis
Key Flows - Summary: The method handles an HTTP GET request to fetch activities and actors with locations for the current project and returns them as JSON. - Fetch activities using ActorModel.getActivities with project ID, Fetch actors and locations using ActorModel.GetActorsWithLocation with project ID - Return activities and actors as JSON allowing GET requests
Error Flows - Summary: The method lacks explicit error handling for invalid project IDs and data retrieval failures. - No error handling for missing or invalid project IDs, No handling of data retrieval failures
Performance Issues - Summary: Using ToList() on large datasets causes high memory use and degrades performance. - Excessive memory allocation from ToList() on large datasets
Maintainability Issues - Summary: The method's tight coupling to ActorModel and Registry hinders testing and maintenance. - Tight coupling to ActorModel and Registry, Complicates unit testing and maintenance
UX Impact Notes - Summary: The method supports RESTful GET requests, enabling straightforward client access. - HTTP GET attribute for RESTful access, Improved client interaction with endpoint
Test Case Ideas - Summary: Verify HTTP GET access and correct JSON responses for valid and empty project data. - HTTP GET method accessibility, Correct JSON response with activities and actors for valid project ID, Empty activity and actor lists for invalid or non-existent project ID
Dependencies & Called Services - Summary: Uses Enumerable and IActorModel for processing project actors. - Enumerable for collection operations, IActorModel for actor data representation
GetModesandSystemsByTeam¶
Summary: Retrieve and process activity and actor data to analyze transfer modes, DOE properties, and system changes, then return aggregated results as JSON.
JsonResult DashboardController.GetModesandSystemsByTeam()
Routing
- HTTP:
GET - URL:
/Dashboard/GetModesandSystemsByTeam
Detailed Analysis
Key Flows - then return aggregated results as JSON. - Aggregate and return actor data
Error Flows - Summary: Handle errors from invalid project IDs and database query failures. - Invalid project ID errors, Database query failure exceptions, Data retrieval and processing exceptions
Security Issues - Summary: Prevent SQL injection by sanitizing ProjectID input. - SQL injection risk from unsanitized ProjectID
Performance Issues - Summary: Optimize database queries and LINQ usage to reduce redundant data access and memory overhead. - Contains() in LINQ slowing queries on large datasets
Maintainability Issues - Summary: Anonymous objects, complex LINQ queries, and magic strings reduce code maintainability. - Extensive use of anonymous objects, Complex LINQ queries with multiple joins and nested lambdas, Use of magic strings like 'DOE'
Test Case Ideas - Summary: Verify correct data retrieval, filtering, calculations, and performance for GetModesandSystemsByTeam. - Correct setting of Title in transfer mode grouping - Efficient performance with large datasets
Dependencies & Called Services - Summary: Uses collections, interfaces, and basic utilities for data handling and processing. - Enumerable for collection operations, IActorModel interface, IControlModel interface, IProcessModel interface, List collection, Math utilities, String utilities
GetTeamIncrementData¶
Summary: GetTeamIncrementData returns scheduled observations for a valid team excluding 'FreshActor' reasons, projecting data for client use.
JsonResult DashboardController.GetTeamIncrementData(int? tmId)
Routing
- HTTP:
GET - URL:
/Dashboard/GetTeamIncrementData
Detailed Analysis
Key Flows - Summary: GetTeamIncrementData returns scheduled observations for a valid team excluding 'FreshActor' reasons - Filter scheduled observations by team ID excluding 'FreshActor' reasons, Project filtered observations into simplified structure for client consumption
Performance Issues - Summary: Using ToList() after filtering loads excessive data into memory, degrading performance. - Excessive memory use from ToList() after filtering
Maintainability Issues - Summary: Using a hardcoded string reduces maintainability and flexibility. - Hardcoded 'FreshActor' string for filtering observations
UX Impact Notes - Summary: Return filtered observations as JSON to enable dynamic UI updates. - Dynamic UI updates
Test Case Ideas - Summary: Verify method invocation and correct data return for valid team ID. - Return correct filtered data for valid team ID
Dependencies & Called Services - Summary: Uses data collections, actor models, and string manipulation. - Enumerable for data collections, IActorModel for actor representation, String for text handling