using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace FineUIPro.Web.common
{
    public partial class main : PageBase
    {
        #region 加载
        protected void Page_Load(object sender, EventArgs e)
        {
            // 表头过滤
            FilterDataRowItem = FilterDataRowItemImplement;
            if (!IsPostBack)
            {
                StartTime.Text = DateTime.Now.AddMonths(-11).ToString(StartTime.DateFormatString);
                EndTime.Text = DateTime.Now.ToString(EndTime.DateFormatString);

                rStartTime.Text = DateTime.Now.AddMonths(-11).ToString("yyyy-MM-dd");
                rEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd");

                this.BindGrid();

                this.Grid1.SelectedRowIndex = 0;
            }
            else if (GetRequestEventArgument() == "FilterChange")
            {
                BindGrid();
            }
        }

        #region 绑定 Grid1
        /// <summary>
        /// BindGrid
        /// </summary>
        private void BindGrid()
        {
            string strSql = @" SELECT fc.ID, fc.FO_NO,
                                      (CASE WHEN dis.Discipline IS NULL THEN dis.DisciplineCN
		                                    WHEN dis.DisciplineCN IS NULL THEN dis.Discipline
		                                    ELSE dis.Discipline+dis.DisciplineCN END) AS Discipline,
                                      con.Contractor AS Contractor, fc.Pricing_Scheme as Pricing_SchemeId,
                                      ps.PriceScheme AS Pricing_Scheme, fc.Original_WC,fc.Contractor,
                                      fc.Contract_Admin as Contract_AdminId,CA.UserName AS Contract_Admin, fc.Buyer,
                                      mc.UserName AS Main_Coordinator, ur.UserName AS User_Representative,
                                      fc.Contract_Person, fc.Contract_Tel,fc.Validate_Date, fc.Expire_Date,
									  CONVERT(VARCHAR(10),CONVERT(DECIMAL(18,2),(fc.Actual_Budget-ISNULL(c.CheckedValue,0))/fc.Actual_Budget*100))+'%' AS Remaining_Budget_Rate,
                                      (CASE WHEN DATEDIFF(DAY,fc.Validate_Date,fc.Expire_Date)>0
									        THEN CONVERT(VARCHAR(10),CONVERT(DECIMAL(18,2),CONVERT(DECIMAL(18,2),DATEDIFF(DAY,GETDATE(),fc.Expire_Date))/CONVERT(DECIMAL(18,2),DATEDIFF(DAY,fc.Validate_Date,fc.Expire_Date))*100))+'%'
									        ELSE ''END) AS Remaining_Duration_Rate                                  
                                FROM dbo.FC_SESRelatedData AS fc 
								LEFT JOIN dbo.Base_Contractor AS con ON con.ContractorId = fc.Contractor
                                LEFT JOIN dbo.Base_PriceScheme AS ps ON ps.PriceSchemeId = fc.Pricing_Scheme
                                LEFT JOIN dbo.Sys_User AS CA ON CA.UserId = fc.Contract_Admin
                                LEFT JOIN dbo.Sys_User AS mc ON mc.UserId = fc.Main_Coordinator
                                LEFT JOIN dbo.Sys_User AS ur ON ur.UserId = fc.User_Representative
								LEFT JOIN dbo.Base_Discipline AS dis ON dis.DisciplineId = fc.DisciplineId
                                LEFT JOIN(SELECT SUM(Net_Value) AS CheckedValue,CPTList.Contract_No FROM dbo.SESList 
			                    LEFT JOIN dbo.CPTList ON CPTList.CPT_No = SESList.CPT_No GROUP BY CPTList.Contract_No) AS c ON c.Contract_No=fc.FO_NO
                                WHERE 1=1 ";

            List<SqlParameter> listStr = new List<SqlParameter>();
            if (this.drpValidContracts.SelectedValue == "1")
            {
                strSql += " AND fc.Expire_Date >= @expire_Date";
                listStr.Add(new SqlParameter("@expire_Date", DateTime.Now));
            }
            if (!string.IsNullOrEmpty(this.txtDescription.Text.Trim()))
            {
                strSql += " AND fc.Contract_Title LIKE @Description";
                listStr.Add(new SqlParameter("@Description", "%" + this.txtDescription.Text.Trim() + "%"));
            }
            if (!string.IsNullOrEmpty(this.txtContractor.Text.Trim()))
            {
                strSql += " AND con.Contractor LIKE @Contractor";
                listStr.Add(new SqlParameter("@Contractor", "%" + this.txtContractor.Text.Trim() + "%"));
            }
            if (!string.IsNullOrEmpty(this.hdKeyword.Text.Trim()))
            {
                strSql += " AND con.Contractor LIKE @Contractor";
                listStr.Add(new SqlParameter("@Contractor", "%" + this.hdKeyword.Text.Trim() + "%"));
            }
            if (!string.IsNullOrEmpty(this.hdContractNo.Text.Trim()))
            {
                strSql += " AND fc.FO_NO LIKE @FO_NO";
                listStr.Add(new SqlParameter("@FO_NO", "%" + this.hdContractNo.Text.Trim() + "%"));
            }
            if (!string.IsNullOrEmpty(this.hdContractAdmin.Text.Trim()))
            {
                strSql += " AND fc.Contract_Admin = @contractAdmin";
                listStr.Add(new SqlParameter("@contractAdmin", this.hdContractAdmin.Text.Trim()));
            }
            if (!string.IsNullOrEmpty(this.hdPricingScheme.Text.Trim()))
            {
                strSql += " AND fc.Pricing_Scheme=@PriceScheme";
                listStr.Add(new SqlParameter("@PriceScheme", hdPricingScheme.Text.Trim()));
            }
            //strSql += " GROUP BY data.ID,data.FO_NO,data.Contract_Title,con.Contractor,ps.PriceScheme,data.Actual_Budget,data.Original_WC,data.Contractor,CA.UserName,b.UserName,mc.UserName,ur.UserName,cp.UserName,data.Contract_Tel,data.Validate_Date,data.Expire_Date";
            SqlParameter[] parameter = listStr.ToArray();

            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            tb = GetFilteredTable(Grid1.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            if (tb.Rows.Count > 0)
            {
                hidFO_NO.Text = this.Grid1.Rows[0].Values[1].ToString();
                hidVendor_Name.Text = this.Grid1.Rows[0].Values[3].ToString();
                PageContext.RegisterStartupScript("PagePostBank();");
            }
            else
            {
                Alert.ShowInParent("No record!");
            }
        }
        #endregion
        #endregion

        #region 过滤表头
        /// <summary>
        /// 过滤表头
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_FilterChange(object sender, EventArgs e)
        {
            BindGrid();
        }

        /// <summary>
        /// 根据表头信息过滤列表数据
        /// </summary>
        /// <param name="sourceObj"></param>
        /// <param name="fillteredOperator"></param>
        /// <param name="fillteredObj"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        private bool FilterDataRowItemImplement(object sourceObj, string fillteredOperator, object fillteredObj, string column)
        {
            bool valid = false;
            if (column == "FO_NO")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Contract_Title")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Contractor")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Pricing_Scheme")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Original_WC")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Contract_Admin")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Buyer")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Main_Coordinator")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "User_Representative")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Contract_Person")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Contract_Tel")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Validate_Date")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Expire_Date")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Remaining_Budget_Rate")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            if (column == "Remaining_Duration_Rate")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal" && sourceValue == fillteredValue)
                {
                    valid = true;
                }
                else if (fillteredOperator == "contain" && sourceValue.Contains(fillteredValue))
                {
                    valid = true;
                }
            }
            return valid;
        }
        #endregion

        #region 分页、排序
        /// <summary>
        /// 分页下拉选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }

        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }

        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;

            BindGrid();
        }
        #endregion

        #region Grid1行点击事件
        /// <summary>
        /// 行点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowClick(object sender, GridRowClickEventArgs e)
        {
            hidFO_NO.Text = this.Grid1.SelectedRow.Values[1].ToString();
            hidVendor_Name.Text = this.Grid1.SelectedRow.Values[3].ToString();
            PageContext.RegisterStartupScript("PagePostBank();");
        }
        #endregion

        #region DropDownList下拉选择事件
        ///查询   
        protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
        #endregion

        #region 行绑定后事件
        /// <summary>
        /// 行绑定后事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDataBound(object sender, GridRowEventArgs e)
        {
            DataRowView row = e.DataItem as DataRowView;
            string id = row["ID"].ToString();
            //for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                if (!string.IsNullOrEmpty(id))
                {
                    var data = BLL.SESRelatedDataService.GetSESRelatedDataById(id);
                    if (data != null)
                    {
                        if (data.Expire_Date.HasValue)
                        {
                            if (data.Expire_Date < DateTime.Now)//过期行字体显示灰色
                            {
                                e.RowCssClass = "color2";
                            }
                            else if (data.Expire_Date.Value.AddMonths(-6) <= DateTime.Now && data.Expire_Date > DateTime.Now)//六个月后过期行字体显示棕色
                            {
                                e.RowCssClass = "color1";
                            }
                        }

                        //Remaining Budget/Contract Budget<10 显示红色
                        var checkedValue =  BLL.SESReportService.getSumSSRActualCostByFo(data.FO_NO);
                        var remainmingBudget = data.Actual_Budget - checkedValue;
                        if (data.Actual_Budget > 0)
                        {
                            var remainmingBudgetRate = remainmingBudget / data.Actual_Budget * 100;
                            if (remainmingBudgetRate < 10)
                            {
                                e.CellCssClasses[14] = "colorRed";
                            }
                        }

                        //如果(合同过期日-今天)/(合同生效总天数)<10显示红色
                        if (data.Validate_Date.HasValue && data.Expire_Date.HasValue)
                        {
                            decimal a = (data.Expire_Date - DateTime.Now).Value.Days;
                            decimal b = (data.Expire_Date - data.Validate_Date).Value.Days;//合同生效总天数                           
                            if (b > 0)
                            {
                                decimal c = a / b * 100;
                                if (c < 10)
                                {
                                    e.CellCssClasses[15] = "colorRed";
                                }
                            }
                        }
                    }
                }
            }
        }
        #endregion

        #region 查询
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            string s = this.hdKeyword.Text.Trim() + "|" +
                this.hdContractNo.Text.Trim() + "|" +
                this.hdContractAdmin.Text.Trim() + "|" +
                this.hdPricingScheme.Text.Trim() + "|";

            string window = String.Format("MainSearch.aspx?s={0}", s, "查询 - ");
            PageContext.RegisterStartupScript(Window1.GetSaveStateReference(hdItemsString.ClientID) + Window1.GetShowReference(window));

        }

        /// <summary>
        /// 查询返回值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            List<string> lists = Funs.GetStrListByStr(hdItemsString.Text, '|');

            this.hdKeyword.Text = lists[0];
            this.hdContractNo.Text = lists[1];
            this.hdContractAdmin.Text = lists[2];
            this.hdPricingScheme.Text = lists[3];

            BindGrid();
        }
        #endregion
    }
}