Esempio n. 1
0
        //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);
        }