USP_FINDERNUMBER_ADDMEMBER

This procedure adds an acquisition list member as a temporary record.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@FINDERNUMBER bigint IN
@REVENUEBATCH bit IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_FINDERNUMBER_ADDMEMBER]
(
  @ID uniqueidentifier output,
  @CHANGEAGENTID uniqueidentifier = null,
  @FINDERNUMBER bigint,
  @REVENUEBATCH bit = 0,
  @CURRENTAPPUSERID uniqueidentifier = null
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @SEGMENTID uniqueidentifier;
  declare @TESTSEGMENTID uniqueidentifier;
  declare @LISTMEMBERID uniqueidentifier;
  declare @CONSTITUENTID uniqueidentifier;
  declare @RECORDSOURCEID uniqueidentifier;
  declare @SOURCECODE nvarchar(50);
  declare @APPEALID uniqueidentifier;
  declare @DATESENT datetime;
  declare @COMMENTS nvarchar(50);
  declare @PACKAGEID uniqueidentifier;
  declare @CURRENTDATE datetime = getdate();

  if isnull(@FINDERNUMBER, 0) > 0
    begin
      if dbo.[UFN_MKTFINDERNUMBER_VALIDATE_MOD10](@FINDERNUMBER) = 0
        begin
          --Batch will handle these errors, so skip them here...

          if @REVENUEBATCH = 0
            raiserror('Finder number failed check digit.', 13, 1);
          return 1;
        end

      set @SEGMENTATIONID = dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GETSEGMENTATION](@FINDERNUMBER);
    end

  if @SEGMENTATIONID is null
    begin
      --Batch will handle these errors, so skip them here...

      if @REVENUEBATCH = 0
        raiserror('Invalid finder number.', 13, 1);
      return 1;
    end

  if @CHANGEAGENTID is null
    exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

  -- this is the record source ID for the standard BBEC/DM query view.

  set @RECORDSOURCEID = dbo.[UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID]();

  -- this table structure must match the one defined in the Marketing.Catalog\Segmentation\FinderNumber\FinderNumberLookup.DataList.xml

  declare @CONSTITDATA as table(
    [ID] nvarchar(36),
    [CONSTITUENTID] nvarchar(36),
    [FULLNAME] nvarchar(255),
    [FIRSTNAME] nvarchar(255),
    [MIDDLENAME] nvarchar(255),
    [LASTNAME] nvarchar(255),
    [TITLE] nvarchar(255),
    [SUFFIX] nvarchar(255),
    [COUNTRY] nvarchar(255),
    [ADDRESSLINE1] nvarchar(255),
    [ADDRESSLINE2] nvarchar(255),
    [ADDRESSLINE3] nvarchar(255),
    [ADDRESSLINE4] nvarchar(255),
    [ADDRESSLINE5] nvarchar(255),
    [CITY] nvarchar(255),
    [STATE] nvarchar(255),
    [POSTCODE] nvarchar(255),
    [CART] nvarchar(255),
    [DPC] nvarchar(255),
    [LOT] nvarchar(255),
    [PHONENUMBER] nvarchar(255),
    [EMAILADDRESS] nvarchar(255),
    [MAILINGIDINTEGER] int,
    [MAILDATE] datetime,
    [SOURCECODE] nvarchar(50),
    [APPEALSYSTEMID] nvarchar(36),
    [APPEALID] nvarchar(100),
    [APPEALDESCRIPTION] nvarchar(100),
    [PACKAGECODE] nvarchar(10),
    [PACKAGENAME] nvarchar(100),
    [PACKAGEDESCRIPTION] nvarchar(255),
    [SEGMENTID] uniqueidentifier,
    [SEGMENTNAME] nvarchar(203),
    [LISTNAME] nvarchar(100),
    [TITLE2] nvarchar(255),
    [SUFFIX2] nvarchar(255)
  );

  insert into @CONSTITDATA
    exec dbo.[USP_DATALIST_MKTFINDERNUMBERLOOKUP] @FINDERNUMBER, @RECORDSOURCEID;

  -- if the [CONSTITUENTID] field is blank, but we returned a row, then this

  --  person in a member of a List and needs to be added as a constituent.  If 

  --  no rows are returned, then we didn't find anyone with a matching finder number


  if exists(select * from @CONSTITDATA)
    begin
      -- [CONSTITUENTID] will be the BBEC Constituent.ID if this is a person from the house file,

      --  or a list member who has become a donor.  If the [CONSTITUENTID] field is empty (null or '') then

      --  we want to create a new constituent using the [ID] that's returned by USP_DATALIST_MKTFINDERNUMBERLOOKUP.

      --  That ID maps to the MKTLIST_<guid> or MKTFINDERFILE_<guid> [ID] field.

      declare @TMPCONSTITUENTID nvarchar(36);
      select top 1 @LISTMEMBERID = [ID], @TMPCONSTITUENTID = [CONSTITUENTID] from @CONSTITDATA;
      if @TMPCONSTITUENTID is null
 set @CONSTITUENTID = @LISTMEMBERID
      else if len(@TMPCONSTITUENTID) < 36 
        set @CONSTITUENTID = @LISTMEMBERID
      else
        set @CONSTITUENTID = @TMPCONSTITUENTID;
    end
  else
    begin
      --Batch will handle these errors, so skip them here...

      if @REVENUEBATCH = 0
        raiserror('No member with this finder number was found in an acquisition list.', 13, 1);
      return 1;
    end

  -- if we are not in batch then update the temporary list constituent table

  if @REVENUEBATCH = 0
    begin
      if not exists(select * from dbo.[MKTFINDERNUMBERCONSTITUENT] where [ID] = @CONSTITUENTID)
        begin
          -- insert constituent information

          begin try
            insert into dbo.[MKTFINDERNUMBERCONSTITUENT] (
              [ID],
              [FIRSTNAME],
              [MIDDLENAME],
              [KEYNAME],
              [TITLECODEID],
              [SUFFIXCODEID],
              [TITLE2CODEID],
              [SUFFIX2CODEID],
              [ADDRESSBLOCK],
              [CITY],
              [POSTCODE],
              [COUNTRYID],
              [STATEID],
              [CART],
              [DPC],
              [LOT]
            )
            select
              @CONSTITUENTID,
              isnull(C.[FIRSTNAME], ''),
              isnull(C.[MIDDLENAME], ''),
              isnull(C.[LASTNAME], ''),
              (select [ID] from dbo.[TITLECODE] where [DESCRIPTION] = C.[TITLE]),
              (select [ID] from dbo.[SUFFIXCODE] where [DESCRIPTION] = C.[SUFFIX]),
              (select [ID] from dbo.[TITLECODE] where [DESCRIPTION] = C.[TITLE2]),
              (select [ID] from dbo.[SUFFIXCODE] where [DESCRIPTION] = C.[SUFFIX2]),
              isnull(dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                C.[ADDRESSLINE1],
                dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                  C.[ADDRESSLINE2],
                  dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                    C.[ADDRESSLINE3],
                    dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                      C.[ADDRESSLINE4], C.[ADDRESSLINE5]
                    )
                  )
                )
              ), ''),
              isnull(C.[CITY], ''),
              isnull(C.[POSTCODE], ''),
              (select isnull((select top 1 [ID] from dbo.[COUNTRY] where [ABBREVIATION] = [C].[COUNTRY] or [DESCRIPTION] = [C].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]())),
              (case when (select count(*) from dbo.[STATE] where [ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE]) <= 1 then
                 (select top 1 [ID] from dbo.[STATE] where [ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE])
               else
                 (select top 1 [ID] from dbo.[STATE] where ([ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE]) and ([COUNTRYID] = (select isnull((select top 1 [ID] from dbo.[COUNTRY] where [ABBREVIATION] = [C].[COUNTRY] or [DESCRIPTION] = [C].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]()))))
               end),
              isnull(C.[CART], ''),
              isnull(C.[DPC], ''),
              isnull(C.[LOT], '')
            from @CONSTITDATA C;
          end try
          begin catch
            raiserror('Could not insert member into temporary constituent table.', 13, 1);
            return 1;
          end catch

          /* Gather sites user to which user has access */
          declare @SITEIDS table ([ID] uniqueidentifier null);  
          declare @DATAFORMTEMPLATEID as uniqueidentifier = 'B4A8C2CB-FE50-4C50-A587-DC3C409B0E6A'; -- Individual.Add.xml


          insert into @SITEIDS
            select distinct  
              case [V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM].[SITESECURITYMODE]
                when 2 then [SYSTEMROLEAPPUSERSITE].[SITEID]
                when 3 then [SYSTEMROLEAPPUSER].[BRANCHSITEID] end
            from dbo.[V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM]
            inner join [DATAFORMINSTANCECATALOG] on [DATAFORMINSTANCECATALOG].[ID] = [DATAFORMINSTANCECATALOGID]
            inner join [SYSTEMROLEAPPUSER] on
              (
                [SYSTEMROLEAPPUSER].[APPUSERID] = [V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM].[APPUSERID]
                and
                [SYSTEMROLEAPPUSER].[SYSTEMROLEID] = [V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM].[SYSTEMROLEID]
              )  
            left join [SYSTEMROLEAPPUSERSITE] on [SYSTEMROLEAPPUSER].[ID] = [SYSTEMROLEAPPUSERSITE].[SYSTEMROLEAPPUSERID]
            where   
              [V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM].[APPUSERID] = @CURRENTAPPUSERID  
              and [DATAFORMINSTANCECATALOG].[DATAFORMTEMPLATECATALOGID] = @DATAFORMTEMPLATEID  
              and dbo.[UFN_SECURITY_APPUSER_GRANTED_FORM_IN_SYSTEMROLE](@CURRENTAPPUSERID,[DATAFORMINSTANCECATALOG].[ID])=1  
              and [V_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM].[GRANTORDENY] = 1;

          /* Insert constituent site records into temporary site table */
          insert into dbo.[MKTFINDERNUMBERCONSTITUENTSITE]
          (
            [MKTFINDERNUMBERCONSTITUENTID],
            [SITEID]
          )  
          select
            @CONSTITUENTID,
            [SITEIDS].[ID]
          from @SITEIDS as [SITEIDS]
          where [SITEIDS].[ID] is not null;

        end

      --Create a record in the MKTFINDERNUMBERCONSTITUENTAPPEAL table. If this were not an acquisition list, this row would have been created by BBDM's 'Update Constituent Appeal' business process before exporting the mailing

      begin try
        if not exists(select * from dbo.[MKTFINDERNUMBERCONSTITUENTAPPEAL] where [CONSTITUENTID] = @CONSTITUENTID and [FINDERNUMBER] = @FINDERNUMBER) and not exists(select 1 from @CONSTITDATA where isnull([APPEALSYSTEMID], '') = '')
          insert into dbo.[MKTFINDERNUMBERCONSTITUENTAPPEAL] (
            [ID],
            [CONSTITUENTID],
            [APPEALID],
            [MKTSEGMENTATIONID],
            [SOURCECODE],
            [FINDERNUMBER],
            [DATESENT],
            [COMMENTS],
            [MKTPACKAGEID],
            [MKTSEGMENTATIONSEGMENTID],
            [MKTSEGMENTATIONTESTSEGMENTID]
          )
          select
            newid(),
            @CONSTITUENTID,
            C.[APPEALSYSTEMID],
            @SEGMENTATIONID,
            isnull(C.[SOURCECODE], ''),
            @FINDERNUMBER,
            C.[MAILDATE],
            '', --@COMMENTS

            isnull((select [PACKAGEID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = C.[SEGMENTID]), (select [PACKAGEID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = C.[SEGMENTID])), 
            (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = C.[SEGMENTID]), 
            (select [ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = C.[SEGMENTID])
          from @CONSTITDATA C;
      end try
      begin catch
        raiserror('Unable to insert temporary constituent appeal information.', 13, 1);
        return 1;
      end catch
    end
  else  --@REVENUEBATCH = 1

    begin
      if exists(select 1 from dbo.[CONSTITUENT] where [ID] = @CONSTITUENTID)--check to see if the constituent was added some other method

        exec dbo.[USP_BATCHREVENUECONSTITUENT_DELETEBYID_WITHCHANGEAGENTID] @CONSTITUENTID, @CHANGEAGENTID;--remove existing entries as the user is now a constituent

      else
      begin
      if not exists(select 1 from dbo.[BATCHREVENUECONSTITUENT] where [ID] = @CONSTITUENTID)
        begin
          -- insert constituent information

          begin try
            insert into dbo.[BATCHREVENUECONSTITUENT] (
              ID,
              FIRSTNAME,
              MIDDLENAME,
              KEYNAME,
              TITLECODEID,
              SUFFIXCODEID,
              ADDRESSBLOCK,
              CITY,
              POSTCODE,
        COUNTRYID,
              STATEID,
              CART,
              DPC,
              LOT,
              ADDEDBYID,
              CHANGEDBYID,
              DATEADDED,
              DATECHANGED,
              CURRENTAPPUSERID,
              NUMBER,
              EMAILADDRESS
            )
            select  
              @CONSTITUENTID,
              isnull(C.[FIRSTNAME], ''),
              isnull(C.[MIDDLENAME], ''),
              isnull(C.[LASTNAME], ''),
              (select [ID] from dbo.[TITLECODE] where [DESCRIPTION] = C.[TITLE]),
              (select [ID] from dbo.[SUFFIXCODE] where [DESCRIPTION] = C.[SUFFIX]),
              isnull(dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                C.[ADDRESSLINE1],
                dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                  C.[ADDRESSLINE2],
                  dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                    C.[ADDRESSLINE3],
                    dbo.[UFN_ACQUISITIONLIST_CONCATENATEADDRESSLINES](
                      C.[ADDRESSLINE4], C.[ADDRESSLINE5]
                    )
                  )
                )
              ), ''),
              isnull(C.[CITY], ''),
              isnull(C.[POSTCODE], ''),
              (select isnull((select top 1 [ID] from dbo.[COUNTRY] where [ABBREVIATION] = [C].[COUNTRY] or [DESCRIPTION] = [C].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]())),
              (case when (select count(*) from dbo.[STATE] where [ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE]) <= 1 then
                 (select top 1 [ID] from dbo.[STATE] where [ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE])
               else
                 (select top 1 [ID] from dbo.[STATE] where ([ABBREVIATION] = C.[STATE] or [DESCRIPTION] = C.[STATE]) and ([COUNTRYID] = (select isnull((select top 1 [ID] from dbo.[COUNTRY] where [ABBREVIATION] = [C].[COUNTRY] or [DESCRIPTION] = [C].[COUNTRY]), dbo.[UFN_COUNTRY_GETDEFAULT]()))))
               end),
              isnull(C.[CART], ''),
              isnull(C.[DPC], ''),
              isnull(C.[LOT], ''),
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE,
              @CURRENTAPPUSERID,
              isnull(C.[PHONENUMBER], ''),
              isnull(C.[EMAILADDRESS], '')
            from @CONSTITDATA C;
          end try
          begin catch
            raiserror('Could not insert member into batch revenue constituent table.', 13, 1);
            return 1;
          end catch
        end
      end

      --Create a record in the BATCHREVENUECONSTITUENTAPPEAL table.

      begin try
        if not exists(select * from dbo.[BATCHREVENUECONSTITUENTAPPEAL] where [CONSTITUENTID] = @CONSTITUENTID and [FINDERNUMBER] = @FINDERNUMBER)
          insert into dbo.[BATCHREVENUECONSTITUENTAPPEAL] (
            [ID],
            [CONSTITUENTID],
            [APPEALID],
            [MKTSEGMENTATIONID],
            [SOURCECODE],
            [FINDERNUMBER],
            [DATESENT],
            [COMMENTS],
            [MKTPACKAGEID],
            [MKTSEGMENTATIONSEGMENTID],
            [MKTSEGMENTATIONTESTSEGMENTID]
          )
          select
            newid(),
            @CONSTITUENTID,
            C.[APPEALSYSTEMID],
            @SEGMENTATIONID,
            isnull(C.[SOURCECODE], ''),
            @FINDERNUMBER,
            C.[MAILDATE],
            '', --@COMMENTS

            isnull((select [PACKAGEID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = C.[SEGMENTID]), (select [PACKAGEID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = C.[SEGMENTID])),
            (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = C.[SEGMENTID]),
            (select [ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = C.[SEGMENTID])
          from @CONSTITDATA C;
      end try
      begin catch
        raiserror('Unable to insert batch revenue constituent appeal information.', 13, 1);
        return 1;
      end catch
    end

  set @ID = @CONSTITUENTID;

  return 0;