/// <summary> /// Creert een order uit het gegeven viewmodel /// </summary> /// <param name="dto">Viewmodel met de nodige data voor het aanmaken van een nieuw order</param> /// <returns>Nieuw aangemaakt order</returns> /// <exception cref="EntityNotFoundException">Wordt gegooid wanneer een persoon in het order of in een orderline niet gevonden werd.</exception> public async Task <Order> CreateOrder(CreateOrderDTO dto, string userEmail) { var orderedBy = await _leidingRepository.FindByEmailAsync(userEmail); if (orderedBy == null) { throw new EntityNotFoundException($"Besteller '{userEmail}' werd niet gevonden."); } var newOrder = Order.Create(orderedBy); await _orderRepository.AddAsync(newOrder); foreach (var lineModel in dto.Orderlines) { var drank = await _drankRepository.FindByIdAsync(lineModel.DrankId); if (drank == null) { throw new EntityNotFoundException($"Drank met id {lineModel.DrankId} werd niet gevonden"); } var orderedFor = await _leidingRepository.FindByIdAsync(lineModel.OrderedForId); if (orderedFor == null) { throw new EntityNotFoundException($"Persoon met id {lineModel.OrderedForId} werd niet gevonden."); } var personCanOrder = orderedFor.Tak.TabIsAllowed; if (!personCanOrder) { throw new InvalidOperationException($"Leden van {orderedFor.Tak.Naam} kunnen geen gebruik maken van de Poef."); } var orderline = Orderline.Create(drank, orderedFor, newOrder, lineModel.Quantity); await _orderlineRepository.AddAsync(orderline); //Create a transaction for the submitted order var amount = orderline.DrinkPrice * orderline.Quantity; amount = -amount; var transaction = new Transaction(amount, $"{orderline.Quantity}x {orderline.Drank.Naam}"); var account = await _accountRepository.FindAccountAsync(orderedFor.Id, AccountType.Tab); if (account == null) { account = await _accountService.CreateAccountAsync(orderedFor.Id); } account.AddTransaction(transaction); } await _orderRepository.SaveChangesAsync(); return(newOrder); }
public async Task <Drank> GetDrankById(int drankId) { var drank = await _drankRepository.FindByIdAsync(drankId); if (drank == null) { throw new EntityNotFoundException($"Drank met id {drankId} werd niet gevonden."); } return(drank); }