C20240-005 - Deleting Folder additions

This commit is contained in:
2024-07-29 15:57:54 -04:00
parent 6e6abbd759
commit 4644699df0
7 changed files with 416 additions and 323 deletions

View File

@@ -23519,6 +23519,90 @@ GO
==========================================================================================================
*/
/*
==========================================================================================================
Start: C2024-005: SQL to delete folders using admin tool
==========================================================================================================
*/
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'deleteFolderAdmin')
DROP PROCEDURE [dbo].[deleteFolderAdmin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2012 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[deleteFolderAdmin]
(
@FolderID int
)
WITH EXECUTE AS OWNER
AS
BEGIN TRY -- Try Block
BEGIN TRANSACTION
DELETE From Assignments WHERE [FolderID]=@FolderID
DELETE From Associations where VersionID in (select versionid from DocVersions where folderid = @FolderID)
DELETE From DocVersions where VersionID in (select versionid from DocVersions where folderid= @FolderID)
DELETE From DocVersions where [FolderID]=@FolderID
-- Delete from items where ItemID matches
DELETE FROM tblitems
WHERE ItemID IN (
SELECT DISTINCT ItemID
FROM docversions
WHERE folderID = @folderID
);
-- Delete from items where ItemID matches
DELETE FROM tblitems
WHERE ItemID IN (
SELECT DISTINCT ItemID
FROM docversions
WHERE folderID = @folderID
);
-- Delete from tblContents where ContentID matches
DELETE FROM tblContents
WHERE ContentID IN (
SELECT DISTINCT c.ContentID
FROM tblContents c
JOIN items i ON c.ContentID = i.ItemID
WHERE i.ItemID IN (
SELECT DISTINCT ItemID
FROM docversions
WHERE folderID = @folderID
)
);
DELETE From Folders WHERE [ParentID] = @FolderID
DELETE From Folders WHERE [FolderID] = @FolderID
IF( @@TRANCOUNT > 0 ) COMMIT
END TRY
BEGIN CATCH -- Catch Block
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
EXEC vlnErrorHandler
END CATCH
GO
/*
==========================================================================================================
End: C2024-005: SQL to delete folders using admin tool
==========================================================================================================
*/
/*
---------------------------------------------------------------------------
| ADD New Code Before this Block |
@@ -23552,8 +23636,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255)
set @RevDate = '07/18/2024 11:24'
set @RevDescription = 'C2024-005 Add an Admin tool that can delete a group of annotations.'
set @RevDate = '07/29/2024 11:24'
set @RevDescription = 'C2024-005 Add SQL for Admin tool delete folders.'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription

View File

@@ -530,7 +530,6 @@
this.superTooltip1.SetSuperTooltip(this.labelX13, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("labelX13.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(350, 175)));
this.labelX13.TabIndex = 38;
this.labelX13.Text = "Delete Folders";
this.labelX13.Visible = false;
//
// swDeleteAnnotations
//

View File

@@ -24,10 +24,14 @@ namespace VEPROMS
private bool IsAdministratorUser = false; //C2020-035 used to control what Set Amins can do
// C2017-030 - new Admin Tools user interface
// pass in session info to constructor
public frmBatchRefresh(SessionInfo sessionInfo)
private frmVEPROMS _veProms;
public frmBatchRefresh(SessionInfo sessionInfo, frmVEPROMS veProms)
{
InitializeComponent();
_MySessionInfo = sessionInfo;
_veProms = veProms;
if (sideNavItmDelete.Checked)
{
@@ -156,44 +160,16 @@ namespace VEPROMS
if (fi.ChildFolderCount > 0)
{
if (noProcs)
{
LoadFolders(fi, myTVdel, null);
}
else
{
TreeNode tn = new TreeNode(fi.Name);
tn.Tag = fi;
tn.StateImageIndex = -1; // Hide the checkbox for the root node
LoadChildFolders(fi, tn, noProcs);
myTVdel.Nodes.Add(tn);
}
TreeNode tn = new TreeNode(fi.Name);
tn.Tag = fi;
tn.StateImageIndex = -1; // Hide the checkbox for the root node
LoadChildFolders(fi, tn, noProcs);
myTVdel.Nodes.Add(tn);
}
if (myTVdel.SelectedNode != null)
myTVdel.SelectedNode.Expand();
this.Cursor = Cursors.Default;
//btnFixLinks.Enabled = false;
//this.Cursor = Cursors.WaitCursor;
////myTreeNodePath = new List<string>();
//myTVdel.Nodes.Clear();
//myDocVersions.Clear();
//FolderInfo fi = FolderInfo.GetTop();
//TreeNode tn = myTVdel.Nodes.Add(fi.Name );
//tn.Tag = fi;
//if (fi.ChildFolderCount > 0)
//{
// if (noProcs)
// {
// LoadBottomLevelFolders(fi, myTVdel);
// }
// else
// LoadChildFolders(fi, tn, noProcs);
//}
//if (myTVdel.SelectedNode != null)
// myTVdel.SelectedNode.Expand();
//this.Cursor = Cursors.Default;
}
// B2021-060 Higher level folders where being removed from the tree even if there was a child folder that containe a working draft set
@@ -222,100 +198,6 @@ namespace VEPROMS
tn.Remove();
return loadedWorkingDraft;
}
/// <summary>
/// Load only folders into treeview
/// </summary>
private void LoadFolders(FolderInfo fi, TreeView treeView, TreeNode parentNode)
{
foreach (FolderInfo fic in fi.SortedChildFolders)
{
TreeNode tnc = treeView.Nodes.Add(fic.Name);
tnc.Tag = fic;
if (fic.ChildFolderCount > 0)
{
// Recursively call for child folders
LoadFolders(fic, treeView, tnc);
}
else
{
if (fic.Name != "PROMS")
{
// If the folder is a bottom-level folder (no child folders), add it directly to the TreeView
//Working
//foreach (DocVersionInfo dvi in fic.FolderDocVersions)
//{
// myDocVersions.Add(tnc, dvi);
//}
// If parentNode is null, add to the root of the tree
if (parentNode == null)
{
// If the folder is a bottom-level folder (no child folders), add it directly to the TreeView
treeView.Nodes.Add(tnc);
foreach (DocVersionInfo dvi in fic.FolderDocVersions)
{
myDocVersions.Add(tnc, dvi);
}
}
else
{
// Otherwise, add to the parent node
parentNode.Nodes.Add(fic.Name);
foreach (DocVersionInfo dvi in fic.FolderDocVersions)
{
myDocVersions.Add(tnc, dvi);
}
}
}
}
}
//foreach (FolderInfo fic in fi.SortedChildFolders)
//{
// // Skip "PROMS" folder
// if (fic.Name == "PROMS")
// {
// continue;
// }
// //// Create a new tree node for the current folder
// TreeNode tnc = new TreeNode(fic.Name) { Tag = fic };
// // If parentNode is null, add to the root of the tree
// if (parentNode == null)
// {
// // If the folder is a bottom-level folder (no child folders), add it directly to the TreeView
// treeView.Nodes.Add(tnc);
// foreach (DocVersionInfo dvi in fic.FolderDocVersions)
// {
// myDocVersions.Add(tnc, dvi);
// }
// }
// else
// {
// // Otherwise, add to the parent node
// //parentNode.Nodes.Add(tnc);
// // If the folder is a bottom-level folder (no child folders), add it directly to the TreeView
// parentNode.Nodes.Add(fic.Name);
// foreach (DocVersionInfo dvi in fic.FolderDocVersions)
// {
// myDocVersions.Add(tnc, dvi);
// }
// }
// // Recursively call for child folders
// if (fic.ChildFolderCount > 0)
// {
// LoadFolders(fic, treeView, tnc);
// }
//}
}
private bool LoadDocVersions(FolderInfo fic, TreeNode tnc, bool noProcs)
{
bool rtnval = false;
@@ -1750,21 +1632,27 @@ namespace VEPROMS
if (swDeleteFolder.Value)
{
//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]);
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)
{
////Load Selected Folders
List<DocVersionInfo> dvil = new List<DocVersionInfo>();
foreach (TreeNode tn in myDocVersions.Keys)
if (tn.Checked)
dvil.Add(myDocVersions[tn]);
ProcessDelete(dvil);
//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
List<DocVersionInfo> dvil = new List<DocVersionInfo>();
foreach (TreeNode tn in myDocVersions.Keys)
if (tn.Checked)
dvil.Add(myDocVersions[tn]);
ProcessDelete(dvil);
}
}
else
{
@@ -1800,11 +1688,13 @@ namespace VEPROMS
foreach (var kvp in foldersToDelete)
{
int itemID = (int)kvp.ItemID;
string folderName = kvp.Name;
//Gather folder information
FolderInfo fi = (FolderInfo)kvp.ActiveParent;
int itemID = (int)fi.FolderID;
string folderName = fi.Name;
// Perform the deletion operation
// Assume DeleteFolderByID is a method that deletes the folder by its ItemID
bool deletionSuccessful = DeleteFolderByID(itemID);
// Update txtProcess with the progress
@@ -1818,13 +1708,29 @@ namespace VEPROMS
}
txtProcess.AppendText(Environment.NewLine);
}
//Run Repair
PurgeDisconnectedItems(); // Orphan Items
//rebuild
ResetDelTV(true);
}
// Example deletion method
private bool DeleteFolderByID(int itemID)
private bool DeleteFolderByID(int folderID)
{
// Implement your folder deletion logic here
// Return true if deletion was successful, false otherwise
return true; // Placeholder
try
{
//Delete
Folder.DeleteFolderAdmin(folderID);
//update treeview UI via veProms
_veProms.tv_FolderDelete(folderID);
return true;
}
catch
{
return false;
}
}
public List<ProcedureInfo> RetrieveChkAnnotations()

View File

@@ -216,6 +216,8 @@ namespace VEPROMS
set { _MyDocVersion = value; }
}
// C2015-022 setup the child PROMS window
public frmVEPROMS(frmVEPROMS myParent, DocVersionInfo myDocVersion)
{
@@ -254,6 +256,22 @@ namespace VEPROMS
tc.RefreshItem(myItemInfo);
}
public void tv_FolderDelete(int folderId)
{
// Create an instance of the event args if needed
var args = new vlnTreeFolderDeleteEventArgs(folderId);
// Trigger the deletion using the event arguments
tv.RemoveFolder(args.FolderId);
}
private bool Tv_DeleteFolder(object sender, vlnTreeFolderDeleteEventArgs args)
{
tv.RemoveFolder(args.FolderId);
return true;
}
private E_UCFImportOptions _UCFImportOptionsFromSettings;
public frmVEPROMS()
@@ -475,6 +493,7 @@ namespace VEPROMS
tv.OpenItem += new vlnTreeViewItemInfoEvent(tv_OpenItem);
tv.TabDisplay += new StepPanelTabDisplayEvent(tc_PanelTabDisplay);
tv.DeleteItemInfo += new vlnTreeViewItemInfoDeleteEvent(tv_DeleteItemInfo);
tv.DeleteFolder += new vlnTreeViewItemInfoDeleteFolderEvent(Tv_DeleteFolder);
tv.InsertItemInfo += new vlnTreeViewItemInfoInsertEvent(tv_InsertItemInfo);
tv.NodeInsert += new vlnTreeViewEvent(tv_NodeInsert);
tv.PasteItemInfo += new vlnTreeViewItemInfoPasteEvent(tv_PasteItemInfo);
@@ -1603,6 +1622,11 @@ namespace VEPROMS
return rtval;
}
private bool tv_DeleteFolder(object sender, vlnTreeItemInfoEventArgs args)
{
return true;
}
private bool tv_PasteItemInfo(object sender, vlnTreeItemInfoPasteEventArgs args)
{
return tc.PasteRTBItem(args.MyItemInfo, args.CopyStartID, args.PasteType, (int)args.Type);
@@ -2741,7 +2765,7 @@ namespace VEPROMS
void btnAdministrativeTools_Click(object sender, EventArgs e)
{
frmBatchRefresh frm = new frmBatchRefresh(MySessionInfo);
frmBatchRefresh frm = new frmBatchRefresh(MySessionInfo, this);
frm.ProgressBar = bottomProgBar;
frm.ShowDialog(this);
}