USP_GLOBALCHANGE_ADDORCHANGECOMMUNICATIONTEAMPLTE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHOOSEEDEVENT | uniqueidentifier | IN | |
@SOURCETEMPLATE | xml | IN | |
@SELECTEDEVENTSFORUPDATE | xml | IN | |
@SELECTEDTEMPLATESFORUPDATE | xml | IN | |
@SELECTIONOPTIONFORUPDATE | smallint | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_GLOBALCHANGE_ADDORCHANGECOMMUNICATIONTEAMPLTE
(
@CHOOSEEDEVENT uniqueidentifier,
@SOURCETEMPLATE xml = null,
@SELECTEDEVENTSFORUPDATE xml = null,
@SELECTEDTEMPLATESFORUPDATE xml = null,
@SELECTIONOPTIONFORUPDATE smallint,
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@NUMBERADDED int = 0 output,
@NUMBEREDITED int = 0 output,
@NUMBERDELETED int = 0 output,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount off;
declare @CURRENTDATE datetime
declare @UserID int
declare @ISERROR int,
@ERRORTEXT nvarchar(max)
declare @SourceContentHtml nvarchar(max),
@SourceSubject nvarchar(max),
@SourceConfirmationTypeCode int = 0,
@SourceDescription nvarchar(max),
@SourceFAFTASKID uniqueidentifier = null,
@SourceISDEFAULTFORTASK bit = 0
declare @ISAVAILABLETOINDIVIDUAL bit
declare @ISAVAILABLETOHOUSEHOLD bit
declare @ISAVAILABLETOHOUSEHOLDMEMBER bit
declare @ISAVAILABLETOTEAMMEMBER bit
declare @ISAVAILABLETOTEAMLEADER bit
declare @ISAVAILABLETOCOMPANYLEADER bit
declare @ISAVAILABLETOFUNDRAISINGCOACH bit
declare @ISAVAILABLETOSPONSOR bit
declare @ISACTIVE bit
declare @RECIPIENTDONOR bit
declare @RECIPIENTPROSPECT bit
declare @RECIPIENTINDIVIDUAL bit
declare @RECIPIENTHOUSEHOLDMEMBER bit
declare @RECIPIENTHOUSEHOLDLEADER bit
declare @RECIPIENTTEAMMEMBER bit
declare @RECIPIENTTEAMLEADER bit
declare @RECIPIENTCOMPANYLEADER bit
declare @RECIPIENTSTATUSPREVIOUS bit
declare @RECIPIENTSTATUSCURRENT bit
declare @NCNOTIFICATIONID int
declare @AVAILABLEASLETTER bit
declare @Count int, @Index int
declare @EventID uniqueidentifier,
@AppealID int,
@ClientSiteID int,
@ClientsID int,
@EmailTemplateID int = 0,
@EmailTemplateGuID uniqueidentifier,
@EventEmailTemplateID uniqueidentifier,
@EmailTemplateName nvarchar(200),
@EventName nvarchar(max),
@SourceTemplateID int
declare @EventsThatAlreadyHaveOptionsWithThisName table(ID int identity(1,1), EventID uniqueidentifier, EventName nvarchar(max))
declare @EventInfo table(
ID int identity(1,1),
EventID uniqueidentifier,
EventName nvarchar(max),
AppealID int,
ClientSiteID int,
ClientsID int
)
set @CURRENTDATE = getdate();
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
select @UserID = [ClientUsers].ID from BBNCUSERMAP
join dbo.[ClientUsers] on [ClientUsers].[UserName] = BBNCUSERMAP.BBNCUSERNAME
where BBNCUSERMAP.ID = @CURRENTAPPUSERID
if @UserID is null
RAISERROR('The owner of this global change spec is not mapped to a Netcommunity user, or is mapped to a NetCommunity user that has subsequently been deleted.', 11, 1)
SET @SourceTemplateID = (SELECT T.c.value('(TEMPLATEID)[1]','int') FROM @SOURCETEMPLATE.nodes('/SOURCETEMPLATE/ITEM') T(c))
if @SourceTemplateID is not null
begin
SELECT
@SourceContentHtml = CONTENTHTML,
@SourceConfirmationTypeCode = EET.CONFIRMATIONTYPECODE,
@SourceSubject=ET.SUBJECT,
@SourceDescription = ET.Description,
@ISAVAILABLETOINDIVIDUAL = EET.ISAVAILABLETOINDIVIDUAL,
@ISAVAILABLETOHOUSEHOLD = EET.ISAVAILABLETOHOUSEHOLD,
@ISAVAILABLETOHOUSEHOLDMEMBER = EET.ISAVAILABLETOHOUSEHOLDMEMBER,
@ISAVAILABLETOTEAMMEMBER = EET.ISAVAILABLETOTEAMMEMBER,
@ISAVAILABLETOTEAMLEADER = EET.ISAVAILABLETOTEAMLEADER,
@ISAVAILABLETOCOMPANYLEADER = EET.ISAVAILABLETOCOMPANYLEADER,
@ISAVAILABLETOFUNDRAISINGCOACH = EET.ISAVAILABLETOFUNDRAISINGCOACH,
@ISAVAILABLETOSPONSOR = EET.ISAVAILABLETOSPONSOR,
@ISACTIVE = EET.ISACTIVE,
@RECIPIENTDONOR = EET.RECIPIENTDONOR,
@RECIPIENTPROSPECT = EET.RECIPIENTPROSPECT,
@RECIPIENTINDIVIDUAL = EET.RECIPIENTINDIVIDUAL,
@RECIPIENTHOUSEHOLDMEMBER = EET.RECIPIENTHOUSEHOLDMEMBER,
@RECIPIENTHOUSEHOLDLEADER = EET.RECIPIENTHOUSEHOLDLEADER,
@RECIPIENTTEAMMEMBER = EET.RECIPIENTTEAMMEMBER,
@RECIPIENTTEAMLEADER = EET.RECIPIENTTEAMLEADER,
@RECIPIENTCOMPANYLEADER = EET.RECIPIENTCOMPANYLEADER,
@RECIPIENTSTATUSPREVIOUS = EET.RECIPIENTSTATUSPREVIOUS,
@RECIPIENTSTATUSCURRENT = EET.RECIPIENTSTATUSCURRENT,
@NCNOTIFICATIONID = EET.NCNOTIFICATIONID,
@AVAILABLEASLETTER = EET.AVAILABLEASLETTER,
@SourceFAFTASKID = EET.FAFTASKID,
@SourceISDEFAULTFORTASK = EET.ISDEFAULTFORTASK
FROM dbo.EmailTemplate ET
INNER JOIN dbo.EVENTEMAILTEMPLATE EET ON ET.ID = EET.EMAILTEMPLATEID
WHERE ET.ID = @SourceTemplateID
end
else
return;
begin try
--select "Add template to specific events"
if @SELECTIONOPTIONFORUPDATE = 1
begin
insert into @EventInfo(EventID)
SELECT EVENTID FROM (SELECT T.c.value('(EVENTID)[1]','uniqueidentifier') As 'EVENTID'
FROM @SELECTEDEVENTSFORUPDATE.nodes('/SELECTEDEVENTSFORUPDATE/ITEM') T(c)) AS XMLTABLE
WHERE exists(
select 1 from dbo.UFN_SITEID_MAPFROM_EVENTID(XMLTABLE.EVENTID) EVENTSITE
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,'800093A6-B727-490B-8CC4-C0C0CF2148F0',20)
where SITEID=[EVENTSITE].[SITEID] or (SITEID is null and [EVENTSITE].[SITEID] is null)) )
)
--if source template is the default for its task, clear the default settings for that task in the target event's templates
if @SourceISDEFAULTFORTASK=1
UPDATE EVENTEMAILTEMPLATE
SET ISDEFAULTFORTASK=0 WHERE FAFTASKID=@SourceFAFTASKID AND EVENTID in (select EventID from @EventInfo)
update @EventInfo
set AppealID = BBA.ID,
ClientSiteID = EX.CLIENTSITESID,
ClientsID = CS.ClientsID,
EventName = E.Name
from @EventInfo EI
join Event E on e.ID = EI.EventID
join dbo.EVENTEXTENSION EX on E.ID = EX.EVENTID
left join dbo.BBNCAPPEALIDMAP BBA on E.APPEALID = BBA.APPEALID
left join dbo.ClientSites CS on cs.ID = EX.CLIENTSITESID
select @Count = COUNT(*),@Index = 1 from @EventInfo
while @Index< = @Count
begin
select @EventID = EventID,
@AppealID = AppealID,
@ClientSiteID = ClientSiteID,
@ClientsID = ClientsID ,
@EmailTemplateGuID = newid(),
@EmailTemplateID = 0,
@EventName = EventName
from @EventInfo where ID = @Index
Set @EmailTemplateName = @EventName + ': participant communication template - ' + CAST(newid() AS nvarchar(max))
exec spAddUpdate_EmailTemplate @PKID=@EmailTemplateID output,
@UserID = @USERID,
@ClientsID = @ClientsID,
@Name = @EmailTemplateName,
@Description = @SourceDescription,
@ContentHTML = @SourceContentHtml,
@RecipientListsXML = N'<root />',
@ContentText = N'',
@FromAddress = N'',
@FromDisplayName = N'',
@Subject = @SourceSubject,
@Priority = 3,
@ReplyAddress = N'' ,
@ReturnReceipt = 0,
@ReturnReceiptAddress = N'',
@ForwardDSN = 0,
@ForwardDSNAddress = N'',
@GUID = @EmailTemplateGuID,
@Type = 0,
@DataSourceID = 0,
@ClientSitesID = @CLIENTSITEID,
@AppealID=@AppealID;
if @EmailTemplateID is not null
begin
exec USP_EVENTEMAILTEMPLATE_ADD_EDIT @CHANGEAGENTID=@CHANGEAGENTID, @EVENTID=@EVENTID, @EMAILTEMPLATEID = @EmailTemplateID, @CONFIRMATIONTYPECODE = @SourceConfirmationTypeCode,
@ISAVAILABLETOINDIVIDUAL = @ISAVAILABLETOINDIVIDUAL, @ISAVAILABLETOHOUSEHOLD = @ISAVAILABLETOHOUSEHOLD, @ISAVAILABLETOTEAMMEMBER = @ISAVAILABLETOTEAMMEMBER,
@ISAVAILABLETOTEAMLEADER = @ISAVAILABLETOTEAMLEADER, @ISAVAILABLETOCOMPANYLEADER = @ISAVAILABLETOCOMPANYLEADER,
@ISAVAILABLETOFUNDRAISINGCOACH = @ISAVAILABLETOFUNDRAISINGCOACH, @ISAVAILABLETOSPONSOR = @ISAVAILABLETOSPONSOR,
@RECIPIENTDONOR = @RECIPIENTDONOR, @RECIPIENTPROSPECT = @RECIPIENTPROSPECT, @RECIPIENTINDIVIDUAL = @RECIPIENTINDIVIDUAL,
@RECIPIENTHOUSEHOLDMEMBER = @RECIPIENTHOUSEHOLDMEMBER, @RECIPIENTHOUSEHOLDLEADER = @RECIPIENTHOUSEHOLDLEADER, @RECIPIENTTEAMMEMBER = @RECIPIENTTEAMMEMBER,
@RECIPIENTTEAMLEADER = @RECIPIENTTEAMLEADER, @RECIPIENTCOMPANYLEADER = @RECIPIENTCOMPANYLEADER, @RECIPIENTSTATUSPREVIOUS = @RECIPIENTSTATUSPREVIOUS,
@RECIPIENTSTATUSCURRENT = @RECIPIENTSTATUSCURRENT, @AVAILABLEASLETTER = @AVAILABLEASLETTER, @ISAVAILABLETOHOUSEHOLDMEMBER = @ISAVAILABLETOHOUSEHOLDMEMBER,
@FAFTASKID = @SourceFAFTASKID, @ISDEFAULTFORTASK = @SourceISDEFAULTFORTASK
set @NUMBERADDED = @NUMBERADDED + 1
end
set @Index = @Index + 1
end
end
--select "Replace existing templates"
if @SELECTIONOPTIONFORUPDATE = 2
begin
DECLARE @UpdatedTable table (ID int identity(1,1), EmailTemplateGUID uniqueidentifier, EventEmailTemplateID uniqueidentifier, EventID uniqueidentifier)
insert into @UpdatedTable(EmailTemplateGUID)
SELECT EmailTemplateGUID FROM (SELECT T.c.value('(RECORDID)[1]','uniqueidentifier') AS 'EMAILTEMPLATEGUID'
FROM @SELECTEDTEMPLATESFORUPDATE.nodes('/SELECTEDTEMPLATESFORUPDATE/ITEM') T(c)) AS XMLTABLE
INNER JOIN EMAILTEMPLATE ET ON XMLTABLE.EMAILTEMPLATEGUID = ET.GUID
INNER JOIN EVENTEMAILTEMPLATE ETT on ET.ID = ETT.EMAILTEMPLATEID
WHERE exists(
select 1 from dbo.UFN_SITEID_MAPFROM_EVENTID(ETT.EVENTID) EVENTSITE
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,'800093A6-B727-490B-8CC4-C0C0CF2148F0',20)
where SITEID=[EVENTSITE].[SITEID] or (SITEID is null and [EVENTSITE].[SITEID] is null)) )
)
insert into @EventInfo(EventID,EventName)
Select E.ID, E.Name
from dbo.EVENTEMAILTEMPLATE EET
join dbo.Event E on E.ID = EET.EVENTID
join dbo.EmailTemplate ET on ET.ID = EET.EMAILTEMPLATEID
where ET.Guid in (select EmailTemplateGUID from @UpdatedTable)
select @ISERROR = COUNT(EventID) from @EventInfo Group By EventID HAVING (Count(EventID) > 1 )
if @ISERROR > 0
begin
SELECT @ERRORTEXT = COALESCE(@ERRORTEXT+', ' ,'') + EventName from @EventInfo Group By EventName HAVING (Count(EventName) > 1 )
RAISERROR ('Your updates could not be processed because participant communication template names must be unique for each event. You selected to update more than one participant communication template for the following events: %s. To continue, please change your selections to ensure that only one participant communication template per event is selected.', 11, 1, @ERRORTEXT);
end
update @UpdatedTable
set EventEmailTemplateID = EET.ID,
EventID = EET.EVENTID
from @UpdatedTable T
inner join EmailTemplate ET on ET.Guid = T.EmailTemplateGUID and ET.ID <> @SourceTemplateID--It is not itself.
inner join EVENTEMAILTEMPLATE EET on EET.EMAILTEMPLATEID = ET.ID and EET.CONFIRMATIONTYPECODE = @SourceConfirmationTypeCode
select @Count = COUNT(*),@Index = 1 from @UpdatedTable
while @Index< = @Count
begin
select @EventEmailTemplateID = EventEmailTemplateID,@EventID = EventID
from @UpdatedTable
where ID = @Index
if @EventEmailTemplateID is not null
begin
update EMAILTEMPLATE
SET SUBJECT=@SourceSubject,
CONTENTHTML=@SourceContentHtml
from EMAILTEMPLATE ET
inner join @UpdatedTable T on T.EmailTemplateGUID = ET.GUID and T.ID = @Index
exec USP_EVENTEMAILTEMPLATE_ADD_EDIT @ID = @EventEmailTemplateID, @CHANGEAGENTID=@CHANGEAGENTID, @CONFIRMATIONTYPECODE = @SourceConfirmationTypeCode,
@ISAVAILABLETOINDIVIDUAL = @ISAVAILABLETOINDIVIDUAL, @ISAVAILABLETOHOUSEHOLD = @ISAVAILABLETOHOUSEHOLD, @ISAVAILABLETOTEAMMEMBER = @ISAVAILABLETOTEAMMEMBER,
@ISAVAILABLETOTEAMLEADER = @ISAVAILABLETOTEAMLEADER, @ISAVAILABLETOCOMPANYLEADER = @ISAVAILABLETOCOMPANYLEADER,
@ISAVAILABLETOFUNDRAISINGCOACH = @ISAVAILABLETOFUNDRAISINGCOACH, @ISAVAILABLETOSPONSOR = @ISAVAILABLETOSPONSOR,
@RECIPIENTDONOR = @RECIPIENTDONOR, @RECIPIENTPROSPECT = @RECIPIENTPROSPECT, @RECIPIENTINDIVIDUAL = @RECIPIENTINDIVIDUAL,
@RECIPIENTHOUSEHOLDMEMBER = @RECIPIENTHOUSEHOLDMEMBER, @RECIPIENTHOUSEHOLDLEADER = @RECIPIENTHOUSEHOLDLEADER, @RECIPIENTTEAMMEMBER = @RECIPIENTTEAMMEMBER,
@RECIPIENTTEAMLEADER = @RECIPIENTTEAMLEADER, @RECIPIENTCOMPANYLEADER = @RECIPIENTCOMPANYLEADER, @RECIPIENTSTATUSPREVIOUS = @RECIPIENTSTATUSPREVIOUS,
@RECIPIENTSTATUSCURRENT = @RECIPIENTSTATUSCURRENT, @AVAILABLEASLETTER = @AVAILABLEASLETTER, @ISAVAILABLETOHOUSEHOLDMEMBER = @ISAVAILABLETOHOUSEHOLDMEMBER,
@FAFTASKID = @SourceFAFTASKID, @ISDEFAULTFORTASK = @SourceISDEFAULTFORTASK
set @NUMBEREDITED = @NUMBEREDITED + 1
end
set @Index = @Index + 1
end
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch