private async Task <EditStrategyViewModel> GetViewModel(int?id) { var model = new EditStrategyViewModel { Indicators = _indicatorsService.GetIndicatorsAvailableForStrategies().Select(dto => new EditIndicatorViewModel() { Name = dto.IndicatorName, Type = dto.IndicatorType }).ToList(), }; foreach (var indicator in model.Indicators) { var properties = _indicatorsService.GetPropertiesForIndicator(indicator.Type); indicator.Properties = properties.Select(p => new IndicatorPropertyViewModel { Name = p.Name, Value = p.Value }).ToList(); var description = _indicatorsService.GetIndicatorDescription(indicator.Type); indicator.BuySignalDescription = description.BuySignalDescription; indicator.SellSignalDescription = description.SellSignalDescription; } if (id.HasValue) { model.Id = id; await FillIndicatorValues(id, model); } return(model); }
private async Task FillIndicatorValues(int?id, EditStrategyViewModel model) { var strategy = await _strategyService.GetStrategy(CurrentUserId, id.Value); model.IsConjunctiveStrategy = strategy.IsConjunctiveStrategy; model.SignalDaysPeriod = strategy.SignalDaysPeriod ?? 1; model.Name = strategy.Name; foreach (var parameterizedIndicator in strategy.Indicators.Where(t => t.IndicatorType.HasValue)) { var indicatorModel = model.Indicators.FirstOrDefault(m => m.Type == parameterizedIndicator.IndicatorType.Value); if (indicatorModel == null) { continue; } indicatorModel.IsSelected = true; foreach (var property in parameterizedIndicator.Properties) { var propertyModel = indicatorModel.Properties.FirstOrDefault(p => p.Name == property.Name); if (propertyModel == null) { continue; } propertyModel.Value = property.Value; } } }
private StrategyDto BuildCreateStrategyDto(EditStrategyViewModel model) { var dto = new StrategyDto { Name = model.Name, UserId = CurrentUserId, Id = model.Id ?? 0, Indicators = model.Indicators.Select(i => new ParameterizedIndicator { IndicatorType = i.Type, Properties = i.Properties .Where(p => !string.IsNullOrWhiteSpace(p.Name)) .Select(p => new IndicatorProperty { Name = p.Name, Value = p.Value }).ToList() }).ToList(), SignalDaysPeriod = model.IsConjunctiveStrategy ? (int?)model.SignalDaysPeriod : null }; return(dto); }
public async Task <ActionResult> EditStrategy(EditStrategyViewModel model) { if (!model.Indicators?.Any() ?? false) { return(JsonErrorResult("Strategy must have at least one indicator")); } if (!ModelState.IsValid) { return(JsonErrorResult(ModelState)); } var dto = BuildCreateStrategyDto(model); int?id = model.Id; if (model.Id.HasValue) { await _strategyService.UpdateStrategy(dto); } else { id = await _strategyService.CreateStrategy(dto); } ShowNotification("", "Strategy has been saved", ToastType.Success); return(new JsonNetResult(new { id, redirectUrl = Url.Action("Index") })); }