C2024-005 - Completed some updates for nested folder selection (parent unselect)
This commit is contained in:
@@ -98,6 +98,7 @@ namespace VEPROMS
|
||||
|
||||
private Dictionary<TreeNode, ProcedureInfo> myProcedures = new Dictionary<TreeNode, ProcedureInfo>();
|
||||
private Dictionary<TreeNode, DocVersionInfo> myDocVersions = new Dictionary<TreeNode, DocVersionInfo>();
|
||||
private Dictionary<TreeNode, FolderInfo> myFolders = new Dictionary<TreeNode, FolderInfo>();
|
||||
private void frmBatchRefresh_Load(object sender, EventArgs e)
|
||||
{
|
||||
IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process.
|
||||
@@ -140,6 +141,8 @@ namespace VEPROMS
|
||||
//myTreeNodePath = new List<string>();
|
||||
myTV.Nodes.Clear();
|
||||
myDocVersions.Clear();
|
||||
myFolders.Clear();
|
||||
|
||||
FolderInfo fi = FolderInfo.GetTop();
|
||||
TreeNode tn = myTV.Nodes.Add(fi.Name);
|
||||
tn.Tag = fi;
|
||||
@@ -172,6 +175,11 @@ namespace VEPROMS
|
||||
|
||||
if (myTVdel.SelectedNode != null)
|
||||
myTVdel.SelectedNode.Expand();
|
||||
|
||||
//Expand if folders
|
||||
if (noProcs)
|
||||
myTVdel.ExpandAll();
|
||||
|
||||
this.Cursor = Cursors.Default;
|
||||
}
|
||||
|
||||
@@ -179,26 +187,52 @@ namespace VEPROMS
|
||||
private bool LoadChildFolders(FolderInfo fi, TreeNode tn, bool noProcs)
|
||||
{
|
||||
bool loadedWorkingDraft = false;
|
||||
bool loadedChildWorkingDraft = false; // B2021-060 flag when child folder working draft is loaded
|
||||
bool loadedChildWorkingDraft = false;
|
||||
|
||||
foreach (FolderInfo fic in fi.SortedChildFolders)
|
||||
{
|
||||
TreeNode tnc = tn.Nodes.Add(fic.Name);
|
||||
tnc.Tag = fic;
|
||||
|
||||
if (fic.ChildFolderCount > 0)
|
||||
{
|
||||
if (LoadChildFolders(fic, tnc, noProcs))
|
||||
{
|
||||
loadedChildWorkingDraft = true;
|
||||
// B2020-114 and C2020-035 only show folders the Set Admin can access
|
||||
}
|
||||
}
|
||||
|
||||
if (fic.FolderDocVersionCount > 0)
|
||||
{
|
||||
if (!LoadDocVersions(fic, tnc, noProcs))
|
||||
{
|
||||
tnc.Remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
loadedWorkingDraft = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add the folder to the dictionary
|
||||
if (!myFolders.ContainsKey(tnc))
|
||||
{
|
||||
myFolders.Add(tnc, fic);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (loadedChildWorkingDraft) loadedWorkingDraft = true; // B2021-060 if child folder working draft loaded set loadedWorkingDraft
|
||||
|
||||
if (loadedChildWorkingDraft)
|
||||
{
|
||||
loadedWorkingDraft = true;
|
||||
}
|
||||
|
||||
if (tn.Parent != null && !loadedWorkingDraft)
|
||||
{
|
||||
tn.Remove();
|
||||
}
|
||||
|
||||
return loadedWorkingDraft;
|
||||
}
|
||||
private bool LoadDocVersions(FolderInfo fic, TreeNode tnc, bool noProcs)
|
||||
@@ -1178,12 +1212,10 @@ namespace VEPROMS
|
||||
DiselectParentNodes(e.Node.Parent);
|
||||
DiselectChildNodes(e.Node.Nodes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
btnFixLinks.Enabled = AtLeastOneNodeChecked(); // C2017-030 support for Refresh Transitions/Update RO Values
|
||||
}
|
||||
|
||||
private void DiselectParentNodes(TreeNode parent)
|
||||
{
|
||||
while (parent != null)
|
||||
@@ -1193,7 +1225,6 @@ namespace VEPROMS
|
||||
parent = parent.Parent;
|
||||
}
|
||||
}
|
||||
|
||||
private void DiselectChildNodes(TreeNodeCollection childes)
|
||||
{
|
||||
foreach (TreeNode oneChild in childes)
|
||||
@@ -1203,8 +1234,6 @@ namespace VEPROMS
|
||||
DiselectChildNodes(oneChild.Nodes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void CheckChildNodes(TreeNode treeNode, bool ischecked)
|
||||
{
|
||||
foreach (TreeNode tn in treeNode.Nodes)
|
||||
@@ -1218,6 +1247,80 @@ namespace VEPROMS
|
||||
}
|
||||
}
|
||||
|
||||
//After check model to select and deselect nodes on the delete and annotation tree.
|
||||
private void myTV_AfterCheck_DelAnn(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (e.Action != TreeViewAction.Unknown)
|
||||
{
|
||||
if (e.Node.Nodes.Count > 0)
|
||||
{
|
||||
CheckChildNodes_DelAnn(e.Node, e.Node.Checked);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Node.Checked)
|
||||
{
|
||||
// Ensure child nodes follow the parent node's state
|
||||
CheckChildNodes_DelAnn(e.Node, e.Node.Checked);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Automatically deselect parent nodes if current node is unchecked
|
||||
if (swDeleteFolder.Value)
|
||||
DiselectParentNodes_DelAnn(e.Node);
|
||||
}
|
||||
|
||||
btnFixLinks.Enabled = AtLeastOneNodeChecked_DelAnn(); // Ensure button is enabled based on custom logic
|
||||
}
|
||||
private void DiselectParentNodes_DelAnn(TreeNode node)
|
||||
{
|
||||
TreeNode parent = node.Parent;
|
||||
while (parent != null)
|
||||
{
|
||||
parent.Checked = false;
|
||||
parent = parent.Parent;
|
||||
}
|
||||
}
|
||||
private void DiselectChildNodes_DelAnn(TreeNodeCollection children)
|
||||
{
|
||||
foreach (TreeNode child in children)
|
||||
{
|
||||
child.Checked = false;
|
||||
DiselectChildNodes_DelAnn(child.Nodes);
|
||||
}
|
||||
}
|
||||
private void CheckChildNodes_DelAnn(TreeNode treeNode, bool isChecked)
|
||||
{
|
||||
foreach (TreeNode tn in treeNode.Nodes)
|
||||
{
|
||||
tn.Checked = isChecked;
|
||||
|
||||
if (tn.Nodes.Count > 0)
|
||||
CheckChildNodes_DelAnn(tn, isChecked);
|
||||
}
|
||||
}
|
||||
private bool AtLeastOneNodeChecked_DelAnn()
|
||||
{
|
||||
foreach (TreeNode node in myTV.Nodes)
|
||||
{
|
||||
if (node.Checked || AnyChildNodeChecked_DelAnn(node))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private bool AnyChildNodeChecked_DelAnn(TreeNode node)
|
||||
{
|
||||
foreach (TreeNode childNode in node.Nodes)
|
||||
{
|
||||
if (childNode.Checked || AnyChildNodeChecked_DelAnn(childNode))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private ProgressBarItem _ProgressBar = null;
|
||||
|
||||
public ProgressBarItem ProgressBar
|
||||
@@ -1329,8 +1432,7 @@ namespace VEPROMS
|
||||
// new Admin Tools user interface for deletes
|
||||
private void sideNavItmDelete_Click(object sender, EventArgs e)
|
||||
{
|
||||
AdminToolType = E_AdminToolType.Delete;
|
||||
lblAdmToolProgressType.Text = "";
|
||||
AdminToolType = E_AdminToolType.Delete;
|
||||
setupProgessSteps1();
|
||||
|
||||
if (swDeleteFolder.Value)
|
||||
@@ -1407,10 +1509,20 @@ namespace VEPROMS
|
||||
break;
|
||||
|
||||
case E_AdminToolType.Delete:
|
||||
splitContainer3.Panel2Collapsed = false;
|
||||
progressSteps1.Items.Add(siOrphDatRecs);
|
||||
progressSteps1.Visible = true;
|
||||
progressSteps1.Refresh();
|
||||
if (swDeleteFolder.Value)
|
||||
{
|
||||
splitContainer3.Panel2Collapsed = false;
|
||||
progressSteps1.Items.Add(siOrphDatRecs);
|
||||
lblAdmToolProgressType.Text = "Repairing: ";
|
||||
progressSteps1.Visible = true;
|
||||
progressSteps1.Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
lblAdmToolProgressType.Text = "";
|
||||
splitContainer3.Panel2Collapsed = true;
|
||||
progressSteps1.Visible = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1612,18 +1724,17 @@ namespace VEPROMS
|
||||
//C2024-005 Delete Annotations, Delete Folders
|
||||
private void swDeleteAnnotations_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
setupProgessSteps1();
|
||||
swDeleteFolder.Value = !swDeleteAnnotations.Value;
|
||||
if (swDeleteFolder.Value)
|
||||
{
|
||||
ResetDelTV(true);
|
||||
setupProgessSteps1();
|
||||
}
|
||||
ResetDelTV(true);
|
||||
else
|
||||
ResetDelTV(false);
|
||||
}
|
||||
|
||||
private void swDeleteFolder_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
setupProgessSteps1();
|
||||
swDeleteAnnotations.Value = !swDeleteFolder.Value;
|
||||
if (swDeleteFolder.Value)
|
||||
ResetDelTV(true);
|
||||
@@ -1637,29 +1748,25 @@ namespace VEPROMS
|
||||
txtResults.Clear();
|
||||
txtProcess.Clear();
|
||||
|
||||
|
||||
if (swDeleteFolder.Value)
|
||||
{
|
||||
|
||||
if (FlexibleMessageBox.Show(this, "You sure you want to remove the selected folders and their contents?", "Confirm Folder Deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
|
||||
|
||||
//TODO process deletions of folders
|
||||
txtProcess.AppendText("Deleting Folders...");
|
||||
|
||||
//List<ProcedureInfo> pil = new List<ProcedureInfo>();
|
||||
//foreach (TreeNode tn in myProcedures.Keys)
|
||||
// if (tn.Checked)
|
||||
// pil.Add(myProcedures[tn]);
|
||||
|
||||
////Load Selected Folders
|
||||
//Load Selected Folders with docversions
|
||||
List<DocVersionInfo> dvil = new List<DocVersionInfo>();
|
||||
foreach (TreeNode tn in myDocVersions.Keys)
|
||||
if (tn.Checked)
|
||||
dvil.Add(myDocVersions[tn]);
|
||||
|
||||
ProcessDelete(dvil);
|
||||
//Load Selected Folders with docversions
|
||||
List<FolderInfo> ef = new List<FolderInfo>();
|
||||
foreach (TreeNode tn in myFolders.Keys)
|
||||
if (tn.Checked)
|
||||
ef.Add(myFolders[tn]);
|
||||
|
||||
ProcessDelete(dvil, ef);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1682,12 +1789,10 @@ namespace VEPROMS
|
||||
frmAnnotationsCleanup frmAnnoDel = new frmAnnotationsCleanup(this, pil, dvil);
|
||||
|
||||
frmAnnoDel.ShowDialog();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessDelete(List<DocVersionInfo> foldersToDelete)
|
||||
private void ProcessDelete(List<DocVersionInfo> foldersToDelete, List<FolderInfo> emptyFoldersToDelete)
|
||||
{
|
||||
DateTime pStart = DateTime.Now;
|
||||
txtProcess.AppendText(Environment.NewLine);
|
||||
@@ -1696,8 +1801,7 @@ namespace VEPROMS
|
||||
|
||||
foreach (var kvp in foldersToDelete)
|
||||
{
|
||||
//Gather folder information
|
||||
|
||||
//Gather folder information
|
||||
FolderInfo fi = (FolderInfo)kvp.ActiveParent;
|
||||
int itemID = (int)fi.FolderID;
|
||||
string folderName = fi.Name;
|
||||
@@ -1717,6 +1821,30 @@ namespace VEPROMS
|
||||
txtProcess.AppendText(Environment.NewLine);
|
||||
}
|
||||
|
||||
|
||||
//Delete non working info folders.
|
||||
foreach (var kvp in emptyFoldersToDelete)
|
||||
{
|
||||
//Gather folder information
|
||||
FolderInfo fi = (FolderInfo)kvp;
|
||||
int itemID = (int)fi.FolderID;
|
||||
string folderName = fi.Name;
|
||||
|
||||
// Perform the deletion operation
|
||||
bool deletionSuccessful = DeleteFolderByID(itemID);
|
||||
|
||||
// Update txtProcess with the progress
|
||||
if (deletionSuccessful)
|
||||
{
|
||||
txtProcess.AppendText($"Successfully deleted folder: {folderName} (ID: {itemID})");
|
||||
}
|
||||
else
|
||||
{
|
||||
txtProcess.AppendText($"Failed to delete folder: {folderName} (ID: {itemID})");
|
||||
}
|
||||
txtProcess.AppendText(Environment.NewLine);
|
||||
}
|
||||
|
||||
//Run Repair
|
||||
int prgStpIdx = -1;
|
||||
StepProgress(++prgStpIdx, 50);
|
||||
|
Reference in New Issue
Block a user