コード例 #1
0
 public static TVAssetViewModel GetCustomerAsset(TVCustomerViewModel cv, int assetid)
 {
     foreach (TVAssetViewModel tvasset in cv.Children)
     {
         if (tvasset.Asset.ID == assetid)
         {
             return(tvasset);
         }
     }
     return(null);
 }
コード例 #2
0
        private void GetAllItems()
        {
            AllItems?.Clear();
            FullyObservableCollection <TVCustomerModel> customers = GetTVCustomers();

            foreach (TVCustomerModel cm in customers)
            {
                //add customer to tree
                TreeViewItemViewModel customer = new TVCustomerViewModel(cm);

                FullyObservableCollection <AssetModel> assets = GetCustomerChildAssets(cm.ID);
                foreach (AssetModel am in assets)
                {
                    TVAssetViewModel asset = new TVAssetViewModel(am, null);
                    GetAllSubItems(asset);
                    customer.Children.Add(asset);
                }
                AllItems.Add(customer);
            }
        }
コード例 #3
0
 private void ExecuteDeleteCustomer(object parameter)
 {
     if (parameter.GetType().Equals(typeof(TVCustomerViewModel)))
     {
         TVCustomerViewModel customer = parameter as TVCustomerViewModel;
         IMessageBoxService  msg      = new MessageBoxService();
         if (customer.Children.Count == 0)
         {
             if (msg.ShowMessage("Do you want to delete " + customer.Customer.Name, "Delete Customer: " + customer.Customer.Name, GenericMessageBoxButton.OKCancel, GenericMessageBoxIcon.Question) == GenericMessageBoxResult.OK)
             {
                 Customers.Remove(customer);
                 DeleteItem(customer.Customer.ID, "Customers");
             }
         }
         else
         {
             msg.ShowMessage(customer.Customer.Name + " has Assets and cannot be deleted" + "\n\nDelete the Assets first and then delete the customer.",
                             "Unable to Delete Customer: " + customer.Customer.Name, GenericMessageBoxButton.OK, GenericMessageBoxIcon.Information);
         }
     }
 }
コード例 #4
0
        /// <summary>
        /// Delete asset matching assetid. Child assets are also deleted
        /// </summary>
        /// <param name="assetid">Current Asset ID</param>
        /// <param name="assetparentid">Asset parent ID</param>
        /// <param name="customerid">Asset customer ID</param>
        public static void DeleteAssetDFS(TVAssetViewModel tvasset)
        {
            Window owner              = Application.Current.Windows[0];
            TVCustomerViewModel cm    = GetCustomerNode(tvasset.Asset.CustomerID);
            TVAssetViewModel    asset = null;

            asset = GetAssetDFS(cm, tvasset.Asset.ID);
            TVAssetViewModel assetparent = null;

            assetparent = GetAssetDFS(cm, tvasset.Asset.ParentAssetID);

            if (asset != null)
            {
                if (assetparent != null)
                {
                    assetparent.Children.Remove(asset);
                }
                else
                {
                    cm.Children.Remove(asset);
                }

                SetParentAssetID(tvasset.Asset.ID, 0);

                var stack = new Stack <TVAssetViewModel>();
                stack.Push(asset);
                while (stack.Count != 0)
                {
                    TVAssetViewModel current = stack.Pop();
                    DeleteAsset((current).Asset);
                    CloseRelatedWindow(current.Asset.ID, owner);
                    LogMovement(ActivityType.Deleted, current.Asset.ID, tvasset.Asset.CustomerID, 0);

                    foreach (TVAssetViewModel child in (current.Children).Reverse())
                    {
                        stack.Push(child);
                    }
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Depth first search of asset tree for the given node
        /// If found the node is returned as a static variable
        /// else null
        /// </summary>
        /// This avoids recursion and finds the first occurrence of the target node
        /// in the case where there could be multiple instances or circular references.
        /// Need to be careful about size of stack. Data tree shape might prefer BFS instead.
        /// Loop should run faster than recursion
        /// <returns></returns>
        public static TVAssetViewModel GetAssetDFS(TVCustomerViewModel cv, int targetid)
        {
            var stack = new Stack <TVAssetViewModel>();

            foreach (TVAssetViewModel tv in cv.Children)
            {
                stack.Push(tv);
            }
            while (stack.Count != 0)
            {
                TVAssetViewModel current = stack.Pop();
                //assign current node to found asset
                if (current.Asset.ID == targetid)
                {
                    return(current);
                }

                foreach (TVAssetViewModel child in (current.Children).Reverse())
                {
                    stack.Push(child);
                }
            }
            return(null);
        }
コード例 #6
0
        private void ExecuteAddNewAssetCM(object parameter)
        {
            IMessageBoxService msg = new MessageBoxService();

            if (parameter.GetType().Equals(typeof(TVAssetViewModel)))
            {
                TVAssetViewModel asset  = parameter as TVAssetViewModel;
                AssetModel       result = msg.OpenAssetDlg(asset.Asset.CustomerID, asset.Asset.ID);
                if (result != null)
                {
                    AddAssetNode(result);
                }
            }
            else
            if (parameter.GetType().Equals(typeof(TVCustomerViewModel)))
            {
                TVCustomerViewModel customer = parameter as TVCustomerViewModel;
                AssetModel          result   = msg.OpenAssetDlg(customer.Customer.ID, 0);
                if (result != null)
                {
                    AddAssetNode(result);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Non-recursive version
        /// </summary>
        /// <param name="theseNodes"></param>
        /// <param name="cm"></param>
        public void GetFilteredAsset(ObservableCollection <TreeViewItemViewModel> theseNodes, TVCustomerViewModel cm)
        {
            var stack = new Stack <TVAssetViewModel>();

            foreach (TVAssetViewModel tv in theseNodes)
            {
                stack.Push(tv);
            }
            while (stack.Count != 0)
            {
                TVAssetViewModel current = stack.Pop();
                //  if (assets.Contains(current.Asset.AssetID))
                if (assets.ContainsKey(current.Asset.ID))
                {
                    if (current.Parent != null)
                    {
                        current.Parent.IsExpanded = true;
                    }
                    current.IsFiltered = true;
                    current.IsExpanded = true;
                    cm.IsExpanded      = true;
                    //optimise search by removing element when found
                    //          var id = assets.Where(x => x == current.Asset.AssetID).FirstOrDefault();
                    //        assets.Remove(id);

                    assets.Remove(current.Asset.ID);
                }
                foreach (TVAssetViewModel child in (current.Children).Reverse())
                {
                    stack.Push(child);
                }
            }
        }
コード例 #8
0
 private void RecursivelyGetFilteredAsset2(ObservableCollection <TreeViewItemViewModel> theseNodes, TVCustomerViewModel cm)
 {
     foreach (TVAssetViewModel am in theseNodes)
     {
         if (assets.ContainsKey(am.Asset.ID))
         {
             if (am.Parent != null)
             {
                 am.Parent.IsExpanded = true;
             }
             am.IsFiltered = true;
             am.IsExpanded = true;
             cm.IsExpanded = true;
             //optimise search by removing element when found
             assets.Remove(am.Asset.ID);
         }
         RecursivelyGetFilteredAsset2(am.Children, cm);
     }
 }
コード例 #9
0
        public static TVAssetViewModel GetAssetNode(int assetid, int customerid)
        {
            TVCustomerViewModel customer = GetCustomerNode(customerid);

            return(GetAssetDFS(customer, assetid));
        }