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); } } }
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); }