using BLL;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.Check
{
    public partial class QuantityCompletionEdit : 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");
                }
                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;
            Grid1.DataSource = from x in db.JDGL_QuantityList
                               where x.ProjectId == this.CurrUser.LoginProjectId
                               orderby x.SortIndex, x.Name
                               select new
                               {
                                   x.QuantityListId,
                                   x.Name,
                                   x.Unit,
                                   x.DesignNum,
                                   PlanNum = (from y in db.JDGL_QuantityCompletion where y.ProjectId == this.CurrUser.LoginProjectId && y.Months == months && y.QuantityListId == x.QuantityListId select y.PlanNum).First(),
                                   RealNum = (from y in db.JDGL_QuantityCompletion where y.ProjectId == this.CurrUser.LoginProjectId && y.Months == months && y.QuantityListId == x.QuantityListId select y.RealNum).First(),
                                   NextNum = (from y in db.JDGL_QuantityCompletion where y.ProjectId == this.CurrUser.LoginProjectId && y.Months == months && y.QuantityListId == x.QuantityListId select y.NextNum).First(),
                               };
            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);
            }
            SaveData(true);
        }
        private void SaveData(bool bl)
        {
            DateTime months = Convert.ToDateTime(this.txtMonth.Text + "-01");
            var list = GetDetails();
            Model.SGGLDB db = Funs.DB;
            foreach (var item in list)
            {
                string quantityListId = string.Empty;
                var oldQuantityList = db.JDGL_QuantityList.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.Name == item.Name);
                if (oldQuantityList == null)
                {
                    Model.JDGL_QuantityList newQuantityList = new Model.JDGL_QuantityList();
                    quantityListId = SQLHelper.GetNewID(typeof(Model.JDGL_QuantityList));
                    newQuantityList.QuantityListId = quantityListId;
                    newQuantityList.ProjectId = this.CurrUser.LoginProjectId;
                    newQuantityList.Name = item.Name;
                    newQuantityList.Unit = item.Unit;
                    newQuantityList.DesignNum = item.DesignNum;
                    BLL.QuantityListService.AddQuantityList(newQuantityList);
                }
                else
                {
                    quantityListId = oldQuantityList.QuantityListId;
                    oldQuantityList.Unit = item.Unit;
                    oldQuantityList.DesignNum = item.DesignNum;
                    BLL.QuantityListService.UpdateQuantityList(oldQuantityList);
                }
                var oldQuantityCompletion = db.JDGL_QuantityCompletion.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId && x.QuantityListId == quantityListId && x.Months == months);
                if (oldQuantityCompletion == null)
                {
                    Model.JDGL_QuantityCompletion QuantityCompletion = new Model.JDGL_QuantityCompletion();
                    QuantityCompletion.QuantityCompletionId = SQLHelper.GetNewID(typeof(Model.JDGL_QuantityCompletion));
                    QuantityCompletion.PlanNum = item.PlanNum;
                    QuantityCompletion.RealNum = item.RealNum;
                    QuantityCompletion.NextNum = item.NextNum;
                    QuantityCompletion.Months = months;
                    QuantityCompletion.QuantityListId = quantityListId;
                    QuantityCompletion.CompileMan = this.CurrUser.UserId;
                    QuantityCompletion.CompileDate = DateTime.Now;
                    QuantityCompletion.ProjectId = this.CurrUser.LoginProjectId;
                    BLL.QuantityCompletionService.AddQuantityCompletion(QuantityCompletion);
                }
                else
                {
                    oldQuantityCompletion.PlanNum = item.PlanNum;
                    oldQuantityCompletion.RealNum = item.RealNum;
                    oldQuantityCompletion.NextNum = item.NextNum;
                    BLL.QuantityCompletionService.UpdateQuantityCompletion(oldQuantityCompletion);
                }
            }
            ShowNotify("保存成功!", MessageBoxIcon.Success);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
        }
        #region 增加按钮事件
        /// 
        /// 增加按钮事件
        /// 
        /// 
        /// 
        protected void btnNew_Click(object sender, EventArgs e)
        {
            var list = GetDetails();
            Model.View_JDGL_QuantityCompletion ql = new Model.View_JDGL_QuantityCompletion();
            ql.QuantityListId = 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.View_JDGL_QuantityCompletion ql = new Model.View_JDGL_QuantityCompletion();
                ql.QuantityListId = Grid1.Rows[i].RowID;
                ql.Name = values.Value("Name");
                ql.Unit = values.Value("Unit");
                ql.DesignNum = Funs.GetNewDecimal(values.Value("DesignNum"));
                ql.PlanNum = Funs.GetNewDecimal(values.Value("PlanNum"));
                ql.RealNum = Funs.GetNewDecimal(values.Value("RealNum"));
                ql.NextNum = Funs.GetNewDecimal(values.Value("NextNum"));
                list.Add(ql);
            }
            return list;
        }
        #endregion
        #region 行点击事件
        /// 
        /// Grid行点击事件
        /// 
        /// 
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            string quantityListId = Grid1.DataKeys[e.RowIndex][0].ToString();
            var list = GetDetails();
            if (e.CommandName == "del")//删除
            {
                var Report = list.FirstOrDefault(x => x.QuantityListId == quantityListId);
                if (Report != null)
                {
                    list.Remove(Report);
                }
                this.Grid1.DataSource = list;
                this.Grid1.DataBind();
            }
        }
        #endregion
    }
}