public void Setup()
        {
            var milestoneBuilder = new MilestoneBuilder();
            var today = DateTime.Now;

            _milestone = milestoneBuilder.BuildMileStone(today.Date.AddDays(-5), today.Date.AddDays(+10), 1);

            var personBuilder = new PersonBuilder();

            _persons = new List<Person>(4);

            _persons.Add(personBuilder.BuildPerson("Ivan", 1));
            _persons.Add(personBuilder.BuildPerson("John", 2));
            _persons.Add(personBuilder.BuildPerson("Igor", 3));
            _persons.Add(personBuilder.BuildPerson("Sasha", 4));

            var cases = new List<Case>();

            var caseBuilder = new CaseBuilder();

            var person = _persons[0];

            cases.Add(caseBuilder.BuildCase(person, 10, 2, today.AddDays(-4), 1));
            cases.Add(caseBuilder.BuildCase(person, 10, 0, null, 2));
            cases.Add(caseBuilder.BuildCase(person, 10, 8, today.AddDays(-3), 3));

            person = _persons[1];
            cases.Add(caseBuilder.BuildCase(person, 5, 0, null, 4));
            cases.Add(caseBuilder.BuildCase(person, 5, 5, today.AddDays(-1), 5));
            cases.Add(caseBuilder.BuildCase(person, 5, 3, today, 6));

            person = _persons[2];
            cases.Add(caseBuilder.BuildCase(person, 15, 8, today.AddDays(-4), 7));
            cases.Add(caseBuilder.BuildCase(person, 15, 10, today.AddDays(-3), 8));
            cases.Add(caseBuilder.BuildCase(person, 150, 9, today.AddDays(-2), 9));

            person = _persons[3];
            cases.Add(caseBuilder.BuildCase(person, 5, 0, null, 10));
            cases.Add(caseBuilder.BuildCase(person, 5, 0, null, 11));
            cases.Add(caseBuilder.BuildCase(person, 5, 0, null, 12));

            _caseSet = new CaseSet() {Cases = cases, Milestone = _milestone};

            _isScheduleLoadedByAdmin = false;

            _schedule = new FbSchedule();
        }
        public static DateTime? CodeFreezeCalculate(int projectId, Milestone milestone, int? projectParentCaseId, string name, Regex regEx)
        {
            if (DateUtils.GetCodeFreezeFromName(name, regEx) != null)
            {
                return DateUtils.GetCodeFreezeFromName(name, regEx);
            }
            if (milestone.DateStart == null || milestone.DateRelease == null || projectParentCaseId !=null)
            {
                return null;
            }
            DateTime codeFreeze;
            var dateReleaseMinusStart = (TimeSpan)(milestone.DateRelease - milestone.DateStart);
            var percentage = 1.0 - ((double)FbAccountContext.Current.Settings.QaPercentage / 100);
            if (!FbAccountContext.Current.Settings.AllowQaEstimates)
            {
                var calculatedTimeDifference = new TimeSpan(
                    (int)(dateReleaseMinusStart.Days * percentage),
                    (int)(dateReleaseMinusStart.Hours * percentage),
                    (int)(dateReleaseMinusStart.Minutes * percentage),
                    (int)(dateReleaseMinusStart.Seconds * percentage));
                codeFreeze = (DateTime)(milestone.DateStart + calculatedTimeDifference);
            }
            else
            {
                IList<Case> cases = FogBugzGateway.GetCases(projectId, milestone.Id);
                int totalQaEstimate = cases.Sum(@case => @case.TestEstimate.GetValueOrDefault(0));

                var timeSpan = new TimeSpan(0, 0, (int)totalQaEstimate, 0);
                var calculatedTimeDifference = dateReleaseMinusStart - timeSpan;
                codeFreeze = (DateTime)(milestone.DateStart + calculatedTimeDifference);
            }
            return codeFreeze;
        }
        public static string GetMilestonesQueryPart(Milestone milestone)
        {
            string searchQuery = "";
            if (milestone != null)
                searchQuery = String.Format("milestone:\"{0}\"", milestone.Name);
            else
            {
                var milestones = GetMilestones();
                var milestoneQueryParts = new List<string>();
                foreach (var fixFor in milestones)
                {
                    milestoneQueryParts.Add(String.Format("milestone:\"{0}\"", fixFor.Name));
                }

                var milestonesQuery = "(" + String.Join(" OR ", milestoneQueryParts) + ")";
                searchQuery += milestonesQuery;
            }
            return searchQuery;
        }
 public static string GetMilestoneQueryPart(Milestone milestone)
 {
     return GetMilestoneQueryPart(milestone.Id);
 }
 public static Milestone GetMilestone(int milestoneId)
 {
     FixFor fixFor = GetMilestones().SingleOrDefault(m => m.Index == milestoneId);
     if (fixFor == null) return null;
     var milestone = new Milestone(fixFor);
     return milestone;
 }
        public Milestone BuildMileStone(DateTime startDate, DateTime releaseDate, int id)
        {
            var fixFor = new FixFor() {Name ="Milestone 1.0", DateRelease = releaseDate, DateStart = startDate, Index = id};
            var milestone = new Milestone(fixFor) {DateRelease = releaseDate};

            return milestone;
        }