using BLL;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.Check
{
    public partial class MonthPlanEdit : PageBase
    {
        /// 
        /// 项目id
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DateTime months = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-01");
                if (!string.IsNullOrEmpty(Request.Params["Months"]))
                {
                    months = Convert.ToDateTime(Request.Params["Months"] + "-01");
                }
                BLL.ProjectUnitService.InitUnitDropDownList2(drpUnitId, this.CurrUser.LoginProjectId, BLL.Const.ProjectUnitType_2, false);
                UserService.Init(drpDutyPerson, CurrUser.LoginProjectId, false);
                this.txtMonth.Text = string.Format("{0:yyyy-MM}", months);
                BindGrid();
            }
        }
        /// 
        /// 加载Grid
        /// 
        private void BindGrid()
        {
            DateTime months = Convert.ToDateTime(this.txtMonth.Text + "-01");
            Model.SGGLDB db = Funs.DB;
            string strSql = @"select 
                                mplan.MonthPlanId,mplan.ProjectId,mplan.Months,mplan.NodeContent,mplan.PlanDate,mplan.RealDate,mplan.Remark,unit.UnitName as UnitId
                                ,DutyPerson = STUFF((SELECT ',' + p.UserName FROM dbo.Sys_User as p where PATINDEX('%,' + RTRIM(p.UserId) + ',%', ',' + mplan.DutyPerson + ',') > 0 FOR XML PATH('')), 1, 1,'') 
                                from JDGL_MonthPlan as mplan 
                                left join Base_Unit as unit on unit.UnitId = mplan.UnitId
                            where mplan.ProjectId = @ProjectId ";
            List listStr = new List();
            listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
            strSql += " and mplan.Months = @months";
            listStr.Add(new SqlParameter("@months", months));
            strSql += " order by mplan.SortIndex ";
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            Grid1.DataSource = tb;
            Grid1.DataBind();
            //Grid1.DataSource = from x in db.JDGL_MonthPlan
            //                   where x.ProjectId == this.CurrUser.LoginProjectId && x.Months == months
            //                   orderby x.SortIndex
            //                   select new
            //                   {
            //                       x.MonthPlanId,
            //                       x.ProjectId,
            //                       x.Months,
            //                       UnitId = db.Base_Unit.First(y => y.UnitId == x.UnitId).UnitName,
            //                       x.NodeContent,
            //                       x.PlanDate,
            //                       DutyPerson = db.Sys_User.First(y => y.UserId == x.DutyPerson).UserName,
            //                       x.RealDate,
            //                       x.Remark,
            //                   };
            //Grid1.DataBind();
        }
        #region  月份选择事件
        /// 
        /// 月份选择事件
        /// 
        /// 
        /// 
        protected void txtMonths_TextChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
        #endregion
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtMonth.Text))
            {
                ShowNotify("请选择月份!", MessageBoxIcon.Warning);
                return;
            }
            SaveData(true);
        }
        private void SaveData(bool bl)
        {
            DateTime months = Convert.ToDateTime(this.txtMonth.Text + "-01");
            var list = GetDetails();
            var units = from x in Funs.DB.Base_Unit select x;
            var users = from x in Funs.DB.Sys_User select x;
            BLL.MonthPlanService.DeleteAllMonthPlan(this.CurrUser.LoginProjectId, months);
            Model.SGGLDB db = Funs.DB;
            int i = 1;
            foreach (var item in list)
            {
                Model.JDGL_MonthPlan MonthPlan = new Model.JDGL_MonthPlan();
                MonthPlan.MonthPlanId = SQLHelper.GetNewID(typeof(Model.JDGL_MonthPlan));
                MonthPlan.ProjectId = this.CurrUser.LoginProjectId;
                MonthPlan.Months = months;
                var unit = units.FirstOrDefault(x => x.UnitName == item.UnitId);
                if (unit != null)
                {
                    MonthPlan.UnitId = unit.UnitId;
                }
                MonthPlan.NodeContent = item.NodeContent;
                MonthPlan.PlanDate = item.PlanDate;
                var dutyPersons = item.DutyPerson.Split(',');
                string dutyPersonIds = string.Empty;
                foreach (var dutyPerson in dutyPersons)
                {
                    var user = users.FirstOrDefault(x => x.UserName == dutyPerson);
                    if (user != null)
                    {
                        dutyPersonIds = !string.IsNullOrWhiteSpace(dutyPersonIds) ? $"{dutyPersonIds},{user.UserId}" : user.UserId;
                    }
                }
                MonthPlan.DutyPerson = dutyPersonIds;
                //var user = users.FirstOrDefault(x => x.UserName == item.DutyPerson);
                //if (user != null)
                //{
                //    MonthPlan.DutyPerson = user.UserId;
                //}
                MonthPlan.RealDate = item.RealDate;
                MonthPlan.Remark = item.Remark;
                MonthPlan.CompileMan = this.CurrUser.UserId;
                MonthPlan.CompileDate = DateTime.Now;
                MonthPlan.SortIndex = i;
                BLL.MonthPlanService.AddMonthPlan(MonthPlan);
                i++;
            }
            ShowNotify("保存成功!", MessageBoxIcon.Success);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
        }
        #region 增加按钮事件
        /// 
        /// 增加按钮事件
        /// 
        /// 
        /// 
        protected void btnNew_Click(object sender, EventArgs e)
        {
            var list = GetDetails();
            Model.JDGL_MonthPlan ql = new Model.JDGL_MonthPlan();
            ql.MonthPlanId = SQLHelper.GetNewID();
            list.Add(ql);
            Grid1.DataSource = list;
            Grid1.DataBind();
        }
        private List GetDetails()
        {
            List list = new List();
            foreach (JObject mergedRow in Grid1.GetMergedData())
            {
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                Model.JDGL_MonthPlan ql = new Model.JDGL_MonthPlan();
                ql.MonthPlanId = Grid1.Rows[i].RowID;
                ql.UnitId = values.Value("UnitId");
                ql.NodeContent = values.Value("NodeContent");
                ql.PlanDate = Funs.GetNewDateTime(values.Value("PlanDate"));
                ql.DutyPerson = values.Value("DutyPerson");
                ql.RealDate = Funs.GetNewDateTime(values.Value("RealDate"));
                ql.Remark = values.Value("Remark");
                list.Add(ql);
            }
            return list;
        }
        #endregion
        #region 行点击事件
        /// 
        /// Grid行点击事件
        /// 
        /// 
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            string monthPlanId = Grid1.DataKeys[e.RowIndex][0].ToString();
            var list = GetDetails();
            if (e.CommandName == "del")//删除
            {
                var Report = list.FirstOrDefault(x => x.MonthPlanId == monthPlanId);
                if (Report != null)
                {
                    list.Remove(Report);
                }
                this.Grid1.DataSource = list;
                this.Grid1.DataBind();
            }
        }
        #endregion
    }
}