/// <summary>
        /// Переместить этап вниз
        /// </summary>
        /// <param name="stage">Этап</param>
        public virtual void MoveStageDown(ProductionOrderBatchLifeCycleTemplateStage stage)
        {
            if (!stages.Contains(stage))
            {
                throw new Exception("Этап не найден. Возможно, он был удален.");
            }

            if (stage.IsDefault)
            {
                throw new Exception("Невозможно переместить системный этап.");
            }

            RecalculateOrdinalNumbers();

            var otherStage = stages.Where(x => x.OrdinalNumber == stage.OrdinalNumber + 1).SingleOrDefault();

            ValidationUtils.NotNull(otherStage, "Невозможно переместить этап.");

            if (otherStage.IsDefault)
            {
                throw new Exception("Невозможно переместить этап.");
            }

            var tempOrdinalNumber = stage.OrdinalNumber;

            stage.OrdinalNumber      = otherStage.OrdinalNumber;
            otherStage.OrdinalNumber = tempOrdinalNumber;
            CheckStageOrder();
        }
        /// <summary>
        /// Добавить этап после этапа с заданным порядковым номером
        /// </summary>
        /// <param name="stage">Этап</param>
        /// <param name="position">Порядковый номер этапа, после которого осуществляется вставка</param>
        public virtual void AddStage(ProductionOrderBatchLifeCycleTemplateStage stage, short position)
        {
            if (position < 1 || position > StageCount - 2)
            {
                throw new Exception("Невозможно вставить этап на заданную позицию.");
            }

            RecalculateOrdinalNumbers();

            var stageList = new List <ProductionOrderBatchLifeCycleTemplateStage>(Stages.OrderBy(x => x.OrdinalNumber));

            foreach (var productionOrderBatchLifeCycleTemplateStage in stageList)
            {
                if (productionOrderBatchLifeCycleTemplateStage.OrdinalNumber > position)
                {
                    productionOrderBatchLifeCycleTemplateStage.OrdinalNumber++;
                }
            }

            stages.Add(stage);
            stage.Template      = this;
            stage.OrdinalNumber = (short)(position + 1);

            CheckStageOrder();
        }
Ejemplo n.º 3
0
 public ProductionOrderBatchStage(ProductionOrderBatchLifeCycleTemplateStage productionOrderBatchLifeCycleTemplateStage)
 {
     this.name            = productionOrderBatchLifeCycleTemplateStage.Name;
     this.type            = productionOrderBatchLifeCycleTemplateStage.Type;
     this.plannedDuration = productionOrderBatchLifeCycleTemplateStage.PlannedDuration;
     InWorkDays           = productionOrderBatchLifeCycleTemplateStage.InWorkDays;
     IsDefault            = productionOrderBatchLifeCycleTemplateStage.IsDefault;
 }
 /// <summary>
 /// Добавить этап в конец списка (применяется только для системных этапов)
 /// </summary>
 /// <param name="stage"></param>
 public virtual void AddStage(ProductionOrderBatchLifeCycleTemplateStage stage)
 {
     RecalculateOrdinalNumbers();
     stages.Add(stage);
     stage.Template      = this;
     stage.OrdinalNumber = (short)StageCount;
     CheckStageOrder();
 }
        public ProductionOrderBatchLifeCycleTemplate(string name, ProductionOrderBatchLifeCycleTemplateStage calculationStage,
                                                     ProductionOrderBatchLifeCycleTemplateStage successfullClosingStage, ProductionOrderBatchLifeCycleTemplateStage unsuccessfulClosingStage)
        {
            ValidationUtils.Assert(!String.IsNullOrEmpty(name), "Название шаблона не указано.");
            Name = name;

            ValidationUtils.NotNull(calculationStage, "Не указан один из системных этапов.");
            ValidationUtils.NotNull(successfullClosingStage, "Не указан один из системных этапов.");
            ValidationUtils.NotNull(unsuccessfulClosingStage, "Не указан один из системных этапов.");

            stages = new HashedSet <ProductionOrderBatchLifeCycleTemplateStage>();

            AddStage(calculationStage);
            AddStage(successfullClosingStage);
            AddStage(unsuccessfulClosingStage);
        }
        /// <summary>
        /// Удалить этап
        /// </summary>
        /// <param name="stage">Этап</param>
        public virtual void DeleteStage(ProductionOrderBatchLifeCycleTemplateStage stage)
        {
            if (!stages.Contains(stage))
            {
                throw new Exception("Этап не найден. Возможно, он был удален.");
            }

            if (stage.IsDefault)
            {
                throw new Exception("Невозможно удалить системный этап.");
            }

            stage.Template = null;
            stages.Remove(stage);
            RecalculateOrdinalNumbers();
            CheckStageOrder();
        }