using BLL;
using Microsoft.Reporting.WebForms;
using System;
using System.Collections.Generic;
using System.Linq;

namespace FineUIPro.Web.Report
{
    public partial class ReportPrint :PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string report = Request.QueryString["report"];
                string eProjectId = Request.QueryString["eProjectId"];
                if (report == "2")
                {
                    var eProject = BLL.EProjectService.GeteProjectById(eProjectId);
                    List<ReportParameter> paras = new List<ReportParameter>();

                    if (eProject != null)
                    {
                        //第1行
                        paras.Add(new ReportParameter("ReportDate", DateTime.Now.ToString("yyyy-MM-dd")));

                        //第2行
                        paras.Add(new ReportParameter("ReportCompany", "  BASF - YPC Company Limited"));
                        paras.Add(new ReportParameter("ReportCurrUser", this.CurrUser.UserName));

                        //第3行                       
                        paras.Add(new ReportParameter("ProjectControl_JobNo", eProject.ProjectControl_JobNo));

                        //第4行
                        paras.Add(new ReportParameter("ProjectControl_JobTitle", eProject.ProjectControl_JobTitle));
                        paras.Add(new ReportParameter("ProjectControl_BUCode", eProject.ProjectControl_BUCode));

                        //第5行
                        //paras.Add(new ReportParameter("ProjectControl_OrginalBudget", decimal.Round(decimal.Parse(eProject.ProjectControl_OrginalBudget.ToString()), 0).ToString()));
                        paras.Add(new ReportParameter("ProjectControl_OrginalBudget", String.Format("{0:N2}", eProject.ProjectControl_OrginalBudget.HasValue ? eProject.ProjectControl_OrginalBudget.Value : 0)));

                        //第6行

                        //第7行

                        string scope = "";
                        decimal? m = eProject.PM_SC_ApprovedQty;//批准的变更数
                        decimal? n = eProject.PM_SC_PendingQty;//待定的变更数
                        if (n > 0)
                        {
                            scope = "C";
                        }
                        else if (n == 0 && m > 0)
                        {
                            scope = "B";
                        }
                        else if (m == 0 && n == 0)
                        {
                            scope = "A";
                        }
                        else
                        {
                            scope = "-";
                        }
                        paras.Add(new ReportParameter("scope", scope.ToString()));

                        string cost = "";
                        //获取项目的最新成本
                        //var costManage = BLL.CostReportService.GetMaxMonthCostReportByEprojectId(eProjectId);
                        //if (costManage != null)
                        //{
                        decimal? orginalBudget = eProject.ProjectControl_OrginalBudget.HasValue ? eProject.ProjectControl_OrginalBudget : 0;//原始的预算
                        decimal? changedBudget = eProject.ProjectControl_ChangedBudget.HasValue ? eProject.ProjectControl_ChangedBudget : 0;//变更的预算
                        decimal? actualCost = eProject.ProjectControl_Actual.HasValue ? eProject.ProjectControl_Actual : 0;//实际的成本
                        decimal? committedPRPO = eProject.ProjectControl_CommittedPRPO.HasValue ? eProject.ProjectControl_CommittedPRPO : 0;//承诺的PR或PO成本
                        decimal? committedSSRs = eProject.ProjectControl_CommittedSSRs.HasValue ? eProject.ProjectControl_CommittedSSRs : 0; //承诺的SSR成本
                        decimal? costToComplete = eProject.PM_General_CostToComplete.HasValue ? eProject.PM_General_CostToComplete : 0; //预估的完工任需成本
                                                                                                                                        //预估的最终成本=实际的成本+承诺的PR或PO成本+承诺的SSR成本+预估的完工任需成本
                        decimal? rmb = actualCost + committedPRPO + committedSSRs + costToComplete;
                        //成本差异=(预估的最终成本-原始的预算-变更的预算)/(原始的预算+变更的预算)*100%
                        if (orginalBudget + changedBudget > 0)
                        {
                            double result = 0;
                            result = Convert.ToDouble((rmb - orginalBudget - changedBudget) / (orginalBudget + changedBudget)) /** 0.1*/;
                            if (result > 0.1)
                            {
                                cost = "C";
                            }
                            else if (result <= 0.1 && result > 0.05)
                            {
                                cost = "B";
                            }
                            else if (result <= 0.05)
                            {
                                cost = "A";
                            }
                            else
                            {
                                cost = "-";
                            }
                        }
                        //}
                        paras.Add(new ReportParameter("cost", cost.ToString()));

                        DateTime? ms = eProject.PM_MA_ProjectApproval.HasValue ? eProject.PM_MA_ProjectApproval : null; //项目批准的实际时间
                        DateTime? x = eProject.ProjectControl_CM_SchEnd.HasValue ? eProject.ProjectControl_CM_SchEnd : null;//计划的机械电仪施工结束时间
                        DateTime? y = eProject.CM_CM_RevisedEnd.HasValue ? eProject.CM_CM_RevisedEnd : null;//修正的机械电仪施工结束时间
                        int a = 0;
                        int b = 0;
                        int c = 0;
                        string schedule = "";
                        if (y.HasValue && x.HasValue)
                        {
                            a = (y - x).Value.Days;
                        }
                        if (x.HasValue && ms.HasValue)
                        {
                            b = (x - ms).Value.Days;
                        }
                        if (b != 0)
                        {
                            c = a / b;
                            if (c > 0.1)
                            {
                                schedule = "C";
                            }
                            else if (0.1 >= c && c > 0.05)
                            {
                                schedule = "B";
                            }
                            else if (c <= 0.05)
                            {
                                schedule = "A";
                            }
                            else
                            {
                                schedule = "-";
                            }
                        }
                        paras.Add(new ReportParameter("schedule", schedule.ToString()));

                        paras.Add(new ReportParameter("PM_SC_ApprovedQty", eProject.PM_SC_ApprovedQty.HasValue ? eProject.PM_SC_ApprovedQty.Value.ToString("N0") : "0"));
                        paras.Add(new ReportParameter("PM_SC_ApprovedCost", String.Format("{0:N2}", eProject.PM_SC_ApprovedCost.HasValue ? eProject.PM_SC_ApprovedCost.Value : 0)));

                        paras.Add(new ReportParameter("PM_SC_PendingQty", eProject.PM_SC_PendingQty.HasValue ? eProject.PM_SC_PendingQty.Value.ToString("N0") : "0"));
                        paras.Add(new ReportParameter("PM_SC_PendingCost", String.Format("{0:N2}", eProject.PM_SC_PendingCost.HasValue ? eProject.PM_SC_PendingCost.Value : 0)));

                        //新增加的逻辑数据
                        if (!eProject.Detail_Eng_Civil_SchStart.HasValue && !eProject.Detail_Eng_Civil_SchEnd.HasValue && !eProject.Detail_Eng_MechEI_SchStart.HasValue && !eProject.Detail_Eng_MechEI_SchEnd.HasValue)
                        {
                            var plan = BLL.ResourcePlanService.GetResourcePlanByEProjectId(eProjectId).FirstOrDefault();
                            if (plan != null)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CC_SchStart", plan.Detail_Eng_Civil_Sch_Start.HasValue ? string.Format("{0:yyyy-MM-dd}", plan.Detail_Eng_Civil_Sch_Start) : ""));
                                paras.Add(new ReportParameter("ProjectControl_CC_SchEnd", plan.Detail_Eng_Civil_Sch_End.HasValue ? string.Format("{0:yyyy-MM-dd}", plan.Detail_Eng_Civil_Sch_End) : ""));
                                paras.Add(new ReportParameter("ProjectControl_CC_SchEnd", plan.Detail_Eng_Civil_Sch_End.HasValue ? string.Format("{0:yyyy-MM-dd}", plan.Detail_Eng_Civil_Sch_End) : ""));

                                decimal schProgress = 0;
                                decimal civilSchStart = 0;
                                decimal civilSchEnd = 0;
                                if (plan.Detail_Eng_Civil_Sch_Start.HasValue)
                                {
                                    civilSchStart = (DateTime.Now - plan.Detail_Eng_Civil_Sch_Start).Value.Days;
                                }
                                if (plan.Detail_Eng_Civil_Sch_Start.HasValue && plan.Detail_Eng_Civil_Sch_End.HasValue)
                                {
                                    civilSchEnd = (plan.Detail_Eng_Civil_Sch_End - plan.Detail_Eng_Civil_Sch_Start).Value.Days;
                                }
                                if (civilSchEnd > 0)
                                {
                                    schProgress = civilSchStart / civilSchEnd * 100;

                                    if (schProgress > 100)
                                    {
                                        paras.Add(new ReportParameter("ProjectControl_CC_Progress", "100.00"));
                                    }
                                    else if (schProgress < 0)
                                    {
                                        paras.Add(new ReportParameter("ProjectControl_CC_Progress", "0.00"));
                                    }
                                    else
                                    {
                                        paras.Add(new ReportParameter("ProjectControl_CC_Progress", schProgress.ToString("0.00")));
                                    }
                                }
                                paras.Add(new ReportParameter("ProjectControl_CM_SchStart", plan.Detail_Eng_Mech_EI_Sch_Start.HasValue ? string.Format("{0:yyyy-MM-dd}", plan.Detail_Eng_Mech_EI_Sch_Start) : ""));
                                paras.Add(new ReportParameter("ProjectControl_CM_SchEnd", plan.Detail_Eng_Mech_EI_Sch_End.HasValue ? string.Format("{0:yyyy-MM-dd}", plan.Detail_Eng_Mech_EI_Sch_End) : ""));

                                decimal schMechEIProgress = 0;
                                decimal mechEISchStart = 0;
                                decimal mechEISchEnd = 0;
                                if (plan.Detail_Eng_Mech_EI_Sch_Start.HasValue)
                                {
                                    mechEISchStart = (DateTime.Now - plan.Detail_Eng_Mech_EI_Sch_Start).Value.Days;
                                }
                                if (plan.Detail_Eng_Mech_EI_Sch_Start.HasValue && plan.Detail_Eng_Mech_EI_Sch_End.HasValue)
                                {
                                    mechEISchEnd = (plan.Detail_Eng_Mech_EI_Sch_End - plan.Detail_Eng_Mech_EI_Sch_Start).Value.Days;
                                }
                                if (mechEISchEnd > 0)
                                {
                                    schMechEIProgress = mechEISchStart / mechEISchEnd * 100;
                                }
                                if (schMechEIProgress > 100)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", "100.00"));
                                }
                                else if (schMechEIProgress < 0)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", "0.00"));
                                }
                                else
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", schMechEIProgress.ToString("#0.00")));
                                }
                            }
                        }
                        else
                        {
                            //老数据有值显示老数据中的值
                            if (eProject.Detail_Eng_Civil_SchStart.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CC_SchStart", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_Civil_SchStart)));
                            }
                            if (eProject.Detail_Eng_Civil_SchEnd.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CC_SchEnd", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_Civil_SchEnd)));
                            }
                            if (eProject.Detail_Eng_Civil_SchProgress.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CC_Progress", eProject.Detail_Eng_Civil_SchProgress.Value.ToString("#0.00")));
                            }
                            else
                            {
                                decimal schEngCivilProgress = 0;
                                decimal schEngCivilStart = 0;
                                decimal schEngCivilEnd = 0;
                                if (eProject.Detail_Eng_Civil_SchStart.HasValue)
                                {
                                    schEngCivilStart = (DateTime.Now - eProject.Detail_Eng_Civil_SchStart).Value.Days;
                                }
                                if (eProject.Detail_Eng_Civil_SchStart.HasValue && eProject.Detail_Eng_Civil_SchEnd.HasValue)
                                {
                                    schEngCivilEnd = (eProject.Detail_Eng_Civil_SchEnd - eProject.Detail_Eng_Civil_SchStart).Value.Days;
                                }
                                if (schEngCivilEnd > 0)
                                {
                                    schEngCivilProgress = schEngCivilStart / schEngCivilEnd * 100;
                                }
                                if (schEngCivilProgress > 100)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CC_Progress", "100.00"));
                                }
                                else if (schEngCivilProgress < 0)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CC_Progress", "0.00"));
                                }
                                else
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CC_Progress", schEngCivilProgress.ToString("#0.00")));
                                }
                            }
                            if (eProject.Detail_Eng_MechEI_SchStart.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CM_SchStart", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_MechEI_SchStart)));
                            }
                            if (eProject.Detail_Eng_MechEI_SchEnd.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CM_SchEnd", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_MechEI_SchEnd)));
                            }
                            if (eProject.Detail_Eng_MechEI_ReviseProgress.HasValue)
                            {
                                paras.Add(new ReportParameter("ProjectControl_CM_Progress", eProject.Detail_Eng_MechEI_ReviseProgress.Value.ToString("#0.00")));
                            }
                            else
                            {
                                decimal schEngMechEIProgress = 0;
                                decimal schEngMechEIStart = 0;
                                decimal schEngMechEIEnd = 0;
                                if (eProject.Detail_Eng_MechEI_SchStart.HasValue)
                                {
                                    schEngMechEIStart = (DateTime.Now - eProject.Detail_Eng_MechEI_SchStart).Value.Days;
                                }
                                if (eProject.Detail_Eng_MechEI_SchStart.HasValue && eProject.Detail_Eng_MechEI_SchEnd.HasValue)
                                {
                                    schEngMechEIEnd = (eProject.Detail_Eng_MechEI_SchEnd - eProject.Detail_Eng_MechEI_SchStart).Value.Days;
                                }
                                if (schEngMechEIEnd > 0)
                                {
                                    schEngMechEIProgress = schEngMechEIStart / schEngMechEIEnd * 100;
                                }
                                if (schEngMechEIProgress > 100)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", "100.00"));
                                }
                                else if (schEngMechEIProgress < 0)
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", "0.00"));
                                }
                                else
                                {
                                    paras.Add(new ReportParameter("ProjectControl_CM_Progress", schEngMechEIProgress.ToString("#0.00")));
                                }
                            }
                        }
                        #region CivilRevised
                        //针对新数据
                        if (!eProject.Detail_Eng_Civil_ReviseStart.HasValue && !eProject.Detail_Eng_Civil_ReviseEnd.HasValue && !eProject.Detail_Eng_MechEI_ReviseStart.HasValue && !eProject.Detail_Eng_MechEI_ReviseEnd.HasValue)
                        {
                            decimal civilRevisedStart = 0;
                            decimal civilRevisedEnd = 0;
                            decimal civilRevisedProgress = 0;
                            List<DateTime> startlists = new List<DateTime>();
                            List<DateTime> endlists = new List<DateTime>();

                            var pmList = BLL.PMService.GetPMByEprojectId(eProjectId);
                            foreach (var item in pmList)
                            {
                                if (item.DisciplinesWBSName == "Civil")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        startlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        endlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Masterplanning")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        startlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        endlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Architectral")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        startlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        endlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "HVAC")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        startlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        endlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                startlists.Sort();
                                endlists.Sort();
                            }
                            if (startlists.Count > 0)
                            {
                                paras.Add(new ReportParameter("civilRevisedStart", string.Format("{0:yyyy-MM-dd}", startlists.FirstOrDefault())));
                            }
                            if (endlists.Count > 0)
                            {
                                paras.Add(new ReportParameter("civilRevisedEnd", string.Format("{0:yyyy-MM-dd}", endlists.LastOrDefault())));
                            }
                            if (startlists.FirstOrDefault() != null)
                            {
                                civilRevisedStart = (DateTime.Now - Convert.ToDateTime(startlists.FirstOrDefault())).Days;
                            }
                            if (startlists.FirstOrDefault() != null && endlists.LastOrDefault() != null)
                            {
                                civilRevisedEnd = (endlists.LastOrDefault() - startlists.FirstOrDefault()).Days;
                            }
                            if (civilRevisedEnd > 0)
                            {
                                civilRevisedProgress = civilRevisedStart / civilRevisedEnd * 100;
                            }
                            if (civilRevisedProgress > 100)
                            {
                                paras.Add(new ReportParameter("civilRevisedProgress", "100.00"));
                            }
                            else if (civilRevisedProgress < 0)
                            {
                                paras.Add(new ReportParameter("civilRevisedProgress", "0.00"));
                            }
                            else
                            {
                                paras.Add(new ReportParameter("civilRevisedProgress", civilRevisedProgress.ToString("#0.00")));
                            }
                        }
                        else//针对老数据
                        {
                            if (eProject.Detail_Eng_Civil_ReviseStart.HasValue)
                            {
                                paras.Add(new ReportParameter("civilRevisedStart", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_Civil_ReviseStart)));
                            }
                            if (eProject.Detail_Eng_Civil_ReviseEnd.HasValue)
                            {
                                paras.Add(new ReportParameter("civilRevisedEnd", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_Civil_ReviseEnd)));
                            }
                            if (eProject.Detail_Eng_Civil_ReviseProgress.HasValue)
                            {
                                paras.Add(new ReportParameter("civilRevisedProgress", eProject.Detail_Eng_Civil_ReviseProgress.Value.ToString("#0.00")));
                            }
                            else
                            {
                                decimal revisedEngCivilProgress = 0;
                                decimal revisedEngCivilStart = 0;
                                decimal revisedEngCivilEnd = 0;
                                if (eProject.Detail_Eng_Civil_ReviseStart.HasValue)
                                {
                                    revisedEngCivilStart = (DateTime.Now - eProject.Detail_Eng_Civil_ReviseStart).Value.Days;
                                }
                                if (eProject.Detail_Eng_Civil_ReviseStart.HasValue && eProject.Detail_Eng_Civil_ReviseEnd.HasValue)
                                {
                                    revisedEngCivilEnd = (eProject.Detail_Eng_Civil_ReviseEnd - eProject.Detail_Eng_Civil_ReviseStart).Value.Days;
                                }
                                if (revisedEngCivilEnd > 0)
                                {
                                    revisedEngCivilProgress = revisedEngCivilStart / revisedEngCivilEnd * 100;
                                }
                                if (revisedEngCivilProgress > 100)
                                {
                                    paras.Add(new ReportParameter("civilRevisedProgress", "100.00"));
                                }
                                else if (revisedEngCivilProgress < 0)
                                {
                                    paras.Add(new ReportParameter("civilRevisedProgress", "0.00"));
                                }
                                else
                                {
                                    paras.Add(new ReportParameter("civilRevisedProgress", revisedEngCivilProgress.ToString("#0.00")));
                                }
                            }
                        }
                        #endregion

                        #region MechEIRevised
                        //针对新数据
                        if (!eProject.Detail_Eng_MechEI_SchStart.HasValue && !eProject.Detail_Eng_MechEI_SchEnd.HasValue && !eProject.Detail_Eng_MechEI_ReviseStart.HasValue && !eProject.Detail_Eng_MechEI_ReviseEnd.HasValue)
                        {
                            decimal mechEIRevisedStart = 0;
                            decimal mechEIRevisedEnd = 0;
                            decimal mechEIRevisedProgress = 0;
                            List<DateTime> mechEIstartlists = new List<DateTime>();
                            List<DateTime> mechEIendlists = new List<DateTime>();

                            var pmLists = BLL.PMService.GetPMByEprojectId(eProjectId);
                            foreach (var item in pmLists)
                            {
                                if (item.DisciplinesWBSName == "Electrical")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Telecommunication")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Instrument")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "PID")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Process")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Plumbing/F.F")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Mech./Equi.")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                else if (item.DisciplinesWBSName == "Piping")
                                {
                                    if (item.RevisedStart.HasValue)
                                    {
                                        mechEIstartlists.Add(Convert.ToDateTime(item.RevisedStart));
                                    }
                                    if (item.RevisedEnd.HasValue)
                                    {
                                        mechEIendlists.Add(Convert.ToDateTime(item.RevisedEnd));
                                    }
                                }
                                mechEIstartlists.Sort();
                                mechEIendlists.Sort();
                            }
                            if (mechEIstartlists.Count > 0)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedStart", string.Format("{0:yyyy-MM-dd}", mechEIstartlists.FirstOrDefault())));
                            }
                            if (mechEIendlists.Count > 0)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedEnd", string.Format("{0:yyyy-MM-dd}", mechEIendlists.LastOrDefault())));
                            }
                            if (mechEIstartlists.FirstOrDefault() != null)
                            {
                                mechEIRevisedStart = (DateTime.Now - Convert.ToDateTime(mechEIstartlists.FirstOrDefault())).Days;
                            }
                            if (mechEIstartlists.FirstOrDefault() != null && mechEIendlists.LastOrDefault() != null)
                            {
                                mechEIRevisedEnd = (mechEIendlists.LastOrDefault() - mechEIstartlists.FirstOrDefault()).Days;
                            }
                            if (mechEIRevisedEnd > 0)
                            {
                                mechEIRevisedProgress = mechEIRevisedStart / mechEIRevisedEnd * 100;
                            }
                            if (mechEIRevisedProgress > 100)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedProgress", "100.00"));
                            }
                            else if (mechEIRevisedProgress < 0)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedProgress", "0.00"));
                            }
                            else
                            {
                                paras.Add(new ReportParameter("mechEIRevisedProgress", mechEIRevisedProgress.ToString("#0.00")));
                            }
                        }
                        else //针对老数据
                        {
                            if (eProject.Detail_Eng_MechEI_ReviseStart.HasValue)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedStart", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_MechEI_ReviseStart)));
                            }
                            if (eProject.Detail_Eng_MechEI_ReviseEnd.HasValue)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedEnd", string.Format("{0:yyyy-MM-dd}", eProject.Detail_Eng_MechEI_ReviseEnd)));
                            }
                            if (eProject.Detail_Eng_MechEI_ReviseProgress.HasValue)
                            {
                                paras.Add(new ReportParameter("mechEIRevisedProgress", eProject.Detail_Eng_MechEI_ReviseProgress.Value.ToString("#0.00")));
                            }
                            else
                            {
                                decimal DE_mechEIRevisedStart = 0;
                                decimal DE_mechEIRevisedEnd = 0;
                                decimal DE_mechEIRevisedProgress = 0;
                                if (eProject.Detail_Eng_MechEI_ReviseStart.HasValue)
                                {
                                    DE_mechEIRevisedStart = (DateTime.Now - eProject.Detail_Eng_MechEI_ReviseStart).Value.Days;
                                }
                                if (eProject.Detail_Eng_MechEI_ReviseStart.HasValue && eProject.Detail_Eng_MechEI_ReviseEnd.HasValue)
                                {
                                    DE_mechEIRevisedEnd = (eProject.Detail_Eng_MechEI_ReviseEnd - eProject.Detail_Eng_MechEI_ReviseStart).Value.Days;
                                }
                                DE_mechEIRevisedProgress = DE_mechEIRevisedStart / DE_mechEIRevisedEnd * 100;
                                if (DE_mechEIRevisedProgress > 100)
                                {
                                    paras.Add(new ReportParameter("mechEIRevisedProgress", "100.00"));
                                }
                                else if (DE_mechEIRevisedProgress < 0)
                                {
                                    paras.Add(new ReportParameter("mechEIRevisedProgress", "0.00"));
                                }
                                else
                                {
                                    paras.Add(new ReportParameter("mechEIRevisedProgress", DE_mechEIRevisedProgress.ToString("#0.00")));
                                }
                            }
                        }
                        #endregion
                        string ProjectControl_LP_SchStart = eProject.ProjectControl_LP_SchStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_LP_SchStart) : "";
                        paras.Add(new ReportParameter("ProjectControl_LP_SchStart", ProjectControl_LP_SchStart));

                        string ProjectControl_LP_SchEnd = eProject.ProjectControl_LP_SchEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_LP_SchEnd) : "";
                        paras.Add(new ReportParameter("ProjectControl_LP_SchEnd", ProjectControl_LP_SchEnd));
                        if (eProject.ProjectControl_LP_Progress > 100)
                        {
                            paras.Add(new ReportParameter("ProjectControl_LP_Progress", "100.00"));
                        }
                        else if (eProject.ProjectControl_LP_Progress < 0)
                        {
                            paras.Add(new ReportParameter("ProjectControl_LP_Progress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("ProjectControl_LP_Progress", eProject.ProjectControl_LP_Progress.ToString()));
                        }

                        paras.Add(new ReportParameter("PM_LLEP_RevisedStart", eProject.PM_LLEP_RevisedStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.PM_LLEP_RevisedStart) : ""));
                        paras.Add(new ReportParameter("PM_LLEP_RevisedEnd", eProject.PM_LLEP_RevisedEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.PM_LLEP_RevisedEnd) : ""));
                        if (eProject.PM_LLEP_ActualProgress > 100)
                        {
                            paras.Add(new ReportParameter("PM_LLEP_ActualProgress", "100.00"));
                        }
                        else if (eProject.PM_LLEP_ActualProgress < 0)
                        {
                            paras.Add(new ReportParameter("PM_LLEP_ActualProgress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("PM_LLEP_ActualProgress", eProject.PM_LLEP_ActualProgress.ToString()));
                        }
                        paras.Add(new ReportParameter("ConstCivilSchStart", eProject.ProjectControl_CC_SchStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_CC_SchStart) : ""));
                        paras.Add(new ReportParameter("ConstCivilSchEnd", eProject.ProjectControl_CC_SchEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_CC_SchEnd) : ""));
                        if (eProject.ProjectControl_CC_Progress > 100)
                        {
                            paras.Add(new ReportParameter("ConstCivilSchProgress", "100.00"));
                        }
                        else if (eProject.ProjectControl_CC_Progress < 0)
                        {
                            paras.Add(new ReportParameter("ConstCivilSchProgress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("ConstCivilSchProgress", eProject.ProjectControl_CC_Progress.ToString()));
                        }
                        paras.Add(new ReportParameter("ConstMechEISchStart", eProject.ProjectControl_CM_SchStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_CM_SchStart) : ""));
                        paras.Add(new ReportParameter("ConstMechEISchEnd", eProject.ProjectControl_CM_SchEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_CM_SchEnd) : ""));
                        if (eProject.ProjectControl_CM_Progress > 100)
                        {
                            paras.Add(new ReportParameter("ConstMechEISchProgress", "100.00"));
                        }
                        else if (eProject.ProjectControl_CM_Progress < 0)
                        {
                            paras.Add(new ReportParameter("ConstMechEISchProgress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("ConstMechEISchProgress", eProject.ProjectControl_CM_Progress.ToString()));
                        }
                        paras.Add(new ReportParameter("CM_CC_RevisedStart", eProject.CM_CC_RevisedStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.CM_CC_RevisedStart) : ""));

                        paras.Add(new ReportParameter("CM_CC_RevisedEnd", eProject.CM_CC_RevisedEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.CM_CC_RevisedEnd) : ""));

                        if (eProject.CM_CC_AcutalProgress > 100)
                        {
                            paras.Add(new ReportParameter("CM_CC_AcutalProgress", "100.00"));
                        }
                        else if (eProject.CM_CC_AcutalProgress < 0)
                        {
                            paras.Add(new ReportParameter("CM_CC_AcutalProgress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("CM_CC_AcutalProgress", eProject.CM_CC_AcutalProgress.ToString()));
                        }
                        paras.Add(new ReportParameter("CM_CM_RevisedStart", eProject.CM_CM_RevisedStart.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.CM_CM_RevisedStart) : ""));
                        paras.Add(new ReportParameter("CM_CM_RevisedEnd", eProject.CM_CM_RevisedEnd.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.CM_CM_RevisedEnd) : ""));

                        if (eProject.CM_CM_AcutalProgress > 100)
                        {
                            paras.Add(new ReportParameter("CM_CM_AcutalProgress", "100.00"));
                        }
                        else if (eProject.CM_CM_AcutalProgress < 0)
                        {
                            paras.Add(new ReportParameter("CM_CM_AcutalProgress", "0.00"));
                        }
                        else
                        {
                            paras.Add(new ReportParameter("CM_CM_AcutalProgress", eProject.CM_CM_AcutalProgress.ToString()));
                        }
                        string ProjectControl_MS_MC = eProject.ProjectControl_MS_MC.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.ProjectControl_MS_MC) : "";
                        paras.Add(new ReportParameter("ProjectControl_MS_MC", ProjectControl_MS_MC));
                        paras.Add(new ReportParameter("CM_MA_MC", eProject.CM_MA_MC.HasValue ? string.Format("{0:yyyy-MM-dd}", eProject.CM_MA_MC) : ""));


                        string variance = "";
                        
                        paras.Add(new ReportParameter("OrginalBudget", String.Format("{0:N2}", orginalBudget)));
                        paras.Add(new ReportParameter("ActualCost", String.Format("{0:N2}", actualCost)));

                        decimal? committed = committedPRPO + committedSSRs;
                        paras.Add(new ReportParameter("committed", String.Format("{0:N2}", committed)));
                        paras.Add(new ReportParameter("CostToComplete", String.Format("{0:N2}", costToComplete)));

                        decimal? estimatedFinalCost = actualCost + committed + costToComplete;
                        paras.Add(new ReportParameter("estimatedFinalCost", String.Format("{0:N2}", estimatedFinalCost)));

                        if (orginalBudget + changedBudget > 0)
                        {
                            decimal? cbchj = (estimatedFinalCost - orginalBudget - changedBudget) / (orginalBudget + changedBudget) * 100;
                            variance = decimal.Round(decimal.Parse(cbchj.ToString()), 2).ToString() + "%";
                           
                        }
                        paras.Add(new ReportParameter("variance", variance));


                        paras.Add(new ReportParameter("PM_Remarks_Engineering", eProject.PM_Remarks_Engineering));
                        paras.Add(new ReportParameter("PM_Remarks_Procurement", eProject.PM_Remarks_Procurement));
                        paras.Add(new ReportParameter("CM_Remarks_Procurement", eProject.CM_Remarks_Procurement));
                        paras.Add(new ReportParameter("CM_Remarks_Construction", eProject.CM_Remarks_Construction));
                        paras.Add(new ReportParameter("CM_Remarks_QualityHSE", eProject.CM_Remarks_QualityHSE));
                        paras.Add(new ReportParameter("ProjectControl_ProjectManager", eProject.ProjectControl_ProjectManager));
                        paras.Add(new ReportParameter("ProjectControl_ConstManager", eProject.ProjectControl_ConstManager));

                        string areasofConcern = "";
                        var areaConcern = BLL.AreaConcernService.GetAreaConcernListByEprojectId(eProjectId);
                        if (areaConcern.Count > 0)
                        {
                            for (int i = 0; i < areaConcern.Count; i++)
                            {
                                if (i < 3)//获取最新的3条数据
                                {
                                    areasofConcern += areaConcern[i].Remark + "|";
                                }
                            }
                            areasofConcern = areasofConcern.Substring(0, areasofConcern.LastIndexOf('|'));
                        }
                        paras.Add(new ReportParameter("AreasofConcern", areasofConcern));

                    }

                    List<Model.Editor_EProject> list = new List<Model.Editor_EProject>();
                    ReportDataSource rds = new ReportDataSource("DataSet1", list);
                    ReportViewer1.LocalReport.ReportPath = "Report/Report1.rdlc";
                    ReportViewer1.LocalReport.DataSources.Add(rds);
                    ReportViewer1.LocalReport.SetParameters(paras);
                }
            }
        }
    }
}