public ActionResult CreateStatsExample(long typeId, [DataSourceRequest] DataSourceRequest request, StatsExampleModel model)
        {
            if(model != null && this.ModelState.IsValid)
            {
                try
                {
                    var guid = Guid.NewGuid().ToString("N");
                    using(var ctx = new DataModelContext())
                    {
                        var newExample = new StatsExample
                        {
                            Timestamp = DateTime.Now,
                            Name = model.Name,
                            IdLink = guid,
                            StatsTypeId = typeId
                        };
                        ctx.StatsExamples.Add(newExample);
                        //
                        ctx.SaveChanges();
                    }
                } catch(Exception ex)
                {
                    LogManager.GetCurrentClassLogger().Error(ex);
                    this.ModelState.AddModelError("save_error", ex.Message);
                }
            }

            return this.Json(new[] {model}.ToDataSourceResult(request, this.ModelState));
        }
 public ActionResult DeleteStatsExample([DataSourceRequest] DataSourceRequest request, StatsExampleModel model)
 {
     try
     {
         if(model != null)
         {
             using(var ctx = new DataModelContext())
             {
                 var example = ctx.StatsExamples.Include("StatsType").Include("Orders").Single(e => e.Id == model.Id);
                 example.Deleted = true;
                 var lastOrder = example.Orders.OrderBy(o => o.Index).LastOrDefault();
                 if(lastOrder != null && !lastOrder.ClosePrice.HasValue)
                 {
                     using(var client = new OrderServiceClient())
                     {
                         var response = client.GetPrice(new GetPriceDataContractRequest {SymbolId = example.StatsType.TypeId});
                         if(!string.IsNullOrEmpty(response.Error))
                         {
                             LogManager.GetCurrentClassLogger().Error(response.Error);
                         }
                         var price = response.Price;
                         if(price.HasValue)
                         {
                             var typeConfig = ((TransactionTypesConfigSection)ConfigurationManager.GetSection("TransactionTypesConfig")).Types.Cast<TypeElementConfig>().ToList().Single(tc => tc.Id == example.StatsType.TypeId);
                             lastOrder.ClosePrice = lastOrder.OrderType == OrderTypes.Buy ?
                                 Math.Round(price.Value - Settings.Default.Spread * typeConfig.SpreadTickValue, HomeController.GetDecimalDigits(typeConfig.SpreadTickValue))
                                 : Math.Round(price.Value + Settings.Default.Spread * typeConfig.SpreadTickValue, HomeController.GetDecimalDigits(typeConfig.SpreadTickValue));
                             lastOrder.Pips = Convert.ToInt32(Math.Round((lastOrder.OrderType == OrderTypes.Buy ? (lastOrder.ClosePrice.Value - lastOrder.OpenPrice) : (lastOrder.OpenPrice - lastOrder.ClosePrice.Value)) / typeConfig.SpreadTickValue, 0));
                             // Log
                             var log = OrderLog.CreateLog(lastOrder, OrderLogTypes.Close);
                             ctx.OrderLogs.Add(log);
                         }
                     }
                 }
                 //
                 ctx.SaveChanges();
             }
         }
     } catch(Exception ex)
     {
         LogManager.GetCurrentClassLogger().Error(ex);
     }
     //
     return this.Json(new[] {model}.ToDataSourceResult(request, this.ModelState));
 }
 public ActionResult UpdateStatsExample([DataSourceRequest] DataSourceRequest request, StatsExampleModel model)
 {
     if(model != null && this.ModelState.IsValid)
     {
         try
         {
             using(var ctx = new DataModelContext())
             {
                 var example = ctx.StatsExamples.Find(model.Id);
                 example.Name = model.Name;
                 ctx.SaveChanges();
             }
         } catch(Exception ex)
         {
             LogManager.GetCurrentClassLogger().Error(ex);
             this.ModelState.AddModelError("save_error", ex.Message);
         }
     }
     //
     return this.Json(new[] {model}.ToDataSourceResult(request, this.ModelState));
 }