コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }