/// <summary> /// 获取出库单对应[应收单] /// </summary> /// <param name="paramStockOutBillNo"></param> /// <returns></returns> public MDLFM_AccountReceivableBill GetAccountReceivableBillByNo(string paramStockOutBillNo) { MDLFM_AccountReceivableBill resultAccountReceivableBill = new MDLFM_AccountReceivableBill(); _bll.QueryForObject <MDLFM_AccountReceivableBill, MDLFM_AccountReceivableBill>(new MDLFM_AccountReceivableBill { WHERE_ARB_SrcBillNo = paramStockOutBillNo, WHERE_ARB_IsValid = true }, resultAccountReceivableBill); if (!string.IsNullOrEmpty(resultAccountReceivableBill.ARB_ID)) { return(resultAccountReceivableBill); } return(new MDLFM_AccountReceivableBill()); }
/// <summary> /// 审核 /// </summary> /// <param name="paramHead">UIModel</param> /// <param name="paramDetailList">明细UIModel</param> /// <returns></returns> public bool ApproveDetailDS(ReceiptBillManagerUIModel paramHead, SkyCarBindingList <ReceiptBillManagerDetailUIModel, MDLFM_ReceiptBillDetail> paramDetailList) { var funcName = "ApproveDetailDS"; LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null); if (paramHead == null || string.IsNullOrEmpty(paramHead.RB_ID) || string.IsNullOrEmpty(paramHead.RB_No)) { //没有获取到收款单,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.FM_ReceiptBill, SystemActionEnum.Name.APPROVE }); return(false); } var receiptBillManagerDetailList = paramDetailList.Where(x => x.RBD_SourceTypeName == ReceiptBillDetailSourceTypeEnum.Name.SGSK); if (receiptBillManagerDetailList.Count() != paramDetailList.Count() || receiptBillManagerDetailList.Count() == 0) { //收款单不为手工收款,不能审核 ResultMsg = MsgHelp.GetMsg(MsgCode.E_0017, new object[] { SystemTableEnums.Name.FM_ReceiptBill + MsgParam.NO + MsgParam.BE + PayBillDetailSourceTypeEnum.Name.SGFK, SystemActionEnum.Name.APPROVE }); return(false); } #region 定义变量 //待更新的[收款单] MDLFM_ReceiptBill updateReceiptBill = paramHead.ToTBModelForSaveAndDelete <MDLFM_ReceiptBill>(); //待更新[收款单明细] List <MDLFM_ReceiptBillDetail> updateReceiptBillDetailList = new List <MDLFM_ReceiptBillDetail>(); //待新增对应的[应收单] List <MDLFM_AccountReceivableBill> addAccountReceivableBillList = new List <MDLFM_AccountReceivableBill>(); //待新增对应的[应收单明细] List <MDLFM_AccountReceivableBillDetail> addAccountReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>(); //待更新的[钱包] MDLEWM_Wallet updateWallet = new MDLEWM_Wallet(); //待新增的[钱包异动] MDLEWM_WalletTrans addWalletTrans = new MDLEWM_WalletTrans(); #endregion #region 准备数据 if (paramDetailList[0].RBD_SourceTypeName == ReceiptBillDetailSourceTypeEnum.Name.SGSK) { #region 新增[应收单]和[应收单明细] foreach (var loopDetail in paramDetailList) { #region 新增[应收单] MDLFM_AccountReceivableBill accountReceivableBill = new MDLFM_AccountReceivableBill { ARB_ID = System.Guid.NewGuid().ToString(), ARB_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.ARB), ARB_BillDirectCode = BillDirectionEnum.Code.PLUS, ARB_BillDirectName = BillDirectionEnum.Name.PLUS, ARB_SourceTypeCode = AccountReceivableBillSourceTypeEnum.Code.SGCJ, ARB_SourceTypeName = AccountReceivableBillSourceTypeEnum.Name.SGCJ, ARB_Org_ID = LoginInfoDAX.OrgID, ARB_Org_Name = LoginInfoDAX.OrgShortName, ARB_PayObjectTypeCode = paramHead.RB_PayObjectTypeCode, ARB_PayObjectTypeName = paramHead.RB_PayObjectTypeName, ARB_PayObjectID = paramHead.RB_PayObjectID, ARB_PayObjectName = paramHead.RB_PayObjectName, ARB_AccountReceivableAmount = loopDetail.RBD_ReceiveAmount, ARB_ReceivedAmount = loopDetail.RBD_ReceiveAmount, ARB_UnReceiveAmount = 0, ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC, ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC, ARB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH, ARB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH, ARB_IsValid = true, ARB_CreatedBy = LoginInfoDAX.UserName, ARB_CreatedTime = BLLCom.GetCurStdDatetime(), ARB_UpdatedBy = LoginInfoDAX.UserName, ARB_UpdatedTime = BLLCom.GetCurStdDatetime(), }; addAccountReceivableBillList.Add(accountReceivableBill); //回写付款单的来源的单号 loopDetail.RBD_SrcBillNo = accountReceivableBill.ARB_No; #endregion #region 新增[应收单明细] MDLFM_AccountReceivableBillDetail accountPayableBillDetail = new MDLFM_AccountReceivableBillDetail { ARBD_ID = Guid.NewGuid().ToString(), ARBD_ARB_ID = accountReceivableBill.ARB_ID, ARBD_IsMinusDetail = false, ARBD_Org_ID = accountReceivableBill.ARB_Org_ID, ARBD_Org_Name = accountReceivableBill.ARB_Org_Name, ARBD_AccountReceivableAmount = loopDetail.RBD_ReceiveAmount, ARBD_ReceivedAmount = loopDetail.RBD_ReceiveAmount, ARBD_UnReceiveAmount = 0, ARBD_BusinessStatusName = accountReceivableBill.ARB_BusinessStatusName, ARBD_BusinessStatusCode = accountReceivableBill.ARB_BusinessStatusCode, ARBD_ApprovalStatusName = accountReceivableBill.ARB_ApprovalStatusName, ARBD_ApprovalStatusCode = accountReceivableBill.ARB_ApprovalStatusCode, ARBD_IsValid = true, ARBD_CreatedBy = LoginInfoDAX.UserName, ARBD_CreatedTime = BLLCom.GetCurStdDatetime(), ARBD_UpdatedBy = LoginInfoDAX.UserName, ARBD_UpdatedTime = BLLCom.GetCurStdDatetime(), }; addAccountReceivableBillDetailList.Add(accountPayableBillDetail); #endregion } #endregion } #region 收款单 //更新收款单[业务状态]为{已完成},[审核状态]为{已审核} updateReceiptBill.RB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; updateReceiptBill.RB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; updateReceiptBill.RB_BusinessStatusName = ReceiptBillStatusEnum.Name.YWC; updateReceiptBill.RB_BusinessStatusCode = ReceiptBillStatusEnum.Code.YWC; updateReceiptBill.RB_UpdatedBy = LoginInfoDAX.UserName; updateReceiptBill.RB_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion #region 更新[付款单明细]数据 _bll.CopyModelList <ReceiptBillManagerDetailUIModel, MDLFM_ReceiptBillDetail>(paramDetailList, updateReceiptBillDetailList); foreach (var loopPayBillDetaill in updateReceiptBillDetailList) { loopPayBillDetaill.WHERE_RBD_ID = loopPayBillDetaill.RBD_ID; loopPayBillDetaill.WHERE_RBD_VersionNo = loopPayBillDetaill.RBD_VersionNo; loopPayBillDetaill.RBD_VersionNo++; } #endregion #region 更新[钱包余额]和新增[钱包异动] if (paramHead.RB_ReceiveTypeName == TradeTypeEnum.Name.WALLET) { #region 更新[钱包] updateWallet.WHERE_Wal_ID = paramHead.Wal_ID; updateWallet.WHERE_Wal_VersionNo = paramHead.Wal_VersionNo; updateWallet.Wal_AvailableBalance = paramHead.Wal_AvailableBalance - paramHead.RB_ReceiveTotalAmount; paramHead.Wal_AvailableBalance = updateWallet.Wal_AvailableBalance ?? 0; #endregion #region 新增[钱包异动] addWalletTrans.WalT_ID = System.Guid.NewGuid().ToString(); addWalletTrans.WalT_Org_ID = LoginInfoDAX.OrgID; addWalletTrans.WalT_Org_Name = LoginInfoDAX.OrgShortName; addWalletTrans.WalT_Wal_ID = paramHead.Wal_ID; addWalletTrans.WalT_Wal_No = paramHead.Wal_No; addWalletTrans.WalT_Time = BLLCom.GetCurStdDatetime(); addWalletTrans.WalT_TypeCode = WalTransTypeEnum.Code.XF; addWalletTrans.WalT_TypeName = WalTransTypeEnum.Name.XF; addWalletTrans.WalT_Amount = -paramHead.RB_ReceiveTotalAmount; addWalletTrans.WalT_BillNo = paramHead.RB_No; addWalletTrans.WalT_IsValid = true; addWalletTrans.WalT_CreatedBy = LoginInfoDAX.UserName; addWalletTrans.WalT_CreatedTime = BLLCom.GetCurStdDatetime(); addWalletTrans.WalT_UpdatedBy = LoginInfoDAX.UserName; addWalletTrans.WalT_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion } #endregion #endregion #region 带事务的保存 try { DBManager.BeginTransaction(DBCONFIG.Coeus); #region 更新[收款单] bool updateReceiptBillResult = _bll.Save(updateReceiptBill); if (!updateReceiptBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_ReceiptBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 更新[收款单明细] foreach (var loopReceiptBillDetail in updateReceiptBillDetailList) { bool updateDetailResult = _bll.Update(loopReceiptBillDetail); if (!updateDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.APPROVE + SystemTableEnums.Name.FM_ReceiptBillDetail }); return(false); } } #endregion #region 新增[应收单] bool addAccountReceivableBillResult = _bll.InsertByList <MDLFM_AccountReceivableBill, MDLFM_AccountReceivableBill>(addAccountReceivableBillList); if (!addAccountReceivableBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.FM_AccountReceivableBill }); return(false); } #endregion #region 新增[应付单明细] bool addAccountReceivableBillDetailResult = _bll.InsertByList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(addAccountReceivableBillDetailList); if (!addAccountReceivableBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.FM_AccountReceivableBillDetail }); return(false); } #endregion #region 更新[钱包余额]和新增[钱包异动] if (paramHead.RB_ReceiveTypeName == TradeTypeEnum.Name.WALLET) { #region 更新[钱包余额] bool updateWalletResult = _bll.Save(updateWallet); if (!updateWalletResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.EWM_Wallet }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 新增[钱包异动] bool addWalletTransResult = _bll.Insert <MDLEWM_WalletTrans>(addWalletTrans); if (!addWalletTransResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.EWM_WalletTrans }); return(false); } #endregion } #endregion DBManager.CommitTransaction(DBCONFIG.Coeus); } catch (Exception ex) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.APPROVE, ex.Message }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, MethodBase.GetCurrentMethod().ToString(), ex.Message, "", null); return(false); } #endregion //将最新数据回写给DetailDS CopyModel(updateReceiptBill, paramHead); return(true); }
/// <summary> /// 保存数据 /// </summary> /// <param name="paramPayable"></param> /// <param name="paramPayablePayConfirmList"></param> /// <returns></returns> public bool SavePayablePayConfirmData(MDLFM_PayBill paramPayable, List <PayablePayConfirmUIModel> paramPayablePayConfirmList) { var funcName = "SavePayableCashierConfirmData"; LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null); #region 准备数据 #region 变量定义 //待保存的[付款单] MDLFM_PayBill insertPayBill = new MDLFM_PayBill(); //待保存的[付款单明细]列表 List <MDLFM_PayBillDetail> insertPayBillDetailList = new List <MDLFM_PayBillDetail>(); //待更新的[应付单]列表 List <MDLFM_AccountPayableBill> updateAccountPayableBillList = new List <MDLFM_AccountPayableBill>(); //待更新的[应收单]列表 List <MDLFM_AccountReceivableBill> updateAccountReceivableBillList = new List <MDLFM_AccountReceivableBill>(); //待更新的[电子钱包] MDLEWM_Wallet updatewallet = new MDLEWM_Wallet(); //待新增的[电子钱包异动] MDLEWM_WalletTrans insertwalletTrans = new MDLEWM_WalletTrans(); #endregion #region 待保存的[付款单] insertPayBill.PB_ID = Guid.NewGuid().ToString(); insertPayBill.PB_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.PB); insertPayBill.PB_Pay_Org_ID = paramPayablePayConfirmList[0].BusinessOrgID; insertPayBill.PB_Pay_Org_Name = paramPayablePayConfirmList[0].BusinessOrgName; insertPayBill.PB_Date = BLLCom.GetCurStdDatetime(); insertPayBill.PB_RecObjectTypeCode = paramPayablePayConfirmList[0].ReceiveObjectTypeCode; insertPayBill.PB_RecObjectTypeName = paramPayablePayConfirmList[0].ReceiveObjectTypeName; insertPayBill.PB_RecObjectID = paramPayablePayConfirmList[0].ReceiveObjectID; insertPayBill.PB_RecObjectName = paramPayablePayConfirmList[0].ReceiveObjectName; insertPayBill.PB_PayableTotalAmount = paramPayable.PB_PayableTotalAmount; insertPayBill.PB_RealPayableTotalAmount = paramPayable.PB_RealPayableTotalAmount; insertPayBill.PB_PayAccount = paramPayable.PB_PayAccount; insertPayBill.PB_RecAccount = paramPayable.PB_RecAccount; insertPayBill.PB_PayTypeName = paramPayable.PB_PayTypeName; insertPayBill.PB_PayTypeCode = paramPayable.PB_PayTypeCode; insertPayBill.PB_CertificateNo = paramPayable.PB_CertificateNo; insertPayBill.PB_BusinessStatusName = ReceiptBillStatusEnum.Name.YWC; insertPayBill.PB_BusinessStatusCode = ReceiptBillStatusEnum.Code.YWC; insertPayBill.PB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; insertPayBill.PB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; insertPayBill.PB_Remark = paramPayable.PB_Remark; insertPayBill.PB_IsValid = true; insertPayBill.PB_CreatedBy = LoginInfoDAX.UserName; insertPayBill.PB_CreatedTime = BLLCom.GetCurStdDatetime(); insertPayBill.PB_UpdatedBy = LoginInfoDAX.UserName; insertPayBill.PB_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion #region 待保存的[付款单明细]列表,待更新[应收单]或[应付单]列表 foreach (var loopItem in paramPayablePayConfirmList) { if (loopItem.ThisPayAmount == 0 && loopItem.UnPayTotalAmount != 0) { continue; } #region 待保存的[付款单明细] MDLFM_PayBillDetail insertPayBillDetail = new MDLFM_PayBillDetail() { PBD_ID = Guid.NewGuid().ToString(), PBD_PB_ID = insertPayBill.PB_ID, PBD_PB_No = insertPayBill.PB_No, PBD_PayAmount = loopItem.ThisPayAmount, PBD_CreatedBy = LoginInfoDAX.UserName, PBD_CreatedTime = BLLCom.GetCurStdDatetime(), PBD_UpdatedBy = LoginInfoDAX.UserName, PBD_UpdatedTime = BLLCom.GetCurStdDatetime(), }; insertPayBillDetail.PBD_SrcBillNo = loopItem.APB_SourceBillNo == "" ? loopItem.APB_No : loopItem.APB_SourceBillNo; if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SHYF) { insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.BZCG; insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.BZCG; } else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.CKYF) { insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.THSK; insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.THSK; } else if (loopItem.APB_SourceTypeName == AccountPayableBillSourceTypeEnum.Name.SGCJ) { insertPayBillDetail.PBD_SourceTypeName = PayBillDetailSourceTypeEnum.Name.SGFK; insertPayBillDetail.PBD_SourceTypeCode = PayBillDetailSourceTypeEnum.Code.SGFK; } else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.XSYS) { insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.XSSK; insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.XSSK; } else if (loopItem.APB_SourceTypeName == AccountReceivableBillSourceTypeEnum.Name.QTYS) { insertPayBillDetail.PBD_SourceTypeName = ReceiptBillDetailSourceTypeEnum.Name.QTSK; insertPayBillDetail.PBD_SourceTypeCode = ReceiptBillDetailSourceTypeEnum.Code.QTSK; } insertPayBillDetailList.Add(insertPayBillDetail); #endregion #region 待更新的[应付单]或[应收单]列表 if (loopItem.IsBusinessSourceAccountPayableBill) { #region 待更新的[应付单]列表 MDLFM_AccountPayableBill updateAccountPayableBill = new MDLFM_AccountPayableBill { APB_ID = loopItem.APB_ID, APB_No = loopItem.APB_No, APB_BillDirectCode = loopItem.APB_BillDirectCode, APB_BillDirectName = loopItem.APB_BillDirectName, APB_SourceTypeCode = loopItem.APB_SourceTypeCode, APB_SourceTypeName = loopItem.APB_SourceTypeName, APB_SourceBillNo = loopItem.APB_SourceBillNo, APB_Org_ID = loopItem.APB_Org_ID, APB_Org_Name = loopItem.APB_Org_Name, APB_AccountPayableAmount = loopItem.APB_AccountPayableAmount, APB_ApprovalStatusCode = loopItem.APB_ApprovalStatusCode, APB_ApprovalStatusName = loopItem.APB_ApprovalStatusName, APB_CreatedBy = loopItem.APB_CreatedBy, APB_CreatedTime = loopItem.APB_CreatedTime, APB_UpdatedBy = LoginInfoDAX.UserName, APB_UpdatedTime = BLLCom.GetCurStdDatetime(), APB_VersionNo = loopItem.APB_VersionNo, WHERE_APB_ID = loopItem.APB_ID, WHERE_APB_VersionNo = loopItem.APB_VersionNo }; if (updateAccountPayableBill.APB_BillDirectName == BillDirectionEnum.Name.PLUS) { //已付金额 updateAccountPayableBill.APB_PaidAmount = (loopItem.APB_PaidAmount ?? 0) + Math.Abs(loopItem.ThisPayAmount ?? 0); } else { //已付金额 updateAccountPayableBill.APB_PaidAmount = (loopItem.APB_PaidAmount ?? 0) - Math.Abs(loopItem.ThisPayAmount ?? 0); } //未付金额 updateAccountPayableBill.APB_UnpaidAmount = (loopItem.APB_AccountPayableAmount ?? 0) - (updateAccountPayableBill.APB_PaidAmount ?? 0); if (Math.Abs(updateAccountPayableBill.APB_PaidAmount ?? 0) >= Math.Abs(loopItem.APB_AccountPayableAmount ?? 0)) { updateAccountPayableBill.APB_UnpaidAmount = 0; //单据状态 updateAccountPayableBill.APB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC; updateAccountPayableBill.APB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC; } updateAccountPayableBillList.Add(updateAccountPayableBill); #endregion } else { #region 待更新的[应收单]列表 MDLFM_AccountReceivableBill updateAccountReceivableBill = new MDLFM_AccountReceivableBill { ARB_ID = loopItem.APB_ID, ARB_No = loopItem.APB_No, ARB_BillDirectCode = loopItem.APB_BillDirectCode, ARB_BillDirectName = loopItem.APB_BillDirectName, ARB_SourceTypeCode = loopItem.APB_SourceTypeCode, ARB_SourceTypeName = loopItem.APB_SourceTypeName, ARB_SrcBillNo = loopItem.APB_SourceBillNo, ARB_Org_ID = loopItem.APB_Org_ID, ARB_Org_Name = loopItem.APB_Org_Name, ARB_AccountReceivableAmount = loopItem.APB_AccountPayableAmount, ARB_ApprovalStatusCode = loopItem.APB_ApprovalStatusCode, ARB_ApprovalStatusName = loopItem.APB_ApprovalStatusName, ARB_CreatedBy = loopItem.APB_CreatedBy, ARB_CreatedTime = loopItem.APB_CreatedTime, ARB_UpdatedBy = LoginInfoDAX.UserName, ARB_UpdatedTime = BLLCom.GetCurStdDatetime(), ARB_VersionNo = loopItem.APB_VersionNo, WHERE_ARB_ID = loopItem.APB_ID, WHERE_ARB_VersionNo = loopItem.APB_VersionNo }; if (updateAccountReceivableBill.ARB_BillDirectName == BillDirectionEnum.Name.PLUS) { //已收金额 updateAccountReceivableBill.ARB_ReceivedAmount = (loopItem.APB_PaidAmount ?? 0) + Math.Abs(loopItem.ThisPayAmount ?? 0); } else { //已收金额 updateAccountReceivableBill.ARB_ReceivedAmount = (loopItem.APB_PaidAmount ?? 0) - Math.Abs(loopItem.ThisPayAmount ?? 0); } //未收金额 updateAccountReceivableBill.ARB_UnReceiveAmount = (loopItem.APB_AccountPayableAmount ?? 0) - (updateAccountReceivableBill.ARB_ReceivedAmount ?? 0); if (Math.Abs(updateAccountReceivableBill.ARB_ReceivedAmount ?? 0) >= Math.Abs(loopItem.APB_AccountPayableAmount ?? 0)) { updateAccountReceivableBill.ARB_UnReceiveAmount = 0; //单据状态 updateAccountReceivableBill.ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.YWC; updateAccountReceivableBill.ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.YWC; } updateAccountReceivableBillList.Add(updateAccountReceivableBill); #endregion } #endregion } #endregion #region 更新的[电子钱包]、新增的[电子钱包异动] if (paramPayable.PB_PayTypeName == TradeTypeEnum.Name.WALLET && (!string.IsNullOrEmpty(paramPayablePayConfirmList[0].Wal_ID))) { #region 待更新的[电子钱包] updatewallet.WHERE_Wal_ID = paramPayablePayConfirmList[0].Wal_ID; updatewallet.WHERE_Wal_VersionNo = paramPayablePayConfirmList[0].Wal_VersionNo; updatewallet.Wal_AvailableBalance = paramPayablePayConfirmList[0].Wal_AvailableBalance + paramPayable.PB_RealPayableTotalAmount; updatewallet.Wal_VersionNo = paramPayablePayConfirmList[0].Wal_VersionNo + 1; #endregion #region 待新增的[电子钱包异动] insertwalletTrans.WalT_ID = System.Guid.NewGuid().ToString(); insertwalletTrans.WalT_Org_ID = LoginInfoDAX.OrgID; insertwalletTrans.WalT_Org_Name = LoginInfoDAX.OrgShortName; insertwalletTrans.WalT_Wal_ID = paramPayablePayConfirmList[0].Wal_ID; insertwalletTrans.WalT_Wal_No = paramPayablePayConfirmList[0].Wal_No; insertwalletTrans.WalT_Time = BLLCom.GetCurStdDatetime(); insertwalletTrans.WalT_TypeCode = WalTransTypeEnum.Code.XF; insertwalletTrans.WalT_TypeName = WalTransTypeEnum.Name.XF; insertwalletTrans.WalT_Amount = -paramPayable.PB_RealPayableTotalAmount;; insertwalletTrans.WalT_BillNo = insertPayBill.PB_No; insertwalletTrans.WalT_IsValid = true; insertwalletTrans.WalT_CreatedBy = LoginInfoDAX.UserName; insertwalletTrans.WalT_CreatedTime = BLLCom.GetCurStdDatetime(); insertwalletTrans.WalT_UpdatedBy = LoginInfoDAX.UserName; insertwalletTrans.WalT_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion } #endregion #endregion #region 带事务的保存 try { DBManager.BeginTransaction(DBCONFIG.Coeus); #region 保存[付款单明细] bool insertPayBillResult = _bll.Insert(insertPayBill); if (!insertPayBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 保存[付款单明细]列表 if (insertPayBillDetailList.Count > 0) { bool insertPayBillDetailResult = _bll.InsertByList <MDLFM_PayBillDetail, MDLFM_PayBillDetail>(insertPayBillDetailList); if (!insertPayBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_PayBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 更新[应付单]列表 if (updateAccountPayableBillList.Count > 0) { foreach (var loopAccountPayableBill in updateAccountPayableBillList) { bool updateAccountReceivableBill = _bll.Update(loopAccountPayableBill); if (!updateAccountReceivableBill) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_AccountPayableBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } } #endregion #region 更新[应收单]列表 if (updateAccountReceivableBillList.Count > 0) { foreach (var loopAccountReceivableBill in updateAccountReceivableBillList) { bool updateAccountReceivableBill = _bll.Update(loopAccountReceivableBill); if (!updateAccountReceivableBill) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.FM_AccountReceivableBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } } #endregion #region 更新的[电子钱包]、新增的[电子钱包异动] if (paramPayable.PB_PayTypeName == TradeTypeEnum.Name.WALLET && (!string.IsNullOrEmpty(paramPayablePayConfirmList[0].Wal_ID))) { #region 更新的[电子钱包] bool updatewalletResult = _bll.Update(updatewallet); if (!updatewalletResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.EWM_Wallet }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 待新增的[电子钱包异动] bool insertwalletTranslResult = _bll.Insert(insertwalletTrans); if (!insertwalletTranslResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.ADD + SystemTableEnums.Name.EWM_WalletTrans }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion } #endregion DBManager.CommitTransaction(DBCONFIG.Coeus); } catch (Exception ex) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null); return(false); } #endregion return(true); }
/// <summary> /// 反审核 /// </summary> /// <param name="paramHead">UIModel</param> /// <param name="paramDetailList">出库单明细列表</param> /// <returns></returns> public bool UnApproveDetailDS(StockOutBillManagerUIModel paramHead, SkyCarBindingList <StockOutBillManagerDetailUIModel, MDLPIS_StockOutBillDetail> paramDetailList) { var funcName = "UnApproveDetailDS"; LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null); #region 验证 if (paramHead == null || string.IsNullOrEmpty(paramHead.SOB_ID) || string.IsNullOrEmpty(paramHead.SOB_No)) { //没有获取到出库单,反审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.PIS_StockOutBill, SystemActionEnum.Name.UNAPPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 准备数据 #region 变量定义 //待更新的[出库单] var updateStockOutBill = paramHead.ToTBModelForSaveAndDelete <MDLPIS_StockOutBill>(); //待删除的[应收单] MDLFM_AccountReceivableBill deleteAccountReceivableBill = new MDLFM_AccountReceivableBill(); //待删除的[应收单明细]列表 List <MDLFM_AccountReceivableBillDetail> deleteAccountReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>(); //待新增的[库存异动日志]列表 List <MDLPIS_InventoryTransLog> newInventoryTransLogList = new List <MDLPIS_InventoryTransLog>(); //待更新的[库存]列表 List <MDLPIS_Inventory> updateInventoryList = new List <MDLPIS_Inventory>(); #endregion #region 更新[出库单] //将出库单[审核状态]更新为[待审核],[单据状态]更新为[已生成] updateStockOutBill.SOB_VersionNo++; updateStockOutBill.SOB_ApprovalStatusCode = ApprovalStatusEnum.Code.DSH; updateStockOutBill.SOB_ApprovalStatusName = ApprovalStatusEnum.Name.DSH; updateStockOutBill.SOB_UpdatedBy = LoginInfoDAX.UserName; updateStockOutBill.SOB_UpdatedTime = BLLCom.GetCurStdDatetime(); //updateStockOutBill.SOB_StatusCode = StockOutBillStatusEnum.Code.YSC; //updateStockOutBill.SOB_StatusName = StockOutBillStatusEnum.Name.YSC; #endregion #region 获取待删除的[应收单] _bll.QueryForObject <MDLFM_AccountReceivableBill, MDLFM_AccountReceivableBill>(new MDLFM_AccountReceivableBill { WHERE_ARB_SrcBillNo = updateStockOutBill.SOB_No, WHERE_ARB_IsValid = true }, deleteAccountReceivableBill); deleteAccountReceivableBill.WHERE_ARB_ID = deleteAccountReceivableBill.ARB_ID; #endregion #region 获取待删除的[应收单明细]列表 if (!string.IsNullOrEmpty(deleteAccountReceivableBill.ARB_ID)) { _bll.QueryForList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(new MDLFM_AccountReceivableBillDetail { WHERE_ARBD_ARB_ID = deleteAccountReceivableBill.ARB_ID, WHERE_ARBD_SrcBillNo = updateStockOutBill.SOB_No, WHERE_ARBD_IsValid = true }, deleteAccountReceivableBillDetailList); } foreach (var loopAccountReceivableBillDetail in deleteAccountReceivableBillDetailList) { if (string.IsNullOrEmpty(loopAccountReceivableBillDetail.ARBD_ID)) { continue; } loopAccountReceivableBillDetail.WHERE_ARBD_ID = loopAccountReceivableBillDetail.ARBD_ID; } #endregion #region 获取待更新的[库存]列表,生成[库存异动日志] foreach (var loopDetail in paramDetailList) { //待更新的[库存] MDLPIS_Inventory updateInventory = new MDLPIS_Inventory(); _bll.QueryForObject <MDLPIS_Inventory, MDLPIS_Inventory>(new MDLPIS_Inventory { WHERE_INV_Org_ID = updateStockOutBill.SOB_Org_ID, WHERE_INV_WH_ID = loopDetail.SOBD_WH_ID, WHERE_INV_WHB_ID = loopDetail.SOBD_WHB_ID, WHERE_INV_Barcode = loopDetail.SOBD_Barcode, WHERE_INV_BatchNo = loopDetail.SOBD_BatchNo, WHERE_INV_IsValid = true }, updateInventory); if (!string.IsNullOrEmpty(updateInventory.INV_ID) && !string.IsNullOrEmpty(updateInventory.INV_Barcode) && !string.IsNullOrEmpty(updateInventory.INV_BatchNo)) { //[反审核]时,恢复[审核]时出库的配件数量 updateInventory.INV_Qty += loopDetail.SOBD_Qty; updateInventory.INV_UpdatedBy = LoginInfoDAX.UserName; updateInventory.INV_UpdatedTime = BLLCom.GetCurStdDatetime(); updateInventory.WHERE_INV_ID = updateInventory.INV_ID; updateInventory.WHERE_INV_VersionNo = updateInventory.INV_VersionNo; } updateInventoryList.Add(updateInventory); //生成[库存异动日志] newInventoryTransLogList.Add(GenerateInventoryTransLogOfUnApprove(updateStockOutBill, loopDetail, updateInventory)); } #endregion #endregion #region 带事务的保存和删除 try { DBManager.BeginTransaction(DBCONFIG.Coeus); #region 更新[出库单] bool updateStockOutBillResult = _bll.Save(updateStockOutBill); if (!updateStockOutBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_StockOutBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 除[应收单] if (!string.IsNullOrEmpty(deleteAccountReceivableBill.ARB_ID)) { var deleteAccountReceivableBillResult = _bll.Delete <MDLFM_AccountReceivableBill>(deleteAccountReceivableBill); if (!deleteAccountReceivableBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.DELETE + SystemTableEnums.Name.FM_AccountReceivableBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 除[应收单明细] if (deleteAccountReceivableBillDetailList.Count > 0) { var deleteAccountReceivableBillDetailResult = _bll.DeleteByList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(deleteAccountReceivableBillDetailList); if (!deleteAccountReceivableBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.DELETE + SystemTableEnums.Name.FM_AccountReceivableBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 更新[库存] foreach (var loopInventory in updateInventoryList) { bool saveInventoryResult = _bll.Save(loopInventory); if (!saveInventoryResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Inventory }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 新增[库存异动日志] if (newInventoryTransLogList.Count > 0) { bool insertInventoryTransLogResult = _bll.InsertByList <MDLPIS_InventoryTransLog, MDLPIS_InventoryTransLog>(newInventoryTransLogList); if (!insertInventoryTransLogResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_InventoryTransLog }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion DBManager.CommitTransaction(DBCONFIG.Coeus); } catch (Exception ex) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.UNAPPROVE, ex.Message }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null); return(false); } #endregion //将最新数据回写给DetailDS CopyModel(updateStockOutBill, paramHead); return(true); }
/// <summary> /// 审核 /// </summary> /// <param name="paramHead">UIModel</param> /// <param name="paramDetailList">出库单明细列表</param> /// <returns></returns> public bool ApproveDetailDS(StockOutBillManagerUIModel paramHead, SkyCarBindingList <StockOutBillManagerDetailUIModel, MDLPIS_StockOutBillDetail> paramDetailList) { var funcName = "ApproveDetailDS"; LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null); #region 验证 if (paramHead == null || string.IsNullOrEmpty(paramHead.SOB_ID) || string.IsNullOrEmpty(paramHead.SOB_No)) { //没有获取到出库单,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.PIS_StockOutBill, SystemActionEnum.Name.APPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 准备数据 #region 变量定义 //待更新的出库单 MDLPIS_StockOutBill updateStockOutBill = paramHead.ToTBModelForSaveAndDelete <MDLPIS_StockOutBill>(); //待新增的[应收单] MDLFM_AccountReceivableBill newAccountReceivableBill = new MDLFM_AccountReceivableBill(); //待新增的[应收单明细]列表 List <MDLFM_AccountReceivableBillDetail> newAccountReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>(); //待更新的[库存]列表 List <MDLPIS_Inventory> updateInventoryList = new List <MDLPIS_Inventory>(); //待新增的[库存异动日志]列表 List <MDLPIS_InventoryTransLog> newInventoryTransLogList = new List <MDLPIS_InventoryTransLog>(); #endregion //计算出库金额 decimal totalStockOutAmount = CalculateStockOutAmount(updateStockOutBill, paramDetailList); #region 创建[应收单]的场合 if (updateStockOutBill.SOB_SourceTypeName == StockOutBillSourceTypeEnum.Name.SGCJ) { //应收单 //TODO newAccountReceivableBill.ARB_ID = Guid.NewGuid().ToString(); newAccountReceivableBill.ARB_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.APB); newAccountReceivableBill.ARB_BillDirectCode = BillDirectionEnum.Code.MINUS; newAccountReceivableBill.ARB_BillDirectName = BillDirectionEnum.Name.MINUS; //newAccountReceivableBill.ARB_SourceTypeCode = AccountReceivableBillSourceTypeEnum.Code.; //newAccountReceivableBill.ARB_SourceTypeName = AccountReceivableBillSourceTypeEnum.Name.CKYF; newAccountReceivableBill.ARB_SrcBillNo = updateStockOutBill.SOB_No; newAccountReceivableBill.ARB_Org_ID = LoginInfoDAX.OrgID; newAccountReceivableBill.ARB_Org_Name = LoginInfoDAX.OrgShortName; //newAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code; //newAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.AUTOPARTSSUPPLIER; newAccountReceivableBill.ARB_PayObjectID = paramHead.SOB_SUPP_ID; newAccountReceivableBill.ARB_PayObjectName = paramHead.SOB_SUPP_Name; newAccountReceivableBill.ARB_AccountReceivableAmount = totalStockOutAmount; newAccountReceivableBill.ARB_ReceivedAmount = 0; newAccountReceivableBill.ARB_UnReceiveAmount = totalStockOutAmount; newAccountReceivableBill.ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.ZXZ; newAccountReceivableBill.ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.ZXZ; newAccountReceivableBill.ARB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; newAccountReceivableBill.ARB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; newAccountReceivableBill.ARB_IsValid = true; newAccountReceivableBill.ARB_CreatedBy = LoginInfoDAX.UserName; newAccountReceivableBill.ARB_CreatedTime = BLLCom.GetCurStdDatetime(); newAccountReceivableBill.ARB_UpdatedBy = LoginInfoDAX.UserName; newAccountReceivableBill.ARB_UpdatedTime = BLLCom.GetCurStdDatetime(); } #endregion #region 更新[出库单] //将出库单审核状态更新为[已审核],单据状态更新为[已完成] updateStockOutBill.SOB_VersionNo++; updateStockOutBill.SOB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; updateStockOutBill.SOB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; updateStockOutBill.SOB_UpdatedBy = LoginInfoDAX.UserName; updateStockOutBill.SOB_UpdatedTime = BLLCom.GetCurStdDatetime(); //updateStockOutBill.SOB_StatusCode = StockOutBillStatusEnum.Code.YWC; //updateStockOutBill.SOB_StatusName = StockOutBillStatusEnum.Name.YWC; #endregion #region 遍历[出库单明细]列表,创建[应收单明细]和[应收单明细],创建或更新[库存],创建[库存异动日志] foreach (var loopStockOutBillDetail in paramDetailList) { if (string.IsNullOrEmpty(loopStockOutBillDetail.SOBD_Barcode) || string.IsNullOrEmpty(loopStockOutBillDetail.SOBD_BatchNo)) { continue; } if (updateStockOutBill.SOB_SourceTypeName == StockOutBillSourceTypeEnum.Name.THCK) { //出库明细 loopStockOutBillDetail.WHERE_SOBD_ID = loopStockOutBillDetail.SOBD_ID; loopStockOutBillDetail.WHERE_SOBD_VersionNo = loopStockOutBillDetail.SOBD_VersionNo; #region 应收单明细 MDLFM_AccountReceivableBillDetail newAccountReceivableBillDetail = new MDLFM_AccountReceivableBillDetail { ARBD_ID = Guid.NewGuid().ToString(), ARBD_ARB_ID = newAccountReceivableBill.ARB_ID, ARBD_IsMinusDetail = false, ARBD_SrcBillNo = updateStockOutBill.SOB_No, ARBD_SrcBillDetailID = loopStockOutBillDetail.SOBD_ID, ARBD_Org_ID = newAccountReceivableBill.ARB_Org_ID, ARBD_Org_Name = newAccountReceivableBill.ARB_Org_Name, ARBD_AccountReceivableAmount = loopStockOutBillDetail.SOBD_Amount, ARBD_ReceivedAmount = 0, ARBD_UnReceiveAmount = loopStockOutBillDetail.SOBD_Amount, ARBD_BusinessStatusCode = newAccountReceivableBill.ARB_BusinessStatusCode, ARBD_BusinessStatusName = newAccountReceivableBill.ARB_BusinessStatusName, ARBD_ApprovalStatusCode = newAccountReceivableBill.ARB_ApprovalStatusCode, ARBD_ApprovalStatusName = newAccountReceivableBill.ARB_ApprovalStatusName, ARBD_IsValid = true, ARBD_CreatedBy = LoginInfoDAX.UserName, ARBD_CreatedTime = BLLCom.GetCurStdDatetime(), ARBD_UpdatedBy = LoginInfoDAX.UserName, ARBD_UpdatedTime = BLLCom.GetCurStdDatetime() }; newAccountReceivableBillDetailList.Add(newAccountReceivableBillDetail); #endregion #region 库存和库存异动日志 //在[出库单明细]列表中第一次出现的配件[库存]信息 MDLPIS_Inventory inventoryExists = null; foreach (var loopInventory in updateInventoryList) { if (loopInventory.INV_Barcode == loopStockOutBillDetail.SOBD_Barcode && loopInventory.INV_BatchNo == loopStockOutBillDetail.SOBD_BatchNo) { inventoryExists = loopInventory; break; } } if (inventoryExists != null) { if (inventoryExists.INV_Qty < loopStockOutBillDetail.SOBD_Qty) { //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不足,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[] { loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode, MsgParam.SHORTAGE, SystemActionEnum.Name.APPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } //[出库单明细]列表中已遍历过该配件,累减数量 inventoryExists.INV_Qty -= loopStockOutBillDetail.SOBD_Qty; //生成[库存异动日志] newInventoryTransLogList.Add(GenerateInventoryTransLogOfApprove(updateStockOutBill, loopStockOutBillDetail, inventoryExists)); } else { //[出库单明细]列表中第一次出现该配件 //查询该配件是否在[库存]中存在 MDLPIS_Inventory resultInventory = new MDLPIS_Inventory(); _bll.QueryForObject <MDLPIS_Inventory, MDLPIS_Inventory>(new MDLPIS_Inventory { WHERE_INV_Org_ID = updateStockOutBill.SOB_Org_ID, WHERE_INV_Barcode = loopStockOutBillDetail.SOBD_Barcode, WHERE_INV_BatchNo = loopStockOutBillDetail.SOBD_BatchNo, WHERE_INV_WH_ID = loopStockOutBillDetail.SOBD_WH_ID, WHERE_INV_IsValid = true }, resultInventory); //[库存]中不存在该配件 if (string.IsNullOrEmpty(resultInventory.INV_ID)) { //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不存在,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[] { loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode, MsgParam.NOTEXIST, SystemActionEnum.Name.APPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } if (resultInventory.INV_Qty < loopStockOutBillDetail.SOBD_Qty) { //配件:loopStockOutBillDetail.SOBD_Name(条形码:loopStockOutBillDetail.SOBD_Barcode)的库存不足,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.E_0030, new object[] { loopStockOutBillDetail.SOBD_Name, loopStockOutBillDetail.SOBD_Barcode, MsgParam.SHORTAGE, SystemActionEnum.Name.APPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } //[库存]中存在该配件 //更新[库存]中该配件的数量 resultInventory.INV_Qty -= loopStockOutBillDetail.SOBD_Qty; resultInventory.INV_UpdatedBy = LoginInfoDAX.UserName; resultInventory.INV_UpdatedTime = BLLCom.GetCurStdDatetime(); resultInventory.WHERE_INV_ID = resultInventory.INV_ID; resultInventory.WHERE_INV_VersionNo = resultInventory.INV_VersionNo; updateInventoryList.Add(resultInventory); //生成[库存异动日志] newInventoryTransLogList.Add(GenerateInventoryTransLogOfApprove(updateStockOutBill, loopStockOutBillDetail, resultInventory)); } #endregion } } #endregion #endregion #region 带事务的新增和保存 try { DBManager.BeginTransaction(DBCONFIG.Coeus); #region 新增[应收单] if (!string.IsNullOrEmpty(newAccountReceivableBill.ARB_ID)) { bool insertAccountReceivableBillResult = _bll.Insert(newAccountReceivableBill); if (!insertAccountReceivableBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 新增[应收单明细] if (newAccountReceivableBillDetailList.Count > 0) { bool insertAccountReceivableBillDetailResult = _bll.InsertByList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(newAccountReceivableBillDetailList); if (!insertAccountReceivableBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 保存[出库单] bool updateStockOutBillResult = _bll.Save(updateStockOutBill); if (!updateStockOutBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.PIS_StockOutBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 保存[出库单明细] var updateDetailList = new List <MDLPIS_StockOutBillDetail>(); //将当前DetailGridDS转换为指定类型的TBModelList paramDetailList.ToTBModelListForUpdateAndDelete <MDLPIS_StockOutBillDetail>(updateDetailList); foreach (var loopStockoutBillDetail in updateDetailList) { bool saveStockOutBillDetailResult = _bll.Save(loopStockoutBillDetail); if (!saveStockOutBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_StockOutBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 更新[库存] foreach (var loopInventory in updateInventoryList) { bool saveInventoryResult = _bll.Save(loopInventory); if (!saveInventoryResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Inventory }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 新增[库存异动日志] if (newInventoryTransLogList.Count > 0) { bool insertInventoryTransLogResult = _bll.InsertByList <MDLPIS_InventoryTransLog, MDLPIS_InventoryTransLog>(newInventoryTransLogList); if (!insertInventoryTransLogResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_InventoryTransLog }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion DBManager.CommitTransaction(DBCONFIG.Coeus); } catch (Exception ex) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.APPROVE, ex.Message }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion //将最新数据回写给DetailDS CopyModel(updateStockOutBill, paramHead); //更新明细版本号 foreach (var loopInsertDetail in paramDetailList.InsertList) { //新增时版本号为1 loopInsertDetail.SOBD_VersionNo = 1; } foreach (var loopUpdateDetail in paramDetailList.UpdateList) { //更新时版本号加1 loopUpdateDetail.SOBD_VersionNo = loopUpdateDetail.SOBD_VersionNo + 1; } return(true); }
/// <summary> /// 审核 /// </summary> /// <param name="paramHead">销售订单</param> /// <param name="paramDetailList">销售订单明细列表</param> /// <param name="paramStockOutDetailList">出库明细列表</param> /// <param name="paramReturnStockInDetailList">退货入库明细列表</param> /// <param name="paramIsHasInventory">是否启用进销存模块</param> /// <returns></returns> public bool ApproveDetailDS(SalesReturnOrderManagerUIModel paramHead, SkyCarBindingList <SalesOrderDetailUIModel, MDLSD_SalesOrderDetail> paramDetailList, List <SalesStockOutDetailUIModel> paramStockOutDetailList, List <ReturnStockInDetailUIModel> paramReturnStockInDetailList, bool paramIsHasInventory) { var funcName = "ApproveDetailDS"; LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null); #region 验证 if (paramHead == null || string.IsNullOrEmpty(paramHead.SO_ID) || string.IsNullOrEmpty(paramHead.SO_No)) { //没有获取到销售订单,审核失败 ResultMsg = MsgHelp.GetMsg(MsgCode.W_0024, new object[] { SystemTableEnums.Name.SD_SalesOrder, SystemActionEnum.Name.APPROVE }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 准备数据 #region 变量定义 //待更新的[销售订单] MDLSD_SalesOrder updateSalesOrder = paramHead.ToTBModelForSaveAndDelete <MDLSD_SalesOrder>(); //待新增的退货时的[应收单] MDLFM_AccountReceivableBill newRejectAccountReceivableBill = new MDLFM_AccountReceivableBill(); //待新增的退货时的[应收单明细]列表 List <MDLFM_AccountReceivableBillDetail> newRejectReceivableBillDetailList = new List <MDLFM_AccountReceivableBillDetail>(); //待新增的退货入库[入库单] MDLPIS_StockInBill newReturnStockInBill = new MDLPIS_StockInBill(); //待新增的退货入库[入库单明细]列表 List <MDLPIS_StockInDetail> newReturnStockInDetailList = new List <MDLPIS_StockInDetail>(); //待更新的[库存]列表 List <MDLPIS_Inventory> updateStockInInventoryList = new List <MDLPIS_Inventory>(); //待新增的[库存异动日志]列表 List <MDLPIS_InventoryTransLog> newStockInInventoryTransLogList = new List <MDLPIS_InventoryTransLog>(); #endregion #region 更新销售订单 //更新[销售订单]审核状态为[已审核],单据状态根据[来源类型]决定 updateSalesOrder.SO_VersionNo++; updateSalesOrder.SO_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; updateSalesOrder.SO_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; updateSalesOrder.SO_UpdatedBy = LoginInfoDAX.UserName; updateSalesOrder.SO_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion #region [销售订单].[来源类型]为{手工创建退货}、{在线销售退货}、{主动销售退货}的场合 //销售退货的场合,更新[销售订单].[单据状态]为[交易成功] updateSalesOrder.SO_StatusCode = SalesOrderStatusEnum.Code.JYCG; updateSalesOrder.SO_StatusName = SalesOrderStatusEnum.Name.JYCG; #region 创建退货入库的[入库单] //新增[来源类型]为[销售退货],[业务状态]为{已完成},[审核状态]为{已审核}的[入库单] newReturnStockInBill.SIB_ID = Guid.NewGuid().ToString(); newReturnStockInBill.SIB_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.SIB); newReturnStockInBill.SIB_SourceTypeCode = StockInBillSourceTypeEnum.Code.SSTH; newReturnStockInBill.SIB_SourceTypeName = StockInBillSourceTypeEnum.Name.SSTH; newReturnStockInBill.SIB_SourceNo = updateSalesOrder.SO_No; newReturnStockInBill.SIB_Org_ID = updateSalesOrder.SO_Org_ID; newReturnStockInBill.SIB_StatusName = StockInBillStatusEnum.Name.YWC; newReturnStockInBill.SIB_StatusCode = StockInBillStatusEnum.Code.YWC; newReturnStockInBill.SIB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; newReturnStockInBill.SIB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; newReturnStockInBill.SIB_IsValid = true; newReturnStockInBill.SIB_CreatedBy = LoginInfoDAX.UserName; newReturnStockInBill.SIB_CreatedTime = BLLCom.GetCurStdDatetime(); newReturnStockInBill.SIB_UpdatedBy = LoginInfoDAX.UserName; newReturnStockInBill.SIB_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion #region 创建负向的[应收单] //新增[来源类型]为[销售应收],[单据方向]为[负向],金额为负,[业务状态]为{执行中},[审核状态]为{已审核}的[应收单] newRejectAccountReceivableBill.ARB_ID = Guid.NewGuid().ToString(); newRejectAccountReceivableBill.ARB_No = BLLCom.GetCoeusDocumentNo(DocumentTypeEnums.Code.ARB); newRejectAccountReceivableBill.ARB_BillDirectCode = BillDirectionEnum.Code.MINUS; newRejectAccountReceivableBill.ARB_BillDirectName = BillDirectionEnum.Name.MINUS; newRejectAccountReceivableBill.ARB_SourceTypeCode = AccountReceivableBillSourceTypeEnum.Code.XSYS; newRejectAccountReceivableBill.ARB_SourceTypeName = AccountReceivableBillSourceTypeEnum.Name.XSYS; newRejectAccountReceivableBill.ARB_SrcBillNo = updateSalesOrder.SO_No; newRejectAccountReceivableBill.ARB_Org_ID = LoginInfoDAX.OrgID; newRejectAccountReceivableBill.ARB_Org_Name = LoginInfoDAX.OrgShortName; if (paramHead.SO_CustomerTypeName == CustomerTypeEnum.Name.PTNQXSH) { newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.PLATFORMAUTOFACTORY; newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.PLATFORMAUTOFACTORY; } else if (paramHead.SO_CustomerTypeName == CustomerTypeEnum.Name.YBQXSH) { newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.GENERALAUTOFACTORY; newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.GENERALAUTOFACTORY; } else { newRejectAccountReceivableBill.ARB_PayObjectTypeName = AmountTransObjectTypeEnum.Name.REGULARCUSTOMER; newRejectAccountReceivableBill.ARB_PayObjectTypeCode = AmountTransObjectTypeEnum.Code.REGULARCUSTOMER; } newRejectAccountReceivableBill.ARB_PayObjectName = paramHead.SO_CustomerName; newRejectAccountReceivableBill.ARB_PayObjectID = paramHead.SO_CustomerID; newRejectAccountReceivableBill.ARB_BusinessStatusCode = AccountReceivableBillStatusEnum.Code.ZXZ; newRejectAccountReceivableBill.ARB_BusinessStatusName = AccountReceivableBillStatusEnum.Name.ZXZ; newRejectAccountReceivableBill.ARB_ApprovalStatusCode = ApprovalStatusEnum.Code.YSH; newRejectAccountReceivableBill.ARB_ApprovalStatusName = ApprovalStatusEnum.Name.YSH; newRejectAccountReceivableBill.ARB_IsValid = true; newRejectAccountReceivableBill.ARB_CreatedBy = LoginInfoDAX.UserName; newRejectAccountReceivableBill.ARB_CreatedTime = BLLCom.GetCurStdDatetime(); newRejectAccountReceivableBill.ARB_UpdatedBy = LoginInfoDAX.UserName; newRejectAccountReceivableBill.ARB_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion //退货产生的应收单.[应收金额] decimal returnReceivableAmount = 0; foreach (var loopSalesOrderReturnDetail in paramDetailList) { #region 退货的[销售订单明细] //[销售订单明细]审核状态 和 单据状态与单头一致 loopSalesOrderReturnDetail.WHERE_SOD_ID = loopSalesOrderReturnDetail.SOD_ID; loopSalesOrderReturnDetail.WHERE_SOD_VersionNo = loopSalesOrderReturnDetail.SOD_VersionNo; loopSalesOrderReturnDetail.SOD_VersionNo++; loopSalesOrderReturnDetail.SOD_ApprovalStatusCode = updateSalesOrder.SO_ApprovalStatusCode; loopSalesOrderReturnDetail.SOD_ApprovalStatusName = updateSalesOrder.SO_ApprovalStatusName; loopSalesOrderReturnDetail.SOD_StatusCode = updateSalesOrder.SO_StatusCode; loopSalesOrderReturnDetail.SOD_StatusName = updateSalesOrder.SO_StatusName; loopSalesOrderReturnDetail.SOD_UpdatedBy = LoginInfoDAX.UserName; loopSalesOrderReturnDetail.SOD_UpdatedTime = BLLCom.GetCurStdDatetime(); #endregion #region 退货的[应收单明细] //新增[来源类型]为[销售应收],[是否负向明细]为[true],金额为负的[应收单明细] MDLFM_AccountReceivableBillDetail newAccountReceivableBillDetail = new MDLFM_AccountReceivableBillDetail { ARBD_ID = Guid.NewGuid().ToString(), ARBD_ARB_ID = newRejectAccountReceivableBill.ARB_ID, ARBD_IsMinusDetail = true, ARBD_SrcBillNo = updateSalesOrder.SO_No, ARBD_SrcBillDetailID = loopSalesOrderReturnDetail.SOD_ID, ARBD_Org_ID = newRejectAccountReceivableBill.ARB_Org_ID, ARBD_Org_Name = newRejectAccountReceivableBill.ARB_Org_Name, //应收金额 = 销售数量(退货数量) * 单价 ARBD_AccountReceivableAmount = -Math.Round((loopSalesOrderReturnDetail.SOD_Qty ?? 0) * (loopSalesOrderReturnDetail.SOD_UnitPrice ?? 0), 2), ARBD_ReceivedAmount = 0, ARBD_UnReceiveAmount = -Math.Round((loopSalesOrderReturnDetail.SOD_Qty ?? 0) * (loopSalesOrderReturnDetail.SOD_UnitPrice ?? 0), 2), ARBD_BusinessStatusCode = newRejectAccountReceivableBill.ARB_BusinessStatusCode, ARBD_BusinessStatusName = newRejectAccountReceivableBill.ARB_BusinessStatusName, ARBD_ApprovalStatusCode = newRejectAccountReceivableBill.ARB_ApprovalStatusCode, ARBD_ApprovalStatusName = newRejectAccountReceivableBill.ARB_ApprovalStatusName, ARBD_IsValid = true, ARBD_CreatedBy = LoginInfoDAX.UserName, ARBD_CreatedTime = BLLCom.GetCurStdDatetime(), ARBD_UpdatedBy = LoginInfoDAX.UserName, ARBD_UpdatedTime = BLLCom.GetCurStdDatetime() }; returnReceivableAmount += (newAccountReceivableBillDetail.ARBD_AccountReceivableAmount ?? 0); newRejectReceivableBillDetailList.Add(newAccountReceivableBillDetail); #endregion } //[应收单].[应收金额] newRejectAccountReceivableBill.ARB_AccountReceivableAmount = returnReceivableAmount; newRejectAccountReceivableBill.ARB_ReceivedAmount = 0; newRejectAccountReceivableBill.ARB_UnReceiveAmount = returnReceivableAmount; //[销售单].[总金额] updateSalesOrder.SO_TotalAmount = returnReceivableAmount; foreach (var loopReturnStockInDetail in paramReturnStockInDetailList) { #region 退货入库的[入库单明细] MDLPIS_StockInDetail newStockInDetail = new MDLPIS_StockInDetail(); _bll.CopyModel(loopReturnStockInDetail, newStockInDetail); newStockInDetail.SID_ID = Guid.NewGuid().ToString(); newStockInDetail.SID_SIB_ID = newReturnStockInBill.SIB_ID; newStockInDetail.SID_SIB_No = newReturnStockInBill.SIB_No; newStockInDetail.SID_IsValid = true; newStockInDetail.SID_CreatedBy = LoginInfoDAX.UserName; newStockInDetail.SID_CreatedTime = BLLCom.GetCurStdDatetime(); newStockInDetail.SID_UpdatedBy = LoginInfoDAX.UserName; newStockInDetail.SID_UpdatedTime = BLLCom.GetCurStdDatetime(); var curInDetailOfSalesDetail = paramDetailList.FirstOrDefault(x => x.SOD_Barcode == newStockInDetail.SID_Barcode); if (curInDetailOfSalesDetail != null) { //[入库单明细].[来源单据明细ID] 为 [销售退货单明细].[ID] newStockInDetail.SID_SourceDetailID = curInDetailOfSalesDetail.SOD_ID; } newReturnStockInDetailList.Add(newStockInDetail); #endregion if (paramIsHasInventory) { #region 进销存 并且 审核销售退货订单的场合,创建相关单据为已审核的场合,更新[库存],创建[库存异动日志] //在[入库单明细]列表中第一次出现的配件[库存]信息 MDLPIS_Inventory inventoryExists = null; foreach (var loopInventory in updateStockInInventoryList) { if (loopInventory.INV_Barcode == loopReturnStockInDetail.SID_Barcode && loopInventory.INV_BatchNo == loopReturnStockInDetail.SID_BatchNo) { inventoryExists = loopInventory; break; } } if (inventoryExists != null) { //[入库单明细]列表中已遍历过该配件,累加数量 inventoryExists.INV_Qty += loopReturnStockInDetail.SID_Qty; inventoryExists.INV_UpdatedBy = LoginInfoDAX.UserName; inventoryExists.INV_UpdatedTime = BLLCom.GetCurStdDatetime(); //生成[库存异动日志] newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, inventoryExists, paramHead)); } else { //[入库单明细]列表中第一次出现该配件 //查询该配件是否在[库存]中存在 MDLPIS_Inventory resultInventory = new MDLPIS_Inventory(); _bll.QueryForObject <MDLPIS_Inventory, MDLPIS_Inventory>(new MDLPIS_Inventory { WHERE_INV_Org_ID = newReturnStockInBill.SIB_Org_ID, WHERE_INV_Barcode = loopReturnStockInDetail.SID_Barcode, WHERE_INV_BatchNo = loopReturnStockInDetail.SID_BatchNo, WHERE_INV_WH_ID = loopReturnStockInDetail.SID_WH_ID, WHERE_INV_IsValid = true }, resultInventory); //[库存]中不存在该配件 if (string.IsNullOrEmpty(resultInventory.INV_ID)) { //新增一个该配件的库存信息 MDLPIS_Inventory inventoryToInsert = new MDLPIS_Inventory { INV_Org_ID = newReturnStockInBill.SIB_Org_ID, INV_SUPP_ID = loopReturnStockInDetail.SID_SUPP_ID, INV_WH_ID = loopReturnStockInDetail.SID_WH_ID, INV_WHB_ID = loopReturnStockInDetail.SID_WHB_ID, INV_ThirdNo = loopReturnStockInDetail.SID_ThirdNo, INV_OEMNo = loopReturnStockInDetail.SID_OEMNo, INV_Barcode = loopReturnStockInDetail.SID_Barcode, INV_BatchNo = loopReturnStockInDetail.SID_BatchNo, INV_Name = loopReturnStockInDetail.SID_Name, INV_Specification = loopReturnStockInDetail.SID_Specification, INV_Qty = loopReturnStockInDetail.SID_Qty, INV_PurchaseUnitPrice = loopReturnStockInDetail.SID_UnitCostPrice, INV_IsValid = true, INV_CreatedBy = LoginInfoDAX.UserName, INV_CreatedTime = BLLCom.GetCurStdDatetime(), INV_UpdatedBy = LoginInfoDAX.UserName, INV_UpdatedTime = BLLCom.GetCurStdDatetime() }; updateStockInInventoryList.Add(inventoryToInsert); //生成[库存异动日志] newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, inventoryToInsert, paramHead)); } //[库存]中存在该配件 else { //更新[库存]中该配件的数量 resultInventory.INV_Qty += loopReturnStockInDetail.SID_Qty; resultInventory.INV_UpdatedBy = LoginInfoDAX.UserName; resultInventory.INV_UpdatedTime = BLLCom.GetCurStdDatetime(); resultInventory.WHERE_INV_ID = resultInventory.INV_ID; resultInventory.WHERE_INV_VersionNo = resultInventory.INV_VersionNo; updateStockInInventoryList.Add(resultInventory); //生成[库存异动日志] newStockInInventoryTransLogList.Add(GenerateStockInInventoryTransLog(newReturnStockInBill, loopReturnStockInDetail, resultInventory, paramHead)); } } #endregion } } #endregion #endregion #region 带事务的新增和更新 try { DBManager.BeginTransaction(DBCONFIG.Coeus); #region 更新[销售订单] bool saveSalesOrder = _bll.Save(updateSalesOrder); if (!saveSalesOrder) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { MsgParam.UPDATE + SystemTableEnums.Name.SD_SalesOrder }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 保存[销售订单明细] bool saveSalesOrderDetailResult = _bll.UnitySave(paramDetailList); if (!saveSalesOrderDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.SD_SalesOrderDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion #region 新增[应收单] if (!string.IsNullOrEmpty(newRejectAccountReceivableBill.ARB_ID)) { //销售退货时产生的负向的[销售应收] bool insertAccountReceivableBillResult = _bll.Insert(newRejectAccountReceivableBill); if (!insertAccountReceivableBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 新增[应收单明细] //销售退货时产生的负向的[销售应收] if (newRejectReceivableBillDetailList.Count > 0) { bool insertAccountReceivableBillDetailResult = _bll.InsertByList <MDLFM_AccountReceivableBillDetail, MDLFM_AccountReceivableBillDetail>(newRejectReceivableBillDetailList); if (!insertAccountReceivableBillDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.FM_AccountReceivableBillDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 保存[库存] foreach (var loopInventory in updateStockInInventoryList) { bool saveInventoryResult = _bll.Save(loopInventory); if (!saveInventoryResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Inventory }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 新增[库存异动日志] if (newStockInInventoryTransLogList.Count > 0) { bool insertInventoryTransLogResult = _bll.InsertByList <MDLPIS_InventoryTransLog, MDLPIS_InventoryTransLog>(newStockInInventoryTransLogList); if (!insertInventoryTransLogResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_InventoryTransLog }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 销售退货入库时生成[入库单] if (!string.IsNullOrEmpty(newReturnStockInBill.SIB_ID)) { bool insertStockInBillResult = _bll.Insert(newReturnStockInBill); if (!insertStockInBillResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_StockInBill }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion #region 销售退货入库时生成[入库单明细] if (newReturnStockInDetailList.Count > 0) { bool insertStockInDetailResult = _bll.InsertByList <MDLPIS_StockInDetail, MDLPIS_StockInDetail>(newReturnStockInDetailList); if (!insertStockInDetailResult) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.NEW + SystemTableEnums.Name.PIS_StockInDetail }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } } #endregion DBManager.CommitTransaction(DBCONFIG.Coeus); } catch (Exception ex) { DBManager.RollBackTransaction(DBCONFIG.Coeus); ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.APPROVE, ex.Message }); LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null); return(false); } #endregion //将最新数据回写给DetailDS _bll.CopyModel(updateSalesOrder, paramHead); return(true); }