コード例 #1
0
 public ActionResult AddDeal()
 {
     FillFiltersToPositionList();
     var newPosition = new PositionItem
         {
             State = PositionState.Opened
         };
     return View(newPosition);
 }
コード例 #2
0
        public ActionResult AddDeal(PositionItem positionItem)
        {
            var dateTame = positionItem.StrTimeEnter.ToDateTimeUniformSafe(new DateTimeFormatInfo { DateSeparator = ".", ShortDatePattern = "dd.MM.yyyy" });
            FillFiltersToPositionList();
            if (ModelState.IsValid && dateTame.HasValue)
            {
                string msg;
                positionItem.TimeEnter = dateTame.Value;
                if (positionRepository.NewDeal(positionItem))
                {
                    msg = String.Format("{0}. {1} - {2}", Resource.MessageMarketOrderOpen, Resource.TitleStatus, positionItem.State);
                }
                else
                {
                    msg = String.Format("{0}: {1}", Resource.ErrorMessage, Resource.MessageMarketOrderOpen);
                }

                return RedirectToAction("PositionList", new { message = msg });
            }
            return View(positionItem);
        }
コード例 #3
0
        /// <summary>
        /// Открывает новую сделку в ручную
        /// </summary>
        /// <param name="positionItem">экземпляр модели данных</param>
        /// <returns>Удачно ли выполнено добавления сделки</returns>
        public bool NewDeal(PositionItem positionItem)
        {
            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    var acc = ctx.ACCOUNT.FirstOrDefault(a => a.ID == positionItem.AccountID);
                    Logger.Error("NewDeal - ошибка открытия сделки в ручную. Не удалось найти счёт с номером " +
                                 positionItem.AccountID);
                    if (acc == null) return false;

                    var newPosition = new POSITION
                        {
                            AccountID = positionItem.AccountID,
                            Symbol = positionItem.Symbol,
                            TimeEnter = positionItem.TimeEnter,
                            PriceEnter = positionItem.PriceEnter,
                            Volume = positionItem.Volume,
                            Side = positionItem.Side,
                            State = (int) positionItem.State
                        };

                    ctx.POSITION.Add(newPosition);
                    ctx.SaveChanges();
                }
            }
            catch (UpdateException ex)
            {
                Logger.Error("NewDeal - ошибка открытия сделки в ручную. Ошибка добавления в базу данных. Возможно сущьность с таким идентификатором уже существует или указаны некорректные параметры", ex);
                return false;
            }
            catch (Exception ex)
            {
                Logger.Error("NewDeal - ошибка открытия сделки в ручную", ex);
                return false;
            }
            return true;
        }
コード例 #4
0
        //TODO - Метод не оптимальный. Для каждой вытащенной записи из БД в цикле foreach производится мапинг в "PositionItem" (Для каждой по отдельности).
        //TODO - Метод не оптимальный. Происходи 2 обращения к БД - нуждо использовать join или unit
        /// <summary>
        /// Получить список сделок по их уникальным идентификаторам
        /// </summary>
        /// <param name="idList">Массив уникальных идентификаторов позиций, которые нужно получить</param>
        /// <remarks>Тестируется</remarks>
        public List<PositionItem> GetPositionsById(int[] idList)
        {
            var result = new List<PositionItem>();
            if (idList == null || idList.Length == 0) return result;
            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    // ReSharper disable LoopCanBeConvertedToQuery
                    foreach (var source in ctx.POSITION.Where(x => idList.Contains(x.ID)))
                        // ReSharper restore LoopCanBeConvertedToQuery
                    {
                        var marketOrder = LinqToEntity.DecorateOrder(source);
                        var positionItem = new PositionItem(marketOrder);
                        result.Add(positionItem);
                    }

                    // ReSharper disable LoopCanBeConvertedToQuery
                    foreach (var source in ctx.POSITION_CLOSED.Where(x => idList.Contains(x.ID)))
                        // ReSharper restore LoopCanBeConvertedToQuery
                    {
                        var marketOrder = LinqToEntity.DecorateOrder(source);

                        //var positionItem = marketOrder as PositionItem;

                        var positionItem = new PositionItem(marketOrder);
                        result.Add(positionItem);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("GetPositionsById()", ex);
            }
            return result;
        }