USP_COMMUNICATIONS_CREATEORUPDATE_LETTERS
This procedure creates or updates the communication letters for a given communication.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@MAILTYPECODE | tinyint | IN | |
@MAILEXPORTDEFINITIONID | uniqueidentifier | IN | |
@EMAILEXPORTDEFINITIONID | uniqueidentifier | IN | |
@LETTERS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_COMMUNICATIONS_CREATEORUPDATE_LETTERS
(
@SEGMENTATIONID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@MAILTYPECODE tinyint,
@MAILEXPORTDEFINITIONID uniqueidentifier = null,
@EMAILEXPORTDEFINITIONID uniqueidentifier = null,
@LETTERS xml = null
)
as
begin
-- @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...
-- @CHANNELCODE 0 - Mail, 1 - Email, 2 - Mail and Email
-- @CHANNELPREFERENCECODE 0 - Email, 1 - Mail
declare @COMMUNICATIONTYPECODE tinyint = 0;
declare @MAILDATE datetime = null;
declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier = null;
declare @NAMEFORMATPARAMETERID uniqueidentifier = null;
select
@COMMUNICATIONTYPECODE = COMMUNICATIONTYPECODE,
@MAILDATE = MAILDATE,
@ADDRESSPROCESSINGOPTIONID = ADDRESSPROCESSINGOPTIONID,
@NAMEFORMATPARAMETERID = NAMEFORMATPARAMETERID
from dbo.MKTSEGMENTATION
where ID = @SEGMENTATIONID;
declare @MAXSEQUENCE int = 0;
declare @COMMUNICATIONLETTERID uniqueidentifier;
declare @RUNNOW bit = 1;
declare @RUNSCHEDULED bit = 1;
declare @SEQUENCE int = 0;
declare @NAME nvarchar(100);
declare @CHANNELCODE tinyint;
declare @CHANNELPREFERENCECODE tinyint;
declare @OUTPUTTYPECODE tinyint;
declare @INCLUDEINACTIVE bit = 0;
declare @MKTASKLADDERID uniqueidentifier;
declare @MAILCONTENTHTML nvarchar(max);
declare @EMAILCONTENTHTML nvarchar(max);
declare @EMAILSUBJECT nvarchar(4000);
declare @EMAILFROMADDRESS dbo.UDT_EMAILADDRESS;
declare @EMAILFROMDISPLAYNAME nvarchar(255);
declare @EMAILREPLYTOADDRESS dbo.UDT_EMAILADDRESS;
declare @PAPERSIZECODE tinyint;
declare @MARGINTOP decimal(20, 4);
declare @MARGINBOTTOM decimal(20, 4);
declare @MARGINLEFT decimal(20, 4);
declare @MARGINRIGHT decimal(20, 4);
declare @MAILPACKAGEID uniqueidentifier;
declare @MAILSEGMENTID uniqueidentifier;
declare @EMAILPACKAGEID uniqueidentifier;
declare @EMAILSEGMENTID uniqueidentifier;
declare @SELECTIONS xml = null;
declare @EXCLUDEDSELECTIONS xml = null;
declare @EXCLUDEDSOLICITCODES xml = null;
declare @EXCLUDEBASEDONRECENTCOMMUNICATION bit;
declare @NUMRECENTCOMMUNICATIONPERIODS int;
declare @RECENTCOMMUNICATIONPERIODTYPECODE tinyint;
declare @EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR bit;
declare @NUMTOTALCOMMUNICATIONSINPASTYEAR int;
declare @EXCLUDEBASEDONRECENTGIVING bit;
declare @NUMRECENTGIVINGPERIODS int;
declare @RECENTGIVINGPERIODTYPECODE tinyint;
declare @EXCLUDEBASEDONTOTALGIVINGINPASTYEAR bit;
declare @TOTALREVENUEAMOUNTINPASTYEAR money;
declare @COMMUNICATIONTYPES xml = null;
declare @EMAILSEGMENTATIONSEGMENTID uniqueidentifier;
declare @EMAILRESPONSERATE decimal(5, 2);
declare @EMAILAVERAGEGIFTAMOUNT money;
declare @EMAILCOST money;
declare @MAILSEGMENTATIONSEGMENTID uniqueidentifier;
declare @MAILRESPONSERATE decimal(5, 2);
declare @MAILAVERAGEGIFTAMOUNT money;
declare @MAILCOST money;
declare @CURRENTDATE datetime = getDate();
-- Remove any letters from the mailing that were dropped
declare REMOVELETTERCURSOR cursor local fast_forward for
select
COMMUNICATIONLETTER.ID
from dbo.COMMUNICATIONLETTER
left outer join dbo.UFN_COMMUNICATION_GETLETTERS_FROMITEMLISTXML(@LETTERS) LETTERS
on COMMUNICATIONLETTER.ID = LETTERS.ID
where SEGMENTATIONID = @SEGMENTATIONID
and LETTERS.ID is null;
open REMOVELETTERCURSOR;
fetch next from REMOVELETTERCURSOR into @COMMUNICATIONLETTERID;
while (@@FETCH_STATUS = 0)
begin
exec dbo.USP_COMMUNICATIONLETTER_REMOVE @COMMUNICATIONLETTERID, @CHANGEAGENTID;
fetch next from REMOVELETTERCURSOR into @COMMUNICATIONLETTERID;
end
close REMOVELETTERCURSOR;
deallocate REMOVELETTERCURSOR;
-- Add/Update letters for this mailing
declare LETTERCURSOR cursor local fast_forward for
select
LETTERS.ID,
LETTERS.RUNNOW,
LETTERS.RUNSCHEDULED,
LETTERS.SEQUENCE,
LETTERS.NAME,
LETTERS.CHANNELCODE,
LETTERS.CHANNELPREFERENCECODE,
LETTERS.INCLUDEINACTIVE,
LETTERS.MKTASKLADDERID,
LETTERS.MAILCONTENTHTML,
LETTERS.EMAILCONTENTHTML,
LETTERS.EMAILSUBJECT,
coalesce(LETTERS.EMAILFROMADDRESS, ''),
LETTERS.EMAILFROMDISPLAYNAME,
coalesce(LETTERS.EMAILREPLYTOADDRESS, ''),
LETTERS.PAPERSIZECODE,
LETTERS.MARGINTOP,
LETTERS.MARGINBOTTOM,
LETTERS.MARGINLEFT,
LETTERS.MARGINRIGHT,
LETTERS.MAILPACKAGEID,
LETTERS.MAILSEGMENTID,
MAILSEGMENTATIONSEGMENT.ID,
coalesce(MAILSEGMENTATIONSEGMENT.RESPONSERATE, 0) as MAILRESPONSERATE,
coalesce(MAILSEGMENTATIONSEGMENT.GIFTAMOUNT, 0) as MAILAVERATEGIFTAMOUNT,
coalesce(MAILPACKAGE.UNITCOST, 0) as MAILCOST,
LETTERS.EMAILPACKAGEID,
LETTERS.EMAILSEGMENTID,
EMAILSEGMENTATIONSEGMENT.ID,
coalesce(EMAILSEGMENTATIONSEGMENT.RESPONSERATE, 0) as EMAILRESPONSERATE,
coalesce(EMAILSEGMENTATIONSEGMENT.GIFTAMOUNT, 0) as EMAILAVERATEGIFTAMOUNT,
coalesce(EMAILPACKAGE.UNITCOST, 0) as EMAILCOST,
LETTERS.SELECTIONSXML,
LETTERS.EXCLUDEDSELECTIONSXML,
LETTERS.EXCLUDEDSOLICITCODESXML,
LETTERS.EXCLUDEBASEDONRECENTCOMMUNICATION,
LETTERS.NUMRECENTCOMMUNICATIONPERIODS,
LETTERS.RECENTCOMMUNICATIONPERIODTYPECODE,
LETTERS.EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR,
LETTERS.NUMTOTALCOMMUNICATIONSINPASTYEAR,
LETTERS.EXCLUDEBASEDONRECENTGIVING,
LETTERS.NUMRECENTGIVINGPERIODS,
LETTERS.RECENTGIVINGPERIODTYPECODE,
LETTERS.EXCLUDEBASEDONTOTALGIVINGINPASTYEAR,
LETTERS.TOTALREVENUEAMOUNTINPASTYEAR,
LETTERS.COMMUNICATIONTYPESXML,
coalesce(LETTERS.OUTPUTTYPECODE, 0) as OUTPUTTYPECODE
from dbo.UFN_COMMUNICATION_GETLETTERS_FROMITEMLISTXML(@LETTERS) LETTERS
left join dbo.MKTSEGMENTATIONSEGMENT EMAILSEGMENTATIONSEGMENT
on EMAILSEGMENTATIONSEGMENT.SEGMENTATIONID = @SEGMENTATIONID
and LETTERS.EMAILSEGMENTID = EMAILSEGMENTATIONSEGMENT.SEGMENTID
left join dbo.MKTSEGMENTATIONSEGMENT MAILSEGMENTATIONSEGMENT
on MAILSEGMENTATIONSEGMENT.SEGMENTATIONID = @SEGMENTATIONID
and LETTERS.MAILSEGMENTID = MAILSEGMENTATIONSEGMENT.SEGMENTID
left join dbo.MKTPACKAGE EMAILPACKAGE
on LETTERS.EMAILPACKAGEID = EMAILPACKAGE.ID
left join dbo.MKTPACKAGE MAILPACKAGE
on LETTERS.EMAILPACKAGEID = MAILPACKAGE.ID
order by LETTERS.SEQUENCE asc;
open LETTERCURSOR;
fetch next from LETTERCURSOR into @COMMUNICATIONLETTERID, @RUNNOW, @RUNSCHEDULED, @SEQUENCE, @NAME, @CHANNELCODE, @CHANNELPREFERENCECODE,
@INCLUDEINACTIVE, @MKTASKLADDERID, @MAILCONTENTHTML, @EMAILCONTENTHTML,
@EMAILSUBJECT, @EMAILFROMADDRESS, @EMAILFROMDISPLAYNAME, @EMAILREPLYTOADDRESS, @PAPERSIZECODE, @MARGINTOP, @MARGINBOTTOM,
@MARGINLEFT, @MARGINRIGHT, @MAILPACKAGEID, @MAILSEGMENTID, @MAILSEGMENTATIONSEGMENTID, @MAILRESPONSERATE, @MAILAVERAGEGIFTAMOUNT, @MAILCOST,
@EMAILPACKAGEID, @EMAILSEGMENTID, @EMAILSEGMENTATIONSEGMENTID, @EMAILRESPONSERATE, @EMAILAVERAGEGIFTAMOUNT, @EMAILCOST,
@SELECTIONS, @EXCLUDEDSELECTIONS, @EXCLUDEDSOLICITCODES, @EXCLUDEBASEDONRECENTCOMMUNICATION, @NUMRECENTCOMMUNICATIONPERIODS,
@RECENTCOMMUNICATIONPERIODTYPECODE, @EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR, @NUMTOTALCOMMUNICATIONSINPASTYEAR,
@EXCLUDEBASEDONRECENTGIVING, @NUMRECENTGIVINGPERIODS, @RECENTGIVINGPERIODTYPECODE, @EXCLUDEBASEDONTOTALGIVINGINPASTYEAR,
@TOTALREVENUEAMOUNTINPASTYEAR, @COMMUNICATIONTYPES, @OUTPUTTYPECODE;
while (@@FETCH_STATUS = 0)
begin
if @COMMUNICATIONLETTERID is null or @COMMUNICATIONLETTERID = '00000000-0000-0000-0000-000000000000'
set @COMMUNICATIONLETTERID = newid();
if @OUTPUTTYPECODE = 1 -- CSV only
begin
set @CHANNELCODE = 0; -- assume mail only. Likely to change.
set @EMAILCONTENTHTML = '';
set @MAILCONTENTHTML = '';
set @EMAILFROMADDRESS = '';
set @EMAILSUBJECT = '';
set @EMAILFROMDISPLAYNAME = '';
set @EMAILREPLYTOADDRESS = '';
end
-- Create/Update the letter
if exists(select ID from dbo.COMMUNICATIONLETTER where ID = @COMMUNICATIONLETTERID)
update dbo.COMMUNICATIONLETTER set
RUNNOW = @RUNNOW,
RUNSCHEDULED = @RUNSCHEDULED,
SEQUENCE = @SEQUENCE,
NAME = @NAME,
CHANNELCODE = @CHANNELCODE,
CHANNELPREFERENCECODE = @CHANNELPREFERENCECODE,
OUTPUTTYPECODE = @OUTPUTTYPECODE,
INCLUDEINACTIVE = @INCLUDEINACTIVE,
MKTASKLADDERID = @MKTASKLADDERID,
MAILCONTENTHTML = @MAILCONTENTHTML,
EMAILCONTENTHTML = @EMAILCONTENTHTML,
EMAILSUBJECT = @EMAILSUBJECT,
EMAILFROMADDRESS = @EMAILFROMADDRESS,
EMAILFROMDISPLAYNAME = @EMAILFROMDISPLAYNAME,
EMAILREPLYTOADDRESS = @EMAILREPLYTOADDRESS,
PAPERSIZECODE = @PAPERSIZECODE,
MARGINTOP = @MARGINTOP,
MARGINBOTTOM = @MARGINBOTTOM,
MARGINLEFT = @MARGINLEFT,
MARGINRIGHT = @MARGINRIGHT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where COMMUNICATIONLETTER.ID = @COMMUNICATIONLETTERID;
else
insert into dbo.COMMUNICATIONLETTER
(ID, SEGMENTATIONID, RUNNOW, RUNSCHEDULED, COMMUNICATIONTYPECODE, SEQUENCE, NAME, CHANNELCODE, CHANNELPREFERENCECODE, OUTPUTTYPECODE, INCLUDEINACTIVE,
MKTASKLADDERID, MAILCONTENTHTML, EMAILCONTENTHTML, EMAILSUBJECT, EMAILFROMADDRESS, EMAILFROMDISPLAYNAME, EMAILREPLYTOADDRESS,
PAPERSIZECODE, MARGINTOP, MARGINBOTTOM, MARGINLEFT, MARGINRIGHT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@COMMUNICATIONLETTERID, @SEGMENTATIONID, @RUNNOW, @RUNSCHEDULED, @COMMUNICATIONTYPECODE, @SEQUENCE, @NAME, @CHANNELCODE, @CHANNELPREFERENCECODE, @OUTPUTTYPECODE, @INCLUDEINACTIVE,
@MKTASKLADDERID, @MAILCONTENTHTML, @EMAILCONTENTHTML, @EMAILSUBJECT, @EMAILFROMADDRESS, @EMAILFROMDISPLAYNAME, @EMAILREPLYTOADDRESS,
@PAPERSIZECODE, @MARGINTOP, @MARGINBOTTOM, @MARGINLEFT, @MARGINRIGHT, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- Save the selections to be included in this letter
merge into dbo.COMMUNICATIONLETTERSELECTION as target
using (select ID, SELECTIONID from dbo.UFN_COMMUNICATIONLETTER_GETINCLUDEDSELECTIONS_FROMITEMLISTXML(@SELECTIONS)) as source
on (target.ID = source.ID and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID)
when not matched by target then
insert (ID, COMMUNICATIONLETTERID, IDSETREGISTERID, FILTERTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @COMMUNICATIONLETTERID, source.SELECTIONID, 0, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
when not matched by source and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID and target.FILTERTYPECODE = 0 then delete;
-- Save/Update the selections to be excluded from this letter
merge into dbo.COMMUNICATIONLETTERSELECTION as target
using (select ID, SELECTIONID from dbo.UFN_COMMUNICATIONLETTER_GETEXCLUDEDSELECTIONS_FROMITEMLISTXML(@EXCLUDEDSELECTIONS)) as source
on (target.ID = source.ID and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID)
when not matched by target then
insert (ID, COMMUNICATIONLETTERID, IDSETREGISTERID, FILTERTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @COMMUNICATIONLETTERID, source.SELECTIONID, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
when not matched by source and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID and target.FILTERTYPECODE = 1 then delete;
-- Save/Update the solicit codes to be excluded from this letter
merge into dbo.COMMUNICATIONLETTEREXCLUDEDSOLICITCODE as target
using (select ID, SOLICITCODEID from dbo.UFN_COMMUNICATIONLETTER_GETEXCLUDEDSOLICITCODES_FROMITEMLISTXML(@EXCLUDEDSOLICITCODES)) as source
on (target.ID = source.ID and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID)
when not matched by target then
insert (ID, COMMUNICATIONLETTERID, SOLICITCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @COMMUNICATIONLETTERID, source.SOLICITCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
when not matched by source and target.COMMUNICATIONLETTERID = @COMMUNICATIONLETTERID then delete;
-- Create an IDSET for the communication exclusions (Appeal mailings only)
if @COMMUNICATIONTYPECODE = 1
begin
declare @COMMUNICATIONEXCLUSIONID uniqueidentifier = null;
declare @IDSETREGISTERID uniqueidentifier = null;
exec dbo.USP_COMMUNICATIONLETTERACTIVITYEXCLUSIONS_CREATEORUPDATE
@COMMUNICATIONEXCLUSIONID output,
@IDSETREGISTERID output,
@CHANGEAGENTID,
@COMMUNICATIONLETTERID,
@EXCLUDEBASEDONRECENTCOMMUNICATION,
@NUMRECENTCOMMUNICATIONPERIODS,
@RECENTCOMMUNICATIONPERIODTYPECODE,
@EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR,
@NUMTOTALCOMMUNICATIONSINPASTYEAR,
@EXCLUDEBASEDONRECENTGIVING,
@NUMRECENTGIVINGPERIODS,
@RECENTGIVINGPERIODTYPECODE,
@EXCLUDEBASEDONTOTALGIVINGINPASTYEAR,
@TOTALREVENUEAMOUNTINPASTYEAR,
@COMMUNICATIONTYPES;
if @IDSETREGISTERID is not null
begin
declare @EXCLUDESELECTIONSTABLE table ([ID] uniqueidentifier, [SELECTIONID] uniqueidentifier);
insert into @EXCLUDESELECTIONSTABLE (ID, SELECTIONID)
select
ID,
SELECTIONID
from dbo.UFN_COMMUNICATIONLETTER_GETEXCLUDEDSELECTIONS_FROMITEMLISTXML(@EXCLUDEDSELECTIONS);
insert into @EXCLUDESELECTIONSTABLE
(ID, SELECTIONID)
values
(newID(), @IDSETREGISTERID);
-- Add communication exclusions IDSETREGISTERID to the EXCLUDEDSELECTIONS
set @EXCLUDEDSELECTIONS = (
select ID, SELECTIONID
from @EXCLUDESELECTIONSTABLE
for xml raw('ITEM'),type,elements,root('EXCLUDEDSELECTIONS'),BINARY BASE64
);
end
end
declare @PACKAGENAME nvarchar(100);
declare @PACKAGEDESCRIPTION nvarchar(255);
declare @SINGLECHANNEL bit;
declare @PREFERREDCHANNEL bit;
set @SINGLECHANNEL =
case @CHANNELCODE
when 2 then 0
else 1
end;
-- If sending email or both, create/update the email package, segment, and segmentation segment
if @CHANNELCODE <> 0
begin
-- Save the package
set @PACKAGENAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME('Email Package: ' + left(@NAME, 46) + ' (' + convert(nvarchar(36), @COMMUNICATIONLETTERID) + ')');
set @PACKAGEDESCRIPTION = 'Automatically generated email package for ''' + @NAME + ''' communication letter.';
-- Remove IsSystem flag before saving
update dbo.MKTPACKAGE set
ISSYSTEM = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @EMAILPACKAGEID;
exec dbo.USP_MKTPACKAGE_EMAIL_SAVE @EMAILPACKAGEID output, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', null, @EMAILCOST, 0, null, 0, 0, @EMAILEXPORTDEFINITIONID, null, '', null, @CURRENTAPPUSERID;
update dbo.MKTPACKAGE set
ISSYSTEM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @EMAILPACKAGEID;
-- Create the segment
set @PREFERREDCHANNEL =
case @CHANNELCODE
when 2 then
case @CHANNELPREFERENCECODE
when 0 then 1
else 0
end
else 0
end;
exec dbo.[USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2]
@EMAILSEGMENTID output,
@CURRENTAPPUSERID,
@CHANGEAGENTID,
@COMMUNICATIONLETTERID,
@NAME,
@SELECTIONS,
@EXCLUDEDSELECTIONS,
@EXCLUDEDSOLICITCODES,
@MAILTYPECODE, -- MailTypeCode 1 - Appeals
1, -- DeliveryMethodCode 1 - Email
@SINGLECHANNEL,
@PREFERREDCHANNEL,
@INCLUDEINACTIVE;
-- Create/Update the segmentation segment
set @SEQUENCE =
case @CHANNELCODE
when 2 then
case @CHANNELPREFERENCECODE
when 0 then @MAXSEQUENCE + 1
else @MAXSEQUENCE + 2
end
else @MAXSEQUENCE + 1
end
if @EMAILSEGMENTATIONSEGMENTID is null
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT]
@EMAILSEGMENTATIONSEGMENTID output,
@CHANGEAGENTID,
@SEGMENTATIONID, --@SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE
null, --@MARKETINGPLANBRIEFID
@EMAILSEGMENTID, --@SEGMENTID
'', --@CODE
'', --@TESTSEGMENTCODE
@EMAILPACKAGEID, --@PACKAGEID
'', --@PACKAGECODE
@EMAILRESPONSERATE, --@RESPONSERATE (Revenue Calculator)
@EMAILAVERAGEGIFTAMOUNT, --@GIFTAMOUNT (Revenue Calculator)
100, --@SAMPLESIZE
0, --@SAMPLESIZETYPECODE
0, --@SAMPLESIZEMETHODCODE
@SEQUENCE,
@MKTASKLADDERID, --@MKTASKLADDERID
1, --@SAMPLESIZEEXCLUDEREMAINDER
0, --@OVERRIDEADDRESSPROCESSING
1, --@USEADDRESSPROCESSING
@ADDRESSPROCESSINGOPTIONID,
1, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
@MAILDATE, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
@NAMEFORMATPARAMETERID,
null, --@CODEVALUEID
null, --@TESTSEGMENTCODEVALUEID
null, --@PACKAGECODEVALUEID
null, --@ITEMLIST
'', --@CHANNELSOURCECODE
null; --@CHANNELSOURCECODEVALUEID
else
begin
exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_6]
@EMAILSEGMENTATIONSEGMENTID,
@CHANGEAGENTID,
@EMAILSEGMENTID, --@SEGMENTID
'', --@CODE
'', --@TESTSEGMENTCODE
@EMAILPACKAGEID, --@PACKAGEID
'', --@PACKAGECODE
@EMAILRESPONSERATE, --@RESPONSERATE (Revenue Calculator)
@EMAILAVERAGEGIFTAMOUNT, --@GIFTAMOUNT (Revenue Calculator)
100, --@SAMPLESIZE
0, --@SAMPLESIZETYPECODE
0, --@SAMPLESIZEMETHODCODE
1, --@SAMPLESIZEEXCLUDEREMAINDER
@MKTASKLADDERID, --@MKTASKLADDERID
0, --@OVERRIDEADDRESSPROCESSING
1, --@USEADDRESSPROCESSING
@ADDRESSPROCESSINGOPTIONID,
1, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
@MAILDATE, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
@NAMEFORMATPARAMETERID,
null, --@CODEVALUEID
null, --@PACKAGECODEVALUEID
null, --@TESTSEGMENTCODEVALUEID
null, --@ITEMLIST
'', --@CHANNELSOURCECODE
null, --@CHANNELSOURCECODEVALUEID
0, --@EXCLUDESPOUSE
0, --@OVERRIDEBUSINESSUNITS
null; --@BUSINESSUNITS
update dbo.MKTSEGMENTATIONSEGMENT set
SEQUENCE = @SEQUENCE
where ID = @EMAILSEGMENTATIONSEGMENTID;
end
end
-- If sending mail or both, create/update package, segment, and segmentation segment
if @CHANNELCODE <> 1
begin
--Save the package
set @PACKAGENAME = dbo.UFN_MKTPACKAGE_GETUNIQUENAME('Mail Package: ' + left(@NAME, 46) + ' (' + convert(nvarchar(36), @COMMUNICATIONLETTERID) + ')');
set @PACKAGEDESCRIPTION = 'Automatically generated mail package for ''' + @NAME + ''' communication letter.';
if not exists(select ID from dbo.MKTPACKAGE where ID = @MAILPACKAGEID)
exec dbo.USP_DATAFORMTEMPLATE_ADD_MKTPACKAGE_MAIL @MAILPACKAGEID output, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', @MAILCOST, 0, null, null, null, @MAILEXPORTDEFINITIONID, '255', null, '', null, @CURRENTAPPUSERID;
else
begin
-- Remove IsSystem flag before editing the mail package
update dbo.MKTPACKAGE set
ISSYSTEM = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @MAILPACKAGEID;
exec dbo.USP_DATAFORMTEMPLATE_EDIT_MKTPACKAGE_MAIL @MAILPACKAGEID, @CHANGEAGENTID, @PACKAGENAME, @PACKAGEDESCRIPTION, '', null, @MAILCOST, 0, null, null, @MAILEXPORTDEFINITIONID, null, '', null;
end
update dbo.MKTPACKAGE set
ISSYSTEM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @MAILPACKAGEID;
set @PREFERREDCHANNEL =
case @CHANNELCODE
when 2 then
case @CHANNELPREFERENCECODE
when 1 then 1
else 0
end
else 0
end;
-- Create or update the segment
exec dbo.[USP_COMMUNICATIONS_CREATEORUPDATESEGMENT_2]
@MAILSEGMENTID output,
@CURRENTAPPUSERID,
@CHANGEAGENTID,
@COMMUNICATIONLETTERID,
@NAME,
@SELECTIONS,
@EXCLUDEDSELECTIONS,
@EXCLUDEDSOLICITCODES,
@MAILTYPECODE, -- MailTypeCode 1 - Appeals
0, -- DeliveryMethodCode 0 - Mail
@SINGLECHANNEL,
@PREFERREDCHANNEL,
@INCLUDEINACTIVE;
-- Create/Update the segmentation segment
set @SEQUENCE =
case @CHANNELCODE
when 2 then
case @CHANNELPREFERENCECODE
when 1 then @MAXSEQUENCE + 1
else @MAXSEQUENCE + 2
end
else @MAXSEQUENCE + 1
end
if @MAILSEGMENTATIONSEGMENTID is null
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONSEGMENT]
@MAILSEGMENTATIONSEGMENTID output,
@CHANGEAGENTID,
@SEGMENTATIONID, --@SEGMENTATIONIDMARKETINGPLANBRIEFIDSEQUENCE
null, --@MARKETINGPLANBRIEFID
@MAILSEGMENTID, --@SEGMENTID
'', --@CODE
'', --@TESTSEGMENTCODE
@MAILPACKAGEID, --@PACKAGEID
'', --@PACKAGECODE
@MAILRESPONSERATE, --@RESPONSERATE (Revenue Calculator)
@MAILAVERAGEGIFTAMOUNT, --@GIFTAMOUNT (Revenue Calculator)
100, --@SAMPLESIZE
0, --@SAMPLESIZETYPECODE
0, --@SAMPLESIZEMETHODCODE
@SEQUENCE,
@MKTASKLADDERID, --@MKTASKLADDERID
1, --@SAMPLESIZEEXCLUDEREMAINDER
0, --@OVERRIDEADDRESSPROCESSING
1, --@USEADDRESSPROCESSING
@ADDRESSPROCESSINGOPTIONID,
1, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
@MAILDATE, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
@NAMEFORMATPARAMETERID,
null, --@CODEVALUEID
null, --@TESTSEGMENTCODEVALUEID
null, --@PACKAGECODEVALUEID
null, --@ITEMLIST
'', --@CHANNELSOURCECODE
null; --@CHANNELSOURCECODEVALUEID
else
begin
exec dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_6]
@MAILSEGMENTATIONSEGMENTID,
@CHANGEAGENTID,
@MAILSEGMENTID, --@SEGMENTID
'', --@CODE
'', --@TESTSEGMENTCODE
@MAILPACKAGEID, --@PACKAGEID
'', --@PACKAGECODE
@MAILRESPONSERATE, --@RESPONSERATE (Revenue Calculator)
@MAILAVERAGEGIFTAMOUNT, --@GIFTAMOUNT (Revenue Calculator)
100, --@SAMPLESIZE
0, --@SAMPLESIZETYPECODE
0, --@SAMPLESIZEMETHODCODE
1, --@SAMPLESIZEEXCLUDEREMAINDER
@MKTASKLADDERID, --@MKTASKLADDERID
0, --@OVERRIDEADDRESSPROCESSING
1, --@USEADDRESSPROCESSING
@ADDRESSPROCESSINGOPTIONID,
1, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE
@MAILDATE, --@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE
@NAMEFORMATPARAMETERID,
null, --@CODEVALUEID
null, --@PACKAGECODEVALUEID
null, --@TESTSEGMENTCODEVALUEID
null, --@ITEMLIST
'', --@CHANNELSOURCECODE
null, --@CHANNELSOURCECODEVALUEID
0, --@EXCLUDESPOUSE
0, --@OVERRIDEBUSINESSUNITS
null; --@BUSINESSUNITS
update dbo.MKTSEGMENTATIONSEGMENT set
SEQUENCE = @SEQUENCE
where ID = @MAILSEGMENTATIONSEGMENTID;
end
end
-- Delete packages and segments for lingering channels
declare @SEGMENTATIONSEGMENTID uniqueidentifier = null;
declare @MKTSEGMENTATIONPACKAGEID uniqueidentifier = null;
declare @LINGERINGCHANNEL_PACKAGEID uniqueidentifier = null;
declare @LINGERINGCHANNEL_SEGMENTID uniqueidentifier = null;
if @CHANNELCODE = 1 and @MAILPACKAGEID is not null and @MAILSEGMENTID is not null
begin
set @LINGERINGCHANNEL_PACKAGEID = @MAILPACKAGEID;
set @MAILPACKAGEID = null;
set @LINGERINGCHANNEL_SEGMENTID = @MAILSEGMENTID;
set @MAILSEGMENTID = null;
end
if @CHANNELCODE = 0 and @EMAILPACKAGEID is not null and @EMAILSEGMENTID is not null
begin
set @LINGERINGCHANNEL_PACKAGEID = @EMAILPACKAGEID;
set @EMAILPACKAGEID = null;
set @LINGERINGCHANNEL_SEGMENTID = @EMAILSEGMENTID;
set @EMAILSEGMENTID = null;
end
-- Update the letter with the package and segment id's
update dbo.COMMUNICATIONLETTER set
MAILPACKAGEID = case @MAILPACKAGEID when '00000000-0000-0000-0000-000000000000' then null else @MAILPACKAGEID end,
MAILSEGMENTID = case @MAILSEGMENTID when '00000000-0000-0000-0000-000000000000' then null else @MAILSEGMENTID end,
EMAILPACKAGEID = case @EMAILPACKAGEID when '00000000-0000-0000-0000-000000000000' then null else @EMAILPACKAGEID end,
EMAILSEGMENTID = case @EMAILSEGMENTID when '00000000-0000-0000-0000-000000000000' then null else @EMAILSEGMENTID end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @COMMUNICATIONLETTERID;
-- Remove package/segment for lingering channel
if @LINGERINGCHANNEL_PACKAGEID is not null and @LINGERINGCHANNEL_SEGMENTID is not null
begin
select
@SEGMENTATIONSEGMENTID = ID
from dbo.MKTSEGMENTATIONSEGMENT
where SEGMENTID = @LINGERINGCHANNEL_SEGMENTID
and SEGMENTATIONID = @SEGMENTATIONID;
if @SEGMENTATIONSEGMENTID is not null
exec dbo.USP_MKTSEGMENTATIONSEGMENT_DELETE @SEGMENTATIONSEGMENTID, @CHANGEAGENTID;
-- delete the segmentation package, not the package itself. The package is needed to maintain run history for tables like REVENUELETTER.
select
@MKTSEGMENTATIONPACKAGEID = ID
from dbo.MKTSEGMENTATIONPACKAGE
where PACKAGEID = @LINGERINGCHANNEL_PACKAGEID
and SEGMENTATIONID = @SEGMENTATIONID;
exec dbo.USP_MKTSEGMENTATIONPACKAGE_DELETE @MKTSEGMENTATIONPACKAGEID, @CHANGEAGENTID;
update dbo.MKTSEGMENT set
ISSYSTEM = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @LINGERINGCHANNEL_SEGMENTID;
exec dbo.USP_MKTSEGMENT_DELETE @LINGERINGCHANNEL_SEGMENTID, @CHANGEAGENTID, @CURRENTAPPUSERID;
end
if @CHANNELCODE = 2
set @MAXSEQUENCE = @MAXSEQUENCE + 2;
else
set @MAXSEQUENCE = @MAXSEQUENCE + 1;
fetch next from LETTERCURSOR into @COMMUNICATIONLETTERID, @RUNNOW, @RUNSCHEDULED, @SEQUENCE, @NAME, @CHANNELCODE, @CHANNELPREFERENCECODE,
@INCLUDEINACTIVE, @MKTASKLADDERID, @MAILCONTENTHTML, @EMAILCONTENTHTML,
@EMAILSUBJECT, @EMAILFROMADDRESS, @EMAILFROMDISPLAYNAME, @EMAILREPLYTOADDRESS, @PAPERSIZECODE, @MARGINTOP, @MARGINBOTTOM,
@MARGINLEFT, @MARGINRIGHT, @MAILPACKAGEID, @MAILSEGMENTID, @MAILSEGMENTATIONSEGMENTID, @MAILRESPONSERATE, @MAILAVERAGEGIFTAMOUNT, @MAILCOST,
@EMAILPACKAGEID, @EMAILSEGMENTID, @EMAILSEGMENTATIONSEGMENTID, @EMAILRESPONSERATE, @EMAILAVERAGEGIFTAMOUNT, @EMAILCOST,
@SELECTIONS, @EXCLUDEDSELECTIONS, @EXCLUDEDSOLICITCODES, @EXCLUDEBASEDONRECENTCOMMUNICATION, @NUMRECENTCOMMUNICATIONPERIODS,
@RECENTCOMMUNICATIONPERIODTYPECODE, @EXCLUDEBASEDONTOTALCOMMUNICATIONSINPASTYEAR, @NUMTOTALCOMMUNICATIONSINPASTYEAR,
@EXCLUDEBASEDONRECENTGIVING, @NUMRECENTGIVINGPERIODS, @RECENTGIVINGPERIODTYPECODE, @EXCLUDEBASEDONTOTALGIVINGINPASTYEAR,
@TOTALREVENUEAMOUNTINPASTYEAR, @COMMUNICATIONTYPES, @OUTPUTTYPECODE;
end
close LETTERCURSOR;
deallocate LETTERCURSOR;
end