using BLL;
using Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace FineUIPro.Web.HSSE.Check
{
    public partial class RectifyNoticesAdd : PageBase
    {
        #region 定义项
        /// 
        /// 主键
        /// 
        public string RectifyNoticesId
        {
            get
            {
                return (string)ViewState["RectifyNoticesId"];
            }
            set
            {
                ViewState["RectifyNoticesId"] = value;
            }
        }
        #endregion
        public string ControlId
        {
            get
            {
                return (string)ViewState["ControlId"];
            }
            set
            {
                ViewState["ControlId"] = value;
            }
        }
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               
                //受检单位            
                BLL.UnitService.InitUnitByProjectIdUnitTypeDropDownList(this.drpUnitId, this.CurrUser.LoginProjectId, Const.ProjectUnitType_2, false);
                //区域
                BLL.UnitWorkService.InitUnitWorkDownList(this.drpWorkAreaId, this.CurrUser.LoginProjectId, true);
                //if (!string.IsNullOrEmpty(this.drpUnitId.SelectedValue))
                //{
                //    ///安全经理
                //    BLL.UserService.InitFlowOperateControlUserDropDownList(this.drpSignPerson, "", this.drpUnitId.SelectedValue, true);
                //}
                //else
                {
                    var db = Funs.DB;
                    var userListaq = from x in db.Sys_User
                                     join y in db.Project_ProjectUnit
                                     on x.UnitId equals y.UnitId
                                     join p in db.Project_ProjectUser
                                     on x.UserId equals p.UserId
                                     where  p.RoleId.Contains(Const.HSSEManager)  
                                     && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                     orderby x.UserCode
                                     select x;
                  
                    this.drpSignPerson.DataSource= userListaq.ToList();
                    drpSignPerson.DataValueField = "UserId";
                    drpSignPerson.DataTextField = "UserName";
                    drpSignPerson.DataBind();
                    Funs.FineUIPleaseSelect(drpSignPerson);
                 }
                ///检察人员
                BLL.UserService.InitFlowOperateControlUserDropDownList(this.drpCheckMan, this.CurrUser.LoginProjectId, null, true);
                //Funs.FineUIPleaseSelect(drpIsRectify);
                RectifyNoticesId = Request.Params["RectifyNoticesId"];
                var getRectifyNotices = RectifyNoticesService.GetRectifyNoticesById(RectifyNoticesId);
                if (getRectifyNotices != null)
                {
                    if (!string.IsNullOrEmpty(getRectifyNotices.UnitId))
                    {
                        this.drpUnitId.SelectedValue = getRectifyNotices.UnitId;
                    }
                    if (!string.IsNullOrEmpty(getRectifyNotices.WorkAreaId))
                    {
                        this.drpWorkAreaId.SelectedValueArray = getRectifyNotices.WorkAreaId.Split(',');
                    }
                    if (!string.IsNullOrEmpty(getRectifyNotices.CheckManIds))
                    {
                        this.drpCheckMan.SelectedValueArray = getRectifyNotices.CheckManIds.Split(',');
                    }
                    this.txtCheckPerson.Text = getRectifyNotices.CheckManNames;
                    this.txtRectifyNoticesCode.Text = getRectifyNotices.RectifyNoticesCode;
                    this.txtCheckedDate.Text = getRectifyNotices.CheckedDate.ToString();
                    //if (!string.IsNullOrEmpty(getRectifyNotices.UnitId))
                    //{
                    //    this.drpSignPerson.Items.Clear();
                    //    BLL.UserService.InitFlowOperateControlUserDropDownList(this.drpSignPerson, this.CurrUser.LoginProjectId, getRectifyNotices.UnitId, true);
                    //}
                    if (!string.IsNullOrEmpty(getRectifyNotices.SignPerson))
                    {
                        this.drpSignPerson.SelectedValue = getRectifyNotices.SignPerson;
                    }
                    if (!string.IsNullOrEmpty(getRectifyNotices.HiddenHazardType))
                    {
                        this.drpHiddenHazardType.SelectedValue = getRectifyNotices.HiddenHazardType;
                    }
                    BindGrid();
                    BindGrid1();
                }
                else
                {
                    this.txtCheckedDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
                    ////自动生成编码
                    var porject = Funs.DB.Base_Project.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId);
                    this.txtRectifyNoticesCode.Text = porject.ProjectCode + "-HSE-YHZG-" + CodeRecordsService.ReturnCodeByMenuIdProjectId(Const.ProjectRectifyNoticesMenuId, this.CurrUser.LoginProjectId, this.CurrUser.UnitId);
                    ControlId = Request.Params["ControlId"];
                    if (!string.IsNullOrEmpty(ControlId))
                    {
                        var control = Funs.DB.HSSE_ConstructionRiskCheck.FirstOrDefault(x => x.ConstructionRiskCheckId == ControlId);
                        if (control != null)
                        {
                            var risk = Funs.DB.HSSE_ConstructionRisk.FirstOrDefault(x => x.ConstructionRiskId == control.ConstructionRiskId);
                            drpWorkAreaId.SelectedValue = risk.WorkAreaId;
                            drpUnitId.SelectedValue = risk.UnitId;
                            List view = getViewTestPlanTrainingList();
                            var item = new Check_RectifyNoticesItem
                            {
                                RectifyNoticesItemId = SQLHelper.GetNewID(),
                                RectifyNoticesId = this.RectifyNoticesId,
                                WrongContent = risk.LicenseDes
                            };
                            view.Add(item);
                            //将gd数据保存在list中
                            Grid1.DataSource = view;
                            Grid1.DataBind();
                        }
                    }
                }
            }
        }
        #region 绑定grid
        /// 
        /// 
        /// 
        public void BindGrid()
        {
            if (!string.IsNullOrEmpty(this.RectifyNoticesId))
            {
                string strSql = @"select RectifyNoticesItemId, RectifyNoticesId, WrongContent, Requirement, LimitTime, RectifyResults, IsRectify  from [dbo].[Check_RectifyNoticesItem] ";
                List listStr = new List();
                strSql += "where RectifyNoticesId = @RectifyNoticesId";
                listStr.Add(new SqlParameter("@RectifyNoticesId", RectifyNoticesId));
                SqlParameter[] parameter = listStr.ToArray();
                DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                var table = this.GetPagedDataTable(Grid1, tb);
                Grid1.DataSource = table;
                Grid1.DataBind();
            }
            else
            {
                Grid1.DataSource = null;
                Grid1.DataBind();
            }
        }
        /// 
        /// 
        /// 
        public void BindGrid1()
        {
            if (!string.IsNullOrEmpty(this.RectifyNoticesId))
            {
                string strSql = @"select FlowOperateId, RectifyNoticesId, OperateName, OperateManId, OperateTime, IsAgree, Opinion,S.UserName
                ,(case when IsAgree=0 then '不同意' else '同意' end) as IsAgreeName
                from Check_RectifyNoticesFlowOperate C left join Sys_User S on C.OperateManId=s.UserId ";
                List listStr = new List();
                strSql += "where RectifyNoticesId= @RectifyNoticesId";
                listStr.Add(new SqlParameter("@RectifyNoticesId", RectifyNoticesId));
                SqlParameter[] parameter = listStr.ToArray();
                DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                var table = this.GetPagedDataTable(gvFlowOperate, tb);
                gvFlowOperate.DataSource = table;
                gvFlowOperate.DataBind();
            }
            else
            {
                Grid1.DataSource = null;
                Grid1.DataBind();
            }
        }
        #endregion
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            List view = getViewTestPlanTrainingList();
            Model.Check_RectifyNoticesItem notice = new Model.Check_RectifyNoticesItem
            {
                RectifyNoticesItemId = SQLHelper.GetNewID()
            };
            view.Add(notice);
            //将gd数据保存在list中
            Grid1.DataSource = view;
            Grid1.DataBind();
        }
        #region 收集页面明细信息
        /// 
        /// 收集页面信息
        /// 
        /// 
        private List getViewTestPlanTrainingList()
        {
            List view = new List();
            var data = Grid1.GetMergedData();
            if (data != null)
            {
                foreach (JObject mergedRow in Grid1.GetMergedData())
                {
                    JObject values = mergedRow.Value("values");
                    string wrongContent = values.Value("WrongContent");
                    string rectifyNoticesItemId = values.Value("RectifyNoticesItemId");
                    string requirement = values.Value("Requirement");
                    string limitTime = values.Value("LimitTime");
                    var item = new Check_RectifyNoticesItem
                    {
                        RectifyNoticesItemId = rectifyNoticesItemId,
                        RectifyNoticesId = this.RectifyNoticesId,
                        WrongContent = wrongContent,
                        Requirement = requirement,
                        LimitTime =Funs.GetNewDateTime( limitTime),
                    };
                    view.Add(item);
                }
            }
            return view;
        }
        #endregion
        #region grid 操作
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            string itemId = Grid1.DataKeys[e.RowIndex][0].ToString();
            if (e.CommandName == "AttachUrl")
            {
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("~/AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/RectifyNotices&menuId={1}&strParam=1", itemId, BLL.Const.ProjectRectifyNoticesMenuId)));
            }
            if (e.CommandName == "delete")
            {
                var getView = getViewTestPlanTrainingList();
                var getfi = getView.FirstOrDefault(x => x.RectifyNoticesItemId == itemId);
                if (getfi != null)
                {
                    getView.Remove(getfi);
                }
                Grid1.DataSource = getView;
                Grid1.DataBind();
            }
        }
        #endregion
        #region 保存方法
        protected void btnSave_Click(object sender, EventArgs e)
        {
            SaveRectifyNotices(Const.BtnSave);
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            SaveRectifyNotices(Const.BtnSubmit);
        }
        /// 
        /// 保存方法
        /// 
        /// 
        private void SaveRectifyNotices(string saveType)
        {
            Model.Check_RectifyNotices newRectifyNotices = new Check_RectifyNotices
            {
                RectifyNoticesId = this.RectifyNoticesId,
                RectifyNoticesCode = this.txtRectifyNoticesCode.Text.Trim(),
                ProjectId = this.CurrUser.LoginProjectId,
                CheckedDate = Funs.GetNewDateTime(this.txtCheckedDate.Text.Trim()),
                CompleteManId = this.CurrUser.UserId,
            };
            newRectifyNotices.States = Const.State_0;
            if (this.drpSignPerson.SelectedValue != BLL.Const._Null)
            {
                newRectifyNotices.SignPerson = this.drpSignPerson.SelectedValue;
            }
            if (saveType == Const.BtnSubmit)
            {
                newRectifyNotices.States = Const.State_1;
                if (string.IsNullOrEmpty(newRectifyNotices.SignPerson))
                {                   
                    Alert.ShowInParent("请选择项目安全经理!", MessageBoxIcon.Warning);
                    return;
                }
            }
            if (this.drpUnitId.SelectedValue != BLL.Const._Null)
            {
                newRectifyNotices.UnitId = this.drpUnitId.SelectedValue;
            }
            if (this.drpWorkAreaId.SelectedValue != BLL.Const._Null)
            {
                newRectifyNotices.WorkAreaId = Funs.GetStringByArray(this.drpWorkAreaId.SelectedValueArray); 
            }
            if (this.drpCheckMan.SelectedValue != BLL.Const._Null)
            {
                newRectifyNotices.CheckManIds =Funs.GetStringByArray(this.drpCheckMan.SelectedValueArray);
            }
            if (!string.IsNullOrEmpty(txtCheckPerson.Text))
            {
                newRectifyNotices.CheckManNames = txtCheckPerson.Text;
            }
            if (this.drpHiddenHazardType.SelectedValue != BLL.Const._Null)
            {
                newRectifyNotices.HiddenHazardType = this.drpHiddenHazardType.SelectedValue;
            }
            if (!string.IsNullOrEmpty(this.RectifyNoticesId))
            {
                RectifyNoticesService.UpdateRectifyNotices(newRectifyNotices);
                RectifyNoticesService.DeleteRectifyNoticesRectifyNoticesItemById(this.RectifyNoticesId);
            }
            else
            {
                this.RectifyNoticesId = newRectifyNotices.RectifyNoticesId = SQLHelper.GetNewID();
                if (!string.IsNullOrEmpty(Request.Params["HazardSelectedItemId"]))
                {
                    newRectifyNotices.DataFrom = Request.Params["HazardSelectedItemId"];
                }
                newRectifyNotices.ControlId = Request.Params["ControlId"];
                RectifyNoticesService.AddRectifyNotices(newRectifyNotices);
            }
            if (saveType == Const.BtnSubmit)
            {
                Model.Check_RectifyNoticesFlowOperate newOItem = new Model.Check_RectifyNoticesFlowOperate
                {
                    FlowOperateId = SQLHelper.GetNewID(),
                    RectifyNoticesId = newRectifyNotices.RectifyNoticesId,
                    OperateName = "检查人员提交整改单",
                    OperateManId = this.CurrUser.UserId,
                    OperateTime = DateTime.Now,
                };
                Funs.DB.Check_RectifyNoticesFlowOperate.InsertOnSubmit(newOItem);
                Funs.DB.SubmitChanges();
            }
            var getItem = getViewTestPlanTrainingList();
            if (getItem.Count() > 0)
            {
                Funs.DB.Check_RectifyNoticesItem.InsertAllOnSubmit(getItem);
                Funs.DB.SubmitChanges();
            }
            ShowNotify(saveType + "成功!", MessageBoxIcon.Success);
            if (string.IsNullOrEmpty(Request.Params["Main"]))
            {
                PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
            }
            else
            {
                PageContext.RegisterStartupScript(String.Format("window.close();"));
            }
        }
        #endregion
        
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void drpCheckMan_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.drpCheckMan.SelectedValueArray = Funs.RemoveDropDownListNull(this.drpCheckMan.SelectedValueArray);
        }
        protected void drpWorkAreaId_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.drpWorkAreaId.SelectedValueArray = Funs.RemoveDropDownListNull(this.drpWorkAreaId.SelectedValueArray);
        }
        //protected void drpUnitId_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    this.drpSignPerson.Items.Clear();
        //    BLL.UserService.InitFlowOperateControlUserDropDownList(this.drpSignPerson, "", this.drpUnitId.SelectedValue, true);
        //    this.drpSignPerson.SelectedIndex=0;
        //}
    }
}