using BLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AspNet = System.Web.UI.WebControls;

namespace FineUIPro.Web.CQMS.Solution
{
    public partial class ConstructSolutionView : PageBase
    {
        public string ConstructSolutionId
        {
            get
            {
                return (string)ViewState["ConstructSolutionId"];
            }
            set
            {
                ViewState["ConstructSolutionId"] = value;
            }
        }
        public string lastCanRemoveApproveId
        {

            get
            {
                return (string)ViewState["lastCanRemoveApproveId"];
            }
            set
            {
                ViewState["lastCanRemoveApproveId"] = value;
            }
        }
        protected void imgBtnFile_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
            String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
            -1, ConstructSolutionId+this.drpEdition.SelectedValue, Const.CQMSConstructSolutionMenuId)));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                ConstructSolutionId = Request.Params["constructSolutionId"];
                if (!string.IsNullOrWhiteSpace(ConstructSolutionId))
                {
                    txtProjectName.Text = ProjectService.GetProjectByProjectId(CurrUser.LoginProjectId).ProjectName;
                    Model.Solution_CQMSConstructSolution constructSolution = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                    txtCode.Text = constructSolution.Code;
                    if (!string.IsNullOrEmpty(constructSolution.UnitId))
                    {
                        drpUnit.Text = UnitService.GetUnitNameByUnitId(constructSolution.UnitId);
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SolutionType))
                    {
                        drpModelType.Text = BLL.SolutionTempleteTypeService.GetSolutionTempleteTypeById(constructSolution.SolutionType).SolutionTempleteTypeName;
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SpecialSchemeTypeId))
                    {
                        txtSpecialType.Text = BLL.SpecialSchemeTypeService.GetSpecialSchemeTypeById(constructSolution.SpecialSchemeTypeId).SpecialSchemeTypeName;
                    }
                    if (constructSolution.CompileDate != null)
                    {
                        txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", constructSolution.CompileDate);
                    }
                    txtSolutionName.Text = constructSolution.SolutionName;
                    if (!string.IsNullOrWhiteSpace(constructSolution.UnitWorkIds))
                    {
                        txtUnitWork.Text = UnitWorkService.GetUnitWorkName(constructSolution.UnitWorkIds);

                    }
                    if (constructSolution.IsHSSE == true)
                    {
                        this.cbIsHSSE.Checked = true;
                    }
                    if (!string.IsNullOrWhiteSpace(constructSolution.CNProfessionalCodes))
                    {
                        txtCNProfessional.Text = CQMSConstructSolutionService.GetProfessionalName(constructSolution.CNProfessionalCodes);
                    }
                    if (constructSolution.Edition != null)
                    {
                        ListItem[] list = new ListItem[constructSolution.Edition.Value + 1];
                        for (int i = 0; i <= constructSolution.Edition.Value; i++)
                        {
                            list[i] = new ListItem((i / 10.0).ToString("#0.0"), "" + i);
                        }
                        drpEdition.DataValueField = "Value";
                        drpEdition.DataTextField = "Text";
                        drpEdition.DataSource = list;
                        drpEdition.DataBind();
                        drpEdition.SelectedIndex = constructSolution.Edition.Value;
                    }
                    bindApprove();
                    BindZYRole();
                    BindZLRole();
                    BindAQRole();
                    BindKZRole();
                    BindSGRole();
                    BindXMRole();
                    var zyUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "ZY");
                    if (zyUserIds.Count > 0)
                    {
                        SetCheck(trOne, zyUserIds);
                    }
                    var zlUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "ZL");
                    if (zlUserIds.Count > 0)
                    {
                        SetCheck(trTwo, zlUserIds);
                    }
                    var aqUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "AQ");
                    if (aqUserIds.Count > 0)
                    {
                        SetCheck(trThree, aqUserIds);
                    }
                    var kzUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "KZ");
                    if (kzUserIds.Count > 0)
                    {
                        SetCheck(trFour, kzUserIds);
                    }
                    var sgUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "SG");
                    if (sgUserIds.Count > 0)
                    {
                        SetCheck(trFive, sgUserIds);
                    }
                    var xmUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "XM");
                    if (xmUserIds.Count > 0)
                    {
                        SetCheck(trSixe, xmUserIds);
                    }
                    if (!string.IsNullOrEmpty(Request.Params["see"]))
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = BLL.CQMSConstructSolutionApproveService.GetSee(ConstructSolutionId, this.CurrUser.UserId);
                        if (approve != null)
                        {
                            approve.ApproveDate = DateTime.Now;
                            BLL.CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approve);
                        }
                    }
                }
            }
        }

        #region 动态加载角色树

        /// <summary>
        /// 设置树的节点选择
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="role"></param>
        private void SetCheck(Tree tree, List<string> userIds)
        {
            foreach (TreeNode tn in tree.Nodes[0].Nodes)
            {
                if (userIds.Contains(tn.NodeID))
                {
                    tn.Checked = true;
                }
            }
        }

        /// 加载角色树:动态加载
        /// </summary>
        private void BindZYRole()
        {

            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "专业工程师";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trOne.Nodes.Add(rootNode);
            trOne.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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.ZBCNEngineer)
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               select x;
                //var ss = LINQToDataTable(userList);
                foreach (var u in userList)
                {
                    TreeNode Node = new TreeNode();
                    Node.Text = u.UserName;
                    Node.NodeID = u.UserId;
                    Node.EnableCheckEvent = true;
                    rootNode.Nodes.Add(Node);
                }
            }

        }
        private void BindZLRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "质量组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trTwo.Nodes.Add(rootNode);
            trTwo.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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.QAManager) || p.RoleId.Contains(Const.CQEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        /// <summary>
        /// 判断是否有选择
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public Boolean nodesCheckd(Tree node)
        {
            bool res = false;
            if (node.Nodes[0].Nodes.Count > 0)
            {
                foreach (var item in node.Nodes[0].Nodes)
                {
                    if (item.Checked)
                    {
                        res = true;
                        break;
                    }
                }
            }
            return res;
        }

        private void BindAQRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "HSE组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trThree.Nodes.Add(rootNode);
            trThree.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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) || p.RoleId.Contains(Const.HSSEEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }

        private void BindKZRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "控制组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trFour.Nodes.Add(rootNode);
            trFour.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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.ControlManager) || p.RoleId.Contains(Const.KZEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }

        private void BindSGRole()
        {

            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "施工经理";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trFive.Nodes.Add(rootNode);
            trFive.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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.ConstructionManager) || p.RoleId.Contains(Const.ConstructionAssistantManager))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }

        private void BindXMRole()
        {

            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "项目经理";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trSixe.Nodes.Add(rootNode);
            trSixe.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = 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.ProjectManager)
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        #endregion
        /// <summary>
        /// 审批列表
        /// </summary>
        private void bindApprove()
        {
            var list = CQMSConstructSolutionApproveService.getListData(ConstructSolutionId);
            //var user = UserService.GetAllUserList(CurrUser.LoginProjectId);
            if (list.Count() > 0)
            {
                var last = list.LastOrDefault();
                if (last.ApproveMan == CurrUser.UserId)
                {
                    btnRevoke.Hidden = false;
                    lastCanRemoveApproveId = last.ConstructSolutionApproveId;
                }
            }
            gvApprove.DataSource = list;
            gvApprove.DataBind();
        }

        public string man(Object man)
        {
            string appman = string.Empty;
            if (UserService.GetUserByUserId(man.ToString()) != null)
            {
                appman = UserService.GetUserByUserId(man.ToString()).UserName;
            }
            return appman;
        }

        protected void gvApprove_RowCommand(object sender, GridCommandEventArgs e)
        {
            object[] keys = gvApprove.DataKeys[e.RowIndex];
            string fileId = string.Empty;
            if (keys == null)
            {
                return;
            }
            else
            {
                fileId = keys[0].ToString();
                var appr = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(u => u.ConstructSolutionApproveId == fileId).FirstOrDefault();
                if (appr.ApproveType == Const.CQMSConstructSolution_Compile || appr.ApproveType == Const.CQMSConstructSolution_ReCompile)
                {
                    fileId = appr.ConstructSolutionId + appr.Edition;
                }
            }
            PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
                 String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                 -1, fileId, Const.CQMSConstructSolutionMenuId)));
        }

        /// <summary>
        /// 审批列表删除记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnRevoke_Click(object sender, EventArgs e)
        {
            //Confirm confirm = new Confirm();
            //confirm.Message = "您真的要执行撤回审核操作吗?";
            //confirm.Title = "确认操作";
            //confirm.MessageBoxIcon = MessageBoxIcon.Question;
            //confirm .
            //confirm.Show();
            var approve = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(x => x.ConstructSolutionApproveId == lastCanRemoveApproveId).FirstOrDefault();
            if (approve != null)
            {
                approve.ApproveDate = null;
                approve.ApproveIdea = null;
                approve.IsAgree = null;
                Funs.DB.SubmitChanges();
            }

            //更新方案状态
            Model.Solution_CQMSConstructSolution constructSolution = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
            var ApproveModel = CQMSConstructSolutionApproveService.getListData(ConstructSolutionId).LastOrDefault();
            if (constructSolution != null)
            {
                if (ApproveModel != null)
                {
                    constructSolution.State = ApproveModel.ApproveType;
                }
                else
                {
                    constructSolution.State = Const.CQMSConstructSolution_Compile;
                }
            }
            CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
             
            Alert.ShowInTop("撤销成功", MessageBoxIcon.Success);
        }

    }
}