using BLL;
using Model;
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.TestRun.Produce
{
    public partial class SubInspectTerm : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PageInit();
                BindGrid();
            }
        }
        #region 数据绑定
        /// 
        /// 绑定下拉框
        /// 
        public void PageInit()
        {
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User
                           join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId
                           where projectrole.ProjectId == this.CurrUser.LoginProjectId
                           select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var users = userList.ToList();
            if (addUserList.Count() > 0)
            {
                users.AddRange(addUserList);
            }
            if (users.Count() > 0)
            {
                ddlContractor.DataTextField = "UserName";
                ddlContractor.DataValueField = "UserId";
                ddlContractor.DataSource = users;
                ddlContractor.DataBind();
                ddlOwner.DataTextField = "UserName";
                ddlOwner.DataValueField = "UserId";
                ddlOwner.DataSource = users;
                ddlOwner.DataBind();
                ddlProcessPatent.DataTextField = "UserName";
                ddlProcessPatent.DataValueField = "UserId";
                ddlProcessPatent.DataSource = users;
                ddlProcessPatent.DataBind();
            }
        }
        /// 
        /// 绑定数据
        /// 
        public void BindGrid()
        {
            var result = new List();
            var list = Funs.DB.ProduceRun_SubInspectTermItem.Where(x => x.ProjectId == this.CurrUser.LoginProjectId).OrderBy(x => x.Sort).ToList();
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    var model = new ProduceRun_SubInspectTermItem();
                    model.TermItemId = item.TermItemId;
                    model.ProjectId = item.ProjectId;
                    model.WorkInspectId = item.WorkInspectId;
                    model.WorkInspectName = item.WorkInspectName;
                    model.InspectedUser = item.InspectedUser;
                    model.InspectionResults = item.InspectionResults;
                    model.InspectionIllustrate = item.InspectionIllustrate;
                    model.Sort = item.Sort;
                    result.Add(model);
                }
            }
            else
            {
                //获取预加载的数据
                var defaultDatas = Funs.DB.ProduceRun_WorkInspectTemplate.OrderBy(x => x.Sort).ToList();
                if (defaultDatas.Count > 0)
                {
                    int index = list.Count + 1;
                    foreach (var item in defaultDatas)
                    {
                        var model = new ProduceRun_SubInspectTermItem();
                        model.TermItemId = Guid.NewGuid().ToString();
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.WorkInspectId = item.WorkInspectId;
                        model.WorkInspectName = item.WorkInspectName;
                        model.Sort = index + 1;
                        result.Add(model);
                        index++;
                    }
                }
            }
            Grid1.DataSource = result;
            Grid1.DataBind();
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId where projectrole.ProjectId == this.CurrUser.LoginProjectId select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var data = userList.ToList();
            if (addUserList.Count() > 0)
            {
                data.AddRange(addUserList);
            }
            DropDownList ddlInspectedUser = Grid1.FindColumn("InspectedUser").FindControl("ddlInspectedUser") as DropDownList;
            ddlInspectedUser.DataTextField = "UserName";
            ddlInspectedUser.DataValueField = "UserId";
            ddlInspectedUser.DataSource = data;
            ddlInspectedUser.DataBind();
        }
        /// 
        /// 排序
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        /// 
        /// 行按钮事件
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                string rowID = e.RowID;
                var model = Funs.DB.ProduceRun_SubInspectTermItem.FirstOrDefault(p => p.TermItemId == rowID);
                if (model != null)
                {
                    if (model.InspectionResults != null)
                    {
                        ShowNotify("已存在检查结果,无法删除!", MessageBoxIcon.Warning);
                        return;
                    }
                    Funs.DB.ProduceRun_SubInspectTermItem.DeleteOnSubmit(model);
                    Funs.DB.SubmitChanges();
                    BindGrid();
                    ShowNotify("删除成功!");
                }
                else
                {
                    var list = gvList();
                    list.RemoveAll(x => x.TermItemId == rowID);
                    Grid1.DataSource = list;
                    Grid1.DataBind();
                    ShowNotify("删除成功!");
                }
            }
        }
        #endregion
        /// 
        /// 保存
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(ddlContractor.SelectedValue))
                {
                    ShowNotify("请选择承包商!", MessageBoxIcon.Warning);
                    return;
                }
                if (string.IsNullOrWhiteSpace(ddlOwner.SelectedValue))
                {
                    ShowNotify("请选择业主!", MessageBoxIcon.Warning);
                    return;
                }
                if (string.IsNullOrWhiteSpace(ddlProcessPatent.SelectedValue))
                {
                    ShowNotify("请选择工艺专利商!", MessageBoxIcon.Warning);
                    return;
                }
                List subTrems = new List();
                List subTremItems = new List();
                var subTrem = Funs.DB.ProduceRun_SubInspectTerm.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId);
                var termItems = Funs.DB.ProduceRun_SubInspectTermItem.Where(x => x.ProjectId == this.CurrUser.LoginProjectId).ToList();
                if (termItems.Count > 0 && termItems.Count(x => x.InspectionResults == null) == 0)
                {
                    ShowNotify("所有检查项已存在检查结果,无法保存!", MessageBoxIcon.Warning);
                    return;
                }
                JArray mergedData = Grid1.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                    var workInspectId = this.Grid1.Rows[i].DataKeys[1].ToString();
                    //获取子系统信息
                    var list = new List();
                    if (subTrem == null)
                    {
                        subTrem = new ProduceRun_SubInspectTerm();
                        subTrem.SubInspectId = Guid.NewGuid().ToString();
                        subTrem.ProjectId = this.CurrUser.LoginProjectId;
                        subTrem.Contractor = ddlContractor.SelectedValue;
                        subTrem.Owner = ddlOwner.SelectedValue;
                        subTrem.ProcessPatent = ddlProcessPatent.SelectedValue;
                        subTrem.AddUser = this.CurrUser.UserId;
                        subTrem.AddTime = DateTime.Now;
                        subTrems.Add(subTrem);
                    }
                    else
                    {
                        subTrem.Contractor = ddlContractor.SelectedValue;
                        subTrem.Owner = ddlOwner.SelectedValue;
                        subTrem.ProcessPatent = ddlProcessPatent.SelectedValue;
                        Funs.DB.SubmitChanges();
                    }
                    var model = Funs.DB.ProduceRun_SubInspectTermItem.FirstOrDefault(x => x.TermItemId == termItemId);
                    if (model == null)
                    {
                        model = new ProduceRun_SubInspectTermItem();
                        model.TermItemId = termItemId;
                        model.SubInspectId = subTrem.SubInspectId;
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.WorkInspectId = workInspectId;
                        model.WorkInspectName = values.Value("WorkInspectName");
                        model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                        subTrem.Contractor = ddlContractor.SelectedValue;
                        subTrem.Owner = ddlOwner.SelectedValue;
                        subTrem.ProcessPatent = ddlProcessPatent.SelectedValue;
                        model.AddUser = this.CurrUser.UserId;
                        model.AddTime = DateTime.Now;
                        model.Sort = i + 1;
                        subTremItems.Add(model);
                    }
                    else
                    {
                        model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                        model.WorkInspectName = values.Value("WorkInspectName");
                        Funs.DB.SubmitChanges();
                    }
                }
                if (subTrems != null) Funs.DB.ProduceRun_SubInspectTerm.InsertAllOnSubmit(subTrems);
                if (subTremItems.Count > 0) Funs.DB.ProduceRun_SubInspectTermItem.InsertAllOnSubmit(subTremItems);
                Funs.DB.SubmitChanges();
                if (Funs.DB.ProduceRun_SubInspectTermItem.Count(x => x.SubInspectId == subTrem.SubInspectId && x.InspectionResults.GetValueOrDefault() != 1) == 0)
                {
                    subTrem.InspectionIsAllPass = 1;
                }
                else
                {
                    subTrem.InspectionIsAllPass = 0;
                }
                Funs.DB.SubmitChanges();
                BindGrid();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 新增
        /// 
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            var list = gvList();
            var termItems = Funs.DB.ProduceRun_SubInspectTermItem.Where(x => x.ProjectId == this.CurrUser.LoginProjectId).ToList();
            if (termItems.Count > 0 && termItems.Count(x => x.InspectionResults == null) == 0)
            {
                ShowNotify("所有检查项已存在检查结果,无法新增!", MessageBoxIcon.Warning);
                return;
            }
            var model = new ProduceRun_SubInspectTermItem();
            model.TermItemId = Guid.NewGuid().ToString();
            model.ProjectId = this.CurrUser.LoginProjectId;
            model.WorkInspectId = string.Empty;
            model.WorkInspectName = string.Empty;
            model.Sort = list.Count + 1;
            list.Add(model);
            Grid1.DataSource = list;
            Grid1.DataBind();
        }
        /// 
        /// 获取集合
        /// 
        private List gvList()
        {
            List list = new List();
            JArray mergedData = Grid1.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                var workInspectId = this.Grid1.Rows[i].DataKeys[1] != null ? this.Grid1.Rows[i].DataKeys[1].ToString() : string.Empty;
                var subInspectId = this.Grid1.Rows[i].DataKeys[2] != null ? this.Grid1.Rows[i].DataKeys[2].ToString() : string.Empty;
                var model = new ProduceRun_SubInspectTermItem();
                model.TermItemId = termItemId;
                model.SubInspectId = subInspectId;
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.WorkInspectId = workInspectId;
                model.WorkInspectName = values.Value("WorkInspectName");
                model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                model.AddUser = this.CurrUser.UserId;
                model.AddTime = DateTime.Now;
                model.Sort = i + 1;
                list.Add(model);
            }
            return list;
        }
        /// 
        /// 检测结果
        /// 
        /// 
        public string Results(object value)
        {
            var result = string.Empty;
            if (value != null)
            {
                var intVal = int.Parse(value.ToString());
                if (intVal == 1)
                {
                    result = "通过";
                }
                else if (intVal == 0)
                {
                    result = "未通过";
                }
            }
            return result;
        }
    }
}