public async Task <ActionResult <PaymentReceiptDto[]> > GetReportCashDesk([FromBody] ReportCashDeskFilter filter) { var res = await _service.GetReportCashDesk(filter); return(res); }
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()); }