using System; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.App.Data; using System.ComponentModel; using Kingdee.BOS.Core.Bill.PlugIn.Args; using Kingdee.BOS.Util; using Kingdee.BOS.WebApi.Client; using Newtonsoft.Json.Linq; using System.Net.Http; using System.Text; using Kingdee.BOS.WebApi.FormService; using Newtonsoft.Json; namespace GZ_LthFHTZSava { [Description("保存前触发,以收款条件和发货金额做判断01"), HotUpdate] public class SaveYFH : AbstractBillPlugIn { private double F_Amount; //获取当前时间 private DateTime now = DateTime.Now; public override void BeforeSave(BeforeSaveEventArgs e) { base.BeforeSave(e); //获取发货通知单的销售范围#字段 var F_SalesRange = this.View.Model.GetValue("F_SalesRange"); //判断销售范围字段等于购销 if (F_SalesRange.ToString() == "GX") { //获取发货通知单的源单编号字段 var FSrcBillNo = this.View.Model.GetValue("FSrcBillNo", 0); //SQL查询获取销售订单的累计核销金额字段 var F_AmountSql = string.Format(@"SELECT F_AMOUNT FROM T_SAL_ORDER WHERE FBILLNO = '{0}'", FSrcBillNo.ToString()); var F_AmountDS = DBUtils.ExecuteDynamicObject(this.Context, F_AmountSql); if (F_AmountDS.Count != 0) { F_Amount = Convert.ToDouble(F_AmountDS[0]["F_AMOUNT"]); } //SQL以销售订单编号做查询,查询收款条件名称 var SKTJFNameSql = string.Format(@"SELECT ISNULL(t3.FNAME,'') AS FNAME FROM T_SAL_ORDER t1 LEFT JOIN T_SAL_ORDERPLAN t2 on t1.FID = t2.FID LEFT JOIN T_BD_RECCONDITION_L t3 on t3.FID = t2.F_RecConditionId Where t1.FBILLNO = '{0}'", FSrcBillNo.ToString()); var SKTJFNameDS = DBUtils.ExecuteDynamicObject(this.Context, SKTJFNameSql); foreach (var SKTJFNameRow in SKTJFNameDS) { if (SKTJFNameRow["FNAME"].ToString() == "") { continue; } //判定收款条件是否为预付款 string IFYFK = "预付"; if (SKTJFNameRow["FNAME"].ToString().Contains(IFYFK)) { //SQL查询获取销售订单预付款的应收金额 string FRecAdvanceAmountSql = string.Format(@"SELECT SUM(t1.FRecAdvanceAmount) AS FRecAdvanceAmount FROM T_SAL_ORDERPLAN t1 LEFT JOIN T_SAL_ORDER t2 on t1.FID = t2.FID LEFT JOIN T_BD_RECCONDITION_L t3 on t3.FID = t1.F_RECCONDITIONID WHERE t2.FBILLNO = '{0}' AND t3.FNAME like '%预付%'", FSrcBillNo); var FRecAdvanceAmountDS = DBUtils.ExecuteDynamicObject(this.Context, FRecAdvanceAmountSql); if (FRecAdvanceAmountDS.Count != 0) { double FRecAdvanceAmount = Convert.ToDouble(FRecAdvanceAmountDS[0]["FRecAdvanceAmount"]); //判定收款条件为预付款时,是否为预发货 if (F_Amount < FRecAdvanceAmount) { this.View.Model.SetValue("F_SFYFH", "是"); this.View.Model.SetValue("F_VRYF_Date_83g", now); this.View.UpdateView(); } else { this.View.Model.SetValue("F_SFYFH", "否"); this.View.Model.SetValue("F_VRYF_Date_83g", now); this.View.UpdateView(); } } } //判定条件是否为款到发货 string IFKDFH = "款到发货"; if (SKTJFNameRow["FNAME"].ToString().Contains(IFKDFH)) { //获取当前单据的发货金额 double FBillAllAmount1 = Convert.ToDouble(this.View.Model.GetValue("FBillAllAmount")); string FBillAllAmountSql; //SQL查询累计发货金额 if (this.View.Model.GetValue("FBillNo").IsNullOrEmpty()) { FBillAllAmountSql = string.Format(@"SELECT SUM(t1.FBillAllAmount) FBillAllAmount FROM T_SAL_DELIVERYNOTICEFIN t1 LEFT JOIN T_SAL_DELIVERYNOTICEENTRY t2 on t1.FID = t2.FID WHERE t2.FSRCBILLNO = '{0}'And t2.FID != 0", FSrcBillNo); } else { //获取发货通知单的FID string FormTitle = this.View.Model.DataObject["Id"].ToString(); FBillAllAmountSql = string.Format(@"SELECT SUM(t1.FBillAllAmount) FBillAllAmount FROM T_SAL_DELIVERYNOTICEFIN t1 LEFT JOIN T_SAL_DELIVERYNOTICEENTRY t2 on t1.FID = t2.FID WHERE t2.FSRCBILLNO = '{0}' And t1.FID != '{1}'", FSrcBillNo, FormTitle); } var FBillAllAmountDS = DBUtils.ExecuteDynamicObject(this.Context, FBillAllAmountSql); if (FBillAllAmountDS.Count != 0) { double FBillAllAmount = Convert.ToDouble(FBillAllAmountDS[0]["FBillAllAmount"]); if (F_Amount < FBillAllAmount + FBillAllAmount1) { this.View.Model.SetValue("F_SFYFH", "是"); this.View.UpdateView(); this.View.Model.SetValue("F_VRYF_Date_83g", now); this.View.UpdateView(); } else { this.View.Model.SetValue("F_SFYFH", "否"); this.View.UpdateView(); this.View.Model.SetValue("F_VRYF_Date_83g", now); this.View.UpdateView(); } } } ////判定条件是否为协议付款 //string IFXYFK = "协议付款"; //if (SKTJFNameRow["FNAME"].ToString().Contains(IFXYFK)) //{ // //SQL查询销售组织和客户编码 // string FSaleOrgIdAndFCustIdSql = string.Format(@"SELECT t1.FSaleOrgId AS FSaleOrgId,t2.FNUMBER AS FNUMBER FROM T_SAL_ORDER t1 LEFT JOIN T_BD_CUSTOMER t2 on t1.FCUSTID = t2.FCUSTID WHERE FBILLNO = '{0}'", FSrcBillNo); // var FSaleOrgIdAndFCustIdDS = DBUtils.ExecuteDynamicObject(this.Context, FSaleOrgIdAndFCustIdSql); // if (FSaleOrgIdAndFCustIdDS.Count != 0) // { // //获取销售组织 // string FSaleOrgId = FSaleOrgIdAndFCustIdDS[0]["FSaleOrgId"].ToString(); // //获取客户编码 // string FCustId = FSaleOrgIdAndFCustIdDS[0]["FNUMBER"].ToString(); // //通过API获取客户剩余信用额度 // var Json = "{\"FieldKeys\":\"FLIMITBALANCE\",\"SchemeId\":\"\",\"StartRow\":0,\"Limit\":2000,\"IsVerifyBaseDataField\":\"true\",\"FilterString\":[],\"Model\":{\"FSaleOrgList\":\"" + FSaleOrgId + "\",\"FObjectType\":\"BD_Customer\",\"FStartCustId\":{\"FNumber\":\"" + FCustId + "\"},\"FEndCustId\":{\"FNumber\":\"" + FCustId + "\"},\"FCreditStatus\":\"ALL\",\"FIsExceeds\":\"-1\",\"FMultiSelect\":false}}"; // var result = WebApiServiceCall.GetSysReportData(this.Context, "CRE_Rpt_CreditInfo", Json); // var resultJo = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result)); // var IsSuccess = resultJo["Result"]["IsSuccess"].Value(); // if (IsSuccess == "True") // { // var RowCount = resultJo["Result"]["RowCount"].Value(); // if (RowCount != 0) // { // JArray FLIMITBALANCEJArray = resultJo["Result"]["Rows"].Value(); // double FLIMITBALANCE = Convert.ToDouble(FLIMITBALANCEJArray[0][0]); // //查询当前发货通知单的发货金额 // double FBillAllAmount = Convert.ToDouble(this.View.Model.GetValue("FBillAllAmount").ToString()); // //发货金额大于剩余额度百分之九十,则判定为预发货 // if (FBillAllAmount > FLIMITBALANCE * 0.9) // { // this.View.Model.SetValue("F_SFYFH", "是"); // this.View.UpdateView(); // this.View.Model.SetValue("F_VRYF_Date_83g", now); // this.View.UpdateView(); // } // else // { // this.View.Model.SetValue("F_SFYFH", "否"); // this.View.UpdateView(); // this.View.Model.SetValue("F_VRYF_Date_83g", now); // this.View.UpdateView(); // } // } // else if (RowCount == 0) // { // this.View.Model.SetValue("F_SFYFH", "是"); // this.View.UpdateView(); // this.View.ShowErrMessage("客户编码: " + FCustId + ",未启用信用管理"); // this.View.Model.SetValue("F_VRYF_Date_83g", now); // this.View.UpdateView(); // } // else // { // this.View.Model.SetValue("F_SFYFH", "否"); // this.View.UpdateView(); // this.View.Model.SetValue("F_VRYF_Date_83g", now); // this.View.UpdateView(); // } // } // } //} } } } } }