//public static Boolean IsInteger(this double d) //{ // double epsilon = 0.001; // return (d % 1) <= epsilon; //} //public static double IsInteger(this double d, double workhours=8) //{ // var x = (d % 1); //} #region "Full" public static void ParseActivityLinks(Int64 id, string link, Dictionary <Int64, dtoCPMactivity> dict) { if (link != "*") { String[] links = link.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var item in links) { dtoCPMlink x = new dtoCPMlink(id, item.ParseActivityLink(), dict); x.Source.Predecessors.Add(x); x.Target.Successors.Add(x); } } else { foreach (var item in dict) { if (item.Key != id && item.Value.IsSummary == false) { dtoCPMlink x = new dtoCPMlink() { isVirtual = true, Source = dict[id], Target = item.Value }; x.Source.Predecessors.Add(x); x.Target.Successors.Add(x); } } } }
public IList <dtoCPMactivity> PreprocessSummaryMilestones(IList <dtoCPMactivity> activities) { //Start Preparation var summaries = activities.Where(x => x.IsSummary).OrderByDescending(x => x.Id).ToList(); //var summaries = activities.Where(x => x.IsSummary).ToList(); foreach (var summary in summaries) { dtoCPMactivity startMilestone = new dtoCPMactivity() { Name = String.Format("{0}-{1}", summary.Id, "start"), Duration = 0, IsVirtual = true, Id = activities.Max(x => x.Id) + 1, DisplayOrder = activities.Max(x => x.Id) + 1 }; dtoCPMactivity endMilestone = new dtoCPMactivity() { Name = String.Format("{0}-{1}", summary.Id, "end"), Duration = 0, IsVirtual = true, Id = activities.Max(x => x.Id) + 2, DisplayOrder = activities.Max(x => x.Id) + 2 }; startMilestone.Parent = summary; startMilestone.IdParent = summary.Id; endMilestone.Parent = summary; endMilestone.IdParent = summary.Id; summary.Children.Add(startMilestone); summary.Children.Add(endMilestone); activities.Add(startMilestone); activities.Add(endMilestone); if (summary.Parent != null) { dtoCPMlink parentlink = new dtoCPMlink() { IdSource = startMilestone.Id, Source = startMilestone, Target = summary.Parent, IdTarget = summary.IdParent, isVirtual = true }; startMilestone.Predecessors.Add(parentlink); summary.Parent.Successors.Add(parentlink); } foreach (var children in summary.Children.Where(x => x.IsVirtual == false && x.IsSummary == false)) { dtoCPMlink startlink = new dtoCPMlink() { IdSource = children.Id, Source = children, Target = startMilestone, IdTarget = startMilestone.Id, isVirtual = true }; startMilestone.Successors.Add(startlink); children.Predecessors.Add(startlink); dtoCPMlink endlink = new dtoCPMlink() { IdSource = endMilestone.Id, Source = endMilestone, Target = children, IdTarget = children.Id, isVirtual = true }; children.Successors.Add(endlink); endMilestone.Predecessors.Add(endlink); } //foreach (var children in summary.Children.Where(x => x.IsVirtual == false)) //{ //} foreach (var predec in summary.Predecessors.ToList()) { predec.Source = startMilestone; predec.IdSource = startMilestone.Id; //switch (predec.Type) //{ // case PmActivityLinkType.FinishStart: // //dtoCPMlink prefs = new dtoCPMlink() { IdTarget = vs.Id, Target = vs, Source = predec.Target, IdSource = predec.IdTarget, isVirtual = true }; // //vs.Predecessors.Add(prefs); // //predec.Target.Successors.Add(prefs); // break; // case PmActivityLinkType.StartStart: // //dtoCPMlink presss = new dtoCPMlink() { IdTarget = vs.Id, Target = vs, Source = predec.Target, IdSource = predec.IdTarget, isVirtual = true, Type = PmActivityLinkType.StartStart }; // //vs.Predecessors.Add(presss); // //predec.Target.Successors.Add(presss); // break; // default: // break; //} } foreach (var succ in summary.Successors.ToList()) { succ.Target = endMilestone; succ.IdTarget = endMilestone.Id; //succ.Source = ve; //succ.IdSource = ve.Id; //switch (succ.Type) //{ // case PmActivityLinkType.FinishStart: // //dtoCPMlink prefs = new dtoCPMlink() { IdTarget = ve.Id, Target = ve, Source = succ.Source, IdSource = succ.IdSource, isVirtual = true }; // //ve.Predecessors.Add(prefs); // //succ.Target.Successors.Add(prefs); // break; // case PmActivityLinkType.StartStart: // //dtoCPMlink presss = new dtoCPMlink() { IdTarget = ve.Id, Target = ve, Source = succ.Source, IdSource = succ.IdSource, isVirtual = true, Type = PmActivityLinkType.StartStart }; // //ve.Predecessors.Add(presss); // //succ.Target.Successors.Add(presss); // break; // default: // break; //} } //summary.Successors.Clear(); //summary.Predecessors.Clear(); } //End Preparation return(activities); }