/// <summary> /// Creates the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns></returns> public TeacherInvoiceResponse Create(DateRangeReportRequest request) { request.GuardAgainstNull(nameof(request)); var eventsInRange = _repository.Queryable() .FetchMany(x => x.Teachers) .ThenFetch(x => x.User) .Where(x => x.StartTime >= request.From) .Where(x => x.EndTime <= request.To) .ToList(); var teacherPaySlips = eventsInRange.SelectMany(x => x.GetPaySlips()); var teacherInvoiceLines = teacherPaySlips.GroupBy(x => x.Teacher) .Select(x => new TeacherInvoiceLine { Name = x.Key.User.FullName, AmountOwed = x.Sum(y => y.Pay) }) .ToList(); var report = new TeacherInvoiceResponse(teacherInvoiceLines); return(report); }
/// <summary> /// Creates the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns></returns> public PassSalesResponse Create(DateRangeReportRequest request) { request.GuardAgainstNull(nameof(request)); var passSalesLines = _repository.Queryable() .Where(x => x.CreatedDateTime >= request.From) .Where(x => x.CreatedDateTime <= request.To) .GroupBy(x => x.Description) .Select(x => new PassSaleLine { Name = x.Key, NumberSold = x.Count(), Revenue = x.Sum(y => y.Cost) }) .ToList(); var report = new PassSalesResponse(passSalesLines); return(report); }
/// <summary> /// Creates the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns></returns> public BlockSummaryResponse Create(DateRangeReportRequest request) { request.GuardAgainstNull(nameof(request)); var blockSummaries = _repository.Queryable() .Where(x => x.StartDate >= request.From) .Where(x => x.StartDate <= request.To) .ToList() .Select(x => new BlockDetailLine { Name = x.Name, BlockId = x.Id, Attendance = x.Classes.Sum(y => y.ActualStudents.Count), Revenue = x.Classes.Sum(y => y.PassStatistics.Sum(z => z.CostPerClass)), Expenses = x.Classes.SelectMany(y => y.GetPaySlips()).Sum(y => y.Pay) }) .ToList(); var report = new BlockSummaryResponse(blockSummaries); return(report); }