USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2
Creates or updates the underlying segment for a generic mailing.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@LETTERID | uniqueidentifier | IN | |
@LETTERNAME | nvarchar(100) | IN | |
@SELECTIONS | xml | IN | |
@EXCLUDEDSELECTIONS | xml | IN | |
@EXCLUDEDSOLICITCODES | xml | IN | |
@MAILTYPECODE | tinyint | IN | |
@DELIVERYMETHODCODE | tinyint | IN | |
@SINGLECHANNEL | bit | IN | |
@PREFERREDCHANNEL | bit | IN | |
@INCLUDEINACTIVE | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2
(
@ID uniqueidentifier output,
@CURRENTAPPUSERID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null,
@LETTERID uniqueidentifier,
@LETTERNAME nvarchar(100),
@SELECTIONS xml,
@EXCLUDEDSELECTIONS xml,
@EXCLUDEDSOLICITCODES xml,
@MAILTYPECODE tinyint,
@DELIVERYMETHODCODE tinyint,
@SINGLECHANNEL bit,
@PREFERREDCHANNEL bit,
@INCLUDEINACTIVE bit
)
with execute as owner
as
begin
--This procedure creates a segment and a view that unions the selections together.
-- Currently, Appeal Mailings are the only form of communication allowing multiple selections, but this is subject to change
-- @MAILTYPECODE pertains to the MailTypeCode field in dbo.MAILPREFERENCE for constituent communication preferences
-- 0 - Revenue Acknowledgements
-- 1 - Appeals
-- 2 - Events
-- 3 - General Correspondence
-- 4 - Reminders
-- 5 - Receipts
-- 6 - Planned Gift Acknowledgements
-- 7 - Tribute Acknowledgements
-- 8 - Stewardship
-- etc... This code should not need to change as new types are introduced...
-- DELIVERYMETHODCODE also pertains the corresponding field in dbo.MAILPREFERENCE
-- 0 - Mail
-- 1 - Email
set nocount on;
declare @CURRENTDATE datetime = getDate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
declare @SEGMENTATIONID uniqueidentifier;
declare @COMMUNICATIONTYPECODE tinyint;
select
@SEGMENTATIONID = SEGMENTATIONID,
@COMMUNICATIONTYPECODE = COMMUNICATIONTYPECODE
from dbo.COMMUNICATIONLETTER
where ID = @LETTERID;
declare @SEGMENTTYPE nvarchar(20);
if @DELIVERYMETHODCODE = 1
set @SEGMENTTYPE = 'Email';
else
set @SEGMENTTYPE = 'Mail';
declare @UPDATE bit = 1;
if @ID is null or @ID = '00000000-0000-0000-0000-000000000000'
begin
set @ID = newId();
set @UPDATE = 0;
end
declare @BBECRECORDSOURCEID uniqueidentifier;
set @BBECRECORDSOURCEID = dbo.UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID();
declare @MKTSEGMENTNAME nvarchar(100) = dbo.UFN_MKTSEGMENT_GETUNIQUENAME(@ID, @SEGMENTTYPE + ' Segment: ' + @LETTERNAME + ' (' + convert(nvarchar(36), @LETTERID) + ')', null);
declare @MKTSEGMENTDESCRIPTION nvarchar(255) = 'Automatically generated ' + lower(@SEGMENTTYPE) + ' segment for ''' + @LETTERNAME + ''' appeal mailing setup letter.';
-- Save the segment
if @UPDATE = 0
begin
-- Save the segment
insert into dbo.MKTSEGMENT
(
ID,
NAME,
DESCRIPTION,
SEGMENTTYPECODE,
SEGMENTCATEGORYCODEID,
CODE,
QUERYVIEWCATALOGID,
PARTDEFINITIONVALUESID,
ISSYSTEM,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@ID,
@MKTSEGMENTNAME,
@MKTSEGMENTDESCRIPTION,
case when @MAILTYPECODE in (0, 4, 5, 6, 7) then 3 else 1 end,
null,
'',
@BBECRECORDSOURCEID,
null,
1,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
-- Insert a parameter set for the refresh process for this segment
insert into dbo.MKTSEGMENTREFRESHPROCESS
(
ID,
SEGMENTID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
newid(),
@ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
-- Save all the selections
exec dbo.USP_MKTSEGMENT_GETSELECTIONS_ADDFROMXML @ID, null, @SELECTIONS, @CHANGEAGENTID, @CURRENTDATE;
end
else
begin
update dbo.MKTSEGMENT
set
NAME = @MKTSEGMENTNAME,
DESCRIPTION = @MKTSEGMENTDESCRIPTION,
ISSYSTEM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID;
-- Save all the selections
exec dbo.USP_MKTSEGMENT_GETSELECTIONS_UPDATEFROMXML @ID, null, @SELECTIONS, @CHANGEAGENTID, @CURRENTDATE;
end
-- Create the VIEW and add it to the IDSETREGISTER
declare @SEGSQL nvarchar(max);
declare @EXCLUDESQL nvarchar(max);
declare @VIEWSQL nvarchar(max);
declare @SEGMENTVIEW nvarchar(60);
declare @TABLECOUNT int;
declare @BASETABLE nvarchar(255);
declare @UNIONTABLE nvarchar(255);
declare @SELECTIONNAME nvarchar(300);
declare @SEGMENTNAME nvarchar(100);
declare @SEGMENTDESCRIPTION nvarchar(255);
declare @DATATYPE nvarchar(128);
declare @SELECTIONID uniqueidentifier;
declare @IDSETREGISTERID uniqueidentifier;
declare @RECORDTYPEID uniqueidentifier;
declare @RETVAL int;
set @TABLECOUNT = 1;
set @BASETABLE = null;
-- Get the segment information
select
@SEGMENTVIEW = dbo.UFN_MKTSEGMENT_MAKEVIEWNAME(MKTSEGMENT.ID),
@SEGMENTNAME = MKTSEGMENT.NAME,
@SEGMENTDESCRIPTION = MKTSEGMENT.DESCRIPTION,
@DATATYPE = QUERYVIEWCATALOG.PRIMARYKEYTYPENAME,
@RECORDTYPEID = QUERYVIEWCATALOG.RECORDTYPEID
from dbo.MKTSEGMENT
inner join dbo.QUERYVIEWCATALOG
on QUERYVIEWCATALOG.ID = MKTSEGMENT.QUERYVIEWCATALOGID
where MKTSEGMENT.ID = @ID;
-- Selections included in Segment
declare SELECTIONCURSOR cursor local fast_forward for
select
MKTSEGMENTSELECTION.SELECTIONID
from dbo.MKTSEGMENTSELECTION
inner join dbo.IDSETREGISTER on MKTSEGMENTSELECTION.SELECTIONID = IDSETREGISTER.ID
where MKTSEGMENTSELECTION.SEGMENTID = @ID;
open SELECTIONCURSOR;
fetch next from SELECTIONCURSOR into @SELECTIONID;
while (@@FETCH_STATUS = 0)
begin
--Remove the CR and LF characters since we are inserting this name into a dash-dash (--) comment in the SQL we are building...
select
@SELECTIONNAME = replace(replace(NAME, char(13), ''), char(10), '')
from dbo.IDSETREGISTER
where ID = @SELECTIONID;
if @BASETABLE is null
begin
set @BASETABLE = 'T' + convert(nvarchar(10), @TABLECOUNT) + '';
set @SEGSQL = 'select '+ @BASETABLE +'.ID from dbo.' + dbo.UFN_MKTSELECTION_GETFUNCTIONNAME(@SELECTIONID) + ' as ' + @BASETABLE + ' --' + @SELECTIONNAME + char(13);
end
else
begin
set @UNIONTABLE = 'T' + convert(nvarchar(10), @TABLECOUNT) + '';
set @SEGSQL = isnull(@SEGSQL,'') + 'union select '+ @UNIONTABLE +'.ID from dbo.' + dbo.UFN_MKTSELECTION_GETFUNCTIONNAME(@SELECTIONID) + ' as ' + @UNIONTABLE + ' --' + @SELECTIONNAME + char(13);
end
set @TABLECOUNT = @TABLECOUNT + 1;
fetch next from SELECTIONCURSOR into @SELECTIONID;
end;
close SELECTIONCURSOR;
deallocate SELECTIONCURSOR;
-- Build Exclusions SQL
set @TABLECOUNT = 1;
-- Required Solicit codes
set @EXCLUDESQL = 'select ' + char(13) +
' distinct CONSTITUENTID as ID ' + char(13) +
'from dbo.CONSTITUENTSOLICITCODE ' + char(13) +
'inner join dbo.SOLICITCODE ' + char(13) +
' on CONSTITUENTSOLICITCODE.SOLICITCODEID = SOLICITCODE.ID ' + char(13) +
'where SOLICITCODE.EXCLUSIONCODE = 2 -- Required Solicit codes' + char(13);
-- Default and optional solicit codes
declare @SOLICITCODEID uniqueidentifier;
declare @SOLICITCODENAME nvarchar(100);
declare EXCLUDEDSOLICITCODECURSOR cursor local fast_forward for
select
EXCLUDEDSOLICITCODES.SOLICITCODEID,
--Remove the CR and LF characters since we are inserting this name into a dash-dash (--) comment in the SQL we are building...
replace(replace(SOLICITCODE.DESCRIPTION, char(13), ''), char(10), '')
from dbo.UFN_COMMUNICATIONLETTER_GETEXCLUDEDSOLICITCODES_FROMITEMLISTXML(@EXCLUDEDSOLICITCODES) EXCLUDEDSOLICITCODES
inner join dbo.SOLICITCODE
on EXCLUDEDSOLICITCODES.SOLICITCODEID = SOLICITCODE.ID;
open EXCLUDEDSOLICITCODECURSOR;
fetch next from EXCLUDEDSOLICITCODECURSOR into @SOLICITCODEID, @SOLICITCODENAME;
declare @SOLICITCODEIDLIST nvarchar(max) = '';
while (@@FETCH_STATUS = 0)
begin
if len(@SOLICITCODEIDLIST) > 0
set @SOLICITCODEIDLIST = @SOLICITCODEIDLIST + ', ';
set @SOLICITCODEIDLIST = @SOLICITCODEIDLIST + '''' + convert(nvarchar(36), @SOLICITCODEID) + '''';
fetch next from EXCLUDEDSOLICITCODECURSOR into @SOLICITCODEID, @SOLICITCODENAME;
end;
close EXCLUDEDSOLICITCODECURSOR;
deallocate EXCLUDEDSOLICITCODECURSOR;
if len(@SOLICITCODEIDLIST) > 0
set @EXCLUDESQL = @EXCLUDESQL +
' or SOLICITCODE.ID in (' + @SOLICITCODEIDLIST + ')' + char(13);
set @EXCLUDESQL = @EXCLUDESQL +
' and ((CONSTITUENTSOLICITCODE.STARTDATE is null and CONSTITUENTSOLICITCODE.ENDDATE is null) or ((CONSTITUENTSOLICITCODE.STARTDATE is null or CONSTITUENTSOLICITCODE.STARTDATE <= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE())) and (CONSTITUENTSOLICITCODE.ENDDATE is null or CONSTITUENTSOLICITCODE.ENDDATE >= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE()))))' + char(13);
-- Excluded solicit codes for Acknowledgements
if @COMMUNICATIONTYPECODE = 3
set @EXCLUDESQL = isnull(@EXCLUDESQL, '')
+ 'union select distinct CONSTITUENTSOLICITCODE.CONSTITUENTID as ID from dbo.SIMPLEACKNOWLEDGEMENTSOLICITCODES inner join dbo.CONSTITUENTSOLICITCODE on SIMPLEACKNOWLEDGEMENTSOLICITCODES.SOLICITCODEID = CONSTITUENTSOLICITCODE.SOLICITCODEID where SIMPLEACKNOWLEDGEMENTSOLICITCODES.SEGMENTATIONID = ''' + convert(nvarchar(36), @SEGMENTATIONID) + ''' '
+ 'and ((CONSTITUENTSOLICITCODE.STARTDATE is null and CONSTITUENTSOLICITCODE.ENDDATE is null) or ((CONSTITUENTSOLICITCODE.STARTDATE is null or CONSTITUENTSOLICITCODE.STARTDATE <= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE())) and (CONSTITUENTSOLICITCODE.ENDDATE is null or CONSTITUENTSOLICITCODE.ENDDATE >= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE()))))';
-- Excluded solicit codes for Reminders
if @COMMUNICATIONTYPECODE = 4
set @EXCLUDESQL = isnull(@EXCLUDESQL, '')
+ 'union select distinct CONSTITUENTSOLICITCODE.CONSTITUENTID as ID from dbo.REMINDEROPTIONSOLICITCODES inner join dbo.CONSTITUENTSOLICITCODE on REMINDEROPTIONSOLICITCODES.SOLICITCODEID = CONSTITUENTSOLICITCODE.SOLICITCODEID where REMINDEROPTIONSOLICITCODES.SEGMENTATIONID = ''' + convert(nvarchar(36), @SEGMENTATIONID) + ''' '
+ 'and ((CONSTITUENTSOLICITCODE.STARTDATE is null and CONSTITUENTSOLICITCODE.ENDDATE is null) or ((CONSTITUENTSOLICITCODE.STARTDATE is null or CONSTITUENTSOLICITCODE.STARTDATE <= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE())) and (CONSTITUENTSOLICITCODE.ENDDATE is null or CONSTITUENTSOLICITCODE.ENDDATE >= dbo.UFN_DATE_GETEARLIESTTIME(GETDATE()))))';
-- Selections excluded from Segment
declare EXCLUDEDSELECTIONCURSOR cursor local fast_forward for
select
EXCLUDEDSELECTIONS.SELECTIONID,
--Remove the CR and LF characters since we are inserting this name into a dash-dash (--) comment in the SQL we are building...
replace(replace(IDSETREGISTER.NAME, char(13), ''), char(10), '')
from dbo.UFN_COMMUNICATIONLETTER_GETEXCLUDEDSELECTIONS_FROMITEMLISTXML(@EXCLUDEDSELECTIONS) EXCLUDEDSELECTIONS
inner join dbo.IDSETREGISTER
on EXCLUDEDSELECTIONS.SELECTIONID = IDSETREGISTER.ID;
open EXCLUDEDSELECTIONCURSOR;
fetch next from EXCLUDEDSELECTIONCURSOR into @SELECTIONID, @SELECTIONNAME;
while (@@FETCH_STATUS = 0)
begin
set @UNIONTABLE = 'T' + convert(nvarchar(10), @TABLECOUNT) + '';
set @EXCLUDESQL = isnull(@EXCLUDESQL,'') + 'union select '+ @UNIONTABLE +'.ID from dbo.' + dbo.UFN_MKTSELECTION_GETFUNCTIONNAME(@SELECTIONID) + ' as ' + @UNIONTABLE + ' --' + @SELECTIONNAME + char(13);
set @TABLECOUNT = @TABLECOUNT + 1;
fetch next from EXCLUDEDSELECTIONCURSOR into @SELECTIONID, @SELECTIONNAME;
end;
close EXCLUDEDSELECTIONCURSOR;
deallocate EXCLUDEDSELECTIONCURSOR;
-- Create or alter the segment view
declare @OBJID int;
select @OBJID = object_id(@SEGMENTVIEW, N'V');
if @OBJID is null
set @VIEWSQL = 'create';
else
set @VIEWSQL = 'alter';
set @VIEWSQL = @VIEWSQL + ' view dbo.' + @SEGMENTVIEW + '' + char(13) +
'as' + char(13);
if @BASETABLE is null
set @VIEWSQL = @VIEWSQL + 'select top(0) cast(null as ' + @DATATYPE + ') as ID';
else
begin
set @SEGSQL = 'with SelectionUnion as (' + char(13)
+ @SEGSQL
+ '), ' + char(13)
+ 'ExclusionUnion as (' + char(13)
+ @EXCLUDESQL
+ '), ' + char(13)
if @MAILTYPECODE = 1
begin
set @SEGSQL = @SEGSQL
+ 'ParameterSet as (' + char(13)
+ ' select ' + char(13)
+ ' APPEAL.APPEALCATEGORYCODEID ID ' + char(13)
+ ' from dbo.COMMUNICATIONLETTER ' + char(13)
+ ' inner join dbo.APPEALMAILING ' + char(13)
+ ' on COMMUNICATIONLETTER.SEGMENTATIONID = APPEALMAILING.ID ' + char(13)
+ ' inner join dbo.APPEAL ' + char(13)
+ ' on APPEALMAILING.APPEALID = APPEAL.ID ' + char(13)
+ ' where COMMUNICATIONLETTER.ID = ''' + cast(@LETTERID as nvarchar(36)) + '''' + char(13)
+ '), ' + char(13);
end
set @SEGSQL = @SEGSQL
+ 'MailPreferences as (' + char(13)
+ ' select ' + char(13)
+ ' CONSTITUENTID, ' + char(13)
+ ' DELIVERYMETHODCODE, ' + char(13)
+ ' SENDMAIL, ' + char(13)
+ ' DONOTSENDOTHERCHANNEL, ' + char(13);
-- Join to best match MailPreference based on criteria
-- Appeals - Category (Only current concern)
-- Events - Category
-- Receipts - Receipt type (Not yet supported)
declare @PARAMETERSETID uniqueidentifier = null;
if @MAILTYPECODE = 1 -- Appeals
set @SEGSQL = @SEGSQL
+ ' case ' + char(13)
+ ' when CATEGORYCODEID is not null and CATEGORYCODEID = (select ID from ParameterSet) then 1' + char(13)
+ ' when CATEGORYCODEID is null then 0 ' + char(13)
+ ' else -1 ' + char(13)
+ ' end MATCHSCORE ' + char(13);
else
set @SEGSQL = @SEGSQL
+ ' 0 MATCHSCORE ' + char(13);
set @SEGSQL = @SEGSQL
+ ' from dbo.MAILPREFERENCE ' + char(13)
+ ' where MAILPREFERENCE.MAILTYPECODE = ' + cast(@MAILTYPECODE as nvarchar) + ' ' + char(13);
if @MAILTYPECODE = 1
set @SEGSQL = @SEGSQL
+ '),' + char(13)
+ 'BestMatchMailPreference as (' + char(13)
+ ' select * ' + char(13)
+ ' from MailPreferences MP ' + char(13)
+ ' where MP.MATCHSCORE = (' + char(13)
+ ' select ' + char(13)
+ ' max(MATCHSCORE) ' + char(13)
+ ' from MailPreferences ' + char(13)
+ ' where MailPreferences.CONSTITUENTID = MP.CONSTITUENTID ' + char(13)
+ ' group by CONSTITUENTID ' + char(13)
+ ' )' + char(13);
set @SEGSQL = @SEGSQL
+ ') ' + char(13)
+ 'select distinct SelectionUnion.ID ' + char(13)
+ 'from SelectionUnion ' + char(13);
if @COMMUNICATIONTYPECODE = 4 -- Reminder
set @SEGSQL = @SEGSQL
+ 'inner join dbo.FINANCIALTRANSACTION ' + char(13)
+ ' on SelectionUnion.ID = FINANCIALTRANSACTION.ID ' + char(13)
+ ' and FINANCIALTRANSACTION.DELETEDON is null ' + char(13)
+ 'inner join dbo.REVENUESCHEDULE ' + char(13)
+ ' on REVENUESCHEDULE.ID = FINANCIALTRANSACTION.ID ' + char(13);
if @COMMUNICATIONTYPECODE = 3 -- Acknowledgements
set @SEGSQL = @SEGSQL
+ 'inner join dbo.FINANCIALTRANSACTION ' + char(13)
+ ' on SelectionUnion.ID = FINANCIALTRANSACTION.ID ' + char(13)
+ ' and FINANCIALTRANSACTION.CONSTITUENTID is not null ' + char(13)
+ ' and FINANCIALTRANSACTION.DELETEDON is null ' + char(13)
+ 'inner join dbo.REVENUE_EXT ' + char(13)
+ ' on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID ' + char(13)
+ 'inner join dbo.FINANCIALTRANSACTIONLINEITEM ' + char(13)
+ ' on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID' + char(13)
+ ' and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null' + char(13)
+ 'inner join dbo.UFN_REVENUELIFECYCLE_GETVALIDREVENUE() as VALIDREVENUE ' + char(13)
+ ' on FINANCIALTRANSACTIONLINEITEM.ID = VALIDREVENUE.REVENUESPLITID ' + char(13);
if @INCLUDEINACTIVE = 0
set @SEGSQL = @SEGSQL
+ 'inner join dbo.CONSTITUENT ' + char(13)
+ case
when @COMMUNICATIONTYPECODE = 1 then
+ ' on SelectionUnion.ID = CONSTITUENT.ID ' + char(13)
when @COMMUNICATIONTYPECODE in (3, 4) then
+ ' on FINANCIALTRANSACTION.CONSTITUENTID = CONSTITUENT.ID ' + char(13)
end
+ ' and CONSTITUENT.ISINACTIVE = 0 ' + char(13);
set @SEGSQL = @SEGSQL
+ 'left join ExclusionUnion ' + char(13)
+ case
when @COMMUNICATIONTYPECODE = 1 then
+ ' on SelectionUnion.ID = ExclusionUnion.ID ' + char(13)
when @COMMUNICATIONTYPECODE in (3, 4) then
+ ' on FINANCIALTRANSACTION.CONSTITUENTID = ExclusionUnion.ID ' + char(13)
end;
if @MAILTYPECODE = 1
set @SEGSQL = @SEGSQL
+ 'left join BestMatchMailPreference MAILPREFERENCE ' + char(13)
+ ' on SelectionUnion.ID = MAILPREFERENCE.CONSTITUENTID ' + char(13);
else
set @SEGSQL = @SEGSQL
+ 'left join MailPreferences MAILPREFERENCE ' + char(13)
+ case
when @COMMUNICATIONTYPECODE = 1 then
+ ' on SelectionUnion.ID = MAILPREFERENCE.CONSTITUENTID ' + char(13)
when @COMMUNICATIONTYPECODE in (3, 4) then
+ ' on FINANCIALTRANSACTION.CONSTITUENTID = MAILPREFERENCE.CONSTITUENTID ' + char(13)
end;
set @SEGSQL = @SEGSQL
+ ' and MAILPREFERENCE.MATCHSCORE <> -1 ' + char(13)
+ 'where ExclusionUnion.ID is null ' + char(13);
if @COMMUNICATIONTYPECODE = 4 -- Reminder
begin
set @SEGSQL = @SEGSQL
+ ' and FINANCIALTRANSACTION.TYPECODE in (1, 2) ' + char(13) -- Pledge, Recurring gift
+ ' and REVENUESCHEDULE.SENDPLEDGEREMINDER = 1 and REVENUESCHEDULE.STATUSCODE = 0 ' + char(13)
+ ' and dbo.UFN_REMINDER_PAYMENTDUE(FINANCIALTRANSACTION.ID, getDate()) > 0 ' + char(13);
end
if @COMMUNICATIONTYPECODE = 3 begin -- Acknowledgements
set @SEGSQL = @SEGSQL + ' and FINANCIALTRANSACTION.ID not in (select REVENUEID from dbo.REVENUELETTER) and REVENUE_EXT.DONOTACKNOWLEDGE = 0 '
end
-- Mail or Email only
-- Include constits with no pref, that prefer this channel,
-- or that prefer another channel but are ok with receiving communications on other channels
if @SINGLECHANNEL = 1
set @SEGSQL = @SEGSQL
+ ' and (' + char(13)
+ ' coalesce(MAILPREFERENCE.DELIVERYMETHODCODE, ' + cast(@DELIVERYMETHODCODE as nvarchar) + ') = ' + cast(@DELIVERYMETHODCODE as nvarchar) + ' ' + char(13)
+ ' or ( ' + char(13)
+ ' coalesce(MAILPREFERENCE.DELIVERYMETHODCODE, ' + cast(@DELIVERYMETHODCODE as nvarchar) + ') <> ' + cast(@DELIVERYMETHODCODE as nvarchar) + ' ' + char(13)
+ ' and coalesce(MAILPREFERENCE.DONOTSENDOTHERCHANNEL, 0) = 0 ' + char(13)
+ ' ) ' + char(13)
+ ' ) ';
-- Mail and email, and current channel is preferred
-- Include constits with no pref or that prefer this channel
if @PREFERREDCHANNEL = 1
set @SEGSQL = @SEGSQL
+ ' and coalesce(MAILPREFERENCE.DELIVERYMETHODCODE, ' + cast(@DELIVERYMETHODCODE as nvarchar) + ') = ' + cast(@DELIVERYMETHODCODE as nvarchar) + char(13);
set @SEGSQL = @SEGSQL
+ ' and coalesce(MAILPREFERENCE.SENDMAIL, 1) = 1 ' + char(13);
set @VIEWSQL = @VIEWSQL + @SEGSQL;
end
exec (@VIEWSQL);
-- Grant rights for new views
if @OBJID is null
exec ('grant select on dbo.' + @SEGMENTVIEW + ' to BBAPPFXSERVICEROLE');
-- Add to the ID Set Register
-- Get the ID set ID if this is an edit operation, else it will be null. Also get the segment record type.
select distinct
@IDSETREGISTERID = MKTSEGMENT.IDSETREGISTERID,
@RECORDTYPEID = isnull(IDSETREGISTER.RECORDTYPEID, @RECORDTYPEID)
from dbo.MKTSEGMENT
left join dbo.MKTSEGMENTSELECTION
on MKTSEGMENTSELECTION.SEGMENTID = MKTSEGMENT.ID
left join dbo.IDSETREGISTER
on MKTSEGMENTSELECTION.SELECTIONID = IDSETREGISTER.ID
where MKTSEGMENT.ID = @ID;
-- Create the ID set...
set @SELECTIONNAME = 'Selection: ' + @SEGMENTNAME;
declare @SELECTIONDESCRIPTION as nvarchar(255) = 'Automatically generated selection for ' + @SEGMENTNAME;
exec dbo.USP_IDSETREGISTER_CREATEORUPDATE
@IDSETREGISTERID output,
@SELECTIONNAME,
@SELECTIONDESCRIPTION,
@SEGMENTVIEW,
0,
@RECORDTYPEID,
0,
1,
0,
@CHANGEAGENTID;
-- Mark IDSET as inactive to filter from searches
-- Make sure the RECORDTYPEID gets set. The SP doesn't update it on an UPDATE.
update dbo.IDSETREGISTER set
RECORDTYPEID = @RECORDTYPEID,
ACTIVE = 0,
ISSYSTEM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @IDSETREGISTERID;
-- Save the ID set ID on the segment table...
update dbo.MKTSEGMENT set
IDSETREGISTERID = @IDSETREGISTERID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
set @RETVAL = 1;
end catch
return isnull(@RETVAL, 0);
end