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
|
||
}
|
||
} |