using BLL;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;

namespace FineUIPro.Web.EditorManage
{
    public partial class PMEditorEdit : PageBase
    {
        #region 定义项
        #region 定义集合
        /// <summary>
        /// 定义计划工程师明细集合
        /// </summary>
        private List<Model.Editor_PM> projectControlLists = new List<Model.Editor_PM>();
        #endregion
        #endregion

        #region 加载
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string view = Request.Params["view"];
                if (view == "1")
                {
                    this.btnCalculated.Hidden = true;
                    this.btnSave.Hidden = true;
                }
                else
                {   
                    // 特殊控制,不需要
                    // GetButtonPower();//权限设置
                }
                btnClose.OnClientClick = ActiveWindow.GetHideReference();

                BLL.ConstService.InitConstValueDropDownList(this.drpPM_General_CDI, BLL.Const.PM_CDI, true);
                BLL.ConstService.InitConstValueDropDownList(this.drpPM_General_Category, BLL.Const.PM_Category, true);
                BLL.ConstValue.InitSysConstDropDownList(this.drpReasonForCritical, BLL.Const.ReasonForCritical, false);
                //部门
                BLL.DepartService.InitDepartDropDownList(this.drpDelaybyteam1, true);
                BLL.DepartService.InitDepartDropDownList(this.drpDelaybyteam2, true);
                BLL.DepartService.InitDepartDropDownList(this.drpDelaybyteam3, true);
                // 人员
                BLL.Sys_UserService.InitUserDropDownList(this.drpDelaybypersonel1, true);
                BLL.Sys_UserService.InitUserDropDownList(this.drpDelaybypersonel2, true);
                BLL.Sys_UserService.InitUserDropDownList(this.drpDelaybypersonel3, true);

                string eprojectId = Request.Params["EProjectId"];
                if (!string.IsNullOrEmpty(eprojectId))
                {
                    Model.Editor_EProject ep = BLL.EProjectService.GeteProjectById(eprojectId);
                    if (ep.PM_PressureVesselChecked == true)
                    {
                        this.cbPM_PressureVessel.Checked = true;
                    }
                    this.txtPM_PressureVessel.Text = ep.PM_PP_PressureVessel.HasValue ? Convert.ToDateTime(ep.PM_PP_PressureVessel).ToString("{yyyy-MM-dd}") : "";
                    if (ep.PM_PressurePipingChecked == true)
                    {
                        this.cbPM_PressurePiping.Checked = true;
                    }
                    this.txtPM_PressurePiping.Text = ep.PM_PP_PressurePiping.HasValue ? Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}") : "";
                    if (ep.PM_SQIBChecked == true)
                    {
                        this.cbPM_SQIB.Checked = true;
                    }
                    this.txtPM_SQIB.Text = ep.PM_PP_SQIB.HasValue ? Convert.ToDateTime(ep.PM_PP_SQIB).ToString("{yyyy-MM-dd}") : "";
                    if (!string.IsNullOrEmpty(ep.PM_General_CDI))
                    {
                        this.drpPM_General_CDI.SelectedValue = BLL.ConstService.GetConstListByTextAndGroupId(ep.PM_General_CDI, BLL.Const.PM_CDI).ConstValue;
                    }
                    txtPM_General_CostToComplete.Text = ep.PM_General_CostToComplete.HasValue ? ep.PM_General_CostToComplete.ToString() : "";
                    
                    if (!string.IsNullOrEmpty(ep.PM_General_Category))
                    {
                        drpPM_General_Category.SelectedValue = BLL.ConstService.GetConstListByTextAndGroupId(ep.PM_General_Category, BLL.Const.PM_Category).ConstValue;
                    }
                    if (!string.IsNullOrEmpty(ep.PM_Critical))
                    {
                        drpCritical.SelectedValue = ep.PM_Critical;
                    }
                    if (!string.IsNullOrEmpty(ep.PM_ReasonForCritical))
                    {
                        drpReasonForCritical.SelectedValue = ep.PM_ReasonForCritical;
                    }

                    //txtPM_SC_ApprovedQty.Text = Convert.ToString(ep.PM_SC_ApprovedQty);
                    //txtPM_SC_ApprovedCost.Text = Convert.ToString(ep.PM_SC_ApprovedCost);
                    //txtPM_SC_PendingQty.Text = Convert.ToString(ep.PM_SC_PendingQty);
                    //txtPM_SC_PendingCost.Text = Convert.ToString(ep.PM_SC_PendingCost);
                    txtPM_MA_JobReveive.Text = ep.PM_MA_JobReveive.HasValue ? Convert.ToDateTime(ep.PM_MA_JobReveive).ToString("yyyy-MM-dd") : "";
                    txtPM_MA_KickOffMeeting.Text = ep.PM_MA_KickOffMeeting.HasValue ? Convert.ToDateTime(ep.PM_MA_KickOffMeeting).ToString("yyyy-MM-dd") : "";
                    txtPM_MA_SR.Text = ep.PM_MA_SR.HasValue ? Convert.ToDateTime(ep.PM_MA_SR).ToString("yyyy-MM-dd") : "";
                    this.txtPM_MA_ProjectApproval.Text = ep.PM_MA_ProjectApproval == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.PM_MA_ProjectApproval);

