コード例 #1
0
        public void CreatePortfolio(string cmdString)
        {
            CreatePortfolioCommand cmd = Newtonsoft.Json.JsonConvert.DeserializeObject <CreatePortfolioCommand>(cmdString);

            Models.ViewModel.OptimalPortoliosViewModel vm = new Models.ViewModel.OptimalPortoliosViewModel();
            string userName = "";

            try
            {
                var  userId = WebApiApplication.hubUsers.FirstOrDefault(x => x.Value == Context.ConnectionId).Key;
                User user   = _userService.GetUser(userId).User;
                userName = user.Username;
                vm       = _service.CreatePortfolio(user, cmd);
            }
            catch (Exception e)
            {
                vm.Messages.Add(new Models.App.Message {
                    Text = e.Message, LogLevel = Models.App.LogLevel.Error
                });
            }
            if (!string.IsNullOrEmpty(userName) && vm.Messages.Count == 0)
            {
                CacheHelper.Delete(userName + "portfolio");
            }
            Clients.Caller.update(Newtonsoft.Json.JsonConvert.SerializeObject(vm));
        }
コード例 #2
0
        }//openSelectedPortfolio

        #endregion Open portfolio

        #region Create portfolio

        public int CreateDefaultPortfolio(User user, CreatePortfolioCommand cmd)
        {
            m_objPortfolio.Details              = new PortfolioDetails();
            m_objPortfolio.Details.Code         = getRandomPortfolioCode();
            m_objPortfolio.Details.Name         = cmd.Name;
            m_objPortfolio.Details.CurrEquity   = (float)cmd.Equity;
            m_objPortfolio.Details.PreferedRisk = m_objPortfolio.GetRisk(cmd.Risk);
            //m_objPortfolio.Details.CalcCurrency = user.Currency.CurrencyId;
            m_objPortfolio.Details.DateCreated = DateTime.Now;
            m_objPortfolio.Details.DateEdited  = DateTime.Now;
            m_objPortfolio.Details.Equity      = (float)cmd.Equity;
            //m_objPortfolio.Details.MaxSecs = user.Licence.Service.SecsPerPort;
            m_objPortfolio.Details.CalcType         = cmd.CalcType;
            m_objPortfolio.Details.LastOptimization = DateTime.Now;
            m_objPortfolio.Details.UserID           = user.UserID;
            m_objPortfolio.Details.CurrentStDev     = cmd.Risk;
            m_objPortfolio.Details.isManual         = cmd.Securities.Count > 0;

            var port = AutoMapper.Mapper.Map <Entities.dbo.Portfolio>(m_objPortfolio.Details);

            m_objPortfolio.Details.ID = port.idPortfolio;

            //LR on 13_09_18
            cmd.Exchanges = cmd.Exchanges != null && cmd.Exchanges.Count > 0 &&
                            cmd.Exchanges.Count <= user.Licence.Stocks.Count ? cmd.Exchanges : user.Licence.Stocks.Select(t => t.id).ToList();

            repository.Execute(session =>
            {
                port.CalcCurrency = user.Licence.Stocks.Where(x => cmd.Exchanges.Contains(x.id)).OrderBy(s => s.CurrencyRank).FirstOrDefault().Currency;
                session.SaveOrUpdate(port);
            });

            return(port.idPortfolio);
        }
コード例 #3
0
        public async Task <ActionResult <Portfolio> > CreateAsync([FromBody] CreatePortfolioCommand createPortfolioCommand)
        {
            var userId       = User.GetUserId();
            var newPortfolio = await _portfolioRepository.CreatePortfolio(userId, createPortfolioCommand.Name);

            return(Ok(newPortfolio));
        }
