USP_MERGETASK_CONSTITUENTAPPEAL

Parameters

Parameter Parameter Type Mode Description
@SOURCEID uniqueidentifier IN
@TARGETID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DELETEDUPES bit IN

Definition

Copy


CREATE procedure dbo.[USP_MERGETASK_CONSTITUENTAPPEAL]
(
  @SOURCEID uniqueidentifier,
  @TARGETID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @DELETEDUPES bit = 0
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @MAILINGTYPECODE tinyint;
  declare @TABLENAME nvarchar(128);
  declare @COLUMNNAME nvarchar(128);
  declare @BASETABLENAME nvarchar(128);
  declare @BASEPRIMARYKEYFIELD nvarchar(128);
  declare @IDFIELD nvarchar(128);
  declare @DONORIDFIELD nvarchar(128);
  declare @SQL nvarchar(max);
  declare @CURRENTDATE datetime = getdate();

  begin try
    /*****************************/
    /* Merge constituent appeals */
    /*****************************/
    if @DELETEDUPES = 0
      update dbo.[CONSTITUENTAPPEAL] set
        [CONSTITUENTID] = @TARGETID,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where [CONSTITUENTID] = @SOURCEID;
    else
      --Omit duplicate appeals if the @DELETEDUPES flag is set
      update dbo.[CONSTITUENTAPPEAL] set
        [CONSTITUENTID] = @TARGETID,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where [CONSTITUENTID] = @SOURCEID
      and [ID] not in
      (
        select a.[ID]
        from dbo.[CONSTITUENTAPPEAL] a
        inner join dbo.[CONSTITUENTAPPEAL] b on a.[APPEALID] = b.[APPEALID]
          and (a.[MKTSEGMENTATIONID] = b.[MKTSEGMENTATIONID] or (a.[MKTSEGMENTATIONID] is null and b.[MKTSEGMENTATIONID] is null))
          and (a.[MKTSEGMENTATIONSEGMENTID] = b.[MKTSEGMENTATIONSEGMENTID] or (a.[MKTSEGMENTATIONSEGMENTID] is null and b.[MKTSEGMENTATIONSEGMENTID] is null))
          and (a.[MKTSEGMENTATIONTESTSEGMENTID] = b.[MKTSEGMENTATIONTESTSEGMENTID] or (a.[MKTSEGMENTATIONTESTSEGMENTID] is null and b.[MKTSEGMENTATIONTESTSEGMENTID] is null))
          and a.[FINDERNUMBER] = b.[FINDERNUMBER]
        where a.[CONSTITUENTID] = @SOURCEID
        and b.[CONSTITUENTID] = @TARGETID
      );




    /*********************************************************************************************************************************************/
    /* Notes for merging Marketing Effort related data:                                                                                          */
    /* 1) Ignore @DELETEDUPES for all marketing effort related data below because it is important that we keep all records around and associated */
    /*    with the current constituent so that mailing totals, counts, costs, etc. stay the same.                                                */
    /* 2) Since this merge task can only be run on BBEC-based systems, and for performance reasons, we are using known tables and IDs below      */
    /*    so that we don't waste the extra cycles on unnecessary record source and product flag checks.                                          */
    /*********************************************************************************************************************************************/

    /*****************************/
    /* Merge mailing data tables */
    /*****************************/
    declare MAILINGCURSOR cursor local fast_forward for
      select distinct
        [MKTSEGMENTATION].[ID],
        [MKTSEGMENTATION].[MAILINGTYPECODE]
      from dbo.[CONSTITUENTSEGMENT]
      inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [CONSTITUENTSEGMENT].[SEGMENTID]
      inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
      where [CONSTITUENTSEGMENT].[CONSTITUENTID] = @SOURCEID;

    open MAILINGCURSOR;
    fetch next from MAILINGCURSOR into @SEGMENTATIONID, @MAILINGTYPECODE;

    while (@@fetch_status = 0)
    begin
      --Mailing data table...
      set @TABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);
      if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @TABLENAME)
        begin
    if @MAILINGTYPECODE in (1, 5)  --Acknowledgement
            begin
              set @BASETABLENAME = 'REVENUE';
              set @BASEPRIMARYKEYFIELD = 'ID';
              set @IDFIELD = 'REVENUEID';
              set @DONORIDFIELD = 'CONSTITUENTID';
            end
          else if @MAILINGTYPECODE = 2  --Membership
            begin
              set @BASETABLENAME = 'MEMBER';
              set @BASEPRIMARYKEYFIELD = 'MEMBERSHIPID';
              set @IDFIELD = 'MEMBERSHIPID';
              set @DONORIDFIELD = 'CONSTITUENTID';
            end
          else if @MAILINGTYPECODE = 3  --Sponsorship
            begin
              set @BASETABLENAME = 'SPONSORSHIP';
              set @BASEPRIMARYKEYFIELD = 'ID';
              set @IDFIELD = 'SPONSORSHIPID';
              set @DONORIDFIELD = 'CONSTITUENTID';
            end
          else
            set @BASETABLENAME = null;


          --Keep track of the very original constituent IDs from a mailing.  If a constituent has already been merged once, then
          --we don't want subsequent merges to overwrite the very original constituent ID, so we can check their findernumbers to
          --see if it is the very original constituent ID or not (basically if the finder number already exists in the table, then
          --we don't overwrite it).  We only want to save the very original constituent ID that was in the mailing when it was activated.
          --Also, update the mailing data table with the new merged constituent ID.
          --
          --For mailings that are not constituent based (acknowledgements, membership, sponsorship), we need to make sure the base-record
          --was actually merged onto the new constituent or not.  This can happen because the user can setup different "merge configurations"
          --with different options and may choose to not merge some data.  This would leave the base-record on the old constituent, and in
          --this case it would not be appropriate to update the constituent ID in our mailing data table.  Some merge tasks will delete the
          --base record, so we need to use a "left" join and "is null" to account for those.
          --
          --This exact same dynamic SQL is used in "Blackbaud.AppFx.Marketing.Catalog\USP_MKTSEGMENTATIONACTIVATE_MERGECONSTITUENTS.xml".  Please
          --make sure both of these files stay consistent when modifications are made.

          set @SQL = 'insert into dbo.[MKTSEGMENTATIONMERGEDORIGINALCONSTITUENTS] ([SEGMENTATIONID], [FINDERNUMBER], [ORIGINALCONSTITUENTID])' + char(13) +
                     '  select' + char(13) +
                     '    @SEGMENTATIONID,' + char(13) +
                     '    [DONORS].[FINDERNUMBER],' + char(13) +
                     '    @SOURCEID' + char(13) +
                     '  from dbo.[' + @TABLENAME + '] as [DONORS]' + char(13) +
                     '  inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [DONORS].[SEGMENTID] and [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0' + char(13);

          if @BASETABLENAME is not null
            --Some merge tasks will delete the base record, so we need to "left" join (instead of "inner" join) and add an "is null" to the "where" clause to take that into account...
            set @SQL += '  left join dbo.[' + @BASETABLENAME + '] on [' + @BASETABLENAME + '].[' + @BASEPRIMARYKEYFIELD + '] = [DONORS].[' + @IDFIELD + ']' + (case when @MAILINGTYPECODE = 2 then ' and [MEMBER].[ISPRIMARY] = 1 and [MEMBER].[ISDROPPED] = 0' else '' end) + char(13);

          set @SQL += '  where [DONORS].[DONORQUERYVIEWCATALOGID] = ''DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0''' + char(13) +
                      '  and [DONORS].[DONORID] = @SOURCEID' + char(13);

          if @BASETABLENAME is not null
            set @SQL += '  and ([' + @BASETABLENAME + '].[' + @DONORIDFIELD + '] is null or [' + @BASETABLENAME + '].[' + @DONORIDFIELD + '] <> @SOURCEID)' + char(13);

          set @SQL += '  and not exists(select * from dbo.[MKTSEGMENTATIONMERGEDORIGINALCONSTITUENTS] where [FINDERNUMBER] = [DONORS].[FINDERNUMBER] and [SEGMENTATIONID] = @SEGMENTATIONID);' + char(13) +
                      char(13) +
                      'update dbo.[' + @TABLENAME + '] set' + char(13) +
                      '  [DONORID] = @TARGETID' + char(13) +
                      'from dbo.[' + @TABLENAME + '] as [DONORS]' + char(13);

          if @BASETABLENAME is not null
            --Some merge tasks will delete the base record, so we need to "left" join (instead of "inner" join) and add an "is null" to the "where" clause to take that into account...
            set @SQL += 'left join dbo.[' + @BASETABLENAME + '] on [' + @BASETABLENAME + '].[' + @BASEPRIMARYKEYFIELD + '] = [DONORS].[' + @IDFIELD + ']' + (case when @MAILINGTYPECODE = 2 then ' and [MEMBER].[ISPRIMARY] = 1 and [MEMBER].[ISDROPPED] = 0' else '' end) + char(13);

          set @SQL += 'where [DONORS].[DONORQUERYVIEWCATALOGID] = ''DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0''' + char(13) +
                      'and [DONORS].[DONORID] = @SOURCEID' + (case when @BASETABLENAME is null then ';' else '' end) + char(13);

          if @BASETABLENAME is not null
            set @SQL += 'and ([' + @BASETABLENAME + '].[' + @DONORIDFIELD + '] is null or [' + @BASETABLENAME + '].[' + @DONORIDFIELD + '] <> @SOURCEID);' + char(13);

          exec sp_executesql @SQL, N'@SOURCEID uniqueidentifier, @TARGETID uniqueidentifier, @SEGMENTATIONID uniqueidentifier', @SOURCEID = @SOURCEID, @TARGETID = @TARGETID, @SEGMENTATIONID = @SEGMENTATIONID;
        end

      fetch next from MAILINGCURSOR into @SEGMENTATIONID, @MAILINGTYPECODE;
    end

    close MAILINGCURSOR;
    deallocate MAILINGCURSOR;  


    /****************************/
    /* Merge Finder File tables */
    /****************************/
    --They could have mapped a constituent ID during a finder file import process.  If so, then we need to merge the constituent IDs
    --because it will affect which constituent gets pulled during finder number lookup on a payment record or in batch.  Check to see
    --if they even have any finder files that mapped constituent ID as an import field by comparing the list layout field mappings to
    --the primary key of the recordsource query view, and then only loop through those.  Even though the finder files are imported 
    --per mailing, we cannot handle this in the mailing data table cursor above because we don't have any record of the imported
    --constituent IDs in the CONSTITUENTSEGMENT table.
    declare FINDERFILECURSOR cursor local fast_forward for
      select distinct
        [MKTFINDERFILEIMPORTPROCESS].[SEGMENTATIONID],
        [MKTLISTLAYOUTFIELD].[FIELDNAME]
      from dbo.[MKTFINDERFILEIMPORTPROCESS]
      inner join dbo.[MKTLISTLAYOUT] on [MKTLISTLAYOUT].[ID] = [MKTFINDERFILEIMPORTPROCESS].[LISTLAYOUTID]
      inner join dbo.[MKTLISTLAYOUTFIELD] on [MKTLISTLAYOUTFIELD].[LISTLAYOUTID] = [MKTLISTLAYOUT].[ID]
      inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTLISTLAYOUT].[RECORDSOURCEID] and [QUERYVIEWCATALOG].[OBJECTNAME] = [MKTLISTLAYOUTFIELD].[OBJECTNAME] and [QUERYVIEWCATALOG].[PRIMARYKEYFIELD] = [MKTLISTLAYOUTFIELD].[FIELDNAME]
      where [MKTFINDERFILEIMPORTPROCESS].[STATUSCODE] = 1
      and [MKTFINDERFILEIMPORTPROCESS].[QUANTITY] > 0
      and [MKTLISTLAYOUT].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
      and [MKTLISTLAYOUTFIELD].[MAPPINGCODE] = 1  --system
      and [MKTLISTLAYOUTFIELD].[DATATYPE] = 8;  --guid

    open FINDERFILECURSOR;
    fetch next from FINDERFILECURSOR into @SEGMENTATIONID, @COLUMNNAME;

    while (@@fetch_status = 0)
    begin
      set @TABLENAME = dbo.[UFN_MKTFINDERFILE_BUILDTABLENAME](@SEGMENTATIONID);
      if exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @TABLENAME and [COLUMN_NAME] = @COLUMNNAME)
        begin
          set @SQL = 'update dbo.[' + @TABLENAME + '] set' + char(13) +
                     '  [' + @COLUMNNAME + '] = @TARGETID' + char(13) +
                     'where [' + @COLUMNNAME + '] = @SOURCEID';
          exec sp_executesql @SQL, N'@SOURCEID uniqueidentifier, @TARGETID uniqueidentifier', @SOURCEID = @SOURCEID, @TARGETID = @TARGETID;
        end

      fetch next from FINDERFILECURSOR into @SEGMENTATIONID, @COLUMNNAME;
    end

    close FINDERFILECURSOR;
    deallocate FINDERFILECURSOR;


    /**********************************/
    /* Merge CONSTITUENTSEGMENT table */
    /**********************************/
    update dbo.[CONSTITUENTSEGMENT] set
      [CONSTITUENTID] = @TARGETID
    where [CONSTITUENTID] = @SOURCEID;


    /******************************************/
    /* Merge Source Analysis Rule (SAR) table */
    /******************************************/
    update dbo.[MKTSOURCEANALYSISRULEDATA_DFB4B8C1_5E9A_4C14_ACE3_01C096B53BA0] set
      [DONORID] = @TARGETID
    where [DONORID] = @SOURCEID;


    /******************************************/
    /* Merge acquisition list matchback table */
    /******************************************/
    update dbo.[MKTSEGMENTLISTDATADONORS_DFB4B8C1_5E9A_4C14_ACE3_01C096B53BA0] set
      [DONORID] = @TARGETID
    where [DONORID] = @SOURCEID;


    /******************************************/
    /* Finder number constituent table */
    /******************************************/
    if exists(select 1 from dbo.[MKTFINDERNUMBERCONSTITUENT] where [ID] = @SOURCEID)
    begin
    --first we need to retrieve the information for the source data because there can never be 2 rows with the same constituent ID
      declare 
        @MKTFINDERNUMBERCONSTITUENTAPPEALID    uniqueidentifier, 
        @APPEALID    uniqueidentifier, 
        @MKTSEGMENTATIONID uniqueidentifier, 
        @SOURCECODE    nvarchar(50),
        @FINDERNUMBER    bigint,
        @DATESENT    datetime
        @COMMENTS    nvarchar(50), 
        @MKTPACKAGEID    uniqueidentifier, 
        @MKTSEGMENTATIONSEGMENTID    uniqueidentifier, 
        @MKTSEGMENTATIONTESTSEGMENTID    uniqueidentifier,
        @MKTFINDERNUMBERCONSTITUENTSITEID uniqueidentifier,
        @SITEID    uniqueidentifier,
        @KEYNAME    nvarchar(100), 
        @KEYNAMEPREFIX    nvarchar(50), 
        @FIRSTNAME    nvarchar(50), 
        @MIDDLENAME    nvarchar(50), 
        @MAIDENNAME    nvarchar(100), 
        @NICKNAME    nvarchar(50), 
        @TITLECODEID    uniqueidentifier, 
        @SUFFIXCODEID    uniqueidentifier, 
        @GENDERCODE    tinyint
        @BIRTHDATE char(8), 
        @ISORGANIZATION    bit
        @MARITALSTATUSCODEID    uniqueidentifier, 
        @INDUSTRYCODEID    uniqueidentifier, 
        @NUMEMPLOYEES    int
        @NUMSUBSIDIARIES    int
        @PARENTCORPID    uniqueidentifier, 
        @ADDRESSTYPECODEID    uniqueidentifier, 
        @DONOTMAIL    bit
        @DONOTMAILREASONCODEID    uniqueidentifier, 
        @COUNTRYID    uniqueidentifier, 
        @STATEID    uniqueidentifier, 
        @ADDRESSBLOCK    nvarchar(150), 
        @CITY    nvarchar(50), 
        @POSTCODE    nvarchar(12), 
        @DPC    nvarchar(8), 
        @CART    nvarchar(10), 
        @LOT    nvarchar(5), 
        @OMITFROMVALIDATION    bit
        @COUNTYCODEID    uniqueidentifier, 
        @CONGRESSIONALDISTRICTCODEID    uniqueidentifier, 
        @LASTVALIDATIONATTEMPTDATE    datetime
        @VALIDATIONMESSAGE    nvarchar(200), 
        @CERTIFICATIONDATA    int
        @PHONETYPECODEID    uniqueidentifier, 
        @NUMBER    nvarchar(100), 
        @EMAILADDRESSTYPECODEID    uniqueidentifier, 
        @EMAILADDRESS    nvarchar(100), 
        @CURRENTAPPUSERID    uniqueidentifier, 
        @WEBADDRESS    nvarchar(2047), 
        @ISGROUP    bit
        @GIVESANONYMOUSLY    bit
        @GROUPTYPECODE    tinyint
        @GROUPTYPEID    uniqueidentifier, 
        @GROUPDESCRIPTION    nvarchar(300), 
        @GROUPSTARTDATE    datetime
        @NAMEFORMATFUNCTIONID    uniqueidentifier, 
        @DONOTCALL    bit
        @DONOTEMAIL    bit
        @TITLE2CODEID    uniqueidentifier, 
        @SUFFIX2CODEID    uniqueidentifier,
        @GENDERCODEID    uniqueidentifier;

      --first get constituent data
      select
        @KEYNAME = [KEYNAME],
        @KEYNAMEPREFIX = [KEYNAMEPREFIX],
        @FIRSTNAME = [FIRSTNAME],
        @MIDDLENAME = [MIDDLENAME],
        @MAIDENNAME = [MAIDENNAME],
        @NICKNAME = [NICKNAME],
        @TITLECODEID = [TITLECODEID],
        @SUFFIXCODEID = [SUFFIXCODEID],
        @GENDERCODE = [GENDERCODE],
        @BIRTHDATE = [BIRTHDATE],
        @ISORGANIZATION = [ISORGANIZATION],
        @MARITALSTATUSCODEID = [MARITALSTATUSCODEID],
        @INDUSTRYCODEID = [INDUSTRYCODEID],
        @NUMEMPLOYEES = [NUMEMPLOYEES],
        @NUMSUBSIDIARIES = [NUMSUBSIDIARIES],
        @PARENTCORPID = [PARENTCORPID],
        @ADDRESSTYPECODEID = [ADDRESSTYPECODEID],
        @DONOTMAIL = [DONOTMAIL],
        @DONOTMAILREASONCODEID = [DONOTMAILREASONCODEID],
        @COUNTRYID = [COUNTRYID],
        @STATEID = [STATEID],
        @ADDRESSBLOCK = [ADDRESSBLOCK],
        @CITY = [CITY],
        @POSTCODE = [POSTCODE],
        @DPC = [DPC],
        @CART = [CART],
        @LOT = [LOT],
        @OMITFROMVALIDATION = [OMITFROMVALIDATION],
        @COUNTYCODEID = [COUNTYCODEID],
        @CONGRESSIONALDISTRICTCODEID = [CONGRESSIONALDISTRICTCODEID],
        @LASTVALIDATIONATTEMPTDATE = [LASTVALIDATIONATTEMPTDATE],
        @VALIDATIONMESSAGE = [VALIDATIONMESSAGE],
        @CERTIFICATIONDATA = [CERTIFICATIONDATA],
        @PHONETYPECODEID = [PHONETYPECODEID],
        @NUMBER = [NUMBER],
        @EMAILADDRESSTYPECODEID = [EMAILADDRESSTYPECODEID],
        @EMAILADDRESS = [EMAILADDRESS],
        @CURRENTAPPUSERID = [CURRENTAPPUSERID],
        @WEBADDRESS = [WEBADDRESS],
        @ISGROUP = [ISGROUP],
        @GIVESANONYMOUSLY = [GIVESANONYMOUSLY],
        @GROUPTYPECODE = [GROUPTYPECODE],
        @GROUPTYPEID = [GROUPTYPEID],
        @GROUPDESCRIPTION = [GROUPDESCRIPTION],
        @GROUPSTARTDATE = [GROUPSTARTDATE],
        @NAMEFORMATFUNCTIONID = [NAMEFORMATFUNCTIONID],
        @DONOTCALL = [DONOTCALL],
        @DONOTEMAIL = [DONOTEMAIL],
        @TITLE2CODEID = [TITLE2CODEID],
        @SUFFIX2CODEID = [SUFFIX2CODEID],
        @GENDERCODEID = [GENDERCODEID]
      from
        dbo.[MKTFINDERNUMBERCONSTITUENT]
      where
        [ID] = @SOURCEID;

      --constituent appeal information
      select
        @MKTFINDERNUMBERCONSTITUENTAPPEALID = [ID],
        @APPEALID = [APPEALID],
        @MKTSEGMENTATIONID = [MKTSEGMENTATIONID],
        @SOURCECODE = [SOURCECODE],
        @FINDERNUMBER = [FINDERNUMBER],
        @DATESENT = [DATESENT],
        @COMMENTS = [COMMENTS],
        @MKTPACKAGEID = [MKTPACKAGEID],
        @MKTSEGMENTATIONSEGMENTID = [MKTSEGMENTATIONSEGMENTID],
        @MKTSEGMENTATIONTESTSEGMENTID = [MKTSEGMENTATIONTESTSEGMENTID]
      from
        dbo.[MKTFINDERNUMBERCONSTITUENTAPPEAL]
      where
        [CONSTITUENTID] = @SOURCEID;

      --constituent site
      select
        @MKTFINDERNUMBERCONSTITUENTSITEID = [ID],
        @SITEID = [SITEID]
      from
        dbo.[MKTFINDERNUMBERCONSTITUENTSITE]
      where
        [MKTFINDERNUMBERCONSTITUENTID] = @SOURCEID;

      --now we delete the source since we cannot have them both in these tables
      delete
        dbo.[MKTFINDERNUMBERCONSTITUENT]
      where
        [ID] = @SOURCEID;

      --only if the target ID does not already exist do we need to insert an entry into MKTFINDERNUMBERCONSTITUENT
      if not exists(select 1 from dbo.[MKTFINDERNUMBERCONSTITUENT] where [ID] = @TARGETID)
      begin
        insert dbo.[MKTFINDERNUMBERCONSTITUENT]
          ([ID], [KEYNAME], [KEYNAMEPREFIX], [FIRSTNAME], [MIDDLENAME], [MAIDENNAME], [NICKNAME], [TITLECODEID], [SUFFIXCODEID], [GENDERCODE], [BIRTHDATE], [ISORGANIZATION], [MARITALSTATUSCODEID], [INDUSTRYCODEID], [NUMEMPLOYEES], [NUMSUBSIDIARIES], [PARENTCORPID], [ADDRESSTYPECODEID], [DONOTMAIL], [DONOTMAILREASONCODEID], [COUNTRYID], [STATEID], [ADDRESSBLOCK], [CITY], [POSTCODE], [DPC], [CART], [LOT], [OMITFROMVALIDATION], [COUNTYCODEID], [CONGRESSIONALDISTRICTCODEID], [LASTVALIDATIONATTEMPTDATE], [VALIDATIONMESSAGE], [CERTIFICATIONDATA], [PHONETYPECODEID], [NUMBER], [EMAILADDRESSTYPECODEID], [EMAILADDRESS], [CURRENTAPPUSERID], [WEBADDRESS], [ISGROUP], [GIVESANONYMOUSLY], [GROUPTYPECODE], [GROUPTYPEID], [GROUPDESCRIPTION], [GROUPSTARTDATE], [NAMEFORMATFUNCTIONID], [DONOTCALL], [DONOTEMAIL], [TITLE2CODEID], [SUFFIX2CODEID], [GENDERCODEID])
          values
          (@TARGETID, @KEYNAME, @KEYNAMEPREFIX, @FIRSTNAME, @MIDDLENAME, @MAIDENNAME, @NICKNAME, @TITLECODEID, @SUFFIXCODEID, @GENDERCODE, @BIRTHDATE, @ISORGANIZATION, @MARITALSTATUSCODEID, @INDUSTRYCODEID, @NUMEMPLOYEES, @NUMSUBSIDIARIES, @PARENTCORPID, @ADDRESSTYPECODEID, @DONOTMAIL, @DONOTMAILREASONCODEID, @COUNTRYID, @STATEID, @ADDRESSBLOCK, @CITY, @POSTCODE, @DPC, @CART, @LOT, @OMITFROMVALIDATION, @COUNTYCODEID, @CONGRESSIONALDISTRICTCODEID, @LASTVALIDATIONATTEMPTDATE, @VALIDATIONMESSAGE, @CERTIFICATIONDATA, @PHONETYPECODEID, @NUMBER, @EMAILADDRESSTYPECODEID, @EMAILADDRESS, @CURRENTAPPUSERID, @WEBADDRESS, @ISGROUP, @GIVESANONYMOUSLY, @GROUPTYPECODE, @GROUPTYPEID, @GROUPDESCRIPTION, @GROUPSTARTDATE, @NAMEFORMATFUNCTIONID, @DONOTCALL, @DONOTEMAIL, @TITLE2CODEID, @SUFFIX2CODEID, @GENDERCODEID);
      end

      if @MKTFINDERNUMBERCONSTITUENTAPPEALID is not null
        insert dbo.[MKTFINDERNUMBERCONSTITUENTAPPEAL]
          ([ID], [CONSTITUENTID], [APPEALID], [MKTSEGMENTATIONID], [SOURCECODE], [FINDERNUMBER], [DATESENT], [COMMENTS], [MKTPACKAGEID], [MKTSEGMENTATIONSEGMENTID], [MKTSEGMENTATIONTESTSEGMENTID])
          values
          (@MKTFINDERNUMBERCONSTITUENTAPPEALID, @TARGETID, @APPEALID, @MKTSEGMENTATIONID, @SOURCECODE, @FINDERNUMBER, @DATESENT, @COMMENTS, @MKTPACKAGEID, @MKTSEGMENTATIONSEGMENTID, @MKTSEGMENTATIONTESTSEGMENTID);

      if @MKTFINDERNUMBERCONSTITUENTSITEID is not null
        insert dbo.[MKTFINDERNUMBERCONSTITUENTSITE]
          ([ID], [MKTFINDERNUMBERCONSTITUENTID], [SITEID])
          values
          (@MKTFINDERNUMBERCONSTITUENTSITEID, @TARGETID, @SITEID);
    end

    /******************************************/
    /* Merge plan item task table */
    /******************************************/
    update dbo.[MKTMARKETINGPLANITEMTASK] set
      [OWNERID] = @TARGETID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [OWNERID] = @SOURCEID;


    /******************************************/
    /* Merge appeal mailing task table        */
    /******************************************/
    update dbo.[APPEALMAILINGTASK] set
      [OWNERID] = @TARGETID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [OWNERID] = @SOURCEID;


    /******************************************/
    /* Merge appeal attachment table          */
    /******************************************/
    update dbo.[APPEALATTACHMENT] set
      [AUTHORID] = @TARGETID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [AUTHORID] = @SOURCEID;


    /******************************************/
    /* Merge appeal media link table          */
    /******************************************/
    update dbo.[APPEALMEDIALINK] set
      [AUTHORID] = @TARGETID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [AUTHORID] = @SOURCEID;


    /******************************************/
    /* Merge appeal note table                */
    /******************************************/
    update dbo.[APPEALNOTE] set
      [AUTHORID] = @TARGETID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [AUTHORID] = @SOURCEID;


  end try

  begin catch
    exec dbo.[USP_RAISE_ERROR];
    return 1;
  end catch

  return 0;