USP_REVENUEBATCH_GETMARKETINGDATA
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FINDERNUMBER | bigint | IN | |
@LOOKUPSINGLEDESIGNATION | bit | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SOURCECODE | nvarchar(50) | INOUT | |
@MAILINGID | uniqueidentifier | INOUT | |
@APPEALID | uniqueidentifier | INOUT | |
@CONSTITUENTID | uniqueidentifier | INOUT | |
@FINDERNUMBERISVALID | bit | INOUT | |
@SINGLEDESIGNATIONID | uniqueidentifier | INOUT | |
@BATCHID | uniqueidentifier | IN | |
@IMPORT | bit | IN |
Definition
Copy
CREATE procedure dbo.[USP_REVENUEBATCH_GETMARKETINGDATA]
(
@FINDERNUMBER bigint = 0,
@LOOKUPSINGLEDESIGNATION bit = 0,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SOURCECODE nvarchar(50) = '' output,
@MAILINGID uniqueidentifier = null output,
@APPEALID uniqueidentifier = null output,
@CONSTITUENTID uniqueidentifier = null output,
@FINDERNUMBERISVALID bit = 0 output,
@SINGLEDESIGNATIONID uniqueidentifier = null output,
@BATCHID uniqueidentifier = null,
@IMPORT bit = 0
)
as
set nocount on;
declare @LOOKUPDEFAULTDESIGNATIONFROMAPPEAL bit = 0;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
if @FINDERNUMBER > 0
begin
/*
Stop parameter sniffing on @FINDERNUMBER. When a plan is generated for this procedure and FINDERNUMBER is found
in a large number of rows, SQL may determine it is more efficient to do an index scan than seek any FINDERNUMBER index.
We do not want to cache this plan as it does not represent a typical finder number and the scan can be significantly
worse in cases where FINDERNUMBER appears in a small amount of rows.
*/
declare @FINDERNUMBER_LOCAL bigint = @FINDERNUMBER;
/* Set the appeal, marketing effort, source code, and constituent if finder number is supplied. */
declare @FN_CONSTITUENTID uniqueidentifier;
declare @FN_APPEALID uniqueidentifier;
declare @FN_SOURCECODE nvarchar(60);
declare @FN_MAILINGID uniqueidentifier;
--First look in the constituent segment table for a match (don't bother looking in the constituent appeal table since it can be modified by the user)...
select top 1
@FN_CONSTITUENTID = [CONSTITUENTSEGMENT].[CONSTITUENTID],
@FN_APPEALID = nullif([MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID], ''),
@FN_SOURCECODE = [MKTSOURCECODEMAP].[SOURCECODE],
@FN_MAILINGID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
from dbo.[CONSTITUENTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [CONSTITUENTSEGMENT].[SEGMENTID]
left join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
left join dbo.[MKTSOURCECODEMAP] on [MKTSOURCECODEMAP].[ID] = [CONSTITUENTSEGMENT].[SOURCECODEMAPID]
where [CONSTITUENTSEGMENT].[FINDERNUMBER] = @FINDERNUMBER_LOCAL;
if @FN_CONSTITUENTID is null and @BATCHID is not null --not a constituent yet
begin
-- Check to see if there is a discrepancy in the constituent records between the BATCHREVENUE and BATCHREVENUECONSTITUENTAPPEAL
declare @BATCHREVENUE_CONSTITUENTID uniqueidentifier;
select top 1
@BATCHREVENUE_CONSTITUENTID = [CONSTITUENTID]
from dbo.[BATCHREVENUE]
where [FINDERNUMBER] = @FINDERNUMBER_LOCAL
and [BATCHID] = @BATCHID;
declare @CONSTITUENT_EXISTS bit = case when exists(select 1 from dbo.[CONSTITUENT] where [ID] = @BATCHREVENUE_CONSTITUENTID) then 1 else 0 end;
if @CONSTITUENT_EXISTS = 0
begin
--If no match was found above, then we have a finder number from an acquisition list,
--so we need to lookup the finder number and add the list person as a constituent.
exec dbo.[USP_FINDERNUMBER_ADDMEMBER]
@ID = @FN_CONSTITUENTID output,
@CHANGEAGENTID = @CHANGEAGENTID,
@FINDERNUMBER = @FINDERNUMBER_LOCAL,
@REVENUEBATCH = 1,
@CURRENTAPPUSERID = @CURRENTAPPUSERID;
end
select top 1
@FN_CONSTITUENTID = [CONSTITUENTID],
@FN_APPEALID = [APPEALID],
@FN_SOURCECODE = [SOURCECODE],
@FN_MAILINGID = [MKTSEGMENTATIONID]
from dbo.[BATCHREVENUECONSTITUENTAPPEAL]
where [FINDERNUMBER] = @FINDERNUMBER_LOCAL;
-- WI 350038: Check if there is a discrepancy between the batch revenue and batch constituent appeal tables. It could be an indication
-- of a resolved duplicate constituent record in the batch revenue table. So therefore we should take the record in batch revenue.
if @FN_CONSTITUENTID <> @BATCHREVENUE_CONSTITUENTID and @CONSTITUENT_EXISTS = 1
begin
-- Delete the record in the batch revenue constituent table because the constituent now exists
exec dbo.[USP_BATCHREVENUECONSTITUENT_DELETEBYID_WITHCHANGEAGENTID] @FN_CONSTITUENTID, @CHANGEAGENTID;
-- Update the batch revenue constituent appeal constituent id to be the correct constituent id
update dbo.[BATCHREVENUECONSTITUENTAPPEAL]
set [CONSTITUENTID] = @BATCHREVENUE_CONSTITUENTID
where [CONSTITUENTID] = @FN_CONSTITUENTID;
-- Setting finder number constituent id to the correct constituent id from the batch revenue table
set @FN_CONSTITUENTID = @BATCHREVENUE_CONSTITUENTID;
end
end
if @FN_CONSTITUENTID is not null
begin
-- If finder number info was loaded, override any defaulted mailing values.
select
@CONSTITUENTID = @FN_CONSTITUENTID,
@SOURCECODE = isnull(@FN_SOURCECODE, ''),
@APPEALID = @FN_APPEALID,
@MAILINGID = @FN_MAILINGID,
@FINDERNUMBERISVALID = 1,
@LOOKUPDEFAULTDESIGNATIONFROMAPPEAL = 1;
end
end
else if len(@SOURCECODE) > 0 and (select count(*) from dbo.[MKTSOURCECODEMAP] inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONID] where [MKTSEGMENTATION].[ACTIVE] = 1 and [MKTSOURCECODEMAP].[SOURCECODE] = @SOURCECODE) = 1
begin
/* Set the appeal and marketing effort if a source code is supplied, and the source code is unique across all marketing efforts */
select
@APPEALID = nullif([MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID], ''),
@MAILINGID = [MKTSOURCECODEMAP].[SEGMENTATIONID],
@LOOKUPDEFAULTDESIGNATIONFROMAPPEAL = 1
from dbo.[MKTSOURCECODEMAP]
inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSOURCECODEMAP].[SEGMENTATIONID] and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONID]
where [MKTSEGMENTATION].[ACTIVE] = 1
and [MKTSOURCECODEMAP].[SOURCECODE] = @SOURCECODE;
end
else if @MAILINGID is not null
begin
/* Set the appeal if a marketing effort is supplied */
select
@APPEALID = nullif([MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID], ''),
@LOOKUPDEFAULTDESIGNATIONFROMAPPEAL = 1
from dbo.[MKTSEGMENTATIONACTIVATE]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]
where [MKTSEGMENTATION].[ACTIVE] = 1
and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
and [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = @MAILINGID;
end
else if @APPEALID is not null and (select count(*) from dbo.[MKTSEGMENTATIONACTIVATE] inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] where [MKTSEGMENTATION].[ACTIVE] = 1 and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0' and nullif([MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID], '') = @APPEALID) = 1 and @IMPORT = 1
begin
/* Set the marketing effort if an appeal is supplied, and the appeal is unique across all marketing efforts */
select
@MAILINGID = [MKTSEGMENTATION].[ID],
@LOOKUPDEFAULTDESIGNATIONFROMAPPEAL = 1
from dbo.[MKTSEGMENTATIONACTIVATE]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]
where [MKTSEGMENTATION].[ACTIVE] = 1
and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
and nullif([MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID], '') = @APPEALID;
end
if @LOOKUPDEFAULTDESIGNATIONFROMAPPEAL = 1 and @SINGLEDESIGNATIONID is null and @LOOKUPSINGLEDESIGNATION = 1
begin
select
@SINGLEDESIGNATIONID = [DESIGNATIONID]
from dbo.[APPEALDESIGNATION]
where [APPEALID] = @APPEALID
and [ISDEFAULT] = 1;
end
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
end catch
return 0;