public async Task<IHttpActionResult> PostFinishedOrder(FinishedOrder finishedOrder) { if (!ModelState.IsValid) { return BadRequest(ModelState); } db.FinishedOrders.Add(finishedOrder); await db.SaveChangesAsync(); db.Entry(finishedOrder).Reference(x => x.AuthorBuy).Load(); db.Entry(finishedOrder).Reference(x => x.AuthorSell).Load(); var dto = new FinishedOrderDTO() { Id = finishedOrder.Id, Price = finishedOrder.Price, Quantity = finishedOrder.Quantity, CommentBuy = finishedOrder.CommentBuy, CommentSell = finishedOrder.CommentSell, DateBuy = finishedOrder.DateBuy, DateSell = finishedOrder.DateSell, DateFinished = DateTime.Now, AuthorBuyName = finishedOrder.AuthorBuy.UserName, AuthorSellName = finishedOrder.AuthorSell.UserName, }; return CreatedAtRoute("DefaultApi", new { id = finishedOrder.Id }, dto); }
public async Task<IHttpActionResult> GetFinishedOrders() { // Это надо было бы повесить в какой-нибудь ncron, но у меня его нету =( { var buyOrders = (from a in db.BuyOrders select a).ToList(); var sellOrders = (from b in db.SellOrders select b).ToList(); foreach (SellOrder sellItem in sellOrders) { var goodBuyOrders = (from order in buyOrders where order.Price >= 1 orderby order.Price select order).ToList(); foreach (BuyOrder order in goodBuyOrders) { var finishedCount = sellItem.Quantity - order.Quantity; if (finishedCount > 0) { var finishedOrder = new FinishedOrder() { Price = order.Price, Quantity = order.Quantity, CommentBuy = order.Comment, CommentSell = sellItem.Comment, DateBuy = order.Date, DateSell = sellItem.Date, DateFinished = DateTime.Now, AuthorBuyId = order.AuthorId, AuthorSellId = sellItem.AuthorId }; db.FinishedOrders.Add(finishedOrder); sellItem.Quantity -= order.Quantity; db.BuyOrders.Remove(order); db.SellOrders.Attach(sellItem); db.Entry(sellItem).State = EntityState.Modified; } if (finishedCount < 0) { var finishedOrder = new FinishedOrder() { Price = order.Price, Quantity = sellItem.Quantity, CommentBuy = order.Comment, CommentSell = sellItem.Comment, DateBuy = order.Date, DateSell = sellItem.Date, DateFinished = DateTime.Now, AuthorBuyId = order.AuthorId, AuthorSellId = sellItem.AuthorId }; db.FinishedOrders.Add(finishedOrder); order.Quantity -= sellItem.Quantity; db.BuyOrders.Attach(order); db.Entry(order).State = EntityState.Modified; db.SellOrders.Remove(sellItem); } if (finishedCount == 0) { var finishedOrder = new FinishedOrder() { Price = order.Price, Quantity = sellItem.Quantity, CommentBuy = order.Comment, CommentSell = sellItem.Comment, DateBuy = order.Date, DateSell = sellItem.Date, DateFinished = DateTime.Now, AuthorBuyId = order.AuthorId, AuthorSellId = sellItem.AuthorId }; db.FinishedOrders.Add(finishedOrder); db.BuyOrders.Remove(order); db.SellOrders.Remove(sellItem); } await db.SaveChangesAsync(); } } // } var orders = await db.FinishedOrders.Include(b => b.AuthorBuy).Include(b => b.AuthorSell).Select(b => new FinishedOrderDTO() { Id = b.Id, Price = b.Price, Quantity = b.Quantity, CommentBuy = b.CommentBuy, CommentSell = b.CommentSell, DateBuy = b.DateBuy, DateSell = b.DateSell, DateFinished = b.DateFinished, AuthorBuyName = b.AuthorBuy.UserName, AuthorSellName = b.AuthorSell.UserName }).ToListAsync(); return Ok(orders); }
public async Task<IHttpActionResult> PutFinishedOrder(int id, FinishedOrder finishedOrder) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != finishedOrder.Id) { return BadRequest(); } db.Entry(finishedOrder).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!FinishedOrderExists(id)) { return NotFound(); } else { throw; } } return StatusCode(HttpStatusCode.NoContent); }