Ejemplo n.º 1
0
        /// <summary>
        /// 将发票对象关联到计划收款对象
        /// </summary>
        /// <param name="receiptObj">计划收款对象</param>
        /// <param name="relateValue">关联金额(默认为0,当为0时,且offset为false,关联金额自动等于计划收款金额。当默认为0,且offset为true,关联金额则取发票和计划收款的金额小的金额)</param>
        /// <param name="offSet">是否冲销关联</param>
        public void RelateToReceiptObject(S_C_ManageContract_ReceiptObj receiptObj, decimal relateValue = 0, bool offSet = false)
        {
            var marketEntites = this.GetMarketContext();

            marketEntites.S_C_Invoice_ReceiptObject.Delete(d => d.ReceiptObjectID == receiptObj.ID && d.S_C_InvoiceID == this.ID);
            var relation = marketEntites.S_C_Invoice_ReceiptObject.Create();

            relation.ID              = FormulaHelper.CreateGuid();
            relation.S_C_InvoiceID   = this.ID;
            relation.ReceiptObjectID = receiptObj.ID;
            relation.ContractInfoID  = this.ContractInfoID;
            relation.ModifyDate      = DateTime.Now;
            var userInfo = FormulaHelper.GetUserInfo();

            relation.ModifyUserName = userInfo.UserName;
            relation.ModifyUserID   = userInfo.UserID;
            relation.S_C_Invoice    = this;
            if (relateValue == 0)
            {
                relateValue = Convert.ToDecimal(receiptObj.ReceiptValue);
            }
            if (!offSet)
            {
                if (relateValue > this.Amount)
                {
                    throw new Formula.Exceptions.BusinessException("收款对应到发票的金额,不能高于发票金额");
                }

                if (relateValue > receiptObj.ReceiptValue)
                {
                    throw new Formula.Exceptions.BusinessException("【" + receiptObj.Name + "】对应到发票的金额,不能高于计划收款金额");
                }
                var relationValue      = receiptObj.S_C_Invoice_ReceiptObject.Where(d => d.S_C_InvoiceID != this.ID).Sum(d => d.RelationValue);
                var remainInvoiceValue = receiptObj.ReceiptValue - relationValue;
                if (relateValue > remainInvoiceValue)
                {
                    throw new Formula.Exceptions.BusinessException("【" + receiptObj.Name + "】对应到发票的金额,不能高于剩余可开票金额【" + remainInvoiceValue + "】");
                }
            }
            else
            {
                if (relateValue > receiptObj.ReceiptValue)
                {
                    relateValue = Convert.ToDecimal(receiptObj.ReceiptValue);
                }
                if (relateValue > this.Amount)
                {
                    relateValue = Convert.ToDecimal(this.Amount);
                }
            }
            relation.RelationValue = relateValue;
            marketEntites.S_C_Invoice_ReceiptObject.Add(relation);
            receiptObj.SummaryInvoiceValue();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将发票对象关联到计划收款对象
        /// </summary>
        /// <param name="receiptObj">计划收款对象</param>
        /// <param name="relateValue">关联金额(默认为0,当为0时,且offset为false,关联金额自动等于计划收款金额。当默认为0,且offset为true,关联金额则取发票和计划收款的金额小的金额)</param>
        /// <param name="offSet">是否冲销关联</param>
        public void RelateToReceiptObject(S_C_Invoice invoice, S_C_ManageContract_ReceiptObj receiptObj, decimal relateValue = 0, bool offSet = false)
        {
            var marketEntites = invoice.GetMarketContext();

            marketEntites.S_C_Invoice_ReceiptObject.Delete(d => d.ReceiptObjectID == receiptObj.ID && d.S_C_InvoiceID == invoice.ID);
            var relation = marketEntites.S_C_Invoice_ReceiptObject.Create();

            relation.ID              = FormulaHelper.CreateGuid();
            relation.S_C_InvoiceID   = invoice.ID;
            relation.ReceiptObjectID = receiptObj.ID;
            relation.ContractInfoID  = invoice.ContractInfoID;
            relation.ModifyDate      = DateTime.Now;
            var userInfo = FormulaHelper.GetUserInfo();

            relation.ModifyUserName = userInfo.UserName;
            relation.ModifyUserID   = userInfo.UserID;
            relation.S_C_Invoice    = invoice;
            if (relateValue == 0)
            {
                relateValue = Convert.ToDecimal(receiptObj.ReceiptValue);
            }

            //if (!offSet)
            {
                if (relateValue > this.Amount)//不用invoice.Amount因为invoice.Amount已经是负数
                {
                    throw new Formula.Exceptions.BusinessException("收款对应到发票的金额,不能高于发票金额");
                }

                if (relateValue > receiptObj.FactInvoiceValue)
                {
                    throw new Formula.Exceptions.BusinessException("【" + receiptObj.Name + "】对应到发票的金额,不能高于已开票金额");
                }
            }
            //else
            //{
            //    if (relateValue > receiptObj.ReceiptValue)
            //        relateValue = Convert.ToDecimal(receiptObj.ReceiptValue);
            //    if (relateValue > this.Amount)
            //        relateValue = Convert.ToDecimal(this.Amount);
            //}

            relation.RelationValue = -relateValue;
            marketEntites.S_C_Invoice_ReceiptObject.Add(relation);
            receiptObj.SummaryInvoiceValue();
        }