コード例 #4
0
        public OptimalPortoliosViewModel CreatePortfolio(User user, CreatePortfolioCommand cmd)
        {
            if (cmd.CalcType == enumEfCalculationType.Custom && cmd.Exchanges.Count < 1)
            {
                for (int i = 0; i < user.Licence.Stocks.Count; i++)
                {
                    cmd.Exchanges.Add(Convert.ToInt32(user.Licence.Stocks[i].id));
                }
            }

            OptimalPortoliosViewModel vm = new OptimalPortoliosViewModel();
            var portID = 0;
            var count  = cPortHandler.GetPortfolioCount(user.UserID);

            if (count < user.Licence.Service.Iportfolios)
            {
                portID = cPortHandler.CreateDefaultPortfolio(user, cmd);
            }
            else
            {
                vm.Messages.Add(new Message {
                    LogLevel = LogLevel.Error, Text = "You've exceeded the number of portfolios you can create. Please delete any unwanted portfolios"
                });
            }
            if (portID > 0)
            {
                vm = opService.GetPortfolioOptimazation(user, new Models.Queries.OptimazationQuery
                {
                    CalcType   = cmd.CalcType,
                    PortID     = portID,
                    Securities = cmd.Securities,
                    Exchanges  = cmd.Exchanges,
                    Risk       = cmd.Risk //LR on 18/07/18
                });
                if (vm.Messages.Count == 0)
                {
                    cPortHandler.SelectedPortfolio.Details.LastOptimization = DateTime.Today;
                    cPortHandler.SelectedPortfolio.Details.SecsNum          = vm.Portfolios[vm.PortNumA].Securities.Count;
                    cPortHandler.SelectedPortfolio.Details.CurrentStDev     = vm.Portfolios[vm.PortNumA].Risk;
                    UpdatePortfolioCommand updCmd = new UpdatePortfolioCommand
                    {
                        CalcType   = cPortHandler.SelectedPortfolio.Details.CalcType,
                        Equity     = cmd.Equity,
                        Risk       = vm.Portfolios[vm.PortNumA].Risk,
                        PortID     = portID,
                        Securities = vm.Portfolios[vm.PortNumA].Securities
                    };
                    cPortHandler.UpdatePortfolio(updCmd);
                }
                else
                {
                    cPortHandler.DeletePortfolio(portID);
                }
            }

            return(vm);
        }
コード例 #5
0
        private void GetAsyncResponse(User user, CreatePortfolioCommand cmd, HttpContext context)
        {
            HttpContext.Current = new HttpContext(context.Request, context.Response);

            service = WebApiApplication.Container.Resolve <IPortfolioService>();
            var vm = service.CreatePortfolio(user, cmd);

            WebApiApplication.Container.Release(service);
            //CacheHelper.Delete(user.Username + "portfolio");
            this.Hub.Clients.Client(WebApiApplication.hubUsers[user.UserID]).update(Newtonsoft.Json.JsonConvert.SerializeObject(vm));
        }
コード例 #6
0
        public IHttpActionResult Post(CreatePortfolioCommand cmd)
        {
            if (!WebApiApplication.isComplete)
            {
                return(Ok(new BaseViewModel()
                {
                    Messages = new List <Models.App.Message>()
                    {
                        new Models.App.Message {
                            Text = Messages.SecuritiesAreLoading, LogLevel = Models.App.LogLevel.Info
                        }
                    }
                }));
            }
            if (user.Licence.ExpiryDate < DateTime.Today)
            {
                return(Ok(new BaseViewModel {
                    Messages = new List <Models.App.Message>()
                    {
                        new Models.App.Message {
                            Text = Messages.LicenseExpired, LogLevel = Models.App.LogLevel.Error
                        }
                    }
                }));
            }
            //var res = service.CreatePortfolio(user, cmd);
            //return Ok(res);
            HttpContext context = HttpContext.Current;
            var         vm      = service.IsMaxPortfolioExceeded(user);

            vm.Messages.AddRange(service.IsPortfolioExists(cmd.Name, user.UserID).Messages);
            if (vm.Messages.Count == 0)
            {
                Task t = new Task(delegate { GetAsyncResponse(user, cmd, context); });
                t.Start();
                return(Ok(new { Message = "Your portfolio is being created, you will be notified when the portfolio is ready." }));
            }
            return(Ok(new { Message = vm.Messages[0].Text }));
        }
コード例 #7
0
        public async Task <IActionResult> PostAsync([FromBody] CreatePortfolioCommand command)
        {
            var commandResult = await _mediator.Send(command);

            return(Response(commandResult));
        }