C20240-005 - Deleting Folder additions
This commit is contained in:
parent
6e6abbd759
commit
4644699df0
@ -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
|
||||
|
@ -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
|
||||
//
|
||||
|
@ -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)
|
||||
{
|
||||
@ -155,12 +159,6 @@ namespace VEPROMS
|
||||
FolderInfo fi = FolderInfo.GetTop();
|
||||
|
||||
if (fi.ChildFolderCount > 0)
|
||||
{
|
||||
if (noProcs)
|
||||
{
|
||||
LoadFolders(fi, myTVdel, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
TreeNode tn = new TreeNode(fi.Name);
|
||||
tn.Tag = fi;
|
||||
@ -168,32 +166,10 @@ namespace VEPROMS
|
||||
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,6 +1632,11 @@ namespace VEPROMS
|
||||
|
||||
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...");
|
||||
|
||||
@ -1766,6 +1653,7 @@ namespace VEPROMS
|
||||
|
||||
ProcessDelete(dvil);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Write progress status
|
||||
@ -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()
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -1433,6 +1433,31 @@ namespace VEPROMS.CSLA.Library
|
||||
throw new DbCslaException("Folder.Remove", ex);
|
||||
}
|
||||
}
|
||||
[Transactional(TransactionalTypes.TransactionScope)]
|
||||
public static void DeleteFolderAdmin(int folderID)
|
||||
{
|
||||
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Folder.Remove", 0);
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
{
|
||||
using (SqlCommand cm = cn.CreateCommand())
|
||||
{
|
||||
cm.CommandType = CommandType.StoredProcedure;
|
||||
cm.CommandTimeout = Database.SQLTimeout;
|
||||
cm.CommandText = "deleteFolderAdmin";
|
||||
cm.Parameters.AddWithValue("@FolderID", folderID);
|
||||
cm.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_MyLog.IsErrorEnabled) _MyLog.Error("Folder.Remove", ex);
|
||||
throw new DbCslaException("Folder.Remove", ex);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region Exists
|
||||
public static bool Exists(int folderID)
|
||||
@ -1536,6 +1561,8 @@ namespace VEPROMS.CSLA.Library
|
||||
// Needs to be overriden to add new validation rules
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
} // Class
|
||||
#region Converter
|
||||
|
@ -167,6 +167,8 @@ namespace VEPROMS.CSLA.Library
|
||||
tn.ResetNode("Dummy GetFolder");
|
||||
return tn;
|
||||
}
|
||||
|
||||
|
||||
// public abstract void LoadChildren();
|
||||
//private long _Start;
|
||||
//private Dictionary<string, long> _Timings=new Dictionary<string,long>();
|
||||
|
@ -26,6 +26,7 @@ namespace Volian.Controls.Library
|
||||
public delegate void vlnTreeViewItemInfoEvent(object sender, vlnTreeItemInfoEventArgs args);
|
||||
public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args);
|
||||
public delegate bool vlnTreeViewItemInfoDeleteEvent(object sender, vlnTreeItemInfoEventArgs args);
|
||||
public delegate bool vlnTreeViewItemInfoDeleteFolderEvent(object sender, vlnTreeFolderDeleteEventArgs args);
|
||||
public delegate bool vlnTreeViewItemInfoInsertEvent(object sender, vlnTreeItemInfoInsertEventArgs args);
|
||||
public delegate bool vlnTreeViewItemInfoPasteEvent(object sender, vlnTreeItemInfoPasteEventArgs args);
|
||||
public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args);
|
||||
@ -220,6 +221,15 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
public class vlnTreeFolderDeleteEventArgs : EventArgs
|
||||
{
|
||||
public int FolderId { get; }
|
||||
|
||||
public vlnTreeFolderDeleteEventArgs(int folderId)
|
||||
{
|
||||
FolderId = folderId;
|
||||
}
|
||||
}
|
||||
public enum E_InsertType {Before, After, Child};
|
||||
public partial class vlnTreeItemInfoInsertEventArgs
|
||||
{
|
||||
@ -427,6 +437,12 @@ namespace Volian.Controls.Library
|
||||
if (DeleteItemInfo != null) return DeleteItemInfo(sender, args);
|
||||
return false;
|
||||
}
|
||||
public event vlnTreeViewItemInfoDeleteFolderEvent DeleteFolder;
|
||||
private bool OnDeleteFolder(object sender, vlnTreeFolderDeleteEventArgs args)
|
||||
{
|
||||
if (DeleteItemInfo != null) return DeleteFolder(sender, args);
|
||||
return false;
|
||||
}
|
||||
public event vlnTreeViewItemInfoInsertEvent InsertItemInfo;
|
||||
private bool OnInsertItemInfo(object sender, vlnTreeItemInfoInsertEventArgs args)
|
||||
{
|
||||
@ -3567,6 +3583,41 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void RemoveFolder(int folderId)
|
||||
{
|
||||
TreeNode nodeToRemove = FindNodeById(folderId, this.Nodes);
|
||||
if (nodeToRemove != null)
|
||||
{
|
||||
// Perform the removal logic
|
||||
nodeToRemove.Remove(); // This removes the node from its parent
|
||||
}
|
||||
}
|
||||
private TreeNode FindNodeById(int folderId, TreeNodeCollection nodes)
|
||||
{
|
||||
foreach (TreeNode node in nodes)
|
||||
{
|
||||
VETreeNode vetNode = node as VETreeNode;
|
||||
if (vetNode != null)
|
||||
{
|
||||
FolderInfo folderInfo = vetNode.VEObject as FolderInfo;
|
||||
if (folderInfo != null && folderInfo.FolderID == folderId)
|
||||
{
|
||||
return node;
|
||||
}
|
||||
else
|
||||
{
|
||||
TreeNode foundNode = FindNodeById(folderId, node.Nodes);
|
||||
if (foundNode != null)
|
||||
{
|
||||
return foundNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private bool DeleteItemInfoAndChildren(ItemInfo ii)
|
||||
{
|
||||
DateTime dtStart = DateTime.Now;
|
||||
|
Loading…
x
Reference in New Issue
Block a user