B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced
This commit is contained in:
parent
f234174a51
commit
b6d69fbd4c
@ -20952,6 +20952,80 @@ GO
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
Start: B2022-049 Unlink single procedure for enhanced (if data got corrupted)
|
||||
==========================================================================================================
|
||||
*/
|
||||
If Exists(SELECT * FROM sys.objects Where name = 'vesp_PurgeProcLinkedItemsAndChildren' AND type in (N'P'))
|
||||
DROP PROCEDURE [dbo].[vesp_PurgeProcLinkedItemsAndChildren]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
/*****************************************************************************
|
||||
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
Copyright 2022 - Volian Enterprises, Inc. All rights reserved.
|
||||
*****************************************************************************/
|
||||
|
||||
Create PROCEDURE [dbo].[vesp_PurgeProcLinkedItemsAndChildren](@EnhanceID int, @EnhType int)
|
||||
|
||||
WITH EXECUTE AS OWNER
|
||||
AS
|
||||
BEGIN TRY -- Try Block
|
||||
BEGIN TRANSACTION
|
||||
-- Only unlink for the input procedure number & its children. Do not follow the links, i.e. source or enhanced. This
|
||||
-- can be used for removing link information if the links between the 2, source & enhanced, get corrupted.
|
||||
declare @Enh1 TABLE
|
||||
(
|
||||
ID int,
|
||||
xConfig xml
|
||||
)
|
||||
insert into @Enh1
|
||||
select CC.ContentID, CC.xConfig from (select *, cast(config as xml) xConfig from Contents) CC
|
||||
JOIN vefn_ChildItems(@EnhanceID) VCI ON VCI.ContentID = CC.ContentID
|
||||
cross apply VEFN_GetNewEnhancedData(VCI.itemid,@EnhType) VEN
|
||||
|
||||
Update @Enh1 Set xConfig.modify('delete //Enhanced[@Type=sql:variable("@EnhType")]') From @Enh1
|
||||
|
||||
Update CC Set Config = cast(xconfig as varchar(max)) From Contents CC
|
||||
Join @Enh1 EE ON EE.ID = CC.ContentID
|
||||
|
||||
|
||||
SELECT [ContentID],[Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID],[LastChanged],
|
||||
(SELECT COUNT(*) FROM [Details] WHERE [Details].[ContentID]=[Contents].[ContentID]) [DetailCount],
|
||||
(SELECT COUNT(*) FROM [Entries] WHERE [Entries].[ContentID]=[Contents].[ContentID]) [EntryCount],
|
||||
(SELECT COUNT(*) FROM [Grids] WHERE [Grids].[ContentID]=[Contents].[ContentID]) [GridCount],
|
||||
(SELECT COUNT(*) FROM [Images] WHERE [Images].[ContentID]=[Contents].[ContentID]) [ImageCount],
|
||||
(SELECT COUNT(*) FROM [Items] WHERE [Items].[ContentID]=[Contents].[ContentID]) [ItemCount],
|
||||
(SELECT COUNT(*) FROM [Parts] WHERE [Parts].[ContentID]=[Contents].[ContentID]) [PartCount],
|
||||
(SELECT COUNT(*) FROM [RoUsages] WHERE [RoUsages].[ContentID]=[Contents].[ContentID]) [RoUsageCount],
|
||||
(SELECT COUNT(*) FROM [Transitions] WHERE [Transitions].[FromID]=[Contents].[ContentID]) [TransitionCount],
|
||||
(SELECT COUNT(*) FROM [ZContents] WHERE [ZContents].[ContentID]=[Contents].[ContentID]) [ZContentCount]
|
||||
FROM [Contents] where ContentID in (Select ID From @Enh1)
|
||||
|
||||
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
|
||||
|
||||
IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_PurgeProcLinkedItemsAndChildren] Succeeded'
|
||||
ELSE PRINT 'Procedure Creation: [vesp_PurgeProcLinkedItemsAndChildren] Error on Creation'
|
||||
GO
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
End: B2022-049 Unlink single procedure for enhanced (if data got corrupted) [Version 2.xx]
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
@ -20986,8 +21060,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '07/29/2022 9:00 AM'
|
||||
set @RevDescription = 'B2022-082: Search not finding occurrences that use bold and underline'
|
||||
set @RevDate = '08/03/2022 9:00 AM'
|
||||
set @RevDescription = 'B2022-049 Unlink single procedure for enhanced (if data got corrupted) '
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
@ -20952,6 +20952,80 @@ GO
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
Start: B2022-049 Unlink single procedure for enhanced (if data got corrupted)
|
||||
==========================================================================================================
|
||||
*/
|
||||
If Exists(SELECT * FROM sys.objects Where name = 'vesp_PurgeProcLinkedItemsAndChildren' AND type in (N'P'))
|
||||
DROP PROCEDURE [dbo].[vesp_PurgeProcLinkedItemsAndChildren]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
/*****************************************************************************
|
||||
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
Copyright 2022 - Volian Enterprises, Inc. All rights reserved.
|
||||
*****************************************************************************/
|
||||
|
||||
Create PROCEDURE [dbo].[vesp_PurgeProcLinkedItemsAndChildren](@EnhanceID int, @EnhType int)
|
||||
|
||||
WITH EXECUTE AS OWNER
|
||||
AS
|
||||
BEGIN TRY -- Try Block
|
||||
BEGIN TRANSACTION
|
||||
-- Only unlink for the input procedure number & its children. Do not follow the links, i.e. source or enhanced. This
|
||||
-- can be used for removing link information if the links between the 2, source & enhanced, get corrupted.
|
||||
declare @Enh1 TABLE
|
||||
(
|
||||
ID int,
|
||||
xConfig xml
|
||||
)
|
||||
insert into @Enh1
|
||||
select CC.ContentID, CC.xConfig from (select *, cast(config as xml) xConfig from Contents) CC
|
||||
JOIN vefn_ChildItems(@EnhanceID) VCI ON VCI.ContentID = CC.ContentID
|
||||
cross apply VEFN_GetNewEnhancedData(VCI.itemid,@EnhType) VEN
|
||||
|
||||
Update @Enh1 Set xConfig.modify('delete //Enhanced[@Type=sql:variable("@EnhType")]') From @Enh1
|
||||
|
||||
Update CC Set Config = cast(xconfig as varchar(max)) From Contents CC
|
||||
Join @Enh1 EE ON EE.ID = CC.ContentID
|
||||
|
||||
|
||||
SELECT [ContentID],[Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID],[LastChanged],
|
||||
(SELECT COUNT(*) FROM [Details] WHERE [Details].[ContentID]=[Contents].[ContentID]) [DetailCount],
|
||||
(SELECT COUNT(*) FROM [Entries] WHERE [Entries].[ContentID]=[Contents].[ContentID]) [EntryCount],
|
||||
(SELECT COUNT(*) FROM [Grids] WHERE [Grids].[ContentID]=[Contents].[ContentID]) [GridCount],
|
||||
(SELECT COUNT(*) FROM [Images] WHERE [Images].[ContentID]=[Contents].[ContentID]) [ImageCount],
|
||||
(SELECT COUNT(*) FROM [Items] WHERE [Items].[ContentID]=[Contents].[ContentID]) [ItemCount],
|
||||
(SELECT COUNT(*) FROM [Parts] WHERE [Parts].[ContentID]=[Contents].[ContentID]) [PartCount],
|
||||
(SELECT COUNT(*) FROM [RoUsages] WHERE [RoUsages].[ContentID]=[Contents].[ContentID]) [RoUsageCount],
|
||||
(SELECT COUNT(*) FROM [Transitions] WHERE [Transitions].[FromID]=[Contents].[ContentID]) [TransitionCount],
|
||||
(SELECT COUNT(*) FROM [ZContents] WHERE [ZContents].[ContentID]=[Contents].[ContentID]) [ZContentCount]
|
||||
FROM [Contents] where ContentID in (Select ID From @Enh1)
|
||||
|
||||
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
|
||||
|
||||
IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_PurgeProcLinkedItemsAndChildren] Succeeded'
|
||||
ELSE PRINT 'Procedure Creation: [vesp_PurgeProcLinkedItemsAndChildren] Error on Creation'
|
||||
GO
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
End: B2022-049 Unlink single procedure for enhanced (if data got corrupted) [Version 2.xx]
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
@ -20986,8 +21060,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '07/29/2022 9:00 AM'
|
||||
set @RevDescription = 'B2022-082: Search not finding occurrences that use bold and underline'
|
||||
set @RevDate = '08/03/2022 9:00 AM'
|
||||
set @RevDescription = 'B2022-049 Unlink single procedure for enhanced (if data got corrupted) '
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
@ -1718,9 +1718,11 @@ namespace VEPROMS.CSLA.Library
|
||||
[Serializable()]
|
||||
private class EnhancedUnlinkCriteria
|
||||
{
|
||||
public EnhancedUnlinkCriteria(int? enhancedID)
|
||||
public EnhancedUnlinkCriteria(int? enhancedID, int? enhType, bool onlyCur)
|
||||
{
|
||||
_EnhancedID = enhancedID;
|
||||
_EnhType = enhType;
|
||||
_OnlyCur = onlyCur;
|
||||
}
|
||||
private int? _EnhancedID;
|
||||
public int? EnhancedID
|
||||
@ -1728,10 +1730,58 @@ namespace VEPROMS.CSLA.Library
|
||||
get { return _EnhancedID; }
|
||||
set { _EnhancedID = value; }
|
||||
}
|
||||
private int? _EnhType;
|
||||
public int? EnhType
|
||||
{
|
||||
get { return _EnhType; }
|
||||
set { _EnhType = value; }
|
||||
}
|
||||
private bool _OnlyCur;
|
||||
public bool OnlyCur
|
||||
{
|
||||
get { return _OnlyCur; }
|
||||
set { _OnlyCur = value; }
|
||||
}
|
||||
}
|
||||
|
||||
private void DataPortal_Fetch(EnhancedUnlinkCriteria criteria)
|
||||
{
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced. To fix this problem,
|
||||
// a sql script was added 'vesp_PurgeProcLinkedItemsAndChildren' that only removes link information within the
|
||||
// input procedure, i.e. does not remove them from linked procedure.
|
||||
if (criteria.OnlyCur)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
{
|
||||
using (SqlCommand cm = cn.CreateCommand())
|
||||
{
|
||||
cm.CommandType = CommandType.StoredProcedure;
|
||||
cm.CommandText = "vesp_PurgeProcLinkedItemsAndChildren";
|
||||
cm.Parameters.AddWithValue("@EnhanceID", criteria.EnhancedID); // note query had 'EnhanceID', not 'EnhancedID'
|
||||
cm.Parameters.AddWithValue("@EnhType", criteria.EnhType);
|
||||
cm.CommandTimeout = Database.DefaultTimeout;
|
||||
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
||||
{
|
||||
IsReadOnly = false;
|
||||
while (dr.Read())
|
||||
{
|
||||
ContentInfo contentInfo = new ContentInfo(dr);
|
||||
this.Add(contentInfo);
|
||||
}
|
||||
IsReadOnly = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Database.LogException("EnhancedUnlinkCriteria.DataPortal_Fetch", ex);
|
||||
throw new DbCslaException("EnhancedUnlinkCriteria.DataPortal_Fetch", ex);
|
||||
}
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
@ -1762,11 +1812,11 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
}
|
||||
|
||||
public static ContentInfoList DoEnhancedUnlink(int enhancedID)
|
||||
public static ContentInfoList DoEnhancedUnlink(int enhancedID, int enhType, bool onlyCur)
|
||||
{
|
||||
try
|
||||
{
|
||||
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new EnhancedUnlinkCriteria(enhancedID));
|
||||
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new EnhancedUnlinkCriteria(enhancedID, enhType, onlyCur));
|
||||
return tmp;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -2602,11 +2602,13 @@ namespace VEPROMS.CSLA.Library
|
||||
//}
|
||||
#endregion
|
||||
#region UnlinkEnhanced
|
||||
public void DoUnlinkEnhanced(ItemInfo enhii)
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced
|
||||
// Add parameters to be passed down to query to only remove links from current procedure
|
||||
public void DoUnlinkEnhanced(ItemInfo enhii, int enhType, bool onlyCur)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (ContentInfoList cil = ContentInfoList.DoEnhancedUnlink(enhii.ItemID))
|
||||
using (ContentInfoList cil = ContentInfoList.DoEnhancedUnlink(enhii.ItemID, enhType, onlyCur))
|
||||
{
|
||||
foreach (ContentInfo ci in cil)
|
||||
{
|
||||
@ -7373,7 +7375,8 @@ namespace VEPROMS.CSLA.Library
|
||||
if (seds != null && seds.Count != 0)
|
||||
{
|
||||
ItemInfo srcItem = ItemInfo.Get(seds[0].ItemID);
|
||||
if (srcItem.DisplayTextKeepSpecialChars != ii.DisplayTextKeepSpecialChars)
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced. Null reference check
|
||||
if (srcItem != null && srcItem.DisplayTextKeepSpecialChars != ii.DisplayTextKeepSpecialChars)
|
||||
{
|
||||
if (retiil == null) retiil = new ItemInfoList(ii);
|
||||
else retiil.AddItem(ii);
|
||||
|
@ -1474,22 +1474,26 @@ namespace VEPROMS.CSLA.Library
|
||||
// Find hls in enhanced in order to get its notes to set their config to
|
||||
// point back to the new source's note itemid.
|
||||
ItemInfo enhCtItem = null;
|
||||
while (enhCtItem == null && enhIndxCt < enhHls.Cautions.Count)
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced. Null reference check
|
||||
if (enhHls.Cautions != null)
|
||||
{
|
||||
ItemInfo enhTstCaut = enhHls.Cautions[enhIndxCt];
|
||||
StepConfig enhTstCautCfg = enhTstCaut.MyConfig as StepConfig;
|
||||
if (enhTstCautCfg.MyEnhancedDocuments.Count > 0)
|
||||
while (enhCtItem == null && enhIndxCt < enhHls.Cautions.Count)
|
||||
{
|
||||
foreach (EnhancedDocument enhCt in enhTstCaut.GetMyEnhancedDocuments())
|
||||
ItemInfo enhTstCaut = enhHls.Cautions[enhIndxCt];
|
||||
StepConfig enhTstCautCfg = enhTstCaut.MyConfig as StepConfig;
|
||||
if (enhTstCautCfg.MyEnhancedDocuments.Count > 0)
|
||||
{
|
||||
if (enhCt.Type == 0)
|
||||
foreach (EnhancedDocument enhCt in enhTstCaut.GetMyEnhancedDocuments())
|
||||
{
|
||||
enhCtItem = enhTstCaut;
|
||||
break;
|
||||
if (enhCt.Type == 0)
|
||||
{
|
||||
enhCtItem = enhTstCaut;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (enhCtItem == null) enhIndxCt++;
|
||||
}
|
||||
if (enhCtItem == null) enhIndxCt++;
|
||||
}
|
||||
if (enhCtItem != null)
|
||||
{
|
||||
|
@ -1686,7 +1686,9 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
public void UnlinkEnhanced(ItemInfo enhII)
|
||||
{
|
||||
enhII.DoUnlinkEnhanced(enhII);
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced
|
||||
// Pass in to unlink as before this change
|
||||
enhII.DoUnlinkEnhanced(enhII, 0, false);
|
||||
SetFocus();
|
||||
}
|
||||
public ItemInfo AddMissingEnhancedStep(ItemInfo ii, int EnhType)
|
||||
|
@ -183,7 +183,9 @@ namespace Volian.Controls.Library
|
||||
if (bi.Name.StartsWith("btnEnhanced"))
|
||||
existingEnhancedButtons.Add(bi.Name);
|
||||
bool inSource = dveds[0].Type != 0;
|
||||
int buttonsNeeded = inSource ? dveds.Count : (dveds.Count * 2); // enhanced items need unlink button also.
|
||||
int buttonsNeeded = inSource ? dveds.Count : (dveds.Count * 2); // enhanced items need unlink button also.
|
||||
// if in view only mode, don't do unlink
|
||||
if (!inSource && MyEditItem != null && MyEditItem.MyStepPanel.VwMode == E_ViewMode.View) buttonsNeeded--;
|
||||
if (MyItemInfo.IsSection && !MyItemInfo.IsStepSection) buttonsNeeded = 0; // no buttons for word sections
|
||||
if (buttonsNeeded > existingEnhancedButtons.Count) // add buttons
|
||||
{
|
||||
@ -195,7 +197,8 @@ namespace Volian.Controls.Library
|
||||
biEnhanced.Click += btnEnhancedGoTo_Click;
|
||||
myButtonItem.SubItems.Add(biEnhanced);
|
||||
existingEnhancedButtons.Add(biEnhanced.Name);
|
||||
if (!inSource)
|
||||
// if in view only mode, don't do unlink
|
||||
if (!inSource && MyEditItem != null && MyEditItem.MyStepPanel.VwMode != E_ViewMode.View)
|
||||
{
|
||||
// add unlink buttons:
|
||||
buttonName = string.Format("btnEnhancedUnlink{0}", dved.Type);
|
||||
|
@ -1024,6 +1024,54 @@ namespace Volian.Controls.Library
|
||||
cm.MenuItems.Add("Incoming Transitions", new EventHandler(mi_Click));
|
||||
}
|
||||
#endregion
|
||||
#region Menu_UnLinkEnhanced
|
||||
// B2022-049: provide for way to unlink a procedure from the tree view. Also unlinks procedure if no
|
||||
// connected (linked) procedure.
|
||||
if (tn.VEObject is ProcedureInfo)
|
||||
{
|
||||
ItemInfo prc = (ItemInfo)tn.VEObject;
|
||||
if (ui.IsAdministrator() || ui.IsSetAdministrator(prc.MyDocVersion) || ui.IsWriter(prc.MyDocVersion))
|
||||
{
|
||||
DVEnhancedDocuments dveds = prc.MyDocVersion.DocVersionConfig.MyEnhancedDocuments;
|
||||
EnhancedDocuments eds = prc.GetMyEnhancedDocuments();
|
||||
|
||||
// if just one link, add single menu item to unlink. If more than one, need a list with all.
|
||||
if (eds != null && eds.Count == 1)
|
||||
{
|
||||
// Get menu string, must start with 'Unlink Source '
|
||||
string doclink = null;
|
||||
doclink = dveds.GetByType(eds[0].Type).Name; // need background/dev if on source
|
||||
if (eds[0].Type == 0)
|
||||
{
|
||||
ItemInfo prl = ItemInfo.Get(eds[0].ItemID);
|
||||
DVEnhancedDocuments dvedsl = prl.MyDocVersion.DocVersionConfig.MyEnhancedDocuments;
|
||||
foreach (DVEnhancedDocument dvel in dvedsl) if (dvel.VersionID == prc.MyDocVersion.VersionID) doclink = dvel.Name;
|
||||
}
|
||||
doclink = string.Format("Unlink Source and {0} Procedure", doclink);
|
||||
MenuItem mix = cm.MenuItems.Add(doclink, new EventHandler(miEnhanced_Click));
|
||||
mix.Tag = -1; // NOTE this is what flags what gets processed on menu click, i.e. -1
|
||||
}
|
||||
// if this is a source procedure that has enhanced, for example Background and/or deviation, ask which should be unlinked including all
|
||||
else if (eds != null && eds.Count > 1)
|
||||
{
|
||||
MenuItem miu = new MenuItem("Unlink Enhanced Procedure(s) from Source");
|
||||
miu.Tag = -2; // this menu item doesn't get used.
|
||||
int k = 0;
|
||||
foreach (EnhancedDocument ed in eds)
|
||||
{
|
||||
// add submenu item for it
|
||||
k++;
|
||||
MenuItem mp = miu.MenuItems.Add(dveds.GetByType(ed.Type).Name, new EventHandler(miEnhanced_Click));
|
||||
mp.Tag = k;
|
||||
}
|
||||
// add all submenu item
|
||||
MenuItem mp1 = miu.MenuItems.Add("All", new EventHandler(miEnhanced_Click));
|
||||
mp1.Tag = 0; // Tag of 0 flags All
|
||||
cm.MenuItems.Add(miu);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Menu_Properties
|
||||
// Add Properties to the menu unless at the very 'top' node or on a grouping (partinfo)
|
||||
// node (RNOs, Steps, Cautions, Notes) or at the step level.
|
||||
@ -1687,6 +1735,73 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
}
|
||||
//end jcb multiunit
|
||||
private bool CheckForValidEnhLink(ItemInfo prc) // Check if this procedure has valid link
|
||||
{
|
||||
EnhancedDocuments eds = prc.GetMyEnhancedDocuments();
|
||||
foreach (EnhancedDocument ed in eds) // only unlink those that are selected
|
||||
{
|
||||
ItemInfo lprc = ItemInfo.Get(ed.ItemID);
|
||||
EnhancedDocuments edsl = lprc.GetMyEnhancedDocuments();
|
||||
foreach (EnhancedDocument edl in edsl) if (edl.ItemID == prc.ItemID) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// B2022-049: Copy/paste of enhanced procedure and bad links between source and enhanced
|
||||
// Handle menu selection for unlinking the source/enhanced OR if not valid links, just the procedure selected
|
||||
void miEnhanced_Click(object sender, EventArgs e)
|
||||
{
|
||||
MenuItem mi = sender as MenuItem;
|
||||
VETreeNode tnprc = SelectedNode as VETreeNode;
|
||||
ItemInfo selprc = tnprc.VEObject as ItemInfo;
|
||||
EnhancedDocuments seleds = selprc.GetMyEnhancedDocuments();
|
||||
// if tag on menu = -1, it is a single document, no need to loop. This can be from either the source or enhanced.
|
||||
if ((int)mi.Tag == -1)
|
||||
{
|
||||
bool hasValidConnectingProc = CheckForValidEnhLink(selprc);
|
||||
if (FlexibleMessageBox.Show(this, "Do you want to unlink the Enhanced procedure from its Source?", "Confirm Procedure Unlink", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
if (selprc.IsEnhancedProcedure)
|
||||
{
|
||||
selprc.DoUnlinkEnhanced(selprc, 0, !hasValidConnectingProc); // if no valid linked: enhtype = 0 since this an enhanced doc is getting unlinked
|
||||
}
|
||||
else // from source
|
||||
{
|
||||
// if valid connection, make call from the linked enhanced, otherwise just unlink the source only
|
||||
if (hasValidConnectingProc)
|
||||
{
|
||||
ItemInfo lprc = ItemInfo.Get(seleds[0].ItemID);
|
||||
lprc.DoUnlinkEnhanced(lprc, 0, !hasValidConnectingProc);
|
||||
}
|
||||
else
|
||||
selprc.DoUnlinkEnhanced(selprc, seleds[0].Type, !hasValidConnectingProc);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The following code is run if selection made from source. There may be moore than one enhanced, for example background
|
||||
// and deviation
|
||||
if (FlexibleMessageBox.Show(this, "Do you want to unlink the selected Enhanced procedure(s) from the Source procedure?", "Confirm Procedure Unlink", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
||||
{
|
||||
int k = 1;
|
||||
foreach (EnhancedDocument ed in seleds) // only unlink those that are selected
|
||||
{
|
||||
if (k == (int)mi.Tag || (int)mi.Tag == 0)
|
||||
{
|
||||
ItemInfo lprc = ItemInfo.Get(ed.ItemID);
|
||||
bool hasValidConnectingProc = CheckForValidEnhLink(lprc);
|
||||
// if there is a valid connection, unlink both. Otherwise, just unlink this selected procedure.
|
||||
if (hasValidConnectingProc)
|
||||
lprc.DoUnlinkEnhanced(lprc, ed.Type, !hasValidConnectingProc);
|
||||
else
|
||||
selprc.DoUnlinkEnhanced(selprc, ed.Type, !hasValidConnectingProc);
|
||||
}
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
void mi_Click(object sender, EventArgs e)
|
||||
{
|
||||
MenuItem mi = sender as MenuItem;
|
||||
|
Loading…
x
Reference in New Issue
Block a user