Example #1
0
        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));
        }
Example #2
0
        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));
        }