private void RecalculateSummary(int userId, int projectId, ProjectTimeAggregateRootState state)
        {
            var model = _models.GetOrAdd(userId, new ProjectUserSummary
            {
                ProjectId = projectId,
                UserId    = userId
            });

            model.ProjectTotalAmountEarned  = 0;
            model.ProjectTotalHoursReported = 0;
            model.UserTotalAmountEarned     = 0;
            model.UserTotalHoursReported    = 0;

            foreach (var dt in state.DailyTime)
            {
                var hoursReported = dt.TotalHours - dt.PaidHours;
                var amountEarned  = hoursReported * dt.HourlyRate;

                model.ProjectTotalHoursReported += hoursReported;
                model.ProjectTotalAmountEarned  += amountEarned;

                if (dt.UserId == userId)
                {
                    model.UserTotalHoursReported += hoursReported;
                    model.UserTotalAmountEarned  += amountEarned;
                }
            }
        }
 public void On(InvoiceEvent e, ProjectTimeAggregateRootState state)
 {
     if (e.EventType == InvoiceEventType.Billing)
     {
         OnBilling(e);
     }
     if (e.EventType == InvoiceEventType.EarningDistribution)
     {
         OnDistributeEarnings(e);
     }
     if (e.EventType == InvoiceEventType.Cancel)
     {
         OnCancelInvoice(e);
     }
     if (e.EventType == InvoiceEventType.Paid)
     {
         OnPaidInvoice(e);
     }
 }
 public void On(InvoiceEvent @event, ProjectTimeAggregateRootState state)
 {
     RecalculateSummary(@event.UserId, @event.ProjectId, state);
 }
Beispiel #4
0
 public void On(TimeTrackedEvent evt, ProjectTimeAggregateRootState state)
 {
     _readModels = state.DailyTime.ToList();
 }