Ejemplo n.º 1
0
 void DeleteChangeEx(ContractBoiChangeNode Node)
 {
     if (Node.ChangeDetailEx == null)
     {
         Node.ChangeDetailEx = HDAutoMapper.DynamicMap <ContractBoqChangeDetailEx>(Node);
         ChangeDetailExList.Add(Node.ChangeDetailEx);
     }
     Node.ChangeDetailEx.AfAmount     = 0;
     Node.ChangeDetailEx.AfPrice      = 0;
     Node.ChangeDetailEx.AfQty        = 0;
     Node.ChangeDetailEx.BefAmount    = Node.OriginalBoi.CtrctAmount;
     Node.ChangeDetailEx.BefPrjPrice  = Node.OriginalBoi.CtrctPrjPrice;
     Node.ChangeDetailEx.BefQty       = Node.OriginalBoi.CtrctQty;
     Node.ChangeDetailEx.ChangeQty    = 0 - Node.OriginalBoi.CtrctQty;
     Node.ChangeDetailEx.ChangePrice  = 0 - Node.OriginalBoi.CtrctPrjPrice;
     Node.ChangeDetailEx.ChangeAmount = 0 - Node.OriginalBoi.CtrctAmount;
     //if (Node.StatId == 0)
     //{
     //    Node.ChangeDetailEx.ChangeType = ChangeType.Disable;
     //}
     //else
     //{
     Node.ChangeDetailEx.ChangeType = ChangeType.Delete;
     //}
 }
