Пример #1
0
        public async Task <ActionResult <PaymentReceiptDto[]> > GetReportCashDesk([FromBody] ReportCashDeskFilter filter)
        {
            var res = await _service.GetReportCashDesk(filter);

            return(res);
        }
Пример #2
0
        public async Task <PaymentReceiptDto[]> GetReportCashDesk(ReportCashDeskFilter filter)
        {
            IQueryable <PaymentReceipt> query = _dbCtx.PaymentReceipts;

            query = query.Where(x => !x.XDeleteDate.HasValue);
            var noFilter = string.IsNullOrWhiteSpace(filter.CategoryName) &&
                           !filter.IdTeacher.HasValue &&
                           !filter.StartDate.HasValue &&
                           !filter.EndDate.HasValue &&
                           !filter.IdIssuer.HasValue &&
                           !filter.IdProductDetails.HasValue &&
                           !filter.IdProduct.HasValue;

            if (!filter.StartDate.HasValue)
            {
                var now = DateTime.UtcNow;
                filter.StartDate = new DateTime(now.Year, 1, 1);
                filter.StartDate = Utils.GetDateForStart(filter.StartDate.Value);
            }
            if (!filter.EndDate.HasValue)
            {
                filter.EndDate = DateTime.MaxValue;
                filter.EndDate = Utils.GetDateForEnd(filter.EndDate.Value);
            }

            query = query.Where(x => x.PaymentDate.HasValue && (x.PaymentDate.Value >= filter.StartDate.Value && x.PaymentDate.Value <= filter.EndDate.Value));

            if (filter.IdIssuer.HasValue)
            {
                query = query.Where(x => x.IssuedBy.HasValue && x.IssuedBy == filter.IdIssuer);
            }

            if (filter.IdProductDetails.HasValue)
            {
                query = query.Where(x => x.PaymentReceiptDetails.Select(xx => xx.IdResource).Contains(filter.IdProductDetails.Value));
            }


            if (filter.IdProduct.HasValue)
            {
                var compliantDetails = await _dbCtx.ProductInstances.Where(x => !x.XDeleteDate.HasValue && x.IdProduct == filter.IdProduct)
                                       .Select(xx => xx.Id).ToArrayAsync();

                var compliantRecipts = await _dbCtx.PaymentReceiptDetails.Where(x => compliantDetails.Contains(x.IdResource)).Select(x => x.IdReceipt).ToArrayAsync();

                query = query.Where(x => compliantRecipts.Contains(x.Id));
            }

            if (!string.IsNullOrWhiteSpace(filter.CategoryName))
            {
                var compliantDetails = await _dbCtx.ProductInstances.Where(x => !x.XDeleteDate.HasValue && x.Product.CategoryName == filter.CategoryName)
                                       .Select(xx => xx.Id).ToArrayAsync();

                var compliantRecipts = await _dbCtx.PaymentReceiptDetails.Where(x => compliantDetails.Contains(x.IdResource)).Select(x => x.IdReceipt).ToArrayAsync();

                query = query.Where(x => compliantRecipts.Contains(x.Id));
            }

            if (filter.IdTeacher.HasValue)
            {
                var compliantDetails = await _dbCtx.ProductInstances.Where(x => !x.XDeleteDate.HasValue && x.Product.IdTeacher == filter.IdTeacher)
                                       .Select(xx => xx.Id).ToArrayAsync();

                var compliantRecipts = await _dbCtx.PaymentReceiptDetails.Where(x => compliantDetails.Contains(x.IdResource)).Select(x => x.IdReceipt).ToArrayAsync();

                query = query.Where(x => compliantRecipts.Contains(x.Id));
            }

            if (noFilter)
            {
                query = query.OrderByDescending(x => x.InvoiceNumber);
            }
            else
            {
                query = query.OrderByDescending(x => x.PaymentDate);
            }

            var res = await query.ToArrayAsync();

            return(res.Select(x => x.ToDto()).ToArray());
        }