Exemplo n.º 1
0
        public void FinalizeMaintenance(MaintenanceActual maintenance, DateTime end)
        {
            //Сохраняем дату завершения обслуживания
            maintenance.End = end;
            repository.Save(maintenance);

            var objectId = maintenance.Object.Id;

            //Найти интервалы объекта
            var intervals = query.FindMaintenanceIntervalsByObjectId(objectId);

            //Взять интересующий интервал по типу обслуживания
            var targetInterval = intervals.SingleOrDefault(x => x.MaintenanceType == maintenance.Type);

            if (targetInterval == null)
            {
                throw new Exception("Не найден интервал для данного вида обслуживания");
            }

            /* Выбрать интервалы для сброса. Сюда попадает интересующий нас интервал и более мелкие.
             * Т.е. Если проводится Средний ремонт, то сбрасываются Средний, Текущий и Обслуживание.
             */
            var intervalsForReset =
                intervals.Where(x => x.Quantity <= targetInterval.Quantity).ToDictionary(i => i.MaintenanceType, i => i);

            var last = query.FindLastMaintenanceByObjectId(objectId);

            last.ToList().ForEach(lm =>
            {
                if (intervalsForReset.ContainsKey(lm.MaintenanceType))
                {
                    lm.Reset(end);
                    repository.Save(lm);
                }
            });
        }