Example #1
0
        /// <summary>
        /// Тестирует и определяет операцию на свободный допустимый рессурс
        /// прямым и обратным методом, т.е. прямым - по заданой дате начала, или обратным - по дате окончания
        /// </summary>
        /// <param name="orderNo">Номер заказа</param>
        /// <param name="knownDate">дата начала или окончания(например начало след. операции) в зависимости от метода</param>
        /// <param name="method">Перечисление направления поиска</param>
        /// <returns></returns>
        public bool ScheduleByOrderNo(string orderNo, ref DateTime knownDate, SearchDirection method)
        {
            OrderDTO orderList = ordRepo.GetByNo(orderNo);

            _preactor.RunEventScript("SMC");
            int?resId = resRepo.GetByNo(orderList.Resource)?.Id;

            foreach (OperationDTO ord in orderList.Operations)
            {
                resId = _preactor.PlanningBoard.FindResources(ord.Id).ElementAt(0);

                OperationTimes?times;
                if (method == SearchDirection.Backwards)
                {
                    times = _planningBoard.BackTestOpOnResource(ord.Id, (int)resId, knownDate);
                }
                else
                {
                    times = _planningBoard.TestOperationOnResource(ord.Id, (int)resId, knownDate);
                }

                if (!times.HasValue)
                {
                    return(false);
                }

                //knownDate = times.Value.ChangeStart;
                _planningBoard.PutOperationOnResource(ord.Id, (int)resId, knownDate);
                knownDate = _planningBoard.GetOperationTimes(ord.Id).Value.OperationTimes.ProcessEnd;
            }
            return(true);
        }