using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using GThinking.N_MISPRO; using GThinking.N_MODEL.Page; using GThinking.N_MISPRO.Data; using GThinking.N_PUBLIC; using System.Text; using GThinking.N_MISPRO.Utility; using GThinking.N_MISPRO.TableCache; using GThinking.N_WORKFLOW; using System.Drawing; using System.Collections.Generic; namespace GThinking.N_XLXSBJ { [TableMap(DB = "DBERP", DbTableName = "XLXSZBFWFL", Umid = 100860000, IsWorkFlow = false,UseWhr=false,IsAttach=false)] public class XLBJD_YZ_ZBFW : EntityManager { } public partial class XLBJD_YZ_ZBFWFInfo : SingleGridBase { XLBJD_YZ_ZBFW entity = new XLBJD_YZ_ZBFW(); protected void Page_Load(object sender, EventArgs e) { this.UMID = 100860000; this.UMName = "线缆销售报价单"; this.CurMaster = Master; this.ModuleGV = grdContentGrid; this.CurEntity = entity; this.PageHeight = 600; this.PageWidth = 700; Master.EnableNewBtn = false; Master.EnableEditBtn = false; Master.EnableCopyBtn = false; Master.EnableDeleteBtn = false; Master.EnableViewBtn = false; Master.EnableQueryBtn = false; Master.EnablePrintBtn = false; base.DataKeyNames = new string[] { "XLXSZBFWFL_ZBJES", "XLXSZBFWFL_ZBJEZ", "XLXSZBFWFL_FL", "ZBFWF" }; base.InitPage(); if (!IsPostBack) { Master_OnStandardQuery(null, null); InitControl(); } } #region 模板事件继承 protected override void Master_OnStandardQuery(object sender, EventArgs e) { entity.EntityTable.QuerySelSql = GetSQL(); base.Master_OnStandardQuery(sender, e); entity.GridDataBind(grdContentGrid, tSession); } protected override void moduleGV_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { double dBJJES = CMISproConvert.StrToFloat(grdContentGrid.DataKeys[e.Row.RowIndex]["XLXSZBFWFL_ZBJES"].ToString().Trim()); double dBJJEZ = CMISproConvert.StrToFloat(grdContentGrid.DataKeys[e.Row.RowIndex]["XLXSZBFWFL_ZBJEZ"].ToString().Trim()); double dFL = CMISproConvert.StrToFloat(grdContentGrid.DataKeys[e.Row.RowIndex]["XLXSZBFWFL_FL"].ToString().Trim()); double dZJE = CMISproConvert.StrToFloat(PageParam.GetRTrimString("BJDJE"))/10000;//单位为万元 if (dZJE > dBJJES) { if (dZJE > dBJJEZ) { e.Row.Cells[3].Text = NumberUtils.RoundX((dBJJEZ - dBJJES) * dFL / 100, 6).ToString(); } else { e.Row.Cells[3].Text = NumberUtils.RoundX((dZJE - dBJJES) * dFL / 100, 6).ToString(); } } } base.moduleGV_RowDataBound(sender, e); } protected override void moduleGV_PageIndexChanging(object sender, GridViewPageEventArgs e) { entity.EntityTable.QuerySelSql = GetSQL(); grdContentGrid.SelectedIndex = -1; base.moduleGV_PageIndexChanging(sender, e); } #endregion #region 自定义函数 private string GetSQL() { StringBuilder sSQL = new StringBuilder(); sSQL.AppendLine("select XLXSZBFWFL_ZBJES,XLXSZBFWFL_ZBJEZ,XLXSZBFWFL_FL,0.0 AS ZBFWF"); sSQL.AppendLine(" FROM XLXSZBFWFL "); sSQL.AppendLine(" WHERE XLXSZBFWFL_XMMC=:pXMMC "); sSQL.AppendLine(" ORDER BY XLXSZBFWFL_ZBJES "); string sXMMC = PageParam.GetRTrimString("XMMC"); if (!CMISproDataBase.ExistsRecord("DBERP", string.Format("SELECT 1 FROM XLXSZBFWFL WHERE XLXSZBFWFL_XMMC='{0}'", sXMMC))) { sXMMC = " "; } entity.Param.Add("pXMMC", sXMMC); return sSQL.ToString(); } private void InitControl() { grdContentGrid.AllowPaging = false; string sJGBBJBM = string.IsNullOrEmpty(PageParam.GetRTrimString("JGBBJBM")) ? "表价" : PageParam.GetRTrimString("JGBBJBM"); tr2.Style["height"] = "15px"; txtZJE.Value = PageParam.GetRTrimString("BJDJE"); cbxSZFW.ClearItems(); if (PageParam.GetRTrimString("PLSZAll").Equals("N")) cbxSZFW.Items.Add(new ListItem("勾选记录", "N")); cbxSZFW.Items.Add(new ListItem("整单记录", "Y")); if (PageParam.ContainsKey("FromXHDYSX")) cbxSZFW.Items.Add(new ListItem("所查记录", "C")); if (PageParam.GetRTrimString("PLSZAll").Equals("D")) cbxSZFW.Items.Add(new ListItem("当前记录", "D")); cbxSZFW.SelectedValue = PageParam.GetRTrimString("PLSZAll"); chkYBJ.Text = "有" + sJGBBJBM; lblYZID.Text = PageParam.GetRTrimString("YZMC") + ":"; lblJE.Text = PageParam.GetRTrimString("YZMC") + "总金额:"; string sJJFS = PageParam.GetRTrimString("JJFS"); if (sJJFS.Equals("JD") || sJJFS.Equals("KD") || sJJFS.Equals("SX") || sJJFS.Equals("DD") || sJJFS.Equals("MD") || sJJFS.Equals("MP")) { lblDW.Text = "%"; } else if (sJJFS.Equals("JJ")) { if (XLBJDUtils.GetYZXXByYZID(PageParam.GetRTrimString("YZID")).XLXSTZYZ_TJLX == "1") lblDW.Text = "元"; else lblDW.Text = ""; } else if (sJJFS.Equals("MX") || sJJFS.Equals("DX")) { //乘以系数/除以系数 lblDW.Text = ""; txtYZZ.DecimalPlaces = 4; } lblJSGS.Text = PageParam.GetRTrimString("YZMC")+"*折扣比例/报价总金额"; //赋值放在设置完小数位数之后 txtYZZ.Value = CMISproConvert.StrToFloat(PageParam.GetRTrimString("DefYZZ"), 0); string sMRTJFW = "," + PageParam.GetRTrimString("MRTJFW") + ","; if (sMRTJFW.Contains(",1,")) chkYBJ.Checked = true; if (sMRTJFW.Contains(",2,")) chkWG.Checked = true; if (sMRTJFW.Contains(",3,")) chkFWG.Checked = true; txtZKBL.Value = 80; double dYZZ = 0; TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sql = new TSQL(dberp); string sBJDID=PageParam.GetRTrimString("BJDID"); string sBJDXHList=PageParam.GetRTrimString("BJDXHList"); sql.Clear(); sql.Add(string.Format("select top 1 XLXSBJDYZZ0_YZZ{0} from XLXSBJDYZZ0 where XLXSBJDYZZ0_BJDID=:pBJDID ", PageParam.GetRTrimString("YZID").Replace("BJ", ""))); if (!string.IsNullOrEmpty(sBJDXHList)) sql.Add(" and XLXSBJDYZZ0_XH= "+sBJDXHList.Split(',')[0]); sql.ParamByName("pBJDID").Value=sBJDID; DataSet ds = dberp.OpenDataSet(sql); if (ds.Tables[0].Rows.Count > 0) { dYZZ = CMISproConvert.StrToFloat(ds.Tables[0].Rows[0][0].ToString().Trim()); } txtBJJE.Value = CMISproConvert.StrToFloat(txtZJE.Value) * (1 - dYZZ / 100.0); txtJE.Value = GetZBFWF(dberp, PageParam.GetRTrimString("XMMC"), txtBJJE.Value, txtZKBL.Value, txtYZZ.DecimalPlaces); txtYZZ.Value = NumberUtils.RoundX(txtJE.Value * txtZKBL.Value / txtBJJE.Value, txtYZZ.DecimalPlaces); } //获取报价单主表中标服务费 public static double GetZBFWF(TDatabase dberp, string sXMMC, double dZBJE, double dZBFWFXFBL,int decimalPlaces) { dZBFWFXFBL = dZBFWFXFBL / 100; // 计算中标服务费 double dZBFWF = 0; TSQL SQL = new TSQL(dberp); try { // 优先查询项目名称对应的费率记录 SQL.Clear(); SQL.Add(" select XLXSZBFWFL_ZBJES*10000 AS XLXSZBFWFL_ZBJES, XLXSZBFWFL_ZBJEZ*10000 AS XLXSZBFWFL_ZBJEZ, XLXSZBFWFL_FL "); SQL.Add(" from XLXSZBFWFL "); SQL.Add(" where XLXSZBFWFL_XMMC=:pXMMC "); SQL.Add(" order by XLXSZBFWFL_ZBJES "); SQL.ParamByName("pXMMC").Value = sXMMC; DataSet dsRate = dberp.OpenDataSet(SQL); // 如果没有找到项目名称对应的记录,则查询XLXSZBFWFL_XMMC=''的记录 if (dsRate.Tables[0].Rows.Count == 0) { SQL.Clear(); SQL.Add(" select XLXSZBFWFL_ZBJES*10000 AS XLXSZBFWFL_ZBJES, XLXSZBFWFL_ZBJEZ*10000 AS XLXSZBFWFL_ZBJEZ, XLXSZBFWFL_FL "); SQL.Add(" from XLXSZBFWFL "); SQL.Add(" where XLXSZBFWFL_XMMC=' ' "); SQL.Add(" order by XLXSZBFWFL_ZBJES "); dsRate = dberp.OpenDataSet(SQL); } // 分段计算中标服务费 if (dsRate.Tables[0].Rows.Count > 0) { double currentAmount = dZBJE; for (int i = 0; i < dsRate.Tables[0].Rows.Count; i++) { double lowerLimit = CMISproConvert.StrToFloat(dsRate.Tables[0].Rows[i]["XLXSZBFWFL_ZBJES"].ToString()); double upperLimit = CMISproConvert.StrToFloat(dsRate.Tables[0].Rows[i]["XLXSZBFWFL_ZBJEZ"].ToString()); double rate = CMISproConvert.StrToFloat(dsRate.Tables[0].Rows[i]["XLXSZBFWFL_FL"].ToString()); if (currentAmount <= 0) break; double segmentAmount = 0; if (i == dsRate.Tables[0].Rows.Count - 1) { // 最后一段,全部剩余金额 segmentAmount = currentAmount; } else { // 非最后一段,取当前段的金额 segmentAmount = Math.Min(currentAmount, upperLimit - lowerLimit); } // 累加当前段的服务费 dZBFWF += segmentAmount * rate / 100; currentAmount -= segmentAmount; } } else { // 如果没有找到任何费率记录,使用默认费率表计算 double[] lowerLimits = { 0, 100, 500, 1000, 5000, 10000, 100000 }; double[] upperLimits = { 100, 500, 1000, 5000, 10000, 100000, double.MaxValue }; double[] rates = { 1.5, 1.1, 0.8, 0.5, 0.25, 0.05, 0.01 }; double currentAmount = dZBJE; for (int i = 0; i < lowerLimits.Length; i++) { if (currentAmount <= 0) break; double segmentAmount = 0; if (dZBJE > upperLimits[i]) { segmentAmount = upperLimits[i] - lowerLimits[i]; } else if (dZBJE > lowerLimits[i]) { segmentAmount = dZBJE - lowerLimits[i]; } if (segmentAmount > 0) { dZBFWF += segmentAmount * rates[i] / 100; } } } // 应用下浮比例 //dZBFWF = NumberUtils.RoundX(dZBFWF * dZBFWFXFBL * 100/ dZBJE, decimalPlaces); } catch (Exception ex) { throw new Exception(ex.Message); } return dZBFWF; } #endregion #region 自定义按钮 protected void btnOK_Click(object sender, EventArgs e) { if (cbxSZFW.SelectedValue.Trim().Equals("")) { ShowMessage("调价范围--不允许为空!"); return; } if (!PageParam.GetRTrimString("MinYZZ").Equals("")) { if (txtYZZ.Value < CMISproConvert.StrToFloat(PageParam.GetRTrimString("MinYZZ"), 0)) { ShowMessage(string.Format("不允许低于设置的调价最小值{0}!", PageParam.GetRTrimString("MinYZZ"))); return; } } if (!PageParam.GetRTrimString("MaxYZZ").Equals("")) { if (txtYZZ.Value > CMISproConvert.StrToFloat(PageParam.GetRTrimString("MaxYZZ"), 0)) { ShowMessage(string.Format("不允许高于设置的调价最大值{0}!", PageParam.GetRTrimString("MaxYZZ"))); return; } } string sYZID = PageParam.GetRTrimString("YZID"); string sYZZList = sYZID + "|" + txtYZZ.Value.ToString() + "|" + (chkYBJ.Checked ? "Y" : "N") + "," + (chkWG.Checked ? "Y" : "N") + "," + (chkFWG.Checked ? "Y" : "N"); //使用脚本给父页面的隐藏控件赋值,调用父页面的控件事件 DialogOperationScript dos = new DialogOperationScript(this); dos.SetOwnerControlValue(PageParam.GetRTrimString("txtPLSZAllCID"), cbxSZFW.SelectedValue.Trim()); dos.SetOwnerControlValue(PageParam.GetRTrimString("txtPLSZYZListCID"), sYZZList); dos.ClickOwnerButton(PageParam.GetRTrimString("btnRefreshCID")); dos.CloseSelf(); dos.Execute(); } protected void btnQX_Click(object sender, EventArgs e) { CloseWindow(); } #endregion #region 控件事件 protected void chkWG_OnCheckedChanged(object sender, EventArgs e) { if (chkWG.Checked) chkFWG.Checked = false; FormAreaUpdate(); moduleGV_PageIndexChanging(null, null); } protected void chkFWG_OnCheckedChanged(object sender, EventArgs e) { if (chkFWG.Checked) chkWG.Checked = false; FormAreaUpdate(); moduleGV_PageIndexChanging(null, null); } protected void txtZKBL_TextChanged(object sender, EventArgs e) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); txtJE.Value = GetZBFWF(dberp, PageParam.GetRTrimString("XMMC"), txtBJJE.Value, txtZKBL.Value, txtYZZ.DecimalPlaces); txtYZZ.Value = NumberUtils.RoundX(txtJE.Value * txtZKBL.Value / txtBJJE.Value, txtYZZ.DecimalPlaces); FormAreaUpdate(); moduleGV_PageIndexChanging(null, null); } #endregion } }