Skip to content

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

  • ActivitiesPropertiesActivitiesProperties (Andromeda.Web\Views\Dashboard\ActivitiesProperties.cshtml)
  • ActorClusterActorCluster (Andromeda.Web\Views\Dashboard\ActorCluster.cshtml)
  • ProcessMapViewsProcessMapViews (Andromeda.Web\Views\Dashboard\ProcessMapViews.cshtml)
  • SIPOCSIPOC (Andromeda.Web\Views\Dashboard\SIPOC.cshtml)
  • InteractionModelInteractionModel (Andromeda.Web\Views\Dashboard\InteractionModel.cshtml)
  • FormsBrsByTeamFormsBrsByTeam (Andromeda.Web\Views\Dashboard\FormsBrsByTeam.cshtml)
  • DeadlinePathsDeadlinePaths (Andromeda.Web\Views\Dashboard\DeadlinePaths.cshtml)
  • ReworkPathsReworkPaths (Andromeda.Web\Views\Dashboard\ReworkPaths.cshtml)
  • UndesiredOutcomeTableUndesiredOutcomeTable (Andromeda.Web\Views\Dashboard\UndesiredOutcomeTable.cshtml)
  • ActorUtilizationActorUtilization (Andromeda.Web\Views\Dashboard\ActorUtilization.cshtml)
  • ActorHourlyDelaysActorHourlyDelays (Andromeda.Web\Views\Dashboard\ActorHourlyDelays.cshtml)
  • ActorHourlyUtilizationActorHourlyUtilization (Andromeda.Web\Views\Dashboard\ActorHourlyUtilization.cshtml)
  • TeamHourlyAHTTeamHourlyAHT (Andromeda.Web\Views\Dashboard\TeamHourlyAHT.cshtml)
  • TeamDelayReductionTeamDelayReduction (Andromeda.Web\Views\Dashboard\TeamDelayReduction.cshtml)
  • TeamDelaysGraphTeamDelaysGraph (Andromeda.Web\Views\Dashboard\TeamDelaysGraph.cshtml)
  • CriticalPathActivitiesCriticalPathActivities (Andromeda.Web\Views\Dashboard\CriticalPathActivities.cshtml)
  • DeltaAnalysisDeltaAnalysis (Andromeda.Web\Views\Dashboard\DeltaAnalysis.cshtml)
  • ImplementationAnalysisImplementationAnalysis (Andromeda.Web\Views\Dashboard\ImplementationAnalysis.cshtml)
  • ActivityEffortGraphActivityEffortGraph (Andromeda.Web\Views\Dashboard\ActivityEffortGraph.cshtml)
  • ChartsUnitScheduleChartsUnitSchedule (Andromeda.Web\Views\Dashboard\ChartsUnitSchedule.cshtml)
  • UnitsAndResourceHourlyGraphUnitsAndResourceHourlyGraph (Andromeda.Web\Views\Dashboard\UnitsAndResourceHourlyGraph.cshtml)
  • CriticalPathDelaysGraphCriticalPathDelaysGraph (Andromeda.Web\Views\Dashboard\CriticalPathDelaysGraph.cshtml)
  • TeamsUtilizationTeamsUtilization (Andromeda.Web\Views\Dashboard\TeamsUtilization.cshtml)
  • DaywiseTeamUtilizationDaywiseTeamUtilization (Andromeda.Web\Views\Dashboard\DaywiseTeamUtilization.cshtml)
  • TeamMergeWithOutProcessTeamMergeWithOutProcess (Andromeda.Web\Views\Dashboard\TeamMergeWithOutProcess.cshtml)
  • RiskMetricEscalationRiskMetricEscalation (Andromeda.Web\Views\Dashboard\RiskMetricEscalation.cshtml)
  • RiskMetricsRiskMetrics (Andromeda.Web\Views\Dashboard\RiskMetrics.cshtml)
  • RiskCoverageRiskCoverage (Andromeda.Web\Views\Dashboard\RiskCoverage.cshtml)
  • ActivityVsCompensatoryActivityActivityVsCompensatoryActivity (Andromeda.Web\Views\Dashboard\ActivityVsCompensatoryActivity.cshtml)
  • EfficacyOfCompensatingControlsEfficacyOfCompensatingControls (Andromeda.Web\Views\Dashboard\EfficacyOfCompensatingControls.cshtml)
  • LinesOfDefenceLinesOfDefence (Andromeda.Web\Views\Dashboard\LinesOfDefence.cshtml)
  • ObjectiveDetailsObjectiveDetails (Andromeda.Web\Views\Dashboard\ObjectiveDetails.cshtml)
  • RiskMetricsByActivityRiskMetricsByActivity (Andromeda.Web\Views\Dashboard\RiskMetricsByActivity.cshtml)
  • ControlProceduresControlProcedures (Andromeda.Web\Views\Dashboard\ControlProcedures.cshtml)
  • EAControlsEAControls (Andromeda.Web\Views\Dashboard\EAControls.cshtml)
  • ControlExistenceTableControlExistenceTable (Andromeda.Web\Views\Dashboard\ControlExistenceTable.cshtml)
  • EffectivenessTableEffectivenessTable (Andromeda.Web\Views\Dashboard\EffectivenessTable.cshtml)
  • CostOfControlCostOfControl (Andromeda.Web\Views\Dashboard\CostOfControl.cshtml)
  • TeamMonthlyUtilizationTeamMonthlyUtilization (Andromeda.Web\Views\Dashboard\TeamMonthlyUtilization.cshtml)
  • HRTeamsComparisonHRTeamsComparison (Andromeda.Web\Views\Dashboard\HRTeamsComparison.cshtml)
  • HRProductComparisonHRProductComparison (Andromeda.Web\Views\Dashboard\HRProductComparison.cshtml)
  • OrganizationStructureOrganizationStructure (Andromeda.Web\Views\Dashboard\OrganizationStructure.cshtml)
  • TeamCompetencyTeamCompetency (Andromeda.Web\Views\Dashboard\TeamCompetency.cshtml)
  • TeamCompetencyChartTeamCompetencyChart (Andromeda.Web\Views\Dashboard\TeamCompetencyChart.cshtml)
  • HRTeamOverViewHRTeamOverView (Andromeda.Web\Views\Dashboard\HRTeamOverView.cshtml)
  • TeamCompetencyandCostGraphTeamCompetencyandCostGraph (Andromeda.Web\Views\Dashboard\TeamCompetencyandCostGraph.cshtml)
  • TeamEffortUtilizationTeamEffortUtilization (Andromeda.Web\Views\Dashboard\TeamEffortUtilization.cshtml)
  • InfraCostComponentsInfraCostComponents (Andromeda.Web\Views\Dashboard\InfraCostComponents.cshtml)
  • InfraLocationsInfraLocations (Andromeda.Web\Views\Dashboard\InfraLocations.cshtml)
  • InterfaceRequirementsInterfaceRequirements (Andromeda.Web\Views\Dashboard\InterfaceRequirements.cshtml)
  • TotalCostTotalCost (Andromeda.Web\Views\Dashboard\TotalCost.cshtml)
  • CycleTimeCycleTime (Andromeda.Web\Views\Dashboard\CycleTime.cshtml)
  • ClusterVSMClusterVSM (Andromeda.Web\Views\Dashboard\ClusterVSM.cshtml)
  • ProjectChartProjectChart (Andromeda.Web\Views\Dashboard\ProjectChart.cshtml)
  • ClusterDashboardClusterDashboard (Andromeda.Web\Views\Dashboard\ClusterDashboard.cshtml)
  • ClusterMaxDelayClusterMaxDelay (Andromeda.Web\Views\Dashboard\ClusterMaxDelay.cshtml)
  • TeamDashboardTeamDashboard (Andromeda.Web\Views\Dashboard\TeamDashboard.cshtml)
  • TeamWidgetDashboardTeamWidgetDashboard (Andromeda.Web\Views\Dashboard\TeamWidgetDashboard.cshtml)
  • TeamMaxDelayTeamMaxDelay (Andromeda.Web\Views\Dashboard\TeamMaxDelay.cshtml)
  • TechnologyDashboardTechnologyDashboard (Andromeda.Web\Views\Dashboard\TechnologyDashboard.cshtml)
  • PathClusterAnalysisPathClusterAnalysis (Andromeda.Web\Views\Dashboard\PathClusterAnalysis.cshtml)
  • GetDashboardGetDashboard (Andromeda.Web\Views\Dashboard\GetDashboard.cshtml)
  • CustomDashboardCustomDashboard (Andromeda.Web\Views\Dashboard\CustomDashboard.cshtml)
  • CustomWidgetViewsCustomWidgetViews (Andromeda.Web\Views\Dashboard\CustomWidgetViews.cshtml)
  • MilestoneVolumeFlowMilestoneVolumeFlow (Andromeda.Web\Views\Dashboard\MilestoneVolumeFlow.cshtml)
  • IssuesLeversIssuesLevers (Andromeda.Web\Views\Dashboard\IssuesLevers.cshtml)
  • LoadWidgetViewLoadWidgetView (Andromeda.Web\Views\Dashboard\LoadWidgetView.cshtml)
  • TeamAnalysisTeamAnalysis (Andromeda.Web\Views\Dashboard\TeamAnalysis.cshtml)
  • CustomAnalysisCustomAnalysis (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