namespace EnVisage.Models { using System; using System.Collections.Generic; using System.Linq; public class OptimuseModel { #region Properties public List WeekEndings { get; set; } public OptimuseCapacityModel ActualCapacity { get; set; } public OptimuseCapacityModel PlannedCapacity { get; set; } #endregion #region Constructors public OptimuseModel() { WeekEndings = new List(); ActualCapacity = new OptimuseCapacityModel(); PlannedCapacity = new OptimuseCapacityModel(); } #endregion } public class OptimuseCapacityModel { #region Properties public long TotalHoursCapacity { get; set; } public long TotalResourcesCapacity { get; set; } public OptimuseSummaryModel OverAllocatedSummary { get; set; } public OptimuseSummaryModel UnderAllocatedSummary { get; set; } public OptimuseSummaryModel IdealAllocatedSummary { get; set; } #endregion #region Constructors public OptimuseCapacityModel() { OverAllocatedSummary = new OptimuseSummaryModel(); UnderAllocatedSummary = new OptimuseSummaryModel(); IdealAllocatedSummary = new OptimuseSummaryModel(); } #endregion } public class OptimuseSummaryModel { #region Properties public long MinResourcesValue { get { if (ResourceUsageData.Count <= 0) return 0; return ResourceUsageData.Values.Min(x => Math.Abs(x)); } } public long MaxResourcesValue { get { if (ResourceUsageData.Count <= 0) return 0; return ResourceUsageData.Values.Max(x => Math.Abs(x)); } } public long MinHoursValue { get { if (HoursUsageData.Count <= 0) return 0; return HoursUsageData.Values.Min(x => Math.Abs(x)); } } public long MaxHoursValue { get { if (HoursUsageData.Count <= 0) return 0; return HoursUsageData.Values.Max(x => Math.Abs(x)); } } public long TotalHoursValue { get { return HoursUsageData.Values.Sum(x => Math.Abs(x)); } } public long TotalResourcesValue { get { return ResourceUsageData.Values.Sum(x => Math.Abs(x)); } } public int Weeks { get; private set; } public Dictionary ResourceUsageData { get; private set; } public Dictionary HoursUsageData { get; private set; } #endregion #region Constructors public OptimuseSummaryModel() { ResourceUsageData = new Dictionary(); HoursUsageData = new Dictionary(); } #endregion #region Methods public void AddItem(string key, long hoursValue, long resourcesValue) { if (string.IsNullOrWhiteSpace(key)) throw new ArgumentNullException("key"); if (HoursUsageData.ContainsKey(key)) throw new ArgumentException(string.Format("An element with the key {0} already exists in the HoursUsageData dictionary", key)); if (ResourceUsageData.ContainsKey(key)) throw new ArgumentException(string.Format("An element with the key {0} already exists in the ResourceUsageData dictionary", key)); HoursUsageData.Add(key, hoursValue); ResourceUsageData.Add(key, resourcesValue); Weeks += 1; } #endregion } }