예제 #1
0
        private static NextCompliance _calculate(DateTime lastDate, Lifelength repeat)
        {
            var res = new NextCompliance();

            res.NextDate = lastDate.AddDays(repeat.Days.Value);
            //Считаем Remain
            var days = (res.NextDate.Value - DateTime.Today).Days;

            res.Remains = new Lifelength(days, null, null);

            if (res.Remains.Days < 0)
            {
                res.Condition = ConditionState.Overdue;
            }
            else if (res.Remains.Days >= 0 && res.Remains.Days <= _notify)
            {
                res.Condition = ConditionState.Notify;
            }
            else
            {
                res.Condition = ConditionState.Satisfactory;
            }

            return(res);
        }
예제 #2
0
        public static void CalculateEducation(CAAEducationRecord record, DateTime?to = null)
        {
            if (record == null)
            {
                return;
            }

            if (record.Settings.IsClosed)
            {
                return;
            }

            var repeat = record.Education?.Task?.Repeat;

            if (repeat != null && (bool)repeat?.Days.HasValue)
            {
                if (to.HasValue)
                {
                    record.Settings.NextCompliances = new List <NextCompliance>();
                    NextCompliance next = null;
                    if (record.Settings.LastCompliances != null && record.Settings.LastCompliances.Any())
                    {
                        var last = record.Settings.LastCompliances.OrderBy(i => i.LastDate).Last().LastDate;
                        next = _calculate(last.Value, repeat);
                        record.Settings.NextCompliances.Add(next);


                        while (next.NextDate.Value <= to.Value)
                        {
                            next = _calculate(next.NextDate.Value, repeat);
                            record.Settings.NextCompliances.Add(next);
                        }
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    record.Settings.NextCompliance = new NextCompliance();

                    if (record.Settings.LastCompliances != null && record.Settings.LastCompliances.Any())
                    {
                        var last = record.Settings.LastCompliances.OrderBy(i => i.LastDate).Last().LastDate;
                        record.Settings.NextCompliance = _calculate(last.Value, repeat);
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }