示例#1
0
        /// <summary>
        /// Формирует модель для представления с формой редактирования выбранных сделок
        /// </summary>
        /// <param name="positionId">Уникальные идентификаторы сделок, перечисленные через запятую</param>
        private PositionsEditModel GetPositionsEditModel(string positionId)
        {
            var idArray   = positionId.ToIntArrayUniform();
            var positions = positionRepository.GetPositionsById(idArray);
            var model     = new PositionsEditModel(positions);

            ViewBag.ListOfExitReason = new SelectList(from PositionExitReason e in Enum.GetValues(typeof(PositionExitReason))
                                                      select new { Id = (int)e, Name = e.ToString() }, "Id", "Name");
            return(model);
        }
示例#2
0
        public ActionResult SafePositionEdit(FormCollection formCollection)
        {
            var openPositionChangedPropertyList  = new List <SystemProperty>();
            var closePositionChangedPropertyList = new List <SystemProperty>();

            var strOpenId  = String.Empty; // содержит, перечисленные через запятую, уникальные идентификаторы открытых позиций, которые нужно обновить
            var strCloseId = String.Empty; // -- закрытых позиций, которые нужно обновить

            //Список ошибок валидации. Формат: Поле - коментарий к ошибке
            var validationErrorList = new List <Tuple <string, string> >();

            // Мапим коллекцию 'FormCollection' в списоки из элементов 'SystemProperty'
            // Элемент item имеет тут знаения типа "Open_Side", "Open_StopLoss" и т.п.
            foreach (var item in formCollection)
            {
                if (String.IsNullOrEmpty(formCollection[item.ToString()]))
                {
                    continue;  //Если строка оставлена пользователем пустой, тогда НЕ вносим это поле в список на редактирование
                }
                string type;
                string systemName;

                #region парсим тип свойства и его системное имя
                try
                {
                    type       = ((string)item).Split('_')[0];
                    systemName = ((string)item).Split('_')[1];
                }
                catch (Exception ex)
                {
                    Logger.Error(String.Format("SafePositionEdit() - не {0}", item), ex);
                    continue;
                }
                #endregion

                var prop = new SystemProperty
                {
                    SystemName = systemName,
                    Value      = formCollection[item.ToString()]
                };


                if (!prop.Validation())
                {
                    validationErrorList.Add(new Tuple <string, string>(systemName, Resource.ErrorMessageInvalid));
                    continue;
                }

                // Поскольку в следующем switch нет случаев 'OpenDanger_', 'CloseDanger_' и 'OtherDanger_' то в выборку на
                // редактирование попадут только "безопасные" поля сделок
                #region в зависимости от состояния сделки (открыта / закрыта), запихиваем её свойство в соответствующий список из 'SystemProperty'
                switch (type)
                {
                case "Open":
                    openPositionChangedPropertyList.Add(prop);
                    break;

                case "Close":
                    closePositionChangedPropertyList.Add(prop);
                    break;

                case "ItemsId":
                    if (systemName == "Open")
                    {
                        strOpenId = formCollection[item.ToString()];
                    }
                    if (systemName == "Close")
                    {
                        strCloseId = formCollection[item.ToString()];
                    }
                    break;
                }
                #endregion
            }

            var mess = string.Empty;

            mess += positionRepository.UpdateSavePositionItem(strOpenId, openPositionChangedPropertyList, PositionState.Opened) ?
                    string.Format("{0}: {1}", Resource.MessageMarketOrderUpdate, strOpenId) :
                    string.Format("{0}: {1} - {2}.", Resource.ErrorMessage, Resource.ErrorMessageUnableMarketOrderUpdate, strOpenId);
            mess += "   ";
            mess += positionRepository.UpdateSavePositionItem(strCloseId, closePositionChangedPropertyList, PositionState.Closed) ?
                    string.Format("{0}: {1}", Resource.MessageMarketOrderUpdate, strCloseId) :
                    string.Format("{0}: {1} - {2}.", Resource.ErrorMessage, Resource.ErrorMessageUnableMarketOrderUpdate, strCloseId);


            #region Если были найдены ошибки валидации возвращаем на ту же самую страницу редактирования, но уже со списком ошибок
            if (validationErrorList.Count > 0)
            {
                var idArray = String.Empty;
                if (!String.IsNullOrEmpty(strOpenId))
                {
                    idArray += strOpenId;
                }
                if (!String.IsNullOrEmpty(strCloseId))
                {
                    idArray += "," + strCloseId;
                }

                var positions = positionRepository.GetPositionsById(idArray.ToIntArrayUniform());
                var model     = new PositionsEditModel(positions)
                {
                    validationErrorList = validationErrorList
                };
                return(View("SafePositionEdit", model));
            }
            #endregion

            return(RedirectToAction("PositionList", new { message = mess, accountId = -1 }));
        }