示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }