public override object Do(object obj)
        {
            CalculationDRMoneyBP bpObj = (CalculationDRMoneyBP)obj;

            if (bpObj == null)
            {
                return(false);
            }

            using (ISession session = Session.Open())
            {
                foreach (CalculationDRMoneyDTO dto in bpObj.CalculationDRMoneyDTOs)
                {
                    UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister mDoc = UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister.Finder.FindByID(dto.EntityKey);
                    if (mDoc == null)
                    {
                        throw new Exception("单据不存在!" + dto.DocNo);
                    }

                    if (mDoc.DRMoney < mDoc.SumDRMoney + dto.DRMoney)
                    {
                        throw new Exception("单号" + mDoc.DocNo + "扣款失败:本次扣款金额大于可扣款金额!");
                    }

                    if (bpObj.Type == 0)//累加
                    {
                        mDoc.SumDRMoney = mDoc.SumDRMoney + dto.DRMoney;
                        mDoc.LastDRDate = DateTime.Now;
                    }
                    if (bpObj.Type == 0)//累减
                    {
                        mDoc.SumDRMoney = mDoc.SumDRMoney - dto.DRMoney;
                    }
                    #region 处理扣款状态
                    if (mDoc.SumDRMoney > 0 && mDoc.SumDRMoney < mDoc.DRMoney)
                    {
                        mDoc.DRStatus = DRStatusEnum.Part;//部分扣款
                    }
                    if (mDoc.SumDRMoney == 0)
                    {
                        mDoc.DRStatus   = DRStatusEnum.None;//未扣款
                        mDoc.LastDRDate = DateTime.MinValue;
                    }
                    if (mDoc.SumDRMoney == mDoc.DRMoney)
                    {
                        mDoc.DRStatus = DRStatusEnum.Closed;//扣款关闭
                    }
                    #endregion
                }
                session.Commit();
            }

            return(true);
        }
