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);
        }
Пример #2
0
        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;
        }