/// <summary> /// 保存更改 /// </summary> public void Save() { if (NodeList.Count == 0) { throw new BusinessException("至少有一条明细!"); } if (NodeList.ToList().Exists(m => String.IsNullOrEmpty(m.ItemName) || String.IsNullOrEmpty(m.ItemName.Trim()))) { throw new BusinessException(" 清单项名称不能为空!"); } List <ContractBoi> lstAddBoi = null; List <ContractBoi> lstDelBoi = null; List <ContractBoi> lstUpdateBoi = null; List <String> lstDelNo = null; List <ContractBoiNode> lstAllNode = NodeList.ToList(); //添加的节点集合 List <ContractBoiNode> lstAddNode = lstAllNode.FindAll(m => m.OriginalBoi == null); //删除的节点集合 lstDelBoi = boq.BoiList.FindAll(m => !lstAllNode.Exists(n => n.OriginalBoi == m)); if (lstAddNode.Count > 0) { lstAddBoi = lstAddNode.ConvertAll <ContractBoi>(m => ObjectHelper.Clone <ContractBoi>(m)); } if (lstDelBoi.Count > 0) { lstDelNo = lstDelBoi.ConvertAll <String>(m => m.ItemNo); } if (updateList.Count > 0) { lstUpdateBoi = updateList.ConvertAll <ContractBoi>(m => ObjectHelper.Clone <ContractBoi>(m)); } //执行保存操作 List <ContractBoiNoInfo> lstAddedInfo = contractBoqService.Save(ProjectNo, null, Boq.BoQName, ObjectHelper.GetDefaultDecimal(Boq.TotalAmount), lstAddBoi, lstUpdateBoi, lstDelNo); lstAddNode.ForEach(m => { //为新增的项填写ItemNo m.ItemNo = lstAddedInfo.Find(n => n.ItemCode == m.ItemCode).ItemNo; //拷贝Boi对象 ContractBoi boi = ObjectHelper.Clone <ContractBoi>(m); //将Boi对象与节点关联起来 m.OriginalBoi = boi; Boq.BoQNo = m.BoQNo; //加入到原始Boq集合中 Boq.BoiList.Add(boi); }); //从原始集合中移除已删除的对象 lstDelBoi.ForEach(m => { Boq.BoiList.Remove(m); }); //清除变化记录集合 updateList.Clear(); //将编辑状态设置为FALSE this.Editing = false; //重新读取数据 Load(); }
/// <summary> /// 检查节点基本信息是否变化 /// </summary> /// <param name="Node"></param> /// <returns></returns> bool HasInfoChanged(ContractBoiChangeNode Node) { ContractBoi boi = Node; return(boi.IItemCoe != Node.IItemCoe || boi.ItemCode == Node.ItemCode || boi.ItemName != Node.ItemName || boi.Uom != Node.Uom); }
/// <summary> /// 检查节点是否变化 /// </summary> /// <param name="Node"></param> /// <returns></returns> bool HasNodeChanged(ContractBoiChangeNode Node) { ContractBoi boi = Node; return(boi.IItemCoe != Node.IItemCoe || boi.ItemCode == Node.ItemCode || boi.ItemName != Node.ItemName || boi.Uom != Node.Uom || boi.CtrctAmount != Node.CtrctAmount || boi.CtrctPrjPrice != Node.CtrctPrjPrice || boi.CtrctQty != Node.CtrctQty || boi.StatId != Node.StatId); }
private void qtyEdit_Validating(object sender, CancelEventArgs e) { WBSline_boi node = gvRelationDetail.GetFocusedRow() as WBSline_boi; CalcEdit edit = sender as CalcEdit; decimal qty = edit.Value; if (node != null) { if (qty < 0) { //edit.ErrorText = "数量不可为负数"; gvRelationDetail.SetColumnError(gvRelationDetail.FocusedColumn, "数量不可为负数"); e.Cancel = true; return; } List <WBSline_boi> lstExceptFocusedRow = viewModel.boq.AllRelationList.FindAll(m => m.ItemNo == node.ItemNo && m.WBSLineNo != node.WBSLineNo); ContractBoi originBoi = viewModel.originContractBoiList.Find(m => m.ItemNo == node.ItemNo); if (lstExceptFocusedRow != null && lstExceptFocusedRow.Count > 0) //如果存在其他相同合同项,判断相同合同项 { decimal remainQty = 0, remainAmount = 0; lstExceptFocusedRow.ForEach(m => { remainQty = remainQty + ObjectHelper.GetDefaultDecimal(m.Qty); remainAmount = remainAmount + ObjectHelper.GetDefaultDecimal(m.Amount); }); remainQty = ObjectHelper.GetDefaultDecimal(originBoi.CtrctQty) - remainQty; remainAmount = ObjectHelper.GetDefaultDecimal(originBoi.CtrctAmount) - remainAmount; if (remainQty - ObjectHelper.GetDefaultDecimal(edit.EditValue) < 0) { gvRelationDetail.SetColumnError(gvRelationDetail.FocusedColumn, "该项的关联数量总值大于该项合同清单数量的总值,请核对后再输入"); //edit.ErrorText = "该项的关联数量总值大于该项合同清单数量的总值,请核对后再输入"; e.Cancel = true; } } else { decimal remainQty = 0, remainAmount = 0; remainQty = ObjectHelper.GetDefaultDecimal(originBoi.CtrctQty); remainAmount = ObjectHelper.GetDefaultDecimal(originBoi.CtrctAmount); if (remainQty - ObjectHelper.GetDefaultDecimal(edit.EditValue) < 0) { gvRelationDetail.SetColumnError(gvRelationDetail.FocusedColumn, "该项的关联数量总值大于该项合同清单数量的总值,请核对后再输入"); //edit.ErrorText = "该项的关联数量总值大于该项合同清单数量的总值,请核对后再输入"; e.Cancel = true; } } } }
/// <summary> /// 插入清单项 /// </summary> /// <param name="BoqNo"></param> /// <param name="Boi"></param> /// <param name="OperationBy">操作人</param> /// <returns>No信息</returns> private ContractBoiNoInfo InsertBoi(String BoqNo, ContractBoi Boi, String OperationBy, SqlTransaction Tran = null) { List <CmdParameter> cmds = new List <CmdParameter>(); cmds.Add(new CmdParameter("@ProjectNo", Boi.ProjectNo)); cmds.Add(new CmdParameter("@BidNo", Boi.BidNo)); cmds.Add(new CmdParameter("@BoQNo", BoqNo)); cmds.Add(new CmdParameter("@IItemCoe", Boi.IItemCoe)); cmds.Add(new CmdParameter("@ItemName", Boi.ItemName)); cmds.Add(new CmdParameter("@ParentCode", Boi.ParentCode)); cmds.Add(new CmdParameter("@Currency", Boi.Currency)); cmds.Add(new CmdParameter("@CurrencyCode", Boi.CurrencyCode)); cmds.Add(new CmdParameter("@ExchangeRate", Boi.ExchangeRate)); cmds.Add(new CmdParameter("@Uom", Boi.Uom)); cmds.Add(new CmdParameter("@CtrctQty", Boi.CtrctQty)); cmds.Add(new CmdParameter("@CtrctPrjPrice", Boi.CtrctPrjPrice)); cmds.Add(new CmdParameter("@CtrctAmount", Boi.CtrctAmount)); cmds.Add(new CmdParameter("@Description", Boi.Description)); cmds.Add(new CmdParameter("@CategoryNo", Boi.CategoryNo)); cmds.Add(new CmdParameter("@isCntrctItem", Boi.isCntrctItem)); cmds.Add(new CmdParameter("@isImportant", Boi.isImportant)); cmds.Add(new CmdParameter("@isTax", Boi.isTax)); cmds.Add(new CmdParameter("@OperationBy", OperationBy)); cmds.Add(new CmdParameter("@Id", 0, System.Data.ParameterDirection.Output)); cmds.Add(new CmdParameter("@ItemNo", "", System.Data.ParameterDirection.Output)); cmds.Add(new CmdParameter("@ItemCode", Boi.ItemCode, System.Data.ParameterDirection.Output)); cmds.Add(new CmdParameter("@Infor", "", System.Data.ParameterDirection.Output)); cmds.Add(new CmdParameter("@Ok", 0, System.Data.ParameterDirection.Output)); ParameterResult pResult = new ParameterResult() { Parameters = cmds.ToArray() }; HdDbCmdManager.GetInstance().Execute("ERP_BoQ.dbo.Gl_Cntrct_Boi_Add", CommandType.StoredProcedure, pResult.Parameters, Tran); if (!Convert.ToBoolean(pResult["@Ok"])) { throw new FaultException <ApplicationServiceError>(new ApplicationServiceError() { ErrorMessage = pResult["@Infor"].ToString() }); } ContractBoiNoInfo BoiInfo = new ContractBoiNoInfo(); BoiInfo.ItemCode = Boi.ItemCode; BoiInfo.ItemNo = pResult["@ItemNo"].ToString(); return(BoiInfo); }
private void tlDetail_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e) { if (e.PrevState == CheckState.Unchecked) { if (e.Node.HasChildren)//如果存在子节点,则不可以选中 { e.Node.CheckState = CheckState.Unchecked; e.CanCheck = false; return; } ContractBoi boi = tlDetail.GetDataRecordByNode(e.Node) as ContractBoi; if (boi != null) { if ((boi.CtrctQty ?? 0) <= 0) //如果未关联数量为0,则不可选中 { e.Node.CheckState = CheckState.Unchecked; e.CanCheck = false; return; } } } }
/// <summary> /// 检查节点是否禁用、启用变化 /// </summary> /// <param name="Node"></param> /// <returns></returns> bool HasDisableChanged(ContractBoiChangeNode Node) { ContractBoi boi = Node; return(boi.StatId != Node.StatId); }
/// <summary> /// 检查节点单价是否变化 /// </summary> /// <param name="Node"></param> /// <returns></returns> bool HasPriceChanged(ContractBoiChangeNode Node) { ContractBoi boi = Node.OriginalBoi; return(boi.CtrctPrjPrice != Node.CtrctPrjPrice); }
/// <summary> /// 检查节点数量是否变化 /// </summary> /// <param name="Node"></param> /// <returns></returns> bool HasQtyChanged(ContractBoiChangeNode Node) { ContractBoi boi = Node.OriginalBoi; return(boi.CtrctQty != Node.CtrctQty); }
private void bbi_import_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { ////导入WBS //if (openFileDialog1.ShowDialog() == DialogResult.OK) //{ // List<WBSline> lines = ExcelHelper.Import(openFileDialog1.FileName); // lines.ForEach(m => // { // m.ProjectNo = viewModel.ProjectNo; // }); // IWBSBoq wbsBoq = new MeteringPaymentClient().GetIWBSBoqService(); // wbsBoq.ImportWBS(viewModel.Boq.WbsNo, lines); //} //导入关联 if (openFileDialog1.ShowDialog() == DialogResult.OK) { List <WbsInfo> lines = ExcelHelper.ImportWbsInfo(openFileDialog1.FileName); IWBSBoq wbsBoq = new MeteringPaymentClient().GetIWBSBoqService(); List <WbsInfo> leafLines = new List <WbsInfo>(); lines.ForEach(m => { GetLeafNodes(leafLines, m); }); ContractBoqViewModel cVModel = new ContractBoqViewModel(viewModel.ProjectNo, viewModel.ProjectName); cVModel.Load(); int k = 0; leafLines.ForEach(m => { m.Details.ForEach(n => { ContractBoi boi = cVModel.Boq.BoiList.Find(x => x.IItemCoe == n.BoiCode /*&& x.ItemName == n.BoiName*/); if (boi != null) { viewModel.InsertNodeRelation(m.WbsCode, boi.ItemNo, n.Qty); } k++; }); }); } ////更新图纸桩号 //if (openFileDialog1.ShowDialog() == DialogResult.OK) //{ // List<WbsInfo> lines = ExcelHelper.ImportWbsInfo(openFileDialog1.FileName); // IWBSBoq wbsBoq = new MeteringPaymentClient().GetIWBSBoqService(); // List<WbsInfo> leafLines = new List<WbsInfo>(); // lines.ForEach(m => // { // GetLeafNodes(leafLines, m); // }); // List<WBSLineNode> nodeList = new List<WBSLineNode>(viewModel.NodeBindingSource); // leafLines.ForEach(m => // { // WBSLineNode line = nodeList.Find(n => n.WbsSysCode == m.WbsCode); // line.DrawNo = m.DrawNo; // line.StartStakesNo = m.StartNo; // line.EndStakesNo = m.EndNo; // }); //} }