public SearchModel SearchDrafts(SearchModel.DraftKind kind, Guid?customerId, DateTime?dateFrom, DateTime?dateTo, int page, int size) { var model = new SearchModel(); var drafts = new List <SearchModel.Draft>(); if (kind == SearchModel.DraftKind.Any || kind == SearchModel.DraftKind.OutgoingInvoice) { var outgoingInvoiceDrafts = Database.OutgoingInvoiceDrafts; if (customerId.HasValue) { outgoingInvoiceDrafts = outgoingInvoiceDrafts.Where(d => d.Customer.OriginalId == customerId.Value); } if (dateFrom.HasValue) { outgoingInvoiceDrafts = outgoingInvoiceDrafts.Where(i => i.Date >= dateFrom.Value); } if (dateTo.HasValue) { outgoingInvoiceDrafts = outgoingInvoiceDrafts.Where(i => i.Date <= dateTo.Value); } drafts.AddRange(outgoingInvoiceDrafts.Select(d => new SearchModel.Draft { Id = d.Id, Currency = d.Currency, CustomerName = d.Customer.Name, Date = d.Date, DocumentType = "outgoingInvoice", TotalPrice = d.TotalPrice })); } if (kind == SearchModel.DraftKind.Any || kind == SearchModel.DraftKind.OutgoingCreditNote) { var outgoingCreditNoteDrafts = Database.OutgoingCreditNoteDrafts; if (customerId.HasValue) { outgoingCreditNoteDrafts = outgoingCreditNoteDrafts.Where(d => d.Customer.OriginalId == customerId.Value); } if (dateFrom.HasValue) { outgoingCreditNoteDrafts = outgoingCreditNoteDrafts.Where(i => i.Date >= dateFrom.Value); } if (dateTo.HasValue) { outgoingCreditNoteDrafts = outgoingCreditNoteDrafts.Where(i => i.Date <= dateTo.Value); } drafts.AddRange(outgoingCreditNoteDrafts.Select(d => new SearchModel.Draft { Id = d.Id, Currency = d.Currency, CustomerName = d.Customer.Name, Date = d.Date, DocumentType = "outgoingCreditNote", TotalPrice = -d.TotalPrice })); } model.TotalNumberOfDrafts = drafts.Count(); int skip = (page - 1) * size; model.Drafts = drafts .OrderByDescending(d => d.Date) .Skip(skip) .Take(size) .ToArray(); return(model); }
public IActionResult Search(SearchModel.DraftKind kind, Guid?customerId, DateTime?dateFrom, DateTime?dateTo, int page = 1, int size = 20) { var model = WorkerServices.SearchDrafts(kind, customerId, dateFrom, dateTo, page, size); return(Ok(model)); }