359 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			359 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
using BLL;
 | 
						||
using BLL.Common;
 | 
						||
using Model;
 | 
						||
using System;
 | 
						||
using System.Collections.Generic;
 | 
						||
using System.Data;
 | 
						||
using System.IO;
 | 
						||
using System.Linq;
 | 
						||
 | 
						||
namespace FineUIPro.Web.EditorManage
 | 
						||
{
 | 
						||
    public partial class CostReportIn : PageBase
 | 
						||
    {
 | 
						||
        #region 定义项
 | 
						||
        /// <summary>
 | 
						||
        /// 上传预设的虚拟路径
 | 
						||
        /// </summary>
 | 
						||
        private string initPath = Const.ExcelUrl;
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 错误集合
 | 
						||
        /// </summary>
 | 
						||
        public static string errorInfos = string.Empty;
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 加载
 | 
						||
        /// <summary>
 | 
						||
        /// 加载页面
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void Page_Load(object sender, EventArgs e)
 | 
						||
        {
 | 
						||
            if (!IsPostBack)
 | 
						||
            {
 | 
						||
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 模板下载
 | 
						||
        /// <summary>
 | 
						||
        /// 模板下载
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void btnDownLoad_Click(object sender, EventArgs e)
 | 
						||
        {
 | 
						||
            PageContext.RegisterStartupScript(Confirm.GetShowReference("Are you sure to download the import template?", String.Empty, MessageBoxIcon.Question, PageManager1.GetCustomEventReference(false, "Confirm_OK"), PageManager1.GetCustomEventReference("Confirm_Cancel")));
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 下载导入模板
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void PageManager1_CustomEvent(object sender, CustomEventArgs e)
 | 
						||
        {
 | 
						||
            if (e.EventArgument == "Confirm_OK")
 | 
						||
            {
 | 
						||
                string rootPath = Server.MapPath("~/");
 | 
						||
                string uploadfilepath = rootPath + Const.CostReportTemplateUrl;
 | 
						||
                string filePath = Const.CostReportTemplateUrl;
 | 
						||
                string fileName = Path.GetFileName(filePath);
 | 
						||
                FileInfo info = new FileInfo(uploadfilepath);
 | 
						||
                long fileSize = info.Length;
 | 
						||
                Response.ClearContent();
 | 
						||
                Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
 | 
						||
                Response.ContentType = "excel/plain";
 | 
						||
                Response.ContentEncoding = System.Text.Encoding.UTF8;
 | 
						||
                Response.AddHeader("Content-Length", fileSize.ToString().Trim());
 | 
						||
                Response.TransmitFile(uploadfilepath, 0, fileSize);
 | 
						||
                Response.End();
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 导入
 | 
						||
        /// <summary>
 | 
						||
        /// 导入
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void btnImport_Click(object sender, EventArgs e)
 | 
						||
        {
 | 
						||
            string message = string.Empty;
 | 
						||
            errorInfos = string.Empty;
 | 
						||
            List<Editor_CostReport> costReportLists = new List<Editor_CostReport>();
 | 
						||
            try
 | 
						||
            {
 | 
						||
                if (this.fuAttachUrl.HasFile == false)
 | 
						||
                {
 | 
						||
                    ShowNotify("Please select Excel file!", MessageBoxIcon.Warning);
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                string IsXls = Path.GetExtension(this.fuAttachUrl.FileName).ToString().Trim().ToLower();
 | 
						||
                if (IsXls != ".xls" && IsXls != ".xlsx")
 | 
						||
                {
 | 
						||
                    ShowNotify("Only Excel files can be selected!", MessageBoxIcon.Warning);
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                if (costReportLists != null)
 | 
						||
                {
 | 
						||
                    costReportLists.Clear();
 | 
						||
                }
 | 
						||
                if (!string.IsNullOrEmpty(errorInfos))
 | 
						||
                {
 | 
						||
                    errorInfos = string.Empty;
 | 
						||
                }
 | 
						||
                string rootPath = Server.MapPath("~/");
 | 
						||
                string initFullPath = rootPath + initPath;
 | 
						||
                if (!Directory.Exists(initFullPath))
 | 
						||
                {
 | 
						||
                    Directory.CreateDirectory(initFullPath);
 | 
						||
                }
 | 
						||
                //指定上传文件名称
 | 
						||
                this.hdFileName.Text = BLL.Funs.GetNewFileName() + IsXls;
 | 
						||
                //上传文件路径
 | 
						||
                string filePath = initFullPath + this.hdFileName.Text;
 | 
						||
                //文件上传服务器
 | 
						||
                this.fuAttachUrl.PostedFile.SaveAs(filePath);
 | 
						||
                //文件上传服务器后的名称
 | 
						||
                string fileName = rootPath + initPath + this.hdFileName.Text;
 | 
						||
                //读取Excel
 | 
						||
                DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out errorInfos, true);
 | 
						||
                //验证Excel读取是否有误
 | 
						||
                if (!string.IsNullOrEmpty(errorInfos))
 | 
						||
                {
 | 
						||
                    ShowNotify(errorInfos, MessageBoxIcon.Warning);
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
 | 
						||
                DataRow[] dv =ds.Tables[0].Select("Month <>'' and JOB_NO <>''");
 | 
						||
                //导入数据库
 | 
						||
                if (dv.Length> 0)
 | 
						||
                {
 | 
						||
                    for (int i = 0; i < dv.Length; i++)
 | 
						||
                    {
 | 
						||
                        Editor_CostReport costReport = new Editor_CostReport();
 | 
						||
 | 
						||
                        #region 数据验证和赋值
 | 
						||
                        if (dv[i]["Month"] != null && !string.IsNullOrEmpty(dv[i]["Month"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.Monthly = DateTime.ParseExact(dv[i]["Month"].ToString(), "yyyyMM", null).ToString("yyyyMM");
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[Month]Must be in datetime format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            errorInfos += (i + 2) + "Line, [Month] cannot be empty</br>";
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["JOB_NO"] != null && !string.IsNullOrEmpty(dv[i]["JOB_NO"].ToString()))
 | 
						||
                        {
 | 
						||
                            var eproject = BLL.EProjectService.GeteProjectByJobNO(dv[i]["JOB_NO"].ToString());
 | 
						||
                            if (eproject != null)
 | 
						||
                            {
 | 
						||
                                costReport.EProjectId = eproject.EProjectId;
 | 
						||
                            }
 | 
						||
                            else
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "Line, [JOB_NO] not exist</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            errorInfos += (i + 2) + "Line, [JOB_NO] cannot be empty</br>";
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["BUDGET_ORG"] != null && !string.IsNullOrEmpty(dv[i]["BUDGET_ORG"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.OrginalBudget = Funs.GetNewDecimalOrZero(dv[i]["BUDGET_ORG"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[BUDGET_ORG] Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.OrginalBudget = 0;
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["Budget_CHK"] != null && !string.IsNullOrEmpty(dv[i]["Budget_CHK"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.ChangedBudget = Funs.GetNewDecimalOrZero(dv[i]["Budget_CHK"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[Budget_CHK]Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.ChangedBudget = 0;
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["ACTUAL"] != null && !string.IsNullOrEmpty(dv[i]["ACTUAL"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.ActualCost = Funs.GetNewDecimalOrZero(dv[i]["ACTUAL"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[ACTUAL]Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.ActualCost = 0;
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["Commit_PO"] != null && !string.IsNullOrEmpty(dv[i]["Commit_PO"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.CommittedPRPO = Funs.GetNewDecimalOrZero(dv[i]["Commit_PO"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[Commit_PO]Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.CommittedPRPO = 0;
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["Commit_SSR"] != null && !string.IsNullOrEmpty(dv[i]["Commit_SSR"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.CommittedSSRs = Funs.GetNewDecimalOrZero(dv[i]["Commit_SSR"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[Commit_SSR] Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.CommittedSSRs = 0;
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (dv[i]["Cost_To_CMPT"] != null && !string.IsNullOrEmpty(dv[i]["Cost_To_CMPT"].ToString()))
 | 
						||
                        {
 | 
						||
                            try
 | 
						||
                            {
 | 
						||
                                costReport.CostToComplete = Funs.GetNewDecimalOrZero(dv[i]["Cost_To_CMPT"].ToString());
 | 
						||
                            }
 | 
						||
                            catch (Exception)
 | 
						||
                            {
 | 
						||
                                errorInfos += (i + 2) + "line,[Cost_To_CMPT] Must be in numeric format</br>";
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            costReport.CostToComplete = 0;
 | 
						||
                        }
 | 
						||
                        costReport.CostReportId = SQLHelper.GetNewID(typeof(Model.Editor_CostReport));
 | 
						||
                        costReportLists.Add(costReport);
 | 
						||
                        #endregion
 | 
						||
                    }
 | 
						||
                    if (!string.IsNullOrEmpty(errorInfos))
 | 
						||
                    {
 | 
						||
                        ShowAlert(errorInfos, MessageBoxIcon.Warning);
 | 
						||
                        return;
 | 
						||
                    }
 | 
						||
 | 
						||
 | 
						||
                    //去除集合中重复的数据
 | 
						||
                    //for (int i = 0; i < costReportLists.Count; i++)  
 | 
						||
                    //{
 | 
						||
                    //    for (int j = costReportLists.Count - 1; j > i; j--) 
 | 
						||
                    //    {
 | 
						||
                    //        if (costReportLists[i].Monthly == costReportLists[j].Monthly && costReportLists[i].EProjectId == costReportLists[j].EProjectId)
 | 
						||
                    //        {
 | 
						||
                    //            costReportLists.RemoveAt(j);
 | 
						||
                    //        }
 | 
						||
                    //    }
 | 
						||
                    //}
 | 
						||
 | 
						||
                    //判断数据库是否有相同日期和项目的数据
 | 
						||
                    List<Editor_CostReport> insertlists = new List<Editor_CostReport>();
 | 
						||
                    //List<Editor_CostReport> updatelists = new List<Editor_CostReport>();
 | 
						||
                    foreach (var item in costReportLists)
 | 
						||
                    {                       
 | 
						||
                        var mewCostReport = BLL.CostReportService.GetCostReportByEProjectIdAndMonth(item.EProjectId, item.Monthly);
 | 
						||
                        if (mewCostReport == null)
 | 
						||
                        {
 | 
						||
                            insertlists.Add(item);
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            Editor_CostReport update = Funs.DB.Editor_CostReport.FirstOrDefault(x => x.CostReportId == mewCostReport.CostReportId);
 | 
						||
                            if (update != null)
 | 
						||
                            {
 | 
						||
                                update.EProjectId = item.EProjectId;
 | 
						||
                                update.Monthly = item.Monthly;
 | 
						||
                                update.OrginalBudget = item.OrginalBudget;
 | 
						||
                                update.ChangedBudget = item.ChangedBudget;
 | 
						||
                                update.ActualCost = item.ActualCost;
 | 
						||
                                update.CommittedPRPO = item.CommittedPRPO;
 | 
						||
                                update.CommittedSSRs = item.CommittedSSRs;
 | 
						||
                                update.CostToComplete = item.CostToComplete;
 | 
						||
                                Funs.DB.SubmitChanges();
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
 | 
						||
                    if (insertlists.Count > 0)
 | 
						||
                    {
 | 
						||
                        Funs.DB.Editor_CostReport.InsertAllOnSubmit(insertlists);
 | 
						||
                        Funs.DB.SubmitChanges();
 | 
						||
                    }
 | 
						||
 | 
						||
                    //更新Control中的OrginalBudget和CM中Cost to complete
 | 
						||
                    foreach (var item in costReportLists)
 | 
						||
                    {
 | 
						||
                        var eproject = BLL.EProjectService.GeteProjectById(item.EProjectId);
 | 
						||
                        eproject.EProjectId = item.EProjectId;
 | 
						||
                        eproject.ProjectControl_OrginalBudget = item.OrginalBudget;
 | 
						||
                        eproject.ProjectControl_ChangedBudget = item.ChangedBudget;
 | 
						||
                        eproject.ProjectControl_Actual = item.ActualCost;
 | 
						||
                        eproject.ProjectControl_CommittedPRPO = item.CommittedPRPO;
 | 
						||
                        eproject.ProjectControl_CommittedSSRs = item.CommittedSSRs;
 | 
						||
                        eproject.PM_General_CostToComplete = item.CostToComplete;
 | 
						||
                        eproject.ModifyDate = DateTime.Now;
 | 
						||
                        eproject.ModifyPerson = CurrUser.UserId;
 | 
						||
                        BLL.EProjectService.UpdateOrginalBudget(eproject);
 | 
						||
                    }
 | 
						||
 | 
						||
                    ShowNotify("Import success!", MessageBoxIcon.Success);
 | 
						||
                    PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
 | 
						||
                }
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    ShowAlert("No data!", MessageBoxIcon.Warning);
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
            }
 | 
						||
            catch (Exception ex)
 | 
						||
            {
 | 
						||
                ShowAlert("'" + ex.Message + "'", MessageBoxIcon.Warning);
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #endregion
 | 
						||
    }
 | 
						||
} |