public async Task <PrintMaterialNameItem> SearchRecordsForPrintingBailment()
        {
            // Find all tx31
            var materialShelfStatuss = _unitOfWork.MaterialShelfStatusRepository.GetAll();

            // Find all tx33
            var materialShelfStocks = _unitOfWork.MaterialShelfStockRepository.GetAll();

            // Find all materials.
            var materials = _unitOfWork.MaterialRepository.GetAll();

            // Record which should be printed.
            var printMaterialNameItem = new PrintMaterialNameItem();

            var condition1 = Constants.F31_ShelfStatus.Material.ToString("D");
            var condition2 = Constants.TM01_Material_EntrustedClass.Bailment.ToString("D");

            // Find Material Name item.
            var materialNameItems = from material in materials
                                    join materialShelfStock in materialShelfStocks on material.F01_MaterialCode equals materialShelfStock.F33_MaterialCode
                                    join materialShelfStatus in materialShelfStatuss on materialShelfStock.F33_PalletNo equals materialShelfStatus.F31_PalletNo
                                    where materialShelfStatus.F31_ShelfStatus.Trim().Equals(condition1) &&
                                    material.F01_EntrustedClass.Equals(condition2)
                                    orderby new
            {
                materialShelfStock.F33_MaterialCode,
                materialShelfStock.F33_MaterialLotNo
            }
            select new FindPrintMaterialNameItem
            {
                MaterialCode = materialShelfStock.F33_MaterialCode,
                MaterialName = material.F01_MaterialDsp,
                PalletNo     = materialShelfStock.F33_PalletNo,
                LotNo        = materialShelfStock.F33_MaterialLotNo,
                RBL          = materialShelfStatus.F31_ShelfRow + "-" + materialShelfStatus.F31_ShelfBay + "-" + materialShelfStatus.F31_ShelfLevel,
                Quantity     = materialShelfStock.F33_Amount,
                //Total = materialShelfStocks.Sum(i => i.F33_Amount)
            };

            var groupItems =
                materialNameItems.GroupBy(x => new { x.MaterialCode })
                .Select(y => new GroupValueItem()
            {
                MaterialCode = y.Key.MaterialCode,
                Total        = y.Sum(c => c.Quantity)
            });

            foreach (var groupitem in groupItems.ToList())
            {
                var printMaterialNameGroupItem = new PrintMaterialNameGroupItem()
                {
                    MaterialCode   = groupitem.MaterialCode,
                    LotTotal       = groupitem.Total,
                    LotTotalString = String.Format("{0:#,##0.00}", groupitem.Total)
                };
                foreach (var item in materialNameItems.ToList())
                {
                    if (item.MaterialCode == groupitem.MaterialCode)
                    {
                        printMaterialNameGroupItem.FindPrintMaterialNameItem.Add(item);
                    }
                }
                printMaterialNameItem.PrintMaterialNameGroupItem.Add(printMaterialNameGroupItem);
            }


            await _unitOfWork.CommitAsync();

            //printMaterialNameItem.FindPrintMaterialNameItem = await materialNameItems.ToListAsync();

            return(printMaterialNameItem);
        }
        /// <summary>
        ///     This function is for exporting data from kneading command database to list.
        /// </summary>
        /// <returns></returns>
        public async Task <PrintMaterialNameItem> SearchRecordsForPrinting()
        {
            // Find all tx31
            var materialShelfStatuss = _unitOfWork.MaterialShelfStatusRepository.GetAll();

            // Find all tx33
            var materialShelfStocks = _unitOfWork.MaterialShelfStockRepository.GetAll();

            // Find all materials.
            var materials = _unitOfWork.MaterialRepository.GetAll();

            // Record which should be printed.
            var printMaterialNameItem = new PrintMaterialNameItem();

            var condition1 = Constants.F31_ShelfStatus.Material.ToString("D");
            var condition2 = Constants.TM01_Material_EntrustedClass.Normal.ToString("D");

            // Find Material Name item.
            var materialNameItems = from material in materials
                                    join materialShelfStock in materialShelfStocks on material.F01_MaterialCode equals materialShelfStock.F33_MaterialCode
                                    join materialShelfStatus in materialShelfStatuss on materialShelfStock.F33_PalletNo equals materialShelfStatus.F31_PalletNo
                                    where materialShelfStatus.F31_ShelfStatus.Trim().Equals(condition1) &&
                                    material.F01_EntrustedClass.Equals(condition2)
                                    orderby new
            {
                materialShelfStock.F33_MaterialCode,
                materialShelfStock.F33_MaterialLotNo
            }
            select new FindPrintMaterialNameItem
            {
                MaterialCode = materialShelfStock.F33_MaterialCode,
                MaterialName = material.F01_MaterialDsp,
                LotNo        = materialShelfStock.F33_MaterialLotNo,
                PalletNo     = materialShelfStock.F33_PalletNo,
                RBL          = materialShelfStatus.F31_ShelfRow + "-" + materialShelfStatus.F31_ShelfBay + "-" + materialShelfStatus.F31_ShelfLevel,
                Quantity     = materialShelfStock.F33_Amount,
                //Total = materialShelfStocks.Sum(i => i.F33_Amount)
            };

            var a = materialNameItems.GroupBy(item => item.MaterialCode)
                    .Select(group => group.Sum(item => item.Quantity));

            var groupItems =
                materialNameItems.GroupBy(x => new { x.MaterialCode })
                .Select(y => new GroupValueItem()
            {
                MaterialCode = y.Key.MaterialCode,
                Total        = y.Sum(c => c.Quantity)
            });

            foreach (var groupitem in groupItems.ToList())
            {
                var printMaterialNameGroupItem = new PrintMaterialNameGroupItem()
                {
                    MaterialCode   = groupitem.MaterialCode,
                    LotTotal       = groupitem.Total,
                    LotTotalString = String.Format("{0:#,##0.00}", groupitem.Total)
                };
                foreach (var item in materialNameItems.ToList())
                {
                    if (item.MaterialCode == groupitem.MaterialCode)
                    {
                        printMaterialNameGroupItem.FindPrintMaterialNameItem.Add(item);
                    }
                }
                printMaterialNameItem.PrintMaterialNameGroupItem.Add(printMaterialNameGroupItem);
            }

            //var totalSecondItems = (await secondResult.SumAsync(x => (double?)x.Key.Amount)) ?? 0;

            //•	o	Show “PAGE: “ + current page with format as ###
            //printExternalPreProductNameItem.Page = "1";

            //// Get Total quantity
            //printPreProductNameItem.PreproductTotal = printPreProductNameItem.PrintPreProductNameGroupItem.Sum(c => c.LotTotal);
            //printPreProductNameItem.PreproductTotalString = String.Format("{0:#,##0.00}", printPreProductNameItem.PreproductTotal);


            await _unitOfWork.CommitAsync();

            //printMaterialNameItem.FindPrintMaterialNameItem = await materialNameItems.ToListAsync();

            return(printMaterialNameItem);
        }