public List <InvoiceRecalculationResult> RecalculateInvoiceInfo(int projectId, List <InvoiceUserRequest> invoiceUserRequest) { var recalculateInvocieInfoCommand = new RecalculateInvoiceInfoCommand { ProjectId = projectId, ByUserId = _currentUser.Id, InvoiceUserRequest = (invoiceUserRequest ?? new List <InvoiceUserRequest>()).ToList() }; _cqrs.Execute(recalculateInvocieInfoCommand); return(recalculateInvocieInfoCommand.Result); }
public IEnumerable <IEvent <ProjectTimeAggregateRoot, int> > Execute(RecalculateInvoiceInfoCommand command) { CheckUserBillingRights(command.ProjectId, command.ByUserId); command.Result = new List <InvoiceRecalculationResult>(); var projectUsers = _projectService.GetProjectUserInfo(command.ProjectId); foreach (var projectUserInfo in projectUsers) { var userInvoiceInfo = command.InvoiceUserRequest.SingleOrDefault(r => r.UserId == projectUserInfo.UserId) ?? new InvoiceUserRequest { UserId = projectUserInfo.UserId, Hours = 0 }; var maxBillableHours = State.MaxBillableHours(userInvoiceInfo.UserId); if (maxBillableHours == 0) { continue; } var hours = Math.Min(userInvoiceInfo.Hours, maxBillableHours); var sum = State.CalculateInvoiceSum(userInvoiceInfo.UserId, hours); command.Result.Add(new InvoiceRecalculationResult { BillingHours = hours, MaxHours = maxBillableHours, UserId = userInvoiceInfo.UserId, Sum = sum }); } yield break; }