public CreateStockViewModel(IEventAggregator eventAggregator, IStocksService stocksService)
 {
     model = new CreateStockModel();
     this.eventAggregator = eventAggregator;
     this.stocksService   = stocksService;
     AddValidationRules();
 }
Esempio n. 2
0
        public ActionResult Create(CreateStockModel input)
        {
            var item = _itemRepo.Find(input.ItemId);

            if (item == null)
            {
                return(HttpNotFound("Cannot find item with specified itemId"));
            }

            if (ModelState.IsValid)
            {
                _itemRepo.AddStocks(item.Id, CreateStockModel.Explode(input));

                LogActivity(string.Format("added {0} stock items to ", input.Quantity),
                            TimelineActivityObjectType.Item, item.Name, item.Id);

                FlashSuccess(string.Format("added {0} stock items to {1}", input.Quantity, item.Name));

                return(RedirectToAction("Details", "Items", new { id = input.ItemId }));
            }

            ViewBag.StockConditionId = new SelectList(Db.StockConditions, "Id", "Name", input.StockConditionId);

            input = new CreateStockModel {
                ItemId = input.ItemId, Item = item
            };

            return(View(input));
        }
Esempio n. 3
0
        public ActionResult Create(int id)
        {
            ViewBag.StockConditionId = new SelectList(Db.StockConditions, "Id", "Name");

            var item = _itemRepo.Find(id);

            if (item == null)
            {
                return(HttpNotFound("Cannot find item with given ID"));
            }

            var stockModel = CreateStockModel.Create(item);

            return(View(stockModel));
        }
Esempio n. 4
0
        public async Task <IActionResult> ListNewStock(CreateStockModel model)
        {
            // Validate model
            if (!ModelState.IsValid)
            {
                return(View());
            }

            // Additional validations
            Group group = await _context.Groups.FindAsync(model.Group_Id);

            if (group == null)
            {
                StatusMessage = $"Failed: Could not find group {model.Group_Id}";
                return(View());
            }

            // Check if group already has a stock
            if (_context.StockDefinitions.Any(s => s.Group_Id == model.Group_Id))
            {
                StatusMessage = $"Failed: {group.Name} already has a stock!";
                return(View());
            }

            if (model.Amount < 0)
            {
                StatusMessage = $"Failed: Amount must be positive!";
                return(View());
            }

            if (model.Keep < 0)
            {
                StatusMessage = $"Failed: Keep must be positive!";
                return(View());
            }

            // Check if ticker is taken
            if (_context.StockDefinitions.Any(s => s.Ticker == model.Ticker))
            {
                StatusMessage = $"Failed: A ticker {model.Ticker} already exists!";
                return(View());
            }

            if (model.Initial_Value < 1)
            {
                StatusMessage = $"Failed: Initial value must be greater or equal to 1!";
                return(View());
            }

            if (model.Keep > model.Amount)
            {
                StatusMessage = $"Failed: Keep must be less than Amount!";
                return(View());
            }

            // Create stock definition
            StockDefinition stockDef = new StockDefinition()
            {
                Ticker        = model.Ticker,
                Group_Id      = model.Group_Id,
                Current_Value = model.Initial_Value
            };

            // Add stock definition to database
            await _context.StockDefinitions.AddAsync(stockDef);

            // Create stock object for keeping
            StockObject keepStock = new StockObject()
            {
                Id       = Guid.NewGuid().ToString(),
                Amount   = model.Keep,
                Owner_Id = model.Group_Id,
                Ticker   = model.Ticker,
            };

            // Add
            await _context.StockObjects.AddAsync(keepStock);

            // Create stock sale for issued part
            StockOffer sellOffer = new StockOffer()
            {
                Id         = Guid.NewGuid().ToString(),
                Order_Type = "SELL",
                Target     = model.Initial_Value,
                Ticker     = model.Ticker,
                Amount     = model.Amount - model.Keep,
                Owner_Id   = model.Group_Id
            };

            // Add
            await _context.StockOffers.AddAsync(sellOffer);

            // Save changes if successful
            await _context.SaveChangesAsync();

            StatusMessage = $"Successfully issued {model.Amount} ${model.Ticker}";
            await VoopAI.ecoChannel.SendMessageAsync($":new: Welcome {model.Amount} {model.Ticker}, from {group.Name} to the market at ¢{model.Initial_Value}, with an initial {sellOffer.Amount} on the market!");

            return(RedirectToAction("Index"));
        }