/// <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 <BasicLeaderDTO> UpdateLeader(int leaderId, UpdateLeaderDTO dto) { var leader = await _leidingRepository.FindByIdAsync(leaderId); if (leader == null) { throw new EntityNotFoundException($"Leiding met id {leaderId} werd niet gevonden."); } leader.Email = dto.Email?.Trim().ToLower(); leader.Naam = dto.Naam.Trim(); leader.Voornaam = dto.Voornaam.Trim(); leader.LeidingSinds = dto.LeidingSinds.ToLocalTime(); leader.DatumGestopt = dto.DatumGestopt.ToLocalTime(); await _leidingRepository.SaveChangesAsync(); var model = _mapper.Map <BasicLeaderDTO>(leader); return(model); }
[HttpGet("{id}", Name = "GetLeidingById")] //GET /api/leiding/id // [Authorize(Roles = "financieel_verantwoordelijke")] public async Task <IActionResult> GetById([FromRoute] int id) { var leiding = await _leidingRepository.FindByIdAsync(id); var model = _mapper.Map <BasicLeaderDTO>(leiding); if (leiding == null) { return(NotFound($"Leiding met id {id} werd niet gevonden")); } return(Ok(model)); }
public async Task <BasicTotemEntryDTO> AddEntryAsync(CreateTotemEntryDTO viewmodel) { var leiding = await _leidingRepository.FindByIdAsync(viewmodel.LeidingId); if (leiding == null) { throw new EntityNotFoundException($"Leiding met id {viewmodel.LeidingId} bestaat niet."); } //Check if leiding already has a totem var totemForLeiding = await _totemEntryRepository.FindByLeidingIdAsync(leiding.Id); if (totemForLeiding != null) { throw new EntityExistsException( $"{totemForLeiding.Leiding.Voornaam} {totemForLeiding.Leiding.Naam} heeft al een totem."); } var totem = await _totemRepository.FindByIdAsync(viewmodel.TotemId); if (totem == null) { throw new EntityNotFoundException($"Totem met id {viewmodel.TotemId} werd niet gevonden"); } var adjectief = await _adjectiefRepository.FindByIdAsync(viewmodel.AdjectiefId); if (adjectief == null) { throw new EntityNotFoundException($"Adjectief met id {viewmodel.AdjectiefId} werd niet gevonden"); } var newEntry = new TotemEntry { Adjectief = adjectief, DatumGegeven = viewmodel.DatumGegeven.ToLocalTime(), Leiding = leiding, Totem = totem }; if (viewmodel.VoorouderId != 0) { var voorouder = await _totemEntryRepository.FindByIdAsync(viewmodel.VoorouderId); if (voorouder == null) { throw new EntityNotFoundException($"Voorouder met id {viewmodel.VoorouderId} werd niet gevonden."); } newEntry.Voorouder = voorouder; } await _totemEntryRepository.AddAsync(newEntry); await _totemEntryRepository.SaveChangesAsync(); var model = _mapper.Map <BasicTotemEntryDTO>(newEntry); return(model); }