/// <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(); }
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(); }