public async Task <IActionResult> Search([FromQuery] PaginationParams param, FilterReceivingMateParam filterParam) { var result = await _service.SearchByModel(param, filterParam); Response.AddPagination(result.CurrentPage, result.PageSize, result.TotalCount, result.TotalPages); return(Ok(result)); }
public async Task <PagedList <ReceivingMaterialMainModel> > SearchByModel(PaginationParams param, FilterReceivingMateParam filterParam) { var pred_Material_Purchase = PredicateBuilder.New <WMSB_Material_Purchase>(true); var pred_VM_Material_Purchase = PredicateBuilder.New <VM_WMSB_Material_Purchase>(true); // Ở kho có Type = 2 pred_Material_Purchase.And(x => x.Type.Trim() == "2" && x.Biz_Tflag != "D"); if (filterParam.From_Date != null && filterParam.To_Date != null) { pred_Material_Purchase.And(x => x.Confirm_Delivery >= Convert.ToDateTime(filterParam.From_Date + " 00:00:00.000")); pred_Material_Purchase.And(x => x.Confirm_Delivery <= Convert.ToDateTime(filterParam.To_Date + " 23:59:59.997")); } if (!String.IsNullOrEmpty(filterParam.MO_No)) { pred_Material_Purchase.And(x => x.MO_No.Trim() == filterParam.MO_No.Trim()); pred_VM_Material_Purchase.And(x => x.Plan_No.Trim() == filterParam.MO_No.Trim()); } if (!String.IsNullOrEmpty(filterParam.Purchase_No)) { pred_Material_Purchase.And(x => x.Purchase_No.Trim() == filterParam.Purchase_No.Trim()); } if (filterParam.Status != "all") { pred_Material_Purchase.And(x => x.Status.Trim() == filterParam.Status.Trim()); } var materialPurchases = await _repoPurchase.FindAll(pred_Material_Purchase).ToListAsync(); var materialPurchaseList = materialPurchases .Select(x => new PurchaseConvert() { Purchase_No = x.Purchase_No.Trim(), Status = x.Status, MO_No = x.MO_No, Material_ID = x.Material_ID }).GroupBy(x => new { x.Purchase_No, x.Status, x.MO_No, x.Material_ID }).Select(x => x.FirstOrDefault()).ToList(); var purchaseContainQty = materialPurchases.Select(x => new { Purchase_No = x.Purchase_No.Trim(), MO_No = x.MO_No.Trim(), Purchase_Qty = x.Purchase_Qty, Material_ID = x.Material_ID.Trim() }).GroupBy(x => new { x.Purchase_No, x.MO_No, x.Material_ID }).Select(x => new { Purchase_No = x.FirstOrDefault().Purchase_No, MO_No = x.FirstOrDefault().MO_No, Material_ID = x.FirstOrDefault().Material_ID, Qty = x.Sum(cl => cl.Purchase_Qty) }).ToList(); // Distinct lại mảng.Do ko xài Distinct ở trong câu lệnh 1 list Object được. var listData = materialPurchaseList.GroupBy(x => new { x.Purchase_No, x.MO_No, x.Material_ID }).Select(y => y.First()); // --------------------------------------------------------------------------------------------------------- var listData_Purchase_No = listData.Select(x => x.Purchase_No.Trim()).Distinct().ToList(); pred_VM_Material_Purchase.And(x => listData_Purchase_No.Contains(x.Purchase_No)); var listMaterialView = await _repoMaterialView.FindAll(pred_VM_Material_Purchase) .Select(x => new { x.Mat_, x.Mat__Name, x.Plan_No, x.Model_No, x.Model_Name, x.Article, x.Purchase_No, x.Supplier_No, x.Supplier_Name, x.Subcon_No, x.Subcon_Name, x.T3_Supplier, x.T3_Supplier_Name }).Distinct().ToListAsync(); listMaterialView = listMaterialView.Distinct().ToList(); var result = (from a in listData join c in purchaseContainQty on new { Purchase_No = a.Purchase_No.Trim(), MO_No = a.MO_No.Trim(), MaterialID = a.Material_ID.Trim() } equals new { Purchase_No = c.Purchase_No.Trim(), MO_No = c.MO_No.Trim(), MaterialID = c.Material_ID.Trim() } join b in listMaterialView on new { Purchase_No = a.Purchase_No.Trim(), MO_No = a.MO_No.Trim(), MaterialID = a.Material_ID.Trim() } equals new { Purchase_No = b.Purchase_No, MO_No = b.Plan_No.Trim(), MaterialID = b.Mat_.Trim() } select new ReceivingMaterialMainModel { Status = a.Status, Material_ID = b.Mat_, Material_Name = b.Mat__Name, MO_No = b.Plan_No, Purchase_No = a.Purchase_No, Model_No = b.Model_No, Model_Name = b.Model_Name, Article = b.Article, Supplier_ID = b.Supplier_No, Supplier_Name = b.Supplier_Name, Subcon_No = b.Subcon_No, Subcon_Name = b.Subcon_Name, T3_Supplier = b.T3_Supplier, T3_Supplier_Name = b.T3_Supplier_Name, Qty = c.Qty }).ToList(); result = result.OrderBy(x => x.Status).ThenBy(x => x.MO_No).ThenBy(x => x.Purchase_No).ToList(); return(PagedList <ReceivingMaterialMainModel> .Create(result, param.PageNumber, param.PageSize, false)); }