修改进度与合同关联

This commit is contained in:
2023-09-05 09:52:10 +08:00
parent b917d217be
commit b238b27726
15 changed files with 497 additions and 53 deletions
@@ -16,8 +16,8 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
public string ContractId
{
get => (string)ViewState["ContractId"];
set => ViewState["ContractId"] =value;
}
set => ViewState["ContractId"] = value;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
@@ -29,11 +29,11 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
this.DropContractCode.DataSource = BLL.PHTGL_ContractReviewService.GetContractReview_CompleteData(this.CurrUser.LoginProjectId);
this.DropContractCode.DataBind();
Funs.FineUIPleaseSelect(this.DropContractCode);
DropMainContractCode_SelectedIndexChanged(null,null);
DropMainContractCode_SelectedIndexChanged(null, null);
this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString();
// 绑定表格
this.BindGrid();
}
}
@@ -61,33 +61,33 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
Grid3.DataSource = null;
Grid3.DataBind();
}
}
private void BindGrid2()
{
var db = Funs.DB;
var q = from x in db.PHTGL_ContractTrackMatchWBS
join y in db.WBS_ControlItemAndCycle on x.ControlItemAndCycleId equals y.ControlItemAndCycleId
where x.ContractTrackId==Grid1.SelectedRowID
select new
{
x.Id,
x.ContractTrackId,
x.ControlItemAndCycleId,
y.ControlItemAndCycleCode,
y.ControlItemContent,
y.Weights,
x.WorkPackageEstimate
};
join y in db.WBS_ControlItemAndCycle on x.ControlItemAndCycleId equals y.ControlItemAndCycleId
where x.ContractTrackId == Grid1.SelectedRowID
select new
{
x.Id,
x.ContractTrackId,
x.ControlItemAndCycleId,
y.ControlItemAndCycleCode,
y.ControlItemContent,
y.Weights,
x.WorkPackageEstimate
};
;
Grid2.RecordCount =q.Count();
Grid2.RecordCount = q.Count();
Grid2.DataSource = q;
Grid2.DataBind();
string deleteScript = GetDeleteScript();
// 在第一行新增一条数据
btnMatchWBS_New.OnClientClick = Window1.GetShowReference(String.Format("ContractTrackMatchWBS.aspx?ContractTrackId={0}", Grid1.SelectedRowID, "增加 - "));
}
private string GetDeleteScript()
{
@@ -165,7 +165,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
}
else
{
ShowNotify("请选择施工分包合同!",MessageBoxIcon.Information);
ShowNotify("请选择施工分包合同!", MessageBoxIcon.Information);
}
}
@@ -196,8 +196,8 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
/// <param name="e"></param>
protected void Grid1_OnRowClick(object sender, GridRowClickEventArgs e)
{
BindGrid2();
BindGrid3();
BindGrid2();
BindGrid3();
}
/// <summary>
@@ -243,13 +243,42 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
{
if (Grid2.SelectedRowIndexArray.Length > 0)
{
Model.SGGLDB db = Funs.DB;
var controlItemAndCycles = from x in db.WBS_ControlItemAndCycle
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var unitWorks = from x in db.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var workPackages = (from x in db.WBS_WorkPackage
where x.ProjectId == this.CurrUser.LoginProjectId
select x).ToList();
foreach (int rowIndex in Grid2.SelectedRowIndexArray)
{
string rowID = Grid2.DataKeys[rowIndex][0].ToString();
var p = BLL.PhtglContracttrackmatchwbsService.GetPHTGL_ContractTrackMatchWBSById(rowID);
if (p != null)
{
decimal changePlanCost = 0 - (p.WorkPackageEstimate ?? 0);
var c = controlItemAndCycles.First(x => x.ControlItemAndCycleId == p.ControlItemAndCycleId);
c.PlanCost = 0;
BLL.ControlItemAndCycleService.UpdateControlItemAndCycle(c);
//更新上级WBS内容概算费用
BLL.WorkPackageService.UpdateWorkPackagesPlanCost(workPackages, c.WorkPackageId, changePlanCost);
var workPackage = workPackages.FirstOrDefault(x => x.WorkPackageId == c.WorkPackageId);
if (workPackage != null)
{
var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage.UnitWorkId);
if (unitWork.PlanCost == null)
{
unitWork.PlanCost = changePlanCost;
}
else
{
unitWork.PlanCost += changePlanCost;
}
}
db.SubmitChanges();
PhtglContracttrackmatchwbsService.DeleteModelById(rowID);
}
}
@@ -284,8 +313,31 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
private void SaveGrid3()
{
Model.SGGLDB db = Funs.DB;
var list = (from x in db.PHTGL_ContractTrackProgress
where x.ContractTrackId == Grid1.SelectedRowID
select x).ToList();
PhtglContracttrackprogressService.DeleteModleByContractTrackId(Grid1.SelectedRowID);
decimal totalWeights = 0;
var SelectedList = (from x in db.PHTGL_ContractTrackMatchWBS
where x.ContractTrackId == Grid1.SelectedRowID
select x.ControlItemAndCycleId).ToList();
var totalControlItemAndCycles = from x in db.WBS_ControlItemAndCycle
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var unitWorks = from x in db.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var workPackages = (from x in db.WBS_WorkPackage
where x.ProjectId == this.CurrUser.LoginProjectId
select x).ToList();
var controlItemAndCycles = from x in totalControlItemAndCycles
where SelectedList.Contains(x.ControlItemAndCycleId)
select x;
foreach (var controlItemAndCycle in controlItemAndCycles)
{
totalWeights += controlItemAndCycle.Weights ?? 0;
}
JArray EditorArr = Grid3.GetMergedData();
if (EditorArr.Count > 0)
{
@@ -304,12 +356,120 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
model.ACWP_Percentage = Funs.GetNewDecimal(objects["values"]["ACWP_Percentage"].ToString());
model.Date = objects["values"]["Date"].ToString();
BLL.PhtglContracttrackprogressService.AddPHTGL_ContractTrackProgress(model);
var old = list.FirstOrDefault(x => x.Date == model.Date);
decimal oldValue = 0;
if (old != null)
{
oldValue = old.ACWP_OutputValue ?? 0;
}
decimal changeValue = (model.ACWP_OutputValue ?? 0) - oldValue;
if (changeValue != 0)
{
foreach (var item in controlItemAndCycles)
{
var c = controlItemAndCycles.First(x => x.ControlItemAndCycleId == item.ControlItemAndCycleId);
decimal thisValue = 0;
if (totalWeights > 0 && c.Weights.HasValue)
{
thisValue = decimal.Round(c.Weights.Value / totalWeights * changeValue, 2);
}
DateTime? months = Funs.GetNewDateTime(model.Date + "-01");
var WorkPackage = workPackages.FirstOrDefault(x => x.WorkPackageId == item.WorkPackageId);
Model.WBS_WorkPackageDetail WorkPackageDetail = BLL.WorkPackageDetailService.GetWorkPackageDetailByWorkPackageIdAndMonths(item.WorkPackageId, months.Value);
if (WorkPackageDetail != null)
{
WorkPackageDetail.ThisValue += thisValue;
}
else
{
WorkPackageDetail = new Model.WBS_WorkPackageDetail();
WorkPackageDetail.WorkPackageDetailId = SQLHelper.GetNewID();
WorkPackageDetail.WorkPackageId = item.WorkPackageId;
WorkPackageDetail.Months = months;
WorkPackageDetail.ThisValue = thisValue;
db.WBS_WorkPackageDetail.InsertOnSubmit(WorkPackageDetail);
}
//更新上级WBS内容每月实际费用
UpdateWorkPackageParentThisValue(db, WorkPackage.SuperWorkPackageId, months.Value, thisValue);
////更新单位工程
Model.WBS_WorkPackageParentDetail unitWorkDetail = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(WorkPackage.UnitWorkId, months.Value);
if (unitWorkDetail != null)
{
unitWorkDetail.ThisValue += thisValue;
}
else
{
unitWorkDetail = new Model.WBS_WorkPackageParentDetail();
unitWorkDetail.WorkPackageParentDetailId = SQLHelper.GetNewID();
unitWorkDetail.ParentId = WorkPackage.UnitWorkId;
unitWorkDetail.Months = months;
unitWorkDetail.ThisValue = thisValue;
db.WBS_WorkPackageParentDetail.InsertOnSubmit(unitWorkDetail);
}
////更新建筑、安装工程
Model.WBS_UnitWork unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == WorkPackage.UnitWorkId);
if (unitWork != null)
{
Model.WBS_WorkPackageParentDetail projectType = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(unitWork.ProjectType, this.CurrUser.LoginProjectId, months.Value);
if (projectType != null)
{
projectType.ThisValue += thisValue;
}
else
{
projectType = new Model.WBS_WorkPackageParentDetail();
projectType.WorkPackageParentDetailId = SQLHelper.GetNewID();
projectType.ParentId = unitWork.ProjectType;
projectType.ProjectId = this.CurrUser.LoginProjectId;
projectType.Months = months;
projectType.ThisValue = thisValue;
db.WBS_WorkPackageParentDetail.InsertOnSubmit(projectType);
}
}
db.SubmitChanges();
}
}
}
}
ShowNotify("保存成功", MessageBoxIcon.Success);
}
#region WBS内容每月实际费用
/// <summary>
/// 更新上级WBS内容每月实际费用
/// </summary>
/// <param name="years"></param>
/// <param name="months"></param>
/// <param name="PlanNum"></param>
/// <param name="parentId"></param>
private void UpdateWorkPackageParentThisValue(Model.SGGLDB db, string SuperWorkPackageId, DateTime months, decimal thisValue)
{
Model.WBS_WorkPackage workPackage = db.WBS_WorkPackage.FirstOrDefault(x => x.WorkPackageId == SuperWorkPackageId);
if (workPackage != null)
{
Model.WBS_WorkPackageParentDetail parentDetail = BLL.WorkPackageParentDetailService.GetWorkPackageParentDetailByParentIdAndMonths(SuperWorkPackageId, months);
if (parentDetail != null)
{
parentDetail.ThisValue += thisValue;
}
else
{
parentDetail = new Model.WBS_WorkPackageParentDetail();
parentDetail.WorkPackageParentDetailId = SQLHelper.GetNewID();
parentDetail.ParentId = SuperWorkPackageId;
parentDetail.Months = months;
parentDetail.ThisValue = thisValue;
db.WBS_WorkPackageParentDetail.InsertOnSubmit(parentDetail);
}
if (workPackage.SuperWorkPackageId != null) //还存在上级节点,需要继续循环
{
UpdateWorkPackageParentThisValue(db, workPackage.SuperWorkPackageId, months, thisValue);
}
}
}
#endregion
protected void btnSave_OnClick(object sender, EventArgs e)
{
JArray EditorArr = Grid1.GetMergedData();
@@ -499,7 +659,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
var model = ContractService.GetContractByContractNum(DropContractCode.SelectedValue);
if (model != null)
{
ContractId=model.ContractId;
ContractId = model.ContractId;
this.txtContractName.Text = model.ContractName;
}
else
@@ -509,7 +669,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
}
}
BindGrid();
BindGrid();
}
protected void btnImport_Click(object sender, EventArgs e)
@@ -525,7 +685,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
}
else
{
ShowNotify("请选择施工分包合同",MessageBoxIcon.Question);
ShowNotify("请选择施工分包合同", MessageBoxIcon.Question);
}
}
@@ -535,6 +695,6 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
BindGrid2();
}
}
}
@@ -68,6 +68,9 @@
<f:RenderField Width="70px" ColumnID="ControlItemContent" DataField="ControlItemContent" FieldType="String"
HeaderText="工作包" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" ColumnID="Weights" DataField="Weights" FieldType="Float"
HeaderText="权重" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" ColumnID="ControlPoint" DataField="ControlPoint" FieldType="String"
HeaderText="控制点等级" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
@@ -16,6 +16,36 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
set { ViewState["ContractTrackId"] = value; }
}
/// <summary>
/// 被选择项列表
/// </summary>
public List<string> SelectedList
{
get
{
return (List<string>)ViewState["SelectedList"];
}
set
{
ViewState["SelectedList"] = value;
}
}
/// <summary>
/// 未被选择项列表
/// </summary>
public List<string> NoSelectedList
{
get
{
return (List<string>)ViewState["NoSelectedList"];
}
set
{
ViewState["NoSelectedList"] = value;
}
}
#region
/// <summary>
/// 页面加载
@@ -27,7 +57,8 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
if (!IsPostBack)
{
ContractTrackId = Request.Params["ContractTrackId"];
this.SelectedList = new List<string>();
this.NoSelectedList = new List<string>();
InitTreeMenu();
}
}
@@ -358,6 +389,21 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
/// <param name="e"></param>
protected void trWBS_NodeCommand(object sender, TreeCommandEventArgs e)
{
if (Grid1.SelectedRowIDArray.Length > 0)
{
var Ids = Grid1.SelectedRowIDArray;
for (int i = 0; i < this.Grid1.Rows.Count; i++)
{
if (Ids.Contains(this.Grid1.Rows[i].RowID))
{
SelectedList.Add(this.Grid1.Rows[i].RowID);
}
else
{
NoSelectedList.Add(this.Grid1.Rows[i].RowID);
}
}
}
BindGrid();
}
#endregion
@@ -407,7 +453,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
/// </summary>
private void BindGrid()
{
string strSql = @"SELECT ControlItemAndCycleId,ControlItemAndCycleCode,InitControlItemCode,ControlItemContent,ControlPoint,ControlItemDef,HGForms,SHForms,Standard,ClauseNo,CheckNum"
string strSql = @"SELECT ControlItemAndCycleId,ControlItemAndCycleCode,InitControlItemCode,ControlItemContent,ControlPoint,ControlItemDef,HGForms,SHForms,Standard,ClauseNo,CheckNum,Weights"
+ @" FROM WBS_ControlItemAndCycle ";
List<SqlParameter> listStr = new List<SqlParameter>();
strSql += " where WorkPackageId = @WorkPackageId and IsApprove=1 ";
@@ -463,10 +509,53 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
protected void btnAccept_Click(object sender, EventArgs e)
{
if (Grid1.SelectedRowIDArray.Length>0)
if (Grid1.SelectedRowIDArray.Length > 0)
{
var Ids=Grid1.SelectedRowIDArray;
foreach (var item in Ids)
var Ids = Grid1.SelectedRowIDArray;
for (int i = 0; i < this.Grid1.Rows.Count; i++)
{
if (Ids.Contains(this.Grid1.Rows[i].RowID))
{
SelectedList.Add(this.Grid1.Rows[i].RowID);
}
else
{
if (SelectedList.Contains(this.Grid1.Rows[i].RowID))
{
SelectedList.Remove(this.Grid1.Rows[i].RowID);
}
NoSelectedList.Add(this.Grid1.Rows[i].RowID);
}
}
}
if (SelectedList.Count > 0)
{
SelectedList = SelectedList.Distinct().ToList();
decimal estimatedAmount = 0;
var contractTrack = PhtglContractTrackService.GetPHTGL_ContractTrackById(ContractTrackId);
if (contractTrack != null && contractTrack.EstimatedAmount.HasValue)
{
estimatedAmount = contractTrack.EstimatedAmount.Value;
}
decimal totalWeights = 0;
Model.SGGLDB db = Funs.DB;
var totalControlItemAndCycles = from x in db.WBS_ControlItemAndCycle
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var unitWorks = from x in db.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId
select x;
var workPackages = (from x in db.WBS_WorkPackage
where x.ProjectId == this.CurrUser.LoginProjectId
select x).ToList();
var controlItemAndCycles = from x in totalControlItemAndCycles
where SelectedList.Contains(x.ControlItemAndCycleId)
select x;
foreach (var controlItemAndCycle in controlItemAndCycles)
{
totalWeights += controlItemAndCycle.Weights ?? 0;
}
foreach (var item in SelectedList)
{
var querymodel = new Model.PHTGL_ContractTrackMatchWBS
{
@@ -484,7 +573,34 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
ControlItemAndCycleId = item,
};
var c = controlItemAndCycles.First(x => x.ControlItemAndCycleId == item);
decimal oldPlanCost = c.PlanCost ?? 0;
decimal changePlanCost = 0;
if (estimatedAmount > 0 && totalWeights > 0 && c.Weights.HasValue)
{
//工作包概算费用
newtable.WorkPackageEstimate = decimal.Round(c.Weights.Value / totalWeights * estimatedAmount, 2);
}
BLL.PhtglContracttrackmatchwbsService.AddPHTGL_ContractTrackMatchWBS(newtable);
c.PlanCost = newtable.WorkPackageEstimate ?? 0;
changePlanCost += (newtable.WorkPackageEstimate ?? 0) - oldPlanCost;
BLL.ControlItemAndCycleService.UpdateControlItemAndCycle(c);
//更新上级WBS内容概算费用
BLL.WorkPackageService.UpdateWorkPackagesPlanCost(workPackages, c.WorkPackageId, changePlanCost);
var workPackage = workPackages.FirstOrDefault(x=>x.WorkPackageId== c.WorkPackageId);
if (workPackage != null)
{
var unitWork = unitWorks.FirstOrDefault(x => x.UnitWorkId == workPackage.UnitWorkId);
if (unitWork.PlanCost == null)
{
unitWork.PlanCost = changePlanCost;
}
else
{
unitWork.PlanCost += changePlanCost;
}
}
db.SubmitChanges();
}
}
ShowNotify("添加成功", MessageBoxIcon.Success);
@@ -492,7 +608,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
}
else
{
ShowNotify("请选择需要添加的数据",MessageBoxIcon.Information);
ShowNotify("请选择需要添加的数据", MessageBoxIcon.Information);
}
}
@@ -508,7 +624,7 @@ namespace FineUIPro.Web.PHTGL.ContractCompile
if (queryResult.Any())
{
e.RowCssClass = "color3";
}
}
}
}
}