public static TVAssetViewModel GetCustomerAsset(TVCustomerViewModel cv, int assetid) { foreach (TVAssetViewModel tvasset in cv.Children) { if (tvasset.Asset.ID == assetid) { return(tvasset); } } return(null); }
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); } }
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); } } }
/// <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); } } } }
/// <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); }
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); } } }
/// <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); } } }
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); } }
public static TVAssetViewModel GetAssetNode(int assetid, int customerid) { TVCustomerViewModel customer = GetCustomerNode(customerid); return(GetAssetDFS(customer, assetid)); }