示例#2
0
        /// <summary>
        /// 更新扣款登记的累计扣款金额
        /// </summary>
        /// <param name="type">操作来源类型,0:新增操作,1:删除操作,2:更新操作</param>
        /// <param name="oldMoney"></param>
        /// <param name="newMoney"></param>
        /// <param name="id"></param>
        public static void UpdateDeductionRegister(int type, decimal oldMoney, decimal newMoney, long id)
        {
            using (ISession session = Session.Open())
            {
                UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister doc = UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister.Finder.FindByID(id);
                if (doc != null)
                {
                    if (type == 0)
                    {
                        doc.SumDRMoney = doc.SumDRMoney + newMoney;
                        doc.LastDRDate = DateTime.Now;
                    }
                    else if (type == 1)
                    {
                        doc.SumDRMoney = doc.SumDRMoney - newMoney;
                        doc.LastDRDate = DateTime.MinValue;
                    }
                    else
                    {
                        doc.SumDRMoney = doc.SumDRMoney - oldMoney + newMoney;
                        doc.LastDRDate = DateTime.Now;
                    }
                    if (doc.SumDRMoney > doc.DRMoney)
                    {
                        throw new Exception("本次扣款金额大于扣款登记的可扣款金额!单号:" + doc.DocNo);
                    }

                    if (doc.SumDRMoney > 0 && doc.SumDRMoney < doc.DRMoney)
                    {
                        doc.DRStatus = DRStatusEnum.Part;//部分扣款
                    }
                    if (doc.SumDRMoney == 0)
                    {
                        doc.DRStatus = DRStatusEnum.None;//未扣款
                    }
                    if (doc.SumDRMoney == doc.DRMoney)
                    {
                        doc.DRStatus = DRStatusEnum.Closed;//扣款关闭
                    }
                }
                session.Commit();
            }
        }
        /// <summary>
        /// 更新扣款登记的累计扣款金额及扣款状态
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="thisMoney"></param>
        private void UpdateDeductionRegister(UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister doc, decimal thisMoney)
        {
            doc.SumDRMoney = doc.SumDRMoney + thisMoney;
            doc.LastDRDate = DateTime.Now;

            if (doc.SumDRMoney > 0 && doc.SumDRMoney < doc.DRMoney)
            {
                doc.DRStatus = DRStatusEnum.Part;//部分扣款
            }
            if (doc.SumDRMoney == 0)
            {
                doc.DRStatus   = DRStatusEnum.None;//未扣款
                doc.LastDRDate = DateTime.MinValue;
            }
            if (doc.SumDRMoney == doc.DRMoney)
            {
                doc.DRStatus = DRStatusEnum.Closed;//扣款关闭
            }
        }
        /// <summary>
        /// 创建预付款通知单扣款明细
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="line"></param>
        /// <param name="LineNum"></param>
        private void CreatePrePaymentDRDetail(PreDeductionRegisterDTO dto, UFIDA.U9.Cust.GS.FI.PrePaymentBE.PrePaymentLine line, int LineNum)
        {
            UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister drDoc = dto.DeductionRegisterKey.GetEntity();
            if (drDoc != null)
            {
                UFIDA.U9.Cust.GS.FI.PrePaymentBE.PrePaymentDRDetail subLine = UFIDA.U9.Cust.GS.FI.PrePaymentBE.PrePaymentDRDetail.Create(line);
                subLine.LineNum = LineNum;

                subLine.SrcDocNo     = drDoc.DocNo;
                subLine.SrcDocID     = drDoc.ID;
                subLine.SrcBusDate   = drDoc.BusinessDate;
                subLine.SrcDocOrgKey = drDoc.OrgKey;
                subLine.SupplierKey  = drDoc.SupplierKey;
                subLine.SumDRMoney   = drDoc.DRMoney;
                subLine.CurrencyKey  = drDoc.CurrencyKey;
                subLine.DRMoney      = dto.ThisDRMoney;

                //UpdateDeductionRegister(drDoc, dto.ThisDRMoney);
            }
        }
        public override object Do(object obj)
        {
            ApprovedDeductionRegisterBP bpObj = (ApprovedDeductionRegisterBP)obj;

            ErrorMessageDTO dto = new ErrorMessageDTO();

            if (bpObj == null)
            {
                dto.IsSuccess    = false;
                dto.ErrorMessage = "没有可返回的信息!";
                return(dto);
            }

            UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.DeductionRegister mDoc = bpObj.EntityKey.GetEntity();

            if (mDoc == null)
            {
                dto.IsSuccess    = false;
                dto.ErrorMessage = "单据不存在或者已删除!";
                return(dto);
            }

            try
            {
                if (bpObj.DocStatus == 0)
                {
                    //提交
                    using (Session s = Session.Open())
                    {
                        mDoc.StateMachineInstance.Opened_SubmitEventDriven(new UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.SubmintEvent());
                        s.InList(mDoc);
                        s.Commit();
                    }
                }

                else if (bpObj.DocStatus == 1)
                {
                    //审核
                    using (Session s = Session.Open())
                    {
                        mDoc.StateMachineInstance.Approving_ApproveEventDriven(new UFIDA.U9.GeneralEvents.ApprovalResultEvent());
                        s.InList(mDoc);
                        s.Commit();
                    }
                }
                else if (bpObj.DocStatus == 2)
                {
                    if (mDoc.SumDRMoney > 0)
                    {
                        dto.IsSuccess    = false;
                        dto.ErrorMessage = "已执行扣款,不允许弃审!";
                        return(dto);
                    }
                    //弃审
                    using (Session s = Session.Open())
                    {
                        mDoc.StateMachineInstance.Approved_UnApprovedEventDriven(new UFIDA.U9.Cust.GS.FI.DeductionRegisterBE.UnApprovedEvent());
                        s.InList(mDoc);
                        s.Commit();
                    }
                }
                else if (bpObj.DocStatus == 3)
                {
                    //收回
                    using (Session s = Session.Open())
                    {
                        ApprovalService.Instance.CanRevocateAfterSubmit(mDoc, long.Parse(UFIDA.U9.Base.Context.LoginUserID.ToString()));
                        ApprovalService.Instance.RevocateAfterSubmit(mDoc, long.Parse(UFIDA.U9.Base.Context.LoginUserID.ToString()));
                        s.InList(mDoc);
                        s.Commit();
                    }
                }
                dto.IsSuccess = true;
            }
            catch (Exception ex)
            {
                dto.IsSuccess    = false;
                dto.ErrorMessage = ex.Message;
            }
            return(dto);
        }