Esempio n. 1
0
        /// <summary>アクティビティを定義する</summary>
        /// <param name="id">ID</param>
        /// <param name="name">名称</param>
        /// <param name="externalCost">支出</param>
        /// <param name="income">収入</param>
        /// <param name="fixTime">固定時間</param>
        /// <param name="workLoad">作業量</param>
        /// <param name="failRate">失敗確率</param>
        /// <param name="reworkRate">リワーク確率</param>
        /// <param name="costOverRate">コスト超過確率</param>
        /// <returns></returns>
        public static Activity Define(
            string id            = null,
            string name          = null,
            decimal externalCost = 0m,
            decimal income       = 0m,
            decimal fixTime      = 0m,
            decimal workLoad     = 0m,
            decimal failRate     = 0m,
            decimal reworkRate   = 0m,
            decimal costOverRate = 0m)
        {
            Contract.Requires(!id.IsNullOrEmpty());
            Contract.Requires(!name.IsNullOrEmpty());

            var activity = new Activity()
            {
                Id   = id,
                Name = name,
            };

            activity.Estimate(Cost.Of(externalCost));
            activity.Estimate(Income.Of(income));
            activity.Estimate(LeadTime.Of(fixTime));
            activity.Estimate(WorkLoad.Of(workLoad));
            activity.Estimate(Risk.Of(failRate: failRate, reworkRate: reworkRate, costOverRate: costOverRate));
            return(activity);
        }
Esempio n. 2
0
 /// <summary>演算子のオーバーロード</summary>
 /// <param name="x">1項</param>
 /// <param name="y">2項</param>
 /// <returns>積</returns>
 public static LeadTime operator /(WorkLoad x, IEnumerable <Resource> y)
 {
     Contract.Requires(!y.IsNullOrEmpty());
     Contract.Requires(y.All(r => r.Quantity != 0));
     Contract.Requires(y.All(r => r.Productivity != 0));
     return(LeadTime.Of(x.Value / y.Sum(r => r.Quantity * r.Productivity)));
 }
Esempio n. 3
0
        public static Activity Activity(
            decimal income               = 0m,
            decimal externalCost         = 0m,
            decimal failRate             = 0m,
            decimal reworkRate           = 0m,
            decimal costoverRate         = 0m,
            State state                  = State.ToDo,
            decimal fixTime              = 0m,
            decimal workLoad             = 0m,
            decimal resourceQuantity     = 0m,
            decimal resourceProductivity = 0m
            )
        {
            var activity = new Activity();

            activity.Estimate(Income.Of(income));
            activity.Estimate(Cost.Of(externalCost));
            activity.Estimate(Risk.Of(failRate, reworkRate, costoverRate));
            activity.Estimate(LeadTime.Of(fixTime));
            activity.Estimate(WorkLoad.Of(workLoad));
            if (resourceQuantity != 0m && resourceProductivity != 0m)
            {
                activity.Assign(new[] { Resource.Of(resourceQuantity, resourceProductivity) });
            }
            activity.Progress(state);
            return(activity);
        }
Esempio n. 4
0
 /// <summary>最早着手日を求める</summary>
 /// <returns>最早着手日</returns>
 public LeadTime EarliestStart()
 {
     if (Parents.IsEmpty())
     {
         return(LeadTime.Of(0m));
     }
     return(Parents.Max(a => a.EarliestFinish()));
 }
        public void 見積後のアクティビティの固定時間は与えられたものであるべき()
        {
            var expectedValue = 100m;

            var activity = Activity.Define();

            activity.Estimate(LeadTime.Of(expectedValue));
            activity.FixTime.Value.Is(expectedValue);
        }
Esempio n. 6
0
        /// <summary>LeadTime型用の集計関数</summary>
        /// <param name="source">対象</param>
        /// <returns>集計結果</returns>
        public static LeadTime Sum(this IEnumerable <LeadTime> source)
        {
            var sum = LeadTime.Of();

            foreach (var item in source)
            {
                sum += item;
            }
            return(sum);
        }
Esempio n. 7
0
 /// <summary>所要期間を求める</summary>
 /// <returns>所要期間</returns>
 /// <remarks>
 /// 固定時間がある場合は固定時間
 /// 固定時間がない場合は作業量/総資源生産性
 /// </remarks>
 public LeadTime Duration()
 {
     if (FixTime.Value != 0m)
     {
         return(FixTime);
     }
     else if (WorkLoad.Value == 0m)
     {
         return(LeadTime.Of());
     }
     else
     {
         return(WorkLoad / Resources);
     }
 }
Esempio n. 8
0
        /// <summary>DRAGを求める</summary>
        /// <returns>DRAG</returns>
        /// <remarks>
        /// アクティビティの所要時間をゼロにした場合の完了時間の変化
        /// 非クリティカル・パスの場合はゼロ
        /// クリティカル・パスの場合は並列アクティビティの有無で変化する
        /// </remarks>
        public LeadTime Drag()
        {
            if (Children.IsNullOrEmpty())
            {
                return(Duration());
            }
            var originalEndTime  = Descendants.Where(d => d.Children.IsEmpty()).First().EarliestFinish().Value;
            var originalFixTime  = FixTime;
            var originalWorkload = WorkLoad;

            Estimate(LeadTime.Of());
            Estimate(WorkLoad.Of());
            var shortenedEndTime = Descendants.Where(d => d.Children.IsEmpty()).First().EarliestFinish().Value;
            var drag             = originalEndTime - shortenedEndTime;

            Estimate(originalFixTime);
            Estimate(originalWorkload);
            return(LeadTime.Of(drag));
        }
Esempio n. 9
0
        /// <summary>静的ファクトリーメソッド</summary>
        /// <param name="unitOfCurrency">通貨単位</param>
        /// <param name="unitOfTime">時間単位</param>
        /// <param name="term">プロジェクト期間</param>
        /// <param name="badjet"></param>
        /// <param name="liquidatedDamages"></param>
        /// <returns></returns>
        public static Project Define(
            Currency unitOfCurrency   = Currency.JPY,
            TimeType unitOfTime       = TimeType.Day,
            decimal term              = 0m,
            decimal badjet            = 0m,
            decimal liquidatedDamages = 0m
            )
        {
            var project = new Project()
            {
                UnitOfCurrency    = unitOfCurrency,
                UnitOfTime        = unitOfTime,
                Term              = LeadTime.Of(term),
                Badjet            = Money.Of(badjet),
                LiquidatedDamages = Money.Of(liquidatedDamages),
            };

            project.Start.Precede(project.End);
            project.Activities = new[] { project.Start, project.End };
            return(project);
        }