Ejemplo n.º 1
0
        //生成采购单
        public int CreatePurchase(IList <PurchaseApplicationViewModel> models, string temp_purchaseNumber)
        {
            PurchaseHeader   newPurchaseHeader = null;
            IList <Purchase> listOfPurchase    = new List <Purchase>();

            models = models.Where(x => x.TotalConfirmed > 0).ToList();
            if (models.Count != 0)
            {
                try
                {
                    foreach (var item in models)
                    {
                        var existingPurchase = _purchaseRepository.FindBy(x => x.PurchaseApplicationId == item.PurchaseApplicationId && x.IsDeleted && item.SupplierName == x.PurchaseHeader.SupplierId).FirstOrDefault();

                        // 重新修改之前的采购单
                        if (existingPurchase != null)
                        {
                            existingPurchase.PurchaseTotal = item.TotalConfirmed;
                            existingPurchase.IsDeleted     = false;
                            switch (item.RequestCategory)
                            {
                            case RequestCategoriesEnum.材料需求:
                                existingPurchase.Status = ProcessStatusEnum.采购中;
                                break;

                            case RequestCategoriesEnum.采购退货:
                                existingPurchase.Status = ProcessStatusEnum.退货中;
                                break;
                            }
                            existingPurchase.UpdateDate = DateTime.Now;
                            _purchaseRepository.Save();
                            switch (item.RequestCategory)
                            {
                            case RequestCategoriesEnum.材料需求:
                                UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId, ProcessStatusEnum.采购中);
                                break;

                            case RequestCategoriesEnum.采购退货:
                                UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId, ProcessStatusEnum.退货中);
                                break;
                            }
                            return(1);
                        }
                        else
                        {
                            var purchaseApplicationHeader = _purchaseApplicationHeaderRepository.FindBy(x => x.PurchaseApplicationNumber == item.ApplicationNumber).Include(c => c.RequestHeader).FirstOrDefault();
                            if (newPurchaseHeader == null && purchaseApplicationHeader != null)
                            {
                                newPurchaseHeader            = _mapper.Map <PurchaseHeader>(purchaseApplicationHeader);
                                newPurchaseHeader.SupplierId = item.SupplierName;
                                newPurchaseHeader.CreateDate = DateTime.Now;
                                newPurchaseHeader.UpdateDate = DateTime.Now;
                                //Create a new purchase header.
                                var prefix           = newPurchaseHeader.RequestCategory == RequestCategoriesEnum.采购退货 ? "RCG" : "CG";
                                var lastSerialNumber = _purchaseHeaderRepository.GetLatestSerialNumber(DateTime.Now);
                                newPurchaseHeader.SerialNo        = ++lastSerialNumber;
                                newPurchaseHeader.PurchaseNumber  = string.IsNullOrEmpty(temp_purchaseNumber) ? ServiceHelper.GenerateCodeNumber(prefix, newPurchaseHeader.SerialNo) : temp_purchaseNumber;
                                newPurchaseHeader.RequestCategory = purchaseApplicationHeader.RequestHeader.RequestCategory;
                            }

                            if (newPurchaseHeader == null)
                            {
                                continue;
                            }
                            var newPurchase = new Purchase
                            {
                                PurchaseNumber        = newPurchaseHeader.PurchaseNumber,
                                CurrentPurchasePrice  = item.CurrentPurchasePrice,
                                PurchaseTotal         = item.TotalConfirmed,
                                PurchaseApplicationId = item.PurchaseApplicationId,
                                CreateDate            = DateTime.Now,
                                UpdateDate            = DateTime.Now,
                                Status = purchaseApplicationHeader != null &&
                                         purchaseApplicationHeader.RequestHeader.RequestCategory ==
                                         RequestCategoriesEnum.采购退货
                                    ? ProcessStatusEnum.退货中
                                    : ProcessStatusEnum.采购中
                            };


                            listOfPurchase.Add(newPurchase);
                        }
                    }
                    _purchaseHeaderRepository.Add(newPurchaseHeader);
                    _purchaseRepository.AddRange(listOfPurchase);
                    _purchaseHeaderRepository.Save();
                    _purchaseRepository.Save();

                    //更新采购申请表的状态和需求表状态
                    foreach (var item in models)
                    {
                        UpdatePurchaseApplicationProcessStatus(item.PurchaseApplicationId,
                                                               item.RequestCategory == RequestCategoriesEnum.采购退货
                                ? ProcessStatusEnum.退货中
                                : ProcessStatusEnum.采购中);
                    }
                    return(1);
                }
                catch (DbUpdateException)
                {
                    return(0);
                }
            }
            return(0);
        }