Skip to content

LocationsController

  • Namespace: Insorce.Controllers
  • Project: Andromeda.Web

Overview

The LocationsController manages project-related location, team, scheduling, and simulation features within the application.

Feature Summary

  • Implements location-based project management including team locations, working hours, and geolocation of actors.
  • Supports project simulation, optimization, and analysis workflows such as deadline optimization, critical path analysis, and effort calculations.
  • Manages automation systems, control coverage, rework reduction, and non-productive activity tracking.
  • Handles implementation plans, recommendations, and team shift scheduling.
  • Provides endpoints for retrieving and updating project data, actor efforts, training needs, and risk controls.

UX Summary

  • Multiple views render detailed project, team, and activity data affecting user navigation and workflow.
  • JSON responses support dynamic UI updates for simulations, optimizations, and data filtering.
  • Redirects and conditional rendering influence user flow based on project state and input validity.
  • Some methods return incomplete or inconsistent data impacting UI clarity and user experience.
  • Error handling and input validation gaps may cause disruptions or degraded user interactions.

Data Dependencies

  • Relies on project, actor, activity, and simulation data models.
  • Uses session state and cookies for user and project context.
  • Interacts with repositories or services for data retrieval and persistence (e.g., HRModel, ActorModel).
  • Processes JSON deserialization for input data and returns JSON for client consumption.
  • Utilizes configuration settings and external data such as foreign exchange rates.

Authentication / Authorization Notes

  • Authentication and authorization are implied but not explicitly detailed.
  • Several methods lack input validation and sanitization, exposing risks of SQL injection, XSS, and deserialization attacks.
  • Session and cookie data are used without sufficient validation, creating potential security vulnerabilities.
  • Some methods expose sensitive operations without clear permission checks, increasing risk of unauthorized access.

Controller Call Chain Diagram

flowchart TD
    Andromeda_Core_Algorithm_SchedulerAlgorithm_Dispose["Andromeda.Core.Algorithm.SchedulerAlgorithm.Dispose"]
    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_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
    Andromeda_Core_Entities_Actor_Clone["Andromeda.Core.Entities.Actor.Clone"]
    Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Andromeda_Core_Entities_Actor_SetLocation["Andromeda.Core.Entities.Actor.SetLocation"]
    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_ActivityDelay["Andromeda.Core.Entities.Gantt.ActivityDelay"]
    Andromeda_Core_Entities_Gantt_ActorGantt["Andromeda.Core.Entities.Gantt.ActorGantt"]
    Andromeda_Core_Entities_Gantt_ActorGanttByUnits["Andromeda.Core.Entities.Gantt.ActorGanttByUnits"]
    Andromeda_Core_Entities_Gantt_ClusterGantt["Andromeda.Core.Entities.Gantt.ClusterGantt"]
    Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
    Andromeda_Core_Entities_Gantt_HourEffortByActor["Andromeda.Core.Entities.Gantt.HourEffortByActor"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_Gantt_ProductGantt["Andromeda.Core.Entities.Gantt.ProductGantt"]
    Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
    Andromeda_Core_Entities_ObjectiveData_GetObjetiveCtrl["Andromeda.Core.Entities.ObjectiveData.GetObjetiveCtrl"]
    Andromeda_Core_Entities_OutProcessProps_getDay["Andromeda.Core.Entities.OutProcessProps.getDay"]
    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_GetAllObjectiveActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk"]
    Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
    Andromeda_Core_Entities_ProjectData_GetAutomationPaths["Andromeda.Core.Entities.ProjectData.GetAutomationPaths"]
    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_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_GetPeakActivitiesForInscope["Andromeda.Core.Entities.ProjectData.GetPeakActivitiesForInscope"]
    Andromeda_Core_Entities_ProjectData_GetPeakActivityUnits["Andromeda.Core.Entities.ProjectData.GetPeakActivityUnits"]
    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_GetUndesiredPaths["Andromeda.Core.Entities.ProjectData.GetUndesiredPaths"]
    Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
    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_Entities_ScheduleAnalysis_GetActivityId["Andromeda.Core.Entities.ScheduleAnalysis.GetActivityId"]
    Andromeda_Core_Entities_ScheduleAnalysis_GetHourEffort["Andromeda.Core.Entities.ScheduleAnalysis.GetHourEffort"]
    Andromeda_Core_Entities_ScheduleAnalysis_StartTimeHour["Andromeda.Core.Entities.ScheduleAnalysis.StartTimeHour"]
    Andromeda_Core_Entities_ShapeInfo_Clone["Andromeda.Core.Entities.ShapeInfo.Clone"]
    Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation["Andromeda.Core.Entities.TeamShiftRecommendation.SetLocation"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkStartTimeInProjectZone"]
    Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    Andromeda_Core_Extensions_LinqExtensions_TimeConverter["Andromeda.Core.Extensions.LinqExtensions.TimeConverter"]
    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_getSkill["Andromeda.Core.Extensions.LinqExtensions.getSkill"]
    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_GetFxRates["Andromeda.Core.Models.ModelHelper.GetFxRates"]
    Andromeda_Core_Models_ModelHelper_GetProjectDetails["Andromeda.Core.Models.ModelHelper.GetProjectDetails"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_ActivitySchedule_ToString["Andromeda.Core.Services.ActivitySchedule.ToString"]
    Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume["Andromeda.Core.Services.Algorithms.Delooper.ChangeVolume"]
    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_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    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_AsyncProcessManager_GetProcessorDetail["Andromeda.Core.Services.AsyncProcessManager.GetProcessorDetail"]
    Andromeda_Core_Services_AsyncProcessManager_KillProcess["Andromeda.Core.Services.AsyncProcessManager.KillProcess"]
    Andromeda_Core_Services_Calculator_Optimize["Andromeda.Core.Services.Calculator.Optimize"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Andromeda_Core_Services_Registry_setProjectDetails["Andromeda.Core.Services.Registry.setProjectDetails"]
    Andromeda_Core_Services_ScheduleOptimizer_Dispose["Andromeda.Core.Services.ScheduleOptimizer.Dispose"]
    Andromeda_Core_Services_SignalRMsg_SendMessage["Andromeda.Core.Services.SignalRMsg.SendMessage"]
    Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
    Andromeda_Core_Utility_Encrypt_DecryptString["Andromeda.Core.Utility.Encrypt.DecryptString"]
    Andromeda_Validation_SwimlaneInfo_Clone["Andromeda.Validation.SwimlaneInfo.Clone"]
    Andromeda_Web_Views_DataFormatFile_getSkillLevel["Andromeda.Web.Views.DataFormatFile.getSkillLevel"]
    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_GetImpPath["Insorce.Helpers.Helpers.GetImpPath"]
    Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
    Insorce_Helpers_Helpers_GetTreeId["Insorce.Helpers.Helpers.GetTreeId"]
    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"]
    LocationsController_ActivitySuggestions["LocationsController.ActivitySuggestions"]
    LocationsController_ActorEffort["LocationsController.ActorEffort"]
    LocationsController_CalculateMaxBenefit["LocationsController.CalculateMaxBenefit"]
    LocationsController_CancelOptimization["LocationsController.CancelOptimization"]
    LocationsController_ChangeTeam["LocationsController.ChangeTeam"]
    LocationsController_ControlsPath["LocationsController.ControlsPath"]
    LocationsController_CreateChildproject["LocationsController.CreateChildproject"]
    LocationsController_CriticalPath["LocationsController.CriticalPath"]
    LocationsController_CriticalPathDelays["LocationsController.CriticalPathDelays"]
    LocationsController_CriticalPathForDIS["LocationsController.CriticalPathForDIS"]
    LocationsController_CycleTime["LocationsController.CycleTime"]
    LocationsController_DeadLines["LocationsController.DeadLines"]
    LocationsController_DeadlinesValidation["LocationsController.DeadlinesValidation"]
    LocationsController_DecisionTree["LocationsController.DecisionTree"]
    LocationsController_GetCartData["LocationsController.GetCartData"]
    LocationsController_GetControlRatings["LocationsController.GetControlRatings"]
    LocationsController_GetFilteredPath["LocationsController.GetFilteredPath"]
    LocationsController_GetLocation["LocationsController.GetLocation"]
    LocationsController_GetMinimumFTE["LocationsController.GetMinimumFTE"]
    LocationsController_GetObjRiskControlsOfSimulation["LocationsController.GetObjRiskControlsOfSimulation"]
    LocationsController_GetOperationTeams["LocationsController.GetOperationTeams"]
    LocationsController_GetPathBetRiskControlAct["LocationsController.GetPathBetRiskControlAct"]
    LocationsController_GetPossiblePathofActivities["LocationsController.GetPossiblePathofActivities"]
    LocationsController_GetSimulationInfo["LocationsController.GetSimulationInfo"]
    LocationsController_GetSimulationProcessChanges["LocationsController.GetSimulationProcessChanges"]
    LocationsController_GetTeamHourlyData["LocationsController.GetTeamHourlyData"]
    LocationsController_GetTeamRecommendation["LocationsController.GetTeamRecommendation"]
    LocationsController_GettingProjectHeaders["LocationsController.GettingProjectHeaders"]
    LocationsController_ImplementAndDiscard["LocationsController.ImplementAndDiscard"]
    LocationsController_ImplementMRtoBase["LocationsController.ImplementMRtoBase"]
    LocationsController_ImplementRecommendation["LocationsController.ImplementRecommendation"]
    LocationsController_ImplementSimulation["LocationsController.ImplementSimulation"]
    LocationsController_ImplementationPlans["LocationsController.ImplementationPlans"]
    LocationsController_Index["LocationsController.Index"]
    LocationsController_JoinTeams["LocationsController.JoinTeams"]
    LocationsController_Locations["LocationsController.Locations"]
    LocationsController_MoveControlActivity["LocationsController.MoveControlActivity"]
    LocationsController_NonProductive["LocationsController.NonProductive"]
    LocationsController_NonProductivePath["LocationsController.NonProductivePath"]
    LocationsController_Optimizer["LocationsController.Optimizer"]
    LocationsController_OutProcessEffortReduction["LocationsController.OutProcessEffortReduction"]
    LocationsController_OutProcessFlow["LocationsController.OutProcessFlow"]
    LocationsController_OutProcessFrequencyChange["LocationsController.OutProcessFrequencyChange"]
    LocationsController_OutProcessWorkAllocation["LocationsController.OutProcessWorkAllocation"]
    LocationsController_Overcapacity["LocationsController.Overcapacity"]
    LocationsController_PathAllBatch["LocationsController.PathAllBatch"]
    LocationsController_PathAnalysis["LocationsController.PathAnalysis"]
    LocationsController_PathAutomation["LocationsController.PathAutomation"]
    LocationsController_PathDeadLines["LocationsController.PathDeadLines"]
    LocationsController_PathTracking["LocationsController.PathTracking"]
    LocationsController_PathVolumeFlow["LocationsController.PathVolumeFlow"]
    LocationsController_ProjectOutcome["LocationsController.ProjectOutcome"]
    LocationsController_ReworkReduction["LocationsController.ReworkReduction"]
    LocationsController_RunTempSimulation["LocationsController.RunTempSimulation"]
    LocationsController_SaveCartData["LocationsController.SaveCartData"]
    LocationsController_SaveKeyMeasures["LocationsController.SaveKeyMeasures"]
    LocationsController_SaveTeamLocationAndWorkHours["LocationsController.SaveTeamLocationAndWorkHours"]
    LocationsController_SaveTeamMinimumFTE["LocationsController.SaveTeamMinimumFTE"]
    LocationsController_SimulationResult["LocationsController.SimulationResult"]
    LocationsController_SimulationReviewed["LocationsController.SimulationReviewed"]
    LocationsController_TeamCompetency["LocationsController.TeamCompetency"]
    LocationsController_TeamLocation["LocationsController.TeamLocation"]
    LocationsController_TeamSize["LocationsController.TeamSize"]
    LocationsController_TeamsShiftsSchedule["LocationsController.TeamsShiftsSchedule"]
    LocationsController_TotalCost["LocationsController.TotalCost"]
    LocationsController_UpdateImpPlans["LocationsController.UpdateImpPlans"]
    LocationsController_UpdateNVAMetrics["LocationsController.UpdateNVAMetrics"]
    LocationsController_WorkTimings["LocationsController.WorkTimings"]
    LocationsController_WriteSchedDetailFile["LocationsController.WriteSchedDetailFile"]
    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_ActivityDelay --> Andromeda_Core_Services_TimeRange_ContainsValue
    Andromeda_Core_Entities_Gantt_ActorGanttByUnits --> Andromeda_Core_Entities_Sched_StartTimeHourMin
    Andromeda_Core_Entities_Gantt_HourEffortByActor --> Andromeda_Core_Entities_ScheduleAnalysis_GetHourEffort
    Andromeda_Core_Entities_Gantt_HourEffortByActor --> Andromeda_Core_Entities_ScheduleAnalysis_StartTimeHour
    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_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_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_Extensions_LinqExtensions_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    Andromeda_Core_Models_ModelHelper_GetFxRates --> Andromeda_Core_Models_ModelHelper_GetFxRates
    Andromeda_Core_Models_ModelHelper_GetProjectDetails --> Andromeda_Core_DataManager_GetData
    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_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Services_ProcessExtensions_FindByID
    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_AsyncProcessManager_KillProcess --> Andromeda_Core_Algorithm_SchedulerAlgorithm_Dispose
    Andromeda_Core_Services_AsyncProcessManager_KillProcess --> Andromeda_Core_Services_ScheduleOptimizer_Dispose
    Andromeda_Core_Services_AsyncProcessManager_KillProcess --> Andromeda_Core_Services_SignalRMsg_SendMessage
    Andromeda_Core_Services_Calculator_Optimize --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    Andromeda_Core_Services_Registry_setProjectDetails --> Andromeda_Core_Utility_Encrypt_DecryptString
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Info
    Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Andromeda_Web_Views_DataFormatFile_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    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
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_ActivitySuggestions --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ActivitySuggestions --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ActivitySuggestions --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_ActorEffort --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ActorEffort --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CalculateMaxBenefit --> Andromeda_Core_Services_Calculator_Optimize
    LocationsController_CancelOptimization --> Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail
    LocationsController_CancelOptimization --> Andromeda_Core_Services_AsyncProcessManager_KillProcess
    LocationsController_ChangeTeam --> Andromeda_Core_DataManager_Execute
    LocationsController_ChangeTeam --> Andromeda_Validation_SwimlaneInfo_Clone
    LocationsController_ControlsPath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ControlsPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CreateChildproject --> Andromeda_Core_LoggingManager_Error
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_CriticalPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_ScheduleAnalysis_GetActivityId
    LocationsController_CriticalPathDelays --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_CriticalPathDelays --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CriticalPathDelays --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_CriticalPathForDIS --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_CriticalPathForDIS --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CycleTime --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_CycleTime --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_DaysConverter
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_GetIndividualPath
    LocationsController_DeadLines --> Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths
    LocationsController_DeadlinesValidation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_DeadlinesValidation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_DecisionTree --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_DecisionTree --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_DecisionTree --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetCartData --> Andromeda_Core_DataManager_GetDataList
    LocationsController_GetCartData --> Insorce_Helpers_Helpers_GetImpPath
    LocationsController_GetControlRatings --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Activity_GetNVAType
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetLocation --> Andromeda_Core_DataManager_GetData
    LocationsController_GetMinimumFTE --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GetMinimumFTE --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_GetMinimumFTE --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetObjRiskControlsOfSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_GetOperationTeams --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetOperationTeams --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_SetLocation
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
    LocationsController_GetSimulationInfo --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Extensions_LinqExtensions_TimeConverter
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_GetSimulationProcessChanges --> Insorce_Helpers_Helpers_Deadline
    LocationsController_GetSimulationProcessChanges --> Insorce_Helpers_Helpers_Waittype
    LocationsController_GetTeamHourlyData --> Andromeda_Core_Entities_Gantt_HourEffortByActor
    LocationsController_GetTeamRecommendation --> Andromeda_Core_DataManager_GetDataList
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ImplementAndDiscard --> Andromeda_Core_Models_ModelHelper_GetProjectDetails
    LocationsController_ImplementAndDiscard --> Andromeda_Core_Services_Registry_setProjectDetails
    LocationsController_ImplementMRtoBase --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ImplementRecommendation --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_ImplementRecommendation --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_ShapeInfo_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_getSkill
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Error
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Info
    LocationsController_ImplementSimulation --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ImplementSimulation --> Andromeda_Validation_SwimlaneInfo_Clone
    LocationsController_ImplementSimulation --> Insorce_Helpers_Helpers_GetTreeId
    LocationsController_ImplementationPlans --> Insorce_Helpers_Helpers_GetImpPath
    LocationsController_Index --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_Index --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
    LocationsController_Index --> Insorce_Helpers_Helpers_getDashboardIdFromCookie
    LocationsController_JoinTeams --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_Locations --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_Locations --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_Locations --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ActorGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ActorGanttByUnits
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ClusterGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ProductGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Sched_StartTimeHour
    LocationsController_MoveControlActivity --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_NonProductive --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_NonProductive --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_NonProductive --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetSchedData
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetTransferModes
    LocationsController_NonProductivePath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_NonProductivePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_Optimizer --> Andromeda_Core_Services_Calculator_Optimize
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_OutProcessEffortReduction --> Insorce_Helpers_Helpers_GetIndividualPath
    LocationsController_OutProcessFlow --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_OutProcessFlow --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_OutProcessFrequencyChange --> Andromeda_Core_Entities_OutProcessProps_getDay
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_OutProcessWorkAllocation --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_Overcapacity --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_Overcapacity --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAllBatch --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAllBatch --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Activity_GetNVAType
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAnalysis --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAutomation --> Andromeda_Core_Entities_Activity_Effort
    LocationsController_PathAutomation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAutomation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAutomation --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_PathDeadLines --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathDeadLines --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathDeadLines --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathTracking --> Andromeda_Core_DataManager_GetDataList
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathVolumeFlow --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ObjectiveData_GetObjetiveCtrl
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetAutomationPaths
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjRisks
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetPeakActivitiesForInscope
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetPeakActivityUnits
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetRiskControls
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetSchedData
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetUndesiredPaths
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_ProjectOutcome --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_ProjectOutcome --> Andromeda_Core_Services_SignalRMsg_SendMessage
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_DaysConverter
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_GetIndividualPath
    LocationsController_ReworkReduction --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ReworkReduction --> Andromeda_Core_LoggingManager_Exception
    LocationsController_ReworkReduction --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_ReworkReduction --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ReworkReduction --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ReworkReduction --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_SetLocation
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_RunTempSimulation --> Andromeda_Core_Services_SignalRMsg_SendMessage
    LocationsController_RunTempSimulation --> Insorce_Helpers_Helpers_GetTreeId
    LocationsController_SaveCartData --> Andromeda_Core_DataManager_Execute
    LocationsController_SaveKeyMeasures --> Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail
    LocationsController_SaveTeamLocationAndWorkHours --> Andromeda_Core_LoggingManager_Error
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_SimulationResult --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_SimulationResult --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_SimulationResult --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_SimulationResult --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_SimulationResult --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_SimulationResult --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_SimulationReviewed --> Andromeda_Core_LoggingManager_Error
    LocationsController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
    LocationsController_TeamCompetency --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TeamCompetency --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TeamCompetency --> Andromeda_Web_Views_DataFormatFile_getSkillLevel
    LocationsController_TeamCompetency --> Insorce_Helpers_Helpers_getSkillLevel
    LocationsController_TeamLocation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TeamLocation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TeamSize --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_TeamSize --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
    LocationsController_TeamSize --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_TeamSize --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_TeamSize --> Insorce_Helpers_Helpers_DaysConverter
    LocationsController_TeamsShiftsSchedule --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
    LocationsController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_UpdateImpPlans --> Andromeda_Core_DataManager_Execute
    LocationsController_UpdateNVAMetrics --> Andromeda_Core_Entities_Activity_Effort
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone
    LocationsController_WorkTimings --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_WorkTimings --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_WorkTimings --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_WorkTimings --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_WriteSchedDetailFile --> Andromeda_Core_Services_ActivitySchedule_ToString

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
activitysuggestions ActivitySuggestions IList<Andromeda.Core.Entities.PeakActivitySuggestions> Andromeda.Web\Views\Locations\ActivitySuggestions.cshtml
alloranyconstraint AllOrAnyConstraint - Andromeda.Web\Views\Locations\AllOrAnyConstraint.cshtml
controlspath ControlsPath Tuple<List<Andromeda.Core.Entities.ObjectiveActivityRiskControl>, List<Andromeda.Core.Entities.ObjectiveActivityRiskControl>> Andromeda.Web\Views\Locations\ControlsPath.cshtml
costwizardpartialpage CostwizardPartialPage - Andromeda.Web\Views\Locations\CostwizardPartialPage.cshtml
criticalpath CriticalPath List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\CriticalPath.cshtml
criticalpathdelays CriticalPathDelays IList<Andromeda.Core.Entities.PeakActivitySuggestions> Andromeda.Web\Views\Locations\CriticalPathDelays.cshtml
cycletime CycleTime Andromeda.Core.Entities.MapPath Andromeda.Web\Views\Locations\CycleTime.cshtml
decisiontree DecisionTree IList<Andromeda.Core.Entities.PathTracking> Andromeda.Web\Views\Locations\DecisionTree.cshtml
geolocateactors GeolocateActors IList<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\GeolocateActors.cshtml
geolocatepartialpage GeoLocatePartialPage - Andromeda.Web\Views\Locations\GeoLocatePartialPage.cshtml
implementationplans ImplementationPlans IList<Andromeda.Core.Entities.ImplemenationPlan> Andromeda.Web\Views\Locations\ImplementationPlans.cshtml
implementationtree ImplementationTree IList<Andromeda.Core.Entities.ImplementationSnapshots> Andromeda.Web\Views\Locations\ImplementationTree.cshtml
index Index IList<Andromeda.Core.Entities.CustomWidgetView> Andromeda.Web\Views\Locations\Index.cshtml
infrapartial InfraPartial - Andromeda.Web\Views\Locations\InfraPartial.cshtml
jointeams JoinTeams IList<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\JoinTeams.cshtml
nonproductive NonProductive IList<Andromeda.Core.Entities.Activity> Andromeda.Web\Views\Locations\NonProductive.cshtml
nonproductivepath NonProductivePath List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\NonProductivePath.cshtml
officelocations OfficeLocations IList<LocationInfra> Andromeda.Web\Views\Locations\OfficeLocations.cshtml
outprocesseffortreduction OutProcessEffortReduction - Andromeda.Web\Views\Locations\OutProcessEffortReduction.cshtml
outprocessflow OutProcessFlow List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\OutProcessFlow.cshtml
outprocessfrequencychange OutProcessFrequencyChange - Andromeda.Web\Views\Locations\OutProcessFrequencyChange.cshtml
outprocessworkallocation OutProcessWorkAllocation IList<Andromeda.Core.Entities.PeakActivitySuggestions> Andromeda.Web\Views\Locations\OutProcessWorkAllocation.cshtml
overcapacity Overcapacity List<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\Overcapacity.cshtml
pathallbatch PathAllBatch List<Andromeda.Core.Entities.Activity> Andromeda.Web\Views\Locations\PathAllBatch.cshtml
pathanalysis PathAnalysis List<Andromeda.Core.Entities.Activity> Andromeda.Web\Views\Locations\PathAnalysis.cshtml
pathautomation PathAutomation List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\PathAutomation.cshtml
pathautomationnvapartial PathAutomationNVAPartial - Andromeda.Web\Views\Locations\PathAutomationNVAPartial.cshtml
pathautomationpartial PathAutomationPartial List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\PathAutomationPartial.cshtml
pathautomationreworkpartial PathAutomationReworkPartial - Andromeda.Web\Views\Locations\PathAutomationReworkPartial.cshtml
pathdeadlines PathDeadLines List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\PathDeadLines.cshtml
pathreworkreduction PathReworkReduction List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\PathReworkReduction.cshtml
pathtracking PathTracking - Andromeda.Web\Views\Locations\PathTracking.cshtml
pathvolumeflow PathVolumeFlow List<Andromeda.Core.Entities.MapPath> Andromeda.Web\Views\Locations\PathVolumeFlow.cshtml
projectoutcome ProjectOutcome - Andromeda.Web\Views\Locations\ProjectOutcome.cshtml
simulationresult SimulationResult System.Collections.Generic.IList<Andromeda.Core.Entities.Simulation> Andromeda.Web\Views\Locations\SimulationResult.cshtml
systemautomation SystemAutomation List<Andromeda.Core.Entities.ActivityProperty>*@ Andromeda.Web\Views\Locations\SystemAutomation.cshtml
teamcompetency TeamCompetency IList<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\TeamCompetency.cshtml
teamcompetencypartialdialogues TeamCompetencyPartialDialogues - Andromeda.Web\Views\Locations\TeamCompetencyPartialDialogues.cshtml
teamcompetencypartialpage TeamCompetencyPartialPage - Andromeda.Web\Views\Locations\TeamCompetencyPartialPage.cshtml
teamcostpeakreduction TeamCostPeakReduction IList<Andromeda.Core.Entities.PeakActivitySuggestions> Andromeda.Web\Views\Locations\TeamCostPeakReduction.cshtml
teamlocation TeamLocation IList<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\TeamLocation.cshtml
teamlocationmenupartialpage TeamLocationMenuPartialPage int Andromeda.Web\Views\Locations\TeamLocationMenuPartialPage.cshtml
teamsize TeamSize - Andromeda.Web\Views\Locations\TeamSize.cshtml
teamsshiftsschedule TeamsShiftsSchedule - Andromeda.Web\Views\Locations\TeamsShiftsSchedule.cshtml
totalcost TotalCost - Andromeda.Web\Views\Locations\TotalCost.cshtml
workinghours WorkingHours IList<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\WorkingHours.cshtml
worktimings WorkTimings List<Andromeda.Core.Entities.Actor> Andromeda.Web\Views\Locations\WorkTimings.cshtml

Methods at a Glance

Command / Save Operations

Type Method HTTP URL Summary
entrypoint GeolocateSave POST /Locations/GeolocateSave Retrieve project and actor data, update actors with new location codes, adjust...
entrypoint Calculate POST /Locations/Calculate Deserialize JSON to actor objects, create Actor instances, save configuration...
entrypoint SaveMeasures POST /Locations/SaveMeasures SaveMeasures handles HTTP POST requests and returns a JsonResult response.
entrypoint ShowAllMeasures POST /Locations/ShowAllMeasures ShowAllMeasures handles a POST request, fetches simulation records for the...
entrypoint UpdateOperationTeams POST /Locations/UpdateOperationTeams Decode actors from JSON, update their working hours, save configuration, and...
entrypoint WorkTimings GET /Locations/WorkTimings The method retrieves project data, calculates effort metrics, analyzes...
entrypoint SaveMergeTeamData `` /Locations/SaveMergeTeamData SaveMergeTeamData creates and updates governance data, merges teams if...
entrypoint SaveAutomationSystems POST /Locations/SaveAutomationSystems Decode 'AutomatedSystems' JSON, save automation systems, and return JSON...
entrypoint ActivitySuggestions `` /Locations/ActivitySuggestions Aggregates data and analyzes clusters, delays, efforts, and skills; calculates...
entrypoint CreateChildproject `` /Locations/CreateChildproject Create a unique child project by incrementing version, copying data, updating...
entrypoint ReplaceAtOnce `` /Locations/ReplaceAtOnce ReplaceAtOnce creates a regex from oldValue and replaces its first occurrence...
entrypoint UpdateTalentpools `` /Locations/UpdateTalentpools Decode input JSON into domain objects, update them based on actor IDs, and...
entrypoint SaveAndImplement POST /Locations/SaveAndImplement Retrieve project ID and request parameters, insert simulation data, and...
entrypoint SaveNonProductive POST /Locations/SaveNonProductive No key flows are defined for the SaveNonProductive method.
entrypoint SaveNVAType POST /Locations/SaveNVAType SaveNVAType handles POST requests to save NPA activity and update project...
entrypoint UpdateNVAMetrics POST /Locations/UpdateNVAMetrics UpdateNVAMetrics retrieves project data, calculates NVA efforts, updates...
entrypoint SaveTeamMinimumFTE POST /Locations/SaveTeamMinimumFTE No key flows defined for SaveTeamMinimumFTE method.
entrypoint MoveControlActivity POST /Locations/MoveControlActivity MoveControlActivity updates project XML and implementation plan to reflect...
entrypoint UpdateAsIsFromWidget POST /Locations/UpdateAsIsFromWidget The method decodes the 'Actors' JSON, updates each actor's Maven request count...
entrypoint ImplementMRtoBase POST /Locations/ImplementMRtoBase Retrieve project data, update implementation status, insert snapshots, and...
entrypoint SaveContinueTeamAddTalent POST /Locations/SaveContinueTeamAddTalent No key flows are defined for the SaveContinueTeamAddTalent method.
entrypoint ClearTeamShiftRecommendation POST /Locations/ClearTeamShiftRecommendation ClearTeamShiftRecommendation handles an HTTP POST to delete team shift...
entrypoint GetCartData GET /Locations/GetCartData Create and update an implementation plan, then return selected plan properties.
entrypoint RemoveOverCapacity POST /Locations/RemoveOverCapacity RemoveOverCapacity decodes data, updates team capacities, appends subtasks...
entrypoint UpdateActorCountFromSchedCount POST /Locations/UpdateActorCountFromSchedCount UpdateActorCountFromSchedCount updates actor count for the current project on...

File & Import Operations

Type Method HTTP URL Summary
entrypoint WriteSchedDetailFile `` /Locations/WriteSchedDetailFile Sort work units by DFSIn and ensure output file is deleted if it exists.

Query & View Methods

Type Method HTTP URL Summary
entrypoint Index GET /Locations/Index The method sets the dashboard ID cookie and loads dashboard data using the...
entrypoint GetLocation GET /Locations/GetLocation GetLocation retrieves the current geographic location using device sensors or...
entrypoint GetAllWeeksInAMonthByDay `` /Locations/GetAllWeeksInAMonthByDay Initialize a list and retrieve the first day of the specified week in the year.
entrypoint TeamSize GET /Locations/TeamSize Calculate project risk coverage, HR and infrastructure costs, aggregate team...
entrypoint GetMathResult GET /Locations/GetMathResult GetMathResult loads and returns the math result for a given ProjectID and...
entrypoint GetSequenceByCycleTime `` /Locations/GetSequenceByCycleTime Initialize variables, traverse and filter graph edges to identify activity...
entrypoint GetSkillScore `` /Locations/GetSkillScore GetSkillScore evaluates score ranges with incomplete and undefined conditions...
entrypoint ControlsRework GET /Locations/ControlsRework ControlsRework handles HTTP GET requests by invoking ReworkReduction with...
entrypoint PathVolumeFlow GET /Locations/PathVolumeFlow Manage session variables, retrieve project data, filter activities and paths...
entrypoint PathAllBatch GET /Locations/PathAllBatch Retrieve and filter project data, build path models with effort calculations...
entrypoint GetClass `` /Locations/GetClass GetClass returns CSS class strings based on bKnowledge and dge value thresholds.
entrypoint CustomerAutomation GET /Locations/CustomerAutomation CustomerAutomation handles GET requests, calls SystemAutomation with...
entrypoint ControlsAutomation GET /Locations/ControlsAutomation ControlsAutomation handles HTTP GET requests by invoking PathAutomation with...
entrypoint RelativeDeadLine GET /Locations/RelativeDeadLine Handle HTTP GET request by calling PathDeadLines with 'Relative' and return the...
entrypoint DeadLines GET /Locations/DeadLines DeadLines handles HTTP GET requests by invoking PathDeadLines with 'all' and...
entrypoint WorkTimingDelays GET /Locations/WorkTimingDelays Handles HTTP GET request by invoking WorkTimings with specific parameter and...
entrypoint OutOfOfficeWorkAllocation GET /Locations/OutOfOfficeWorkAllocation Handles HTTP GET request by invoking CriticalPathDelays with specific parameter...
entrypoint BottlenecksWorkAllocation GET /Locations/BottlenecksWorkAllocation Handle HTTP GET request by calling CriticalPathDelays with 'BOTTLENECKS DELAYS'...
entrypoint ReworkCriticalPath GET /Locations/ReworkCriticalPath Handles HTTP GET request by invoking ReworkReduction with 'REWORKCRITICALPATH'...
entrypoint AutomationPath GET /Locations/AutomationPath AutomationPath handles HTTP GET requests, calls PathAutomation with...
entrypoint ControlsNonProductive GET /Locations/ControlsNonProductive Handles HTTP GET request by invoking NonProductivePath with a specific...
entrypoint GetObjRiskControlsOfSimulation `` /Locations/GetObjRiskControlsOfSimulation Retrieve and filter risk control data using activity and simulation identifiers.
entrypoint NonProductive GET /Locations/NonProductive Retrieve and filter non-productive activities based on project, session flags...
entrypoint SupAndManagers GET /Locations/SupAndManagers Handle HTTP GET request by calling JoinTeams with 'SupAndManagers' and return...
entrypoint CustomerNonProductive GET /Locations/CustomerNonProductive Handles HTTP GET requests by invoking NonProductive with...
entrypoint CustomerNonProductivePath GET /Locations/CustomerNonProductivePath Handle HTTP GET request by calling NonProductivePath with fixed string and...
entrypoint CustomerControlRedundancy GET /Locations/CustomerControlRedundancy Handles HTTP GET requests by invoking ControlsPath with...
entrypoint TeamLocation GET /Locations/TeamLocation Initialize project data and prepare view with FX rates, office, and cart data...
entrypoint GetTrainingNeeds POST /Locations/GetTrainingNeeds Deserialize request data, retrieve actors and activities, calculate skill...
entrypoint PathTracking GET /Locations/PathTracking PathTracking handles an HTTP GET request, retrieves path tracking data, and...
entrypoint RedirectToTree GET /Locations/RedirectToTree RedirectToTree sets treeId and returns 'DecisionTree' view, handling empty tree...
entrypoint CostTree GET /Locations/CostTree Redirects to tree view using provided id or defaults to id 100 if none given.
entrypoint CustomerExperienceTree GET /Locations/CustomerExperienceTree Redirects to the tree view for a valid customer experience ID.
entrypoint ControlCoverageTree GET /Locations/ControlCoverageTree Redirects to tree view using provided id or defaults to id 300 if none given.
entrypoint OperationSitesNewLocation GET /Locations/OperationSitesNewLocation Retrieve office details using actor information and current project ID.
entrypoint GetPossiblePathofActivities GET /Locations/GetPossiblePathofActivities Retrieve and filter project activities and arrows, then return the most...
entrypoint GetTeamRecommendation GET /Locations/GetTeamRecommendation Retrieve project data, enrich team recommendations with actor locations and...
entrypoint GetTeamHourlyData GET /Locations/GetTeamHourlyData GetTeamHourlyData retrieves and filters actor and activity data for a specific...
entrypoint IncreaseTeamSize GET /Locations/IncreaseTeamSize IncreaseTeamSize receives a string parameter via HTTP GET, calls CycleTime with...
entrypoint SetDeadlines GET /Locations/SetDeadlines SetDeadlines receives a string parameter via HTTP GET, calls CycleTime with it...
entrypoint GetallInsights GET /Locations/GetallInsights GetallInsights handles HTTP GET requests and excludes correction comments.
entrypoint TeamsShiftsSchedule `` /Locations/TeamsShiftsSchedule Generate schedule data using actors and project info, store results for view...
entrypoint GetControlRatings GET /Locations/GetControlRatings Retrieve project data, calculate control ratings and activity suggestions, then...
entrypoint OptimizeByCycleTime GET /Locations/OptimizeByCycleTime Handle HTTP GET request by calling Overcapacity with 'CycleTime' and returning...
entrypoint Overcapacity GET /Locations/Overcapacity Fetch project and actor data, filter invalid arrows, calculate team FTEs, and...
entrypoint OfficeLocations GET /Locations/OfficeLocations Fetch office location details using the current project ID and display them in...

Validation & Rules

Type Method HTTP URL Summary
entrypoint MergeTeams `` /Locations/MergeTeams MergeTeams reads project XML, validates teams, reassigns shapes and actions...
entrypoint ImplementSimulation POST /Locations/ImplementSimulation Validate inputs, update simulation data, manage actors, activities, controls...
entrypoint ImplementSimulation `` /Locations/ImplementSimulation Validate inputs, update simulation data, manage actors, activities, controls...
entrypoint DiscardSimulation POST /Locations/DiscardSimulation DiscardSimulation retrieves and processes discard data, unchecks controls, and...
entrypoint GetPathBetRiskControlAct POST /Locations/GetPathBetRiskControlAct Decode and validate risk acts from POST data, then return valid paths as JSON.
entrypoint DeadlinesValidation POST /Locations/DeadlinesValidation Decode activities from JSON, update deadlines by matching IDs, validate...
entrypoint ImplementRecommendation POST /Locations/ImplementRecommendation Initialize project and check optimization status, process form data, update...
entrypoint FilteredActivityIds POST /Locations/FilteredActivityIds Decode valid JSON list from request, validate it, store in session, and return...

Workflow & Routing

Type Method HTTP URL Summary
entrypoint GeolocateActors GET /Locations/GeolocateActors Retrieve and filter project data, actors, and foreign exchange rates for...
entrypoint WorkingHours GET /Locations/WorkingHours Retrieve foreign exchange rates, assign to ViewBag, and return the view.
entrypoint WorkingHoursSave POST /Locations/WorkingHoursSave Process and update actors' working hours, refresh cache, save config changes...
entrypoint Optimizer POST /Locations/Optimizer The method initializes impact statuses, processes form data, conditionally...
entrypoint CalculateMaxBenefit POST /Locations/CalculateMaxBenefit CalculateMaxBenefit retrieves project data, resets actor and activity states...
entrypoint SaveKeyMeasures POST /Locations/SaveKeyMeasures Retrieve process with 'Com' false, update Levers and KeyMeasures, then return...
entrypoint CancelOptimization GET /Locations/CancelOptimization CancelOptimization retrieves the processor detail and terminates the process...
entrypoint ProjectOutcome `` /Locations/ProjectOutcome Process project data, compute metrics, update comparisons, and notify client...
entrypoint HideMeasures POST /Locations/HideMeasures HideMeasures processes a POST request with an ID, hides the simulation record...
entrypoint GetOperationTeams GET /Locations/GetOperationTeams Retrieve and process team data to calculate effort and return filtered results...
entrypoint SaveLevers POST /Locations/SaveLevers SaveLevers processes POST requests to update levers and measures, then returns...
entrypoint ReworkReduction GET /Locations/ReworkReduction Manage filtered activities and rework paths, prepare cluster analysis, generate...
entrypoint JoinTeams GET /Locations/JoinTeams JoinTeams processes project data to update activity properties and calculate...
entrypoint OutProcessAutomation GET /Locations/OutProcessAutomation Process HTTP GET requests by invoking SystemAutomation with a specific path and...
entrypoint SaveClassifySystems POST /Locations/SaveClassifySystems SaveClassifySystems method processes and saves classification system data...
entrypoint PathAutomation GET /Locations/PathAutomation Load data models, calculate efforts and automation benefits, process rework...
entrypoint PathDeadLines GET /Locations/PathDeadLines Retrieve and process project elements to determine deadline paths and related...
entrypoint ControlsPath GET /Locations/ControlsPath Retrieve project data and actors, calculate daily efforts and project metrics...
entrypoint OutProcessWorkAllocation `` /Locations/OutProcessWorkAllocation The method calculates daily efforts, analyzes peak activities, clusters work...
entrypoint CriticalPath GET /Locations/CriticalPath Processes project data to analyze schedules, detect fault paths, and prepare...
entrypoint CycleTime GET /Locations/CycleTime CycleTime processes project data, calculates metrics including cycle time and...
entrypoint OutProcessAutomationPath GET /Locations/OutProcessAutomationPath Handle HTTP GET request by invoking PathAutomation with 'OUTAUTOMATIONPATH' and...
entrypoint NonProductivePath GET /Locations/NonProductivePath Retrieve and filter project data, activities, and related entities; prepare and...
entrypoint SimulationResult GET /Locations/SimulationResult Process filtered projects to gather simulation data, calculate costs, retrieve...
entrypoint GettingProjectHeaders `` /Locations/GettingProjectHeaders Retrieve and process project data including FX rates, actors, costs, and...
entrypoint SimulationReviewed POST /Locations/SimulationReviewed Process POST request to update simulation reviewed status and return operation...
entrypoint GetMinimumFTE POST /Locations/GetMinimumFTE Retrieve project data, process team and activity inputs, calculate minimum FTE...
entrypoint RunTempSimulation POST /Locations/RunTempSimulation RunTempSimulation initializes simulation data, processes input updates, manages...
entrypoint RunSimulationForOutProcess POST /Locations/RunSimulationForOutProcess No key flows are defined for the RunSimulationForOutProcess method.
entrypoint GetSimulationProcessChanges `` /Locations/GetSimulationProcessChanges Compare original and simulated data to identify changes across entities and...
entrypoint OutProcessFlow GET /Locations/OutProcessFlow Retrieve and process project data to build and calculate activity paths, then...
entrypoint OutProcessEffortReduction GET /Locations/OutProcessEffortReduction Retrieve and filter project data, calculate risk and efficiency metrics...
entrypoint ImplementAndDiscard POST /Locations/ImplementAndDiscard Process updates and retrieves projects with simulation and risk control...
entrypoint OutProcessControlsPath GET /Locations/OutProcessControlsPath Handles HTTP GET request by invoking ControlsPath with a fixed parameter and...
entrypoint UpdateNVATypeMIData POST /Locations/UpdateNVATypeMIData Decode JSON from request, process each item into Activity objects, save if...
entrypoint ImplementationPlans GET /Locations/ImplementationPlans Fetch project activities and redirect if none exist; otherwise, process and...
entrypoint UpdateImpPlans POST /Locations/UpdateImpPlans The method processes a POST request to update implementation plans for a...
entrypoint OutProcessNonProductive GET /Locations/OutProcessNonProductive Handles HTTP GET request by invoking NonProductive with a fixed parameter and...
entrypoint OutProcessNonProductivePath GET /Locations/OutProcessNonProductivePath Handle HTTP GET request by calling NonProductivePath with...
entrypoint GetTalentPools POST /Locations/GetTalentPools Deserialize input, retrieve and process project activities, load skill and...
entrypoint GetTrainingPlans POST /Locations/GetTrainingPlans Deserialize form data, process and group training information, then return...
entrypoint TeamCompetency GET /Locations/TeamCompetency Retrieve project data, filter and process actors and product factors, clean...
entrypoint DecisionTree GET /Locations/DecisionTree The method assigns treeId from parameters, parses query strings, and redirects...
entrypoint SaveTeamLocationAndWorkHours POST /Locations/SaveTeamLocationAndWorkHours Process team location and work hours data, update project impact and review...
entrypoint ChangeTeam `` /Locations/ChangeTeam ChangeTeam updates the project XML by cloning and assigning a new team shape to...
entrypoint TeamShiftRecommendation POST /Locations/TeamShiftRecommendation The method processes team shift recommendations if no optimization runs and...
entrypoint GetSimulationInfo GET /Locations/GetSimulationInfo GetSimulationInfo decodes simulation data, processes actors and teams by...
entrypoint GetOutProcessSimulationInfo GET /Locations/GetOutProcessSimulationInfo The method retrieves simulation data by ID, processes out-process properties...
entrypoint GetFilteredPath POST /Locations/GetFilteredPath The method processes filter IDs, groups and filters activities, calculates path...
entrypoint OutProcessFrequencyChange GET /Locations/OutProcessFrequencyChange Process out-process activities and actors to calculate daily efforts and...
entrypoint SaveOutprocessFrequency POST /Locations/SaveOutprocessFrequency Decode JSON, retrieve project ID, save outprocess frequency data, and return...
entrypoint SaveReworKAHTPercentage POST /Locations/SaveReworKAHTPercentage The method processes POST form data, converts values to integers, and saves...
entrypoint Delays GET /Locations/Delays Process GET request with string parameter ms, forward to CycleTime, and return...
entrypoint SerialBatch GET /Locations/SerialBatch Receive ms parameter via HTTP GET, process it with CycleTime, and return the...
entrypoint SaveCartData POST /Locations/SaveCartData Retrieve project ID and form data, decode cart JSON, process and save each cart...
entrypoint AllOrAnyConstraint GET /Locations/AllOrAnyConstraint Retrieve project data, process related activities and actors, prepare activity...

Other Methods

Type Method HTTP URL Summary
entrypoint JsonDateParse GET /Locations/JsonDateParse Parse JSON string, replace date patterns with formatted values, and return the...
entrypoint Timezone GET /Locations/Timezone The method extracts and returns the time zone name from a valid time zone ID...
entrypoint FindFirstDayOfWeekInYear `` /Locations/FindFirstDayOfWeekInYear Identify the first occurrence of a specified weekday in a given year.
entrypoint DeadlineOptimizer POST /Locations/DeadlineOptimizer Optimize project deadlines by retrieving relevant data, clearing old...
entrypoint ActorEffort GET /Locations/ActorEffort Calculate actor effort and team minimum FTE from filtered activities and return...
entrypoint ClearOptimizationCache `` /Locations/ClearOptimizationCache ClearOptimizationCache builds URLs for dashboard actions using a project ID and...
entrypoint TotalCost GET /Locations/TotalCost Calculate total project cost by aggregating actor data, activities, and product...
entrypoint PathAnalysis GET /Locations/PathAnalysis No key flows are defined for PathAnalysis.
entrypoint OutUndesiredOutcomes GET /Locations/OutUndesiredOutcomes No key flows are defined for the OutUndesiredOutcomes method.
entrypoint UndesiredOutcomes GET /Locations/UndesiredOutcomes No key flows are defined in the UndesiredOutcomes method.
entrypoint SystemAutomation GET /Locations/SystemAutomation No key flows are defined for SystemAutomation.
entrypoint AbsoluteDeadLine GET /Locations/AbsoluteDeadLine AbsoluteDeadLine calls PathDeadLines and returns its result directly.
entrypoint TeamCostPeakReduction `` /Locations/TeamCostPeakReduction TeamCostPeakReduction calls ActivitySuggestions with 'PeakReduction' and...
entrypoint CriticalPathForDIS GET /Locations/CriticalPathForDIS Retrieve and filter schedule data and activities, calculate timing, and return...
entrypoint CriticalPathDelays GET /Locations/CriticalPathDelays Retrieve project data, analyze delays using effort and clustering, filter...
entrypoint WorkUtilization GET /Locations/WorkUtilization No key flows are defined for the WorkUtilization method.
entrypoint CustomerExperienceRework GET /Locations/CustomerExperienceRework No key flows are defined for the CustomerExperienceRework method.
entrypoint TimeUndesiredOutcomes GET /Locations/TimeUndesiredOutcomes No key flows are defined for the TimeUndesiredOutcomes method.
entrypoint UndesiredCriticalpath GET /Locations/UndesiredCriticalpath No key flows are defined for the UndesiredCriticalpath method.
entrypoint Locations GET /Locations/Locations No key flows are defined for the Locations method.
entrypoint ImplementationTree GET /Locations/ImplementationTree Retrieve project activities and redirect to creation if none exist; otherwise...
entrypoint OptimizeWithAsIsCount GET /Locations/OptimizeWithAsIsCount Retrieve project data and configuration, optimize actors with parameters, and...

Associated Screens / Views

  • IndexIndex (Andromeda.Web\Views\Locations\Index.cshtml)
  • GeolocateActorsGeolocateActors (Andromeda.Web\Views\Locations\GeolocateActors.cshtml)
  • WorkingHoursWorkingHours (Andromeda.Web\Views\Locations\WorkingHours.cshtml)
  • TeamSizeTeamSize (Andromeda.Web\Views\Locations\TeamSize.cshtml)
  • ProjectOutcomeProjectOutcome (Andromeda.Web\Views\Locations\ProjectOutcome.cshtml)
  • TotalCostTotalCost (Andromeda.Web\Views\Locations\TotalCost.cshtml)
  • PathAnalysisPathAnalysis (Andromeda.Web\Views\Locations\PathAnalysis.cshtml)
  • PathVolumeFlowPathVolumeFlow (Andromeda.Web\Views\Locations\PathVolumeFlow.cshtml)
  • PathAllBatchPathAllBatch (Andromeda.Web\Views\Locations\PathAllBatch.cshtml)
  • WorkTimingsWorkTimings (Andromeda.Web\Views\Locations\WorkTimings.cshtml)
  • JoinTeamsJoinTeams (Andromeda.Web\Views\Locations\JoinTeams.cshtml)
  • SystemAutomationSystemAutomation (Andromeda.Web\Views\Locations\SystemAutomation.cshtml)
  • PathAutomationPathAutomation (Andromeda.Web\Views\Locations\PathAutomation.cshtml)
  • PathDeadLinesPathDeadLines (Andromeda.Web\Views\Locations\PathDeadLines.cshtml)
  • ControlsPathControlsPath (Andromeda.Web\Views\Locations\ControlsPath.cshtml)
  • OutProcessWorkAllocationOutProcessWorkAllocation (Andromeda.Web\Views\Locations\OutProcessWorkAllocation.cshtml)
  • TeamCostPeakReductionTeamCostPeakReduction (Andromeda.Web\Views\Locations\TeamCostPeakReduction.cshtml)
  • ActivitySuggestionsActivitySuggestions (Andromeda.Web\Views\Locations\ActivitySuggestions.cshtml)
  • CriticalPathCriticalPath (Andromeda.Web\Views\Locations\CriticalPath.cshtml)
  • CriticalPathDelaysCriticalPathDelays (Andromeda.Web\Views\Locations\CriticalPathDelays.cshtml)
  • CycleTimeCycleTime (Andromeda.Web\Views\Locations\CycleTime.cshtml)
  • NonProductivePathNonProductivePath (Andromeda.Web\Views\Locations\NonProductivePath.cshtml)
  • SimulationResultSimulationResult (Andromeda.Web\Views\Locations\SimulationResult.cshtml)
  • OutProcessFlowOutProcessFlow (Andromeda.Web\Views\Locations\OutProcessFlow.cshtml)
  • OutProcessEffortReductionOutProcessEffortReduction (Andromeda.Web\Views\Locations\OutProcessEffortReduction.cshtml)
  • NonProductiveNonProductive (Andromeda.Web\Views\Locations\NonProductive.cshtml)
  • ImplementationPlansImplementationPlans (Andromeda.Web\Views\Locations\ImplementationPlans.cshtml)
  • TeamLocationTeamLocation (Andromeda.Web\Views\Locations\TeamLocation.cshtml)
  • PathTrackingPathTracking (Andromeda.Web\Views\Locations\PathTracking.cshtml)
  • TeamCompetencyTeamCompetency (Andromeda.Web\Views\Locations\TeamCompetency.cshtml)
  • ImplementationTreeImplementationTree (Andromeda.Web\Views\Locations\ImplementationTree.cshtml)
  • DecisionTreeDecisionTree (Andromeda.Web\Views\Locations\DecisionTree.cshtml)
  • OutProcessFrequencyChangeOutProcessFrequencyChange (Andromeda.Web\Views\Locations\OutProcessFrequencyChange.cshtml)
  • TeamsShiftsScheduleTeamsShiftsSchedule (Andromeda.Web\Views\Locations\TeamsShiftsSchedule.cshtml)
  • OvercapacityOvercapacity (Andromeda.Web\Views\Locations\Overcapacity.cshtml)
  • OfficeLocationsOfficeLocations (Andromeda.Web\Views\Locations\OfficeLocations.cshtml)
  • AllOrAnyConstraintAllOrAnyConstraint (Andromeda.Web\Views\Locations\AllOrAnyConstraint.cshtml)

Entrypoint Methods

Index

Summary: The method sets the dashboard ID cookie and loads dashboard data using the provided 'view' parameter.

ActionResult LocationsController.Index(int? view)

Routing

  • HTTP: GET
  • URL: /Locations/Index

Cross-layer call chain - LocationsController.Index → Insorce.Helpers.Helpers.getDashboardIdFromCookie - LocationsController.Index → Insorce.Helpers.Helpers.SetDashboardIdToCookie - LocationsController.Index → Andromeda.Core.Entities.Actor.GetLocation - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
    Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Insorce_Helpers_Helpers_SetDashboardIdToCookie["Insorce.Helpers.Helpers.SetDashboardIdToCookie"]
    Insorce_Helpers_Helpers_getDashboardIdFromCookie["Insorce.Helpers.Helpers.getDashboardIdFromCookie"]
    LocationsController_Index["LocationsController.Index"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    LocationsController_Index --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_Index --> Insorce_Helpers_Helpers_SetDashboardIdToCookie
    LocationsController_Index --> Insorce_Helpers_Helpers_getDashboardIdFromCookie
View Metadata
  • View: Index (Andromeda.Web\Views\Locations\Index.cshtml)
  • Model: IList<Andromeda.Core.Entities.CustomWidgetView>
Detailed Analysis

Key Flows - Summary: The method sets the dashboard ID cookie and loads dashboard data using the provided 'view' parameter. - Use 'view' parameter to set dashboard ID cookie

Error Flows - Summary: Fix syntax errors and undefined method calls to ensure code reliability. - Syntax errors from unmatched closing parenthesis, Undefined method 'e' called with integer argument causing runtime errors

Security Issues - Summary: Unvalidated cookie data and insecure session storage create security vulnerabilities. - Use validated and sanitized cookie data

Performance Issues - Summary: Storing large project data in session degrades performance. - Large project data retrieval, Storing large data in session

Maintainability Issues - Summary: Fix naming errors and decouple controller from models and session for better maintainability. - Typo in helper method name reduces code clarity, Undefined method 'e' lacks context, hindering understanding, Tight coupling between controller and multiple models reduces modularity, Direct manipulation of ViewData and Session decreases maintainability

UX Impact Notes - Summary: Null view or missing dashboard ID causes incomplete or incorrect dashboard rendering. - Null view with missing dashboard ID degrades user experience, Incorrect or missing data causes incomplete or unexpected UI rendering

Test Case Ideas - Summary: Verify dashboard ID handling, data population, view filtering, widget ordering, session storage, and method behavior. - Valid integer 'view' parameter sets dashboard ID and populates data - Else branch executes after setting dashboard ID cookie and ToString call

Dependencies & Called Services - Summary: Uses core utilities and interfaces for processing and project modeling. - Enumerable utilities, Helper functions, IProcessModel interface, IProjectModel interface, Int32 data type

GeolocateActors

Summary: Retrieve and filter project data, actors, and foreign exchange rates for geolocation processing.

ActionResult LocationsController.GeolocateActors(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/GeolocateActors
View Metadata
  • View: GeolocateActors (Andromeda.Web\Views\Locations\GeolocateActors.cshtml)
  • Model: IList<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - Summary: Retrieve and filter project data, actors, and foreign exchange rates for geolocation processing. - set IsKPIKRI to false - Retrieve foreign exchange rates and assign to ViewBag.FxRates

Performance Issues - Summary: Excessive database calls without caching degrade performance. - Multiple database calls without caching, Unoptimized calls to GetAllActivities, GetObjectives, GetObjectiveActivityByProj, GetActors, GetFxRates

Maintainability Issues - Summary: Hardcoded strings, anonymous types, and hidden side effects reduce code maintainability. - Use of anonymous types in data assignments

UX Impact Notes - Summary: Direct data assignment to ViewBag and ViewData affects UI display accuracy. - Direct data assignment to ViewBag - Direct data assignment to ViewData

Test Case Ideas - Summary: Verify correct data retrieval and property assignments for project actors and related data. - Actors retrieved with IsKPIKRI set to false - FX rates assigned to ViewBag.FxRates - Objective risk activities assigned to ViewData["objectriskactivities"]

Dependencies & Called Services - Summary: Uses data collections and models for actor and risk information processing. - Enumerable for data iteration, IActorModel for actor data, IRiskModel for risk data, String for textual data

GetLocation

Summary: GetLocation retrieves the current geographic location using device sensors or network data.

Location LocationsController.GetLocation(string locationCode)

Routing

  • HTTP: GET
  • URL: /Locations/GetLocation

Cross-layer call chain - LocationsController.GetLocation → Andromeda.Core.DataManager.GetData

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
    LocationsController_GetLocation["LocationsController.GetLocation"]
    LocationsController_GetLocation --> Andromeda_Core_DataManager_GetData
Detailed Analysis

Key Flows - Summary: GetLocation retrieves the current geographic location using device sensors or network data. - Return geographic coordinates - Handle permission checks

Error Flows - Summary: GetLocation returns null for invalid locationCode inputs. - Null return for empty locationCode - Null return for whitespace locationCode

Maintainability Issues - Summary: GetLocation uses incorrect attribute and has incomplete return statements. - Incomplete or truncated return statements

UX Impact Notes - Summary: Returning null for invalid locationCode requires proper handling to avoid UX issues. - Null return on invalid locationCode impacts UX if unhandled - Null or whitespace locationCode checks affect error display and user flow

Test Case Ideas - Summary: Verify GetLocation returns valid Location object for valid locationCode. - Return valid Location object

Dependencies & Called Services - Summary: GetLocation depends on IActorModel and String types. - IActorModel dependency, String type usage

GeolocateSave

Summary: Retrieve project and actor data, update actors with new location codes, adjust catchments and costs, save configuration, and set impact statuses.

JsonResult LocationsController.GeolocateSave()

Routing

  • HTTP: POST
  • URL: /Locations/GeolocateSave
Detailed Analysis

Key Flows - update actors with new location codes - adjust catchments and costs - and set impact statuses. - Delete catchments and update costs for changed actors - Set impact statuses - Update actor model

Error Flows - Summary: Handle JSON deserialization errors and add explicit exception handling for downstream calls. - JSON deserialization errors in request form data, Lack of explicit exception handling for downstream operations

Security Issues - Summary: Json.Decode method risks deserialization vulnerability from request form data. - Deserialization vulnerability in Json.Decode, Untrusted JSON data from request form

Performance Issues - Summary: GeolocateSave suffers from inefficient loops and repeated model calls harming performance. - Sequential model updates and saves without error handling

Maintainability Issues - Summary: Remove magic numbers and reduce tight coupling to improve maintainability. - Use of magic numbers reduces code clarity, Tight coupling between controller and multiple models, Incomplete code snippets and lack of context

Test Case Ideas - Summary: Validate GeolocateSave handles data correctly - updates actors - manages catchments - Delete catchments and update costs for matching actor IDs with different location codes - Handle large OriActors collection for performance and scalability - Return valid JsonResult for valid form data - Avoid unintended updates for non-matching actor IDs - Correctly process onCode condition for catchment deletion and cost updates - Ensure conditional logic correctness and edge case coverage - Update actor model accurately after UpdateActor call

Dependencies & Called Services - Summary: GeolocateSave depends on multiple domain models and string data. - IActorModel dependency, IHRModel dependency, IImpactModel dependency, IProcessModel dependency, String data usage

JsonDateParse

Summary: Parse JSON string, replace date patterns with formatted values, and return the modified string.

string LocationsController.JsonDateParse(string data)

Routing

  • HTTP: GET
  • URL: /Locations/JsonDateParse
Detailed Analysis

Key Flows - and return the modified string. - Create regex to match JSON date patterns - Return modified string

Security Issues - Summary: Regular expression in JsonDateParse risks ReDoS attacks. - Regular expression vulnerability to ReDoS

Performance Issues - Summary: Repeated Regex creation and string operations degrade performance on large inputs. - Repeated Regex object creation on each call, Expensive Regex Matches on large input strings, Inefficient repeated string replacements in loop

Maintainability Issues - Summary: Hardcoded values and unclear code reduce readability and maintainability. - Hardcoded regular expression pattern lacks documentation, Non-descriptive variable names reduce readability, Hardcoded '1900' string reduces flexibility, Incomplete and unclear code snippet complicates understanding

Test Case Ideas - Summary: Verify JsonDateParse correctly replaces valid dates and leaves non-date strings unchanged. - Return original string if no date patterns

Dependencies & Called Services - Summary: Parse JSON dates using regex on strings. - Regex for pattern matching, String manipulation for date parsing

Timezone

Summary: The method extracts and returns the time zone name from a valid time zone ID string.

string LocationsController.Timezone(string TimeZone)

Routing

  • HTTP: GET
  • URL: /Locations/Timezone
Detailed Analysis

Key Flows - Summary: The method extracts and returns the time zone name from a valid time zone ID string. - Return extracted time zone name

Error Flows - Summary: The method throws unhandled exceptions for invalid time zone IDs. - Unhandled exceptions from invalid time zone IDs

Performance Issues - Summary: IndexOf and Substring on large DisplayName strings degrade performance. - Use of IndexOf on DisplayName, Use of Substring on DisplayName

Maintainability Issues - Summary: Remove unnecessary variable and rename method to follow C# naming conventions. - Unnecessary variable 'tz', Method name 'Timezone' violates C# naming conventions

Test Case Ideas - Summary: Verify Timezone action handles GET requests and returns correct time zone names. - Handle HTTP GET requests - Return correct time zone name for valid ID

Dependencies & Called Services - Summary: Uses string identifiers and TimeZoneInfo objects for timezone handling. - String identifiers for timezones, TimeZoneInfo objects for timezone data

WorkingHours

Summary: Retrieve foreign exchange rates, assign to ViewBag, and return the view.

ActionResult LocationsController.WorkingHours()

Routing

  • HTTP: GET
  • URL: /Locations/WorkingHours
View Metadata
  • View: WorkingHours (Andromeda.Web\Views\Locations\WorkingHours.cshtml)
  • Model: IList<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - assign to ViewBag - and return the view. - Assign rates to ViewBag.FxRates - Return view

Performance Issues - Summary: Calling GetFxRates without caching causes performance degradation. - Uncached GetFxRates calls, Potential slow or resource-intensive GetFxRates method

Maintainability Issues - Summary: Undefined variables, anonymous types, and incomplete conditionals reduce code clarity and maintainability. - Incomplete conditional statement on actors.Count indicates unclear logic

UX Impact Notes - Summary: The method returns views that redirect or display data - Redirect user to ProcessCreation action on condition - Return result from WorkingHours action - Display foreign exchange rates in returned view

Test Case Ideas - Summary: Verify method returns correct ActionResult - handles GET - manages redirects - and sets properties properly. - Handle HTTP GET requests - Redirect to 'ProcessCreation' when condition true - Return valid ActionResult - Set IsKPIKRI to false in returned object - Test actor count conditions for redirect behavior - Avoid redirect when condition false - Assign ViewBag.FxRates correctly - Return view properly

Dependencies & Called Services - Summary: Uses Enumerable for collection operations and IActorModel for actor interactions. - Enumerable for collection handling, IActorModel for actor communication

WorkingHoursSave

Summary: Process and update actors' working hours, refresh cache, save config changes, and update project impact status.

void LocationsController.WorkingHoursSave()

Routing

  • HTTP: POST
  • URL: /Locations/WorkingHoursSave
Detailed Analysis

Key Flows - Summary: Process and update actors' working hours - and update project impact status. - Set working hours for each actor - Update project impact status for location

Error Flows - Summary: Handle invalid JSON and null or empty Actors collection errors during working hours save. - Null or empty Actors collection errors when setting working hours

Security Issues - Summary: Fix JSON deserialization vulnerability and incomplete code causing errors. - JSON deserialization vulnerability from System.Web.Helpers.Json.Decode, Incomplete code fragment causing unexpected behavior or errors

Performance Issues - Summary: Iterating large Actors and multiple cache removals degrade performance. - Inefficient iteration over large Actors collection, Multiple RemoveOutputCacheItem calls impacting performance

Maintainability Issues - Summary: Remove magic numbers and debugging code; reduce tight coupling and fix incomplete code. - Use of unclear magic method 'SetWorkingHours'

UX Impact Notes - Summary: Cache updates ensure data freshness - Cache updates

Test Case Ideas - working hours setting - impact status update - Set working hours for each actor accurately - Remove cache items after updates - Update impact status correctly

Dependencies & Called Services - Summary: Convert data types and handle collections and models for working hours saving. - Convert data types, Use IActorModel for actor data, Use ICollection for collections, Use IImpactModel for impact data, Use IProcessModel for process data, Use Int32 for integer values, Use String for text data

FindFirstDayOfWeekInYear

Summary: Identify the first occurrence of a specified weekday in a given year.

DateTime LocationsController.FindFirstDayOfWeekInYear(int year, DayOfWeek dw)

Routing

  • URL: /Locations/FindFirstDayOfWeekInYear
Detailed Analysis

Key Flows - Summary: Identify the first occurrence of a specified weekday in a given year. - Check each day from January 1 to 7 for the target weekday - Return the DateTime of the first matching weekday

Error Flows - Summary: The method lacks error handling for invalid year inputs causing exceptions. - Missing error handling for invalid year parameter, Potential exceptions from DateTime constructor

Performance Issues - Summary: Loop iterates up to 7 times using a hardcoded limit, causing minimal performance impact. - Hardcoded loop limit of 7 iterations, Minimal performance impact from looping up to 7 days

Maintainability Issues - Summary: The method lacks input validation and uses unclear variable definitions. - Missing validation for 'year' parameter range, Unclear or undefined variables reduce code clarity

Test Case Ideas - Summary: Verify method finds the correct first specified weekday in various years. - Test multiple valid years with each DayOfWeek value, Test edge cases where January 1st matches the specified DayOfWeek, Test correct identification of the first occurrence without skipping days

GetAllWeeksInAMonthByDay

Summary: Initialize a list and retrieve the first day of the specified week in the year.

IList<DateTime> LocationsController.GetAllWeeksInAMonthByDay(int Month, int year, DayOfWeek dw)

Routing

  • URL: /Locations/GetAllWeeksInAMonthByDay
Detailed Analysis

Key Flows - Summary: Initialize a list and retrieve the first day of the specified week in the year. - Initialize empty date list, Retrieve first day of specified week in year

Performance Issues - Summary: Looping over many dates degrades performance and slows list additions. - Performance degradation from looping over large date ranges, List additions slow down with many iterations

Maintainability Issues - Summary: Incomplete code segments hinder understanding and maintenance. - Incomplete or truncated code segments

Test Case Ideas - Summary: Verify correct weekly date lists for various months, years, and start days including leap years. - Handle leap year February edge cases - Validate weeks for different months and years - Confirm correct number of weeks returned per month

Dependencies & Called Services - Summary: Uses DateTime for date handling, List for collections, and Locations for location data. - DateTime for date operations, List for data collections, Locations for location context

TeamSize

Summary: Calculate project risk coverage, HR and infrastructure costs, aggregate team efforts, and prepare data for the view.

ActionResult LocationsController.TeamSize()

Routing

  • HTTP: GET
  • URL: /Locations/TeamSize

Cross-layer call chain - LocationsController.TeamSize → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.TeamSize → Andromeda.Core.Models.ModelHelper.GetFxRates - LocationsController.TeamSize → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - LocationsController.TeamSize → Insorce.Helpers.Helpers.DaysConverter - LocationsController.TeamSize → Insorce.Helpers.Helpers.CurrencyConverter - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - Andromeda.Core.Models.ModelHelper.GetFxRates → Andromeda.Core.Models.ModelHelper.GetFxRates - Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Insorce.Helpers.Helpers.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Insorce.Helpers.Helpers.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_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_Models_ModelHelper_GetFxRates["Andromeda.Core.Models.ModelHelper.GetFxRates"]
    Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
    Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
    LocationsController_TeamSize["LocationsController.TeamSize"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
    Andromeda_Core_Models_ModelHelper_GetFxRates --> Andromeda_Core_Models_ModelHelper_GetFxRates
    Insorce_Helpers_Helpers_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
    Insorce_Helpers_Helpers_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_TeamSize --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_TeamSize --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
    LocationsController_TeamSize --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_TeamSize --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_TeamSize --> Insorce_Helpers_Helpers_DaysConverter
View Metadata
  • View: TeamSize (Andromeda.Web\Views\Locations\TeamSize.cshtml)
Detailed Analysis

Key Flows - Summary: Calculate project risk coverage, HR and infrastructure costs, aggregate team efforts, and prepare data for the view. - Calculate risk control coverage percentage, Calculate infrastructure cost and daily efforts from project activities and out-process properties - Set ViewData flags and prepare aggregated metrics object - Return view with project and team size data

Error Flows - Summary: Handle errors when retrieving data from ActorModel - Error handling for ActorModel data retrieval, Error handling for InfraModel data retrieval, Error handling for RiskModel data retrieval

Security Issues - Summary: No security issues identified in the analyzed code. - No explicit security vulnerabilities found

Performance Issues - Summary: Multiple database calls and inefficient collection operations degrade performance. - Use of ToList() on large datasets increasing memory usage

Maintainability Issues - Summary: The method is complex, poorly named, tightly coupled, and hard to read or maintain. - Complex return statement with multiple anonymous objects reduces readability

UX Impact Notes - Summary: Provides team size and cost data view but risks runtime errors from incomplete code. - Prepare and return view with project metrics

Test Case Ideas - and view data setup. - Correct data return for project ID - View returns correct aggregated data - Proper update of actor benchmarks - Handle missing fxRates for skill currencies

Dependencies & Called Services - Summary: Uses core data structures, interfaces, and utility helpers for processing and modeling. - Core data structures, Model interfaces, Utility helpers, Extension methods, Mathematical operations

DeadlineOptimizer

Summary: Optimize project deadlines by retrieving relevant data, clearing old observations, and running the optimization calculator.

JsonResult LocationsController.DeadlineOptimizer()

Routing

  • HTTP: POST
  • URL: /Locations/DeadlineOptimizer
Detailed Analysis

Key Flows - Summary: Optimize project deadlines by retrieving relevant data, clearing old observations, and running the optimization calculator. - Delete existing project deadline observations - Retrieve project actors with location data, Retrieve all in-process project activities, Retrieve optimization configuration value, Call Calculator.Optimize with data and configuration

Error Flows - Summary: Handle invalid project IDs and missing data explicitly in error flows. - Invalid project ID handling, Missing data validation

Performance Issues - Summary: High memory usage and complex computations degrade performance in DeadlineOptimizer. - High memory usage from materializing all activities and process arrows into lists, Performance impact from Optimize method's many parameters and complex computations

Maintainability Issues - Summary: DeadlineOptimizer has high coupling, unclear constants, poor readability, and lacks documentation. - High coupling to external models and services, Use of unclear magic number Constants.MaxDelayHour, Incomplete and corrupted code segments, Missing comments and documentation on key operations

Test Case Ideas - and conditional logic in DeadlineOptimizer. - Delete existing deadline observations before optimization - Retrieve actors with location data for a project, Retrieve relevant activities excluding out-of-process, Test Optimize method with various inputs for correct output, Test conditional branches involving variables like 'c' and 'configVal'

Dependencies & Called Services - Summary: Uses interfaces for enumeration, actor modeling, calculation, and process modeling. - Enumerable interface, IActorModel interface, ICalculator interface, IProcessModel interface

Optimizer

Summary: The method initializes impact statuses, processes form data, conditionally saves configurations, triggers optimization based on type and project status, and updates caches and statuses post-optimization.

JsonResult LocationsController.Optimizer()

Routing

  • HTTP: POST
  • URL: /Locations/Optimizer

Cross-layer call chain - LocationsController.Optimizer → Andromeda.Core.Services.Calculator.Optimize - Andromeda.Core.Services.Calculator.Optimize → Andromeda.Core.Models.ModelHelper.ProjectTimeZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_Calculator_Optimize["Andromeda.Core.Services.Calculator.Optimize"]
    LocationsController_Optimizer["LocationsController.Optimizer"]
    Andromeda_Core_Services_Calculator_Optimize --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_Optimizer --> Andromeda_Core_Services_Calculator_Optimize
Detailed Analysis

Key Flows - and updates caches and statuses post-optimization. - Clear optimization cache and update impact statuses after optimization

Error Flows - Summary: Handle input conversion errors and null references to prevent runtime failures. - Input conversion exceptions for invalid integer or decimal values, Null reference exceptions from missing Request.Form fields or Session variables, Incomplete or incorrect code causing runtime or compilation errors

Security Issues - Summary: Unvalidated input and exposed session code create SQL injection - Use of Request.Form values without validation or sanitization, Exposed or incomplete session management code

Performance Issues - Summary: Reduce redundant database calls and optimize expensive computations. - Multiple redundant SetCompleteImpactStatus calls causing database overhead - Commented-out loops and LINQ queries potentially slow on large datasets

Maintainability Issues - Summary: Code uses magic strings, has unclear naming, tight coupling, and incomplete code segments. - Use of magic strings for form fields and URIs, Incomplete, commented-out, or syntactically incorrect code, Tight coupling with DependencyResolver and specific models, Unclear or inconsistent variable naming

UX Impact Notes - Summary: Form data errors cause visible user issues; no direct feedback or redirection provided. - No direct user feedback or redirection

Test Case Ideas - conditional logic - SetCompleteImpactStatus called with various NavigationURI values - Method returns control to caller as expected

Dependencies & Called Services - Summary: Uses multiple service interfaces and models for calculations, conversions, and location handling. - Calculator service, Convert service, IActorModel interface, ICalculator interface, IImpactModel interface, IProcessModel interface, Locations service

CalculateMaxBenefit

Summary: CalculateMaxBenefit retrieves project data, resets actor and activity states, and runs optimization with configured parameters.

JsonResult LocationsController.CalculateMaxBenefit()

Routing

  • HTTP: POST
  • URL: /Locations/CalculateMaxBenefit

Cross-layer call chain - LocationsController.CalculateMaxBenefit → Andromeda.Core.Services.Calculator.Optimize - Andromeda.Core.Services.Calculator.Optimize → Andromeda.Core.Models.ModelHelper.ProjectTimeZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_Calculator_Optimize["Andromeda.Core.Services.Calculator.Optimize"]
    LocationsController_CalculateMaxBenefit["LocationsController.CalculateMaxBenefit"]
    Andromeda_Core_Services_Calculator_Optimize --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_CalculateMaxBenefit --> Andromeda_Core_Services_Calculator_Optimize
Detailed Analysis

Key Flows - resets actor and activity states - Delete existing constraints benefit for the project via ActorModel - Fetch actors with locations and activities filtered by types starting with 'A' or 'R' - reset 'Wait' and 'TOD' properties - Reset each actor's Count property to 1

Performance Issues - Summary: Multiple database calls and large data retrieval degrade performance. - Multiple database calls in ActorModel.GetActorsWithLocation and getActivities, Use of ToList() on large collections causing memory overhead, Optimize method with many parameters impacting performance

Maintainability Issues - Summary: Improve code clarity by removing magic strings, clarifying variable names, and eliminating hidden dependencies. - Resetting Count to magic number with external class reference creates hidden dependencies

Test Case Ideas - property resets - filtering logic - Correct data return for valid project ID - Reset 'type' variable to empty string - Set 'Wait' to empty and 'TOD' to zero for process arrows - Correct assignment of 'ease' and graceful handling of malformed input - Reset Count property of actors and process all actors - Validate filtering logic if enabled

Dependencies & Called Services - Summary: CalculateMaxBenefit uses calculation, enumeration, actor and process models, and string handling. - Calculation utilities, Enumeration support, Actor model interface, String manipulation - Process model interface

SaveKeyMeasures

Summary: Retrieve process with 'Com' false, update Levers and KeyMeasures, then return JsonResult with data.

JsonResult LocationsController.SaveKeyMeasures()

Routing

  • HTTP: POST
  • URL: /Locations/SaveKeyMeasures

Cross-layer call chain - LocationsController.SaveKeyMeasures → Andromeda.Core.Services.AsyncProcessManager.GetProcessorDetail

Call Chain Diagram

flowchart TD
    Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail["Andromeda.Core.Services.AsyncProcessManager.GetProcessorDetail"]
    LocationsController_SaveKeyMeasures["LocationsController.SaveKeyMeasures"]
    LocationsController_SaveKeyMeasures --> Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail
Detailed Analysis

Key Flows - update Levers and KeyMeasures - then return JsonResult with data. - Return JsonResult containing variables 's' and 'measures' - Update process Levers and KeyMeasures

Error Flows - Summary: SaveKeyMeasures lacks input validation and exception handling, risking errors and security issues. - Missing null or empty check for Registry.CurrentProjectId

Security Issues - Summary: Unsanitized input from Request.Form creates security vulnerabilities. - Lack of input validation, No input sanitization, Potential injection risks

Performance Issues - Summary: No performance issues identified in SaveKeyMeasures method.

Maintainability Issues - Summary: Improve variable naming, remove incomplete and unused code, clarify method ending. - Non-descriptive variable names reduce code clarity, Incomplete code causes compilation issues, Unused statements confuse maintainers, Unclear method ending hinders understanding

Test Case Ideas - Summary: Verify SaveKeyMeasures returns correct JsonResult and updates properties based on process conditions. - Handle process 'Com' false branch correctly - Return valid JsonResult for valid input - Assign Levers and KeyMeasures when process is valid - Call UpdateLeversAndMeasures with correct parameters when process condition fails - Validate JsonResult content for various inputs and measures

Dependencies & Called Services - Summary: SaveKeyMeasures uses AsyncProcessManager and IActorModel services. - AsyncProcessManager service, IActorModel service

CancelOptimization

Summary: CancelOptimization retrieves the processor detail and terminates the process, returning success status.

JsonResult LocationsController.CancelOptimization()

Routing

  • HTTP: GET
  • URL: /Locations/CancelOptimization

Cross-layer call chain - LocationsController.CancelOptimization → Andromeda.Core.Services.AsyncProcessManager.GetProcessorDetail - LocationsController.CancelOptimization → Andromeda.Core.Services.AsyncProcessManager.KillProcess - Andromeda.Core.Services.AsyncProcessManager.KillProcess → Andromeda.Core.Services.ScheduleOptimizer.Dispose - Andromeda.Core.Services.AsyncProcessManager.KillProcess → Andromeda.Core.Algorithm.SchedulerAlgorithm.Dispose - Andromeda.Core.Services.AsyncProcessManager.KillProcess → Andromeda.Core.Services.SignalRMsg.SendMessage

Call Chain Diagram

flowchart TD
    Andromeda_Core_Algorithm_SchedulerAlgorithm_Dispose["Andromeda.Core.Algorithm.SchedulerAlgorithm.Dispose"]
    Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail["Andromeda.Core.Services.AsyncProcessManager.GetProcessorDetail"]
    Andromeda_Core_Services_AsyncProcessManager_KillProcess["Andromeda.Core.Services.AsyncProcessManager.KillProcess"]
    Andromeda_Core_Services_ScheduleOptimizer_Dispose["Andromeda.Core.Services.ScheduleOptimizer.Dispose"]
    Andromeda_Core_Services_SignalRMsg_SendMessage["Andromeda.Core.Services.SignalRMsg.SendMessage"]
    LocationsController_CancelOptimization["LocationsController.CancelOptimization"]
    Andromeda_Core_Services_AsyncProcessManager_KillProcess --> Andromeda_Core_Algorithm_SchedulerAlgorithm_Dispose
    Andromeda_Core_Services_AsyncProcessManager_KillProcess --> Andromeda_Core_Services_ScheduleOptimizer_Dispose
    Andromeda_Core_Services_AsyncProcessManager_KillProcess --> Andromeda_Core_Services_SignalRMsg_SendMessage
    LocationsController_CancelOptimization --> Andromeda_Core_Services_AsyncProcessManager_GetProcessorDetail
    LocationsController_CancelOptimization --> Andromeda_Core_Services_AsyncProcessManager_KillProcess
Detailed Analysis

Key Flows - returning success status. - Return JSON response indicating success

Error Flows - Summary: CancelOptimization lacks explicit error handling for invalid project ID or missing process details. - No explicit error handling for invalid project ID, No explicit error handling for missing process details, Undefined behavior on error conditions, Requires testing for error scenarios

Maintainability Issues - Summary: Unclear and incomplete conditions reduce code clarity and maintainability. - Unclear conditional statements, Undefined condition 'll' before KillProcess call

UX Impact Notes - Summary: The user always receives a JSON response confirming cancellation success. - JSON response indicating cancellation result, Cancellation result always true

Test Case Ideas - Summary: Verify CancelOptimization returns correct processor details - handles process conditions - returns true JSON - Handle different 'process' values - Return correct processor detail for project - Return JSON response with true after cancellation

Dependencies & Called Services - Summary: CancelOptimization uses AsyncProcessManager for asynchronous process handling. - AsyncProcessManager dependency, Asynchronous process handling

Calculate

Summary: Deserialize JSON to actor objects, create Actor instances, save configuration, and return JSON response.

JsonResult LocationsController.Calculate()

Routing

  • HTTP: POST
  • URL: /Locations/Calculate
Detailed Analysis

Key Flows - create Actor instances - and return JSON response. - Iterate actorWrapper collection to create Actor instances - Return JSON response to client

Error Flows - Summary: Handle invalid JSON and manage empty or large actorWrapper collections. - Handle invalid or missing JSON data in request - Manage empty actorWrapper collections, Manage very large actorWrapper collections

Security Issues - Summary: Direct JSON deserialization of request data risks security vulnerabilities. - Direct JSON deserialization of request form data, Lack of explicit input validation

Performance Issues - Summary: Iterating large collections and repeated Convert.ToInt32 calls degrade performance. - Performance degradation iterating large actorWrapper collections, Repeated Convert.ToInt32 calls without error handling

Maintainability Issues - Summary: Remove magic numbers, decouple dependencies, and improve variable naming for maintainability. - Use of magic numbers and hardcoded values reduces clarity, Tight coupling with ProcessMapModel and Json method hinders maintenance, Non-descriptive variable names reduce readability

UX Impact Notes - Summary: Returns JSON response to update UI and display messages. - JSON response for UI updates

Test Case Ideas - Summary: Verify data handling, object population, method calls, configuration saving, and JSON response. - Handle valid JSON data in request form - Handle missing data in request form - Call SetActorCount with correct parameters for each Actor - Return JSON response successfully

Dependencies & Called Services - Summary: Calculate method depends on Convert, IActorModel, and IProcessModel services. - Convert service dependency, IActorModel interface usage, IProcessModel interface usage

ActorEffort

Summary: Calculate actor effort and team minimum FTE from filtered activities and return as JSON.

JsonResult LocationsController.ActorEffort(int? ProjID)

Routing

  • HTTP: GET
  • URL: /Locations/ActorEffort

Cross-layer call chain - LocationsController.ActorEffort → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ActorEffort → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_ActorEffort["LocationsController.ActorEffort"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ActorEffort --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ActorEffort --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: Calculate actor effort and team minimum FTE from filtered activities and return as JSON. - Calculate actor effort and team minimum FTE using models - Return actor effort list as JSON response

Error Flows - Summary: Prevent null reference exception by checking nullable project ID before access. - Null reference exception from accessing nullable project ID without null check

Security Issues - Summary: No security issues identified in ActorEffort method.

Performance Issues - Summary: Inefficient list searches and large collection iterations degrade performance. - Use of FindByID inside RemoveAll causes performance degradation on large lists, Iterating large collections to add string keys to actorEffort list reduces performance

Maintainability Issues - Summary: Long method chains and incomplete code reduce code clarity and maintainability. - Long chains of method calls and object creations, Incomplete or improperly formatted code snippets

UX Impact Notes - Summary: Data errors disrupt UI and degrade user experience. - Data retrieval and processing errors, JSON response impacts client-side UI

Test Case Ideas - Summary: Test ActorEffort for empty and large inputs and verify correct JSON response handling. - Evaluate performance and correctness with large activity list, Verify Json method call with actorEffort data and response serialization - Handle empty activity list in filtering and calculations

Dependencies & Called Services - Summary: Uses collections and interfaces to manage actor models and process extensions. - Dictionary for key-value storage, Enumerable for collection iteration, IActorModel interface for actor abstraction, Int32 for integer operations, List for ordered collections - ProcessExtensions for process-related utilities

GetMathResult

Summary: GetMathResult loads and returns the math result for a given ProjectID and clears its optimization cache.

void LocationsController.GetMathResult(int? ProjectID)

Routing

  • HTTP: GET
  • URL: /Locations/GetMathResult
Detailed Analysis

Key Flows - Summary: GetMathResult loads and returns the math result for a given ProjectID and clears its optimization cache. - Clear optimization cache for ProjectID - Load math result using ProjectID

Performance Issues - Summary: Calling ClearOptimizationCache without checks degrades performance. - Unconditional ClearOptimizationCache call, Lack of error handling in cache clearing

Maintainability Issues - Summary: The method's void return type and incomplete code reduce readability and maintainability. - Void return type contradicts method purpose

UX Impact Notes - Summary: The method's lack of return value disrupts user flow. - No return value

Test Case Ideas - and method return value. - Method returns expected value - LoadMathResult called with correct ProjectID

Dependencies & Called Services - Summary: Uses IActorModel and Locations services for processing. - IActorModel service dependency, Locations service dependency

ClearOptimizationCache

Summary: ClearOptimizationCache builds URLs for dashboard actions using a project ID and clears their caches.

void LocationsController.ClearOptimizationCache(int ProjectID)

Routing

  • URL: /Locations/ClearOptimizationCache
Detailed Analysis

Key Flows - Summary: ClearOptimizationCache builds URLs for dashboard actions using a project ID and clears their caches. - Construct URLs for dashboard actions with project ID, Call Response.RemoveOutputCacheItem to clear each cache

Error Flows - Summary: The method lacks error handling, allowing exceptions to propagate. - No explicit error handling, Exceptions from Response.RemoveOutputCacheItem propagate

Performance Issues - Summary: Repeated Response.RemoveOutputCacheItem calls degrade performance without error handling or caching. - Repeated Response.RemoveOutputCacheItem calls, Lack of error handling, Absence of caching mechanism

Maintainability Issues - Summary: ClearOptimizationCache duplicates RemoveOutputCacheItem calls and may be incomplete. - Code duplication in RemoveOutputCacheItem calls with varying action names, Potential incomplete implementation or empty method

Test Case Ideas - Summary: Verify cache removal for various project IDs and dashboard actions. - Cache removal for different project IDs, Cache removal for different dashboard actions

ProjectOutcome

Summary: Process project data, compute metrics, update comparisons, and notify client with progress and results.

ActionResult LocationsController.ProjectOutcome(int? view)

Routing

  • URL: /Locations/ProjectOutcome

Cross-layer call chain - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.ProjectOutcome → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - LocationsController.ProjectOutcome → Andromeda.Core.Services.SignalRMsg.SendMessage - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetObjectivesList - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetObjRisks - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetObjActivities - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetActivities - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetArrows - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetRiskControls - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetDelooperObj - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk - LocationsController.ProjectOutcome → Insorce.Helpers.Helpers.GetIndividualPath - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetSchedData - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetActCostBreakUp - LocationsController.ProjectOutcome → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetOfficeList - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetInfraDetails - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetOfficePremises - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetTalentPools - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetPeakActivitiesForInscope - LocationsController.ProjectOutcome → Andromeda.Core.Entities.Arrow.Clone - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetAutomationPaths - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetUndesiredPaths - LocationsController.ProjectOutcome → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ObjectiveData.GetObjetiveCtrl - LocationsController.ProjectOutcome → Andromeda.Core.Entities.ProjectData.GetPeakActivityUnits - LocationsController.ProjectOutcome → Insorce.Helpers.Helpers.CurrencyConverter - LocationsController.ProjectOutcome → Insorce.Helpers.Helpers.DaysConverter - 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 - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetSkillMatrix → Andromeda.Core.DataManager.ExecuteScalar - Andromeda.Core.Services.SignalRMsg.SendMessage → Andromeda.Core.LoggingManager.Info - Andromeda.Core.Services.SignalRMsg.SendMessage → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetActivities → Andromeda.Core.DataManager.GetDataList - Andromeda.Core.Entities.ProjectData.GetRiskControls → Andromeda.Core.DataManager.GetData - Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk → Andromeda.Core.DataManager.GetDataList - Insorce.Helpers.Helpers.GetIndividualPath → Andromeda.Core.Entities.Arrow.Clone - Insorce.Helpers.Helpers.GetIndividualPath → Andromeda.Core.Entities.EdgeInfo.Clone - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour - Insorce.Helpers.Helpers.CurrencyConverter → Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter - Insorce.Helpers.Helpers.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter

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_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Entities_EdgeInfo_Clone["Andromeda.Core.Entities.EdgeInfo.Clone"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_ObjectiveData_GetObjetiveCtrl["Andromeda.Core.Entities.ObjectiveData.GetObjetiveCtrl"]
    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_GetAllObjectiveActivityRisk["Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk"]
    Andromeda_Core_Entities_ProjectData_GetArrows["Andromeda.Core.Entities.ProjectData.GetArrows"]
    Andromeda_Core_Entities_ProjectData_GetAutomationPaths["Andromeda.Core.Entities.ProjectData.GetAutomationPaths"]
    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_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_GetPeakActivitiesForInscope["Andromeda.Core.Entities.ProjectData.GetPeakActivitiesForInscope"]
    Andromeda_Core_Entities_ProjectData_GetPeakActivityUnits["Andromeda.Core.Entities.ProjectData.GetPeakActivityUnits"]
    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_GetUndesiredPaths["Andromeda.Core.Entities.ProjectData.GetUndesiredPaths"]
    Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
    Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
    Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
    Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter["Andromeda.Core.Extensions.LinqExtensions.CurrencyConverter"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Andromeda_Core_Services_SignalRMsg_SendMessage["Andromeda.Core.Services.SignalRMsg.SendMessage"]
    Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
    Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
    Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
    LocationsController_ProjectOutcome["LocationsController.ProjectOutcome"]
    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_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_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_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Services_ProcessExtensions_FindByID
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Info
    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
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ObjectiveData_GetObjetiveCtrl
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActCostBreakUp
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetAutomationPaths
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjActivities
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjRisks
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetObjectivesList
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetPeakActivitiesForInscope
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetPeakActivityUnits
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetRiskControls
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetSchedData
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetUndesiredPaths
    LocationsController_ProjectOutcome --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_ProjectOutcome --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_ProjectOutcome --> Andromeda_Core_Services_SignalRMsg_SendMessage
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_DaysConverter
    LocationsController_ProjectOutcome --> Insorce_Helpers_Helpers_GetIndividualPath
View Metadata
  • View: ProjectOutcome (Andromeda.Web\Views\Locations\ProjectOutcome.cshtml)
Detailed Analysis

Key Flows - update comparisons - Calculate control coverage, adequacy benefit, economic benefit, utilization, cost metrics - Check project activities and redirect if none - Create ProjectData instance with models and parameters - Send SignalR messages to notify client of computation progress - Insert or update project comparison data

Error Flows - unchecked collections - Unreachable code after return statement - Null reference exceptions from unchecked session variables and object properties

Security Issues - Summary: ProjectOutcome risks data exposure via Session and configuration tampering via AppSettings. - File paths in ConfigurationManager.AppSettings risk tampering

Performance Issues - Summary: Excessive database calls, inefficient LINQ usage, and unoptimized loops degrade performance. - Nested loops and multiple LINQ operations on large datasets

Maintainability Issues - tightly coupled logic. - Unreachable code and unused variables, Incomplete and truncated code snippets, Use of magic numbers and strings without named constants, Complex and deeply nested LINQ queries and conditionals, Inconsistent and unclear variable naming, Tight coupling with multiple models and helper classes, Commented-out code and incomplete statements, Repeated code patterns lacking abstraction

UX Impact Notes - Summary: The method improves real-time feedback and detailed UI metrics but risks delays and unclear displays. - Redirects based on project data affect navigation - SignalR messages provide real-time computation feedback, ViewData and ViewBag hold detailed metrics and benefit texts, Benefit texts include formatted currency and percentages, Heavy data processing and multiple database calls delay UI responsiveness, Incomplete data handling causes confusing or incomplete UI, Magic strings and unclear UI labels reduce user clarity

Test Case Ideas - Summary: Validate data handling - Redirection with no project activities - skill sets - SignalR message sending and client reception - Decision tree path handling and widget benefit updates - Performance testing with large datasets

Dependencies & Called Services - Summary: ProjectOutcome uses diverse models, data types, collections, utilities, and serialization for project management. - Actor, Arrow, Calendar, Convert, Decimal, Dictionary, Double, Enumerable, Gantt, Helpers, IActorModel, IFinalPlanModel, IHRModel, IInfraModel, IProcessModel, IProjectModel, IRiskModel, Int32, JavaScriptSerializer, List, Locations, Math, ObjectiveData, ProjectData, SignalRMsg, String

GetSequenceByCycleTime

Summary: Initialize variables, traverse and filter graph edges to identify activity sequences, then calculate and accumulate cycle times.

double LocationsController.GetSequenceByCycleTime(List<ScheduleAnalysis> path, List<string> pathIds, IList<EdgeInfo> edges)

Routing

  • URL: /Locations/GetSequenceByCycleTime
Detailed Analysis

Key Flows - Summary: Initialize variables, traverse and filter graph edges to identify activity sequences, then calculate and accumulate cycle times. - update lists - Update pid with first path ID for further processing

Error Flows - Summary: The method lacks explicit error handling for null, empty, or malformed inputs. - No explicit error handling, Potential failures on null or empty input collections, Potential failures on incomplete or malformed data

Performance Issues - Summary: LINQ usage inside loops causes significant performance degradation with large collections. - LINQ methods inside loops degrade performance, Repeated LINQ queries increase computational overhead, Contains() in loops causes O(n^2) complexity, Multiple enumerations of pathIds reduce efficiency

Maintainability Issues - Summary: Fix typos, replace magic strings, improve variable names, and simplify complex code for maintainability. - Typo causing compilation error in OtherpathActIds initialization, Incomplete code segments indicating unfinished implementation, Use constants or enums instead of magic strings like 'ProducerName' and 'ConsumerName', Non-descriptive variable names such as 'suc', 'pre', 'pData', 'sTime', 'fTime', 'pid', Dense and complex code structure reducing readability and maintainability

Test Case Ideas - and list updates. - Calculate sTime and fTime accurately for varied inputs - Handle empty and single-element pathIds collections - Handle large pathIds collection for performance - Handle empty edges collection - Handle pid with no matching edges - Handle pid with multiple matching edges - Handle empty - Assign pid correctly when pathIds is not empty - Update herpathActIds and OtherpathActIds lists correctly - Update cycTime correctly when fTime and sTime differ

Dependencies & Called Services - Summary: Uses collections and basic utilities for sequence processing. - Enumerable for sequence operations, List for collection management, Math for calculations, String for text handling

GetSkillScore

Summary: GetSkillScore evaluates score ranges with incomplete and undefined conditions, leading to unclear return paths.

int LocationsController.GetSkillScore(double score)

Routing

  • URL: /Locations/GetSkillScore
Detailed Analysis

Key Flows - leading to unclear return paths. - Check if score ≤ 3 to determine return value - Conditional check with undefined variable ≤ 6 affecting return - Else branch lacks action or return statement

Security Issues - Summary: Remove stray semicolon and number to prevent unexpected behavior. - Stray semicolon and number causing potential coding error, Risk of unexpected behavior due to syntax oversight

Maintainability Issues - Summary: Fix malformed conditionals, undefined variables, and unexplained magic numbers. - Malformed conditional statements with missing parentheses and incomplete logic - Unexplained magic number returned without context

Test Case Ideas - Summary: Test GetSkillScore with boundary values and verify correct return and branch behavior. - Verify method returns expected integer value

SaveMeasures

Summary: SaveMeasures handles HTTP POST requests and returns a JsonResult response.

JsonResult LocationsController.SaveMeasures()

Routing

  • HTTP: POST
  • URL: /Locations/SaveMeasures
Detailed Analysis

Key Flows - Summary: SaveMeasures handles HTTP POST requests and returns a JsonResult response. - Handle HTTP POST request - Return JsonResult response

Security Issues - Summary: The method lacks input validation and sanitization, risking security vulnerabilities. - Missing input validation, Missing input sanitization, Potential security vulnerabilities

Performance Issues - Summary: Empty method currently has no performance impact but may cause future issues. - Empty method, Potential future performance issues if operations added

Maintainability Issues - Summary: Empty method with unclear naming reduces maintainability and purpose clarity. - Empty method implementation, Non-standard naming for JsonResult method, Unclear method purpose

UX Impact Notes - Summary: SaveMeasures method degrades UX by not performing expected actions or returning data. - No meaningful data returned

Test Case Ideas - Summary: Verify SaveMeasures returns JsonResult and performs expected operations. - Return type JsonResult

HideMeasures

Summary: HideMeasures processes a POST request with an ID, hides the simulation record, and returns a JSON response.

JsonResult LocationsController.HideMeasures()

Routing

  • HTTP: POST
  • URL: /Locations/HideMeasures
Detailed Analysis

Key Flows - and returns a JSON response. - Return JsonResult response

Error Flows - Summary: The method lacks explicit error handling for invalid or missing 'ID' parameters. - Missing or invalid 'ID' parameter, No explicit error handling for parameter conversion failures

Security Issues - Summary: Direct use of Request['ID'] without validation risks SQL injection and data tampering. - Lack of validation on Request['ID'], Risk of SQL injection, Risk of data tampering

Maintainability Issues - Summary: Replace magic string 'ID' with a named constant to improve maintainability. - Use named constant instead of magic string 'ID' in Request access

UX Impact Notes - Summary: Hides simulation record and returns JsonResult affecting client-side user flow. - Return JsonResult

Test Case Ideas - Summary: Verify HideMeasures accepts only POST requests and correctly hides records with valid and invalid inputs. - Handle unexpected input types gracefully - Restrict HideMeasures to HTTP POST requests, Hide simulation record with valid ID

Dependencies & Called Services - Summary: Uses Convert and IActorModel services for data transformation and actor management. - Convert service, IActorModel interface

ShowAllMeasures

Summary: ShowAllMeasures handles a POST request, fetches simulation records for the current project, and returns them as JSON.

JsonResult LocationsController.ShowAllMeasures()

Routing

  • HTTP: POST
  • URL: /Locations/ShowAllMeasures
Detailed Analysis

Key Flows - Summary: ShowAllMeasures handles a POST request - and returns them as JSON. - Fetch simulation records via ActorModel.ShowAllSimulationRecord - Return data as JsonResult

UX Impact Notes - Summary: Returns JsonResult to support data display and user interaction. - JsonResult provides data for display, JsonResult enables further processing

Test Case Ideas - Summary: Verify ShowAllMeasures handles POST requests - and returns JsonResult. - Return JsonResult successfully - Handle HTTP POST requests

Dependencies & Called Services - Summary: Uses IActorModel service dependency. - IActorModel service dependency

GetOperationTeams

Summary: Retrieve and process team data to calculate effort and return filtered results as JSON.

JsonResult LocationsController.GetOperationTeams()

Routing

  • HTTP: GET
  • URL: /Locations/GetOperationTeams

Cross-layer call chain - LocationsController.GetOperationTeams → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GetOperationTeams → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.GetOperationTeams → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.GetOperationTeams → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.GetOperationTeams → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData

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_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_GetOperationTeams["LocationsController.GetOperationTeams"]
    Andromeda_Core_Entities_Actor_GetLocation --> 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
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_GetOperationTeams --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_GetOperationTeams --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetOperationTeams --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: Retrieve and process team data to calculate effort and return filtered results as JSON. - Calculate minimum FTE using activities and actors - Parse Slack settings from configuration - Return transformed data as JSON response

Error Flows - Summary: Validate Slack setting string to prevent parsing errors from invalid configurations. - Check Slack setting string for null

Security Issues - Summary: Retrieving slack setting without validation risks security breaches. - Unvalidated slack setting retrieval from ConfigurationManager.AppSettings

Performance Issues - Summary: Repeated searches and LINQ operations degrade performance on large collections. - RemoveAll with lambda calling FindByID repeatedly slows large list processing, Iterating large collections with LINQ Where and Select reduces performance, Repeated ToString() calls inside LINQ Select degrade performance on big data

Maintainability Issues - Summary: Replace magic strings and numbers with named constants and define all variables explicitly. - Replace magic strings with named constants, Define variable 'sla' explicitly to avoid confusion, Avoid anonymous types for clearer data structure, Replace magic numbers in formatting with named constants

Test Case Ideas - Summary: Verify GetOperationTeams returns correct data - Accurate slack setting retrieval from configuration

Dependencies & Called Services - Summary: Uses data types and collections to manage operation team data. - Actor model interfaces, DateTime handling, Decimal and Double numeric types, Dictionary and List collections, Enumerable interfaces, Integer types, String manipulation, Math utilities - Process extension methods

UpdateOperationTeams

Summary: Decode actors from JSON, update their working hours, save configuration, and return update status.

JsonResult LocationsController.UpdateOperationTeams()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateOperationTeams
Detailed Analysis

Key Flows - update their working hours - and return update status. - Parse work start/end times and create Actor objects - Return JSON response with update result - Update actors' working hours and counts

Error Flows - Summary: Handle invalid JSON and malformed time strings to prevent exceptions. - Missing or invalid JSON data causes deserialization exceptions, Malformed or missing work start/end time strings cause parsing errors

Security Issues - Summary: Unvalidated JSON deserialization risks security vulnerabilities. - Unvalidated JSON deserialization using System.Web.Helpers.Json.Decode

Performance Issues - Summary: Optimize string parsing and batch processing to improve performance with large data sets. - Performance degradation from per-actor SetWorkingHoursAndCount calls on large collections

Maintainability Issues - Summary: Deprecated libraries, incomplete code, magic dates, assumptions, and tight coupling reduce maintainability. - Use deprecated System.Web.Helpers for JSON decoding, Incomplete and syntactically incorrect code prevents compilation, Use magic dates in DateTime objects reduces clarity and flexibility, Assume Actors collection and ActorModel are properly initialized, Tight coupling with ProcessMapModel and Registry reduces modularity

UX Impact Notes - Summary: Returning JSON responses requires proper client handling to avoid UX issues. - JSON response handling, Client-side response processing

Test Case Ideas - Summary: Verify JSON decoding, time parsing, method calls, error handling, configuration saving, and JSON response correctness. - Call SetWorkingHoursAndCount for each actor - Return correct JSON response with expected data - Handle empty Actors collection without errors

Dependencies & Called Services - Summary: Convert data types and manage collections and models for operation team updates. - Convert data types, Use IActorModel for actor data, Use ICollection for collections, Use IProcessModel for process data, Use Int32 for integer values, Use String for text data

TotalCost

Summary: Calculate total project cost by aggregating actor data, activities, and product factors, then display the result.

ActionResult LocationsController.TotalCost()

Routing

  • HTTP: GET
  • URL: /Locations/TotalCost

Cross-layer call chain - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetTalentPools - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficeList - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraDetails - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficePremises - LocationsController.TotalCost → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - LocationsController.TotalCost → Insorce.Helpers.Helpers.CurrencyConverter - LocationsController.TotalCost → Andromeda.Core.Entities.Activity.Clone - LocationsController.TotalCost → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.TotalCost → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.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"]
    Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
    LocationsController_TotalCost["LocationsController.TotalCost"]
    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
    Insorce_Helpers_Helpers_CurrencyConverter --> Andromeda_Core_Extensions_LinqExtensions_CurrencyConverter
    LocationsController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
View Metadata
  • View: TotalCost (Andromeda.Web\Views\Locations\TotalCost.cshtml)
Detailed Analysis

Key Flows - Summary: Calculate total project cost by aggregating actor data, activities, and product factors, then display the result. - Fetch project actors from HRModel, Fetch actor total costs from InfraModel - Return View with calculated total cost

Error Flows - Summary: The method lacks explicit error handling or exception flows. - No explicit error handling, No exception flows described

Performance Issues - Summary: Multiple ToList() calls cause redundant database queries, degrading performance. - Multiple ToList() calls, Redundant database queries, Performance degradation

Maintainability Issues - Summary: Excessive method calls and dependencies reduce code maintainability and complicate debugging. - High number of method calls, Multiple dependencies across models, Difficult to maintain and debug

UX Impact Notes - Summary: Displays total cost calculation results in the user interface. - Returns a View

Test Case Ideas - Summary: Verify TotalCost method accessibility, correctness, and performance. - Performance with large datasets

Dependencies & Called Services - Summary: TotalCost method depends on multiple models and collections for processing activities and controls. - Activity model, Enumerable collections, IActorModel interface, IControlModel interface, IHRModel interface, IInfraModel interface, List collection - ProcessExtensions utilities

SaveLevers

Summary: SaveLevers processes POST requests to update levers and measures, then returns a JSON response.

JsonResult LocationsController.SaveLevers()

Routing

  • HTTP: POST
  • URL: /Locations/SaveLevers
Detailed Analysis

Key Flows - Summary: SaveLevers processes POST requests to update levers and measures - then returns a JSON response. - Call ActorModel.UpdateLeversAndMeasures with project ID and form data - Return JSON result to client

Error Flows - Summary: Handle missing or invalid 'id' form values to prevent unhandled exceptions. - Potential unhandled exceptions from Convert.ToInt32

Security Issues - Summary: SaveLevers uses unvalidated Request.Form values - Use of unvalidated Request.Form values

Performance Issues - Summary: No performance issues identified in SaveLevers method.

Maintainability Issues - Summary: SaveLevers tightly couples with ActorModel and Registry, complicating testing and maintenance. - Tight coupling with ActorModel, Tight coupling with Registry, Complicates testing, Complicates maintenance

UX Impact Notes - Summary: Errors in SaveLevers disrupt user experience. - Exceptions during SaveLevers execution, Negative user experience from errors

Test Case Ideas - Summary: Verify SaveLevers handles POST requests - calls UpdateLeversAndMeasures correctly - returns JSON - Handle missing or empty 'Levers' or 'Measures' inputs - Call UpdateLeversAndMeasures with correct form parameters - Return valid JSON result on success

Dependencies & Called Services - Summary: Convert IActorModel for processing in SaveLevers. - Convert IActorModel

PathAnalysis

Summary: No key flows are defined for PathAnalysis.

ActionResult LocationsController.PathAnalysis(int? eId, int? export)

Routing

  • HTTP: GET
  • URL: /Locations/PathAnalysis

Cross-layer call chain - LocationsController.PathAnalysis → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.PathAnalysis → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.PathAnalysis → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - LocationsController.PathAnalysis → Andromeda.Core.Entities.Activity.Clone - LocationsController.PathAnalysis → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.PathAnalysis → Andromeda.Core.Entities.Gantt.ActivityDelay - LocationsController.PathAnalysis → Andromeda.Core.Entities.Activity.GetNVAType - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.Gantt.ActivityDelay → Andromeda.Core.Services.TimeRange.ContainsValue

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Activity_GetNVAType["Andromeda.Core.Entities.Activity.GetNVAType"]
    Andromeda_Core_Entities_Gantt_ActivityDelay["Andromeda.Core.Entities.Gantt.ActivityDelay"]
    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_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"]
    Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
    LocationsController_PathAnalysis["LocationsController.PathAnalysis"]
    Andromeda_Core_Entities_Gantt_ActivityDelay --> Andromeda_Core_Services_TimeRange_ContainsValue
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Activity_GetNVAType
    LocationsController_PathAnalysis --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathAnalysis --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAnalysis --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: PathAnalysis (Andromeda.Web\Views\Locations\PathAnalysis.cshtml)
  • Model: List<Andromeda.Core.Entities.Activity>
Detailed Analysis

Key Flows - Summary: No key flows are defined for PathAnalysis.

Error Flows - null checks - Missing null checks leading to null reference exceptions

Security Issues - Summary: Unvalidated inputs cause SQL injection risk and syntax errors cause security flaws. - SQL injection risk from unvalidated inputs in GetAllActivityPropertiesOfProject

Performance Issues - Summary: Inefficient use of LINQ and repeated method calls cause high complexity and memory overhead. - Multiple calls to updatePathVolumes inside loops degrading performance - Multiple unoptimized LINQ queries on large datasets degrading performance

Maintainability Issues - Summary: Inconsistent naming, magic strings, complex code, and poor documentation hinder maintainability. - Commented-out code and incomplete logic causing technical debt

UX Impact Notes - Summary: Redirection and heavy data processing degrade UI responsiveness and disrupt user workflow. - Complex data processing affects response times, High memory usage reduces UI responsiveness, Malformed code risks user-visible errors - Redirection interrupts user workflow

Test Case Ideas - Summary: Verify correct data retrieval, filtering, grouping, path construction, updates, and performance under varied conditions. - Calculate effort using Sum method on activities - Handle empty and large collections in LINQ queries for performance and correctness - Redirect on activity count condition - Call updatePathVolumes for each start point with correct parameters - Test conditional branches involving skill levels and automation assignments

Dependencies & Called Services - Summary: Uses various data types, collections, models, and utility classes for process and risk analysis. - Activity class, Decimal type, Dictionary collection, Double type, Enumerable utilities, Gantt chart class, IActorModel interface, IControlModel interface, IFinalPlanModel interface, IProcessModel interface, IRiskModel interface, Int32 type, List collection, Locations class, Math utilities, String type, TimeSpan type - ProcessExtensions class

ControlsRework

Summary: ControlsRework handles HTTP GET requests by invoking ReworkReduction with 'ControlsRework' and returning its result.

ActionResult LocationsController.ControlsRework(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/ControlsRework
Detailed Analysis

Key Flows - Summary: ControlsRework handles HTTP GET requests by invoking ReworkReduction with 'ControlsRework' and returning its result. - Return ActionResult from ReworkReduction

Maintainability Issues - Summary: Rename ControlsRework to clearly reflect its purpose and called methods. - Unclear method name ControlsRework, Unclear purpose of called method ReworkReduction

Test Case Ideas - Summary: Verify ControlsRework handles GET requests - and returns expected ActionResult. - Return expected ActionResult from ReworkReduction - Handle HTTP GET request

Dependencies & Called Services - Summary: Uses Locations service for dependency management. - Locations service dependency

ReworkReduction

Summary: Manage filtered activities and rework paths, prepare cluster analysis, generate activity suggestions, and calculate process metrics.

ActionResult LocationsController.ReworkReduction(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/ReworkReduction

Cross-layer call chain - LocationsController.ReworkReduction → Andromeda.Core.Entities.Arrow.Clone - LocationsController.ReworkReduction → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ReworkReduction → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.ReworkReduction → Andromeda.Core.LoggingManager.Exception - LocationsController.ReworkReduction → Insorce.Helpers.Helpers.getSkillLevel - LocationsController.ReworkReduction → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds

Call Chain Diagram

flowchart TD
    Andromeda_Core_Constants_GetSkill["Andromeda.Core.Constants.GetSkill"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Exception["Andromeda.Core.LoggingManager.Exception"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_ReworkReduction["LocationsController.ReworkReduction"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> 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
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_ReworkReduction --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ReworkReduction --> Andromeda_Core_LoggingManager_Exception
    LocationsController_ReworkReduction --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_ReworkReduction --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ReworkReduction --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ReworkReduction --> Insorce_Helpers_Helpers_getSkillLevel
Detailed Analysis

Key Flows - Summary: Manage filtered activities and rework paths, prepare cluster analysis, generate activity suggestions, and calculate process metrics. - Calculate and store process metrics like rework effort and first-time-right rate - Retrieve and manage filtered activities via session and query parameters, Filter rework reduction paths based on activities, Initialize cluster analysis with configuration and ranking, Generate activity suggestions from team skills and data

Error Flows - Summary: Handle exceptions by resetting activities and logging errors. - Exception handling resets allDeLoopActivities to baseActivities - LoggingManager captures processing errors

Security Issues - Summary: Prevent SQL injection by sanitizing ProjectID in database queries. - SQL injection risk from unsanitized ProjectID, Sanitize ProjectID before database queries

Performance Issues - Summary: Optimize database queries and LINQ operations to improve performance on large datasets. - Use of ToList() and ToDictionary() on large datasets

Maintainability Issues - and unclear returns - Unstructured multiple variable returns reduce clarity

UX Impact Notes - Summary: Screen navigation, session state, and displayed metrics directly influence user workflow and experience. - PathAutomation return affects navigation flow

Test Case Ideas - Summary: Test data retrieval, filtering, iteration, calculations, and ViewData population under varied conditions. - Handle empty or incomplete code blocks without errors - Retrieve current project ID from registry, Remove and persist session variables under varied conditions, Filter and initialize FilteredActivities with empty and non-empty collections, Filter rework reduction paths based on FilteredActivities, Iterate over ClusterRank with empty and large collections, Retrieve and filter actor teams, skill matrices, and cost breakdowns, Generate activity suggestions verifying skill level and effort calculations, Populate ViewData dictionary with expected keys and values, Initialize and use IsControlActor variable

Dependencies & Called Services - and logging for service operations. - Core data types (Int32, String), Collections (List, Enumerable), Domain interfaces (IActorModel, IControlModel, IFinalPlanModel, IHRModel, IInfraModel, IProcessModel, IRiskModel), Utility classes (Arrow, Convert, Helpers, Math, ProcessExtensions), Location data (Locations) - Logging management (LoggingManager)

OutUndesiredOutcomes

Summary: No key flows are defined for the OutUndesiredOutcomes method.

ActionResult LocationsController.OutUndesiredOutcomes()

Routing

  • HTTP: GET
  • URL: /Locations/OutUndesiredOutcomes
Detailed Analysis

Key Flows - Summary: No key flows are defined for the OutUndesiredOutcomes method.

Test Case Ideas - Summary: Verify OutUndesiredOutcomes handles HTTP GET requests correctly. - HTTP GET request handling, Correct response generation

Dependencies & Called Services - Summary: Uses Locations service to manage dependencies. - Locations service dependency

UndesiredOutcomes

Summary: No key flows are defined in the UndesiredOutcomes method.

ActionResult LocationsController.UndesiredOutcomes()

Routing

  • HTTP: GET
  • URL: /Locations/UndesiredOutcomes
Detailed Analysis

Key Flows - Summary: No key flows are defined in the UndesiredOutcomes method.

UX Impact Notes - Summary: The method alters user flow by returning an 'Undesired' ActionResult. - 'Undesired' ActionResult return

Test Case Ideas - Summary: Verify UndesiredOutcomes method handles HTTP GET and returns correct ActionResult. - Handle HTTP GET request - Return expected ActionResult for 'Undesired' parameter

Dependencies & Called Services - Summary: Uses Locations service dependency. - Locations service dependency

PathVolumeFlow

Summary: Manage session variables, retrieve project data, filter activities and paths, calculate volume metrics, prepare scheduling and cost data, and populate ViewData for rendering.

ActionResult LocationsController.PathVolumeFlow(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/PathVolumeFlow

Cross-layer call chain - LocationsController.PathVolumeFlow → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.PathVolumeFlow → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.PathVolumeFlow → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - LocationsController.PathVolumeFlow → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.PathVolumeFlow → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - LocationsController.PathVolumeFlow → Insorce.Helpers.Helpers.getSkillLevel - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds - 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_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    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_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    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"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_PathVolumeFlow["LocationsController.PathVolumeFlow"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> 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
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathVolumeFlow --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathVolumeFlow --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: PathVolumeFlow (Andromeda.Web\Views\Locations\PathVolumeFlow.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - Summary: Manage session variables, retrieve project data, filter activities and paths, calculate volume metrics, prepare scheduling and cost data, and populate ViewData for rendering. - Calculate root, sink, rework, and undesired volume metrics - Manage session variables for filtered activities, Retrieve project actors, activities, arrows, and control factors, Filter activities and paths by session data and project ID, Prepare scheduling details, skill matrices, actor cost breakdowns, and activity suggestions, Populate ViewData with metrics and collections for view rendering

Error Flows - Summary: Handle null references and fix malformed conditionals to prevent runtime errors. - Null reference exceptions from accessing null session variables, Null reference exceptions from accessing null object properties, Malformed conditional statements causing runtime errors

Security Issues - Summary: Sanitize 'layout' parameter and ProjectID to prevent SQL injection and XSS. - Unsanitized 'layout' parameter risks SQL injection and XSS, Unsanitized ProjectID risks SQL injection in database queries

Performance Issues - Summary: Excessive LINQ operations and multiple collection enumerations degrade performance. - Multiple database queries on large datasets

Maintainability Issues - Summary: Code uses unclear naming, magic values, complex conditions, and poor practices reducing maintainability. - Direct use of ConfigurationManager.AppSettings hindering testing - Use of bitwise AND operator instead of logical AND

UX Impact Notes - Summary: Default parameters and data filtering affect displayed metrics and user interface. - Calculated metrics in ViewData influence UI presentation of project metrics - Default 'screen' parameter affects user experience if omitted, Filtered activities and session management impact displayed data

Test Case Ideas - filtering logic - Filtering logic with empty and populated collections - Performance testing with large datasets

Dependencies & Called Services - Summary: Uses data conversion, collections, math, and multiple model interfaces for processing. - Data conversion utilities, Collections and enumerables, Mathematical operations, Model interfaces: IActorModel, IControlModel, IFinalPlanModel, IHRModel, IInfraModel, IProcessModel, Helper functions - Process extensions

PathAllBatch

Summary: Retrieve and filter project data, build path models with effort calculations, and prepare ordered view data.

ActionResult LocationsController.PathAllBatch()

Routing

  • HTTP: GET
  • URL: /Locations/PathAllBatch

Cross-layer call chain - LocationsController.PathAllBatch → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.PathAllBatch → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_PathAllBatch["LocationsController.PathAllBatch"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAllBatch --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAllBatch --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: PathAllBatch (Andromeda.Web\Views\Locations\PathAllBatch.cshtml)
  • Model: List<Andromeda.Core.Entities.Activity>
Detailed Analysis

Key Flows - Summary: Retrieve and filter project data, build path models with effort calculations, and prepare ordered view data. - Set view data for arrows and paths

Performance Issues - Summary: PathAllBatch suffers from inefficient data access and costly collection operations. - Repeated FindByID calls inside loops, Inefficient ToList() and Sum() on large collections, Performance-heavy Aggregate() for concatenating activity names, Ordering large path collections by effort

Maintainability Issues - Summary: Magic numbers and unclear variable names reduce code clarity and maintainability. - Use of magic numbers in conditions, Complex lambda expressions, Non-descriptive variable names

UX Impact Notes - Summary: Order paths by descending effort to highlight the most demanding ones first. - Ordering paths by descending effort, Highlighting most effortful paths first

Test Case Ideas - and view data assignment. - Calculate effort correctly across scenarios - Aggregate and assign activity names to path model - Set view data for 'allArrows' and 'AllPaths' accurately

Dependencies & Called Services - Summary: Uses collections and interfaces for actor, control, and plan models with process extensions. - Enumerable for collection operations, IActorModel interface, IControlModel interface, IFinalPlanModel interface, List collection - ProcessExtensions utilities

WriteSchedDetailFile

Summary: Sort work units by DFSIn and ensure output file is deleted if it exists.

void LocationsController.WriteSchedDetailFile(string workingDirectory, IList<ActivitySchedule> AllWorkUnits)

Routing

  • URL: /Locations/WriteSchedDetailFile

Cross-layer call chain - LocationsController.WriteSchedDetailFile → Andromeda.Core.Services.ActivitySchedule.ToString

Call Chain Diagram

flowchart TD
    Andromeda_Core_Services_ActivitySchedule_ToString["Andromeda.Core.Services.ActivitySchedule.ToString"]
    LocationsController_WriteSchedDetailFile["LocationsController.WriteSchedDetailFile"]
    LocationsController_WriteSchedDetailFile --> Andromeda_Core_Services_ActivitySchedule_ToString
Detailed Analysis

Key Flows - Summary: Sort work units by DFSIn and ensure output file is deleted if it exists. - Delete existing output file - Sort AllWorkUnits by Activity.DFSIn

Error Flows - Summary: Handle file deletion and writing errors explicitly to prevent unhandled exceptions. - Lack of explicit exception handling, Unmanaged errors during file deletion, Unmanaged errors during file writing, Potential file access conflicts

Security Issues - Summary: Prevent path traversal and injection vulnerabilities by validating inputs. - Unvalidated workingDirectory causes path traversal risk

Performance Issues - and file rewriting for large datasets. - Inefficient sorting of AllWorkUnits with OrderBy on large datasets

Maintainability Issues - Summary: Method naming and incomplete code reduce readability and clarity. - Non-standard method name reduces readability, Incomplete code line reduces clarity

UX Impact Notes - Summary: File writing delays or errors can disrupt user workflows. - Potential workflow disruption from file writing delays, Risk of errors during file operations affecting UX

Test Case Ideas - Summary: Verify file path construction, collection sorting, CSV formatting, file handling, and concurrency issues. - File path construction with various workingDirectory inputs, Sorting AllWorkUnits by Activity.DFSIn, CSV line construction for items with and without dependencies, Escaping special characters in activity properties, Deleting existing output file before writing, Creating and writing output file if absent, Handling locked or in-use output file scenarios

Dependencies & Called Services - Summary: Uses Enumerable for collections, File for file operations, and String for text handling. - Enumerable for collection processing, File for file input/output, String for text manipulation

WorkTimings

Summary: The method retrieves project data, calculates effort metrics, analyzes schedules, updates team info, populates ViewData, and returns the WorkTimings view.

ActionResult LocationsController.WorkTimings(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/WorkTimings

Cross-layer call chain - LocationsController.WorkTimings → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.WorkTimings → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.WorkTimings → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - LocationsController.WorkTimings → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - LocationsController.WorkTimings → Andromeda.Core.Entities.TeamShiftRecommendation.SetLocation - LocationsController.WorkTimings → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.WorkTimings → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - LocationsController.WorkTimings → Andromeda.Core.Entities.TeamShiftRecommendation.WorkStartTimeInProjectZone - LocationsController.WorkTimings → Andromeda.Core.Entities.TeamShiftRecommendation.WorkEndTimeInProjectZone - LocationsController.WorkTimings → Andromeda.Core.Entities.Gantt.TeamCountByHourly - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Models.ModelHelper.ProjectTimeZone → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - Andromeda.Core.Extensions.LinqExtensions.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Sched.StartTimeHourMin - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone

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_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
    Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor["Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor"]
    Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
    Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
    Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation["Andromeda.Core.Entities.TeamShiftRecommendation.SetLocation"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkStartTimeInProjectZone"]
    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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_WorkTimings["LocationsController.WorkTimings"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone --> 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
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
    LocationsController_WorkTimings --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone
    LocationsController_WorkTimings --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone
    LocationsController_WorkTimings --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_WorkTimings --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_WorkTimings --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_WorkTimings --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: WorkTimings (Andromeda.Web\Views\Locations\WorkTimings.cshtml)
  • Model: List<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - updates team info - and returns the WorkTimings view. - Calculate hourly, daily, and team effort using LINQ and helpers - Return WorkTimings view with prepared data - Update team recommendations with project time zones

Error Flows - Summary: The method risks null reference exceptions and lacks explicit exception handling. - Null reference exceptions from invalid or null projectId, Null reference exceptions from uninitialized Session['msCriticalPath'], Runtime errors from incomplete actor and team processing code, Absence of explicit exception handling

Security Issues - Summary: Sanitize 'projectId' to prevent SQL injection in data retrieval. - Unsanitized 'projectId' causes SQL injection risk, Ensure input validation for 'projectId'

Performance Issues - Summary: Optimize LINQ queries and reduce repeated data retrieval to improve performance. - Multiple LINQ queries with ToList() on large datasets

Maintainability Issues - Summary: Refactor WorkTimings to improve readability, clarity, and single responsibility adherence. - Multiple ViewData assignments need refactoring for reuse

UX Impact Notes - Summary: Prepares detailed work timing data that enhances project timing visibility for users. - Detailed work timing and schedule data preparation, Indirect UX impact through comprehensive data presentation

Test Case Ideas - Summary: Verify accurate effort calculations, data integrity, performance, and correct view rendering. - Return WorkTimings view with all necessary rendering data - Handle empty and large collections for performance and correctness - Validate GetTeamRecommendation returns correct results and updates time zones

Dependencies & Called Services - Summary: Uses models, collections, extensions, and helpers for processing work timings. - Actor and IActorModel for user representation, DateTime for time handling, Dictionary, List, Enumerable for collections, Gantt for scheduling visualization, IControlModel, IHRModel, IInfraModel, IProcessModel for domain models, Int32 and String for basic data types, LinqExtensions and ProcessExtensions for query and process utilities, ModelHelper for model operations, TeamShiftRecommendation for shift suggestions

JoinTeams

Summary: JoinTeams processes project data to update activity properties and calculate key project metrics.

ActionResult LocationsController.JoinTeams(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/JoinTeams

Cross-layer call chain - LocationsController.JoinTeams → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - 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_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
    Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
    LocationsController_JoinTeams["LocationsController.JoinTeams"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
    LocationsController_JoinTeams --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
View Metadata
  • View: JoinTeams (Andromeda.Web\Views\Locations\JoinTeams.cshtml)
  • Model: IList<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - Summary: JoinTeams processes project data to update activity properties and calculate key project metrics. - Calculate and store metrics: hourly effort, team costs, governance data, FTE savings, economic benefits - Retrieve project activities, actors with locations, and product factors, Group activities by ProductId and match with product factors, Retrieve compensatory activities, risk controls, and activity properties - Update BusinessRuleKnowledge on activity properties using conditional logic

Performance Issues - Summary: JoinTeams suffers from multiple unoptimized database calls and inefficient data processing. - Multiple unoptimized database or model calls without caching, Expensive calls to GetActivities, GetActorsWithLocation, GetProductFactorsForProject, and related methods, Use of GroupBy and ToList on large collections causing performance degradation, Repeated FirstOrDefault calls inside loops causing multiple expensive queries

Maintainability Issues - Summary: Replace magic strings and unclear variable names; reduce tight coupling and simplify complex logic. - Simplify complex conditional logic for BusinessRuleKnowledge updates

UX Impact Notes - Summary: Store economic benefits and FTE savings in ViewData to enhance user display. - Store economic benefits in ViewData, Store FTE savings in ViewData, Display metrics to user to improve UX

Test Case Ideas - Summary: Verify JoinTeams returns correct grouped activities - and updates business rules accurately. - Calculate economic benefits accurately, Calculate FTE save correctly - Handle missing product factor cases - Return correct activities for project ID - Return correct actors with locations for project ID - Return correct product factors for project ID - Update BusinessRuleKnowledge for all properties with different initial values - Validate 'pro' condition with various values

Dependencies & Called Services - Summary: JoinTeams method uses multiple interface models and collections for data handling. - Interface models: IActorModel, IControlModel, IHRModel, IInfraModel, IProcessModel, IRiskModel, Collections: Enumerable, List, Data types: String, Gantt for scheduling or timeline management

SaveMergeTeamData

Summary: SaveMergeTeamData creates and updates governance data, merges teams if required, updates infrastructure, manages implementation plans, and redirects to project view.

void LocationsController.SaveMergeTeamData(int ProjectId, string screen, int fromActId, Actor fromAct, int toActorId, dynamic TeamData, bool isTeamMerge, bool isSupMerge, bool isManMerge, string newTeamName)

Routing

  • URL: /Locations/SaveMergeTeamData
Detailed Analysis

Key Flows - Summary: SaveMergeTeamData creates and updates governance data - updates infrastructure - and redirects to project view. - Create and populate GovernanceMatrix with fromActId - update governance matrix by deleting old and saving new data - Append implementation plans and invoke CreateImplementationPlans conditionally - Redirect to project view using ProjectId and fromAct - Update infrastructure via Calculator after governance matrix changes

Security Issues - Summary: Dynamic typing risks runtime errors; unsanitized user data causes XSS and HTML injection. - Dynamic type usage risks runtime errors and complicates validation, Direct concatenation of user data into HTML causes XSS vulnerabilities, User-supplied data in HTML list items enables HTML injection

Performance Issues - Summary: Optimize loops to prevent performance degradation in large data processing. - String concatenation inside loops degrades performance with large data sets

Maintainability Issues - Summary: The method suffers from poor type safety, unclear code, hardcoded strings, and mixed concerns. - String concatenation for HTML mixes presentation with business logic

UX Impact Notes - Summary: Merge operations redirect users and display HTML - User redirection after merge disrupts navigation flow

Test Case Ideas - governance updates - Ensure infrastructure updates trigger after governance matrix changes - Validate correct team data merging and governance matrix updates - Validate string concatenations produce valid

Dependencies & Called Services - Summary: Uses actor, calculator, and risk models with location and list data. - IActorModel service, ICalculator service, IRiskModel service, List data structure, Locations data

GetClass

Summary: GetClass returns CSS class strings based on bKnowledge and dge value thresholds.

string LocationsController.GetClass(int bKnowledge)

Routing

  • URL: /Locations/GetClass
Detailed Analysis

Key Flows - Summary: GetClass returns CSS class strings based on bKnowledge and dge value thresholds. - Return 'text-success' if bKnowledge ≤ 6 - Return alternative class if bKnowledge > 3 and another condition met - Return 't' if dge ≤ 3

Error Flows - Summary: Fix incomplete conditions and returns to prevent compilation errors and unexpected behavior. - Incomplete conditional statements causing syntax errors, Truncated and malformed code lines, Missing closing parentheses leading to syntax errors

Security Issues - Summary: Incomplete access control code creates security vulnerabilities. - Unclear access control logic

Maintainability Issues - Summary: The method contains incomplete code and unclear return values - Corrupted string literals in return statements - Unclear and non-descriptive return values

UX Impact Notes - Summary: Incomplete and unclear return strings degrade UI clarity and styling accuracy. - Non-descriptive return values

Test Case Ideas - Summary: Verify GetClass output for bKnowledge ranges, edge cases, and incomplete code handling. - Handle incomplete or malformed input conditions - Verify method returns 't' when 'dge' ≤ 3 - Validate output for bKnowledge > 6 returns string starting with 'text-dange' - Validate output for bKnowledge ≤ 6 returns string starting with 'text-su'

MergeTeams

Summary: MergeTeams reads project XML, validates teams, reassigns shapes and actions, adjusts spatial properties, and updates project data.

void LocationsController.MergeTeams(int projectId, int FromTeamID, int ToTeamID, string newTeamName)

Routing

  • URL: /Locations/MergeTeams
Detailed Analysis

Key Flows - validates teams - reassigns shapes and actions - and updates project data. - Calculate combined heights and vertical midpoint differences - Reassign shapes and actions from toTeam to fromTeam with updated ActorIDs - Remove toTeam from swimlane list and update project XML and database - Update team properties: VerticalMid - Validate existence and completeness of teams before merging

Error Flows - Summary: Validates team objects and handles invalid merges to prevent errors. - Check for null or incomplete 'fromTeam' or 'toTeam' objects - Handle invalid team objects to prevent merge errors

Security Issues - Summary: No security issues found in the MergeTeams method.

Performance Issues - Summary: Repeated LINQ calls and unoptimized list operations degrade performance in MergeTeams. - Repeated LINQ methods on large collections without caching, Multiple iterations over large collections without optimization, Use of O(n) IndexOf on large lists, Lack of caching and error handling in ReadProjectXml calls

Maintainability Issues - Summary: Improve code readability and modularity by using descriptive names, constants, and immutability. - Non-descriptive variable names reduce readability, Incomplete code snippets hinder understanding, Tight coupling with ProcessMapModel and SwimLaneList lowers modularity, Use constants or enums instead of magic strings like 'ActorID', Typographical errors in variable names cause confusion, Direct modification of objects lacks immutability safeguards

UX Impact Notes - Summary: Updating team names may confuse users about team configurations. - User confusion from updated team names

Test Case Ideas - Summary: Verify MergeTeams correctly reassigns shapes - updates properties - and handles data integrity. - Grouping and sorting logic of swimlanes - Reassignment of shapes and actions with ActorID updates - Removal of 'toTeam' from swimlane list and project XML/database updates - Performance with large datasets to identify bottlenecks - Updates to team properties: VerticalMid

Dependencies & Called Services - Summary: Utilizes collections and processing interfaces for team merging operations. - IProcessModel interface for processing logic

CustomerAutomation

Summary: CustomerAutomation handles GET requests, calls SystemAutomation with 'AUTOMATIONPATH', and returns its result.

ActionResult LocationsController.CustomerAutomation()

Routing

  • HTTP: GET
  • URL: /Locations/CustomerAutomation
Detailed Analysis

Key Flows - Summary: CustomerAutomation handles GET requests - and returns its result. - Handle HTTP GET request - Return SystemAutomation result as ActionResult

Test Case Ideas - Summary: Verify CustomerAutomation HTTP GET accessibility and valid AUTOMATIONPATH parameter handling. - Valid AUTOMATIONPATH parameter returns expected SystemAutomation results

Dependencies & Called Services - Summary: CustomerAutomation depends on the Locations service. - Locations service dependency

OutProcessAutomation

Summary: Process HTTP GET requests by invoking SystemAutomation with a specific path and returning the result.

ActionResult LocationsController.OutProcessAutomation()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessAutomation
Detailed Analysis

Key Flows - Summary: Process HTTP GET requests by invoking SystemAutomation with a specific path and returning the result. - Return ActionResult to client

Test Case Ideas - Summary: Verify OutProcessAutomation handles HTTP GET - and returns its ActionResult. - Return ActionResult from SystemAutomation - Handle HTTP GET request

Dependencies & Called Services - Summary: OutProcessAutomation depends on the Locations service. - Locations service dependency

SystemAutomation

Summary: No key flows are defined for SystemAutomation.

ActionResult LocationsController.SystemAutomation(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/SystemAutomation
View Metadata
  • View: SystemAutomation (Andromeda.Web\Views\Locations\SystemAutomation.cshtml)
  • Model: List<Andromeda.Core.Entities.ActivityProperty>*@
Detailed Analysis

Key Flows - Summary: No key flows are defined for SystemAutomation.

Performance Issues - Summary: Multiple database calls in one method degrade performance. - Multiple database calls in single method execution

Maintainability Issues - Summary: Avoid magic strings to improve code clarity and maintainability. - Use of magic string 'DOE' in activity property filtering

UX Impact Notes - Summary: The 'screenFrom' parameter controls UI presentation and behavior. - Set ViewData['screenFrom'] to influence UI display

Test Case Ideas - Summary: Verify SystemAutomation handles GET requests - and returns the expected view. - Handle HTTP GET request - Return expected view

Dependencies & Called Services - Summary: Uses core interfaces and types for control, process modeling, and enumeration. - Enumerable interface, IControlModel interface, IProcessModel interface, String type

SaveAutomationSystems

Summary: Decode 'AutomatedSystems' JSON, save automation systems, and return JSON response with path info.

JsonResult LocationsController.SaveAutomationSystems(string screenFrom)

Routing

  • HTTP: POST
  • URL: /Locations/SaveAutomationSystems
Detailed Analysis

Key Flows - and return JSON response with path info. - Return JSON response with path string 'PathA' under specific conditions

Error Flows - Summary: Handle invalid JSON and corrupted code to prevent execution errors. - Invalid or malformed 'AutomatedSystems' JSON causes method failure, Corrupted code segments trigger unexpected execution errors

Security Issues - Summary: Fix deserialization vulnerability in Json.Decode for 'AutomatedSystems' JSON string. - Deserialization vulnerability in Json.Decode, Unsafe decoding of 'AutomatedSystems' JSON string

Performance Issues - Summary: Large 'AutomatedSystems' JSON strings degrade SaveAutomationSystems performance. - Performance degradation with large 'AutomatedSystems' JSON strings

Maintainability Issues - Summary: Replace magic strings with constants and fix corrupted code for maintainability. - Use defined constants instead of magic strings, Fix incomplete and corrupted code segments

UX Impact Notes - Summary: The method returns JSON responses that guide user navigation and workflow. - JSON responses with messages or paths directing user workflow, Incomplete code causing inconsistent user experience

Test Case Ideas - Summary: Validate SaveAutomationSystems with valid input - Valid 'AutomatedSystems' JSON input, Large 'AutomatedSystems' JSON input for performance, Correct JSON path response verification

Dependencies & Called Services - Summary: Uses IProcessModel interface and String type for automation system saving. - IProcessModel interface usage, String type usage

SaveClassifySystems

Summary: SaveClassifySystems method processes and saves classification system data efficiently.

JsonResult LocationsController.SaveClassifySystems()

Routing

  • HTTP: POST
  • URL: /Locations/SaveClassifySystems
Detailed Analysis

Key Flows - Summary: SaveClassifySystems method processes and saves classification system data efficiently. - Process classification system data - Save classification system data

Error Flows - Summary: Handle JSON deserialization errors in 'LegacySystems' and 'AutomatedSystems' fields. - Lack of exception handling for invalid JSON in 'LegacySystems' and 'AutomatedSystems', Incomplete code causing potential syntax errors and unstable method implementation

Security Issues - Summary: Deserializing 'LegacySystems' and 'AutomatedSystems' without validation risks JSON injection. - Lack of validation on 'LegacySystems' JSON deserialization, Lack of validation on 'AutomatedSystems' JSON deserialization

Maintainability Issues - Summary: Use descriptive names and avoid magic strings to improve maintainability and readability. - Avoid magic strings for form field keys, Use descriptive variable names, Remove incomplete or malformed code snippets

Test Case Ideas - Summary: Verify SaveClassifySystems correctly processes valid POST requests with valid JSON inputs. - Check for syntax errors or incomplete implementation - Return JsonResult on valid POST request

Dependencies & Called Services - Summary: Uses IProcessModel service for processing within SaveClassifySystems. - IProcessModel service dependency

ControlsAutomation

Summary: ControlsAutomation handles HTTP GET requests by invoking PathAutomation with 'ControlsAutomation' and returning its result.

ActionResult LocationsController.ControlsAutomation()

Routing

  • HTTP: GET
  • URL: /Locations/ControlsAutomation
Detailed Analysis

Key Flows - Summary: ControlsAutomation handles HTTP GET requests by invoking PathAutomation with 'ControlsAutomation' and returning its result. - Handle HTTP GET request - Return ActionResult to client

UX Impact Notes - Summary: Returns ActionResult enabling flexible UX with views or redirects. - Return ActionResult - Enable views or redirects based on PathAutomation

Test Case Ideas - Summary: Verify ControlsAutomation handles GET requests - returns correct ActionResult - Return expected ActionResult

Dependencies & Called Services - Summary: ControlsAutomation depends on the Locations service. - Locations service dependency

PathAutomation

Summary: Load data models, calculate efforts and automation benefits, process rework paths, and update decision tree benefits.

ActionResult LocationsController.PathAutomation(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/PathAutomation

Cross-layer call chain - LocationsController.PathAutomation → Andromeda.Core.Entities.Arrow.Clone - LocationsController.PathAutomation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.PathAutomation → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.PathAutomation → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - LocationsController.PathAutomation → Andromeda.Core.Entities.Activity.Effort - LocationsController.PathAutomation → Insorce.Helpers.Helpers.getSkillLevel - LocationsController.PathAutomation → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Constants.GetSkill - Insorce.Helpers.Helpers.getSkillLevel → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds

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_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    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"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_PathAutomation["LocationsController.PathAutomation"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> 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
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_PathAutomation --> Andromeda_Core_Entities_Activity_Effort
    LocationsController_PathAutomation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathAutomation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathAutomation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathAutomation --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: PathAutomation (Andromeda.Web\Views\Locations\PathAutomation.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - and update decision tree benefits. - Calculate daily efforts and aggregate activity efforts with skill and automation percentages - Load actors, teams, transfer modes, activity properties, and arrows from models - Retrieve and process rework reduction paths and customer experience metrics - Update decision tree benefits using automation benefits and effort ratios

Error Flows - Summary: Fix null reference risks and incomplete code causing runtime errors. - Null reference exceptions accessing collections without null checks

Security Issues - Summary: Secure session objects and sanitize inputs to prevent unauthorized access and SQL injection. - Unvalidated Request.QuerySt risks information disclosure

Performance Issues - Summary: Optimize database calls, LINQ usage, and string operations to improve performance. - Excessive use of ToList() on large datasets causing high memory usage

Maintainability Issues - Summary: The method uses unclear naming, magic strings, complex code, and tight coupling, reducing maintainability. - Use magic strings instead of named constants or enums, Unclear and non-standard variable names, Incomplete and corrupted code snippets, Dense code with nested LINQ and multiple declarations, Tight coupling with multiple models and external dependencies, Unclear and incomplete method and variable names

UX Impact Notes - Summary: PathAutomation customizes UI data and metrics to enhance user understanding of automation effectiveness. - Calculated metrics influence user perception of automation effectiveness - Set ViewData properties for activity suggestions - Conditional logic tailors data and views based on screenFrom parameter

Test Case Ideas - Summary: Verify PathAutomation handles data retrieval - Daily effort calculation for actors including empty and large sets - Performance and correctness of LINQ queries on large datasets - Processing and displaying rework reduction and customer experience metrics

Dependencies & Called Services - Summary: PathAutomation uses core data types, collections, math utilities, and multiple domain-specific models. - Core data types: Decimal, Double, Int32, String, TimeSpan, Collections and utilities: List, Dictionary, Enumerable, Mathematical operations: Math, Domain-specific models: IActorModel, IControlModel, IFinalPlanModel, IHRModel, IInfraModel, IProcessModel, IRiskModel, Helpers and extensions: Helpers, ProcessExtensions, Other services: Activity, Arrow, Convert, Locations

AbsoluteDeadLine

Summary: AbsoluteDeadLine calls PathDeadLines and returns its result directly.

ActionResult LocationsController.AbsoluteDeadLine()

Routing

  • HTTP: GET
  • URL: /Locations/AbsoluteDeadLine
Detailed Analysis

Key Flows - Summary: AbsoluteDeadLine calls PathDeadLines and returns its result directly. - Return PathDeadLines result

Error Flows - Summary: The method lacks explicit exception handling, allowing exceptions to propagate. - No explicit exception handling, Exceptions from PathDeadLines propagate up the call stack

Maintainability Issues - Summary: The method contains an empty code block indicating missing implementation or a bug. - Empty code block, Potential missing implementation, Possible bug

UX Impact Notes - Summary: The method's ActionResult return influences user flow based on PathDeadLines output. - ActionResult return type

Test Case Ideas - Summary: Verify AbsoluteDeadLine returns correct result when PathDeadLines is invoked. - AbsoluteDeadLine method correctness, PathDeadLines interaction validation

Dependencies & Called Services - Summary: AbsoluteDeadLine depends on the Locations service. - Locations service dependency

RelativeDeadLine

Summary: Handle HTTP GET request by calling PathDeadLines with 'Relative' and return the ActionResult.

ActionResult LocationsController.RelativeDeadLine()

Routing

  • HTTP: GET
  • URL: /Locations/RelativeDeadLine
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling PathDeadLines with 'Relative' and return the ActionResult. - Return resulting ActionResult

UX Impact Notes - Summary: The method's ActionResult return influences user flow based on client handling. - ActionResult return type

Test Case Ideas - Summary: Verify RelativeDeadLine handles HTTP GET and correctly passes 'Relative' to PathDeadLines. - Handle HTTP GET request - Return expected ActionResult

Dependencies & Called Services - Summary: Uses Locations service as a dependency. - Locations service dependency

DeadLines

Summary: DeadLines handles HTTP GET requests by invoking PathDeadLines with 'all' and returning its result.

ActionResult LocationsController.DeadLines()

Routing

  • HTTP: GET
  • URL: /Locations/DeadLines

Cross-layer call chain - LocationsController.DeadLines → Andromeda.Core.Services.Algorithms.Delooper.GetPossiblePaths

Call Chain Diagram

flowchart TD
    Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths["Andromeda.Core.Services.Algorithms.Delooper.GetPossiblePaths"]
    LocationsController_DeadLines["LocationsController.DeadLines"]
    LocationsController_DeadLines --> Andromeda_Core_Services_Algorithms_Delooper_GetPossiblePaths
Detailed Analysis

Key Flows - Summary: DeadLines handles HTTP GET requests by invoking PathDeadLines with 'all' and returning its result. - Return ActionResult from PathDeadLines

Test Case Ideas - and expected ActionResult return. - Return expected ActionResult from PathDeadLines - Handle HTTP GET request

Dependencies & Called Services - Summary: Uses Locations service for dependency management. - Locations service dependency

PathDeadLines

Summary: Retrieve and process project elements to determine deadline paths and related activity details.

ActionResult LocationsController.PathDeadLines(string type)

Routing

  • HTTP: GET
  • URL: /Locations/PathDeadLines

Cross-layer call chain - LocationsController.PathDeadLines → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.PathDeadLines → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.PathDeadLines → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - 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_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"]
    LocationsController_PathDeadLines["LocationsController.PathDeadLines"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_PathDeadLines --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_PathDeadLines --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_PathDeadLines --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: PathDeadLines (Andromeda.Web\Views\Locations\PathDeadLines.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - Summary: Retrieve and process project elements to determine deadline paths and related activity details. - Parse arrow time values and apply wait time logic

Error Flows - Summary: Handle null references in retrieved data sets to prevent exceptions. - Null reference exceptions from actors data, Null reference exceptions from arrows data, Null reference exceptions from activities data, Null reference exceptions from properties data

Security Issues - Summary: Prevent SQL injection by sanitizing ProjectID before database queries. - SQL injection risk from unsanitized ProjectID, Need for input sanitization before database use

Performance Issues - Summary: Excessive database queries, repeated ToList() calls, and inefficient LINQ usage degrade performance. - Multiple database queries causing performance degradation, Repeated ToList() calls increasing memory usage, Inefficient LINQ queries with multiple Where, GroupBy, and Any clauses, Repeated FindByID calls without caching on large collections, TimeSpan.TryParse usage inside Select impacting performance on large collections

Maintainability Issues - Summary: Complex LINQ queries and unclear naming reduce code readability and maintainability. - Incomplete code snippets hindering full logic understanding

UX Impact Notes - Summary: Displays deadline and activity information to users via ViewData. - Deadline information display, Activity information display

Test Case Ideas - Summary: Verify correct data retrieval, filtering, ordering, and object construction in PathDeadLines method. - Proper construction of return objects with predecessor and successor activities

Dependencies & Called Services - Summary: Uses collections, time handling, string operations, and actor/control/plan models. - IActorModel for actor-related logic - ProcessExtensions for process-related utilities

ControlsPath

Summary: Retrieve project data and actors, calculate daily efforts and project metrics, and process team effort data.

ActionResult LocationsController.ControlsPath(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/ControlsPath

Cross-layer call chain - LocationsController.ControlsPath → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ControlsPath → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_ControlsPath["LocationsController.ControlsPath"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ControlsPath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ControlsPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: ControlsPath (Andromeda.Web\Views\Locations\ControlsPath.cshtml)
  • Model: Tuple<List<Andromeda.Core.Entities.ObjectiveActivityRiskControl>, List<Andromeda.Core.Entities.ObjectiveActivityRiskControl>>
Detailed Analysis

Key Flows - Summary: Retrieve project data and actors, calculate daily efforts and project metrics, and process team effort data. - Calculate daily effort arrays for actors, Calculate project metrics from multiple models - Load actors with locations and activities - Process teamMinFTE collection - Retrieve current project ID, Initialize actor effort data dictionary

Performance Issues - Summary: Excessive data retrieval and large collections cause significant performance degradation. - Retrieving large data sets from GetActorsWithLocation

Maintainability Issues - Summary: Code uses unclear names, magic strings, incomplete snippets, and undefined variables, reducing maintainability. - Use of magic string 'ControlsPath' in condition, Incomplete dictionary type declarations, Non-descriptive variable names like 't', 'ort', 'opAct', Anonymous types in ViewData complicate maintenance, Undefined variable 'daysinYear' in FTE array initialization, Complex code with many dependencies, Partial code snippets reduce readability

UX Impact Notes - Summary: Populating ViewData with calculated and filtered data improves view rendering. - Populating ViewData with calculated values, Populating ViewData with filtered data

Test Case Ideas - and performance with large datasets. - Calculate daily effort (actEffort) for varied outProcActs and actors inputs - Handle large datasets without performance degradation - Retrieve first matching activity from outProcActs and handle empty collections - Assign 'ort' value from 'opAct' under different conditions

Dependencies & Called Services - Summary: Uses core data types, collections, and domain-specific models for control path processing. - Core data types: Int32, String, Collections: List, Enumerable, Domain models: IActorModel, IControlModel, IProcessModel, IRiskModel, Utility classes: Calendar, Dictionary, ProcessExtensions

OutProcessWorkAllocation

Summary: The method calculates daily efforts, analyzes peak activities, clusters work patterns, and generates optimized team allocation suggestions.

ActionResult LocationsController.OutProcessWorkAllocation()

Routing

  • URL: /Locations/OutProcessWorkAllocation

Cross-layer call chain - LocationsController.OutProcessWorkAllocation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.OutProcessWorkAllocation → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.OutProcessWorkAllocation → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.OutProcessWorkAllocation → Insorce.Helpers.Helpers.getSkillLevel - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - 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_GetData["Andromeda.Core.DataManager.GetData"]
    Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_OutProcessWorkAllocation["LocationsController.OutProcessWorkAllocation"]
    Andromeda_Core_Entities_Actor_GetLocation --> 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
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_OutProcessWorkAllocation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_OutProcessWorkAllocation --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: OutProcessWorkAllocation (Andromeda.Web\Views\Locations\OutProcessWorkAllocation.cshtml)
  • Model: IList<Andromeda.Core.Entities.PeakActivitySuggestions>
Detailed Analysis

Key Flows - Summary: The method calculates daily efforts, analyzes peak activities, clusters work patterns, and generates optimized team allocation suggestions. - Calculate daily efforts using OutProcessActsToDailyEffort, Calculate actor costs and prepare detailed peak activity recommendations - Initialize daily effort arrays for all project actors, Identify and filter peak activity efforts against thresholds, Perform cluster analysis on activities and actors, Filter skill matrices and business rules for team allocation suggestions, Sort and filter peak activity suggestions by team and effort - Update work allocation arrays and compute minimum FTE per actor

Performance Issues - Summary: Large arrays and repeated LINQ calls cause high memory use and slow performance. - Large arrays per actor and year increase memory usage, Multiple LINQ calls cause repeated enumerations and slowdowns, Nested loops with large collections degrade performance, ToArray() calls cause extra memory allocation and copying, Contains() inside loops leads to quadratic time complexity

Maintainability Issues - Summary: Code uses unclear names, magic values, commented-out code, and complex queries reducing maintainability. - Use of magic numbers and hardcoded strings, Non-descriptive and misspelled variable names, Commented-out and incomplete code fragments, Complex nested LINQ queries and conditionals

UX Impact Notes - Summary: Potential performance issues could reduce responsiveness and user satisfaction. - Potential performance degradation, Indirect impact on responsiveness, Indirect impact on user satisfaction

Test Case Ideas - and suggestion generation logic. - Check TEArray updates with positive - Validate current year determination using DateTime.Now.Year - Validate OPMINFTE calculation and actorMinFTE dictionary updates with diverse inputs - Validate creation and population of Suggestions and PeakActivitySuggestions objects - Test filtering logic for OPPeakActs and skillMatrix with varied data - Verify cluster analysis methods with different parameters and datasets

Dependencies & Called Services - Summary: Uses core data structures, interfaces, and utility classes for process and actor management. - Core data types and collections, Actor and process interfaces, Utility and helper classes, Date and time management, Mathematical operations

TeamCostPeakReduction

Summary: TeamCostPeakReduction calls ActivitySuggestions with 'PeakReduction' and returns its result.

ActionResult LocationsController.TeamCostPeakReduction()

Routing

  • URL: /Locations/TeamCostPeakReduction
View Metadata
  • View: TeamCostPeakReduction (Andromeda.Web\Views\Locations\TeamCostPeakReduction.cshtml)
  • Model: IList<Andromeda.Core.Entities.PeakActivitySuggestions>
Detailed Analysis

Key Flows - Summary: TeamCostPeakReduction calls ActivitySuggestions with 'PeakReduction' and returns its result. - Return ActivitySuggestions result

Maintainability Issues - Summary: The method contains unnecessary commented code and minimal logic - Effectively empty method aside from ActivitySuggestions call, Unnecessary commented out code

UX Impact Notes - Summary: Method's UX depends on ActivitySuggestions' return handling. - UX depends on ActivitySuggestions' return value - Potential UX issues if ActivitySuggestions lacks proper view or redirect handling

Test Case Ideas - Summary: Verify ActivitySuggestions is called with 'PeakReduction' and its result is returned. - Return result from ActivitySuggestions correctly

Dependencies & Called Services - Summary: Uses Locations service for dependency. - Locations service dependency

ActivitySuggestions

Summary: Aggregates data and analyzes clusters, delays, efforts, and skills; calculates team and activity metrics with updates.

ActionResult LocationsController.ActivitySuggestions(string ScreenFrom)

Routing

  • URL: /Locations/ActivitySuggestions

Cross-layer call chain - LocationsController.ActivitySuggestions → Andromeda.Core.Entities.Activity.Clone - LocationsController.ActivitySuggestions → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ActivitySuggestions → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.ActivitySuggestions → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - LocationsController.ActivitySuggestions → Insorce.Helpers.Helpers.getSkillLevel - LocationsController.ActivitySuggestions → Andromeda.Core.Entities.Actor.GetLocation - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - 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_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
    Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_ActivitySuggestions["LocationsController.ActivitySuggestions"]
    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_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_ActivitySuggestions --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_ActivitySuggestions --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ActivitySuggestions --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ActivitySuggestions --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: ActivitySuggestions (Andromeda.Web\Views\Locations\ActivitySuggestions.cshtml)
  • Model: IList<Andromeda.Core.Entities.PeakActivitySuggestions>
Detailed Analysis

Key Flows - and skills; calculates team and activity metrics with updates. - Cluster analysis and delay calculation, Hourly effort and peak activity suggestion computation, Skill level evaluation using models and LINQ, Team and activity iteration for effort and skill metrics, Updating cluster matches and relevant flags

Error Flows - Summary: Prevent null references and ensure correct method implementations to avoid runtime errors. - Null reference exceptions from unchecked variables

Performance Issues - Summary: Unfiltered data retrieval, repeated queries, and inefficient loops degrade performance. - Multiple LINQ queries and ToList() on large datasets increase memory and slow execution

Maintainability Issues - Summary: The method mixes unrelated tasks, uses unclear names, and has tight coupling, reducing maintainability. - Low cohesion due to mixing data retrieval and ViewData setting

UX Impact Notes - Summary: ActivitySuggestions sets ViewData to control suggestion sources and user messages. - Returned strings like 'Yes' or 'No' display user messages

Test Case Ideas - Summary: Verify correct data retrieval, filtering, calculations, and performance under various conditions. - Calculate minimum FTE for a team accurately, Calculate peak activity suggestions from schedule data - Handle empty and large collections with performance testing - Handle syntax errors or incomplete code gracefully - Perform cluster analysis with diverse datasets - Return anonymous objects with correct data - Set all expected ViewData properties - Update flags like IsClusterMatched during iteration

Dependencies & Called Services - Summary: Uses models, collections, utilities, and domain-specific helpers for activity suggestions. - Activity domain model, Actor domain model, Conversion utilities, Dictionary collections, Enumerable collections, Gantt chart utilities, Helper functions, Actor interface model, Control interface model, Final plan interface model, HR interface model, Infrastructure interface model, Risk interface model, Integer type, List collections, Location data, Math utilities, String utilities - Process interface model, Process extension methods

CriticalPathForDIS

Summary: Retrieve and filter schedule data and activities, calculate timing, and return results as JSON.

JsonResult LocationsController.CriticalPathForDIS()

Routing

  • HTTP: GET
  • URL: /Locations/CriticalPathForDIS

Cross-layer call chain - LocationsController.CriticalPathForDIS → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.CriticalPathForDIS → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Andromeda.Core.Extensions.LinqExtensions.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_CriticalPathForDIS["LocationsController.CriticalPathForDIS"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_CriticalPathForDIS --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_CriticalPathForDIS --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - and return results as JSON. - Calculate start and end times from filtered schedule data - Return computed data as JSON

Error Flows - Summary: Fix syntactically incorrect and incomplete code causing compilation errors. - Syntactically incorrect code, Incomplete code causing compilation errors

Security Issues - Summary: Fix syntax error to prevent compilation failure and potential security risks. - Syntax error causing compilation failure

Performance Issues - Summary: Optimize database queries and collection operations to improve performance on large datasets. - Multiple database queries causing slow data retrieval, RemoveAll method slow on large arrow lists, AddRange in loops causing memory and copying overhead, ToList, Select, ToArray in loops causing extra memory allocation and GC, Repeated clearing and repopulating collections degrading performance, Contains and Any inside loops causing O(n^2) complexity, Max and Min methods on large collections need optimization

Maintainability Issues - Summary: The method is complex, unclear, syntactically incorrect, and contains unused variables. - Anonymous objects in return reduce readability

UX Impact Notes - Summary: Returning JSON results affects UX if data formatting or query errors occur. - Improper JSON formatting, Query execution errors impacting UX

Test Case Ideas - filtering logic - Calculate critical paths accurately - Handle empty collections robustly - Assess performance with large datasets

Dependencies & Called Services - Summary: Uses collections, LINQ, and interface models for process and control management. - Enumerable, List, LinqExtensions, IActorModel, IControlModel, IFinalPlanModel, IProcessModel, Int32, String - ProcessExtensions

CriticalPath

Summary: Processes project data to analyze schedules, detect fault paths, and prepare activity properties for rendering.

ActionResult LocationsController.CriticalPath(bool IsDefaultPath, object projectdata)

Routing

  • HTTP: GET
  • URL: /Locations/CriticalPath

Cross-layer call chain - LocationsController.CriticalPath → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.CriticalPath → Andromeda.Core.Entities.ProjectData.GetActivities - LocationsController.CriticalPath → Andromeda.Core.Entities.ProjectData.GetArrows - LocationsController.CriticalPath → Andromeda.Core.Services.ProcessExtensions.FindByID - 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"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_CriticalPath["LocationsController.CriticalPath"]
    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
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_CriticalPath --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_CriticalPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: CriticalPath (Andromeda.Web\Views\Locations\CriticalPath.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - Summary: Processes project data to analyze schedules, detect fault paths, and prepare activity properties for rendering. - Extract schedule analysis, actors, activities, arrows, and properties from project data, Retrieve automated systems related to the project, Detect fault paths and select child path with highest cycle time for CycleTime method, Filter and group activity properties into business rules, DOE, and forms, Populate ViewData with activity and team data for rendering

Error Flows - Summary: Prevent null pointer exceptions and fix incomplete code to ensure stable execution. - Null pointer exception risk from unchecked Session['msId'] before ToString() call

Security Issues - Summary: Sanitize user input to prevent SQL injection in database queries. - Unsanitized user input, SQL injection vulnerability, Database query risks

Performance Issues - Summary: Multiple repeated method calls and LINQ queries degrade CriticalPath performance. - Repeated method calls on ProjectData object, Repeated baseActivities.FindByID() calls during arrow filtering, LINQ queries with OrderByDescending and First on large collections, Multiple LINQ queries with Any() and dictionary lookups in loops

Maintainability Issues - Summary: The code suffers from poor type safety, tight coupling, magic strings, incomplete code, complex expressions, and hardcoded values. - Use of generic 'object' type reduces type safety and clarity, Tight coupling with ProjectData and model objects, Magic strings reduce readability and maintainability, Incomplete and truncated code segments increase error risk, Complex lambda expressions and LINQ queries hinder understanding, Commented-out lines indicate abandoned or incomplete functionality, Hardcoded directory separators and configuration access lack abstraction

UX Impact Notes - Summary: Session variable checks control user flow and prepare data for view rendering. - Conditional checks on session variable 'msId' affecting user flow

Test Case Ideas - Summary: Test data retrieval, path scenarios, fault detection, ViewData population, and method calls. - Default and non-default path scenarios based on IsDefaultPath, Data retrieval from ProjectData when provided, Data retrieval from ActorModel and ControlModel when ProjectData absent, Automated systems retrieval and handling, Fault path detection with empty and populated CriticalPaths, including ties, ViewData population with activity and team data, including missing associations, CycleTime method invocation with expected parameters, Handling of incomplete or truncated code paths

Dependencies & Called Services - Summary: Uses core data types and domain-specific models for process and project management. - Enumerable, IActorModel, IControlModel, IFinalPlanModel, IProcessModel, Int32, List, Locations, ProjectData, String - ProcessExtensions

CriticalPathDelays

Summary: Retrieve project data, analyze delays using effort and clustering, filter activities by critical path, and prepare peak task data for display.

ActionResult LocationsController.CriticalPathDelays(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/CriticalPathDelays

Cross-layer call chain - LocationsController.CriticalPathDelays → Andromeda.Core.Entities.Activity.Clone - LocationsController.CriticalPathDelays → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.CriticalPathDelays → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.CriticalPathDelays → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - LocationsController.CriticalPathDelays → Andromeda.Core.Entities.Gantt.ActivityDelay - LocationsController.CriticalPathDelays → Andromeda.Core.Entities.ScheduleAnalysis.GetActivityId - LocationsController.CriticalPathDelays → Insorce.Helpers.Helpers.getSkillLevel - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.GetHourEffort - Andromeda.Core.Entities.Gantt.HourlyEffortByActor → Andromeda.Core.Entities.Sched.StartTimeHour - Andromeda.Core.Entities.Gantt.ActivityDelay → Andromeda.Core.Services.TimeRange.ContainsValue - 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_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Gantt_ActivityDelay["Andromeda.Core.Entities.Gantt.ActivityDelay"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_Sched_GetHourEffort["Andromeda.Core.Entities.Sched.GetHourEffort"]
    Andromeda_Core_Entities_Sched_StartTimeHour["Andromeda.Core.Entities.Sched.StartTimeHour"]
    Andromeda_Core_Entities_ScheduleAnalysis_GetActivityId["Andromeda.Core.Entities.ScheduleAnalysis.GetActivityId"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_CriticalPathDelays["LocationsController.CriticalPathDelays"]
    Andromeda_Core_Entities_Gantt_ActivityDelay --> Andromeda_Core_Services_TimeRange_ContainsValue
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_CriticalPathDelays --> Andromeda_Core_Entities_ScheduleAnalysis_GetActivityId
    LocationsController_CriticalPathDelays --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_CriticalPathDelays --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CriticalPathDelays --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: CriticalPathDelays (Andromeda.Web\Views\Locations\CriticalPathDelays.cshtml)
  • Model: IList<Andromeda.Core.Entities.PeakActivitySuggestions>
Detailed Analysis

Key Flows - Summary: Retrieve project data, analyze delays using effort and clustering, filter activities by critical path, and prepare peak task data for display. - Calculate hourly effort and minimum team FTE - Assign peak status and prepare data for view

Error Flows - Summary: Check session variables to prevent null reference exceptions. - Null reference exceptions from unchecked session variables

Performance Issues - Summary: Optimize database queries and LINQ operations to prevent performance degradation with large datasets. - Complex data processing on large datasets

Maintainability Issues - Summary: The code's complexity, unclear naming, and hardcoded strings reduce maintainability and readability. - Complex and dense code structure, Use of magic strings instead of constants, Non-descriptive variable names, Incomplete conditional statements and syntax errors, Complex lambda expressions and conditional operators

UX Impact Notes - Summary: Data processing delays and conditional early returns impact critical path delay display and user flow. - Conditional early returns influencing user flow

Test Case Ideas - filtering logic - early returns - and peak status assignment. - Performance under heavy load and large datasets - Filtering logic with and without 'msCriticalPath' session variable - Early return conditions triggered by 'ay' and 'w.A' variables - Peak status assignment with different peak activity IDs

Dependencies & Called Services - Summary: Uses models, collections, and utilities for schedule and process analysis. - Activity model, Enumerable utilities, Gantt chart tools, Helper functions, Actor, Control, FinalPlan, HR, Infra, Process models, Integer and String types, List collection, Math utilities, Schedule analysis tools - Process extensions

CycleTime

Summary: CycleTime processes project data, calculates metrics including cycle time and critical paths, and returns or redirects based on results.

ActionResult LocationsController.CycleTime(string ms, string screen, int Id, object projectdata)

Routing

  • HTTP: GET
  • URL: /Locations/CycleTime

Cross-layer call chain - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetTalentPools - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetOfficeList - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetInfraDetails - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetOfficePremises - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetActivities - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetArrows - LocationsController.CycleTime → Insorce.Helpers.Helpers.DaysConverter - LocationsController.CycleTime → Insorce.Helpers.Helpers.CurrencyConverter - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetAllObjectiveActivityRisk - LocationsController.CycleTime → Andromeda.Core.Entities.ProjectData.GetDelooperObj - LocationsController.CycleTime → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.CycleTime → Andromeda.Core.Entities.Arrow.Clone - LocationsController.CycleTime → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.CycleTime → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.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"]
    Insorce_Helpers_Helpers_CurrencyConverter["Insorce.Helpers.Helpers.CurrencyConverter"]
    Insorce_Helpers_Helpers_DaysConverter["Insorce.Helpers.Helpers.DaysConverter"]
    Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
    LocationsController_CycleTime["LocationsController.CycleTime"]
    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
    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
    LocationsController_CycleTime --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetAllObjectiveActivityRisk
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetArrows
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetDelooperObj
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficeList
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetTalentPools
    LocationsController_CycleTime --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_CycleTime --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_CycleTime --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_CurrencyConverter
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_DaysConverter
    LocationsController_CycleTime --> Insorce_Helpers_Helpers_GetIndividualPath
View Metadata
  • View: CycleTime (Andromeda.Web\Views\Locations\CycleTime.cshtml)
  • Model: Andromeda.Core.Entities.MapPath
Detailed Analysis

Key Flows - and returns or redirects based on results. - Calculate cycle time, benefit, and effort reduction metrics - Return views or redirect based on project data validity

Error Flows - Summary: Handle null inputs and prevent exceptions from invalid data parsing and file operations. - Handle null or empty projectdata to avoid null returns - Avoid exceptions from unhandled data type conversions - Redirect if 'ms' parameter is null or empty - Validate file paths and existence before file operations

Security Issues - Summary: CycleTime method risks deserialization attacks and insecure object references. - Use of generic 'object' type reduces type safety and maintainability, Deserialization of JSON strings without validation enables attacks, JavaScriptSerializer usage exposes deserialization vulnerabilities, Insecure direct object references via unsanitized session variables

Performance Issues - Summary: Optimize data retrieval and LINQ usage to reduce memory and processing overhead. - Loading entire files into memory at once - Inefficient LINQ methods on large datasets - Nested loops and complex LINQ queries on large datasets

Maintainability Issues - Summary: Code suffers from poor type safety, unclear naming, deprecated APIs, and complex, incomplete syntax. - Use of generic 'object' type reduces type safety, Incomplete and truncated code segments, Long variable lists and tight model dependencies, Use of unexplained magic strings and numbers, Extensive use of anonymous types, Hardcoded file paths and config keys, Non-descriptive variable names, Use of deprecated classes like Json.Decode and JavaScriptSerializer, Typo in property name 'BenfitActivities', Complex nested lambda expressions and LINQ queries, Incomplete or incorrect syntax causing compilation errors

UX Impact Notes - Summary: Invalid parameters and data handling affect navigation flow and user interface presentation. - Calculated metrics inform user-facing displays and decisions - Default 'screen' values influence UI presentation, Session and ViewData storage affect displayed information, Null or incomplete views cause errors and poor UX, Cart data retrieval impacts user interaction with cart, Magic strings and unclear variables reduce maintainability and slow UX improvements - Redirect on invalid 'ms' parameter disrupts navigation flow - RedirectToAction calls control user navigation

Test Case Ideas - Summary: Test CycleTime method for data filtering, calculation accuracy, view handling, and state management. - Return expected view or redirect based on input parameters - Handle risk model data and lines of defense correctly - Process automation and rework reduction paths accurately - Update decision tree benefits and ViewData with calculated metrics

Dependencies & Called Services - Summary: CycleTime method uses diverse models, data types, utilities, and serialization for processing. - Domain models: IActorModel, IControlModel, IFinalPlanModel, IProcessModel, IProjectModel, IRiskModel, Data structures: List, Enumerable, Primitive types: Int32, String, TimeSpan, Utilities: Arrow, Convert, Math, ProcessExtensions, Helpers, Data handling: File, ProjectData, Locations, Serialization: JavaScriptSerializer

WorkTimingDelays

Summary: Handles HTTP GET request by invoking WorkTimings with specific parameter and returns its result.

ActionResult LocationsController.WorkTimingDelays()

Routing

  • HTTP: GET
  • URL: /Locations/WorkTimingDelays
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking WorkTimings with specific parameter and returns its result. - Return ActionResult from WorkTimings

UX Impact Notes - Summary: Method returns ActionResult affecting user navigation and display. - Return ActionResult

Test Case Ideas - Summary: Verify WorkTimingDelays handles GET requests - and returns expected ActionResult. - Return expected ActionResult - Handle HTTP GET request

Dependencies & Called Services - Summary: WorkTimingDelays depends on Locations service. - Locations service dependency

WorkUtilization

Summary: No key flows are defined for the WorkUtilization method.

ActionResult LocationsController.WorkUtilization()

Routing

  • HTTP: GET
  • URL: /Locations/WorkUtilization
Detailed Analysis

Key Flows - Summary: No key flows are defined for the WorkUtilization method.

UX Impact Notes - Summary: Restricting the method to HTTP GET limits user actions to safe data retrieval. - HTTP GET restriction, Limits user actions to data retrieval, Defines allowed HTTP method

Test Case Ideas - Summary: Verify WorkUtilization handles GET requests and returns correct ActionResult. - Handle HTTP GET requests correctly - Return expected ActionResult for 'WorkUtilization' parameter

Dependencies & Called Services - Summary: WorkUtilization depends on Locations service. - Locations service dependency

OutOfOfficeWorkAllocation

Summary: Handles HTTP GET request by invoking CriticalPathDelays with specific parameter and returns its result.

ActionResult LocationsController.OutOfOfficeWorkAllocation()

Routing

  • HTTP: GET
  • URL: /Locations/OutOfOfficeWorkAllocation
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking CriticalPathDelays with specific parameter and returns its result. - Return ActionResult from CriticalPathDelays to client

UX Impact Notes - Summary: Returns ActionResult affecting user flow control. - Return ActionResult

Test Case Ideas - Summary: Verify HTTP GET response and validate CriticalPathDelays output with varied inputs. - Validate HTTP GET request handling - Verify output correctness from CriticalPathDelays, Test CriticalPathDelays with diverse input parameters

Dependencies & Called Services - Summary: Uses Locations service for out-of-office work allocation. - Locations service dependency

BottlenecksWorkAllocation

Summary: Handle HTTP GET request by calling CriticalPathDelays with 'BOTTLENECKS DELAYS' and return the result.

ActionResult LocationsController.BottlenecksWorkAllocation()

Routing

  • HTTP: GET
  • URL: /Locations/BottlenecksWorkAllocation
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling CriticalPathDelays with 'BOTTLENECKS DELAYS' and return the result. - Return ActionResult to caller

Maintainability Issues - Summary: Improve method and parameter naming for better code clarity and maintainability. - Non-descriptive method name, Unclear string parameter in CriticalPathDelays

UX Impact Notes - Summary: The method affects user flow by returning views or redirects. - Return of ActionResult affecting user flow

Test Case Ideas - correct ActionResult return - Expected ActionResult return without parameters

Dependencies & Called Services - Summary: Uses Locations service for bottleneck work allocation. - Locations service dependency

CustomerExperienceRework

Summary: No key flows are defined for the CustomerExperienceRework method.

ActionResult LocationsController.CustomerExperienceRework()

Routing

  • HTTP: GET
  • URL: /Locations/CustomerExperienceRework
Detailed Analysis

Key Flows - Summary: No key flows are defined for the CustomerExperienceRework method.

UX Impact Notes - Summary: The method returns an ActionResult that directly affects user flow. - Return ActionResult

Test Case Ideas - and expected ActionResult return. - Return expected ActionResult from ReworkReduction - Handle HTTP GET request

Dependencies & Called Services - Summary: Uses Locations service to support customer experience rework. - Locations service dependency

TimeUndesiredOutcomes

Summary: No key flows are defined for the TimeUndesiredOutcomes method.

ActionResult LocationsController.TimeUndesiredOutcomes()

Routing

  • HTTP: GET
  • URL: /Locations/TimeUndesiredOutcomes
Detailed Analysis

Key Flows - Summary: No key flows are defined for the TimeUndesiredOutcomes method.

Test Case Ideas - Summary: Verify TimeUndesiredOutcomes handles HTTP GET requests correctly. - Handle HTTP GET request - Return correct response

Dependencies & Called Services - Summary: Uses Locations service dependency. - Locations service dependency

ReworkCriticalPath

Summary: Handles HTTP GET request by invoking ReworkReduction with 'REWORKCRITICALPATH' and returns its result.

ActionResult LocationsController.ReworkCriticalPath()

Routing

  • HTTP: GET
  • URL: /Locations/ReworkCriticalPath
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking ReworkReduction with 'REWORKCRITICALPATH' and returns its result. - Return ActionResult from ReworkReduction

Test Case Ideas - Summary: Verify ReworkCriticalPath handles GET requests - and returns expected result. - Return expected ActionResult from ReworkReduction - Handle HTTP GET request

Dependencies & Called Services - Summary: ReworkCriticalPath depends on the Locations service. - Locations service dependency

UndesiredCriticalpath

Summary: No key flows are defined for the UndesiredCriticalpath method.

ActionResult LocationsController.UndesiredCriticalpath()

Routing

  • HTTP: GET
  • URL: /Locations/UndesiredCriticalpath
Detailed Analysis

Key Flows - Summary: No key flows are defined for the UndesiredCriticalpath method.

Maintainability Issues - Summary: Rename method to follow C# naming conventions for better readability and maintainability. - Non-standard method name 'UndesiredCriticalpath', Poor code readability, Reduced maintainability

UX Impact Notes - Summary: The method's ActionResult return influences user flow and experience. - ActionResult return affects user flow

Test Case Ideas - Summary: Verify HTTP GET accessibility and correct ActionResult return without parameters. - Correct ActionResult return without parameters

Dependencies & Called Services - Summary: Uses Locations service as a critical dependency. - Locations service dependency

AutomationPath

Summary: AutomationPath handles HTTP GET requests, calls PathAutomation with 'AUTOMATIONPATH', and returns the ActionResult.

ActionResult LocationsController.AutomationPath()

Routing

  • HTTP: GET
  • URL: /Locations/AutomationPath
Detailed Analysis

Key Flows - Summary: AutomationPath handles HTTP GET requests - and returns the ActionResult. - Handle HTTP GET request in AutomationPath - Return resulting ActionResult

UX Impact Notes - Summary: The method returns an ActionResult that controls user flow. - Return ActionResult

Test Case Ideas - Summary: Verify AutomationPath handles GET requests - and returns expected ActionResult. - Return expected ActionResult - Handle HTTP GET request correctly

Dependencies & Called Services - Summary: AutomationPath depends on the Locations service. - Dependency on Locations service

OutProcessAutomationPath

Summary: Handle HTTP GET request by invoking PathAutomation with 'OUTAUTOMATIONPATH' and return ActionResult.

ActionResult LocationsController.OutProcessAutomationPath()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessAutomationPath
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by invoking PathAutomation with 'OUTAUTOMATIONPATH' and return ActionResult. - Return ActionResult to client

UX Impact Notes - Summary: Returns PathAutomation result - Return result from PathAutomation

Test Case Ideas - Summary: Verify OutProcessAutomationPath handles HTTP GET and returns correct ActionResult for 'OUTAUTOMATIONPATH'. - Handle HTTP GET request correctly - Return expected ActionResult for 'OUTAUTOMATIONPATH' parameter

Dependencies & Called Services - Summary: Uses Locations service for external process automation. - Locations service dependency

ControlsNonProductive

Summary: Handles HTTP GET request by invoking NonProductivePath with a specific parameter and returns its result.

ActionResult LocationsController.ControlsNonProductive()

Routing

  • HTTP: GET
  • URL: /Locations/ControlsNonProductive
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking NonProductivePath with a specific parameter and returns its result. - Return ActionResult from NonProductivePath

UX Impact Notes - Summary: ControlsNonProductive returns ActionResult affecting user navigation and HTTP responses. - Redirects to view - Returns ActionResult - Returns HTTP response for non-productive paths

Test Case Ideas - Summary: Verify ControlsNonProductive handles GET requests - returns correct ActionResult - Handle HTTP GET request - Return expected ActionResult

Dependencies & Called Services - Summary: Uses Locations service for non-productive control operations. - Locations service dependency

NonProductivePath

Summary: Retrieve and filter project data, activities, and related entities; prepare and assign key analysis results for the view.

ActionResult LocationsController.NonProductivePath(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/NonProductivePath

Cross-layer call chain - LocationsController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetActivities - LocationsController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetTransferModes - LocationsController.NonProductivePath → Andromeda.Core.Entities.ProjectData.GetSchedData - LocationsController.NonProductivePath → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.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"]
    LocationsController_NonProductivePath["LocationsController.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
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActivities
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetSchedData
    LocationsController_NonProductivePath --> Andromeda_Core_Entities_ProjectData_GetTransferModes
    LocationsController_NonProductivePath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_NonProductivePath --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: NonProductivePath (Andromeda.Web\Views\Locations\NonProductivePath.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - and related entities; prepare and assign key analysis results for the view. - Filter teams and activities; retrieve schedule analysis; identify peak and critical path activities; assign to ViewData

Error Flows - Summary: Handle null references and fix incomplete code to prevent runtime errors. - Unsafe use of ToString for comparisons without type checks - Missing null checks before method calls causing exceptions

Security Issues - Summary: Incomplete session checks and unsanitized inputs risk unauthorized access and SQL injection. - Incomplete session variable comparison risks unauthorized access, Unsanitized ProjectID risks SQL injection in database queries, Unclear method call risks data exposure due to misspelling

Performance Issues - Summary: Avoid repeated queries and inefficient collection operations to improve performance. - Use of 'Any' and 'FirstOrDefault' inside loops without caching causes multiple iterations or queries, Repeated calls to FindByID without caching or optimization, Inefficient iteration over large collections like 'actors' or 'FilteredActivities', Unoptimized use of Count property on large collections

Maintainability Issues - Summary: Code suffers from unclear structure, tight coupling, poor naming, and error-prone patterns. - Incomplete and malformed code segments, Tight coupling with multiple models complicates maintenance and testing, Use of magic strings reduces readability and increases error risk, Undescriptive variable names hinder understandability, Misspelled method names and incomplete conditionals impair maintainability, Anonymous types and complex LINQ expressions reduce readability and complicate debugging

UX Impact Notes - Summary: Conditional logic and data assignments directly affect UI rendering and user experience. - Conditional checks on 'screenFrom' affect user flow and displayed data - Assignments to ViewData determine rendered UI and user interaction

Test Case Ideas - and performance with large data sets. - Filter activities by 'OutProcess' and remove invalid arrows, Retrieve Non-Productive and compensatory activities by risk model, Join activities with actors and filter teams by properties, Analyze schedule data for peak and critical path activities - Handle large collections for performance with actors and filtered activities

Dependencies & Called Services - Summary: Uses interfaces and collections for modeling, processing, and managing locations. - Enumerable for collection operations, IActorModel interface, IControlModel interface, IFinalPlanModel interface, IProcessModel interface, IRiskModel interface, Int32 data type, List collection, Locations entity, String data type - ProcessExtensions utilities

SimulationResult

Summary: Process filtered projects to gather simulation data, calculate costs, retrieve risk and comparison data, populate view data, and handle empty base activities.

ActionResult LocationsController.SimulationResult()

Routing

  • HTTP: GET
  • URL: /Locations/SimulationResult

Cross-layer call chain - LocationsController.SimulationResult → Andromeda.Core.Entities.Arrow.Clone - LocationsController.SimulationResult → Andromeda.Core.Entities.Activity.Clone - LocationsController.SimulationResult → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.SimulationResult → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.SimulationResult → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - LocationsController.SimulationResult → Andromeda.Core.Models.ModelHelper.GetFxRates - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds - Andromeda.Core.Models.ModelHelper.GetFxRates → Andromeda.Core.Models.ModelHelper.GetFxRates

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Models_ModelHelper_GetFxRates["Andromeda.Core.Models.ModelHelper.GetFxRates"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_SimulationResult["LocationsController.SimulationResult"]
    Andromeda_Core_Models_ModelHelper_GetFxRates --> Andromeda_Core_Models_ModelHelper_GetFxRates
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> 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
    LocationsController_SimulationResult --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_SimulationResult --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_SimulationResult --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_SimulationResult --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_SimulationResult --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_SimulationResult --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: SimulationResult (Andromeda.Web\Views\Locations\SimulationResult.cshtml)
  • Model: System.Collections.Generic.IList<Andromeda.Core.Entities.Simulation>
Detailed Analysis

Key Flows - and handle empty base activities. - Calculate HR and infrastructure costs using FX rates and project cost data - Iterate filtered projects to collect simulation data and add project headers, Retrieve active, non-system actors with location and in-process arrows by project parent ID, Retrieve objective activity risk control and compensatory activities, Retrieve or initialize project comparison data, Populate ViewData with simulation results, project data, and calculated metrics - Redirect if base activities collection is empty

Error Flows - Summary: Handle empty activity collections and null or incomplete data to prevent errors. - Handle null or incomplete variables like sures and dataOfMea to avoid errors - Redirect if baseActivities collection is empty

Security Issues - Summary: Validate inscopeTemaIds to prevent unauthorized access. - Improper validation of inscopeTemaIds, Risk of unauthorized access

Performance Issues - Summary: Optimize repeated data fetches and collection operations to reduce performance bottlenecks. - Repeated calls to ActorModel.getSimulationData and GettingProjectHeaders within loops, Use of ToArray() and ToList() on large collections causing memory overhead, Multiple database calls and complex calculations in a single method, Repeated calls to GetFxRates() within loops, Use of LINQ methods like First and Any inside loops causing multiple iterations, Multiple method calls without caching: GetProjectCost, LoadOffices, GetObjectiveActivityRiskControl, GetCompensatoryActivities

Maintainability Issues - Summary: Code suffers from unclear naming, magic values, tight coupling, and incomplete snippets reducing maintainability. - Use of magic numbers and strings reduces clarity, Incomplete and truncated code snippets hinder understanding, Tight coupling between models, controllers, and external helpers complicates testing and changes, Dense code blocks with multiple responsibilities reduce readability, Unclear and incomplete variable names decrease code clarity, Commented-out and incomplete code lines indicate quality issues

UX Impact Notes - Summary: Empty baseActivities triggers redirects and data issues degrade user experience. - Inaccurate or delayed ViewData harms user experience - Redirect on empty baseActivities disrupts navigation

Test Case Ideas - and efficient handling of large datasets. - Calculate total effort, HR cost, infrastructure cost, and control coverage accurately - Fetch correct project details by project ID - Handle actors with missing or unknown skills currency defaulting to USD - Redirect correctly on empty baseActivities - Return expected activities for given project parent ID - Ensure efficient performance with large datasets - Update ModuleStatus when count > 0 and set CreatedDate in ViewData - Validate oList() method and _Projects.C conditionals

Dependencies & Called Services - Summary: Uses diverse models, collections, utilities, and data types for simulation results. - Activity model, Arrow utility, Data type conversions, DateTime handling, Double precision numbers, Enumerable collections, Actor model interface, Control model interface, Infrastructure model interface, Project model interface, List collections, Location data, Mathematical functions, Model helper utilities, String operations - Process model interface, Process extension methods

GettingProjectHeaders

Summary: Retrieve and process project data including FX rates, actors, costs, and comparisons to return project headers.

List<Tuple<int, Dictionary<string, string>>> LocationsController.GettingProjectHeaders(int Project_ParentId)

Routing

  • URL: /Locations/GettingProjectHeaders

Cross-layer call chain - LocationsController.GettingProjectHeaders → Andromeda.Core.Models.ModelHelper.GetFxRates - LocationsController.GettingProjectHeaders → Andromeda.Core.Entities.Arrow.Clone - LocationsController.GettingProjectHeaders → Andromeda.Core.Entities.Activity.Clone - LocationsController.GettingProjectHeaders → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GettingProjectHeaders → Andromeda.Core.Services.Algorithms.Delooper.deloop - Andromeda.Core.Models.ModelHelper.GetFxRates → Andromeda.Core.Models.ModelHelper.GetFxRates - 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_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Models_ModelHelper_GetFxRates["Andromeda.Core.Models.ModelHelper.GetFxRates"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_GettingProjectHeaders["LocationsController.GettingProjectHeaders"]
    Andromeda_Core_Models_ModelHelper_GetFxRates --> Andromeda_Core_Models_ModelHelper_GetFxRates
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Models_ModelHelper_GetFxRates
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GettingProjectHeaders --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - and comparisons to return project headers. - Calculate project costs in USD using FX rates for HR and infrastructure - Return project headers as tuples of project IDs and data dictionaries

Error Flows - Summary: Prevent processing when base activities are null or empty and handle JSON data errors. - Early return on null or empty base activities collection - Conditional checks on JSON data triggering early exit or alternative processing

Performance Issues - Summary: Inefficient LINQ usage causes high memory use and repeated collection enumerations. - Use of ToList() loads entire datasets into memory

Maintainability Issues - Summary: The method's dense code, unclear variables, magic values, and incomplete sections reduce maintainability. - Unrelated lambda expressions and variable assignments reduce understandability

UX Impact Notes - Summary: Conditional JSON decoding affects project header display and handling in the UI. - Project data entity assignment

Test Case Ideas - Summary: Validate project header retrieval - JSON data assignment and decoding with fallback

Dependencies & Called Services - Summary: Uses core data types, collections, math utilities, and multiple model interfaces for project header processing. - Core data types (Int32, String, Double), Collections (List, Enumerable, Tuple), Mathematical utilities (Math), Model interfaces (IActorModel, IControlModel, IInfraModel, IProcessModel, IProjectModel), Helper classes (ModelHelper, ProcessExtensions), Utility classes (Activity, Arrow, Convert)

SimulationReviewed

Summary: Process POST request to update simulation reviewed status and return operation result.

JsonResult LocationsController.SimulationReviewed()

Routing

  • HTTP: POST
  • URL: /Locations/SimulationReviewed

Cross-layer call chain - LocationsController.SimulationReviewed → Andromeda.Core.LoggingManager.Error

Call Chain Diagram

flowchart TD
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    LocationsController_SimulationReviewed["LocationsController.SimulationReviewed"]
    LocationsController_SimulationReviewed --> Andromeda_Core_LoggingManager_Error
Detailed Analysis

Key Flows - Summary: Process POST request to update simulation reviewed status and return operation result. - Return JsonResult indicating operation outcome - Update reviewed status in database via UpdateIsReviewedStatus method

Error Flows - Summary: The method risks unhandled exceptions from invalid input and database errors. - No error handling for database update or logging failures

Security Issues - Summary: Direct conversion of request data to integers causes SQL injection risk. - Lack of input validation on request form data, Direct conversion of form data to integers, Potential SQL injection vulnerability

Performance Issues - Summary: Database update and error logging degrade performance under frequent calls. - Database update on each call - Error logging on each call

Maintainability Issues - Summary: Replace magic strings in logging to improve code maintainability and debugging. - Use of magic strings in logging messages

UX Impact Notes - Summary: Returns JsonResult affecting user flows and client-side handling. - Return JsonResult

Test Case Ideas - status update - and error logging in SimulationReviewed method. - Accurate update of reviewed status with valid data - Proper error logging after status update

Dependencies & Called Services - and logging services. - Conversion service, DateTime handling - Logging management - Process model interface

GetMinimumFTE

Summary: Retrieve project data, process team and activity inputs, calculate minimum FTE, and return results as JSON.

JsonResult LocationsController.GetMinimumFTE()

Routing

  • HTTP: POST
  • URL: /Locations/GetMinimumFTE

Cross-layer call chain - LocationsController.GetMinimumFTE → Andromeda.Core.Entities.Activity.Clone - LocationsController.GetMinimumFTE → Andromeda.Core.Entities.Arrow.Clone - LocationsController.GetMinimumFTE → Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce - LocationsController.GetMinimumFTE → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GetMinimumFTE → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.GetMinimumFTE → Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks → Andromeda.Core.Extensions.LinqExtensions.GetPathIds

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_GetPathIds["Andromeda.Core.Extensions.LinqExtensions.GetPathIds"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks["Andromeda.Core.Services.Algorithms.Delooper.GetSourcesAndSinks"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_GetMinimumFTE["LocationsController.GetMinimumFTE"]
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> Andromeda_Core_Extensions_LinqExtensions_GetPathIds
    Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks --> 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
    LocationsController_GetMinimumFTE --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GetMinimumFTE --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_GetMinimumFTE --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_GetSourcesAndSinks
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetMinimumFTE --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - and return results as JSON. - Calculate minimum FTE using handling times, volumes, and working hours - and assignments - Return minimum FTE as JsonResult - Load data conditionally based on simulation project ID

Error Flows - Summary: Handle null JSON - Null reference exceptions from null or malformed JSON deserialization, Exceptions from invalid type conversions without error handling, Compilation and runtime errors from incomplete or malformed code

Security Issues - Summary: Unvalidated input risks SQL injection and JSON deserialization attacks. - SQL injection risk from unvalidated Request.Form data - JSON deserialization vulnerability from unvalidated request JSON

Performance Issues - Summary: Optimize database calls, LINQ usage, object cloning, and loops to improve performance. - Nested loops and complex calculations on large datasets

Maintainability Issues - Summary: The method suffers from poor readability, tight coupling, unclear naming, and missing error handling. - Multiple variables declared in one line reducing readability, Tight coupling between controller and multiple models, Use of magic strings and numbers hindering maintainability, Incomplete or malformed code causing compilation errors, Inconsistent and unclear variable naming with typos, Lack of error handling for conversions and deserialization, Truncated code blocks obstructing understanding and maintenance

UX Impact Notes - Summary: Returning false on missing activity and input errors degrade user experience and flow. - Return false on missing activity signals failure - Large datasets cause slow responses

Test Case Ideas - processing logic - Return JsonResult validation - Performance and correctness with large datasets of actors - Accurate processing of team assignments and actor ID updates

Dependencies & Called Services - Summary: Uses collections, LINQ, math, and time utilities to process actor and risk models. - Collection interfaces and classes, LINQ extensions, Mathematical functions, TimeSpan utilities, Actor and control models, Risk model processing

RunTempSimulation

Summary: RunTempSimulation initializes simulation data, processes input updates, manages actors and simulation changes, updates the database, and notifies clients.

JsonResult LocationsController.RunTempSimulation()

Routing

  • HTTP: POST
  • URL: /Locations/RunTempSimulation

Cross-layer call chain - LocationsController.RunTempSimulation → Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce - LocationsController.RunTempSimulation → Andromeda.Core.Entities.Actor.SetLocation - LocationsController.RunTempSimulation → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.RunTempSimulation → Andromeda.Core.Entities.Activity.Clone - LocationsController.RunTempSimulation → Andromeda.Core.Entities.Arrow.Clone - LocationsController.RunTempSimulation → Insorce.Helpers.Helpers.GetTreeId - LocationsController.RunTempSimulation → Andromeda.Core.Entities.Actor.Clone - LocationsController.RunTempSimulation → Andromeda.Core.Services.SignalRMsg.SendMessage - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - Andromeda.Core.Services.SignalRMsg.SendMessage → Andromeda.Core.LoggingManager.Info - Andromeda.Core.Services.SignalRMsg.SendMessage → Andromeda.Core.LoggingManager.Error

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Actor_Clone["Andromeda.Core.Entities.Actor.Clone"]
    Andromeda_Core_Entities_Actor_GetLocation["Andromeda.Core.Entities.Actor.GetLocation"]
    Andromeda_Core_Entities_Actor_SetLocation["Andromeda.Core.Entities.Actor.SetLocation"]
    Andromeda_Core_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
    Andromeda_Core_Services_SignalRMsg_SendMessage["Andromeda.Core.Services.SignalRMsg.SendMessage"]
    Insorce_Helpers_Helpers_GetTreeId["Insorce.Helpers.Helpers.GetTreeId"]
    LocationsController_RunTempSimulation["LocationsController.RunTempSimulation"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_SignalRMsg_SendMessage --> Andromeda_Core_LoggingManager_Info
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Actor_SetLocation
    LocationsController_RunTempSimulation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_RunTempSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_RunTempSimulation --> Andromeda_Core_Services_SignalRMsg_SendMessage
    LocationsController_RunTempSimulation --> Insorce_Helpers_Helpers_GetTreeId
Detailed Analysis

Key Flows - processes input updates - updates the database - Create and update actors with work times - Manage session data and send SignalR notifications on simulation state - Process JSON input to update teams - assignments - Update simulation processes

Error Flows - Summary: Handle input validation - Input conversion exceptions from unvalidated user data - Invalid cast exceptions from unchecked type casting

Security Issues - Summary: Validate and sanitize all user inputs to prevent injection and deserialization attacks. - SQL injection risk from unvalidated integer conversion

Performance Issues - Summary: Optimize RunTempSimulation by reducing redundant data calls and expensive operations in loops. - Multiple database calls causing bottlenecks, Repeated string conversions and replacements in loops, Uncached LINQ queries causing multiple enumerations and allocations, Expensive object cloning inside loops, Inefficient processing of large JSON data without streaming

Maintainability Issues - Summary: The method is large, tightly coupled, error-prone, and uses unclear code and hardcoded values. - Incorrect use of bitwise OR instead of logical OR in conditionals

UX Impact Notes - Summary: Malformed data and missing fields cause errors and disrupt real-time simulation feedback. - Real-time updates via SignalR affecting user experience - User feedback impacted by false JSON responses on null checks

Test Case Ideas - Summary: Validate RunTempSimulation for data integrity - Create and populate new actors from team data - Ensure performance with large data sets - Send SignalR messages appropriately - Gracefully handle incomplete or empty code blocks - Manage session data updates correctly - Return appropriate JSON error responses - Handle missing or malformed JSON data - Handle mode changes and moving activities - Handle batch and exchange activities - Process conditional branches for deadlines and time constraints, Process decision outputs and probabilities accurately - Update team counts and insert simulation data

Dependencies & Called Services - Summary: Uses core collections, math, time, LINQ, and domain-specific models for simulation. - Core collections and interfaces, Math utilities, TimeSpan for timing, LINQ extensions, Domain models: Actor, Activity, Process, Control, Risk, SignalR messaging, Helper utilities, Data types: Int32, String

CreateChildproject

Summary: Create a unique child project by incrementing version, copying data, updating relationships, and setting view properties.

int LocationsController.CreateChildproject(int currentProjectId)

Routing

  • URL: /Locations/CreateChildproject

Cross-layer call chain - LocationsController.CreateChildproject → Andromeda.Core.LoggingManager.Error

Call Chain Diagram

flowchart TD
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    LocationsController_CreateChildproject["LocationsController.CreateChildproject"]
    LocationsController_CreateChildproject --> Andromeda_Core_LoggingManager_Error
Detailed Analysis

Key Flows - Summary: Create a unique child project by incrementing version - and setting view properties. - Create child project and set status code to 12 - Set ViewBag properties for new project ID - Update parent-child relationship if project IDs differ - Validate new project ID and log error if zero

Error Flows - Summary: Log error if created child project ID is zero. - Check if child project ID is zero - Log error for invalid child project ID

Performance Issues - Summary: The while loop risks non-termination when checking duplicate child project names. - While loop with conditional duplicate name check

Maintainability Issues - Summary: Remove dead code, fix syntax errors, correct typos, eliminate commented code, and reduce tight coupling. - Use of magic strings in configuration settings reduces maintainability

UX Impact Notes - Summary: Sets UI state for new project but lacks error feedback on creation failure. - Set ViewBag properties for new project ID - Incomplete error logging and no user notification on project creation failure

Test Case Ideas - Summary: Verify unique child project creation, correct data copying, and proper project ID handling. - Create child project with unique name and update status code to 12 - Assign and validate project ID including zero value - Set ViewBag properties for new project ID - Update parent-child relationship on project ID change

Dependencies & Called Services - Summary: CreateChildproject uses interfaces and types for project processing and logging. - Enumerable for collection operations, IProcessModel for process handling, IProjectModel for project data management, Int32 for numeric identifiers, String for text data - LoggingManager for logging activities

RunSimulationForOutProcess

Summary: No key flows are defined for the RunSimulationForOutProcess method.

JsonResult LocationsController.RunSimulationForOutProcess()

Routing

  • HTTP: POST
  • URL: /Locations/RunSimulationForOutProcess
Detailed Analysis

Key Flows - Summary: No key flows are defined for the RunSimulationForOutProcess method.

Error Flows - Summary: Handle conversion - Lack of error handling for integer conversion of cartAct.Id and assign.ID - No null checks after activities.FirstOrDefault leading to NullReferenceExceptions - Missing exception handling for database insert and update operations risking data inconsistency

Security Issues - Summary: The method risks injection attacks due to insufficient input validation and sanitization. - Insecure input validation with ValidateInput(false) on HTTP POST - Unsanitized use of assign.ID risking SQL injection or data tampering

Performance Issues - Summary: Optimize data fetching, looping, parsing, and database calls to improve simulation performance. - Memory issues from ToList() on large datasets - Sequential InsertSimulationData and UpdateSimulationData calls without error handling

Maintainability Issues - Summary: The method suffers from poor naming, magic strings, missing error handling, and unclear code. - Non-standard variable naming, Use of magic strings reducing readability, Incomplete and unclear code snippets, Missing error handling for conversions and database calls, Undefined variables reducing code comprehensibility

Test Case Ideas - Summary: Test data handling, calculation accuracy, performance, and database operations. - Verify database insertion and update for data persistence - Calculate reduced effort with varied average handling times, Calculate using 'ngTime' and 'newaht' with different inputs - Handle presence and absence of 'JsonData' parameter - Process malformed JSON data for decoding robustness

Dependencies & Called Services - Summary: Uses conversion utilities and interfaces for actor and process models with time management. - Conversion utilities, Enumerable collections, IActorModel interface, IProcessModel interface, TimeSpan struct

ReplaceAtOnce

Summary: ReplaceAtOnce creates a regex from oldValue and replaces its first occurrence in org with newValue.

string LocationsController.ReplaceAtOnce(string org, string oldValue, string newValue)

Routing

  • URL: /Locations/ReplaceAtOnce
Detailed Analysis

Key Flows - Summary: ReplaceAtOnce creates a regex from oldValue and replaces its first occurrence in org with newValue. - Create regex from oldValue - Return modified string

Security Issues - Summary: Regex with oldValue risks DoS via catastrophic backtracking. - DoS risk from regex catastrophic backtracking with oldValue

Performance Issues - Summary: Regex operations degrade performance on large input strings. - Regex creation overhead, Replacement operation cost on large inputs

Maintainability Issues - Summary: Hardcoded replacement count reduces code flexibility. - Hardcoded replacement count limits flexibility

Test Case Ideas - Summary: Test ReplaceAtOnce with varied input sizes and special characters. - Empty string inputs, Different input string lengths, Simple replacement cases, OldValue containing regex special characters, Large input strings

Dependencies & Called Services - Summary: Uses Regex for pattern matching in ReplaceAtOnce method. - Regex dependency, Pattern matching

UpdateTalentpools

Summary: Decode input JSON into domain objects, update them based on actor IDs, and persist changes via HRModel.

void LocationsController.UpdateTalentpools(int ProjectId, IList<Actor> actors, string jsonString, ImplemenationPlan plan, Dictionary<int, int> newIds)

Routing

  • URL: /Locations/UpdateTalentpools
Detailed Analysis

Key Flows - update them based on actor IDs - Encode-decode training needs and plans for updates - Persist updated talent pools - Update talent pools

Error Flows - Summary: Handle invalid JSON input and prevent null reference exceptions in collections. - Invalid or malformed JSON input handling, Null reference exceptions from null or unexpected collection values

Security Issues - Summary: The method risks deserialization and XSS attacks from unsanitized JSON and string inputs. - JSON deserialization vulnerabilities from unsanitized input using Json.Decode, Repeated JSON encoding/decoding increasing deserialization attack surface, Cross-site scripting (XSS) risks from concatenating user input into HTML, String injection risks from unsanitized ActorName property in concatenations

Performance Issues - Summary: Optimize serialization, avoid redundant encoding, reduce LINQ Any() in loops, and minimize string concatenation. - Expensive serialization from repeated Json.Decode and Encode, Redundant encoding and decoding within loops, Inefficient LINQ Any() calls inside loops over large collections, Memory-heavy string concatenation in loops building HTML

Maintainability Issues - Summary: The method's complexity and unclear code reduce maintainability and portability. - Mixing HTML generation with business logic

UX Impact Notes - Summary: Generated HTML risks XSS vulnerabilities affecting user interface security and experience. - Generated HTML content impacts user interface, Potential XSS vulnerabilities in generated HTML

Test Case Ideas - collection updates - Correctly decode JSON and initialize collections, Preserve data integrity during encoding and decoding, Add new talent pools, training needs, and plans accurately, Invoke SaveTalentPools, SaveTrainingNeeds, and SaveTrainingPlans methods properly, Map new IDs to existing talent pools and training data correctly - Handle large datasets efficiently without performance loss

Dependencies & Called Services - Summary: Uses collections and HR model interfaces for data handling. - Dictionary for key-value storage, Enumerable for collection iteration, IHRModel interface for HR data, List for ordered data storage

ImplementSimulation

Summary: Validate inputs, update simulation data, manage actors, activities, controls, infrastructure, and return execution results.

JsonResult LocationsController.ImplementSimulation(int ProjectId, string Scrn, int SimId, int parentPID, string LogedInUser, Guid LogedInUserId)

Routing

  • HTTP: POST
  • URL: /Locations/ImplementSimulation

Cross-layer call chain - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.ImplementSimulation → Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce - LocationsController.ImplementSimulation → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.ShapeInfo.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Activity.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Arrow.Clone - LocationsController.ImplementSimulation → Andromeda.Validation.SwimlaneInfo.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.ChangeVolume - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - LocationsController.ImplementSimulation → Andromeda.Core.Extensions.LinqExtensions.getSkill - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.ImplementSimulation → Insorce.Helpers.Helpers.GetTreeId - LocationsController.ImplementSimulation → Andromeda.Core.LoggingManager.Error - LocationsController.ImplementSimulation → Andromeda.Core.LoggingManager.Info - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Models.ModelHelper.ProjectTimeZone → Andromeda.Core.Models.ModelHelper.ProjectTimeZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    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_ShapeInfo_Clone["Andromeda.Core.Entities.ShapeInfo.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    Andromeda_Core_Extensions_LinqExtensions_getSkill["Andromeda.Core.Extensions.LinqExtensions.getSkill"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume["Andromeda.Core.Services.Algorithms.Delooper.ChangeVolume"]
    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"]
    Andromeda_Validation_SwimlaneInfo_Clone["Andromeda.Validation.SwimlaneInfo.Clone"]
    Insorce_Helpers_Helpers_GetTreeId["Insorce.Helpers.Helpers.GetTreeId"]
    LocationsController_ImplementSimulation["LocationsController.ImplementSimulation"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone --> 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
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_ShapeInfo_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_getSkill
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Error
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Info
    LocationsController_ImplementSimulation --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ImplementSimulation --> Andromeda_Validation_SwimlaneInfo_Clone
    LocationsController_ImplementSimulation --> Insorce_Helpers_Helpers_GetTreeId
Detailed Analysis

Key Flows - Summary: Validate inputs - update simulation data - and return execution results. - Branch logic based on 'Scrn' for cost and control handling - Initialize and update implementation plans with detailed subtasks - Return JSON results with execution status and messages - Create and update actors with working hours - Process activities and arrows including cloning and dependency updates - Update location infrastructure with premises - Update project XML and process maps to reflect changes - Validate input parameters and retrieve simulation data

Error Flows - Summary: Handle and return JSON errors for missing or invalid simulation data and execution conditions. - Early return if simulation data is null indicating prior implementation or discard - Return JSON errors for missing activities or decision activities in XML - Return JSON errors for activities with no or multiple incoming edges - Return JSON errors for missing or invalid team or actor information - Premature returns stopping execution based on validation conditions - Handle null or invalid JSON data during decoding

Security Issues - Summary: The method exposes SQL injection, JSON deserialization, and XSS vulnerabilities. - JSON deserialization risks from unvalidated or unsanitized JSON data

Performance Issues - Summary: Optimize database calls, JSON operations, collection handling, and string processing to improve performance. - Multiple database calls and LINQ queries in loops causing slowdowns, Repeated JSON encoding and decoding impacting performance, Inefficient use of ToList() and FirstOrDefault() on large collections without caching, String concatenation in loops causing high memory usage, Repeated conversions and method calls inside loops reducing efficiency

Maintainability Issues - Summary: Code suffers from poor readability, tight coupling, and mixed concerns, hindering maintainability. - Mixing HTML generation with business logic complicates testing and maintenance

UX Impact Notes - Summary: The method impacts UX through detailed HTML subtasks, error messaging, flow control, performance, and security. - Premature returns disrupt simulation flow

Test Case Ideas - Summary: Test method logic - data updates - and performance with large datasets. - Branching logic for 'Scrn' values - Activity and arrow cloning with predecessor-successor updates - Location infrastructure updates including premises - Performance testing for database calls and LINQ queries with large datasets - Team and actor changes including team size and location updates

Dependencies & Called Services - Summary: Use diverse models, collections, utilities, and helpers for simulation implementation. - Activity model, Actor interfaces and models, Arrow and ShapeInfo for diagram elements, Data conversion utilities, Dictionary and List collections, Enumerable and LinqExtensions for data queries, FileStream for file operations, Helper classes for model and process management, HttpUtility for web encoding, Interfaces for control, HR, infrastructure, process, project, and risk models, Math utilities, Regex for pattern matching, SwimlaneInfo for workflow visualization, String and TimeSpan utilities, Locations data - LoggingManager for logging

ImplementSimulation

Summary: Validate inputs, update simulation data, manage actors, activities, controls, infrastructure, and return execution results.

JsonResult LocationsController.ImplementSimulation(int ProjectId, string Scrn, int SimId, int parentPID, string LogedInUser, Guid LogedInUserId)

Routing

  • URL: /Locations/ImplementSimulation

Cross-layer call chain - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.ImplementSimulation → Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce - LocationsController.ImplementSimulation → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.ShapeInfo.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Activity.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Arrow.Clone - LocationsController.ImplementSimulation → Andromeda.Validation.SwimlaneInfo.Clone - LocationsController.ImplementSimulation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.ChangeVolume - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.ImplementSimulation → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - LocationsController.ImplementSimulation → Andromeda.Core.Extensions.LinqExtensions.getSkill - LocationsController.ImplementSimulation → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.ImplementSimulation → Insorce.Helpers.Helpers.GetTreeId - LocationsController.ImplementSimulation → Andromeda.Core.LoggingManager.Error - LocationsController.ImplementSimulation → Andromeda.Core.LoggingManager.Info - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Models.ModelHelper.ProjectTimeZone → Andromeda.Core.Models.ModelHelper.ProjectTimeZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    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_ShapeInfo_Clone["Andromeda.Core.Entities.ShapeInfo.Clone"]
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    Andromeda_Core_Extensions_LinqExtensions_getSkill["Andromeda.Core.Extensions.LinqExtensions.getSkill"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Info["Andromeda.Core.LoggingManager.Info"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume["Andromeda.Core.Services.Algorithms.Delooper.ChangeVolume"]
    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"]
    Andromeda_Validation_SwimlaneInfo_Clone["Andromeda.Validation.SwimlaneInfo.Clone"]
    Insorce_Helpers_Helpers_GetTreeId["Insorce.Helpers.Helpers.GetTreeId"]
    LocationsController_ImplementSimulation["LocationsController.ImplementSimulation"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone --> 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
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Entities_ShapeInfo_Clone
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
    LocationsController_ImplementSimulation --> Andromeda_Core_Extensions_LinqExtensions_getSkill
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Error
    LocationsController_ImplementSimulation --> Andromeda_Core_LoggingManager_Info
    LocationsController_ImplementSimulation --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_ChangeVolume
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_ImplementSimulation --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ImplementSimulation --> Andromeda_Validation_SwimlaneInfo_Clone
    LocationsController_ImplementSimulation --> Insorce_Helpers_Helpers_GetTreeId
Detailed Analysis

Key Flows - Summary: Validate inputs - update simulation data - and return execution results. - Branch logic based on 'Scrn' for cost and control handling - Initialize and update implementation plans with detailed subtasks - Return JSON results with execution status and messages - Create and update actors with working hours - Process activities and arrows including cloning and dependency updates - Update location infrastructure with premises - Update project XML and process maps to reflect changes - Validate input parameters and retrieve simulation data

Error Flows - Summary: Handle and return JSON errors for missing or invalid simulation data and execution conditions. - Early return if simulation data is null indicating prior implementation or discard - Return JSON errors for missing activities or decision activities in XML - Return JSON errors for activities with no or multiple incoming edges - Return JSON errors for missing or invalid team or actor information - Premature returns stopping execution based on validation conditions - Handle null or invalid JSON data during decoding

Security Issues - Summary: The method exposes SQL injection, JSON deserialization, and XSS vulnerabilities. - JSON deserialization risks from unvalidated or unsanitized JSON data

Performance Issues - Summary: Optimize database calls, JSON operations, collection handling, and string processing to improve performance. - Multiple database calls and LINQ queries in loops causing slowdowns, Repeated JSON encoding and decoding impacting performance, Inefficient use of ToList() and FirstOrDefault() on large collections without caching, String concatenation in loops causing high memory usage, Repeated conversions and method calls inside loops reducing efficiency

Maintainability Issues - Summary: Code suffers from poor readability, tight coupling, and mixed concerns, hindering maintainability. - Mixing HTML generation with business logic complicates testing and maintenance

UX Impact Notes - Summary: The method impacts UX through detailed HTML subtasks, error messaging, flow control, performance, and security. - Premature returns disrupt simulation flow

Test Case Ideas - Summary: Test method logic - data updates - and performance with large datasets. - Branching logic for 'Scrn' values - Activity and arrow cloning with predecessor-successor updates - Location infrastructure updates including premises - Performance testing for database calls and LINQ queries with large datasets - Team and actor changes including team size and location updates

Dependencies & Called Services - Summary: Use diverse models, collections, utilities, and helpers for simulation implementation. - Activity model, Actor interfaces and models, Arrow and ShapeInfo for diagram elements, Data conversion utilities, Dictionary and List collections, Enumerable and LinqExtensions for data queries, FileStream for file operations, Helper classes for model and process management, HttpUtility for web encoding, Interfaces for control, HR, infrastructure, process, project, and risk models, Math utilities, Regex for pattern matching, SwimlaneInfo for workflow visualization, String and TimeSpan utilities, Locations data - LoggingManager for logging

GetObjRiskControlsOfSimulation

Summary: Retrieve and filter risk control data using activity and simulation identifiers.

string LocationsController.GetObjRiskControlsOfSimulation(int ParentPID, int ChildPID, int ActivityID, List<Activity> SimActivities)

Routing

  • URL: /Locations/GetObjRiskControlsOfSimulation

Cross-layer call chain - LocationsController.GetObjRiskControlsOfSimulation → Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce["Andromeda.Core.Extensions.LinqExtensions.ReplaceAtOnce"]
    LocationsController_GetObjRiskControlsOfSimulation["LocationsController.GetObjRiskControlsOfSimulation"]
    LocationsController_GetObjRiskControlsOfSimulation --> Andromeda_Core_Extensions_LinqExtensions_ReplaceAtOnce
Detailed Analysis

Key Flows - Summary: Retrieve and filter risk control data using activity and simulation identifiers. - Retrieve risk control data by ParentPID, ChildPID, ActivityID, and SimActivities, Convert input parameters to obtain parent activity ID

Performance Issues - Summary: Optimize string operations and collection iteration to improve performance. - Unnecessary string conversions via Convert.ToInt32 and ReplaceAtOnce, Inefficient iteration over large objActivityRiskCon collection, Inefficient string concatenation in loops building HTML table

Maintainability Issues - Summary: Improve method and variable names for clarity and C# naming convention compliance. - Non-descriptive method name, Method name violates C# naming conventions, Non-descriptive variable names reducing readability

UX Impact Notes - Summary: Displays control information in an HTML table, impacting user experience based on table size and formatting. - HTML table displays newly added controls, Large or poorly formatted tables degrade user experience

Test Case Ideas - Summary: Verify correct risk controls retrieval, string construction, HTML content, and performance with varied data sizes. - Correct risk controls retrieval for simulation, Accurate construction of display string for new controls, Proper handling of empty risk control collections, Performance and correctness with large risk control collections, Validation of expected HTML content in change variable

Dependencies & Called Services - Summary: Uses LINQ and collection interfaces to process control and actor models. - LINQ Enumerable operations, ICollection interface usage, IActorModel interface usage, IControlModel interface usage, Int32 data type, LinqExtensions utilities, Convert class for type conversion

GetSimulationProcessChanges

Summary: Compare original and simulated data to identify changes across entities and accumulate change descriptions.

IList<string> LocationsController.GetSimulationProcessChanges(IList<Actor> actors, IList<Actor> simActors, IList<Activity> activities, IList<Activity> simActivities, IList<Arrow> arrows, IList<Arrow> simArrows, IList<ActivityProduct> decisionOPs, IList<ActivityProduct> simDecisionOPs, IList<ActivityProperty> activityProperties, IList<ActivityProperty> SimActivityProperties, IList<ProductFactor> products, IList<ProductFactor> SimProducts)

Routing

  • URL: /Locations/GetSimulationProcessChanges

Cross-layer call chain - LocationsController.GetSimulationProcessChanges → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.GetSimulationProcessChanges → Andromeda.Core.Extensions.LinqExtensions.TimeConverter - LocationsController.GetSimulationProcessChanges → Insorce.Helpers.Helpers.Deadline - LocationsController.GetSimulationProcessChanges → Insorce.Helpers.Helpers.Waittype - LocationsController.GetSimulationProcessChanges → Andromeda.Core.Extensions.LinqExtensions.getSkillScore - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData

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_Extensions_LinqExtensions_TimeConverter["Andromeda.Core.Extensions.LinqExtensions.TimeConverter"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Insorce_Helpers_Helpers_Deadline["Insorce.Helpers.Helpers.Deadline"]
    Insorce_Helpers_Helpers_Waittype["Insorce.Helpers.Helpers.Waittype"]
    LocationsController_GetSimulationProcessChanges["LocationsController.GetSimulationProcessChanges"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Extensions_LinqExtensions_TimeConverter
    LocationsController_GetSimulationProcessChanges --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_GetSimulationProcessChanges --> Insorce_Helpers_Helpers_Deadline
    LocationsController_GetSimulationProcessChanges --> Insorce_Helpers_Helpers_Waittype
Detailed Analysis

Key Flows - Summary: Compare original and simulated data to identify changes across entities and accumulate change descriptions. - Compare original and simulated actors, activities, arrows, and properties, Filter, join, and transform data using LINQ queries and anonymous types, Accumulate change descriptions into a list for reporting

Error Flows - Summary: Handle null checks and complete code to prevent runtime exceptions and unexpected behavior. - Use of First() and FirstOrDefault() without null checks causing exceptions - Truncated conditional and return statements causing unexpected behavior - Missing null checks on collections or objects causing null reference exceptions

Security Issues - Summary: The method exposes XSS and injection risks due to unsanitized string concatenation. - XSS vulnerabilities from unsanitized user data in HTML strings, Potential SQL or code injection from unsafe string concatenation, Risk from magic strings and direct HTML generation without input validation

Performance Issues - Summary: Optimize LINQ usage and string concatenation to prevent repeated iterations and memory overhead. - Excessive LINQ queries causing multiple enumerations and memory allocations, Repeated string concatenation in loops impacting memory and speed, Nested LINQ and complex conditions causing quadratic or worse performance, Uncached FirstOrDefault() and Any() calls inside loops causing repeated collection scans

Maintainability Issues - Summary: Refactor code to improve readability, naming consistency, and separate concerns. - Mixing HTML generation with business logic causing tight coupling

UX Impact Notes - Summary: Generates detailed HTML reports of simulation changes, impacting UI clarity and security. - Mixing HTML generation with logic complicates UI updates and localization

Test Case Ideas - Summary: Verify accurate detection, reporting, and handling of all simulation process changes and performance. - Report changes in activity team assignments - Return expected list of change strings - Test performance impact of repeated LINQ queries and string concatenations with large datasets - Handle empty input lists without errors - Handle changes in transfer modes with case-insensitive comparison - Handle changes in deadlines including absolute and relative types - Handle changes in business rules with different skill scores - Handle changes in forms including additions and removals - Handle changes in activity properties such as BRS - Handle changes in simulation process clusters - Handle changes in delays and wait types

Dependencies & Called Services - Summary: Uses utility, collection, and domain-specific services for data processing. - Actor service, Data type conversion utilities, Double precision operations, Enumerable collection processing, Helper utilities, ICollection interface, IControlModel interface, LinqExtensions for query operations, String manipulation

DiscardSimulation

Summary: DiscardSimulation retrieves and processes discard data, unchecks controls, and deletes related simulation and cart data.

JsonResult LocationsController.DiscardSimulation()

Routing

  • HTTP: POST
  • URL: /Locations/DiscardSimulation
Detailed Analysis

Key Flows - unchecks controls - Delete project cart data - Fetch simulation data for project and discard ID - Uncheck activity controls from decoded data

Error Flows - Summary: Prevent processing on null simulation and handle invalid discard IDs. - Early return on null simulation object

Security Issues - Summary: Validate and sanitize all input parameters to prevent SQL injection and data tampering. - Sanitize lst.objId, lst.actId, lst.rId, and lst.IdType in database queries - Validate and sanitize 'DiscardId' from request form

Performance Issues - Summary: Large data handling and repeated conversions degrade DiscardSimulation performance. - Large data from getSimulationData impacts performance, Repeated Convert.ToInt32 and Convert.ToString calls in loops degrade performance, Resource-intensive foreach loop over large 'data' collection

Maintainability Issues - Summary: Replace magic strings with constants, complete conditionals, use descriptive names, and remove commented code. - Use constants instead of magic strings, Complete conditional statements to avoid compilation errors, Use descriptive variable names, Remove commented out unused code to reduce clutter

UX Impact Notes - Summary: Handle null simulation early return and optimize data processing to maintain user experience. - Early return on null simulation affects user flow

Test Case Ideas - Summary: Test data retrieval, iteration performance, input handling, and code robustness. - ObjectiveActivityRiskControl retrieval with diverse inputs and large datasets

Dependencies & Called Services - Summary: Uses core system types and interfaces for model control and processing. - Core system types, Model control interfaces - Process model interfaces

SaveAndImplement

Summary: Retrieve project ID and request parameters, insert simulation data, and implement simulation without errors.

JsonResult LocationsController.SaveAndImplement()

Routing

  • HTTP: POST
  • URL: /Locations/SaveAndImplement
Detailed Analysis

Key Flows - Summary: Retrieve project ID and request parameters, insert simulation data, and implement simulation without errors. - Retrieve project ID, Retrieve request parameters, Insert simulation data, Implement simulation

Security Issues - Summary: Direct use of Request parameters causes SQL injection vulnerability. - Direct use of Request parameters without validation, SQL injection vulnerability

Maintainability Issues - Summary: Replace magic number '0' in InsertSimulationData calls with named constant. - Magic number '0' in InsertSimulationData calls, Lack of named constant for magic number

Test Case Ideas - Summary: Verify SaveAndImplement handles POST requests and saves simulation data correctly. - Invoke SaveAndImplement on HTTP POST request, Save and implement simulation data with valid parameters, Associate data correctly with different project IDs

Dependencies & Called Services - Summary: Uses IActorModel and Locations dependencies for service operations. - IActorModel dependency, Locations dependency

OutProcessFlow

Summary: Retrieve and process project data to build and calculate activity paths, then prepare data for view rendering.

ActionResult LocationsController.OutProcessFlow()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessFlow

Cross-layer call chain - LocationsController.OutProcessFlow → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.OutProcessFlow → Andromeda.Core.Entities.Activity.Clone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_OutProcessFlow["LocationsController.OutProcessFlow"]
    LocationsController_OutProcessFlow --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_OutProcessFlow --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: OutProcessFlow (Andromeda.Web\Views\Locations\OutProcessFlow.cshtml)
  • Model: List<Andromeda.Core.Entities.MapPath>
Detailed Analysis

Key Flows - Summary: Retrieve and process project data to build and calculate activity paths, then prepare data for view rendering. - Create and initialize MapPath objects with effort and start activities - Process inner paths by extracting activity relationships and calculating inner benefits - Clone activities and update path collections with ordering and child path aggregation

Performance Issues - Summary: Multiple LINQ operations and cloning cause inefficient data processing and high memory use. - Multiple LINQ queries and grouping impact performance on large datasets - Aggregate string concatenation creates many string objects - OrderByDescending has O(n log n) complexity

Maintainability Issues - Summary: Code uses unclear names, magic values, incomplete code, and duplicates, harming maintainability. - Repeated cloning logic violates DRY principle

Test Case Ideas - Summary: Verify data retrieval, filtering, calculations, object initialization, cloning, and ViewData population. - Filtering and grouping operations with empty datasets and invalid project IDs - Ordering and aggregation of child paths assigned to pList.ChildPaths - Setting 'OS' and 'OP' properties in ViewData based on team and activity status

Dependencies & Called Services - Summary: Uses models, collections, and utilities for process flow management. - Activity model, Enumerable utilities, Actor interface, Control interface, Final plan interface, List collection, String utilities - Process extension methods

OutProcessEffortReduction

Summary: Retrieve and filter project data, calculate risk and efficiency metrics, identify graph end nodes, and aggregate activity statistics.

ActionResult LocationsController.OutProcessEffortReduction()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessEffortReduction

Cross-layer call chain - LocationsController.OutProcessEffortReduction → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.OutProcessEffortReduction → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - LocationsController.OutProcessEffortReduction → Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls - LocationsController.OutProcessEffortReduction → Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities - LocationsController.OutProcessEffortReduction → Insorce.Helpers.Helpers.GetIndividualPath - Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities → Andromeda.Core.DataManager.GetDataList - 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_GetCompensatoryActivities["Andromeda.Core.Entities.ProjectData.GetCompensatoryActivities"]
    Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls["Andromeda.Core.Entities.ProjectData.GetobjActivityRiskControls"]
    Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping["Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    Insorce_Helpers_Helpers_GetIndividualPath["Insorce.Helpers.Helpers.GetIndividualPath"]
    LocationsController_OutProcessEffortReduction["LocationsController.OutProcessEffortReduction"]
    Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities --> Andromeda_Core_DataManager_GetDataList
    Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_Arrow_Clone
    Insorce_Helpers_Helpers_GetIndividualPath --> Andromeda_Core_Entities_EdgeInfo_Clone
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Entities_ProjectData_GetCompensatoryActivities
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Entities_ProjectData_GetobjActivityRiskControls
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_OutProcessEffortReduction --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_OutProcessEffortReduction --> Insorce_Helpers_Helpers_GetIndividualPath
View Metadata
  • View: OutProcessEffortReduction (Andromeda.Web\Views\Locations\OutProcessEffortReduction.cshtml)
Detailed Analysis

Key Flows - Summary: Retrieve and filter project data, calculate risk and efficiency metrics, identify graph end nodes, and aggregate activity statistics. - Calculate lines of defence, Calculate activity efficiency from handling time and volume - Retrieve and filter project activities and arrows, Retrieve risk controls, compensatory activities, and groups, Identify graph end nodes and extract individual paths, Aggregate statistics on undesired outcomes and risk threshold breaches

Error Flows - Summary: The method lacks explicit error handling for null or empty project data and activity collections. - Missing explicit error handling for null project data, No exception management for empty activity collections

Performance Issues - Summary: Excessive LINQ operations and repeated data loading degrade performance. - Excessive ToList() calls load large datasets into memory

Maintainability Issues - Summary: Excessive dependencies and unclear code reduce maintainability and complicate refactoring. - High dependency count on multiple models, Non-descriptive and inconsistent variable names, Use of anonymous types and magic numbers, Presence of unused variables

UX Impact Notes - Summary: Storing activity counts and risk levels in ViewData affects UI and UX. - Activity counts with undesired outcomes in ViewData, Risk level data in ViewData, UI changes based on stored data

Test Case Ideas - Summary: Verify data mappings, graph processing, performance, and correct output statistics. - Performance and correctness on large datasets and repeated LINQ calls

Dependencies & Called Services - Summary: Uses core collections, math utilities, process extensions, and domain-specific models. - Core collections: Dictionary, List, Enumerable, Math utilities, Domain models: IActorModel, IControlModel, IRiskModel, ProjectData, Helpers - Process extensions

ImplementAndDiscard

Summary: Process updates and retrieves projects with simulation and risk control handling when type is 'Implement'; otherwise, skip implementation logic.

JsonResult LocationsController.ImplementAndDiscard()

Routing

  • HTTP: POST
  • URL: /Locations/ImplementAndDiscard

Cross-layer call chain - LocationsController.ImplementAndDiscard → Andromeda.Core.Models.ModelHelper.GetProjectDetails - LocationsController.ImplementAndDiscard → Andromeda.Core.Services.Registry.setProjectDetails - Andromeda.Core.Models.ModelHelper.GetProjectDetails → Andromeda.Core.Models.ModelHelper.GetProjectDetails - Andromeda.Core.Models.ModelHelper.GetProjectDetails → Andromeda.Core.DataManager.GetData - Andromeda.Core.Services.Registry.setProjectDetails → Andromeda.Core.Utility.Encrypt.DecryptString

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetData["Andromeda.Core.DataManager.GetData"]
    Andromeda_Core_Models_ModelHelper_GetProjectDetails["Andromeda.Core.Models.ModelHelper.GetProjectDetails"]
    Andromeda_Core_Services_Registry_setProjectDetails["Andromeda.Core.Services.Registry.setProjectDetails"]
    Andromeda_Core_Utility_Encrypt_DecryptString["Andromeda.Core.Utility.Encrypt.DecryptString"]
    LocationsController_ImplementAndDiscard["LocationsController.ImplementAndDiscard"]
    Andromeda_Core_Models_ModelHelper_GetProjectDetails --> Andromeda_Core_DataManager_GetData
    Andromeda_Core_Models_ModelHelper_GetProjectDetails --> Andromeda_Core_Models_ModelHelper_GetProjectDetails
    Andromeda_Core_Services_Registry_setProjectDetails --> Andromeda_Core_Utility_Encrypt_DecryptString
    LocationsController_ImplementAndDiscard --> Andromeda_Core_Models_ModelHelper_GetProjectDetails
    LocationsController_ImplementAndDiscard --> Andromeda_Core_Services_Registry_setProjectDetails
Detailed Analysis

Key Flows - Summary: Process updates and retrieves projects with simulation and risk control handling when type is 'Implement'; otherwise - skip implementation logic. - Process simulation data with conditional checks - Set project details in registry - Return JSON response - Update child project status on 'Implement' type

Error Flows - Summary: Handle null references - validate inputs - Null reference exceptions from unchecked object properties

Security Issues - Summary: Failing to validate or sanitize input exposes security vulnerabilities. - Lack of input validation, Absence of input sanitization

Performance Issues - Summary: Repeated data retrieval and inefficient string comparisons degrade performance and increase memory use. - Use of ToList() causing high memory usage for large result sets

Maintainability Issues - Summary: Replace magic strings and numbers with constants and simplify complex conditionals. - Use constants or enums instead of magic strings, Replace magic numbers with named constants, Simplify complex conditional statements, Fix syntax errors and incomplete statements

UX Impact Notes - Summary: Returns JSON response without input validation - JSON response after setting project details

Test Case Ideas - project status updates - registry updates - Handle 'type' parameter variations and missing values - Update child project status codes - Populate project lists correctly or return empty - Uncheck activity controls based on control presence - Set project details in registry - Return correct JSON responses - Ensure performance with large project and simulation data sets

Dependencies & Called Services - Summary: Use core collections, model interfaces, and helper utilities for implementation. - Core collections: List, Enumerable, Model interfaces: IActorModel, IControlModel, IProcessModel, IProjectModel, Utility classes: ModelHelper, Registry, String operations

OutProcessControlsPath

Summary: Handles HTTP GET request by invoking ControlsPath with a fixed parameter and returns its result.

ActionResult LocationsController.OutProcessControlsPath()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessControlsPath
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking ControlsPath with a fixed parameter and returns its result. - Return ActionResult from ControlsPath

Test Case Ideas - and expected ActionResult return. - Return expected ActionResult from ControlsPath - Handle HTTP GET request

Dependencies & Called Services - Summary: Uses Locations service for external process control paths. - Locations service dependency

NonProductive

Summary: Retrieve and filter non-productive activities based on project, session flags, and actor scope, then populate ViewData with relevant project details.

ActionResult LocationsController.NonProductive(string screenFrom)

Routing

  • HTTP: GET
  • URL: /Locations/NonProductive

Cross-layer call chain - LocationsController.NonProductive → Andromeda.Core.Entities.Arrow.Clone - LocationsController.NonProductive → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.NonProductive → 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_Entities_Arrow_Clone["Andromeda.Core.Entities.Arrow.Clone"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_NonProductive["LocationsController.NonProductive"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_NonProductive --> Andromeda_Core_Entities_Arrow_Clone
    LocationsController_NonProductive --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_NonProductive --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: NonProductive (Andromeda.Web\Views\Locations\NonProductive.cshtml)
  • Model: IList<Andromeda.Core.Entities.Activity>
Detailed Analysis

Key Flows - Summary: Retrieve and filter non-productive activities based on project, session flags, and actor scope, then populate ViewData with relevant project details. - Check AllActivities to decide processing path - Retrieve active non-system actor IDs to define activity scope, Filter compensatory and non-productive activities for current project, Apply session and flag-based activity filters, Populate ViewData with project activities, controls, review statuses, and configurations

Error Flows - Summary: Lack of explicit exception handling risks runtime errors and undefined error flows. - Absence of explicit exception handling, Potential runtime errors from incomplete code segments

Security Issues - Summary: NullReferenceException risk exists in permission checks due to undefined or null variables. - NullReferenceException risk in permission checks

Performance Issues - Summary: Optimize LINQ queries and collection operations to reduce memory use and improve speed. - Multiple ToList() calls causing repeated database queries and high memory use, RemoveAll on large lists impacting performance, Filtering large collections in memory degrading performance, FirstOrDefault on large collections causing slowdowns, AddRange inside loops causing multiple array reallocations

Maintainability Issues - Summary: Improve code readability and maintainability by clarifying names and replacing magic strings. - Non-descriptive variable names reduce readability, Magic strings should be replaced with constants or enums, Incomplete code segments cause compilation errors and confusion, Unclear method calls lack context, Complex method chaining reduces readability and debugging ease

UX Impact Notes - Summary: Redirects and parameter-driven filtering alter navigation and displayed data. - Redirect user to ProcessCreation action based on conditions - ScreenFrom parameter controls filtering and navigation flow, ViewData properties determine displayed project and activity data

Test Case Ideas - Summary: Verify method returns correct actor IDs - handles flags - and sets view data accurately. - Handle empty and populated obsAcc collections in review processing - Redirect behavior based on 'Any' method condition - Return correct non-system actor IDs - Conditional logic with AllActivities true and false - Set IsAnyoneAccReviewed flag correctly

Dependencies & Called Services - Summary: Uses core collections, math, string utilities, and domain-specific models for processing. - Core collections: List, Enumerable, Mathematical utilities: Math, String utilities: String, Domain models: IActorModel, IControlModel, IProcessModel, IProjectModel, IRiskModel, Functional programming support: Arrow - Process-related extensions: ProcessExtensions

SaveNonProductive

Summary: No key flows are defined for the SaveNonProductive method.

JsonResult LocationsController.SaveNonProductive()

Routing

  • HTTP: POST
  • URL: /Locations/SaveNonProductive
Detailed Analysis

Key Flows - Summary: No key flows are defined for the SaveNonProductive method.

Error Flows - Summary: Handle JSON deserialization - Unhandled JSON deserialization exceptions for IDs string

Security Issues - Summary: Direct JSON deserialization from request data risks injection attacks. - Unvalidated JSON deserialization

Performance Issues - Summary: Repeated conversions and large data retrieval degrade SaveNonProductive performance. - ActorModel.getActivities retrieves large datasets during filtering

Maintainability Issues - Summary: Replace magic strings with constants and remove dead or incomplete code for maintainability. - Use constants or enums instead of magic strings, Remove incomplete and syntactically incorrect code, Eliminate unused variable declarations

UX Impact Notes - Summary: Conditional logic controls user flow and UI updates without error feedback on save failure. - Conditional checks on 'screenFrom' determine path ID assignment and saved activities - Method calls List to update or redirect UI after saving

Test Case Ideas - pathId assignment - Assign pathIds based on session variable 'msCriticalPath' presence - Call SaveNPAActivities with correct parameters and return JSON result

Dependencies & Called Services - Summary: Uses collections and data conversion utilities for actor model processing. - Enumerable for collection operations, ICollection for data storage, IActorModel for actor representation, Int32 for integer handling, String for text manipulation, Convert for data type conversion

SaveNVAType

Summary: SaveNVAType handles POST requests to save NPA activity and update project review status.

JsonResult LocationsController.SaveNVAType()

Routing

  • HTTP: POST
  • URL: /Locations/SaveNVAType
Detailed Analysis

Key Flows - Summary: SaveNVAType handles POST requests to save NPA activity and update project review status. - Call IProcessModel.updateisreviewedstatus to update project review status

Error Flows - Summary: SaveNVAType fails on invalid parameters and lacks exception handling. - No explicit exception handling leads to unhandled errors during save or update

Security Issues - Summary: Directly converting user input without validation risks SQL injection and data tampering. - Lack of input validation, No input sanitization, SQL injection vulnerability, Data tampering risk

Maintainability Issues - Summary: Replace magic strings with named constants to improve code readability and maintainability. - Use named constants instead of magic strings, Avoid hardcoded values like 'PermisionModule.NVA' and 'ObservationTabAccordions.NVA_ClassifyActivities'

Test Case Ideas - Summary: Verify SaveNVAType handles HTTP POST and correctly saves NPA activity with status update. - Invoke SaveNVAType on HTTP POST request, Save NPA activity with valid input - Update reviewed status after saving

Dependencies & Called Services - Summary: SaveNVAType depends on Convert utility and interfaces IActorModel and IProcessModel. - Convert utility, IActorModel interface, IProcessModel interface

UpdateNVAMetrics

Summary: UpdateNVAMetrics retrieves project data, calculates NVA efforts, updates metrics, and saves serialized results.

JsonResult LocationsController.UpdateNVAMetrics()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateNVAMetrics

Cross-layer call chain - LocationsController.UpdateNVAMetrics → Andromeda.Core.Entities.Activity.Effort

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
    LocationsController_UpdateNVAMetrics["LocationsController.UpdateNVAMetrics"]
    LocationsController_UpdateNVAMetrics --> Andromeda_Core_Entities_Activity_Effort
Detailed Analysis

Key Flows - Summary: UpdateNVAMetrics retrieves project data - updates metrics - Calculate and update NVA metrics - handle zero total effort to avoid division errors - Conditionally create or decode project entity based on dataOfMeasures and JSON - Serialize updated project entity to JSON - Insert or update serialized comparison data in ProjectModel

Error Flows - Summary: Handle null data - and validate JSON and input strings. - Check for null or whitespace-only dataOfMeasures input - Set NVA metric to zero if total effort is zero - Validate and handle malformed JSON during deserialization

Security Issues - Summary: Validate JSON before deserialization to prevent deserialization vulnerabilities. - Deserialization vulnerability risk from unvalidated JSON input

Performance Issues - Summary: Optimize database calls and reuse serializer to improve UpdateNVAMetrics performance. - Multiple unoptimized database calls without caching, Inefficient creation of new JavaScriptSerializer instances per call

Maintainability Issues - Summary: The method violates single responsibility, uses unclear names, magic numbers, and incomplete code reduces clarity. - Tight coupling with multiple models reduces maintainability and testability, Violates single responsibility principle, Unclear and incomplete variable and method names harm readability, Magic numbers in rounding should use named constants, Incomplete and truncated code snippets reduce clarity

Test Case Ideas - Summary: Verify UpdateNVAMetrics calculates and serializes NVA effort correctly under various conditions. - Calculate correct NVA effort for given project - Handle no in-scope non-system teams or NVA activities - Test dataOfMeasu condition impact on return value - Set NVA to 0 when Effort is 0 to prevent division by zero - Validate serialized JSON content and format

Dependencies & Called Services - Summary: Uses models, collections, serialization, and basic utilities for updating NVAMetrics. - Activity tracking, Enumerable collections, Actor, Process, and Project models, JavaScript serialization, List data structure, Mathematical operations, String manipulation

UpdateNVATypeMIData

Summary: Decode JSON from request, process each item into Activity objects, save if present, and return JSON response.

JsonResult LocationsController.UpdateNVATypeMIData()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateNVATypeMIData
Detailed Analysis

Key Flows - and return JSON response. - Create Activity objects - Return JSON response with Activities - Process 'id' and 'nva' values

Error Flows - Summary: Handle exceptions from invalid conversions - Malformed or incomplete 'nva' data assignments affecting processing

Security Issues - Summary: Validate inputs to prevent exceptions and injection risks in data conversion and JSON decoding. - Unsanitized input to System.Web.Helpers.Json.Decode creates security vulnerabilities

Performance Issues - Summary: Optimize JSON decoding, type conversions, string comparisons, and collection operations for performance. - Inefficient JSON decoding with System.Web.Helpers.Json.Decode on large data, Repeated Convert.ToInt32 and Convert.ToString calls without error handling inside loops, Redundant string.Equals calls with identical parameters, Excessive additions to large Activities collection, Costly LINQ Select and ToList operations on large Activities collections

Maintainability Issues - Summary: Replace magic strings and unclear variables with constants and descriptive names to improve maintainability. - Use constants or enums instead of magic strings for request keys and value comparisons, Replace unclear variable names with descriptive identifiers, Remove dead code such as unused string operations, Avoid anonymous types in JSON responses to enhance clarity, Fix syntax errors and incomplete code snippets to improve readability

UX Impact Notes - Summary: The method has no direct user experience impact. - Returns JSON data

Test Case Ideas - collection updates - conditional logic - Handle incomplete or malformed code fragments robustly - Return JSON response with expected activities list - Correctly assign and use string variables affecting processing - Process valid JSON with multiple NVA data items - Update Activities collection with new Activity objects

Dependencies & Called Services - Summary: Uses collections and data types for processing actor model data. - Enumerable operations, IActorModel interface, ICollection interface, Int32 data type, List collection, String data type

SupAndManagers

Summary: Handle HTTP GET request by calling JoinTeams with 'SupAndManagers' and return the ActionResult.

ActionResult LocationsController.SupAndManagers()

Routing

  • HTTP: GET
  • URL: /Locations/SupAndManagers
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling JoinTeams with 'SupAndManagers' and return the ActionResult. - Return ActionResult to client

UX Impact Notes - Summary: Returns relevant data for supervisors and managers - Return data from JoinTeams method

Test Case Ideas - Summary: Verify SupAndManagers handles GET requests - and returns expected result. - Return expected ActionResult from JoinTeams - Handle HTTP GET request

Dependencies & Called Services - Summary: SupAndManagers method depends on Locations service. - Locations service dependency

ImplementationPlans

Summary: Fetch project activities and redirect if none exist; otherwise, process and return implementation plans.

ActionResult LocationsController.ImplementationPlans()

Routing

  • HTTP: GET
  • URL: /Locations/ImplementationPlans

Cross-layer call chain - LocationsController.ImplementationPlans → Insorce.Helpers.Helpers.GetImpPath

Call Chain Diagram

flowchart TD
    Insorce_Helpers_Helpers_GetImpPath["Insorce.Helpers.Helpers.GetImpPath"]
    LocationsController_ImplementationPlans["LocationsController.ImplementationPlans"]
    LocationsController_ImplementationPlans --> Insorce_Helpers_Helpers_GetImpPath
View Metadata
  • View: ImplementationPlans (Andromeda.Web\Views\Locations\ImplementationPlans.cshtml)
  • Model: IList<Andromeda.Core.Entities.ImplemenationPlan>
Detailed Analysis

Key Flows - Summary: Fetch project activities and redirect if none exist; otherwise - process and return implementation plans. - Fetch all activities using Riskmodel.GetAllActivities - Redirect to ProcessCreation if activity count equals zero - Call ImpPath with processed implementation plans and return result

Error Flows - Summary: Handle malformed or incomplete conditional statements on activities.Count to prevent errors. - Incomplete conditional statement on activities.Count, Unexpected behavior or errors from conditional issues

Performance Issues - Summary: Using ToList() on GetImplementationPlan loads entire dataset into memory - Use of ToList() loads entire dataset into memory

Maintainability Issues - and finalize iteration logic. - Typo in variable name 'projectI' instead of 'projectId', Incomplete or malformed conditional on activities.Count, Commented out Where clause indicating incomplete code, Incomplete iteration over implementation plans causing maintainability issues

UX Impact Notes - Summary: Redirects users to 'ProcessCreation' if activities count or value is zero - Potential disruption of user workflow - Redirect to 'ProcessCreation' on zero activities count or value

Test Case Ideas - conditional redirects - Redirect to ProcessCreation on true condition only - Return expected activities for project ID - Evaluate conditional logic with varying activity counts - Return correct implementation plans for project ID - Call ImpPath with correct parameter and return expected ActionResult

Dependencies & Called Services - Summary: Uses collections and interfaces for actor and risk model handling. - Enumerable for collection operations, Helpers for utility functions, IActorModel interface, IRiskModel interface, List for data storage

UpdateImpPlans

Summary: The method processes a POST request to update implementation plans for a project and returns the update result.

JsonResult LocationsController.UpdateImpPlans()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateImpPlans

Cross-layer call chain - LocationsController.UpdateImpPlans → 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"]
    LocationsController_UpdateImpPlans["LocationsController.UpdateImpPlans"]
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
    LocationsController_UpdateImpPlans --> Andromeda_Core_DataManager_Execute
Detailed Analysis

Key Flows - Summary: The method processes a POST request to update implementation plans for a project and returns the update result. - Return JsonResult with update outcome - Update plans via ActorModel's UpdateImpPlans

Error Flows - Summary: Handle deserialization errors to prevent failed implementation plan updates. - Deserialization failure of request form data, Error response in JsonResult on invalid input

Security Issues - Summary: Deserializing unvalidated request data risks remote code execution. - Deserialization of unvalidated request data

Performance Issues - Summary: Accessing form data by index degrades performance with large data. - Index-based form data access, Performance degradation with large form data

Maintainability Issues - Summary: Replace magic string '0' in Request.Form with a named constant for clarity. - Use named constants instead of magic strings in Request.Form access

UX Impact Notes - Summary: JsonResult affects user flows based on error or validation content. - JsonResult contains error messages, JsonResult contains validation results, User flow depends on JsonResult content

Test Case Ideas - Summary: Verify UpdateImpPlans handles POST requests with valid data and various project contexts efficiently. - Handle different project IDs correctly - Invoke UpdateImpPlans on HTTP POST - Process valid implementation plan IDs

Dependencies & Called Services - Summary: UpdateImpPlans depends on IActorModel service. - Dependency on IActorModel service

CustomerNonProductive

Summary: Handles HTTP GET requests by invoking NonProductive with 'CustomerNonProductive' and returning its result.

ActionResult LocationsController.CustomerNonProductive()

Routing

  • HTTP: GET
  • URL: /Locations/CustomerNonProductive
Detailed Analysis

Key Flows - Summary: Handles HTTP GET requests by invoking NonProductive with 'CustomerNonProductive' and returning its result. - Handle HTTP GET request - Return ActionResult from NonProductive

UX Impact Notes - Summary: The method returns an ActionResult that controls user flow. - Returns ActionResult

Test Case Ideas - correct ActionResult return - ActionResult return validation

Dependencies & Called Services - Summary: Uses Locations service for customer non-productive operations. - Locations service dependency

CustomerNonProductivePath

Summary: Handle HTTP GET request by calling NonProductivePath with fixed string and returning ActionResult.

ActionResult LocationsController.CustomerNonProductivePath()

Routing

  • HTTP: GET
  • URL: /Locations/CustomerNonProductivePath
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling NonProductivePath with fixed string and returning ActionResult. - Return resulting ActionResult

Test Case Ideas - Summary: Verify method response to HTTP GET and correct output for specific argument. - Handle HTTP GET request correctly - Return expected result for argument 'CustomerNonProductivePath'

Dependencies & Called Services - Summary: Uses Locations service dependency. - Locations service dependency

OutProcessNonProductive

Summary: Handles HTTP GET request by invoking NonProductive with a fixed parameter and returns its result.

ActionResult LocationsController.OutProcessNonProductive()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessNonProductive
Detailed Analysis

Key Flows - Summary: Handles HTTP GET request by invoking NonProductive with a fixed parameter and returns its result. - Return ActionResult from NonProductive

Test Case Ideas - Summary: Verify OutProcessNonProductive handles GET requests - returns ActionResult - Handle HTTP GET request - Return ActionResult

Dependencies & Called Services - Summary: Calls external Locations service. - External Locations service dependency

OutProcessNonProductivePath

Summary: Handle HTTP GET request by calling NonProductivePath with 'OutProcessNonProductive' and return ActionResult.

ActionResult LocationsController.OutProcessNonProductivePath()

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessNonProductivePath
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling NonProductivePath with 'OutProcessNonProductive' and return ActionResult. - Return ActionResult to client

UX Impact Notes - Summary: Returns various HTTP responses affecting user navigation and flow. - ActionResult return type - Potential views or redirects

Test Case Ideas - Summary: Verify correct HTTP GET handling, expected ActionResult, and proper method invocation. - Handle HTTP GET request correctly - Return expected ActionResult

Dependencies & Called Services - Summary: Calls external Locations service for non-productive path processing. - External Locations service dependency

CustomerControlRedundancy

Summary: Handles HTTP GET requests by invoking ControlsPath with 'CUSTOMERCONTROLREDUNDANCY' and returning its result.

ActionResult LocationsController.CustomerControlRedundancy()

Routing

  • HTTP: GET
  • URL: /Locations/CustomerControlRedundancy
Detailed Analysis

Key Flows - Summary: Handles HTTP GET requests by invoking ControlsPath with 'CUSTOMERCONTROLREDUNDANCY' and returning its result. - Return ControlsPath result as ActionResult - Handle HTTP GET request

Error Flows - Summary: Method lacks explicit error handling, allowing exceptions to propagate. - No explicit error handling, Exceptions propagate from ControlsPath

UX Impact Notes - Summary: Redirects or displays pages based on ControlsPath - Redirect or display page based on ControlsPath - User experience depends on ControlsPath behavior

Test Case Ideas - Summary: Verify HTTP GET access and correct response for CUSTOMERCONTROLREDUNDANCY parameter. - HTTP GET method accessibility, Correct response for ControlsPath with CUSTOMERCONTROLREDUNDANCY parameter

Dependencies & Called Services - Summary: Uses Locations service for customer control redundancy. - Locations service dependency

Locations

Summary: No key flows are defined for the Locations method.

ActionResult LocationsController.Locations()

Routing

  • HTTP: GET
  • URL: /Locations/Locations

Cross-layer call chain - LocationsController.Locations → Andromeda.Core.Entities.Activity.Clone - LocationsController.Locations → Andromeda.Core.Entities.Gantt.ActorGantt - LocationsController.Locations → Andromeda.Core.Entities.Gantt.ClusterGantt - LocationsController.Locations → Andromeda.Core.Entities.Gantt.ProductGantt - LocationsController.Locations → Andromeda.Core.Entities.Gantt.ActorGanttByUnits - LocationsController.Locations → Andromeda.Core.Entities.Gantt.HourlyEffortByActor - LocationsController.Locations → Andromeda.Core.Entities.Sched.StartTimeHour - LocationsController.Locations → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.Locations → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - Andromeda.Core.Entities.Gantt.ActorGanttByUnits → Andromeda.Core.Entities.Sched.StartTimeHourMin - 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_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
    Andromeda_Core_Entities_Gantt_ActorGantt["Andromeda.Core.Entities.Gantt.ActorGantt"]
    Andromeda_Core_Entities_Gantt_ActorGanttByUnits["Andromeda.Core.Entities.Gantt.ActorGanttByUnits"]
    Andromeda_Core_Entities_Gantt_ClusterGantt["Andromeda.Core.Entities.Gantt.ClusterGantt"]
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor["Andromeda.Core.Entities.Gantt.HourlyEffortByActor"]
    Andromeda_Core_Entities_Gantt_ProductGantt["Andromeda.Core.Entities.Gantt.ProductGantt"]
    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"]
    LocationsController_Locations["LocationsController.Locations"]
    Andromeda_Core_Entities_Gantt_ActorGanttByUnits --> Andromeda_Core_Entities_Sched_StartTimeHourMin
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_GetHourEffort
    Andromeda_Core_Entities_Gantt_HourlyEffortByActor --> Andromeda_Core_Entities_Sched_StartTimeHour
    LocationsController_Locations --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_Locations --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_Locations --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ActorGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ActorGanttByUnits
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ClusterGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_HourlyEffortByActor
    LocationsController_Locations --> Andromeda_Core_Entities_Gantt_ProductGantt
    LocationsController_Locations --> Andromeda_Core_Entities_Sched_StartTimeHour
Detailed Analysis

Key Flows - Summary: No key flows are defined for the Locations method.

Error Flows - Summary: The method allows exceptions from TeamLocation to propagate without handling. - No explicit exception handling in method, Exceptions from TeamLocation propagate

Test Case Ideas - Summary: Verify Locations method returns correct result from TeamLocation call. - Locations method output correctness, TeamLocation method integration

Dependencies & Called Services - Summary: The Locations method depends on the Locations service. - Dependency on Locations service

TeamLocation

Summary: Initialize project data and prepare view with FX rates, office, and cart data before returning TeamLocation view.

ActionResult LocationsController.TeamLocation(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/TeamLocation

Cross-layer call chain - LocationsController.TeamLocation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.TeamLocation → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_TeamLocation["LocationsController.TeamLocation"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TeamLocation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TeamLocation --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: TeamLocation (Andromeda.Web\Views\Locations\TeamLocation.cshtml)
  • Model: IList<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - and cart data before returning TeamLocation view. - Set ViewData with FX rates - Return TeamLocation view with prepared data

Performance Issues - Summary: Optimize database queries and collection processing to improve performance. - Multiple database queries in one method, Inefficient List.RemoveAll filtering on large lists, Loops degrading performance with large collections

Maintainability Issues - Summary: Simplify method by separating concerns and fixing naming errors. - Dense, complex code in single block, Typo in method name 'ToStrin' instead of 'ToString', Multiple unrelated tasks combined in one method

UX Impact Notes - Summary: Displays TeamLocation view with dynamic data and conditional screen handling. - Return TeamLocation view with FX rates

Test Case Ideas - Summary: Validate projectId initialization - ProjectId initialization from registry, Minimum FTE calculation accuracy, Correct TeamLocation view rendering with expected data

Dependencies & Called Services - Summary: Uses collections, interfaces, primitives, and process-related extensions for service operations. - Dictionary, Enumerable, List, String, Int32, IActorModel, IControlModel, IInfraModel, IProcessModel - ProcessExtensions

GetTalentPools

Summary: Deserialize input, retrieve and process project activities, load skill and policy data conditionally, and return aggregated results as JSON.

JsonResult LocationsController.GetTalentPools(int? actorId)

Routing

  • HTTP: POST
  • URL: /Locations/GetTalentPools
Detailed Analysis

Key Flows - and return aggregated results as JSON. - Return aggregated data as JsonResult

Error Flows - Summary: Handle exceptions from invalid form data and integer conversions - and check for missing data. - Exceptions from JSON deserialization on invalid or malformed form data, Exceptions from Convert.ToInt32 on non-integer inputs, Null or empty collections from incomplete or missing form data affecting processing

Security Issues - Summary: Prevent JSON deserialization and SQL injection vulnerabilities in GetTalentPools. - Unvalidated JSON deserialization of form data

Performance Issues - Summary: Optimize JSON deserialization and reduce costly LINQ queries and lookups in loops. - Expensive multiple LINQ queries with joins and unions on large datasets

Maintainability Issues - Summary: Improve code clarity by removing magic strings, simplifying LINQ, and using descriptive names. - Use of magic strings in form data deserialization, Complex LINQ queries with multiple joins and unions, Non-descriptive variable names, Incomplete or dead code fragments

UX Impact Notes - Summary: Data retrieval affects talent pool display accuracy and completeness. - Data retrieval influences user-facing talent pool features, Incorrect data processing causes inaccurate or missing talent pool information

Test Case Ideas - Summary: Verify method correctness, data handling, filtering, and performance under varied inputs. - Handle empty and varied-size selected actions collections - Load product and policy skill levels from HRModel with different team and project IDs - Return valid JsonResult for valid form data - Assess performance with large datasets to detect bottlenecks - Validate LINQ queries for joining and filtering activities and related entities

Dependencies & Called Services - Summary: Uses data conversion and collection types with multiple model interfaces. - Data conversion utilities, Dictionary and List collections, Enumerable interface, Model interfaces: IActorModel, IControlModel, IHRModel, IProcessModel, String handling

GetTrainingNeeds

Summary: Deserialize request data, retrieve actors and activities, calculate skill levels, aggregate trainings, and return sorted results.

JsonResult LocationsController.GetTrainingNeeds()

Routing

  • HTTP: POST
  • URL: /Locations/GetTrainingNeeds
Detailed Analysis

Key Flows - and return sorted results. - Calculate product and policy skill levels using LINQ on ProcessMapModel, ActorModel, ControlModel - Encode and decode JSON to populate team catchments - Conditionally retrieve catchment and control trainings based on actor and location codes - and trainee lists into TeamCatchments - Sort training lists case-insensitively before returning JsonResult

Error Flows - Summary: Handle null checks - Early return on incomplete selActs condition - Null checks on activity objects

Security Issues - Summary: Fix deserialization, injection, data exposure, and incomplete condition security flaws. - JSON deserialization vulnerability from direct request form data parsing, JSON injection risk from encoding and decoding user-controlled form values, SQL injection risk if projectId or actor.ActorId lack proper sanitization, Data exposure risk from sensitive data in activity properties or arrow details, Incomplete conditional statements causing unexpected behavior and security gaps

Performance Issues - Summary: Optimize JSON operations, database calls, and LINQ queries to improve performance. - ToList() on large datasets increasing memory use

Maintainability Issues - Summary: The method suffers from unclear code, tight coupling, and poor naming reducing maintainability. - Use of magic strings in Request.Form keys, Incomplete and unclear code snippets, Multiple variable declarations reducing clarity, Use of System.Web.Helpers.Json limiting portability, Tight coupling between models and controllers, Complex and nested LINQ queries reducing readability, Non-descriptive variable names like 'a' and 'f', Typos causing potential bugs such as 'actor.Acto'

UX Impact Notes - Summary: Handle early returns and performance issues to maintain responsive user experience. - Early return handling to prevent UX disruption - Performance optimization for large dataset processing

Test Case Ideas - Summary: Validate data handling - conditional logic - Calculate skill levels accurately for products and policies - Verify GetActorsWithLocation returns correct actor by project and team IDs - Confirm getActivities returns expected activities - Ensure case-insensitive sorting returns a list - Populate TeamCatchment object with expected data - Ensure catchment training list is distinct and accurate - Ensure method returns control without errors - Handle missing or empty form data - Handle incomplete or malformed code snippets - Validate mCatchments key-value pairs and missing keys

Dependencies & Called Services - Summary: Uses data structures and interfaces for model conversion and enumeration. - Data structure conversions, Dictionary usage, Enumerable collections, List collections, String operations, IActorModel interface, IControlModel interface, IHRModel interface, IProcessModel interface

GetTrainingPlans

Summary: Deserialize form data, process and group training information, then return assembled training plans as JSON.

JsonResult LocationsController.GetTrainingPlans()

Routing

  • HTTP: POST
  • URL: /Locations/GetTrainingPlans
Detailed Analysis

Key Flows - then return assembled training plans as JSON. - Initialize dictionaries for team catchments and trainings - Populate TeamCatchmentTrainings with catchments - Return JsonResult with assembled training plan data - Load currency data by team location code

Error Flows - Summary: Handle null references and empty collections to prevent runtime exceptions. - Null reference exceptions from unchecked collection or dictionary access

Security Issues - Summary: Deserialize and encode JSON without input sanitization risks injection attacks. - JSON deserialization vulnerabilities from unsanitized input, JSON injection risks from encoding and decoding form values without sanitization

Performance Issues - Summary: Optimize JSON handling and collection operations to improve performance with large datasets. - Performance impact from TakeWhile and ToList on large datasets

Maintainability Issues - Summary: Improve code clarity by using descriptive names, avoiding magic strings, and adding comments. - Add comments for complex conditional logic and data transformations

Test Case Ideas - Summary: Validate JSON output - Handle empty and populated teamCatchments and teamTrainings collections - Handle incomplete or malformed input gracefully - Return valid JsonResult for valid input - Encode and decode various form values including large datasets - Group training data by training name and populate TeamCatchmentTrainings

Dependencies & Called Services - Summary: Uses collections and interfaces for data handling and model abstraction. - Dictionary collection, Enumerable utilities, List collection, String operations, IActorModel interface, IHRModel interface, IInfraModel interface

PathTracking

Summary: PathTracking handles an HTTP GET request, retrieves path tracking data, and renders the view.

ActionResult LocationsController.PathTracking()

Routing

  • HTTP: GET
  • URL: /Locations/PathTracking

Cross-layer call chain - LocationsController.PathTracking → Andromeda.Core.DataManager.GetDataList

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
    LocationsController_PathTracking["LocationsController.PathTracking"]
    LocationsController_PathTracking --> Andromeda_Core_DataManager_GetDataList
View Metadata
  • View: PathTracking (Andromeda.Web\Views\Locations\PathTracking.cshtml)
Detailed Analysis

Key Flows - Summary: PathTracking handles an HTTP GET request - Receive HTTP GET request, Call ActorModel.PathTracking() to get path tracking data, Pass data to View method for rendering

UX Impact Notes - Summary: The method returns a View that directly affects the user interface rendering. - Return View affects UI rendering

Test Case Ideas - Summary: Verify PathTracking handles GET requests - Handle HTTP GET request - Render view correctly, Call ActorModel.PathTracking method

Dependencies & Called Services - Summary: PathTracking depends on the IActorModel interface. - Dependency on IActorModel interface

TeamCompetency

Summary: Retrieve project data, filter and process actors and product factors, clean invalid arrows, accumulate efforts, and prepare data for the view.

ActionResult LocationsController.TeamCompetency()

Routing

  • HTTP: GET
  • URL: /Locations/TeamCompetency

Cross-layer call chain - LocationsController.TeamCompetency → Andromeda.Core.Entities.ProjectData.GetActors - LocationsController.TeamCompetency → Andromeda.Core.Entities.ProjectData.GetSkillMatrix - LocationsController.TeamCompetency → Insorce.Helpers.Helpers.getSkillLevel - LocationsController.TeamCompetency → Andromeda.Web.Views.DataFormatFile.getSkillLevel - LocationsController.TeamCompetency → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.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"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_TeamCompetency["LocationsController.TeamCompetency"]
    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
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetActors
    LocationsController_TeamCompetency --> Andromeda_Core_Entities_ProjectData_GetSkillMatrix
    LocationsController_TeamCompetency --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_TeamCompetency --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_TeamCompetency --> Andromeda_Web_Views_DataFormatFile_getSkillLevel
    LocationsController_TeamCompetency --> Insorce_Helpers_Helpers_getSkillLevel
View Metadata
  • View: TeamCompetency (Andromeda.Web\Views\Locations\TeamCompetency.cshtml)
  • Model: IList<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - Summary: Retrieve project data, filter and process actors and product factors, clean invalid arrows, accumulate efforts, and prepare data for the view. - set KPI/KRI flags - Assign actor effort and filtered cart data to ViewData

Error Flows - Summary: The method lacks explicit error handling for null or empty values. - Missing error handling for null Registry.CurrentProjectI, No handling for empty or invalid data retrieval results

Performance Issues - Summary: Optimize string comparison and reduce expensive ToString() calls in loops. - Inefficient use of StringComparison.CurrentCultureIgnoreCase in filtering, Performance cost from repeated ToString() calls inside loops

Maintainability Issues - Summary: Improve method naming and avoid anonymous types to enhance code clarity. - Unclear method name for complex data processing, Anonymous types in LINQ reduce code clarity

Test Case Ideas - and ViewData updates in TeamCompetency method. - Retrieve valid project ID from Registry.CurrentProjectI, Filter actors excluding supervisors with KPI/KRI flags false, Sort actors by name, Retrieve and apply foreign exchange rates and product factors, Remove arrows lacking valid predecessors or successors, Populate ViewData with correct actorMinFTE and CartData entries - Update actor effort collection with team minimum FTE values

Dependencies & Called Services - Summary: Uses core collections, interfaces, and process-related types for team competency. - Dictionary, Enumerable, List, Int32, String, IActorModel, IControlModel, IProcessModel - ProcessExtensions

ImplementationTree

Summary: Retrieve project activities and redirect to creation if none exist; otherwise, display implementation snapshots.

ActionResult LocationsController.ImplementationTree()

Routing

  • HTTP: GET
  • URL: /Locations/ImplementationTree
View Metadata
  • View: ImplementationTree (Andromeda.Web\Views\Locations\ImplementationTree.cshtml)
  • Model: IList<Andromeda.Core.Entities.ImplementationSnapshots>
Detailed Analysis

Key Flows - Summary: Retrieve project activities and redirect to creation if none exist; otherwise - Check activities count - Redirect to ProcessCreation if no activities - Retrieve current project ID and activities, Display implementation snapshots from ActorModel

Maintainability Issues - Summary: Tight coupling reduces modularity and incomplete condition risks faulty logic. - Incomplete conditional statement in activities count check

UX Impact Notes - redirecting appropriately - Redirect to ProcessCreation when activities are missing or conditional - Set ViewData with path tracking for navigation context - Return view with implementation snapshots for detailed project data

Test Case Ideas - redirection - Redirect to ProcessCreation if activities collection is empty - Return view with implementation snapshots if activities exist - Call RedirectToAction with correct action and controller

Dependencies & Called Services - Summary: Uses IActorModel and IRiskModel services for implementation. - IActorModel service dependency, IRiskModel service dependency

DecisionTree

Summary: The method assigns treeId from parameters, parses query strings, and redirects based on treeId and conditions.

ActionResult LocationsController.DecisionTree(int? tree)

Routing

  • HTTP: GET
  • URL: /Locations/DecisionTree

Cross-layer call chain - LocationsController.DecisionTree → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.DecisionTree → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.DecisionTree → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - 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"]
    LocationsController_DecisionTree["LocationsController.DecisionTree"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_DecisionTree --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_DecisionTree --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_DecisionTree --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: DecisionTree (Andromeda.Web\Views\Locations\DecisionTree.cshtml)
  • Model: IList<Andromeda.Core.Entities.PathTracking>
Detailed Analysis

Key Flows - Summary: The method assigns treeId from parameters - and redirects based on treeId and conditions. - Assign treeId from 'tree' parameter or default to zero - Redirect to CustomerExperienceTree if treeId > 199 and value < 300 - Redirect to ControlCoverageTree if treeId > 299 and conditions on eeId are met - Redirect to CostTree with treeId if no other conditions match

Error Flows - Summary: Handle null references and declare variables to prevent runtime errors. - Null reference exception from unchecked Request.QueryString["tree"]

Security Issues - Summary: Sanitize 'tree' query parameter to prevent SQL injection and XSS vulnerabilities. - Unsanitized 'tree' query parameter, SQL injection risk, Cross-site scripting (XSS) risk

Performance Issues - Summary: Parsing large 'tree' query parameters as strings then integers degrades performance. - Inefficient parsing of large 'tree' query parameters, String-to-integer conversion overhead

Maintainability Issues - Summary: Incomplete syntax, undeclared variables, and magic numbers reduce code maintainability. - Incomplete method calls and return statements

UX Impact Notes - Summary: Redirects users to different pages based on treeId - Change user page context via different tree actions - Redirect users based on treeId value

Test Case Ideas - Summary: Validate tree parameter handling - redirects - Redirect to CustomerExperienceTree for treeId < 300 - Redirect to ControlCoverageTree for eeId < 400 - Redirect to CostTree with correct treeId - Valid 'tree' parameter value, Non-integer 'tree' parameter value, treeId zero with and without 'tree' parameter, Valid integer 'tree' parameter, Very large 'tree' parameter, treeId boundary tests around 199, 299, Malformed or incomplete query string parameters

Dependencies & Called Services - Summary: DecisionTree method uses Int32 type for data handling. - Int32 type usage

RedirectToTree

Summary: RedirectToTree sets treeId and returns 'DecisionTree' view, handling empty tree data by re-fetching benefits.

ActionResult LocationsController.RedirectToTree(int treeId)

Routing

  • HTTP: GET
  • URL: /Locations/RedirectToTree
Detailed Analysis

Key Flows - Summary: RedirectToTree sets treeId and returns 'DecisionTree' view - Set treeId in ViewData and return 'DecisionTree' view when tree data contains elements - set treeId - and return 'DecisionTree' view when tree data is empty

UX Impact Notes - Summary: Redirects user to DecisionTree view - Redirect to DecisionTree view - Redirect after ProjectOutcome call if tree data is empty - Update user experience with decision tree benefits

Test Case Ideas - Summary: Verify RedirectToTree handles treeId - Redirect triggers when treeData is empty - No redirect when treeData contains elements - Proper setting of treeId in ViewData - Return of DecisionTree view

Dependencies & Called Services - Summary: RedirectToTree uses data enumeration - Enumerable for data iteration, IActorModel for actor representation, Locations for managing location data

CostTree

Summary: Redirects to tree view using provided id or defaults to id 100 if none given.

ActionResult LocationsController.CostTree(int? id, string layout)

Routing

  • HTTP: GET
  • URL: /Locations/CostTree
Detailed Analysis

Key Flows - Summary: Redirects to tree view using provided id or defaults to id 100 if none given. - Default id to 100 and redirect to tree view with layout if id missing - Redirect to tree view with provided id and layout

UX Impact Notes - Summary: Redirecting to tree view changes user navigation based on id parameter or default. - Navigation change based on id parameter or default - Redirect to tree view

Test Case Ideas - Summary: Verify CostTree handles GET requests and redirects correctly with or without id. - Handle HTTP GET requests - Redirect to tree view without id

Dependencies & Called Services - Summary: Uses Locations service for dependency management. - Locations service dependency

CustomerExperienceTree

Summary: Redirects to the tree view for a valid customer experience ID.

ActionResult LocationsController.CustomerExperienceTree(int? id, string layout)

Routing

  • HTTP: GET
  • URL: /Locations/CustomerExperienceTree
Detailed Analysis

Key Flows - Summary: Redirects to the tree view for a valid customer experience ID. - Redirect to tree view by valid ID

UX Impact Notes - Summary: Redirect disrupts user flow by navigating to a different page. - Navigation to different page - Redirect disrupts user flow

Test Case Ideas - Summary: Verify HTTP GET response and valid ID redirection to tree view. - Valid ID redirection to tree view

Dependencies & Called Services - Summary: Uses Locations service for customer experience tree functionality. - Locations service dependency

ControlCoverageTree

Summary: Redirects to tree view using provided id or defaults to id 300 if none given.

ActionResult LocationsController.ControlCoverageTree(int? id, string layout)

Routing

  • HTTP: GET
  • URL: /Locations/ControlCoverageTree
Detailed Analysis

Key Flows - Summary: Redirects to tree view using provided id or defaults to id 300 if none given. - Default redirect to tree view with id 300 if no id provided - Redirect to tree view with valid id

UX Impact Notes - Summary: Redirecting to tree view disrupts user navigation flow. - Disrupt user navigation flow - Redirect to tree view

Test Case Ideas - Summary: Verify HTTP GET handling and redirection with valid and default id parameters. - Handle HTTP GET request - Redirect using valid id parameter - Redirect using default id value when id is missing

Dependencies & Called Services - Summary: ControlCoverageTree depends on Locations service. - Locations service dependency

SaveTeamLocationAndWorkHours

Summary: Process team location and work hours data, update project impact and review status, and save configuration details.

JsonResult LocationsController.SaveTeamLocationAndWorkHours()

Routing

  • HTTP: POST
  • URL: /Locations/SaveTeamLocationAndWorkHours

Cross-layer call chain - LocationsController.SaveTeamLocationAndWorkHours → Andromeda.Core.LoggingManager.Error

Call Chain Diagram

flowchart TD
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    LocationsController_SaveTeamLocationAndWorkHours["LocationsController.SaveTeamLocationAndWorkHours"]
    LocationsController_SaveTeamLocationAndWorkHours --> Andromeda_Core_LoggingManager_Error
Detailed Analysis

Key Flows - update project impact and review status - create Actor objects - Set project impact and complete impact status - Update reviewed status if module and subModule present

Error Flows - Summary: Handle input conversion and downstream method errors to prevent unhandled exceptions. - Lack of error handling for UpdateActor - SetImpactStatus - SetCompleteImpactStatus

Security Issues - Summary: Validate and sanitize inputs to prevent SQL injection and data tampering. - Direct conversion of user input to integers without checks

Performance Issues - Summary: Parsing strings to numbers in a loop degrades performance with large or invalid data. - Inefficient Int32.TryParse usage in loops, Performance hit from parsing large or invalid input

Maintainability Issues - Summary: Remove magic strings and numbers, clarify undefined methods, and eliminate commented-out code. - Hardcoded dates and magic numbers require future updates

UX Impact Notes - Summary: Invalid input parsing exceptions degrade user experience. - Exceptions from invalid input parsing, Negative user experience impact

Test Case Ideas - Summary: Verify method calls and handle edge cases for work hours and module parameters. - Correct call to ActorModel.UpdateActor with team list - Correct calls to MyImpactModel.SetImpactStatus and SetCompleteImpactStatus

Dependencies & Called Services - Summary: Uses data conversion, logging, and multiple model interfaces for processing. - DateTime conversion, IActorModel interface, IImpactModel interface, IProcessModel interface, Int32 data type, List collection, String data type - LoggingManager for logging

SaveTeamMinimumFTE

Summary: No key flows defined for SaveTeamMinimumFTE method.

JsonResult LocationsController.SaveTeamMinimumFTE()

Routing

  • HTTP: POST
  • URL: /Locations/SaveTeamMinimumFTE

Cross-layer call chain - LocationsController.SaveTeamMinimumFTE → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.SaveTeamMinimumFTE → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.SaveTeamMinimumFTE → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Extensions.LinqExtensions.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter

Call Chain Diagram

flowchart TD
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_SaveTeamMinimumFTE["LocationsController.SaveTeamMinimumFTE"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_SaveTeamMinimumFTE --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: No key flows defined for SaveTeamMinimumFTE method.

Error Flows - Summary: The method lacks explicit handling for invalid JSON data in requests. - Missing explicit exception handling for invalid JSON in request form

Security Issues - Summary: Prevent JSON deserialization attacks by validating input before decoding. - Unvalidated JSON deserialization using System.Web.Helpers.Json.Decode

Performance Issues - Summary: Optimize SaveTeamMinimumFTE to reduce memory use and database query overhead. - High memory use from large actorWrapper collections, Repeated Actor object creation inside loops, Multiple database queries causing latency, Inefficient list removals with RemoveAll, Sum() method on large activity collections impacting performance

Maintainability Issues - Summary: Improve variable naming and remove magic numbers and strings to enhance maintainability. - Non-descriptive variable names reduce readability, Use of magic numbers decreases code clarity, Tight coupling to models hinders maintainability, Magic strings in method calls complicate code

UX Impact Notes - Summary: Returns total effort in JSON to update UI and display optimization results. - Return total effort in JSON - Update UI with effort data

Test Case Ideas - and handles config values. - Handle valid JSON data in request form - Process non-empty configVal correctly - Convert and handle different actorWrapper.Count values - Invoke SetImpactStatus and SetCompleteImpactStatus with correct parameters

Dependencies & Called Services - Summary: Uses data conversion, collection manipulation, and domain-specific models for processing. - Data conversion utilities, Enumerable and List collections, LINQ extensions, Domain models: IActorModel, IControlModel, IImpactModel, IProcessModel, Domain-specific extensions: LinqExtensions, ProcessExtensions, Locations data

OperationSitesNewLocation

Summary: Retrieve office details using actor information and current project ID.

ActionResult LocationsController.OperationSitesNewLocation(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/OperationSitesNewLocation
Detailed Analysis

Key Flows - Summary: Retrieve office details using actor information and current project ID. - Retrieve office details from InfraModel.GetOfficeDetails, Use ActorModel and Registry.CurrentProjectId as parameters

Error Flows - Summary: No error flows defined for OperationSitesNewLocation.

Maintainability Issues - Summary: Undefined variable 'scr' causes compilation errors and reduces maintainability. - Undefined variable 'scr'

UX Impact Notes - Summary: Undefined ViewData['screen'] causes inconsistent user views. - Undefined ViewData['screen'] value, User view depends on View method implementation

Test Case Ideas - Summary: Verify officeList population and View method returns correct ActionResult. - Return expected ActionResult from View method

Dependencies & Called Services - Summary: Uses IInfraModel service for infrastructure-related operations. - IInfraModel service dependency

ChangeTeam

Summary: ChangeTeam updates the project XML by cloning and assigning a new team shape to an activity, then returns success status.

JsonResult LocationsController.ChangeTeam()

Routing

  • URL: /Locations/ChangeTeam

Cross-layer call chain - LocationsController.ChangeTeam → Andromeda.Core.DataManager.Execute - LocationsController.ChangeTeam → Andromeda.Validation.SwimlaneInfo.Clone - 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_Validation_SwimlaneInfo_Clone["Andromeda.Validation.SwimlaneInfo.Clone"]
    LocationsController_ChangeTeam["LocationsController.ChangeTeam"]
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
    LocationsController_ChangeTeam --> Andromeda_Core_DataManager_Execute
    LocationsController_ChangeTeam --> Andromeda_Validation_SwimlaneInfo_Clone
Detailed Analysis

Key Flows - Summary: ChangeTeam updates the project XML by cloning and assigning a new team shape to an activity - then returns success status. - Create implementation plan for team change - Load project XML and retrieve actors and activities - Clone existing team shape and update properties - Assign new team to activity shape and reposition it - Return JsonResult with operation success - Update project XML with modified shapes and edges

Error Flows - Summary: Handle invalid inputs and null references to prevent exceptions in ChangeTeam. - Null reference exceptions from unchecked lane or related objects

Security Issues - Summary: Validate and sanitize user input to prevent injection attacks. - Risk of SQL or XML injection from unvalidated input

Performance Issues - Summary: ChangeTeam method suffers from inefficient large collection handling and redundant queries. - Reading entire project XML for actors and activities, LINQ queries on large collections causing slow performance, Excessive memory allocation from ToList() on large collections, Redundant actors.Any and actors.First calls with identical conditions

Maintainability Issues - Summary: The code suffers from poor readability and modularity due to magic strings, unclear variables, and incomplete snippets. - Use of magic strings for property names reduces readability and maintainability, Tightly coupled dependencies decrease modularity, Unclear and non-descriptive variable names, Use of magic numbers without named constants, Incomplete or truncated code snippets hinder understanding, Declared but unused or uninitialized variables cause confusion and errors

UX Impact Notes - Summary: Updating a plan's subtask reflects team changes in the user interface. - UI reflects team changes in plan subtasks

Test Case Ideas - Summary: Validate ChangeTeam method's data retrieval - Create and update new team shapes based on existing data - Return valid JsonResult for valid input - Assign ID from team.ActorId correctly - Filter teamShapes list and handle empty results - Update team assignment and activity shape properties - Update project XML data with modified shapes

Dependencies & Called Services - Summary: Uses data conversion and collection types with actor, process, and swimlane models. - Data conversion utilities, Enumerable collections, Actor model interface, List collection, String type, Swimlane information model - Process model interface

GetPossiblePathofActivities

Summary: Retrieve and filter project activities and arrows, then return the most frequent path as JSON.

JsonResult LocationsController.GetPossiblePathofActivities(int? RiskAct, int? CompAct, int? ProjectID)

Routing

  • HTTP: GET
  • URL: /Locations/GetPossiblePathofActivities

Cross-layer call chain - LocationsController.GetPossiblePathofActivities → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GetPossiblePathofActivities → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.GetPossiblePathofActivities → Andromeda.Core.Services.Algorithms.Delooper.PossiblePath - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - 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_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Exception["Andromeda.Core.LoggingManager.Exception"]
    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_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_GetPossiblePathofActivities["LocationsController.GetPossiblePathofActivities"]
    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
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetPossiblePathofActivities --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - then return the most frequent path as JSON. - Return the selected path as JsonResult

Error Flows - Summary: Lack of exception handling and incomplete code cause runtime errors and unexpected behavior. - Potential runtime errors from missing null checks and data validations

Security Issues - Summary: No security issues identified in the method.

Performance Issues - causing slow performance on large datasets. - Inefficient FindByID calls inside loops, Repeated PossiblePath method calls in loops, Unoptimized iteration over large activity groups and activities, High memory usage and slow iteration on large activity lists

Maintainability Issues - Summary: Tight coupling, unclear code, and poor documentation reduce maintainability and increase errors. - Tight coupling with multiple models complicates testing and maintenance, Unclear and inconsistent variable names reduce code clarity, Incomplete and malformed code snippets cause confusion and errors, Lack of comments and documentation lowers maintainability, Use of non-standard debugging methods without documentation hinders maintainability

UX Impact Notes - Summary: Incomplete branches cause unpredictable user experience and incomplete responses. - Incomplete code and missing return statements

Test Case Ideas - Summary: Verify correct path construction, data handling, and output consistency across scenarios. - and return of paths collection - Consistent JsonResult return in all branches

Dependencies & Called Services - Summary: Uses collections and domain models for processing activities. - Enumerable for collection operations, IActorModel domain interface, IRiskModel domain interface, List collection type - ProcessExtensions utility methods

GetPathBetRiskControlAct

Summary: Decode and validate risk acts from POST data, then return valid paths as JSON.

JsonResult LocationsController.GetPathBetRiskControlAct()

Routing

  • HTTP: POST
  • URL: /Locations/GetPathBetRiskControlAct

Cross-layer call chain - LocationsController.GetPathBetRiskControlAct → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GetPathBetRiskControlAct → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.GetPathBetRiskControlAct → Andromeda.Core.Services.Algorithms.Delooper.PossiblePath - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - 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_LoggingManager_Error["Andromeda.Core.LoggingManager.Error"]
    Andromeda_Core_LoggingManager_Exception["Andromeda.Core.LoggingManager.Exception"]
    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_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_GetPathBetRiskControlAct["LocationsController.GetPathBetRiskControlAct"]
    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
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_Algorithms_Delooper_PossiblePath
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetPathBetRiskControlAct --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: Decode and validate risk acts from POST data - then return valid paths as JSON. - Decode and validate risk acts from HTTP POST form data - Return valid paths as JSON response

Error Flows - Summary: Handle null paths and unvalidated form data causing empty responses or errors. - Unvalidated Request.Form data causes errors or unexpected behavior

Security Issues - Summary: Unvalidated Request.Form data risks SQL injection and data tampering. - Unvalidated Request.Form data

Performance Issues - Summary: Repeated FindByID calls and large ToList conversions degrade performance. - Repeated FindByID calls inside RemoveAll, Converting large paths to lists with ToList(), Inefficient looping over collections

Maintainability Issues - Summary: Use descriptive variable names to improve code readability and maintainability. - Non-descriptive variable names like 'rAct', 'CompAct', and 'ist', Incomplete code snippet hindering understanding and maintenance

UX Impact Notes - Summary: Unvalidated input may cause errors and disrupt user experience. - Unvalidated input risks

Test Case Ideas - Summary: Test method filters risk acts and returns valid JSON with Arrow objects. - Validate Request.Form data with risk acts list - Verify filtering of arrows and activities by predecessor and successor, Confirm JSON response contains Arrow objects list

Dependencies & Called Services - Summary: Utilizes data conversion, collection processing, and actor model services. - Data conversion utilities, Dictionary operations, Enumerable collection processing, Actor model interface, List data structure - Process extension methods

MoveControlActivity

Summary: MoveControlActivity updates project XML and implementation plan to reflect control activity repositioning.

JsonResult LocationsController.MoveControlActivity(int? RiskAct, int? befAct, int? compAct)

Routing

  • HTTP: POST
  • URL: /Locations/MoveControlActivity

Cross-layer call chain - LocationsController.MoveControlActivity → Andromeda.Core.Services.ProcessExtensions.FindByID

Call Chain Diagram

flowchart TD
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_MoveControlActivity["LocationsController.MoveControlActivity"]
    LocationsController_MoveControlActivity --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: MoveControlActivity updates project XML and implementation plan to reflect control activity repositioning. - Create implementation plan entry for move operation - Fetch project activities and arrow details - Retrieve project ID and XML shapes, Save modified shapes and edges to project XML - Update subtask description in implementation plan - Update ConsumerShapeId

Error Flows - Summary: Handle invalid inputs and prevent exceptions in MoveControlActivity method. - Missing validation for null or invalid activity IDs, Convert.ToInt32 usage lacks error handling for invalid input, Potential syntax errors from incomplete code snippets

Security Issues - Summary: The method lacks explicit security validations and contains incomplete code fragments risking vulnerabilities. - Absence of explicit security checks and validations

Performance Issues - Summary: Excessive database queries and unoptimized collection operations degrade performance. - Multiple database queries with ToList() on large datasets

Maintainability Issues - Summary: Excessive method calls, syntax errors, unclear magic strings, and inconsistent variable declarations reduce maintainability. - Excessive method calls and variable assignments reduce readability

UX Impact Notes - Summary: Update implementation plan with activity names to inform users about the move operation. - Implementation plan update with activity names

Test Case Ideas - Summary: Verify correct updates and method calls when moving control activities with varied data sets. - Handle empty and multiple-item collections like befIncomingEdge and compOutgoingEdges - incoming and outgoing edges with empty and large datasets - Call UpdateArrowPreSucAndDecisionInput correctly for each relevant arrow - Update implementation plan accurately after moving control activity

Dependencies & Called Services - Summary: Utilizes data conversion, actor and process models, and process extension utilities. - Data conversion utilities, Actor model interface, List collection - Process model interface, Process extension methods

DeadlinesValidation

Summary: Decode activities from JSON, update deadlines by matching IDs, validate relations, and return errors as JSON.

JsonResult LocationsController.DeadlinesValidation()

Routing

  • HTTP: POST
  • URL: /Locations/DeadlinesValidation

Cross-layer call chain - LocationsController.DeadlinesValidation → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.DeadlinesValidation → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_DeadlinesValidation["LocationsController.DeadlinesValidation"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_DeadlinesValidation --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_DeadlinesValidation --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - update deadlines by matching IDs - validate relations - and return errors as JSON. - Reset activities' DLType to 'No' - Match JSON objects to activities by ID and update deadline properties - Return validation errors as JSON response

Error Flows - Summary: Handle conversion errors and JSON decoding failures explicitly. - Empty or null collections not checked

Security Issues - Summary: No security issues found in DeadlinesValidation method.

Performance Issues - Summary: Multiple database calls and inefficient loops degrade performance. - Multiple database or repository calls causing bottlenecks, Iterating large collections impacting performance, FirstOrDefault inside loops causing inefficient queries, Unknown performance impact from delooperObj.deloop(1) call

Maintainability Issues - Summary: DeadlinesValidation tightly couples models, uses unclear names, magic values, and lacks error handling. - Tight coupling with ActorModel and ProcessMapModel reduces modularity, Non-descriptive variable names reduce readability, Magic numbers and strings lack named constants, Missing error handling for critical operations like type conversions

UX Impact Notes - Summary: Ensure proper client handling of JSON results and manage type conversion exceptions to maintain UX. - Proper client handling of JSON validation results, Manage type conversion exceptions to prevent UX issues

Test Case Ideas - Summary: Validate JSON decoding - deadline updates - Reset DLType property to 'No' for all activities - Handle matching and non-matching IDs between activities and JSON - Update activities' deadline properties from JSON objects - Validate ActorModel deadlines with various inputs

Dependencies & Called Services - Summary: Uses collections and model interfaces for processing and conversion. - Enumerable for collection operations, IActorModel interface for actor data, IProcessModel interface for process data, List collection for data storage, Convert for data type conversions - ProcessExtensions for process-related utilities

OptimizeWithAsIsCount

Summary: Retrieve project data and configuration, optimize actors with parameters, and return optimization results.

JsonResult LocationsController.OptimizeWithAsIsCount()

Routing

  • HTTP: GET
  • URL: /Locations/OptimizeWithAsIsCount
Detailed Analysis

Key Flows - and return optimization results. - Fetch actors with locations for project - Return optimization result as JsonResult

Performance Issues - Summary: Looping over large actors collection causes performance degradation. - Looping over large actors collection, Performance degradation risk

Maintainability Issues - Summary: Improve naming clarity and replace magic strings with constants for maintainability. - Unclear method name OptimizeWithAsIsCount, Non-descriptive variable name Actors, Use constant instead of magic string OptimizationType, Incomplete code snippets reduce understandability

Test Case Ideas - handle no-location cases - Correct actor retrieval by project ID with location, Handling no actors with location, Optimization success with configuration value

Dependencies & Called Services - Summary: Uses IActorModel and IProcessModel services for optimization. - IActorModel service usage, IProcessModel service usage

UpdateAsIsFromWidget

Summary: The method decodes the 'Actors' JSON, updates each actor's Maven request count, and returns a confirmation JSON.

JsonResult LocationsController.UpdateAsIsFromWidget()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateAsIsFromWidget
Detailed Analysis

Key Flows - updates each actor's Maven request count - and returns a confirmation JSON. - Return JSON confirmation response - Update Maven request count per actor using ActorModel

Error Flows - Summary: Handle JSON deserialization and integer conversion errors during update. - Invalid JSON in 'Actors' field causes deserialization errors, Failed integer conversion of ActorId or AsIsCount triggers exceptions

Security Issues - Summary: Prevent JSON deserialization vulnerabilities by sanitizing and validating 'Actors' field. - JSON deserialization vulnerability, 'Actors' field lacks proper sanitization and validation

Performance Issues - Summary: Repeated Convert.ToInt32 calls in loop cause performance degradation without error handling. - Repeated Convert.ToInt32 calls in loop, Lack of error handling during conversions

Maintainability Issues - Summary: Improve naming clarity and eliminate magic numbers without error handling. - Non-descriptive method and variable names, Use of magic numbers and implicit conversions without error handling

UX Impact Notes - Summary: The JSON response from UpdateAsIsFromWidget affects user flow. - JSON response impacts user flow

Test Case Ideas - Summary: Verify method processes valid JSON in 'Actors' and returns valid JSON response. - Handle valid JSON in 'Actors' field - Return valid JSON response

Dependencies & Called Services - Summary: Uses Convert and IActorModel services for data transformation and actor management. - Convert service, IActorModel interface

ImplementMRtoBase

Summary: Retrieve project data, update implementation status, insert snapshots, and create implementation plan using ActorModel.

JsonResult LocationsController.ImplementMRtoBase()

Routing

  • HTTP: POST
  • URL: /Locations/ImplementMRtoBase

Cross-layer call chain - LocationsController.ImplementMRtoBase → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_ImplementMRtoBase["LocationsController.ImplementMRtoBase"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_ImplementMRtoBase --> Andromeda_Core_Services_Algorithms_Delooper_deloop
Detailed Analysis

Key Flows - update implementation status - and create implementation plan using ActorModel. - Create project implementation plan - Retrieve project activities and arrow details, Insert base and MR count snapshots into implementation tree - Update project implementation status

Error Flows - Summary: Handle data conversion failures and sanitize input to prevent security risks. - Data conversion failures from invalid formats, Unsanitized input causing data tampering or SQL injection

Security Issues - Summary: Prevent SQL injection and data tampering by validating and sanitizing input data. - Data tampering risk from unvalidated Data object

Performance Issues - Summary: Multiple database calls degrade performance. - Multiple database calls for data retrieval and update

Maintainability Issues - Summary: Remove magic numbers and simplify code regions to improve maintainability. - Use named constants instead of magic numbers, Avoid multiple code regions to simplify code structure

UX Impact Notes - Summary: Incorrect implementation plan creation harms user experience. - No direct user experience impact, Incorrect implementation plan harms user experience

Test Case Ideas - status update - Implementation status update

Dependencies & Called Services - Summary: Convert IEnumerable of IActorModel to IProcessModel. - Convert IEnumerable, IActorModel usage, IProcessModel usage

SaveContinueTeamAddTalent

Summary: No key flows are defined for the SaveContinueTeamAddTalent method.

JsonResult LocationsController.SaveContinueTeamAddTalent()

Routing

  • HTTP: POST
  • URL: /Locations/SaveContinueTeamAddTalent
Detailed Analysis

Key Flows - Summary: No key flows are defined for the SaveContinueTeamAddTalent method.

Error Flows - Summary: Handle JSON deserialization errors to prevent method failure. - JSON deserialization failure, Invalid JSON input handling

Security Issues - Summary: Direct JSON decoding from request form data risks deserialization attacks. - Direct JSON deserialization from request form data, Risk of deserialization vulnerability

Performance Issues - Summary: Uri.UnescapeDataString causes performance issues with large input strings. - Use of Uri.UnescapeDataString with large input strings

Maintainability Issues - Summary: Refactor magic strings and complex conditions to improve code clarity and maintainability. - Use of magic strings reduces code clarity and maintainability, Complex if condition should be simplified for readability, Incomplete code snippet hinders full context understanding

UX Impact Notes - Summary: Validation failures block user progress and JSON responses affect user flow. - Validation failures block user progress, JSON responses deliver error messages and validation results impacting flow

Test Case Ideas - Summary: Validate input handling - condition checks - Valid JSON input with valid actor IDs, Actor IDs including zero and negative values, Negative salary and experience validation, JSON response contains expected data

Dependencies & Called Services - Summary: Convert IHRModel to String and Uri for service calls. - Convert IHRModel, Convert to String, Convert to Uri

TeamShiftRecommendation

Summary: The method processes team shift recommendations if no optimization runs and valid actors exist; otherwise, it returns error messages.

JsonResult LocationsController.TeamShiftRecommendation()

Routing

  • HTTP: POST
  • URL: /Locations/TeamShiftRecommendation
Detailed Analysis

Key Flows - it returns error messages. - Check no optimization is running for the project - Initialize ProjectId and validate TeamId - Return JSON message if optimization is running - Return JSON false if no matching recommendation actor found - Process existing recommendations and insert new one

Error Flows - Summary: Handle large collections - Performance degradation from large AsyncProcessManager.ProcDetails collection using Any(), Exceptions from invalid or non-integer TeamId conversion, Null reference exceptions from uninitialized variables or null configuration values, Compilation or runtime errors from incomplete or incorrect code snippets

Security Issues - Summary: Validate and sanitize Request.Form['TeamId'] to prevent SQL injection and data tampering. - Lack of validation on Request.Form['TeamId'], Risk of SQL injection, Risk of data tampering

Performance Issues - Summary: Optimize data queries and collection operations to improve performance with large datasets. - Use of Any() on large AsyncProcessManager.ProcDetails collection impacts performance, Repeated data retrievals when updating work times degrade performance, Optimization slows with large number of actors

Maintainability Issues - and repeated logic reduce maintainability. - Inconsistent variable naming violating C# conventions, Use of magic numbers and strings instead of constants, Incomplete and syntactically incorrect code snippets, Undefined and unclear variable usage, Repeated code for updating work times lacking refactoring

UX Impact Notes - Summary: Notify users about optimization status and handle missing recommendations gracefully. - Return JSON false if no recommendation actor for TeamId - Potential UX issues if false response is unhandled

Test Case Ideas - calculation logic - Calculate maximum level and increment recommendations - Return JsonResult validation - Update work times and previous count from last non-forward recommendation

Dependencies & Called Services - Summary: Uses data conversion, date-time handling, collection processing, and actor/process models. - Data conversion utilities, DateTime handling, Enumerable collection processing, Actor model interface - Process model interface

ClearTeamShiftRecommendation

Summary: ClearTeamShiftRecommendation handles an HTTP POST to delete team shift recommendations for the current project and returns the result as JSON.

JsonResult LocationsController.ClearTeamShiftRecommendation()

Routing

  • HTTP: POST
  • URL: /Locations/ClearTeamShiftRecommendation
Detailed Analysis

Key Flows - Summary: ClearTeamShiftRecommendation handles an HTTP POST to delete team shift recommendations for the current project and returns the result as JSON. - Return JsonResult indicating deletion outcome

Security Issues - Summary: Accessing Registry.CurrentProjectId without validation risks security vulnerabilities. - Direct access to Registry.CurrentProjectId without validation or sanitization

Maintainability Issues - Summary: Fix incomplete return statement to prevent compilation errors. - Incomplete return statement causing compilation errors

UX Impact Notes - Summary: JsonResult affects user flow by displaying success or failure messages. - JsonResult displays success or failure messages, User flow depends on JsonResult feedback

Test Case Ideas - Summary: Verify HTTP POST access and correct project ID usage in DeleteTeamRecommendation. - Restrict method access to HTTP POST requests, Call DeleteTeamRecommendation with correct project ID

Dependencies & Called Services - Summary: ClearTeamShiftRecommendation depends on IActorModel for actor-related operations. - IActorModel dependency for actor operations

ImplementRecommendation

Summary: Initialize project and check optimization status, process form data, update team metrics, manage recommendations, and perform actor optimization.

JsonResult LocationsController.ImplementRecommendation()

Routing

  • HTTP: POST
  • URL: /Locations/ImplementRecommendation

Cross-layer call chain - LocationsController.ImplementRecommendation → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.ImplementRecommendation → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
    LocationsController_ImplementRecommendation["LocationsController.ImplementRecommendation"]
    LocationsController_ImplementRecommendation --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_ImplementRecommendation --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
Detailed Analysis

Key Flows - Summary: Initialize project and check optimization status - update team metrics - Create implementation plan with task and subtask details - Delete existing team recommendations - Initialize ProjectId and check ongoing optimization - Decode JSON actor data and update team counts for discrepancies - Update team working hours and counts

Error Flows - Summary: Handle null references and invalid data to prevent exceptions during processing. - Null reference exceptions from AsyncProcessManager or ProcDetails checks - Null reference exceptions from null treeData or elements during snapshot updates

Security Issues - Summary: Prevent SQL injection and XSS by avoiding string concatenation in assignments. - SQL injection risk from string concatenation, XSS vulnerability from string concatenation

Performance Issues - Summary: Optimize collection queries and parsing to improve performance in ImplementRecommendation. - Inefficient use of Any() on large collections, Repeated Convert.ToInt32 and Convert.ToDecimal calls on form data, Uncached repeated calls to ActorModel.Optimize, FirstOrDefault calls inside loops over decoded actors

Maintainability Issues - Summary: The method suffers from unclear code, tight coupling, and poor error handling, reducing maintainability. - Incomplete and syntactically incorrect code fragments, Use of magic strings and numbers reducing code clarity, String concatenation for HTML content causing maintainability and security risks, Tight coupling with ActorModel and ProcessMapModel classes, Unclear variable naming reducing readability, Lack of error handling for JSON decoding

UX Impact Notes - Summary: Provide clear JSON feedback and ensure accurate form data to maintain user experience. - JSON response indicates optimization status for immediate user feedback, Invalid or missing form data causes errors and degrades user experience, HTML in task descriptions affects user understanding and display, System performance changes indirectly impact user experience - Updated subtasks reflecting team changes influence user perception

Test Case Ideas - Summary: Validate JSON responses - conditional logic - team updates - Return JsonResult validation - ActorId matching logic - Team working hours and count updates - Subtask updates on team count changes - ionTreeId assignment from CostPath enumeration - Testing UpdateTeamCount

Dependencies & Called Services - Summary: Uses data types and interfaces for actor models, processes, collections, and date-time handling. - Actor model interfaces, DateTime handling, Enumerable collections, String manipulation, Integer operations, Location data - Process model interfaces

GetTeamRecommendation

Summary: Retrieve project data, enrich team recommendations with actor locations and project time zone, then return as JSON.

JsonResult LocationsController.GetTeamRecommendation()

Routing

  • HTTP: GET
  • URL: /Locations/GetTeamRecommendation

Cross-layer call chain - LocationsController.GetTeamRecommendation → Andromeda.Core.DataManager.GetDataList - LocationsController.GetTeamRecommendation → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - LocationsController.GetTeamRecommendation → Andromeda.Core.Entities.TeamShiftRecommendation.SetLocation - LocationsController.GetTeamRecommendation → Andromeda.Core.Entities.Actor.GetLocation - LocationsController.GetTeamRecommendation → Andromeda.Core.Extensions.LinqExtensions.DaysConverter - LocationsController.GetTeamRecommendation → Andromeda.Core.Entities.TeamShiftRecommendation.WorkStartTimeInProjectZone - LocationsController.GetTeamRecommendation → Andromeda.Core.Entities.TeamShiftRecommendation.WorkEndTimeInProjectZone - Andromeda.Core.Models.ModelHelper.ProjectTimeZone → Andromeda.Core.Models.ModelHelper.ProjectTimeZone - Andromeda.Core.Entities.Actor.GetLocation → Andromeda.Core.DataManager.GetData - Andromeda.Core.Extensions.LinqExtensions.DaysConverter → Andromeda.Core.Extensions.LinqExtensions.DaysConverter

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_TeamShiftRecommendation_SetLocation["Andromeda.Core.Entities.TeamShiftRecommendation.SetLocation"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkEndTimeInProjectZone"]
    Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone["Andromeda.Core.Entities.TeamShiftRecommendation.WorkStartTimeInProjectZone"]
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter["Andromeda.Core.Extensions.LinqExtensions.DaysConverter"]
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone["Andromeda.Core.Models.ModelHelper.ProjectTimeZone"]
    LocationsController_GetTeamRecommendation["LocationsController.GetTeamRecommendation"]
    Andromeda_Core_Entities_Actor_GetLocation --> Andromeda_Core_DataManager_GetData
    Andromeda_Core_Extensions_LinqExtensions_DaysConverter --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    Andromeda_Core_Models_ModelHelper_ProjectTimeZone --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
    LocationsController_GetTeamRecommendation --> Andromeda_Core_DataManager_GetDataList
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_Actor_GetLocation
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_SetLocation
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkEndTimeInProjectZone
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Entities_TeamShiftRecommendation_WorkStartTimeInProjectZone
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Extensions_LinqExtensions_DaysConverter
    LocationsController_GetTeamRecommendation --> Andromeda_Core_Models_ModelHelper_ProjectTimeZone
Detailed Analysis

Key Flows - then return as JSON. - Fetch actors with locations and team recommendations via ActorModel - Set team location from matched actor's location - Return enriched data as JSON response - Update each team recommendation with project time zone

Error Flows - Summary: Handle invalid project IDs - Null check for missing team actor

Performance Issues - Summary: Optimize database calls and LINQ operations to improve GetTeamRecommendation performance. - Multiple uncached database calls reduce performance, FirstOrDefault on large actors collection degrades speed, Excessive ToString() and method calls in LINQ Select slow processing

Maintainability Issues - Summary: Refactor method to separate concerns and clarify variable initialization for maintainability. - Multiple unrelated tasks in one method, Unclear assumptions about variable initialization and scope, Use of anonymous types reduces code clarity

UX Impact Notes - Summary: Optimize JSON response and data retrieval to improve client-side user experience. - JSON response formatting affects client-side UX, Unoptimized data retrieval causes slow response times

Test Case Ideas - location setting - ActorId logic - SetLocation method invocation with correct location for matching actor - Conditional logic handling for different ActorId values - Proper setting of IsCurrent property based on IsCurrentIteration

Dependencies & Called Services - Summary: Uses models and helpers to generate team shift recommendations. - Actor model interface, DateTime utilities, Enumerable collections, LINQ extensions, Model helper functions, Team shift recommendation model

GetTeamHourlyData

Summary: GetTeamHourlyData retrieves and filters actor and activity data for a specific hour.

JsonResult LocationsController.GetTeamHourlyData(int? actorid, int? hour)

Routing

  • HTTP: GET
  • URL: /Locations/GetTeamHourlyData

Cross-layer call chain - LocationsController.GetTeamHourlyData → Andromeda.Core.Entities.Gantt.HourEffortByActor - Andromeda.Core.Entities.Gantt.HourEffortByActor → Andromeda.Core.Entities.ScheduleAnalysis.GetHourEffort - Andromeda.Core.Entities.Gantt.HourEffortByActor → Andromeda.Core.Entities.ScheduleAnalysis.StartTimeHour

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Gantt_HourEffortByActor["Andromeda.Core.Entities.Gantt.HourEffortByActor"]
    Andromeda_Core_Entities_ScheduleAnalysis_GetHourEffort["Andromeda.Core.Entities.ScheduleAnalysis.GetHourEffort"]
    Andromeda_Core_Entities_ScheduleAnalysis_StartTimeHour["Andromeda.Core.Entities.ScheduleAnalysis.StartTimeHour"]
    LocationsController_GetTeamHourlyData["LocationsController.GetTeamHourlyData"]
    Andromeda_Core_Entities_Gantt_HourEffortByActor --> Andromeda_Core_Entities_ScheduleAnalysis_GetHourEffort
    Andromeda_Core_Entities_Gantt_HourEffortByActor --> Andromeda_Core_Entities_ScheduleAnalysis_StartTimeHour
    LocationsController_GetTeamHourlyData --> Andromeda_Core_Entities_Gantt_HourEffortByActor
Detailed Analysis

Key Flows - Summary: GetTeamHourlyData retrieves and filters actor and activity data for a specific hour. - Retrieve actors, activities, and schedule analysis from ActorModel for given hour, Filter out supervisors, inactive, and system actors, Filter effort data by hour and actor ID

Error Flows - Summary: Handle null hour parameter and prevent null reference on actorid filtering. - Check actorid for null before accessing actorid.Value to prevent exceptions - Return error or default for null hour parameter to avoid poor UX

Security Issues - Summary: No security issues identified in GetTeamHourlyData method.

Performance Issues - Summary: Multiple database calls and nested FirstOrDefault usage degrade performance. - Multiple database calls for actors, activities, and schedule analysis data, Nested FirstOrDefault causing multiple database queries

Maintainability Issues - Summary: Hardcoded values and anonymous types reduce code maintainability and clarity. - Use of hardcoded strings and values, Use of anonymous types in data transformation

UX Impact Notes - Summary: Returning JSON data requires proper client-side handling to avoid UX issues. - JSON null return without hour parameter risks poor UX if unhandled

Test Case Ideas - Summary: Verify actor filtering, JSON response structure, and database call performance. - Filter out supervisors, inactive, and system actors, Assess performance impact of multiple database calls - Validate JSON response fields and structure

Dependencies & Called Services - Summary: Uses Enumerable for data iteration, Gantt for scheduling, and IActorModel for actor-based concurrency. - Enumerable for data iteration, Gantt for scheduling, IActorModel for actor concurrency

GetSimulationInfo

Summary: GetSimulationInfo decodes simulation data, processes actors and teams by location and schedule, and computes team performance metrics.

JsonResult LocationsController.GetSimulationInfo(int? id)

Routing

  • HTTP: GET
  • URL: /Locations/GetSimulationInfo

Cross-layer call chain - LocationsController.GetSimulationInfo → Andromeda.Core.Entities.Actor.SetLocation - LocationsController.GetSimulationInfo → Andromeda.Core.Entities.Gantt.TeamCountByHourly - LocationsController.GetSimulationInfo → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - LocationsController.GetSimulationInfo → Andromeda.Core.Entities.Actor.WorkEndTimeInProjectZone - LocationsController.GetSimulationInfo → Insorce.Helpers.Helpers.getSkillLevel - LocationsController.GetSimulationInfo → Andromeda.Core.Entities.Gantt.CycleHourlyEffortByActor - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Sched.StartTimeHourMin - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone - 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_Actor_SetLocation["Andromeda.Core.Entities.Actor.SetLocation"]
    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_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
    Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
    Andromeda_Core_Extensions_LinqExtensions_getSkillScore["Andromeda.Core.Extensions.LinqExtensions.getSkillScore"]
    Insorce_Helpers_Helpers_getSkillLevel["Insorce.Helpers.Helpers.getSkillLevel"]
    LocationsController_GetSimulationInfo["LocationsController.GetSimulationInfo"]
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Constants_GetSkill
    Insorce_Helpers_Helpers_getSkillLevel --> Andromeda_Core_Extensions_LinqExtensions_getSkillScore
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_SetLocation
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_WorkEndTimeInProjectZone
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Gantt_CycleHourlyEffortByActor
    LocationsController_GetSimulationInfo --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
    LocationsController_GetSimulationInfo --> Insorce_Helpers_Helpers_getSkillLevel
Detailed Analysis

Key Flows - Summary: GetSimulationInfo decodes simulation data, processes actors and teams by location and schedule, and computes team performance metrics. - Calculate team hourly counts from schedules, Calculate effort and rework metrics - Group actors by location and assign locations - Process schedule data to compute delays and effort

Error Flows - Summary: Validate input and data presence - handle nulls - and catch JSON deserialization errors. - Null or empty id parameter returns false - No simulation data for id returns false - Null decoded simulation or team data returns false

Security Issues - Summary: Fix deserialization, registry access, and SQL injection vulnerabilities. - JSON deserialization vulnerability from untrusted simulation data, Unauthorized access risk via Registry for project data, SQL injection risk from unsanitized pathIds and scheduleAnalysis data

Performance Issues - Summary: Optimize repeated method calls, large collection operations, and nested loops to improve performance. - Repeated Convert.ToDouble and DateTime.FromOADate calls inside loops, Memory-intensive GroupBy and ToList on large collections, Multiple ToList() calls causing repeated enumerations and high memory use, Resource-heavy Split() and ToCharArray() on large strings, Performance impact from fixed large iteration and nested loops, Repeated WorkStartTimeInProjectZone and WorkEndTimeInProjectZone calls per actor, Unbounded growth of actPeak dictionary in large loops

Maintainability Issues - Summary: Improve naming, replace magic literals with constants, and avoid incomplete code and anonymous types. - Anonymous types in returns complicate code understanding and maintenance

UX Impact Notes - Summary: Return false for missing data and large responses may slow UI. - Return false JSON for null

Test Case Ideas - Summary: Validate input handling - and performance with varied datasets. - Verify actor grouping by location and location assignment - Set TimeZone property accurately with complete and malformed Registry data - Ensure efficient handling of large datasets without performance loss - Handle empty and non-empty attendance collections - Process skill matrix and actor activities for competency charts - Validate id parameter type and correctness

Dependencies & Called Services - Summary: Uses core data structures, math, date-time, and domain-specific models for simulation info retrieval. - Core data structures: Dictionary, List, Enumerable, Primitive types: Int32, String, Date and time handling: DateTime, Mathematical operations: Math, Domain models: Actor, IActorModel, IHRModel, Locations, Utility classes: Convert, Helpers, Visualization support: Gantt

GetOutProcessSimulationInfo

Summary: The method retrieves simulation data by ID, processes out-process properties and actors' efforts, and returns the results as JSON.

JsonResult LocationsController.GetOutProcessSimulationInfo(int? id)

Routing

  • HTTP: GET
  • URL: /Locations/GetOutProcessSimulationInfo
Detailed Analysis

Key Flows - and returns the results as JSON. - Calculate and accumulate daily effort arrays per actor - Return processed data as JSON response - Fetch distinct team IDs and active, non-system, non-supervisory actors - Validate ID and retrieve simulation data

Error Flows - Summary: The method returns JSON false for null or empty id and null simulation data - Return JSON false if id is null or empty - Return JSON false if simulation data by id is null - Null reference exceptions from unchecked null id access

Security Issues - Summary: Prevent SQL injection by sanitizing ProjectId in database queries. - SQL injection risk from unsanitized ProjectId, Sanitize ProjectId before database queries

Performance Issues - Summary: Optimize memory usage and loop efficiency to improve performance in GetOutProcessSimulationInfo. - Excessive ToList() calls on large datasets causing high memory and slow performance

Maintainability Issues - Summary: Code suffers from poor readability, unclear naming, tight coupling, and lack of comments. - Incomplete and malformed code snippets reduce readability, Non-standard and unclear variable names, Tight coupling with multiple models complicates refactoring and testing, Use of anonymous types reduces code clarity and maintainability, Lack of comments and presence of magic numbers decrease code clarity

UX Impact Notes - Summary: Returns JSON responses that affect user feedback and responsiveness. - Return JsonResult affects user experience - Invalid id or missing data returns false JSON response impacting feedback

Test Case Ideas - Summary: Verify data retrieval, decoding, filtering, calculations, and handling of empty collections. - Valid id parameter data retrieval and JSON response, Correct decoding of simulation JSON data, Proper population of OutProcessProps with valid data, Accurate retrieval and use of distinct team IDs, Filtering actors by team ID, active status, system and supervisory flags, Retrieval and filtering of out-process activities, Calling OutProcessActsToDailyEffort for each actor with expected results, Accumulation of daily effort arrays and dictionary population, Calculation of OutProcessActor values for various FTEArray inputs, Removal of outProcessProperties items matching activity IDs, Handling empty collections for actors, activities, and properties

Dependencies & Called Services - Summary: Uses core system libraries and interfaces for data handling and process modeling. - Calendar service, Data conversion utilities, Dictionary data structure, Enumerable collections, Actor model interface, List data structure, Mathematical functions - Process model interface

FilteredActivityIds

Summary: Decode valid JSON list from request, validate it, store in session, and return JSON response.

JsonResult LocationsController.FilteredActivityIds()

Routing

  • HTTP: POST
  • URL: /Locations/FilteredActivityIds
Detailed Analysis

Key Flows - validate it - and return JSON response. - Set session variable 'FilteredActivities' - Return JSON response - Validate non-empty integer list

Error Flows - Summary: Handle JSON deserialization errors and validate session key format. - JSON deserialization failure without exception handling, Malformed or incomplete session key causing unexpected behavior

Security Issues - Summary: Prevent JSON deserialization vulnerabilities by validating and sanitizing input. - JSON deserialization vulnerability, Lack of input validation and sanitization

Maintainability Issues - Summary: The method has unclear naming, incomplete code, unused variables, and inconsistent session key usage. - Incomplete conditional and return statements causing potential errors

UX Impact Notes - Summary: User experiences changes in filtered activity IDs after session variable updates. - Session variable updates affecting filtering

Test Case Ideas - Summary: Validate JSON input handling - Session variable 'FilteredActivities' set for non-empty lists - Method returns valid JSON response - Method returns control properly to caller

GetFilteredPath

Summary: The method processes filter IDs, groups and filters activities, calculates path efforts, retrieves related data, and constructs detailed response objects.

JsonResult LocationsController.GetFilteredPath()

Routing

  • HTTP: POST
  • URL: /Locations/GetFilteredPath

Cross-layer call chain - LocationsController.GetFilteredPath → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.GetFilteredPath → Andromeda.Core.Services.Algorithms.Delooper.deloop - LocationsController.GetFilteredPath → Andromeda.Core.Services.Algorithms.Delooper.PopulateUnitMapping - LocationsController.GetFilteredPath → Andromeda.Core.Entities.Activity.Clone - LocationsController.GetFilteredPath → Andromeda.Core.Services.Algorithms.Delooper.GetLoopingArrows - LocationsController.GetFilteredPath → Andromeda.Core.Entities.Gantt.ActivityDelay - LocationsController.GetFilteredPath → Andromeda.Core.Entities.Activity.GetNVAType - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.LoggingManager.Error - Andromeda.Core.Services.Algorithms.Delooper.deloop → Andromeda.Core.Services.ProcessExtensions.FindByID - Andromeda.Core.Entities.Gantt.ActivityDelay → Andromeda.Core.Services.TimeRange.ContainsValue

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    Andromeda_Core_Entities_Activity_GetNVAType["Andromeda.Core.Entities.Activity.GetNVAType"]
    Andromeda_Core_Entities_Gantt_ActivityDelay["Andromeda.Core.Entities.Gantt.ActivityDelay"]
    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_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"]
    Andromeda_Core_Services_TimeRange_ContainsValue["Andromeda.Core.Services.TimeRange.ContainsValue"]
    LocationsController_GetFilteredPath["LocationsController.GetFilteredPath"]
    Andromeda_Core_Entities_Gantt_ActivityDelay --> Andromeda_Core_Services_TimeRange_ContainsValue
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Activity_Clone
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Activity_GetNVAType
    LocationsController_GetFilteredPath --> Andromeda_Core_Entities_Gantt_ActivityDelay
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_PopulateUnitMapping
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_GetFilteredPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
Detailed Analysis

Key Flows - Summary: The method processes filter IDs, groups and filters activities, calculates path efforts, retrieves related data, and constructs detailed response objects. - Calculate automation paths and retrieve peak tasks, delays, and controls - Create MapPath objects with calculated efforts and retrieve paths - Process inner paths to extract IDs, clone activities, and calculate efforts - Filter path activities to find start activities and update volumes

Error Flows - and validate form inputs to avoid runtime errors. - Null reference exceptions from unchecked LINQ First() calls - Unvalidated Request.Form input risking malformed data handling

Security Issues - Summary: Retrieve IDs from Request.Form without validation risks injection and tampering. - Use of Request.Form without input validation, Exposure to injection attacks, Risk of request tampering

Performance Issues - Summary: Optimize database queries and LINQ operations to reduce high memory use and slow execution. - Multiple database queries impacting performance on large data sets

Maintainability Issues - Summary: The method suffers from high complexity, poor naming, and unclear code reducing maintainability. - Unclear and incomplete variable declarations and assignments

UX Impact Notes - Summary: The method's JSON output directly affects user perception of performance and status. - JsonResult formatting affects user experience, Delay and effort data influence user perception of activity status

Test Case Ideas - and handles edge cases correctly. - Calculate path volumes and efforts correctly - Performance and correctness with large datasets - Handle missing predecessor or successor activities - Handle conditional branches for skill levels and automation categories - Handle missing or unexpected child path indices - Handle empty or full removal lists - Handle empty or duplicate allInnerPaths collections - Handle empty or non-empty ctrMaster collections

Dependencies & Called Services - Summary: Uses collections, numeric types, interfaces, and utility classes for data processing. - Activity class, Decimal and Double numeric types, Dictionary and List collections, Enumerable utilities, Gantt chart class, Interfaces: IActorModel, ICollection, IControlModel, IFinalPlanModel, IProcessModel, IRiskModel, Int32 numeric type, Math utilities, String type, TimeSpan type - ProcessExtensions methods

OutProcessFrequencyChange

Summary: Process out-process activities and actors to calculate daily efforts and generate Gantt chart rows for rendering.

ActionResult LocationsController.OutProcessFrequencyChange(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/OutProcessFrequencyChange

Cross-layer call chain - LocationsController.OutProcessFrequencyChange → Andromeda.Core.Entities.OutProcessProps.getDay - 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_Entities_OutProcessProps_getDay["Andromeda.Core.Entities.OutProcessProps.getDay"]
    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"]
    LocationsController_OutProcessFrequencyChange["LocationsController.OutProcessFrequencyChange"]
    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
    LocationsController_OutProcessFrequencyChange --> Andromeda_Core_Entities_OutProcessProps_getDay
View Metadata
  • View: OutProcessFrequencyChange (Andromeda.Web\Views\Locations\OutProcessFrequencyChange.cshtml)
Detailed Analysis

Key Flows - Summary: Process out-process activities and actors to calculate daily efforts and generate Gantt chart rows for rendering. - Calculate daily effort per actor using OutProcessActsToDailyEffort - Match effort entries to periodic activities and create GanttRow with name and description

Error Flows - Summary: Lack of error handling risks failures with invalid project ID or empty collections. - No checks for empty or null collections

Performance Issues - Summary: Optimize data retrieval and object creation to improve performance with large datasets. - Multiple database queries causing slow data retrieval, Inefficient Contains calls on periodicActivityIds collection, Repeated calls to OutProcessActsToDailyEffort for many actors, Frequent creation of GanttBar objects inside loops

Maintainability Issues - Summary: High coupling and unclear naming reduce code clarity and maintainability. - High coupling with multiple models complicates maintenance, Use of magic numbers reduces code clarity, Anonymous types in LINQ hinder code understanding, Typo and non-descriptive variable names reduce readability, Unclear method names and incomplete code reduce understandability

UX Impact Notes - Summary: Update ViewData and GanttBar descriptions affect UI display and user flow. - Set ViewData for screen and activities

Test Case Ideas - property assignments - Create GanttRow objects for matching activities - Create GanttBar objects only for effort > 0 - Assign team names correctly or empty string - Assign Day - Set ViewData correctly for input scenarios - Iterate actEffort and assign matching periodic activities - Assign DaywiseOPEffort from effort values - Set GanttBar label - Ensure method handles large datasets efficiently - Complete method without errors and return expected ActionResult

Dependencies & Called Services - Summary: Uses collections, math utilities, and process-related models for frequency change processing. - Double type for numeric operations, Enumerable for collection manipulation, IActorModel interface for actor representation, ICollection for collection abstraction, IProcessModel interface for process representation, List for ordered collections, Math utilities for calculations, OutProcessProps for process properties, String for text handling

SaveOutprocessFrequency

Summary: Decode JSON, retrieve project ID, save outprocess frequency data, and return success response.

JsonResult LocationsController.SaveOutprocessFrequency()

Routing

  • HTTP: POST
  • URL: /Locations/SaveOutprocessFrequency
Detailed Analysis

Key Flows - and return success response. - Create OutProcessProps objects - Return Json(true) to indicate success

Error Flows - Summary: Handle incomplete conditions and unprotected integer conversions to prevent runtime errors. - Incomplete condition checks causing runtime errors

Security Issues - Summary: Direct JSON deserialization from request form risks injection attacks. - Direct JSON deserialization without validation, Potential injection vulnerability

Performance Issues - Summary: Repeated conversions and unoptimized iteration over large collections degrade performance. - Repeated Convert.ToInt32 calls on non-integer properties, Unoptimized iteration over large 'js' collection without batching

Maintainability Issues - Summary: Incomplete code, unused class instantiation, and unclear naming reduce maintainability. - Incomplete if condition and ProjectId retrieval, Unused ImplemenationPlan class instantiation, Non-standard naming conventions and unclear variable names

UX Impact Notes - Summary: Returns JSON true to confirm success and enable UI updates. - Client UI update trigger

Test Case Ideas - Summary: Verify data handling, method calls, and correct JSON response in SaveOutprocessFrequency. - Check syntax and condition 'jsonData != n' - Handle empty 'js' collection gracefully - Return Json(true) on successful operation

Dependencies & Called Services - Summary: Convert IProcessModel instances for saving outprocess frequency. - Convert IProcessModel

SaveReworKAHTPercentage

Summary: The method processes POST form data, converts values to integers, and saves them via SaveReworkReducePercentage.

JsonResult LocationsController.SaveReworKAHTPercentage()

Routing

  • HTTP: POST
  • URL: /Locations/SaveReworKAHTPercentage
Detailed Analysis

Key Flows - Summary: The method processes POST form data, converts values to integers, and saves them via SaveReworkReducePercentage. - Receive POST request with 'DecisionId' and 'AHTReducePer', Convert form values to integers, Call SaveReworkReducePercentage to save data

Error Flows - Summary: Handle invalid or non-integer 'DecisionId' and 'AHTReducePer' inputs to prevent exceptions. - Lack of validation for 'DecisionId' and 'AHTReducePer', Convert.ToInt32 throws exceptions on invalid inputs, Missing error handling for input conversion failures

Security Issues - Summary: Validate and sanitize user input before integer conversion to prevent injection attacks. - Lack of input validation before integer conversion, Risk of data tampering and injection attacks

Performance Issues - Summary: No performance issues identified in SaveReworKAHTPercentage method.

Maintainability Issues - Summary: Replace magic strings with constants to improve maintainability and reduce errors. - Use constants instead of magic strings, Avoid hardcoded string literals like 'DecisionId', 'AHTReducePer', 'LoopActivityIds'

UX Impact Notes - Summary: Returning JSON requires client to handle errors and invalid input for good UX. - JSON response handling, Client error management, Invalid input processing

Test Case Ideas - Summary: Verify SaveReworKAHTPercentage accepts only POST and correctly saves valid data. - Return expected JSON response on success

Dependencies & Called Services - Summary: Convert IControlModel for processing in SaveReworKAHTPercentage. - Convert IControlModel

IncreaseTeamSize

Summary: IncreaseTeamSize receives a string parameter via HTTP GET, calls CycleTime with it, and returns the result.

ActionResult LocationsController.IncreaseTeamSize(string ms)

Routing

  • HTTP: GET
  • URL: /Locations/IncreaseTeamSize
Detailed Analysis

Key Flows - Summary: IncreaseTeamSize receives a string parameter via HTTP GET - and returns the result. - Return CycleTime result

Test Case Ideas - Summary: Verify IncreaseTeamSize handles GET requests - and returns expected results. - Return expected CycleTime result - Handle HTTP GET request

Dependencies & Called Services - Summary: IncreaseTeamSize depends on the Locations service. - Locations service dependency

SetDeadlines

Summary: SetDeadlines receives a string parameter via HTTP GET, calls CycleTime with it, and returns the ActionResult.

ActionResult LocationsController.SetDeadlines(string ms)

Routing

  • HTTP: GET
  • URL: /Locations/SetDeadlines
Detailed Analysis

Key Flows - Summary: SetDeadlines receives a string parameter via HTTP GET - and returns the ActionResult. - Return resulting ActionResult

Test Case Ideas - Summary: Verify SetDeadlines handles GET requests - and returns expected ActionResult. - Return expected ActionResult - Handle HTTP GET request correctly

Dependencies & Called Services - Summary: SetDeadlines method depends on Locations service. - Locations service dependency

Delays

Summary: Process GET request with string parameter ms, forward to CycleTime, and return ActionResult.

ActionResult LocationsController.Delays(string ms)

Routing

  • HTTP: GET
  • URL: /Locations/Delays
Detailed Analysis

Key Flows - and return ActionResult. - Return ActionResult to caller

UX Impact Notes - Summary: No direct user experience impact; method delegates processing. - No visible user experience impact, Delegates processing to another method

Test Case Ideas - Summary: Verify Delays action handles GET requests and correctly calls CycleTime with valid ms values. - Forward valid ms parameters to CycleTime, Call CycleTime with correct ms parameter - Handle HTTP GET requests in Delays action

Dependencies & Called Services - Summary: Delays method depends on Locations service. - Locations service dependency

SerialBatch

Summary: Receive ms parameter via HTTP GET, process it with CycleTime, and return the ActionResult.

ActionResult LocationsController.SerialBatch(string ms)

Routing

  • HTTP: GET
  • URL: /Locations/SerialBatch
Detailed Analysis

Key Flows - and return the ActionResult. - Return ActionResult to client

UX Impact Notes - Summary: Returning CycleTime(ms) directly affects user experience based on its behavior and output. - Direct return of CycleTime(ms) to user

Test Case Ideas - Summary: Test SerialBatch for correct HTTP GET handling and valid ms input producing expected ActionResult. - Handle HTTP GET requests correctly - Process valid ms parameter inputs - Return ActionResult matching CycleTime output

Dependencies & Called Services - Summary: SerialBatch method depends on the Locations service. - Locations service dependency

SaveCartData

Summary: Retrieve project ID and form data, decode cart JSON, process and save each cart item, then return JSON result.

JsonResult LocationsController.SaveCartData()

Routing

  • HTTP: POST
  • URL: /Locations/SaveCartData

Cross-layer call chain - LocationsController.SaveCartData → 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"]
    LocationsController_SaveCartData["LocationsController.SaveCartData"]
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_Database_helper_SqlParameters
    Andromeda_Core_DataManager_Execute --> Andromeda_Core_LoggingManager_Debug
    LocationsController_SaveCartData --> Andromeda_Core_DataManager_Execute
Detailed Analysis

Key Flows - then return JSON result. - Check decoded cart data validity - Return JSON result to client

Error Flows - Summary: Incomplete conditional checks and return statements cause failures and runtime errors. - Incomplete conditional check on CartData causing failures - Incomplete return statement causing compilation or runtime errors

Security Issues - Summary: SaveCartData risks injection and security flaws from unvalidated input and deprecated JSON decoding. - Unvalidated Request.Form data exposes injection vulnerabilities

Performance Issues - Summary: Iterating large cart data collections degrades performance and consumes excessive resources. - Performance degradation iterating large cart data collections, High resource consumption processing large cart data

Maintainability Issues - incomplete logic - Incomplete conditional statement checking CartData - Incomplete return statement causing compilation errors

Test Case Ideas - handles empty and large inputs - Handle valid form data and save cart items - Handle empty cart data collection - Process large cart data collections efficiently and correctly - Retrieve current project ID from request context, Call ProcessMapModel.SaveCartData for each cart item, Populate jsonData from each cart item's Json property

Dependencies & Called Services - Summary: SaveCartData depends on IProcessModel service. - IProcessModel service dependency

GetCartData

Summary: Create and update an implementation plan, then return selected plan properties.

JsonResult LocationsController.GetCartData(string ms)

Routing

  • HTTP: GET
  • URL: /Locations/GetCartData

Cross-layer call chain - LocationsController.GetCartData → Andromeda.Core.DataManager.GetDataList - LocationsController.GetCartData → Insorce.Helpers.Helpers.GetImpPath

Call Chain Diagram

flowchart TD
    Andromeda_Core_DataManager_GetDataList["Andromeda.Core.DataManager.GetDataList"]
    Insorce_Helpers_Helpers_GetImpPath["Insorce.Helpers.Helpers.GetImpPath"]
    LocationsController_GetCartData["LocationsController.GetCartData"]
    LocationsController_GetCartData --> Andromeda_Core_DataManager_GetDataList
    LocationsController_GetCartData --> Insorce_Helpers_Helpers_GetImpPath
Detailed Analysis

Key Flows - Summary: Create and update an implementation plan - then return selected plan properties. - Create implementation plan object - Return anonymous object with plan properties - Update plan via Helpers.GetImpPath

Security Issues - Summary: The 'ms' parameter lacks validation, risking injection attacks. - Missing validation and sanitization of 'ms' parameter, Injection attack vulnerability via 'ms' parameter

Performance Issues - Summary: GetCartData and LINQ operations degrade performance on large datasets. - GetCartData method performance impact on large datasets - LINQ operations performance impact on large datasets

Maintainability Issues - Summary: Missing method definition and unclear variable usage reduce code maintainability. - Typo or incomplete property 'd' in return statement - Incomplete and unclear assignment 'ata = s'

UX Impact Notes - Summary: Undefined and incomplete JSON response structure degrades user experience. - Undefined JSON response structure, Incomplete code affects JSON response consistency and completeness

Test Case Ideas - Summary: Verify GetCartData returns correct JSON - handles large data - and updates plan correctly. - Check returned object contains expected plan properties - Assess GetCartData performance with large datasets - Verify Helpers.GetImpPath updates plan object correctly - Ensure method returns a list despite incomplete code - Validate GetCartData JSON structure and content

Dependencies & Called Services - Summary: Uses Enumerable for data operations, Helpers for utility functions, and IProcessModel for process management. - Enumerable for data manipulation, Helpers for utility functions, IProcessModel for process control

GetallInsights

Summary: GetallInsights handles HTTP GET requests and excludes correction comments.

JsonResult LocationsController.GetallInsights()

Routing

  • HTTP: GET
  • URL: /Locations/GetallInsights
Detailed Analysis

Key Flows - Summary: GetallInsights handles HTTP GET requests and excludes correction comments. - Invoke via HTTP GET, Exclude correction comments

Security Issues - Summary: Prevent SQL injection by sanitizing Registry.CurrentProjectId and Registry.LoggedInUser.Id. - SQL injection risk from unsanitized Registry.LoggedInUser.Id

Performance Issues - Summary: No performance issues identified in GetallInsights method.

Maintainability Issues - Summary: Avoid magic strings for date formatting to improve maintainability. - Use of magic strings for date formatting

UX Impact Notes - Summary: Returns JSON that impacts user flows if client expects specific format. - JSON response format, User flow dependency on response structure

Test Case Ideas - Summary: Verify GetallInsights handles HTTP GET - returns correct project comments - Return correct comments text by project

Dependencies & Called Services - Summary: Uses data conversion, date-time handling, collection processing, and project modeling services. - Data conversion service, DateTime handling, Enumerable collection processing, Project model interface

TeamsShiftsSchedule

Summary: Generate schedule data using actors and project info, store results for view rendering, and return HTTP response.

ActionResult LocationsController.TeamsShiftsSchedule()

Routing

  • URL: /Locations/TeamsShiftsSchedule

Cross-layer call chain - LocationsController.TeamsShiftsSchedule → Andromeda.Core.Entities.Gantt.TeamCountByHourly - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Sched.StartTimeHourMin - Andromeda.Core.Entities.Gantt.TeamCountByHourly → Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone["Andromeda.Core.Entities.Actor.WorkStartTimeInProjectZone"]
    Andromeda_Core_Entities_Gantt_TeamCountByHourly["Andromeda.Core.Entities.Gantt.TeamCountByHourly"]
    Andromeda_Core_Entities_Sched_StartTimeHourMin["Andromeda.Core.Entities.Sched.StartTimeHourMin"]
    LocationsController_TeamsShiftsSchedule["LocationsController.TeamsShiftsSchedule"]
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Actor_WorkStartTimeInProjectZone
    Andromeda_Core_Entities_Gantt_TeamCountByHourly --> Andromeda_Core_Entities_Sched_StartTimeHourMin
    LocationsController_TeamsShiftsSchedule --> Andromeda_Core_Entities_Gantt_TeamCountByHourly
View Metadata
  • View: TeamsShiftsSchedule (Andromeda.Web\Views\Locations\TeamsShiftsSchedule.cshtml)
Detailed Analysis

Key Flows - and return HTTP response. - Return ActionResult to complete HTTP request - Create Gantt object with ActorModel

Performance Issues - Summary: Avoid ToList() to prevent loading excessive data into memory. - Use of ToList() loads large data into memory, Potential performance degradation from excessive data loading

Maintainability Issues - Summary: The method uses hardcoded strings and contains incomplete implementation. - Use of hardcoded ViewData keys reduces clarity and maintainability, Presence of empty or placeholder code indicates incomplete implementation

UX Impact Notes - Summary: Prepares scheduling data for UI display without explicit rendering or navigation. - Prepare actors data for UI, Provide scheduling data to view

Test Case Ideas - Summary: Verify TeamsShiftsSchedule returns valid results with correct actors and schedule data. - Return valid ActionResult - Render expected view or redirect correctly

Dependencies & Called Services - Summary: Uses Enumerable for collections, Gantt for scheduling, and IActorModel for actor-based operations. - Enumerable for collection handling, Gantt for scheduling visualization, IActorModel for actor-based concurrency

GetControlRatings

Summary: Retrieve project data, calculate control ratings and activity suggestions, then generate JSON response with control ratings.

JsonResult LocationsController.GetControlRatings()

Routing

  • HTTP: GET
  • URL: /Locations/GetControlRatings

Cross-layer call chain - LocationsController.GetControlRatings → Andromeda.Core.Entities.Activity.Clone

Call Chain Diagram

flowchart TD
    Andromeda_Core_Entities_Activity_Clone["Andromeda.Core.Entities.Activity.Clone"]
    LocationsController_GetControlRatings["LocationsController.GetControlRatings"]
    LocationsController_GetControlRatings --> Andromeda_Core_Entities_Activity_Clone
Detailed Analysis

Key Flows - Summary: Retrieve project data, calculate control ratings and activity suggestions, then generate JSON response with control ratings. - Calculate control ratings via EfficacyOfControlsByORA - Retrieve data from ActorModel, ControlModel, RiskModel, ProcessMapModel, Initialize PeakActivitySuggestions list, Iterate filtered base activities to compute efficacy and risk values, Add rounded efficacy and risk values to PeakActivitySuggestions, Generate JSON response with location control ratings using conditional 'Yes' or 'No'

Performance Issues - Summary: Multiple database calls and inefficient LINQ usage degrade performance on large datasets. - ToList() causes large memory allocations with big datasets - Multiple LINQ methods in loops degrade performance on large datasets

Maintainability Issues - Summary: Refactor method to reduce complexity and improve clarity by removing magic values and splitting code. - Excessive dependencies on multiple models and methods, Use of magic strings reduces code clarity, Long, complex LINQ queries hinder readability, Magic numbers used instead of named constants, Method size requires refactoring into smaller units

Test Case Ideas - Summary: Verify accurate calculation and correct data population in control ratings and JSON response. - Accurate calculation of control ratings from data, Proper initialization and population of PeakActivitySuggestions list, Correct computation of control efficacy and risk bearing activity values, Validation of JSON response for expected 'Yes' or 'No' values

Dependencies & Called Services - Summary: Uses models and collections to process control ratings with numeric operations. - Activity tracking, Enumerable collections, Actor, Control, Process, Risk models, Integer operations, List collections, Mathematical functions

OptimizeByCycleTime

Summary: Handle HTTP GET request by calling Overcapacity with 'CycleTime' and returning the result.

ActionResult LocationsController.OptimizeByCycleTime()

Routing

  • HTTP: GET
  • URL: /Locations/OptimizeByCycleTime
Detailed Analysis

Key Flows - Summary: Handle HTTP GET request by calling Overcapacity with 'CycleTime' and returning the result. - Return ActionResult to client

UX Impact Notes - Summary: Returning Overcapacity result as ActionResult affects user flow. - Overcapacity method returns ActionResult - User flow impacted by ActionResult return

Test Case Ideas - Summary: Verify OptimizeByCycleTime handles GET requests - and returns its result. - Return Overcapacity result as ActionResult - Handle HTTP GET request in OptimizeByCycleTime

Dependencies & Called Services - Summary: OptimizeByCycleTime depends on Locations service. - Locations service dependency

Overcapacity

Summary: Fetch project and actor data, filter invalid arrows, calculate team FTEs, and return filtered overcapacity view.

ActionResult LocationsController.Overcapacity(string screen)

Routing

  • HTTP: GET
  • URL: /Locations/Overcapacity

Cross-layer call chain - LocationsController.Overcapacity → Andromeda.Core.Services.ProcessExtensions.FindByID - LocationsController.Overcapacity → 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_deloop["Andromeda.Core.Services.Algorithms.Delooper.deloop"]
    Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
    LocationsController_Overcapacity["LocationsController.Overcapacity"]
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
    Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
    LocationsController_Overcapacity --> Andromeda_Core_Services_Algorithms_Delooper_deloop
    LocationsController_Overcapacity --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
  • View: Overcapacity (Andromeda.Web\Views\Locations\Overcapacity.cshtml)
  • Model: List<Andromeda.Core.Entities.Actor>
Detailed Analysis

Key Flows - and return filtered overcapacity view. - Calculate team minimum FTEs and filter actors by activity and role - Return view with filtered overcapacity team data and settings

Error Flows - Summary: Handle invalid input and null collections to prevent exceptions. - Lack of explicit invalid or missing input handling, Risk of NullReferenceExceptions from null allActors collection, Potential issues with non-unique or missing ActorId properties

Performance Issues - Summary: Repeated lookups and multiple iterations degrade performance and increase memory usage. - Repeated FindByID calls inside loops, Multiple LINQ Any and First iterations over allActors, Excessive ToList() calls on large collections

Maintainability Issues - Summary: Magic strings for configuration keys reduce maintainability and complicate future changes. - Use of magic strings for configuration keys, Potential difficulty in updating configuration keys

UX Impact Notes - Summary: Setting 'screen' view data controls UI presentation between 'Cost' or custom views. - UI presentation controlled by 'screen' view data, Supports 'Cost' or custom screen values

Test Case Ideas - and returns correct view data. - Return view with expected data and parameters - Return correct data for given project

Dependencies & Called Services - Summary: Uses collections and interfaces for actor and process modeling. - Enumerable collection, IActorModel interface, IProcessModel interface, List collection, String type - ProcessExtensions utilities

RemoveOverCapacity

Summary: RemoveOverCapacity decodes data, updates team capacities, appends subtasks, finalizes plans, and creates implementation plans.

JsonResult LocationsController.RemoveOverCapacity()

Routing

  • HTTP: POST
  • URL: /Locations/RemoveOverCapacity
Detailed Analysis

Key Flows - updates team capacities - and creates implementation plans. - Append subtasks for capacity updates - Call ActorModel.CreateImplementationPlans with updated plans - Update team counts if capacity > 0

Error Flows - Summary: Handle exceptions from invalid data type conversions in RemoveOverCapacity. - Exceptions from Convert.ToDouble on invalid input, Exceptions from Convert.ToInt32 on invalid input

Security Issues - Summary: Fix JSON deserialization and SQL injection vulnerabilities in RemoveOverCapacity method. - SQL injection risk from unsanitized t.ActorId or t.NewCout in ActorModel.UpdateTeamCount

Performance Issues - Summary: Passing large ImpPlans collections to CreateImplementationPlans degrades performance. - Large ImpPlans collection passed to ActorModel.CreateImplementationPlans

Maintainability Issues - Summary: RemoveOverCapacity mixes business logic with UI code and has unclear - Business logic mixed with HTML string formatting reduces clarity and testability

UX Impact Notes - Summary: Displays capacity reduction details and updates implementation plan with descriptive messages. - Generate HTML content showing capacity reduction, Append descriptive capacity change messages to implementation plan

Test Case Ideas - Summary: Test capacity removal logic - and correct updates to implementation plans. - Handle various input types and malformed JSON in Decode method - Remove or update locations or teams when over capacity - Update team count only if new capacity is greater than zero - Update ImpPlans collection and pass to ActorModel.CreateImplementationPlans

Dependencies & Called Services - Summary: Convert IActorModel list for processing overcapacity removal. - Convert IActorModel list - Process overcapacity removal

OfficeLocations

Summary: Fetch office location details using the current project ID and display them in a view.

ActionResult LocationsController.OfficeLocations()

Routing

  • HTTP: GET
  • URL: /Locations/OfficeLocations
View Metadata
  • View: OfficeLocations (Andromeda.Web\Views\Locations\OfficeLocations.cshtml)
  • Model: IList<LocationInfra>
Detailed Analysis

Key Flows - Summary: Fetch office location details using the current project ID and display them in a view. - Fetch office details with InfraModel.GetOfficeDetails using ActorModel and project ID - Return view displaying office locations

Error Flows - Summary: Handle invalid or missing project ID errors during office details retrieval. - Invalid or missing project ID error handling, Office details retrieval failure management

Maintainability Issues - Summary: Rename method to follow C# naming conventions. - Non-conventional method name 'OfficeLocations'

UX Impact Notes - Summary: Displays office locations to enhance user interface with relevant data. - View displaying office locations, Presentation of relevant location data

Test Case Ideas - Summary: Verify OfficeLocations handles GET requests and returns correct office list for valid project ID. - Handle HTTP GET requests - Return correct office list for valid project ID

Dependencies & Called Services - Summary: OfficeLocations method depends on IInfraModel service. - Dependency on IInfraModel service

AllOrAnyConstraint

Summary: Retrieve project data, process related activities and actors, prepare activity details, and return the view result.

ActionResult LocationsController.AllOrAnyConstraint()

Routing

  • HTTP: GET
  • URL: /Locations/AllOrAnyConstraint
View Metadata
  • View: AllOrAnyConstraint (Andromeda.Web\Views\Locations\AllOrAnyConstraint.cshtml)
Detailed Analysis

Key Flows - and return the view result. - Fetch arrows, activities, and actors for the project - Return ActionResult to complete HTTP GET request

Error Flows - Summary: The method lacks error handling, allowing null values to propagate on invalid input. - No explicit error or exception handling, Null propagation on invalid project ID or missing data, Potential failures in LINQ queries and object construction

Performance Issues - and repeated FirstOrDefault calls degrade performance on large datasets. - Inefficient GroupBy and Where operations on large Arrow datasets

Maintainability Issues - Summary: Replace magic numbers and strings with constants and clarify undefined references. - Use of magic numbers reduces code clarity and maintainability, Use of magic strings instead of named constants lowers readability, Extensive anonymous types and lambda expressions hinder understanding and debugging, Undefined or incomplete references indicate maintainability and code completeness issues

UX Impact Notes - Summary: Providing complete and correct data in ViewData ensures proper view rendering and UX. - Handle errors to prevent incomplete or incorrect data affecting UI - Set complete data in ViewData for accurate view rendering

Test Case Ideas - property assignment - Return correct data for valid project ID - Set 'Name' property based on predecessor existence

Dependencies & Called Services - Summary: Uses enumerable collections of actor and process models. - Enumerable collections, IActorModel interface, IProcessModel interface

UpdateActorCountFromSchedCount

Summary: UpdateActorCountFromSchedCount updates actor count for the current project on HTTP POST and returns confirmation.

JsonResult LocationsController.UpdateActorCountFromSchedCount()

Routing

  • HTTP: POST
  • URL: /Locations/UpdateActorCountFromSchedCount
Detailed Analysis

Key Flows - Summary: UpdateActorCountFromSchedCount updates actor count for the current project on HTTP POST and returns confirmation. - Call ActorModel.ActorCountUpdate with project ID - Return JsonResult confirming update

Maintainability Issues - Summary: Method name misleads by not indicating it returns a JsonResult. - Misleading method name lacking JsonResult indication

UX Impact Notes - Summary: Returns JsonResult to support AJAX or API user flows. - JsonResult return type

Test Case Ideas - Summary: Verify UpdateActorCountFromSchedCount updates actor count and returns JsonResult on HTTP POST. - Invoke UpdateActorCountFromSchedCount on HTTP POST - Return JsonResult successfully - Update actor count for given project ID

Dependencies & Called Services - Summary: Uses IActorModel to update actor count from schedule count. - IActorModel dependency for actor count update