Пример #1
0
        /// <summary>
        /// 转采购
        /// </summary>
        /// <returns></returns>
        public async Task <ResponseObject <NOEntity> > TransPurchase(int orderID, CurrentUser currentUser)
        {
            try
            {
                _db.Instance.BeginTran();

                NOEntity nOEntity = new NOEntity();

                TMMProductionOrderMainDbModel mainEntity = _db.Instance.Queryable <TMMProductionOrderMainDbModel>().Where(p => p.ID == orderID &&
                                                                                                                          p.CompanyId == currentUser.CompanyID && p.IsPurchase == true).First();

                if (mainEntity == null)
                {
                    return(ResponseUtil <NOEntity> .FailResult(nOEntity, "生产订单不存在,或者已转生产采购单"));
                }
                if (mainEntity.MRPStatus == false)
                {
                    return(ResponseUtil <NOEntity> .FailResult(nOEntity, "还没算料,无法转单"));
                }

                var Allmaterial = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList(); //生产单BOM

                List <TMMPurchaseApplyDetailDbModel> PurchaseList = new List <TMMPurchaseApplyDetailDbModel>();                            //生产采购申请单明细表

                List <TMMProductionOrderBOMSumDbModel> productionList = new List <TMMProductionOrderBOMSumDbModel>();                      //生产单BOM

                foreach (var item in Allmaterial)
                {
                    if (item.PurchaseNum > 0) //采购
                    {
                        TMMPurchaseApplyDetailDbModel purchaseDeatail = new TMMPurchaseApplyDetailDbModel();
                        purchaseDeatail.ApplyNum   = item.PurchaseNum;
                        purchaseDeatail.MaterialId = item.MaterialId;
                        purchaseDeatail.TransNum   = item.PurchaseNum;
                        PurchaseList.Add(purchaseDeatail);

                        item.PurchaseTransNum = item.PurchaseNum;
                        productionList.Add(item);
                    }
                }

                if (PurchaseList.Count() > 0)
                {
                    TMMPurchaseApplyMainDbModel tMMPurchaseApplyMainDbModel = new TMMPurchaseApplyMainDbModel();
                    tMMPurchaseApplyMainDbModel.DeleteFlag   = false;
                    tMMPurchaseApplyMainDbModel.SourceId     = orderID;
                    tMMPurchaseApplyMainDbModel.PurchaseNo   = _codeMakers.Where(p => p.ProvideName == OrderEnum.PR.GetDescription()).FirstOrDefault().MakeNo(currentUser.CompanyID);
                    tMMPurchaseApplyMainDbModel.ApplyDate    = DateTime.Now;
                    tMMPurchaseApplyMainDbModel.OperatorId   = currentUser.UserID;
                    tMMPurchaseApplyMainDbModel.OperatorTime = DateTime.Now;
                    tMMPurchaseApplyMainDbModel.AuditStatus  = 2;
                    tMMPurchaseApplyMainDbModel.CompanyId    = currentUser.CompanyID;
                    tMMPurchaseApplyMainDbModel.TransferFlag = true;
                    int mId = _db.Instance.Insertable(tMMPurchaseApplyMainDbModel).ExecuteReturnIdentity();

                    PurchaseList.ForEach((x) =>
                    {
                        x.MainId = mId;
                    });

                    await _db.Instance.Insertable(PurchaseList).ExecuteCommandAsync();

                    nOEntity.NO = tMMPurchaseApplyMainDbModel.PurchaseNo;
                    nOEntity.ID = mId;
                }

                if (productionList.Count() > 0)
                {
                    _db.Instance.Updateable(productionList).UpdateColumns(p => new { p.PurchaseTransNum }).ExecuteCommand();
                }

                mainEntity.IsPurchase = false;
                _db.Instance.Updateable(mainEntity).UpdateColumns(p => new { p.IsPurchase }).ExecuteCommand();

                _db.Instance.CommitTran();

                return(ResponseUtil <NOEntity> .SuccessResult(nOEntity));
            }
            catch (Exception ex)
            {
                _db.Instance.RollbackTran();
                return(ResponseUtil <NOEntity> .FailResult(null, ex.Message));
            }
        }