ValidationController¶
- Namespace:
Insorce.Controllers - Project:
Andromeda.Web
Overview¶
The ValidationController manages validation-related features within the application, providing multiple endpoints to analyze and present project, cost, and performance data. It serves users involved in project management, cost analysis, and operational validation.
Feature Summary¶
- Implements validation and analysis of project data, costs, competencies, and performance metrics.
- Supports retrieval and processing of project activities, actors, products, and infrastructure data.
- Provides endpoints for critical path analysis, cost calculations, and control validations.
- Exposes JSON data for UI components to display available actions.
UX Summary¶
- Multiple views present calculated metrics and validation results to users.
- Some methods lack full implementation or have commented code, potentially causing confusion or degraded user experience.
- Hardcoded values and tight coupling in methods may reduce UI responsiveness and clarity.
- Direct storage of calculated values in ViewData impacts UI accuracy and consistency.
Data Dependencies¶
- Relies on project, activity, actor, product, and infrastructure data models.
- Uses FX rates and cluster activity metrics for cost calculations.
- Depends on internal Controls method for core validation logic.
- Filters and processes data collections to compute costs, efforts, and performance metrics.
Authentication / Authorization Notes¶
- No explicit authentication or permission checks are evident in the analyzed methods.
- Lack of validation and error handling in data access may introduce security vulnerabilities.
Controller 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_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
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_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"]
ValidationController_CompetencyandCompensation["ValidationController.CompetencyandCompensation"]
ValidationController_Controls["ValidationController.Controls"]
ValidationController_CycleTimeCriticalPath["ValidationController.CycleTimeCriticalPath"]
ValidationController_PeakandUtilization["ValidationController.PeakandUtilization"]
ValidationController_TotalCost["ValidationController.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
ValidationController_CompetencyandCompensation --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_CompetencyandCompensation --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_Controls --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
ValidationController_Controls --> Andromeda_Core_Services_Algorithms_Delooper_deloop
ValidationController_Controls --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_CycleTimeCriticalPath --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_CycleTimeCriticalPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_Effort
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_ReworkEffort
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
ValidationController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
ValidationController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
ValidationController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
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 |
|---|---|---|---|
competencyandcompensation |
CompetencyandCompensation |
- |
Andromeda.Web\Views\Validation\CompetencyandCompensation.cshtml |
controls |
Controls |
- |
Andromeda.Web\Views\Validation\Controls.cshtml |
cycletimecriticalpath |
CycleTimeCriticalPath |
- |
Andromeda.Web\Views\Validation\CycleTimeCriticalPath.cshtml |
effortperiodic |
EffortPeriodic |
- |
Andromeda.Web\Views\Validation\EffortPeriodic.cshtml |
ftr |
FTR |
List<Andromeda.Core.Entities.MapPath> |
Andromeda.Web\Views\Validation\FTR.cshtml |
peakandutilization |
PeakandUtilization |
- |
Andromeda.Web\Views\Validation\PeakandUtilization.cshtml |
totalcost |
TotalCost |
- |
Andromeda.Web\Views\Validation\TotalCost.cshtml |
Methods at a Glance¶
Query & View Methods¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | FTR |
`` | /Validation/FTR |
The method handles a GET request and returns the Controls method result with... |
| entrypoint | CompetencyandCompensation |
`` | /Validation/CompetencyandCompensation |
Calculate skill and infrastructure costs using FX rates and cluster activity... |
| entrypoint | GetAllActions |
GET |
/Validation/GetAllActions |
The method handles an HTTP GET request, extracts and filters assembly methods... |
Validation & Rules¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | Controls |
`` | /Validation/Controls |
Retrieve and process project data, activities, actors, and products with... |
Workflow & Routing¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | PeakandUtilization |
`` | /Validation/PeakandUtilization |
Filter active non-system actors to calculate USD costs and load infrastructure... |
| entrypoint | CycleTimeCriticalPath |
`` | /Validation/CycleTimeCriticalPath |
Retrieve and process project data to analyze critical paths, calculate costs... |
Other Methods¶
| Type | Method | HTTP | URL | Summary |
|---|---|---|---|---|
| entrypoint | EffortPeriodic |
`` | /Validation/EffortPeriodic |
Call Controls method with 'Effort' argument and return its result as... |
| entrypoint | TotalCost |
`` | /Validation/TotalCost |
Retrieve data from models, calculate costs and effort metrics, and store... |
Associated Screens / Views¶
- FTR →
FTR(Andromeda.Web\Views\Validation\FTR.cshtml) - EffortPeriodic →
EffortPeriodic(Andromeda.Web\Views\Validation\EffortPeriodic.cshtml) - PeakandUtilization →
PeakandUtilization(Andromeda.Web\Views\Validation\PeakandUtilization.cshtml) - CycleTimeCriticalPath →
CycleTimeCriticalPath(Andromeda.Web\Views\Validation\CycleTimeCriticalPath.cshtml) - Controls →
Controls(Andromeda.Web\Views\Validation\Controls.cshtml) - CompetencyandCompensation →
CompetencyandCompensation(Andromeda.Web\Views\Validation\CompetencyandCompensation.cshtml) - TotalCost →
TotalCost(Andromeda.Web\Views\Validation\TotalCost.cshtml)
Entrypoint Methods¶
FTR¶
Summary: The method handles a GET request and returns the Controls method result with 'FTR' parameter.
ActionResult ValidationController.FTR()
Routing
- URL:
/Validation/FTR
View Metadata
- View:
FTR(Andromeda.Web\Views\Validation\FTR.cshtml) - Model:
List<Andromeda.Core.Entities.MapPath>
Detailed Analysis
Key Flows - Summary: The method handles a GET request and returns the Controls method result with 'FTR' parameter. - Return Controls method result - Handle GET request
Maintainability Issues - Summary: Commented out code reduces clarity and confuses developers about functionality status. - Extensive commented out code reduces method clarity, Commented out code indicates deprecated or incomplete functionality
UX Impact Notes - Summary: Calling Controls with 'FTR' parameter impacts user flow but lacks detailed effects. - Call to Controls with 'FTR' parameter, Unclear user flow impact due to missing details
Test Case Ideas - Summary: Test Validation controller GET handling and Controls method with parameter 'FTR'. - Validate Validation controller GET request handling - Verify Controls method called with parameter 'FTR', Assess impact of uncommenting previously commented code
Dependencies & Called Services - Summary: Uses validation to ensure data integrity in called services. - Validation dependency for data integrity
EffortPeriodic¶
Summary: Call Controls method with 'Effort' argument and return its result as ActionResult.
ActionResult ValidationController.EffortPeriodic()
Routing
- URL:
/Validation/EffortPeriodic
View Metadata
- View:
EffortPeriodic(Andromeda.Web\Views\Validation\EffortPeriodic.cshtml)
Detailed Analysis
Key Flows - Summary: Call Controls method with 'Effort' argument and return its result as ActionResult. - Return Controls method result as ActionResult
Maintainability Issues - Summary: EffortPeriodic method lacks implementation and clear context, risking confusion and errors. - Empty method declaration risks errors if called prematurely, Unclear Controls("Effort") call lacks context, Empty code sections indicate missing implementation or generation issues
UX Impact Notes - Summary: Unimplemented method causes unexpected UX; unclear Controls method impact on user flow. - Controls method return value affects user flow
Test Case Ideas - Summary: Verify EffortPeriodic calls Controls with 'Effort' and returns its result as ActionResult. - Ensure EffortPeriodic returns Controls('Effort') result - Validate EffortPeriodic returns valid ActionResult
Dependencies & Called Services - Summary: EffortPeriodic uses Validation for input and data integrity checks. - Validation for input integrity, Validation for data consistency
PeakandUtilization¶
Summary: Filter active non-system actors to calculate USD costs and load infrastructure data for location assignments.
ActionResult ValidationController.PeakandUtilization()
Routing
- URL:
/Validation/PeakandUtilization
Cross-layer call chain - ValidationController.PeakandUtilization → Andromeda.Core.Entities.Activity.TotalEffort - ValidationController.PeakandUtilization → Andromeda.Core.Entities.Activity.ReworkEffort - ValidationController.PeakandUtilization → Andromeda.Core.Entities.Activity.Effort
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_Effort["Andromeda.Core.Entities.Activity.Effort"]
Andromeda_Core_Entities_Activity_ReworkEffort["Andromeda.Core.Entities.Activity.ReworkEffort"]
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
ValidationController_PeakandUtilization["ValidationController.PeakandUtilization"]
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_Effort
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_ReworkEffort
ValidationController_PeakandUtilization --> Andromeda_Core_Entities_Activity_TotalEffort
View Metadata
- View:
PeakandUtilization(Andromeda.Web\Views\Validation\PeakandUtilization.cshtml)
Detailed Analysis
Key Flows - Summary: Filter active non-system actors to calculate USD costs and load infrastructure data for location assignments. - Calculate costs in USD using currency and exchange rates - Assign infrastructure master and location details by office ID and category - Load offices, infrastructure master, and premises data
Performance Issues - Summary: Excessive database calls and inefficient LINQ queries degrade performance. - Multiple database calls across models, Complex LINQ queries impacting speed, ToList() causing memory overhead, Inefficient use of Any and First on large collections, Expensive infraModel method calls, FirstOrDefault on large collections causing slowdowns, Heavy calculations over large collections
Maintainability Issues - Summary: The method uses hardcoded values and tight coupling, reducing clarity and modularity. - Hardcoded magic numbers and strings reduce clarity and maintainability, Complex calculations hinder understanding and maintenance, Tight coupling with multiple model classes reduces modularity and testability
UX Impact Notes - Summary: Sets multiple ViewData values to control UI presentation and display calculated metrics. - Set firstTimeRight flag - Set TeamSize value - Set Seats count - Set TotalSeatsCost amount - Set calculated metrics for UI display
Test Case Ideas - Summary: Verify accurate calculations, data handling, and performance under varied inputs. - Handle empty foreign exchange rates collection in cost calculations - Validate First Time Right (FTR) calculation accuracy - Validate Undesired Customer calculation accuracy - Validate Team Salary Cost calculation accuracy - Validate cost calculations with multiple currencies and exchange rates - Validate infrastructure cost calculation across project IDs and parameters - Validate total seats and seats cost calculation for various office lists - Validate team minimum FTE - Verify ViewData['TeamSize'] calculation from actors, Test infraModel methods for correct data and edge case handling, Evaluate performance with large InfraMasterDetails and OfficeList
Dependencies & Called Services - Summary: Uses core system types and multiple domain-specific actor and control models. - Core system types: List, Math, String, Enumerable, Domain models: IActorModel, IControlModel, IHRModel, IInfraModel, IProcessModel, Activity and Convert utilities
CycleTimeCriticalPath¶
Summary: Retrieve and process project data to analyze critical paths, calculate costs, team metrics, and prepare results for view presentation.
ActionResult ValidationController.CycleTimeCriticalPath()
Routing
- URL:
/Validation/CycleTimeCriticalPath
Cross-layer call chain - ValidationController.CycleTimeCriticalPath → Andromeda.Core.Services.ProcessExtensions.FindByID - ValidationController.CycleTimeCriticalPath → Andromeda.Core.Entities.Activity.TotalEffort
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
ValidationController_CycleTimeCriticalPath["ValidationController.CycleTimeCriticalPath"]
ValidationController_CycleTimeCriticalPath --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_CycleTimeCriticalPath --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
CycleTimeCriticalPath(Andromeda.Web\Views\Validation\CycleTimeCriticalPath.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and process project data to analyze critical paths, calculate costs, team metrics, and prepare results for view presentation. - Calculate total effort, minimum FTE, peak, and utilization for active teams - Load infrastructure details and calculate infrastructure costs, Load cycle time and schedule analysis data - Retrieve project data from activities, actors, infrastructure, and financial models, Filter active, non-system actors for cost and team size calculations, Convert activity costs to USD using exchange rates with fallback, Analyze critical paths by flattening, ordering by cycle time, and selecting primary path, Store all calculated metrics and data in ViewData for presentation - Validate critical path end activities and extract organization IDs for path matching
Error Flows - Summary: Prevent null reference exceptions and handle missing data in critical path calculations. - Conditional checks for critical path and end activity existence
Security Issues - Summary: No security issues found in the analyzed code.
Performance Issues - Summary: Multiple LINQ queries and repeated collection materializations degrade performance. - Multiple LINQ queries on large datasets
Maintainability Issues - Summary: Refactor large method with magic strings and unclear variable names to improve readability and maintainability. - Dense code with magic numbers and hardcoded strings reduces readability, Magic strings for ViewData keys complicate future changes, Unclear variable naming hinders code clarity, Method performs many responsibilities and needs refactoring into smaller methods
UX Impact Notes - Summary: Displays key project metrics but risks slow response and unhandled errors harming UX. - Potential slow response with large datasets - Lack of clear error handling causing unhandled exceptions
Test Case Ideas - Summary: Validate accurate metric calculations - Calculate First Time Right (FTR) metric accurately with varied inputs, Calculate total effort, team minimum FTE, peak, and utilization for active teams - Ensure performance scalability with large datasets - Handle empty and non-empty CriticalPaths collections properly - Load infrastructure data and verify cost calculations, Load cycle time and schedule analysis data accurately
Dependencies & Called Services - Summary: Uses models, collections, and utilities to process and convert activity data. - Activity model, Data conversion utilities, Enumerable collections, Actor, Control, FinalPlan, HR, Infra, Process models, Integer and String types, List collection, Math utilities - Process extension methods
Controls¶
Summary: Retrieve and process project data, activities, actors, and products with validation and filtering.
ActionResult ValidationController.Controls(string screenFrom)
Routing
- URL:
/Validation/Controls
Cross-layer call chain - ValidationController.Controls → Andromeda.Core.Services.ProcessExtensions.FindByID - ValidationController.Controls → Andromeda.Core.Services.Algorithms.Delooper.deloop - ValidationController.Controls → 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"]
ValidationController_Controls["ValidationController.Controls"]
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_LoggingManager_Error
Andromeda_Core_Services_Algorithms_Delooper_deloop --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_Controls --> Andromeda_Core_Services_Algorithms_Delooper_GetLoopingArrows
ValidationController_Controls --> Andromeda_Core_Services_Algorithms_Delooper_deloop
ValidationController_Controls --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
Controls(Andromeda.Web\Views\Validation\Controls.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve and process project data, activities, actors, and products with validation and filtering. - Fetch project comparison data and comments - Retrieve current project ID, Decode project data JSON into ProjectDataEntity, Retrieve and list all project activities, Remove arrows lacking valid predecessors or successors, Retrieve and process project actors and products - Validate rework and iteration volumes for processing
Error Flows - Summary: Handle null references - Null reference exceptions from unchecked 'dataOfMeasures' or 'MeasuresJson' - FormatException and OverflowException from unhandled string-to-integer conversions
Security Issues - Summary: Accessing modules without validation or error handling creates security vulnerabilities. - Security risks from unchecked module access
Performance Issues - Summary: Optimize collection handling and reduce repeated conversions and database calls to improve performance. - LINQ methods Any() and TrueForAll() inside loops degrading performance on large datasets
Maintainability Issues - Summary: Code suffers from unclear naming, magic values, tight coupling, and incomplete fragments. - Commented-out and incomplete code reduces clarity, Use of magic numbers and strings instead of constants or enums, Tight coupling between models, controllers, and constants, Non-descriptive and inconsistent variable names, Magic numbers in tuple access reduce readability, Incomplete or truncated code fragments cause confusion and errors
UX Impact Notes - Summary: Improper data handling and missing validation degrade user navigation and UI consistency. - ScreenFrom assignment affects navigation and display logic - Unhandled string-to-integer conversion errors harm user experience
Test Case Ideas - processing logic - Process actors and products for the project - Convert activities list with empty and large datasets - Validate conditional logic for rework and iteration volumes
Dependencies & Called Services - Summary: Uses collections, string handling, and domain-specific models for control operations. - Enumerable utilities, List collections, String manipulation, IActorModel interface, IControlModel interface, IProcessModel interface, IProjectModel interface, Convert utilities - ProcessExtensions utilities
CompetencyandCompensation¶
Summary: Calculate skill and infrastructure costs using FX rates and cluster activity metrics, then store results for view presentation.
ActionResult ValidationController.CompetencyandCompensation()
Routing
- URL:
/Validation/CompetencyandCompensation
Cross-layer call chain - ValidationController.CompetencyandCompensation → Andromeda.Core.Services.ProcessExtensions.FindByID - ValidationController.CompetencyandCompensation → Andromeda.Core.Entities.Activity.TotalEffort
Call Chain Diagram¶
flowchart TD
Andromeda_Core_Entities_Activity_TotalEffort["Andromeda.Core.Entities.Activity.TotalEffort"]
Andromeda_Core_Services_ProcessExtensions_FindByID["Andromeda.Core.Services.ProcessExtensions.FindByID"]
ValidationController_CompetencyandCompensation["ValidationController.CompetencyandCompensation"]
ValidationController_CompetencyandCompensation --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_CompetencyandCompensation --> Andromeda_Core_Services_ProcessExtensions_FindByID
View Metadata
- View:
CompetencyandCompensation(Andromeda.Web\Views\Validation\CompetencyandCompensation.cshtml)
Detailed Analysis
Key Flows - Summary: Calculate skill and infrastructure costs using FX rates and cluster activity metrics, then store results for view presentation. - Filter active, non-system actors and calculate skill costs in USD using FX rates, Retrieve and process infrastructure data to calculate costs and metrics, Perform cluster analysis on activities with cycle time and effort metrics, Store all calculated metrics and data in ViewData for presentation
Performance Issues - Summary: Multiple database calls and inefficient collection operations degrade performance. - Multiple database calls across various models, Complex calculations impacting performance, Use of ToList() on large filtered collections causing high memory use, LINQ Any and First on large collections affecting performance, FirstOrDefault on large collections causing slowdowns
Maintainability Issues - Summary: Replace hardcoded values and strings with constants and reduce tight coupling for maintainability. - Use named constants instead of magic numbers and hardcoded currency codes, Avoid hardcoded property names in filters to ease future changes, Reduce tight coupling with multiple models and services to simplify testing and maintenance
UX Impact Notes - Summary: Delayed or unclear metric calculations degrade user experience. - Delayed calculation of display metrics, Overwhelming or confusing data presentation
Test Case Ideas - Summary: Validate calculations - and performance with large data sets. - Validate team size and HR cost calculations with diverse actor data - Test infrastructure data retrieval and correct infraMaster and infraLocation assignment - Assess performance with large data sets for actors
Dependencies & Called Services - Summary: Uses core system models, collections, and utility classes for competency and compensation processing. - Core system models: IActorModel, IControlModel, IHRModel, IInfraModel, IProcessModel, Collections and LINQ: List, Enumerable, Utility classes: Math, String, Data conversion: Convert - Process and activity handling: Activity, ProcessExtensions
TotalCost¶
Summary: Retrieve data from models, calculate costs and effort metrics, and store results for downstream use.
ActionResult ValidationController.TotalCost()
Routing
- URL:
/Validation/TotalCost
Cross-layer call chain - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetActors - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetTalentPools - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficeList - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraMasterDetails - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetInfraDetails - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetOfficePremises - ValidationController.TotalCost → Andromeda.Core.Entities.ProjectData.GetConnectivityDetails - ValidationController.TotalCost → Insorce.Helpers.Helpers.CurrencyConverter - ValidationController.TotalCost → Andromeda.Core.Entities.Activity.Clone - ValidationController.TotalCost → Andromeda.Core.Services.ProcessExtensions.FindByID - ValidationController.TotalCost → Andromeda.Core.Services.Algorithms.Delooper.deloop - ValidationController.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"]
ValidationController_TotalCost["ValidationController.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
ValidationController_TotalCost --> Andromeda_Core_Entities_Activity_Clone
ValidationController_TotalCost --> Andromeda_Core_Entities_Activity_TotalEffort
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetActors
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetConnectivityDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetInfraMasterDetails
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficeList
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetOfficePremises
ValidationController_TotalCost --> Andromeda_Core_Entities_ProjectData_GetTalentPools
ValidationController_TotalCost --> Andromeda_Core_Services_Algorithms_Delooper_deloop
ValidationController_TotalCost --> Andromeda_Core_Services_ProcessExtensions_FindByID
ValidationController_TotalCost --> Insorce_Helpers_Helpers_CurrencyConverter
View Metadata
- View:
TotalCost(Andromeda.Web\Views\Validation\TotalCost.cshtml)
Detailed Analysis
Key Flows - Summary: Retrieve data from models, calculate costs and effort metrics, and store results for downstream use. - Calculate first-time-right percentage from source and sink volumes, Calculate infrastructure and total seats cost, Calculate effort and minimum FTE for in-scope non-system teams - Load infrastructure data, offices, and connectivity standards - Retrieve arrow details, activities, actors, FX rates, and infrastructure data, Filter active, non-system actors and iterate over them, Convert activity costs to USD and accumulate total team salary cost, Store all calculated metrics and costs in ViewData
Performance Issues - Summary: Optimize database queries and collection operations to reduce memory use and improve lookup speed. - Multiple database queries with Where and GroupBy impact large data set performance
Maintainability Issues - Summary: Refactor TotalCost to remove magic values, simplify calculations, and reduce external dependencies. - Magic numbers and hardcoded values reduce code clarity, Complex nested LINQ queries hinder understanding and maintenance, Tight coupling with external models complicates testing and modifications, Undocumented magic properties like IsActive and IsSystem impair maintainability
UX Impact Notes - Summary: Storing calculated values in ViewData directly impacts user interface accuracy. - Calculated values stored in ViewData - Incorrect or missing data harms user experience
Test Case Ideas - Summary: Validate cost calculations - Calculate first-time-right percentage with varied source and sink volumes, Calculate effort and minimum FTE for in-scope non-system teams using activity data - handle empty actor lists - Assign infraMaster and infraLocation based on office and category ID presence - Load infrastructure data for different project IDs, verify infrastructure and total seats cost accuracy
Dependencies & Called Services - Summary: Uses models, collections, and utilities to calculate total cost. - Activity model, Conversion utilities, Enumerable collections, Actor, Control, HR, Infrastructure, Process models, List collection, Math utilities, String utilities - Process extensions
GetAllActions¶
Summary: The method handles an HTTP GET request, extracts and filters assembly methods, and returns them as JSON.
JsonResult ValidationController.GetAllActions()
Routing
- HTTP:
GET - URL:
/Validation/GetAllActions
Detailed Analysis
Key Flows - Summary: The method handles an HTTP GET request - and returns them as JSON. - Handle HTTP GET request - Return list as JSON response
Security Issues - Summary: No security issues identified in GetAllActions method.
Performance Issues - Summary: Reflection on all assembly types and methods causes slow performance in large assemblies. - Reflection on all assembly methods, Slow performance with large assemblies
Maintainability Issues - Summary: The method uses hardcoded strings that reduce maintainability and refactorability. - Use of hardcoded strings like 'Controller' and 'Attribute', Reduced code maintainability and refactorability
UX Impact Notes - Summary: Returns JSON to populate UI components with available actions. - JSON response for UI components, Populates dropdowns or tables with actions
Test Case Ideas - Summary: Verify GetAllActions returns correct - Handle HTTP GET requests correctly - Return correct action list for given assembly
Dependencies & Called Services - Summary: Uses core .NET assemblies for reflection, collections, and string operations. - System.Reflection for Assembly, LINQ operations via Enumerable, String manipulation, Type inspection