                    this.txtPlanning_Approval.Text = ep.PM_Planning_Approval == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.PM_Planning_Approval);
                    this.txtPre_Approval.Text = ep.PM_Pre_Approval == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.PM_Pre_Approval);

                    if (ep.PM_LLEP_RevisedStart.HasValue)
                    {
                        txtPM_LLEP_RevisedStart.Text = string.Format("{0:yyyy-MM-dd}", ep.PM_LLEP_RevisedStart);
                    }
                    else
                    {
                        if (ep.ProjectControl_LP_SchStart.HasValue)
                        {
                            txtPM_LLEP_RevisedStart.Text = string.Format("{0:yyyy-MM-dd}", ep.ProjectControl_LP_SchStart);
                        }
                    }
                    if (ep.PM_LLEP_RevisedStartIsAct == true)
                    {
                        cbLLEP_RevisedStart.Checked = true;
                    }
                    else
                    {
                        cbLLEP_RevisedStart.Checked = false;
                    }

                    if (ep.PM_LLEP_RevisedEnd.HasValue)
                    {
                        txtPM_LLEP_RevisedEnd.Text = string.Format("{0:yyyy-MM-dd}", ep.PM_LLEP_RevisedEnd);
                    }
                    else
                    {
                        if (ep.ProjectControl_LP_SchEnd.HasValue)
                        {
                            this.txtPM_LLEP_RevisedEnd.Text = string.Format("{0:yyyy-MM-dd}", ep.ProjectControl_LP_SchEnd);
                        }
                    }
                    if (ep.PM_LLEP_RevisedEndIsAct == true)
                    {
                        cbLLEP_RevisedEnd.Checked = true;
                    }
                    else
                    {
                        cbLLEP_RevisedEnd.Checked = false;
                    }

                    txtPM_LLEP_ActualProgress.Text = Convert.ToString(ep.PM_LLEP_ActualProgress);
                    txtPM_Remarks_Engineering.Text = ep.PM_Remarks_Engineering;
                    txtPM_Remarks_Procurement.Text = ep.PM_Remarks_Procurement;
                    this.txtStartDate.Text = ep.PM_Study_StartDate == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.PM_Study_StartDate);
                    this.txtEndDate.Text = ep.PM_Study_EndDate == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.PM_Study_EndDate);
                    if (!string.IsNullOrEmpty(ep.OutSourceType))
                    {
                        drpOutSourceType.SelectedValue = ep.OutSourceType;
                    }
                    
                    if (!string.IsNullOrEmpty(ep.CM_Remarks_Procurement))
                    {
                        this.lblCMProcurement.Text = "CM-Procurement:" + ep.CM_Remarks_Procurement;
                    }

                    // job List
                    txtPlanEHSReview_Files.Text = ep.Job_PlanEHSReview_Files == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_PlanEHSReview_Files);
                    txtEHSReview_Files_Meeting.Text = ep.Job_EHSReview_Meeting == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_EHSReview_Meeting);
                    txtEHSReview_Files.Text = ep.Job_EHSReview_Files == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_EHSReview_Files);
                    txtEstimate_Worksheet.Text = ep.Job_Estimate_Worksheet == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_Estimate_Worksheet);
                    txtBudget.Text = ep.Job_Budget == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_Budget);
                    txtTecoAlarm_Study.Text = ep.Job_TecoAlarm_Study == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_TecoAlarm_Study);
                    txtPlan_IFC.Text = ep.Job_Plan_IFC == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_Plan_IFC);
                    //txtHold.Text = ep.Job_Hold == null ? "" : string.Format("{0:yyyy-MM-dd}", ep.Job_Hold);

                    if (!string.IsNullOrEmpty(ep.Job_Delaybyteam1))
                    {
                        drpDelaybyteam1.SelectedValue = ep.Job_Delaybyteam1;
                    }
                    if (!string.IsNullOrEmpty(ep.Job_Delaybyteam2))
                    {
                        drpDelaybyteam2.SelectedValue = ep.Job_Delaybyteam2;
                    }
                    if (!string.IsNullOrEmpty(ep.Job_Delaybyteam3))
                    {
                        drpDelaybyteam3.SelectedValue = ep.Job_Delaybyteam3;
                    }
                    if (!string.IsNullOrEmpty(ep.Job_Delaybypersonel1))
                    {
                        drpDelaybypersonel1.SelectedValue = ep.Job_Delaybypersonel1;
                    }
                    if (!string.IsNullOrEmpty(ep.Job_Delaybypersonel2))
                    {
                        drpDelaybypersonel2.SelectedValue = ep.Job_Delaybypersonel2;
                    }
                    if (!string.IsNullOrEmpty(ep.Job_Delaybypersonel3))
                    {
                        drpDelaybypersonel3.SelectedValue = ep.Job_Delaybypersonel3;
                    }
                    txtRemark1.Text = ep.Job_Remark1;
                    txtRemark2.Text = ep.Job_Remark2;
                    txtRemark3.Text = ep.Job_Remark3;

                    btnCalculated_Click(null, null);//进度计算

                    List<Model.Editor_PM> pmList = BLL.PMService.GetPMByEprojectId(eprojectId);
                    if (pmList.Count > 0)
                    {
                        Grid1.DataSource = pmList;
                        Grid1.DataBind();
                    }

                    //当计划工程师编辑器中MC在3.30日之前,SQIB为3.30,MC在3.30日之后,SQIB为明年的3.30
                    //string mcDateNow = DateTime.Now.ToString("MM-dd");
                    //string mcDate = Convert.ToDateTime(ep.ProjectControl_MS_MC).ToString("MM-dd");
                    //if (Funs.GetNewDateTime(mcDate) < Funs.GetNewDateTime(mcDateNow))
                    //{
                    //    this.cbPM_SQIB.Checked = true;
                    //    this.txtPM_SQIB.Text = DateTime.Now.Year + "-3-30";
                    //}
                    //else
                    //{
                    //    this.cbPM_SQIB.Checked = true;
                    //    this.txtPM_SQIB.Text = DateTime.Now.AddYears(1).Year + "-3-30";
                    //}

                    if (!string.IsNullOrEmpty(txtPM_PressureVessel.Text.Trim()))
                    {
                        this.cbPM_PressureVessel.Checked = true;
                    }
                    if (!string.IsNullOrEmpty(txtPM_PressurePiping.Text.Trim()))
                    {
                        this.cbPM_PressurePiping.Checked = true;
                    }

                    // 如果是PPE角色则显示全部
                    // 如果当前用户角色为PM并且为EM,则显示全部;
                    // 如果当前用户角色为EM,则只显示下面EM Detail Eng;
                    // 如果当前用户角色为PM,则不显示EM Detail Eng
                    if (CurrUser.RoleId == Const.Role_PPE)
                    {
                        this.gpPM.Hidden = false;
                        this.gpEM.Hidden = false;
                    }
                    else
                    {
                        if (this.CurrUser.UserId == ep.ProjectControl_ProjectManagerId && this.CurrUser.UserId == ep.ProjectControl_EMManagerId)
                        {
                            this.gpEM.Hidden = false;
                            this.gpPM.Hidden = false;
                        }
                        else if (this.CurrUser.UserId == ep.ProjectControl_EMManagerId)
                        {
                            this.gpEM.Hidden = false;
                            this.gpPM.Hidden = true;
                        }
                        else if (this.CurrUser.UserId == ep.ProjectControl_ProjectManagerId)
                        {
                            this.gpEM.Hidden = true;
                            this.gpPM.Hidden = false;
                        }
                    }
                }      
                this.txtPM_MA_JobReveive.MaxDate = DateTime.Now;
                this.txtPM_MA_KickOffMeeting.MaxDate = DateTime.Now;
                this.txtPM_MA_SR.MaxDate = DateTime.Now;
                this.txtPM_MA_ProjectApproval.MaxDate = DateTime.Now;
            }
        }
        #endregion

        #region Grid1绑定事件
        /// <summary>
        /// Grid1中PID、Document、Cost Estimate不允许操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDataBound(object sender, GridRowEventArgs e)
        {
            var row = e.DataItem as Model.Editor_PM;
            if (row != null)
            {
                string DisciplinesWBSName = row.DisciplinesWBSName.ToString();

                var tdc = (from x in Funs.DB.Editor_TDC
                           where x.EProjectId == row.EProjectId
                           && x.Type == "D01_IFC"
                           && x.Disc.Contains(DisciplinesWBSName)
                           select x.Disc).FirstOrDefault();

                if (tdc != null && !string.IsNullOrEmpty(tdc))
                {
                    RenderField Sch_End = Grid1.FindColumn("RevisedEnd") as RenderField;
                    e.CellCssClasses[Sch_End.ColumnIndex] = "f-grid-cell-uneditable";
                }

                if (DisciplinesWBSName == "PID" || DisciplinesWBSName == "Document" || DisciplinesWBSName == "Cost Estimate")
                {
                    RenderField Sch_Start = Grid1.FindColumn("SchStart") as RenderField;
                    e.CellCssClasses[Sch_Start.ColumnIndex] = "f-grid-cell-uneditable";
                    RenderField Sch_End = Grid1.FindColumn("SchEnd") as RenderField;
                    e.CellCssClasses[Sch_End.ColumnIndex] = "f-grid-cell-uneditable";

                    RenderField Revised_Start = Grid1.FindColumn("RevisedStart") as RenderField;
                    e.CellCssClasses[Revised_Start.ColumnIndex] = "f-grid-cell-uneditable";
                    RenderField Revised_End = Grid1.FindColumn("RevisedEnd") as RenderField;
                    e.CellCssClasses[Revised_End.ColumnIndex] = "f-grid-cell-uneditable";
                }
                else
                {
                    if (this.CurrUser.RoleId != Const.Role_PPE && this.CurrUser.UserId != Const.GlyId)
                    {
                        RenderField Sch_Start = Grid1.FindColumn("SchStart") as RenderField;
                        e.CellCssClasses[Sch_Start.ColumnIndex] = "f-grid-cell-uneditable";
                        RenderField Sch_End = Grid1.FindColumn("SchEnd") as RenderField;
                        e.CellCssClasses[Sch_End.ColumnIndex] = "f-grid-cell-uneditable";
                    }
                }
            }
        }
        #endregion

        #region 保存
        /// <summary>
        /// 保存按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            string operationLog = string.Empty;
            string eprojectId = Request.Params["EProjectId"];
            var eproject = BLL.EProjectService.GeteProjectById(eprojectId);
            if (eproject != null)
            {
                #region 日志
                operationLog = eproject.ProjectControl_JobNo + "_PM:";
                if ((eproject.PM_General_CDI != null || drpPM_General_CDI.SelectedValue != Const._Null) && eproject.PM_General_CDI != drpPM_General_CDI.SelectedItem.Text)
                {
                    operationLog += "CDI 由" + eproject.PM_General_CDI + "修改为" + drpPM_General_CDI.SelectedItem.Text + ",";
                }
                if ((eproject.OutSourceType != null || drpOutSourceType.SelectedValue != "0") && eproject.OutSourceType != drpOutSourceType.SelectedItem.Text)
                {
                    operationLog += "OutSource Type 由" + eproject.OutSourceType + "修改为" + drpOutSourceType.SelectedItem.Text + ",";
                }
                
                if ((eproject.PM_General_Category != null || drpPM_General_Category.SelectedValue != Const._Null) && eproject.PM_General_Category != drpPM_General_Category.SelectedItem.Text)
                {
                    operationLog += "Category 由" + eproject.PM_General_Category + "修改为" + drpPM_General_Category.SelectedItem.Text + ",";
                }
                if ((eproject.PM_Critical != null || drpCritical.SelectedValue != Const._Null) && eproject.PM_Critical != drpCritical.SelectedItem.Text)
                {
                    operationLog += "Critical 由" + eproject.PM_Critical + "修改为" + drpCritical.SelectedItem.Text + ",";
                }

                if (eproject.PM_ReasonForCritical != drpReasonForCritical.SelectedValue)
                {
                    var s = from x in Funs.DB.Sys_Const where x.ConstValue == drpReasonForCritical.SelectedValue && x.GroupId == BLL.Const.ReasonForCritical select x;
                    operationLog += "Reason For Critical 由" + s.First().ConstText + "修改为" + drpReasonForCritical.SelectedItem.Text + ",";
                }
                if ((eproject.PM_PressureVesselChecked.HasValue ? eproject.PM_PressureVesselChecked.Value : false) != cbPM_PressureVessel.Checked)
                {
                    operationLog += "Pressure Vessel 由" + (eproject.PM_PressureVesselChecked.HasValue ? eproject.PM_PressureVesselChecked.Value : false).ToString() + "修改为" + cbPM_PressureVessel.Checked.ToString() + ",";
                }
                if ((eproject.PM_PressurePipingChecked.HasValue ? eproject.PM_PressurePipingChecked.Value : false) != cbPM_PressurePiping.Checked)
                {
                    operationLog += "Pressure Piping 由" + (eproject.PM_PressurePipingChecked.HasValue ? eproject.PM_PressurePipingChecked.Value : false).ToString() + "修改为" + cbPM_PressurePiping.Checked.ToString() + ",";
                }
                if ((eproject.PM_SQIBChecked.HasValue ? eproject.PM_SQIBChecked.Value : false) != cbPM_SQIB.Checked)
                {
                    operationLog += "SQIB 由" + (eproject.PM_SQIBChecked.HasValue ? eproject.PM_SQIBChecked.Value : false).ToString() + "修改为" + cbPM_SQIB.Checked.ToString() + ",";
                }

                //if ((eproject.PM_SC_ApprovedQty != null || txtPM_SC_ApprovedQty.Text != "") && eproject.PM_SC_ApprovedQty != Funs.GetNewInt(txtPM_SC_ApprovedQty.Text.Trim()))
                //{
                //    operationLog += "Approved Qty 由" + (eproject.PM_SC_ApprovedQty != null ? eproject.PM_SC_ApprovedQty.Value.ToString() : "" + "修改为" + txtPM_SC_ApprovedQty.Text) + ",";
                //}
                //if ((eproject.PM_SC_ApprovedCost != null || txtPM_SC_ApprovedCost.Text != "") && eproject.PM_SC_ApprovedCost != Funs.GetNewDecimal(txtPM_SC_ApprovedCost.Text.Trim()))
                //{
                //    operationLog += "Approved Cost 由" + (eproject.PM_SC_ApprovedCost != null ? eproject.PM_SC_ApprovedCost.Value.ToString() : "" + "修改为" + txtPM_SC_ApprovedCost.Text) + ",";
                //}
                //if ((eproject.PM_SC_PendingQty != null || txtPM_SC_PendingQty.Text != "") && eproject.PM_SC_PendingQty != Funs.GetNewInt(txtPM_SC_PendingQty.Text.Trim()))
                //{
                //    operationLog += "Pending Qty 由" + (eproject.PM_SC_PendingQty != null ? eproject.PM_SC_PendingQty.Value.ToString() : "" + "修改为" + txtPM_SC_PendingQty.Text) + ",";
                //}
                //if ((eproject.PM_SC_PendingCost != null || txtPM_SC_PendingCost.Text != "") && eproject.PM_SC_PendingCost != Funs.GetNewDecimal(txtPM_SC_PendingCost.Text.Trim()))
                //{
                //    operationLog += "Pending Cost 由" + (eproject.PM_SC_PendingCost != null ? eproject.PM_SC_PendingCost.Value.ToString() : "" + "修改为" + txtPM_SC_PendingCost.Text) + ",";
                //}

                if (eproject.PM_MA_JobReveive != Funs.GetNewDateTime(this.txtPM_MA_JobReveive.Text.Trim()))
                {
                    operationLog += "Job Reveive 由" + (eproject.PM_MA_JobReveive == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_MA_JobReveive)) + "修改为" + this.txtPM_MA_JobReveive.Text.Trim() + ",";
                }
                if (eproject.PM_MA_KickOffMeeting != Funs.GetNewDateTime(this.txtPM_MA_KickOffMeeting.Text.Trim()))
                {
                    operationLog += "Kick-off Meeting 由" + (eproject.PM_MA_KickOffMeeting == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_MA_KickOffMeeting)) + "修改为" + this.txtPM_MA_KickOffMeeting.Text.Trim() + ",";
                }
                if (eproject.PM_MA_SR != Funs.GetNewDateTime(this.txtPM_MA_SR.Text.Trim()))
                {
                    operationLog += "SR1/2 由" + (eproject.PM_MA_SR == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_MA_SR)) + "修改为" + this.txtPM_MA_SR.Text.Trim() + ",";
                }
                if (eproject.PM_MA_ProjectApproval != Funs.GetNewDateTime(this.txtPM_MA_ProjectApproval.Text.Trim()))
                {
                    operationLog += "Project Approval 由" + (eproject.PM_MA_ProjectApproval == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_MA_ProjectApproval)) + "修改为" + this.txtPM_MA_ProjectApproval.Text.Trim() + ",";
                }

                if (eproject.PM_Planning_Approval != Funs.GetNewDateTime(this.txtPlanning_Approval.Text.Trim()))
                {
                    operationLog += "Planning Cost Approval 由" + (eproject.PM_Planning_Approval == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_Planning_Approval)) + "修改为" + this.txtPlanning_Approval.Text.Trim() + ",";
                }
                if (eproject.PM_Pre_Approval != Funs.GetNewDateTime(this.txtPre_Approval.Text.Trim()))
                {
                    operationLog += "Pre-Approval 由" + (eproject.PM_Pre_Approval == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_Pre_Approval)) + "修改为" + this.txtPre_Approval.Text.Trim() + ",";
                }

                if (eproject.PM_LLEP_RevisedStart != Funs.GetNewDateTime(this.txtPM_LLEP_RevisedStart.Text.Trim()))
                {
                    operationLog += "LLEP_Forecast Start 由" + (eproject.PM_LLEP_RevisedStart == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_LLEP_RevisedStart)) + "修改为" + this.txtPM_LLEP_RevisedStart.Text.Trim() + ",";
                }
                if ((eproject.PM_LLEP_RevisedStartIsAct.HasValue ? eproject.PM_LLEP_RevisedStartIsAct.Value : false) != cbLLEP_RevisedStart.Checked)
                {
                    operationLog += "LLEP_Forecast Start Actual 由" + (eproject.PM_LLEP_RevisedStartIsAct.HasValue ? eproject.PM_LLEP_RevisedStartIsAct.Value : false).ToString() + "修改为" + cbLLEP_RevisedStart.Checked.ToString() + ",";
                }
                if (eproject.PM_LLEP_RevisedEnd != Funs.GetNewDateTime(this.txtPM_LLEP_RevisedEnd.Text.Trim()))
                {
                    operationLog += "LLEP_Forecast End 由" + (eproject.PM_LLEP_RevisedEnd == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_LLEP_RevisedEnd)) + "修改为" + this.txtPM_LLEP_RevisedEnd.Text.Trim() + ",";
                }
                if ((eproject.PM_LLEP_RevisedEndIsAct.HasValue ? eproject.PM_LLEP_RevisedEndIsAct.Value : false) != cbLLEP_RevisedEnd.Checked)
                {
                    operationLog += "LLEP_Forecast End Actual 由" + (eproject.PM_LLEP_RevisedEndIsAct.HasValue ? eproject.PM_LLEP_RevisedEndIsAct.Value : false).ToString() + "修改为" + cbLLEP_RevisedEnd.Checked.ToString() + ",";
                }

                if (eproject.PM_Study_StartDate != Funs.GetNewDateTime(this.txtStartDate.Text.Trim()))
                {
                    operationLog += "Forecast Start 由" + (eproject.PM_Study_StartDate == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_Study_StartDate)) + "修改为" + this.txtStartDate.Text.Trim() + ",";
                }
                if (eproject.PM_Study_EndDate != Funs.GetNewDateTime(this.txtEndDate.Text.Trim()))
                {
                    operationLog += "Forecast End 由" + (eproject.PM_Study_EndDate == null ? "" : string.Format("{0:yyyy-MM-dd}", eproject.PM_Study_EndDate)) + "修改为" + this.txtEndDate.Text.Trim() + ",";
                }

                if (eproject.PM_Remarks_Engineering != txtPM_Remarks_Engineering.Text.Trim())
                {
                    operationLog += "Engineering 由" + eproject.PM_Remarks_Engineering + "修改为" + txtPM_Remarks_Engineering.Text.Trim() + ",";
                }
                if (eproject.PM_Remarks_Procurement != txtPM_Remarks_Procurement.Text.Trim())
                {
                    operationLog += "Procurement 由" + eproject.PM_Remarks_Procurement + "修改为" + txtPM_Remarks_Procurement.Text.Trim() + ",";
                }
                #endregion
                eproject.EProjectId = eprojectId;
                if (this.drpPM_General_CDI.SelectedValue != BLL.Const._Null)
                {
                    eproject.PM_General_CDI = drpPM_General_CDI.SelectedItem.Text;
                }
                else
                {
                    eproject.PM_General_CDI = null;
                }

                eproject.PM_General_CostToComplete = Funs.GetNewDecimalOrZero(txtPM_General_CostToComplete.Text.Trim());

                if (drpPM_General_Category.SelectedValue != BLL.Const._Null)
                {
                    eproject.PM_General_Category = drpPM_General_Category.SelectedItem.Text;
                }
                else
                {
                    eproject.PM_General_Category = null;
                }
                eproject.PM_Critical = drpCritical.SelectedValue;
                eproject.PM_ReasonForCritical = drpReasonForCritical.SelectedValue;

                eproject.PM_LLEP_RevisedStart = Funs.GetNewDateTime(txtPM_LLEP_RevisedStart.Text.Trim());
                eproject.PM_LLEP_RevisedEnd = Funs.GetNewDateTime(txtPM_LLEP_RevisedEnd.Text.Trim());
                if (cbLLEP_RevisedStart.Checked)
                {
                    eproject.PM_LLEP_RevisedStartIsAct = true;
                }
                else
                {
                    eproject.PM_LLEP_RevisedStartIsAct = null;
                }
                if (cbLLEP_RevisedEnd.Checked)
                {
                    eproject.PM_LLEP_RevisedEndIsAct = true;
                }
                else
                {
                    eproject.PM_LLEP_RevisedEndIsAct = null;
                }

                btnCalculated_Click(null, null);//进度计算
                if (txtPM_LLEP_ActualProgress.Text.Trim() != string.Empty)
                {
                    eproject.PM_LLEP_ActualProgress = Convert.ToDecimal(txtPM_LLEP_ActualProgress.Text.Trim());
                }

                //eproject.PM_SC_ApprovedQty = Funs.GetNewInt(txtPM_SC_ApprovedQty.Text.Trim());
                //eproject.PM_SC_ApprovedCost = Funs.GetNewDecimal(txtPM_SC_ApprovedCost.Text.Trim());
                //eproject.PM_SC_PendingQty = Funs.GetNewInt(txtPM_SC_PendingQty.Text.Trim());
                //eproject.PM_SC_PendingCost = Funs.GetNewDecimal(txtPM_SC_PendingCost.Text.Trim());
                eproject.PM_MA_JobReveive = Funs.GetNewDateTime(txtPM_MA_JobReveive.Text.Trim());
                eproject.PM_MA_KickOffMeeting = Funs.GetNewDateTime(txtPM_MA_KickOffMeeting.Text.Trim());
                eproject.PM_MA_SR = Funs.GetNewDateTime(txtPM_MA_SR.Text.Trim());
                eproject.PM_MA_ProjectApproval = Funs.GetNewDateTime(txtPM_MA_ProjectApproval.Text.Trim());
                eproject.PM_Pre_Approval = Funs.GetNewDateTime(txtPre_Approval.Text.Trim());
                eproject.PM_Planning_Approval = Funs.GetNewDateTime(txtPlanning_Approval.Text.Trim());

                eproject.PM_Remarks_Engineering = txtPM_Remarks_Engineering.Text.Trim();
                eproject.PM_Remarks_Procurement = txtPM_Remarks_Procurement.Text.Trim();
                eproject.PM_PP_PressureVessel = Funs.GetNewDateTime(this.txtPM_PressureVessel.Text.Trim());
                eproject.PM_PP_PressurePiping = Funs.GetNewDateTime(this.txtPM_PressurePiping.Text.Trim());
                eproject.PM_PP_SQIB = Funs.GetNewDateTime(this.txtPM_SQIB.Text.Trim());
                eproject.PM_Study_StartDate = Funs.GetNewDateTime(this.txtStartDate.Text.Trim());
                eproject.PM_Study_EndDate = Funs.GetNewDateTime(this.txtEndDate.Text.Trim());
                eproject.PM_PressureVesselChecked = this.cbPM_PressureVessel.Checked;
                eproject.PM_PressurePipingChecked = this.cbPM_PressurePiping.Checked;
                eproject.PM_SQIBChecked = this.cbPM_SQIB.Checked;
                if (drpOutSourceType.SelectedValue != "0")
                {
                    eproject.OutSourceType = drpOutSourceType.SelectedValue;
                }
                else
                {
                    eproject.OutSourceType = null;
                }

                // job
                eproject.Job_PlanEHSReview_Files = Funs.GetNewDateTime(this.txtPlanEHSReview_Files.Text.Trim());
                eproject.Job_EHSReview_Meeting = Funs.GetNewDateTime(this.txtEHSReview_Files_Meeting.Text.Trim());
                eproject.Job_Budget = Funs.GetNewDateTime(this.txtBudget.Text.Trim());
                eproject.Job_EHSReview_Files = Funs.GetNewDateTime(this.txtEHSReview_Files.Text.Trim());
                eproject.Job_Estimate_Worksheet = Funs.GetNewDateTime(this.txtEstimate_Worksheet.Text.Trim());
                //eproject.Job_Hold = Funs.GetNewDateTime(this.txtHold.Text.Trim());
                eproject.Job_Plan_IFC = Funs.GetNewDateTime(this.txtPlan_IFC.Text.Trim());
                eproject.Job_TecoAlarm_Study = Funs.GetNewDateTime(this.txtTecoAlarm_Study.Text.Trim());
                if (drpDelaybyteam1.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybyteam1 = drpDelaybyteam1.SelectedValue;
                }
                if (drpDelaybyteam2.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybyteam2 = drpDelaybyteam2.SelectedValue;
                }
                if (drpDelaybyteam3.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybyteam3 = drpDelaybyteam3.SelectedValue;
                }
                if (drpDelaybypersonel1.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybypersonel1 = drpDelaybypersonel1.SelectedValue;
                }
                if (drpDelaybypersonel2.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybypersonel2 = drpDelaybypersonel2.SelectedValue;
                }
                if (drpDelaybypersonel3.SelectedValue != Const._Null)
                {
                    eproject.Job_Delaybypersonel3 = drpDelaybypersonel3.SelectedValue;
                }
                eproject.Job_Remark1 = txtRemark1.Text.Trim();
                eproject.Job_Remark2 = txtRemark2.Text.Trim();
                eproject.Job_Remark3 = txtRemark3.Text.Trim();
                eproject.ModifyDate = DateTime.Now;
                eproject.ModifyPerson = CurrUser.UserId;

                BLL.EProjectService.UpdateProject(eproject, "PM");
            }

            List<Model.Editor_PM> list = new List<Model.Editor_PM>();
            JArray EditorPMArr = Grid1.GetMergedData();
            if (EditorPMArr.Count > 0)
            {
                //增加明细
                JArray mergedData = Grid1.GetMergedData();
                int i = 0;
                foreach (JObject mergedRow in EditorPMArr)
                {
                    string pmId = Grid1.DataKeys[i][0].ToString();
                    JObject values = mergedRow.Value<JObject>("values");

                    DateTime? ss = Funs.GetNewDateTime(values.Value<string>("SchStart").ToString());
                    DateTime? se = Funs.GetNewDateTime(values.Value<string>("SchEnd").ToString());
                    DateTime? rs = Funs.GetNewDateTime(values.Value<string>("RevisedStart").ToString());
                    DateTime? re = Funs.GetNewDateTime(values.Value<string>("RevisedEnd").ToString());

                    Model.Editor_PM pm = Funs.DB.Editor_PM.FirstOrDefault(x => x.PMId == pmId);
                    if (pm != null)
                    {
                        pm.SchStart = ss;
                        pm.SchEnd = se; 
                        pm.RevisedStart = rs;
                        pm.RevisedEnd = re;
                        pm.RevisedStartIsAct = Convert.ToBoolean(values.Value<string>("RevisedStartIsAct"));
                        pm.RevisedEndIsAct= Convert.ToBoolean(values.Value<string>("RevisedEndIsAct"));
                        Funs.DB.SubmitChanges();
                    }
                    i++;
                }
            }

            #region 更新项目状态
            //更新项目状态
            var epro = BLL.EProjectService.GeteProjectById(eproject.EProjectId);
            if (epro != null)
            {
                //(不要这个逻辑了-2021.03.30)当PM中Milestone(Actual)的Project Approval不为空,同时CM中Const.-Civil的Revised Start和Const.-Mech,E&I的Revised Start小于当前时间,状态为In Construction
                //if (epro.PM_MA_ProjectApproval.HasValue && Funs.GetNewDateTime(DateTime.Now.ToShortDateString()) > Funs.GetNewDateTime(epro.CM_CC_RevisedStart.ToString()) && Funs.GetNewDateTime(DateTime.Now.ToShortDateString()) > Funs.GetNewDateTime(epro.CM_CM_RevisedStart.ToString()))
                //{
                //    epro.ProjectControl_JobStatus = "In Construction";
                //}

                
                //当项目类型为projects或moc时PM中Milestone(Actual)的Project Approval不为空,并且Resource_Plan有记录时,状态为Not Approved 修改于2024.07.04
                var resourcePlans = BLL.ResourcePlanService.GetResourcePlanByEProjectId(epro.EProjectId);
                if ((epro.PM_MA_ProjectApproval == null || epro.PM_MA_ProjectApproval.ToString() == "") && resourcePlans.Count() > 0)
                {
                    if (eproject.ProjectControl_JobStatus == null || eproject.ProjectControl_JobStatus == "" || eproject.ProjectControl_JobStatus == "Not Start")
                    {
                        epro.ProjectControl_JobStatus = "Study";
                    }
                }

                // 增加于2024.07.03
                if (epro.ProjectControl_JobType == "Other" && epro.PM_MA_ProjectApproval.HasValue && !epro.CM_MA_MC.HasValue)
                {
                    eproject.ProjectControl_JobStatus = "On Going";
                }

                // 去除于2024.07.03
                //if (epro.PM_MA_ProjectApproval.HasValue && resourcePlans.Count()>1)
                //{
                //    if (eproject.ProjectControl_JobStatus == null || eproject.ProjectControl_JobStatus == "" || eproject.ProjectControl_JobStatus == "Study" || eproject.ProjectControl_JobStatus == "Not Start")
                //    {
                //        epro.ProjectControl_JobStatus = "On Going";
                //    }
                //}

                //去掉 同时满足Today小于Design Civil_Revised End Date和Design Mech.E&I_Revised End Date的最大值时,
                //var civilRevisedEnd = BLL.PMService.GetCivil(eproject.EProjectId);
                //var mechEIRevisedEnd = BLL.PMService.GetMechEI(eproject.EProjectId);
                // 后加条件 //当PM中Milestone(Actual)的Project Approval不为空并且IFC ALL的ReceiveHC为空,状态为Detailed Design
                var all = from x in Funs.DB.Editor_TDC where x.EProjectId== epro.EProjectId && x.Type == "D01_IFC" && x.Disc == "00_ALL" && x.ReceiveHC.HasValue select x;
                if (epro.ProjectControl_JobType != "Other" && epro.PM_MA_ProjectApproval.HasValue && all.Count() == 0)
                {
                    if (eproject.ProjectControl_JobStatus == null || eproject.ProjectControl_JobStatus == "" || eproject.ProjectControl_JobStatus == "On Going" || eproject.ProjectControl_JobStatus == "Study" || eproject.ProjectControl_JobStatus == "Not Start")
                    {
                        epro.ProjectControl_JobStatus = "Detailed Design";
                    }

                }

                // 后加:当PM中Milestone(Actual)的Project Approval不为空并且IFC ALL的ReceiveHC不为空,状态为In Procurement
                var con_all = from x in Funs.DB.Editor_TDC where x.EProjectId == epro.EProjectId && x.Type == "D01_IFC" && x.Disc == "00_ALL" && x.ReceiveHC.HasValue select x;
                if (epro.ProjectControl_JobType != "Other" &&  epro.PM_MA_ProjectApproval.HasValue && con_all.Count() > 0)
                {
                    if (eproject.ProjectControl_JobStatus == null || eproject.ProjectControl_JobStatus == "" || eproject.ProjectControl_JobStatus == "Detailed Design" || eproject.ProjectControl_JobStatus == "On Going" || eproject.ProjectControl_JobStatus == "Study" || eproject.ProjectControl_JobStatus == "Not Start")
                    {
                        epro.ProjectControl_JobStatus = "In Procurement";
                    }
                }

                if (epro.CM_MA_MC.HasValue)
                {
                    if (eproject.ProjectControl_JobStatus == null || eproject.ProjectControl_JobStatus == ""
                      || eproject.ProjectControl_JobStatus == "In Procurement" || eproject.ProjectControl_JobStatus == "In Construction"
                      || eproject.ProjectControl_JobStatus == "Detailed Design" || eproject.ProjectControl_JobStatus == "On Going"
                      || eproject.ProjectControl_JobStatus == "Study" || eproject.ProjectControl_JobStatus == "Not Start")
                    {
                        epro.ProjectControl_JobStatus = "MC";
                    }
                }

                if ((epro.Permit_PS_SafetyFinalAcc.HasValue && epro.Permit_PA_SafetyFinalACC.HasValue
                       && epro.Permit_PS_FFFinalAcc.HasValue && epro.Permit_PA_FFFinalACC.HasValue
                       && epro.Permit_PS_EnvFinalAcc.HasValue && epro.Permit_PA_EnvFinalACC.HasValue)
                       || (epro.Permit_PS_SafetyFinalAcc.HasValue && epro.Permit_PA_SafetyFinalACC.HasValue
                       && !epro.Permit_PS_FFFinalAcc.HasValue && !epro.Permit_PA_FFFinalACC.HasValue
                       && !epro.Permit_PS_EnvFinalAcc.HasValue && !epro.Permit_PA_EnvFinalACC.HasValue)
                       || (epro.Permit_PS_SafetyFinalAcc.HasValue && epro.Permit_PA_SafetyFinalACC.HasValue
                       && epro.Permit_PS_FFFinalAcc.HasValue && epro.Permit_PA_FFFinalACC.HasValue
                       && !epro.Permit_PS_EnvFinalAcc.HasValue && !epro.Permit_PA_EnvFinalACC.HasValue)
                       || (epro.Permit_PS_SafetyFinalAcc.HasValue && epro.Permit_PA_SafetyFinalACC.HasValue
                       && !epro.Permit_PS_FFFinalAcc.HasValue && !epro.Permit_PA_FFFinalACC.HasValue
                       && epro.Permit_PS_EnvFinalAcc.HasValue && epro.Permit_PA_EnvFinalACC.HasValue)
                       || (!epro.Permit_PS_SafetyFinalAcc.HasValue && !epro.Permit_PA_SafetyFinalACC.HasValue
                       && epro.Permit_PS_FFFinalAcc.HasValue && epro.Permit_PA_FFFinalACC.HasValue
                       && epro.Permit_PS_EnvFinalAcc.HasValue && epro.Permit_PA_EnvFinalACC.HasValue)
                       || (!epro.Permit_PS_SafetyFinalAcc.HasValue && !epro.Permit_PA_SafetyFinalACC.HasValue
                       && !epro.Permit_PS_FFFinalAcc.HasValue && !epro.Permit_PA_FFFinalACC.HasValue
                       && epro.Permit_PS_EnvFinalAcc.HasValue && epro.Permit_PA_EnvFinalACC.HasValue)
                       || (!epro.Permit_PS_SafetyFinalAcc.HasValue && !epro.Permit_PA_SafetyFinalACC.HasValue
                       && !epro.Permit_PS_FFFinalAcc.HasValue && !epro.Permit_PA_FFFinalACC.HasValue
                       && !epro.Permit_PS_EnvFinalAcc.HasValue && !epro.Permit_PA_EnvFinalACC.HasValue))
                {
                    #region MOC项目
                    //MOC项目:最晚的①竣工图接收日期②商务关闭日期③主控文档更新日期④剩余材料登记
                    if (eproject.ProjectControl_JobType == "MOC")
                    {
                        List<DateTime> closeDateLists = new List<DateTime>();
                        var built = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D02_AS-BUILT");//竣工图接收日期
                        if (built != null)
                        {
                            if (built.ReceiveHC.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(built.ReceiveHC));
                            }
                        }
                        var md = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D03_MD");//主控文档更新日期
                        if (md != null)
                        {
                            if (md.ReceivePDF.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(md.ReceivePDF));
                            }
                        }
                        if (eproject.ProjectControl_BC_CloseDate.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.ProjectControl_BC_CloseDate));//商务关闭日期
                        }
                        if (eproject.CM_Date_of_Registration.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.CM_Date_of_Registration));//剩余材料登记
                        }
                        closeDateLists.Sort();

                        if (closeDateLists.Count == 4)
                        {
                            eproject.ProjectControl_ClosedDate = closeDateLists[3];
                            eproject.ProjectControl_JobStatus = "Closed";
                        }
                    }
                    #endregion
                    #region 类型为项目和小型投资
                    //类型为项目和小型投资:最晚的①竣工图接收日期②商务关闭日期③主控文档更新日期④C类尾项消项日期⑤机械竣工签署日期⑥剩余材料登记⑦计划具备开车条件日期⑧大于100万需要FC签署日期
                    else if (eproject.ProjectControl_JobType == "Small Invest" || eproject.ProjectControl_JobType == "Projects")
                    {
                        List<DateTime> closeDateLists = new List<DateTime>();
                        var built = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D02_AS-BUILT");
                        if (built != null)
                        {
                            if (built.ReceiveHC.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(built.ReceiveHC));//竣工图接收日期
                            }
                        }
                        if (eproject.ProjectControl_BC_CloseDate.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.ProjectControl_BC_CloseDate));//商务关闭日期
                        }
                        var md = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D03_MD");
                        if (md != null)
                        {
                            if (md.ReceivePDF.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(md.ReceivePDF));//主控文档更新日期
                            }
                        }
                        if (eproject.CM_Punch_CKilledDate.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.CM_Punch_CKilledDate));//C类尾项消项日期
                        }
                        var mc = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D11_MC");
                        if (mc != null)
                        {
                            if (mc.ReceiveHC.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(mc.ReceiveHC));//机械竣工签署日期
                            }
                        }
                        if (eproject.CM_Date_of_Registration.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.CM_Date_of_Registration));//剩余材料登记
                        }
                        var rfsu = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D12_RFSU");
                        if (rfsu != null)
                        {
                            if (rfsu.ReceiveHC.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(mc.ReceiveHC));//计划具备开车条件日期
                            }
                        }
                        // 大于1000000需要FC签署日期
                        if (eproject.ProjectControl_OrginalBudget != null && eproject.ProjectControl_OrginalBudget > 1000000)
                        {
                            var fc = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D30_FC");
                            if (fc != null)
                            {
                                if (fc.ReceiveHC.HasValue)
                                {
                                    closeDateLists.Add(Convert.ToDateTime(fc.ReceiveHC));//FC签署日期
                                }
                            }
                            closeDateLists.Sort();
                            if (closeDateLists.Count == 8)
                            {
                                eproject.ProjectControl_ClosedDate = closeDateLists[7];
                                eproject.ProjectControl_JobStatus = "Closed";
                            }
                        }
                        else
                        {
                            closeDateLists.Sort();
                            if (closeDateLists.Count == 7)
                            {
                                eproject.ProjectControl_ClosedDate = closeDateLists[6];
                                eproject.ProjectControl_JobStatus = "Closed";
                            }
                        }
                    }
                    #endregion
                    #region 不用了
                    //大于100万的项目:最晚的①竣工图接收日期②商务关闭日期③主控文档更新日期④C类尾项消项日期⑤机械竣工签署日期⑥FC签署日期⑦剩余材料登记⑧计划具备开车条件日期
                    //else if (eproject.ProjectControl_JobType == "Projects")
                    //{
                    //    List<DateTime> closeDateLists = new List<DateTime>();
                    //    var built = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D02_AS-BUILT");
                    //    if (built != null)
                    //    {
                    //        if (built.ReceiveHC.HasValue)
                    //        {
                    //            closeDateLists.Add(Convert.ToDateTime(built.ReceiveHC));//竣工图接收日期
                    //        }
                    //    }
                    //    if (eproject.ProjectControl_BC_CloseDate.HasValue)
                    //    {
                    //        closeDateLists.Add(Convert.ToDateTime(eproject.ProjectControl_BC_CloseDate));//商务关闭日期
                    //    }
                    //    var md = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D03_MD");
                    //    if (md != null)
                    //    {
                    //        if (md.ReceivePDF.HasValue)
                    //        {
                    //            closeDateLists.Add(Convert.ToDateTime(md.ReceivePDF));//主控文档更新日期
                    //        }
                    //    }
                    //    if (eproject.CM_Punch_CKilledDate.HasValue)
                    //    {
                    //        closeDateLists.Add(Convert.ToDateTime(eproject.CM_Punch_CKilledDate));//C类尾项消项日期
                    //    }
                    //    var mc = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D11_MC");
                    //    if (mc != null)
                    //    {
                    //        if (mc.ReceiveHC.HasValue)
                    //        {
                    //            closeDateLists.Add(Convert.ToDateTime(mc.ReceiveHC));//机械竣工签署日期
                    //        }
                    //    }
                    //    var fc = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D30_FC");
                    //    if (fc != null)
                    //    {
                    //        if (fc.ReceiveHC.HasValue)
                    //        {
                    //            closeDateLists.Add(Convert.ToDateTime(fc.ReceiveHC));//FC签署日期
                    //        }
                    //    }
                    //    if (eproject.CM_Date_of_Registration.HasValue)
                    //    {
                    //        closeDateLists.Add(Convert.ToDateTime(eproject.CM_Date_of_Registration));//剩余材料登记
                    //    }
                    //    var rfsu = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D12_RFSU");
                    //    if (rfsu != null)
                    //    {
                    //        if (rfsu.ReceiveHC.HasValue)
                    //        {
                    //            closeDateLists.Add(Convert.ToDateTime(mc.ReceiveHC));//计划具备开车条件日期
                    //        }
                    //    }
                    //    closeDateLists.Sort();
                    //    if (closeDateLists.Count == 8)
                    //    {
                    //        eproject.ProjectControl_ClosedDate = closeDateLists[7];
                    //        eproject.ProjectControl_JobStatus = "Closed";
                    //    }
                    //}
                    #endregion
                    #region 其他类项目
                    //其他类项目:最晚的①竣工图接收日期②商务关闭日期③主控文档更新日期
                    else if (eproject.ProjectControl_JobType == "Other")
                    {
                        List<DateTime> closeDateLists = new List<DateTime>();
                        var built = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D02_AS-BUILT");
                        if (built != null)
                        {
                            if (built.ReceiveHC.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(built.ReceiveHC));//竣工图接收日期
                            }
                        }
                        if (eproject.ProjectControl_BC_CloseDate.HasValue)
                        {
                            closeDateLists.Add(Convert.ToDateTime(eproject.ProjectControl_BC_CloseDate));//商务关闭日期
                        }
                        var md = BLL.TDCService.GetTDCByEprojectId(eproject.EProjectId, "D03_MD");
                        if (md != null)
                        {
                            if (md.ReceivePDF.HasValue)
                            {
                                closeDateLists.Add(Convert.ToDateTime(md.ReceivePDF));//主控文档更新日期
                            }
                        }
                        closeDateLists.Sort();
                        if (closeDateLists.Count == 3)
                        {
                            eproject.ProjectControl_ClosedDate = closeDateLists[2];
                            eproject.ProjectControl_JobStatus = "Closed";
                        }
                    }
                    #endregion
                }

                if (epro.ProjectControl_JobStatus != eproject.ProjectControl_JobStatus)
                {
                    operationLog += "Job Status 由" + epro.ProjectControl_JobStatus + "修改为" + eproject.ProjectControl_JobStatus + ",";
                }
                operationLog += "操作成功!";
                BLL.Sys_LogService.AddLog(this.CurrUser.UserId, operationLog);
                epro.EProjectId = eproject.EProjectId;
                BLL.EProjectService.UpdateProjectJobStatus(epro);
            }
            #endregion

            #region 邮件发送代码
            //--------邮件发送代码开始-----
            Model.Editor_EProject ep = BLL.EProjectService.GeteProjectById(eprojectId);
            if (ep != null)
            {
                //压力容器报备提醒
                if (this.cbPM_PressureVessel.Checked && ep.ProjectControl_JobStatus.Equals("In Construction"))
                {
                    string title = epro.ProjectControl_JobNo + "-压力管道报备提醒";
                    var ema = from x in Funs.DB.Email_SendLog where x.EmailTile.Contains(title) && x.EmailStatus.Contains("发送成功") select x;
                    if (ema.Count() == 0)
                    {
                        NameValueCollection nameValue = new NameValueCollection();
                        nameValue.Add("projectName", eproject.ProjectControl_JobTitle.ToString().Trim());
                        nameValue.Add("projectNo", eproject.ProjectControl_JobNo.ToString().Trim());
                        EmailSendMessage(eproject, BLL.Const.WPRString, nameValue, BLL.Const.CustomString, BLL.Const.NoprojectString);
                    }
                }
                //压力容器注册提醒
                if (this.cbPM_PressureVessel.Checked && ep.ProjectControl_JobStatus.Equals("MC"))
                {
                    string title = epro.ProjectControl_JobNo + "-压力容器注册提醒";
                    var ema = from x in Funs.DB.Email_SendLog where x.EmailTile.Contains(title) && x.EmailStatus.Contains("发送成功") select x;
                    if (ema.Count() == 0)
                    {
                        NameValueCollection nameValue = new NameValueCollection();
                        string Notile = ep.ProjectControl_JobTitle.ToString();
                        nameValue.Add("projectName", eproject.ProjectControl_JobTitle.ToString().Trim());
                        nameValue.Add("projectNo", eproject.ProjectControl_JobNo.ToString().Trim());
                        EmailSendMessage(eproject, BLL.Const.PVRRString, nameValue, BLL.Const.CustomString, BLL.Const.NoprojectString);
                        if (ep.CM_MA_MC.HasValue) //Pressure Vessel的PLAN时间自动 = MC + 3个月
                        {
                            ep.EProjectId = eprojectId;
                            ep.PM_PP_PressureVessel = ep.CM_MA_MC.Value.AddMonths(3);
                            BLL.EProjectService.UpdateProjectJobTime(ep);
                        }
                    }
                }

                //压力管道报备提醒
                if (this.cbPM_PressurePiping.Checked && ep.ProjectControl_JobStatus.Equals("In Construction"))
                {
                    string title = epro.ProjectControl_JobNo + "-压力管道报备提醒";
                    var ema = from x in Funs.DB.Email_SendLog where x.EmailTile.Contains(title) && x.EmailStatus.Contains("发送成功") select x;
                    if (ema.Count() == 0)
                    {
                        NameValueCollection nameValue = new NameValueCollection();
                        nameValue.Add("projectName", eproject.ProjectControl_JobTitle.ToString().Trim());
                        nameValue.Add("projectNo", eproject.ProjectControl_JobNo.ToString().Trim());
                        EmailSendMessage(eproject, BLL.Const.WPPString, nameValue, BLL.Const.CustomString, BLL.Const.NoprojectString);
                    }
                }

                if (this.cbPM_SQIB.Checked)//QIB监检提醒
                {
                    string title = epro.ProjectControl_JobNo + "-QIB监检提醒";
                    var ema = from x in Funs.DB.Email_SendLog where x.EmailTile.Contains(title) && x.EmailStatus.Contains("发送成功") select x;
                    if (ema.Count() == 0)
                    {
                        NameValueCollection nameValue = new NameValueCollection();
                        nameValue.Add("projectName", eproject.ProjectControl_JobTitle.ToString().Trim());
                        nameValue.Add("projectNo", eproject.ProjectControl_JobNo.ToString().Trim());
                        EmailSendMessage(eproject, BLL.Const.QIBIRString, nameValue, BLL.Const.CustomString, BLL.Const.NoprojectString);
                    }
                }
            }
            //--------邮件发送代码结束-----
            #endregion

            ShowNotify("Save Successfully!", MessageBoxIcon.Success);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
        }
        #endregion

        #region 选择日期勾选复选框
        protected void txtPM_PressureVessel_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtPM_PressureVessel.Text))
            {
                this.cbPM_PressureVessel.Checked = true;
            }
            else
            {
                this.cbPM_PressureVessel.Checked = false;
            }
        }

        protected void txtPM_PressurePiping_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtPM_PressurePiping.Text))
            {
                this.cbPM_PressurePiping.Checked = true;
            }
            else
            {
                this.cbPM_PressurePiping.Checked = false;
            }
        }

        protected void txtPM_SQIB_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtPM_SQIB.Text))
            {
                this.cbPM_SQIB.Checked = true;
            }
            else
            {
                this.cbPM_SQIB.Checked = false;
            }
        }
        #endregion

        #region 勾选复选框加载默认日期

        protected void PressureVessel_OnCheckedChanged(object sender, EventArgs e)
        {
            string eprojectId = Request.Params["EProjectId"];
            if (!string.IsNullOrEmpty(eprojectId))
            {
                Model.Editor_EProject ep = BLL.EProjectService.GeteProjectById(eprojectId);
                //this.txtPM_PressurePiping.Text = ep.PM_PP_PressurePiping.HasValue ? Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}") : "";
                string sQIB = string.Empty;
                if (cbPM_PressureVessel.Checked)
                {
                    if (!ep.PM_PP_PressureVessel.HasValue)
                    {
                        if (ep.CM_MA_MC.HasValue)
                        {
                            txtPM_PressureVessel.Text = (ep.CM_MA_MC.Value.AddMonths(3)).ToString("{yyyy-MM-dd}");
                        }
                        else
                        {
                            txtPM_PressureVessel.Text = "";
                        }
                    }
                    else
                    {
                        txtPM_PressureVessel.Text = Convert.ToDateTime(ep.PM_PP_PressureVessel).ToString("{yyyy-MM-dd}");
                    }
                }
                else
                {
                    if (ep.PM_PP_PressureVessel.HasValue)
                    {
                        txtPM_PressureVessel.Text = Convert.ToDateTime(ep.PM_PP_PressureVessel).ToString("{yyyy-MM-dd}");
                    }
                    else
                    {
                        txtPM_PressureVessel.Text = "";
                    }
                }
            }
        }

        protected void PressurePiping_OnCheckedChanged(object sender, EventArgs e)
        {
            string eprojectId = Request.Params["EProjectId"];
            if (!string.IsNullOrEmpty(eprojectId))
            {
                Model.Editor_EProject ep = BLL.EProjectService.GeteProjectById(eprojectId);
                //this.txtPM_PressurePiping.Text = ep.PM_PP_PressurePiping.HasValue ? Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}") : "";
                string pp = string.Empty;
                if (cbPM_PressurePiping.Checked)
                {
                    DateTime curDate = DateTime.Now.Date;
                    int curYear = curDate.Year;
                    if (!ep.PM_PP_PressurePiping.HasValue)
                    {
                        if (curDate <= Convert.ToDateTime(curDate.Year.ToString() + "-03-30"))
                        {
                            pp = curDate.Year.ToString() + "-03-30";
                        }
                        else
                        {
                            pp = (curDate.Year + 1).ToString() + "-03-30";
                        }
                        txtPM_PressurePiping.Text = pp;
                    }
                    else
                    {
                        txtPM_PressurePiping.Text = Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}");
                    }
                }
                else
                {
                    if (ep.PM_PP_PressurePiping.HasValue)
                    {
                        txtPM_PressurePiping.Text = Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}");
                    }
                    else
                    {
                        txtPM_PressurePiping.Text = "";
                    }
                }
            }
        }
        protected void SQIB_OnCheckedChanged(object sender, EventArgs e)
        {
            string eprojectId = Request.Params["EProjectId"];
            if (!string.IsNullOrEmpty(eprojectId))
            {
                Model.Editor_EProject ep = BLL.EProjectService.GeteProjectById(eprojectId);
                //this.txtPM_PressurePiping.Text = ep.PM_PP_PressurePiping.HasValue ? Convert.ToDateTime(ep.PM_PP_PressurePiping).ToString("{yyyy-MM-dd}") : "";
                string sQIB = string.Empty;
                if (cbPM_SQIB.Checked)
                {
                    if (!ep.PM_PP_SQIB.HasValue)
                    {
                        if (ep.ProjectControl_MS_MC.HasValue)
                        {
                            txtPM_SQIB.Text = (ep.ProjectControl_MS_MC.Value.AddMonths(2)).ToString("{yyyy-MM-dd}");
                        }
                        else
                        {
                            txtPM_SQIB.Text = "";
                        }
                    }
                    else
                    {
                        txtPM_SQIB.Text = Convert.ToDateTime(ep.PM_PP_SQIB).ToString("{yyyy-MM-dd}");
                    }
                }
                else
                {
                    if (ep.PM_PP_SQIB.HasValue)
                    {
                        txtPM_SQIB.Text = Convert.ToDateTime(ep.PM_PP_SQIB).ToString("{yyyy-MM-dd}");
                    }
                    else
                    {
                        txtPM_SQIB.Text = "";
                    }
                }
            }
        }
        #endregion

        #region 计算进度
        /// <summary>
        /// 计算进度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCalculated_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPM_LLEP_RevisedStart.Text.Trim()) && !string.IsNullOrEmpty(txtPM_LLEP_RevisedEnd.Text.Trim()))
            {
                decimal llep1 = 0;
                decimal llep2 = 0;
                llep1 = (DateTime.Now - Convert.ToDateTime(txtPM_LLEP_RevisedStart.Text.Trim())).Days;
                llep2 = (Convert.ToDateTime(txtPM_LLEP_RevisedEnd.Text.Trim()) - Convert.ToDateTime(txtPM_LLEP_RevisedStart.Text.Trim())).Days;
                if (llep2 != 0)
                {
                    decimal progress = llep1 / llep2 * 100;
                    if (progress > 100)
                    {
                        txtPM_LLEP_ActualProgress.Text = "100";
                    }
                    else if (progress < 0)
                    {
                        txtPM_LLEP_ActualProgress.Text = "0";
                    }
                    else
                    {
                        txtPM_LLEP_ActualProgress.Text = progress.ToString();
                    }
                }
            }
        }
        #endregion

        #region 权限设置
        /// <summary>
        /// 菜单按钮权限
        /// </summary>
        private void GetButtonPower()
        {
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.PMEditorMenuId);
            if (buttonList.Count() > 0)
            {
                if (buttonList.Contains(BLL.Const.BtnSave))
                {
                    this.btnSave.Hidden = false;
                    this.btnCalculated.Hidden = false;
                }
            }
        }
        #endregion

        #region 格式化字符串
        /// <summary>
        /// 获取TDC中IFC专业
        /// </summary>
        /// <param name="dis"></param>
        /// <returns></returns>
        protected string ConvertActualIFC(object dis)
        {
            if (dis != null)
            {
                string eprojectId = Request.Params["EProjectId"];
                var tdc = (from x in Funs.DB.Editor_TDC where x.EProjectId == eprojectId && x.Type == "D01_IFC" && x.Disc.Contains(dis.ToString()) select x).FirstOrDefault();
                if (tdc != null)
                {
                    return string.Format("{0:yyyy-MM-dd}", tdc.ReceiveHC);
                }
            }
            return null;
        }
        #endregion
    }
}