Exemplo n.º 1
0
        public async Task HandleAsync(FillOrdersToPaid command)
        {
            command.Orders = _mapper.Map <IEnumerable <OrderToPaidDTO> >((await _orderRepository.GetAllUnpaidAsync()).ToList());

            foreach (var order in command.Orders)
            {
                var teams = (await _context.OrderTeam.ToListAsync()).Where(x => x.OrderID == order.OrderID).ToList();

                if (teams == null)
                {
                    throw new ServiceException(ErrorCodes.Nieznaleziono, $"Nie znaleziono zespołów");
                }

                var days = DaysWithoutWeekends.Count(order.StartDate, order.EndDate);

                foreach (var teamID in teams)
                {
                    var team = _mapper.Map <TeamDTO>(await _teamRepository.GetAsync(teamID.TeamID));

                    if (team == null)
                    {
                        throw new ServiceException(ErrorCodes.Nieznaleziono, $"Nie znaleziono zespołu w bazie danych");
                    }


                    foreach (var worker in team.Workers)
                    {
                        order.PaymentCost += worker.ManHour * 8 * days;
                    }

                    order.Teams.Add(team);
                }
            }
        }
Exemplo n.º 2
0
        public async Task HandleAsync(PayOrder command)
        {
            if (command == null)
            {
                throw new ServiceException(ErrorCodes.PustyRequest, "Post request add/payment is empty");
            }

            var order = await _orderRepository.GetAsync(command.Order.OrderID);

            if (order == null)
            {
                throw new ServiceException(ErrorCodes.Nieznaleziono, $"Nie znaleziono zlecenia w bazie danych");
            }

            foreach (var teamID in command.Order.Teams)
            {
                var team = await _teamRepository.GetAsync(teamID.TeamID);

                if (team == null)
                {
                    throw new ServiceException(ErrorCodes.Nieznaleziono, $"Nie znaleziono zespołu w bazie danych");
                }

                var workers = (await _context.WorkerTeam.ToListAsync()).Where(x => x.TeamID == team.TeamID).ToList();

                if (!workers.Any())
                {
                    throw new ServiceException(ErrorCodes.Nieznaleziono, $"Nie znaleziono pracowników w bazie danych");
                }

                foreach (var ele in workers)
                {
                    var worker = await _workerRepository.GetAsync(ele.WorkerID);

                    var days = DaysWithoutWeekends.Count(order.StartDate, (DateTime)order.EndDate);

                    var payment = new Payment
                    {
                        OrderID     = command.Order.OrderID,
                        WorkerID    = worker.WorkerID,
                        Amount      = worker.ManHour * 8 * days,
                        PaymentDate = DateTime.UtcNow,
                        PaymentID   = Guid.NewGuid()
                    };

                    await _paymentRepository.AddAsync(payment);
                }
            }

            order.Paid = true;
            await _orderRepository.UpdateAsync(order);
        }