public PurchasingMemoDetailTextileDto(DateTimeOffset date, DivisionDto division, CurrencyDto currency, bool supplierIsImport, PurchasingMemoType type, List <FormItemDto> items, List <FormDetailDto> details, string remark, int id) { Date = date; Division = division; Currency = currency; SupplierIsImport = supplierIsImport; Type = type; Items = items; Details = details; Remark = remark; Id = id; }
public List <FormItemDto> ReadDispositions(string keyword, int divisionId, bool supplierIsImport, string currencyCode) { var dispositionQuery = _dbContext.PaymentDispositionNotes.Where(entity => entity.SupplierImport == supplierIsImport); if (!string.IsNullOrWhiteSpace(currencyCode)) { dispositionQuery = dispositionQuery.Where(entity => entity.CurrencyCode == currencyCode); } var paymentIds = dispositionQuery.Select(entity => entity.Id).Distinct().ToList(); var dispositionItemQuery = _dbContext.PaymentDispositionNoteItems.Where(entity => paymentIds.Contains(entity.PaymentDispositionNoteId)); if (divisionId > 0) { dispositionItemQuery = dispositionItemQuery.Where(entity => entity.DivisionId == divisionId); } var query = dispositionItemQuery.Select(entity => new { entity.DispositionId, entity.DispositionNo, entity.DispositionDate }).Distinct().AsQueryable(); if (!string.IsNullOrWhiteSpace(keyword)) { query = query.Where(entity => entity.DispositionNo.Contains(keyword)); } var queryResult = query.Take(10).ToList(); var dispositionIds = queryResult.Select(element => element.DispositionId).ToList(); var paymentDispositionItems = _dbContext.PaymentDispositionNoteItems.Where(entity => dispositionIds.Contains(entity.DispositionId)).ToList(); var paymentDispositionItemIds = paymentDispositionItems.Select(entity => entity.Id).ToList(); var paymentDispositionIds = paymentDispositionItems.Select(entity => entity.PaymentDispositionNoteId).Distinct().ToList(); var paymentDispositions = _dbContext.PaymentDispositionNotes.Where(entity => paymentDispositionIds.Contains(entity.Id)).ToList(); var paymentDispositionDetails = _dbContext.PaymentDispositionNoteDetails.Where(entity => paymentDispositionItemIds.Contains(entity.PaymentDispositionNoteItemId)).ToList(); var purchasingDispositionExpeditionIds = paymentDispositionItems.Select(element => element.PurchasingDispositionExpeditionId).ToList(); var purchasingDispositionExpeditions = _dbContext.PurchasingDispositionExpeditions.Where(entity => purchasingDispositionExpeditionIds.Contains(entity.Id)).ToList(); var purchasingDispositionExpeditionItems = _dbContext.PurchasingDispositionExpeditionItems.Where(entity => purchasingDispositionExpeditionIds.Contains(entity.PurchasingDispositionExpeditionId)).ToList(); var result = new List <FormItemDto>(); foreach (var item in queryResult) { var disposition = new DispositionDto(item.DispositionId, item.DispositionNo, item.DispositionDate, new List <FormDetailDto>()); var itemPaymentDispositionNoteIds = paymentDispositionItems.Where(element => element.DispositionId == item.DispositionId).Select(element => element.PaymentDispositionNoteId).ToList(); var itemPaymentDispositionNotes = paymentDispositions.Where(element => itemPaymentDispositionNoteIds.Contains(element.Id)).ToList(); foreach (var itemPaymentDispositionNote in itemPaymentDispositionNotes) { var expenditure = new ExpenditureDto(itemPaymentDispositionNote.Id, itemPaymentDispositionNote.PaymentDispositionNo, itemPaymentDispositionNote.PaymentDate); var supplier = new SupplierDto(itemPaymentDispositionNote.SupplierId, itemPaymentDispositionNote.SupplierCode, itemPaymentDispositionNote.SupplierName); var itemPaymentDispositionNoteItems = paymentDispositionItems.Where(element => element.PaymentDispositionNoteId == itemPaymentDispositionNote.Id).ToList(); foreach (var itemPaymentDispositionNoteItem in itemPaymentDispositionNoteItems) { var division = new DivisionDto(itemPaymentDispositionNoteItem.DivisionId, itemPaymentDispositionNoteItem.DivisionCode, itemPaymentDispositionNoteItem.DivisionName); disposition.Details.Add(new FormDetailDto(expenditure, supplier, "", new UnitPaymentOrderDto(0, "", DateTimeOffset.MinValue), new List <UnitReceiptNoteDto>(), 0, 0, 0, 0)); } } result.Add(new FormItemDto(disposition)); } return(result); }