using BLL;
using BLL.Common;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace FineUIPro.Web.ManHours
{
    public partial class ManHoursStatistics : PageBase
    {
        string dis = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string strSql = @" SELECT * FROM Sys_ActualManHourMonthSet  where CONVERT(INT,Years)=" + DateTime.Now.Year + "  and DepartId is null and Person=0";
                DataTable dt = SQLHelper.GetDataTableRunText(strSql, null);
                if (dt != null && dt.Rows.Count > 0)
                {
                    string json = JsonHelper.DataTableToJSON(dt);
                    ActualManHour.Value = json;
                }
                BindDeptTree("");
                BindGrid("D1@770DF268-7955-4E8E-9A47-95595B3E614C");
            }
        }

        #region 查询
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            string UserName = txtUserName.Text;
            BindDeptTree(UserName);
        }
        #endregion

        #region Grid1行选择事件
        /// <summary>
        /// Grid行选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowSelect(object sender, GridRowSelectEventArgs e)
        {
            string eProjectId = this.Grid1.SelectedRowID;
            if (!string.IsNullOrEmpty(eProjectId))
            {
                BindGrid2(eProjectId);
            }
        }
        #endregion


        public void BindGrid2(string paramet)
        {
            try
            {
                string sId = "";
                int Layer = 0;
                if (!string.IsNullOrEmpty(paramet))
                {
                    Layer = 1;
                    sId = paramet;
                }
                SqlParameter[] parameter = new SqlParameter[]
                    {
                        new SqlParameter("@Layer",Layer),
                        new SqlParameter("@sId",sId),
                        new SqlParameter("@Start",""),
                        new SqlParameter("@End","")
                    };
                DataSet ds = SQLHelper.RunProcedure("Proc_NewManHoursStatisticsChild", parameter, "t");
                DataTable table1 = ds.Tables[0];
                Grid2.RecordCount = table1.Rows.Count;
                //table1 = GetFilteredTable(Grid2.FilteredData, table1);
                var table = this.GetPagedDataTable(Grid2, table1);
                Grid2.DataSource = table;
                Grid2.DataBind();
                OutputSummaryData2(table1);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public void BindGrid(string paramet)
        {
            hidjson.Value = "";
            int Layer = 0;
            string sId = "";
            string DepartId = "";
            string[] sIdArr = paramet.Split('@');
            string Start = DateTime.Now.AddYears(-3).ToString("yyyyMM");
            string End = DateTime.Now.ToString("yyyyMM");
            string strSql1 = @" SELECT * FROM Sys_ActualManHourMonthSet  where Years  in ('" + (DateTime.Now.Year-1)+"','"  +( DateTime.Now.Year-2 )+ "','" + DateTime.Now.Year + "')  and DepartId='770DF268-7955-4E8E-9A47-95595B3E614C'";
            DataTable dt1 = SQLHelper.GetDataTableRunText(strSql1, null);
            if (dt1 != null && dt1.Rows.Count > 0)
            {
                string json = JsonHelper.DataTableToJSON(dt1);
                hidchildJson.Value = json;
            }
            try
            {
                if (sIdArr[0].ToString() == "UD")
                {
                    Layer = 1;
                    sId = sIdArr[1].ToString();
                    DepartId = sIdArr[2].ToString();

                }
                if (sIdArr[0].ToString() == "D1")
                {
                    Layer = 2;
                    sId = sIdArr[1].ToString();
                }
                if (sIdArr[0].ToString() == "D2")
                {
                    Layer = 3;
                    sId = sIdArr[1].ToString();
                }
                SqlParameter[] parameter = new SqlParameter[]
                    {
                        new SqlParameter("@Layer",Layer),
                        new SqlParameter("@sId",sId),
                        new SqlParameter("@Start",Start),
                        new SqlParameter("@End",End),
                        new SqlParameter("@DepartId",DepartId),

                    };
                DataSet ds = SQLHelper.RunProcedure("Proc_NewManHoursStatistics", parameter, "t");
                DataTable table1 = ds.Tables[0];
                DataTable table2 = ds.Tables[1];
                Grid1.RecordCount = table1.Rows.Count;
                //table1 = GetFilteredTable(Grid1.FilteredData, table1);
                var table = this.GetPagedDataTable(Grid1, table1);
                Grid1.DataSource = table;
                Grid1.DataBind();
                OutputSummaryData(table1);


                string json = JsonHelper.DataTableToJSON(table2);
                hidjson.Value = json;
                Grid2.DataSource = table2;
                Grid2.DataBind();
                OutputSummaryData2(table2);

            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        private void OutputSummaryData(DataTable table)
        {            
            DataTable source = table;
            float ManHoursTotal = 0.0f;
            float HoursTotal = 0.0f;
            foreach (DataRow row in source.Rows)
            {
                ManHoursTotal += Convert.ToInt32(row["ManHours"]);
                HoursTotal += Convert.ToInt32(row["Hours"]);
            }
            JObject summary = new JObject();
            summary.Add("ManHours", ManHoursTotal.ToString("F2"));
            summary.Add("Hours", HoursTotal.ToString("F2"));

            Grid1.SummaryData = summary;
        }

        private void OutputSummaryData2(DataTable table)
        {
            DataTable source = table;
            float TaskPlanTotal = 0.0f;
            float TaskActualTotal = 0.0f;
            float NoPlannedTotal = 0.0f;
            foreach (DataRow row in source.Rows)
            {
                TaskPlanTotal += Convert.ToInt32(row["TaskPlan"]);
                TaskActualTotal += Convert.ToInt32(row["TaskActual"]);
                NoPlannedTotal += Convert.ToInt32(row["NoPlanned"]);
            }
            JObject summary = new JObject();
            summary.Add("TaskPlan", TaskPlanTotal.ToString("F2"));
            summary.Add("TaskActual", TaskActualTotal.ToString("F2"));
            summary.Add("NoPlanned", NoPlannedTotal.ToString("F2"));
            Grid2.SummaryData = summary;

        }
        /// <summary>
        /// 加载部门人员
        /// </summary>
        private void BindDeptTree(string UserName)
        {
            this.tvUser.Nodes.Clear();
            try
            {
                // string strSql = @"SELECT distinct DepartId,DepartCode,DepartName,IsPost FROM View_Sys_Users where SupCheckItem='0'";
                string strSql = "SELECT  [DepartId] ,[DepartCode],[DepartName],SupCheckItem FROM [Base_Depart] where SupCheckItem='0' and DepartCode='CTE' order by DepartCode";
                DataTable table = SQLHelper.GetDataTableRunText(strSql, null);
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    node.Text = table.Rows[i]["DepartName"].ToString();
                    node.NodeID = "D1@" + table.Rows[i]["DepartId"].ToString();
                    node.Expanded = true;
                    node.EnableClickEvent = true;
                    this.tvUser.Nodes.Add(node);
                    BindDeptNodeTwo(node, table.Rows[i]["DepartId"].ToString(), UserName);
                }
            }
            catch (Exception ex)
            {
                Alert.ShowInParent(ex.ToString());
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="DTnode"></param>
        /// <param name="DepartId"></param>
        private void BindDeptNodeTwo(TreeNode DTnode, string DepartId, string UserName)
        {
            string strSql = @"SELECT  [DepartId] ,[DepartCode],[DepartName] ,[SupCheckItem] FROM [Base_Depart] where SupCheckItem=@SupCheckItem";
            List<SqlParameter> listStr = new List<SqlParameter>();
            listStr.Add(new SqlParameter("@SupCheckItem", DepartId));
            SqlParameter[] parameter = listStr.ToArray();
            DataTable table = SQLHelper.GetDataTableRunText(strSql, parameter);
            for (int i = 0; i < table.Rows.Count; i++)
            {
                TreeNode node = new TreeNode();
                node.Text = table.Rows[i]["DepartName"].ToString();
                node.NodeID = "D2@" + table.Rows[i]["DepartId"].ToString();
                node.Expanded = true;
                node.EnableClickEvent = true;
                DTnode.Nodes.Add(node);//把指定的节点添加到控件中
                BindDeptNodeThree(node, table.Rows[i]["DepartId"].ToString(), UserName);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="DTnode"></param>
        /// <param name="DepartId"></param>
        private void BindDeptNodeThree(TreeNode DTnode, string DepartId, string UserName)
        {
            try
            {
                string strSql = @"SELECT  UserId,UserCode,UserName,DepartId,DepartCode,DepartName,RoleId,RoleName,IsPost FROM View_Sys_Users WHERE DepartId=@DepartId";
                //SqlParameter[] parameter = new SqlParameter[]
                //   {
                //       new SqlParameter("@DepartId",DepartId)
                //   };
                List<SqlParameter> listStr = new List<SqlParameter>();
                listStr.Add(new SqlParameter("@DepartId", DepartId));
                if (!string.IsNullOrEmpty(UserName))
                {
                    strSql += " AND UserName=@UserName ";
                    listStr.Add(new SqlParameter("@UserName", UserName));
                }
                SqlParameter[] parameter = listStr.ToArray();
                DataTable table = SQLHelper.GetDataTableRunText(strSql, parameter);
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    node.Text = table.Rows[i]["UserName"].ToString();
                    node.NodeID = "UD@" + table.Rows[i]["UserId"].ToString() + "@" + table.Rows[i]["DepartId"].ToString();
                    node.Expanded = true;
                    node.EnableClickEvent = true;
                    DTnode.Nodes.Add(node);//把指定的节点添加到控件中
                }
            }
            catch (Exception ex)
            {
                Alert.ShowInParent(ex.ToString());
            }
        }

        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid(dis);
        }
        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid2_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid(dis);
        }



        /// <summary>
        /// 分页显示条数下拉框
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {

            //Grid1.PageSize = Convert.ToInt32(this.ddlPageSize.SelectedValue);
            //BindGrid(dis);
        }

        /// <summary>
        ///  树节点选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvUser_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e)
        {
            dis = e.Node.NodeID.ToString();
            BindGrid(e.Node.NodeID.ToString());
        }
    }
}