/// <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(); }
/// <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(); }