Ejemplo n.º 2
0
        private void InitChanged()
        {
            List <ContractBoqChangeDetailEx> lstDetail = ChangeDetailExList.ToList();
            List <ContractBoqChangeDetailEx> lstDelete = lstDetail.FindAll(m => m.ChangeType == ChangeType.Delete).OrderByDescending(m => m.ItemCode).ToList();
            List <ContractBoqChangeDetailEx> lstUpdate = lstDetail.FindAll(m => m.ChangeType == ChangeType.Update).OrderByDescending(m => m.ItemCode).ToList();
            List <ContractBoqChangeDetailEx> lstNew    = lstDetail.FindAll(m => m.ChangeType == ChangeType.Add).OrderBy(m => m.ItemCode).ToList();
            List <ContractBoqChangeDetailEx> lstDiable = lstDetail.FindAll(m => m.ChangeType == ChangeType.Disable).OrderByDescending(m => m.ItemCode).ToList();
            List <ContractBoqChangeDetailEx> lstEnable = lstDetail.FindAll(m => m.ChangeType == ChangeType.Enable).OrderByDescending(m => m.ItemCode).ToList();
            List <ContractBoiChangeNode>     lstNode   = NodeList.ToList();

            lstDelete.ForEach(m =>
            {
                ContractBoiChangeNode node = lstNode.FirstOrDefault(n => n.ItemNo == m.ItemNo);
                node.ChangeDetailEx        = m;
                ChangeNodeStat(node, false);
            });
            lstNew.ForEach(m =>
            {
                ContractBoiChangeNode nodeAdd = HDAutoMapper.DynamicMap <ContractBoiChangeNode>(m);
                nodeAdd.CtrctPrjPrice         = m.AfPrice;
                nodeAdd.CtrctQty                 = m.AfQty;
                nodeAdd.CtrctAmount              = m.AfAmount;
                nodeAdd.ChangeDetailEx           = m;
                ContractBoiChangeNode parentNode = lstNode.FirstOrDefault(n => n.ItemCode == nodeAdd.ParentCode);
                if (parentNode != null)
                {
                    parentNode.Children.Add(nodeAdd);
                }
                else
                {
                    RootList.Add(nodeAdd);
                }
                NodeList.Add(nodeAdd);
            });
            lstUpdate.ForEach(m =>
            {
                ContractBoiChangeNode node = lstNode.Find(n => n.ItemNo == m.ItemNo);
                node.CtrctAmount           = m.AfAmount;
                node.CtrctPrjPrice         = m.AfPrice;
                node.CtrctQty       = m.AfQty;
                node.IItemCoe       = m.IItemCoe;
                node.Uom            = m.Uom;
                node.ItemName       = m.ItemName;
                node.ChangeDetailEx = m;
            });
            lstDiable.ForEach(m =>
            {
                ContractBoiChangeNode node = lstNode.Find(n => n.ItemNo == m.ItemNo);
                node.ChangeDetailEx        = m;
                ChangeNodeStat(node, false);
            });
            lstEnable.ForEach(m =>
            {
                ContractBoiChangeNode node = lstNode.Find(n => n.ItemNo == m.ItemNo);
                node.ChangeDetailEx        = m;
                ChangeNodeStat(node, true);
            });
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 插入节点
        /// </summary>
        /// <param name="ParentNode"></param>
        public ContractBoiChangeNode InsertNode(ContractBoiChangeNode ParentNode = null)
        {
            String strParentCode;
            String strMaxCode;
            String strNewCode;
            int    iNewCode;
            ContractBoiChangeNode nodeNew = new ContractBoiChangeNode();

            if (ParentNode != null)
            {
                strParentCode = ParentNode.ItemCode;
                strMaxCode    = ParentNode.Children.Max(m => m.ItemCode);
                if (String.IsNullOrEmpty(strMaxCode))
                {
                    strNewCode = strParentCode + "001";
                }
                else
                {
                    iNewCode = System.Convert.ToInt32(strMaxCode.Substring(strMaxCode.Length - 3, 3)) + 1;
                    if (iNewCode > 999)
                    {
                        throw new BusinessException("清单项超出限制(子项不多余999项)");
                    }
                    strNewCode = strParentCode + iNewCode.ToString().PadLeft(3, '0');
                }
                ParentNode.Children.Add(nodeNew);
                nodeNew.ParentCode = ParentNode.ItemCode;
            }
            else
            {
                strMaxCode = RootList.Max(m => m.ItemCode);
                if (String.IsNullOrEmpty(strMaxCode))
                {
                    strNewCode = "01";
                }
                else
                {
                    iNewCode = System.Convert.ToInt32(strMaxCode) + 1;
                    if (iNewCode > 99)
                    {
                        throw new BusinessException("清单项超出限制(顶层项不多余99项)");
                    }
                    strNewCode = iNewCode.ToString().PadLeft(2, '0');
                }
                RootList.Add(nodeNew);
                nodeNew.PropertyChanged += M_PropertyChanged;
            }
            nodeNew.ItemCode      = strNewCode;
            nodeNew.ProjectNo     = ProjectNo;
            nodeNew.BoQNo         = Boq.BoQNo;
            nodeNew.ParentBoiNode = ParentNode;
            CalcNode(nodeNew);
            NodeList.Add(nodeNew);
            return(nodeNew);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 清单父项值计算
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CalcParentNode(ContractBoiChangeNode ParentNode)
 {
     if (ParentNode.Children.Count == 0)
     {
         ParentNode.CtrctAmount = Math.Round(ObjectHelper.GetDefaultDecimal(ParentNode.CtrctQty) * ObjectHelper.GetDefaultDecimal(ParentNode.CtrctPrjPrice), 2, MidpointRounding.AwayFromZero);
     }
     else
     {
         ParentNode.CtrctQty      = null;
         ParentNode.CtrctPrjPrice = null;
         ParentNode.CtrctAmount   = ParentNode.Children.Sum(m => m.StatId == 1 ? m.CtrctAmount : 0);
     }
 }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 列表项更改处理
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnNodeList_ListChanged(object sender, ListChangedEventArgs e)
 {
     //修改项
     if (e.ListChangedType == ListChangedType.ItemChanged)
     {
         ContractBoiChangeNode boiNode = NodeList[e.NewIndex];
         CalcNode(boiNode);
         if (!updateList.Contains(boiNode))
         {
             updateList.Add(boiNode);
         }
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// 处理变化的节点
        /// </summary>
        /// <param name="Node"></param>
        void HandleChange(ContractBoiChangeNode Node)
        {
            bool hasChanged = HasNodeChanged(Node);

            if (hasChanged)
            {
                UpdateChangeEx(Node);
            }
            else if (Node.ChangeDetailEx != null)
            {
                ChangeDetailExList.Remove(Node.ChangeDetailEx);
                Node.ChangeDetailEx = null;
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 递归创建父子关系
        /// </summary>
        /// <param name="NodeList"></param>
        /// <param name="Parent"></param>
        private void RecursionNode(List <ContractBoiChangeNode> NodeList, ContractBoiChangeNode Parent)
        {
            List <ContractBoiChangeNode> lstChildren = NodeList.FindAll(m => m.ParentCode == Parent.ItemCode);

            if (lstChildren.Count > 0)
            {
                Parent.Children.AddRange(lstChildren);
                lstChildren.ForEach(m =>
                {
                    m.ParentBoiNode = Parent;
                    RecursionNode(NodeList, m);
                });
            }
        }
Ejemplo n.º 10
0
        private void ChangeCode(ContractBoiChangeNode node, String newCode)
        {
            String strOldCode = node.ItemCode;

            node.ItemCode = newCode;
            if (node.Children.Count > 0)
            {
                node.Children.ForEach(m =>
                {
                    m.ParentCode = newCode;
                    ChangeCode(m, newCode + m.ItemCode.Substring(m.ItemCode.Length - 3, 3));
                });
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 禁用和启用项
 /// </summary>
 /// <param name="Node"></param>
 /// <param name="Stat">true-启用项,false-禁用项</param>
 public void ChangeNodeStat(ContractBoiChangeNode Node, Boolean Stat)
 {
     for (int i = Node.Children.Count - 1; i >= 0; i--)
     {
         ChangeNodeStat(Node.Children[i], Stat);
         //if (!Stat && !Node.Children[i].IsUse)
         //{
         //    Node.Children.RemoveAt(i);
         //    RecursionDeleteNode(Node.Children[i]);
         //}
     }
     //updated by stang 20170603
     //规则更改:关联原始清单项,则只能禁用
     if (Node.OriginalBoi != null)
     //  if (Node.IsUse)
     {
         Node.StatId = Stat ? 1 : 0;
         if (!Stat)
         {
             if (!deleteList.Contains(Node))
             {
                 deleteList.Add(Node);
             }
         }
         else
         {
             if (deleteList.Contains(Node))
             {
                 deleteList.Remove(Node);
             }
         }
     }
     else
     {
         if (Node.ParentBoiNode != null)
         {
             Node.ParentBoiNode.Children.Remove(Node);
         }
         DeleteNode(Node);
     }
 }
Ejemplo n.º 12
0
        /// <summary>
        /// 将Boi列表转换为Node列表
        /// </summary>
        /// <param name="BoiList"></param>
        /// <returns></returns>
        private List <ContractBoiChangeNode> Convert(List <ContractBoi> BoiList)
        {
            List <ContractBoiChangeNode> lstBoiNode;
            List <ContractBoiChangeNode> lstRoot;

            lstBoiNode = BoiList.ConvertAll <ContractBoiChangeNode>(m =>
            {
                ContractBoiChangeNode node = HDAutoMapper.DynamicMap <ContractBoiChangeNode>(m);
                //生成变更的编辑界面使用合同字段作为最新的值,因此 将变更后的值赋值给合同字段
                node.CtrctAmount   = node.LatestAmount;
                node.CtrctPrjPrice = node.LatestPrice;
                node.CtrctQty      = node.LatestQty;
                node.OriginalBoi   = m;
                return(node);
            });
            lstRoot = lstBoiNode.FindAll(m => String.IsNullOrEmpty(m.ParentCode));
            RootList.AddRange(lstRoot);
            lstRoot.ForEach(m =>
            {
                RecursionNode(lstBoiNode, m);
            });
            return(lstBoiNode);
        }
Ejemplo n.º 13
0
 /// <summary>
 /// 更新扩展对象新增和修改的值
 /// </summary>
 /// <param name="Node"></param>
 void UpdateChangeEx(ContractBoiChangeNode Node)
 {
     if (Node.ChangeDetailEx == null)
     {
         Node.ChangeDetailEx = HDAutoMapper.DynamicMap <ContractBoqChangeDetailEx>(Node);
         ChangeDetailExList.Add(Node.ChangeDetailEx);
     }
     Node.ChangeDetailEx.AfAmount   = Node.CtrctAmount;
     Node.ChangeDetailEx.AfPrice    = Node.CtrctPrjPrice;
     Node.ChangeDetailEx.AfQty      = Node.CtrctQty;
     Node.ChangeDetailEx.ItemCode   = Node.ItemCode;
     Node.ChangeDetailEx.IItemCoe   = Node.IItemCoe;
     Node.ChangeDetailEx.ItemName   = Node.ItemName;
     Node.ChangeDetailEx.ParentCode = Node.ParentCode;
     Node.ChangeDetailEx.ItemNo     = Node.ItemNo;
     Node.ChangeDetailEx.Uom        = Node.Uom;
     if (Node.OriginalBoi != null)
     {
         Node.ChangeDetailEx.BefAmount    = Node.OriginalBoi.CtrctAmount;
         Node.ChangeDetailEx.BefPrjPrice  = Node.OriginalBoi.CtrctPrjPrice;
         Node.ChangeDetailEx.BefQty       = Node.OriginalBoi.CtrctQty;
         Node.ChangeDetailEx.ChangeQty    = Node.CtrctQty - Node.OriginalBoi.CtrctQty;
         Node.ChangeDetailEx.ChangePrice  = Node.CtrctPrjPrice - Node.OriginalBoi.CtrctPrjPrice;
         Node.ChangeDetailEx.ChangeAmount = Node.CtrctAmount - Node.OriginalBoi.CtrctAmount;
         if (Node.StatId != Node.OriginalBoi.StatId)
         {
             Node.ChangeDetailEx.ChangeType = Node.StatId == 1 ? ChangeType.Enable : ChangeType.Disable;
             if (Node.StatId == 0)
             {
                 Node.ChangeDetailEx.BefAmount    = Node.OriginalBoi.CtrctAmount;
                 Node.ChangeDetailEx.BefPrjPrice  = Node.OriginalBoi.CtrctPrjPrice;
                 Node.ChangeDetailEx.BefQty       = Node.OriginalBoi.CtrctQty;
                 Node.ChangeDetailEx.AfAmount     = 0;
                 Node.ChangeDetailEx.AfPrice      = 0;
                 Node.ChangeDetailEx.AfQty        = 0;
                 Node.ChangeDetailEx.ChangeQty    = 0 - Node.OriginalBoi.CtrctQty;
                 Node.ChangeDetailEx.ChangePrice  = 0 - Node.OriginalBoi.CtrctPrjPrice;
                 Node.ChangeDetailEx.ChangeAmount = 0 - Node.OriginalBoi.CtrctAmount;
             }
             else
             {
                 Node.ChangeDetailEx.BefAmount    = 0;
                 Node.ChangeDetailEx.BefPrjPrice  = 0;
                 Node.ChangeDetailEx.BefQty       = 0;
                 Node.ChangeDetailEx.AfAmount     = Node.OriginalBoi.CtrctAmount;
                 Node.ChangeDetailEx.AfPrice      = Node.OriginalBoi.CtrctPrjPrice;
                 Node.ChangeDetailEx.AfQty        = Node.OriginalBoi.CtrctQty;
                 Node.ChangeDetailEx.ChangeQty    = Node.OriginalBoi.CtrctQty;
                 Node.ChangeDetailEx.ChangePrice  = Node.OriginalBoi.CtrctPrjPrice;
                 Node.ChangeDetailEx.ChangeAmount = Node.OriginalBoi.CtrctAmount;
             }
         }
         else
         {
             Node.ChangeDetailEx.ChangeType = ChangeType.Update;
             Node.ChangeDetailEx.IsUpQty    = HasQtyChanged(Node);
             Node.ChangeDetailEx.IsUpPrice  = HasPriceChanged(Node);
             Node.ChangeDetailEx.IsUpInfo   = HasInfoChanged(Node);
         }
     }
     else
     {
         Node.ChangeDetailEx.BefAmount    = 0;
         Node.ChangeDetailEx.BefPrjPrice  = 0;
         Node.ChangeDetailEx.BefQty       = 0;
         Node.ChangeDetailEx.ChangeQty    = Node.CtrctQty;
         Node.ChangeDetailEx.ChangePrice  = Node.CtrctPrjPrice;
         Node.ChangeDetailEx.ChangeAmount = Node.CtrctAmount;
         Node.ChangeDetailEx.ChangeType   = ChangeType.Add;
     }
 }
Ejemplo n.º 14
0
        /// <summary>
        /// 检查节点数量是否变化
        /// </summary>
        /// <param name="Node"></param>
        /// <returns></returns>
        bool HasQtyChanged(ContractBoiChangeNode Node)
        {
            ContractBoi boi = Node.OriginalBoi;

            return(boi.CtrctQty != Node.CtrctQty);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 删除节点
        /// </summary>
        /// <param name="Node"></param>
        public void DeleteNode(ContractBoiChangeNode Node)
        {
            //已删除过,则返回
            if (!NodeList.Contains(Node))
            {
                return;
            }
            List <ContractBoiChangeNode> lstChildren = Node.Children.ToList();

            for (int i = lstChildren.Count - 1; i >= 0; i--)
            {
                DeleteNode(lstChildren[i]);
            }
            if (NodeList.Contains(Node))
            {
                NodeList.Remove(Node);
            }
            if (updateList.Contains(Node))
            {
                updateList.Remove(Node);
            }
            if (!deleteList.Contains(Node))
            {
                deleteList.Add(Node);
            }
            String strCode = null;
            int    iCode   = 0;

            if (Node.ParentBoiNode != null)
            {
                //删除节点的序号
                int iIndex = Node.ParentBoiNode.Children.IndexOf(Node);
                //删除节点不是最后一个
                if (iIndex < Node.ParentBoiNode.Children.Count - 1)
                {
                    //移除节点
                    Node.ParentBoiNode.Children.Remove(Node);
                    for (int i = iIndex; i < Node.ParentBoiNode.Children.Count; i++)
                    {
                        //对后面的节点的序号 统一减1
                        strCode = Node.ParentBoiNode.Children[i].ItemCode;
                        iCode   = System.Convert.ToInt32(strCode.Substring(strCode.Length - 3, 3));
                        iCode   = iCode - 1;
                        strCode = Node.ParentBoiNode.ItemCode + iCode.ToString().PadLeft(3, '0');
                        ChangeCode(Node.ParentBoiNode.Children[i], strCode);
                    }
                }
                CalcParentNode(Node.ParentBoiNode);
            }
            else
            {
                int iIndex = RootList.IndexOf(Node);
                //删除节点不是最后一个
                if (iIndex < RootList.Count - 1)
                {
                    //移除节点
                    RootList.Remove(Node);
                    for (int i = iIndex; i < RootList.Count; i++)
                    {
                        //对后面的节点的序号 统一减1
                        strCode = RootList[i].ItemCode;
                        iCode   = System.Convert.ToInt32(strCode);
                        iCode   = iCode - 1;
                        strCode = iCode.ToString().PadLeft(2, '0');
                        RootList[i].ItemCode = strCode;
                        ChangeCode(RootList[i], strCode);
                    }
                }
                else
                {
                    RootList.Remove(Node);
                }
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 检查节点单价是否变化
        /// </summary>
        /// <param name="Node"></param>
        /// <returns></returns>
        bool HasPriceChanged(ContractBoiChangeNode Node)
        {
            ContractBoi boi = Node.OriginalBoi;

            return(boi.CtrctPrjPrice != Node.CtrctPrjPrice);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 检查节点是否禁用、启用变化
        /// </summary>
        /// <param name="Node"></param>
        /// <returns></returns>
        bool HasDisableChanged(ContractBoiChangeNode Node)
        {
            ContractBoi boi = Node;

            return(boi.StatId != Node.StatId);
        }