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¶
- Index →
Index(Andromeda.Web\Views\Locations\Index.cshtml) - GeolocateActors →
GeolocateActors(Andromeda.Web\Views\Locations\GeolocateActors.cshtml) - WorkingHours →
WorkingHours(Andromeda.Web\Views\Locations\WorkingHours.cshtml) - TeamSize →
TeamSize(Andromeda.Web\Views\Locations\TeamSize.cshtml) - ProjectOutcome →
ProjectOutcome(Andromeda.Web\Views\Locations\ProjectOutcome.cshtml) - TotalCost →
TotalCost(Andromeda.Web\Views\Locations\TotalCost.cshtml) - PathAnalysis →
PathAnalysis(Andromeda.Web\Views\Locations\PathAnalysis.cshtml) - PathVolumeFlow →
PathVolumeFlow(Andromeda.Web\Views\Locations\PathVolumeFlow.cshtml) - PathAllBatch →
PathAllBatch(Andromeda.Web\Views\Locations\PathAllBatch.cshtml) - WorkTimings →
WorkTimings(Andromeda.Web\Views\Locations\WorkTimings.cshtml) - JoinTeams →
JoinTeams(Andromeda.Web\Views\Locations\JoinTeams.cshtml) - SystemAutomation →
SystemAutomation(Andromeda.Web\Views\Locations\SystemAutomation.cshtml) - PathAutomation →
PathAutomation(Andromeda.Web\Views\Locations\PathAutomation.cshtml) - PathDeadLines →
PathDeadLines(Andromeda.Web\Views\Locations\PathDeadLines.cshtml) - ControlsPath →
ControlsPath(Andromeda.Web\Views\Locations\ControlsPath.cshtml) - OutProcessWorkAllocation →
OutProcessWorkAllocation(Andromeda.Web\Views\Locations\OutProcessWorkAllocation.cshtml) - TeamCostPeakReduction →
TeamCostPeakReduction(Andromeda.Web\Views\Locations\TeamCostPeakReduction.cshtml) - ActivitySuggestions →
ActivitySuggestions(Andromeda.Web\Views\Locations\ActivitySuggestions.cshtml) - CriticalPath →
CriticalPath(Andromeda.Web\Views\Locations\CriticalPath.cshtml) - CriticalPathDelays →
CriticalPathDelays(Andromeda.Web\Views\Locations\CriticalPathDelays.cshtml) - CycleTime →
CycleTime(Andromeda.Web\Views\Locations\CycleTime.cshtml) - NonProductivePath →
NonProductivePath(Andromeda.Web\Views\Locations\NonProductivePath.cshtml) - SimulationResult →
SimulationResult(Andromeda.Web\Views\Locations\SimulationResult.cshtml) - OutProcessFlow →
OutProcessFlow(Andromeda.Web\Views\Locations\OutProcessFlow.cshtml) - OutProcessEffortReduction →
OutProcessEffortReduction(Andromeda.Web\Views\Locations\OutProcessEffortReduction.cshtml) - NonProductive →
NonProductive(Andromeda.Web\Views\Locations\NonProductive.cshtml) - ImplementationPlans →
ImplementationPlans(Andromeda.Web\Views\Locations\ImplementationPlans.cshtml) - TeamLocation →
TeamLocation(Andromeda.Web\Views\Locations\TeamLocation.cshtml) - PathTracking →
PathTracking(Andromeda.Web\Views\Locations\PathTracking.cshtml) - TeamCompetency →
TeamCompetency(Andromeda.Web\Views\Locations\TeamCompetency.cshtml) - ImplementationTree →
ImplementationTree(Andromeda.Web\Views\Locations\ImplementationTree.cshtml) - DecisionTree →
DecisionTree(Andromeda.Web\Views\Locations\DecisionTree.cshtml) - OutProcessFrequencyChange →
OutProcessFrequencyChange(Andromeda.Web\Views\Locations\OutProcessFrequencyChange.cshtml) - TeamsShiftsSchedule →
TeamsShiftsSchedule(Andromeda.Web\Views\Locations\TeamsShiftsSchedule.cshtml) - Overcapacity →
Overcapacity(Andromeda.Web\Views\Locations\Overcapacity.cshtml) - OfficeLocations →
OfficeLocations(Andromeda.Web\Views\Locations\OfficeLocations.cshtml) - AllOrAnyConstraint →
AllOrAnyConstraint(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