//取得全部采购单
        public IList <PurchaseHeaderViewModel> GetAllPurchaseViewModels(RequestCategoriesEnum category)
        {
            var listOfPurchases      = _purchaseHeaderRepository.GetPurchaseHeaders(category).ToList();
            var listOfStocks         = _inStockRepository.GetAll().ToList();
            var listRequesterHeaders = _requestHeaderRepository.GetAll().Include(x => x.Contract);
            var models = _mapper.Map <PurchaseHeaderViewModel[]>(listOfPurchases);
            var listOfPurchasedViewModels = new List <PurchaseViewModel>();

            foreach (var item in models)
            {
                int numerator           = 0;
                int denominator         = item.PurchaseViewModels.Count();
                var purchaseApplication = listOfPurchases.FirstOrDefault(x => x.PurchaseNumber == item.PurchaseNumber)?.Purchases.FirstOrDefault()?.PurchaseApplication;
                if (purchaseApplication != null)
                {
                    var requestHeaderNumber = purchaseApplication.PurchaseApplicationHeader.RequestNumber;
                    var requestHeader       = listRequesterHeaders.FirstOrDefault(x => x.RequestHeaderNumber == requestHeaderNumber);
                    if (category == RequestCategoriesEnum.采购退货)
                    {
                        item.PoNumber = purchaseApplication.SelectedPONumber;
                        numerator     = item.PurchaseViewModels.Count(x => x.Status == ProcessStatusEnum.退货申请完成) +
                                        item.PurchaseViewModels.Count(x => x.Status == ProcessStatusEnum.退货出库);
                    }
                    else
                    {
                        var poNumber = requestHeader?.Contract.PoModel.PoNumber;
                        item.PoNumber = poNumber;
                        numerator     = item.PurchaseViewModels.Count(x => x.Status == ProcessStatusEnum.采购完成) +
                                        item.PurchaseViewModels.Count(x => x.Status == ProcessStatusEnum.采购入库) +
                                        item.PurchaseViewModels.Count(x => x.Status == ProcessStatusEnum.已出库);
                    }
                    item.PurchaseViewModels.ToList().ForEach(x => x.PoNumber = item.PoNumber);
                    item.Priority = purchaseApplication.Priority;
                    if (requestHeader != null)
                    {
                        item.PurchaseType = requestHeader.RequestCategory;
                    }
                }
                item.TotalPrice         = item.PurchaseViewModels.Sum(x => x.TotalPrice);
                item.CompletePercentage = (decimal)numerator / denominator;
                listOfPurchasedViewModels.AddRange(item.PurchaseViewModels);
                //item.PurchaseViewModels.ToList()
                //    .ForEach(x => x.AlreadyInStock = listOfStocks.Where(l => l.PurchaseId == x.PurchaseId).ToArray().Any() ?
                //    listOfStocks.Where(l => l.PurchaseId == x.PurchaseId).Sum(z => z.Total) :
                //    0);
            }
            foreach (var item in listOfPurchasedViewModels)
            {
                item.AlreadyInStock = listOfStocks.Where(l => l.PurchaseId == item.PurchaseId).ToArray().Any() ?
                                      listOfStocks.Where(l => l.PurchaseId == item.PurchaseId).Sum(z => z.Total) :
                                      0;
            }
            foreach (var item in models)
            {
                item.PurchaseViewModels = new BindingList <PurchaseViewModel>(listOfPurchasedViewModels.Where(x => x.PurchaseNumber == item.PurchaseNumber).ToList());
            }
            return(models);
        }
        public IList <InStockHeaderViewModel> GetAllInStockHeaderViewModel()
        {
            var listOfInStockHeader = _inStockHeaderRepository.GetAllInStockHeaders();
            var requestHeaders      = _requestHeaderRepository.GetAll().ToList();
            var purchaseHeaders     = _purchaseHeaderRepository.GetAll().ToList();
            var requests            = _requestRepository.GetAll().ToList();
            var purchases           = _purchaseRepository.GetAll().ToList();
            IList <InStockHeaderViewModel> listOfInStockHeaderViewModels = _mapper.Map <InStockHeaderViewModel[]>(listOfInStockHeader);

            foreach (var inStockHeader in listOfInStockHeaderViewModels)
            {
                var requestHeader = requestHeaders.Where(x => x.RequestHeaderNumber == inStockHeader.RequestNumber).FirstOrDefault();

                switch (inStockHeader.InStockCategory)
                {
                case RequestCategoriesEnum.工具维修:
                    inStockHeader.ContractNumber = requestHeader?.Contract?.ContractNumber;
                    break;

                case RequestCategoriesEnum.工程车维修:
                {
                    inStockHeader.ContractNumber = requestHeader?.Contract?.ContractNumber;
                    foreach (var inStock in inStockHeader.InStockViewModels)
                    {
                        var request = requests.FirstOrDefault(x => x.RequestId == inStock.RequestId);
                        if (request != null)
                        {
                            inStock.Price = request.Item.Price;
                        }
                        inStock.TotalPrice = inStock.Price * inStock.Total;
                    }
                    break;
                }

                case RequestCategoriesEnum.工具借出:
                {
                    inStockHeader.ContractNumber = requestHeader?.Contract?.ContractNumber;
                    foreach (var inStock in inStockHeader.InStockViewModels)
                    {
                        inStock.TotalPrice = 0;
                        inStock.Price      = 0;
                    }

                    break;
                }

                case RequestCategoriesEnum.物品退回:
                    inStockHeader.ContractNumber = requestHeader?.Contract?.ContractNumber;
                    break;

                default:
                {
                    var purchaseHeader = purchaseHeaders.Where(x => x.PurchaseNumber == inStockHeader.PurchaseNumber).FirstOrDefault();
                    inStockHeader.PoNumber     = requestHeader?.Contract?.PoModel?.PoNumber;
                    inStockHeader.SupplierName = purchaseHeader?.SupplierId;
                    foreach (var instock in inStockHeader.InStockViewModels)
                    {
                        if (!instock.PurchaseId.HasValue)
                        {
                            continue;
                        }
                        var purchase = purchases.FirstOrDefault(x => x.PurchaseId == instock.PurchaseId);
                        if (purchase == null)
                        {
                            continue;
                        }
                        instock.Price      = purchase.CurrentPurchasePrice;
                        instock.TotalPrice = instock.Price * instock.Total;
                    }

                    break;
                }
                }
            }
            return(listOfInStockHeaderViewModels);
        }