USP_ADDSTEWARDSHIPPLANSPROCESS

Creates stewardship plans for a selection of constituents.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@NUMBERPROCESSED int INOUT
@NUMBEREXCEPTIONS int INOUT
@CONSTITUENTTABLENAME nvarchar(128) IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_ADDSTEWARDSHIPPLANSPROCESS
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @NUMBERPROCESSED int output,
  @NUMBEREXCEPTIONS int output,
  @CONSTITUENTTABLENAME nvarchar(128),
  @CURRENTAPPUSERID uniqueidentifier
)
as
begin
  set @NUMBERPROCESSED = 0;
  set @NUMBEREXCEPTIONS = 0;

  declare @PROCESSDATE date;
  set @PROCESSDATE = getdate();

  declare @IDSETREGISTERID uniqueidentifier;
  declare @PROSPECTPLANNAME nvarchar(100);
  declare @PLANTYPECODEID uniqueidentifier;
  declare @PLANSUBTYPECODEID uniqueidentifier;
  declare @MANAGERID uniqueidentifier;
  declare @MANAGERSTARTDATE date;
  declare @STARTDATETYPECODE tinyint;
  declare @STARTDATE date;
  declare @DAYSBEFOREORAFTER int;
  declare @SITES xml;
  declare @STEWARDS xml;
  declare @PLANSTEPS xml;

  declare @SQL nvarchar(250);
  set @SQL = N'insert into dbo.' + @CONSTITUENTTABLENAME + ' (CONSTITUENTID, NEWPROSPECT, RESULTCODE, PLANID) values (@CID, @NP, @RC, @PLANID)';
  declare @PARAMDEF nvarchar(82);
  set @PARAMDEF = N'@CID uniqueidentifier, @NP bit, @RC tinyint, @PLANID uniqueidentifier';

  select
    @IDSETREGISTERID = IDSETREGISTERID,
    @PROSPECTPLANNAME = PROSPECTPLANNAME,
    @PLANTYPECODEID = PLANTYPECODEID,
    @PLANSUBTYPECODEID = PLANSUBTYPECODEID,
    @MANAGERID = MANAGERID,
    @MANAGERSTARTDATE = MANAGERSTARTDATE,
    @STARTDATE = 
      case STARTDATETYPECODE
         when 0 then @PROCESSDATE
         when 1 then STARTDATE
         when 2 then dateadd(d,DAYSBEFOREORAFTER,@PROCESSDATE)
         when 3 then dateadd(d,-DAYSBEFOREORAFTER,@PROCESSDATE)
       end,
    @PLANSTEPS = (select PLANSTEPS.query('/STEPS/node()') for xml raw('STEPS'),type),
    @SITES = (select SITES.query('/SITES/node()') for xml raw('SITES'),type),
    @STEWARDS = (select STEWARDS.query('/STEWARDS/node()') for xml raw('STEWARDS'),type)
  from dbo.ADDSTEWARDSHIPPLANSPROCESS
  where ID = @ID;   

  --get constituents

  declare @CONSTITUENTID uniqueidentifier;

  declare CONSTITUENTCURSOR cursor local fast_forward for
  select ID
  from dbo.UFN_IDSETREADER_GETRESULTS(@IDSETREGISTERID);

  open CONSTITUENTCURSOR;
  begin try
    begin transaction;

    fetch next from CONSTITUENTCURSOR into @CONSTITUENTID;
    while (@@FETCH_STATUS = 0)
    begin

      begin try
        save transaction STEWARDSHIPPLANTX;
        ---------------------------------------------------------------------

        -- track if this is a new prospect


        declare @NEWPROSPECT bit;
        if (exists(select 1 from dbo.PROSPECT where ID=@CONSTITUENTID))
          set @NEWPROSPECT = 0;
        else
          set @NEWPROSPECT = 1;
        ---------------------------------------------------------------------

        -- create stewardship plans, and prospects as needed

        declare @SITESXML xml;
        declare @STEWARDSXML xml;
        declare @PLANSTEPSXML xml;

        -- reassign IDs for sites

        set @SITESXML = (select newid(), SITEID
                 from 
                 (select
                          T.c.value('(ID)[1]','uniqueidentifier') as ID,
                          T.c.value('(SITEID)[1]','uniqueidentifier') as SITEID
                          from @SITES.nodes('/SITES/ITEM') as T(c)) SITES 
                 for xml raw('ITEM'),type,elements,root('SITES'),BINARY BASE64);

        -- reassign IDs for stewards

        set @STEWARDSXML = (select newid(), CONSTITUENTID, ROLECODEID, STARTDATE
                 from 
                 (select
                          T.c.value('(ID)[1]','uniqueidentifier') as ID,
                          T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') as CONSTITUENTID,
                          T.c.value('(ROLECODEID)[1]','uniqueidentifier') as ROLECODEID,
                          T.c.value('(STARTDATE)[1]','date') as STARTDATE
                          from @STEWARDS.nodes('/STEWARDS/ITEM') as T(c)) STEWARDS 
                 for xml raw('ITEM'),type,elements,root('STEWARDS'),BINARY BASE64);

        declare @STEWARDSHIPPLANID uniqueidentifier;
        set @STEWARDSHIPPLANID = newid();

        exec dbo.USP_DATAFORMTEMPLATE_ADD_STEWARDSHIPPLAN
          @STEWARDSHIPPLANID,
          @CHANGEAGENTID,   
          @CONSTITUENTID,
          @MANAGERID,
          @STEWARDSXML,
          @PROSPECTPLANNAME,
          @SITESXML,
          @CURRENTAPPUSERID,
          @PLANTYPECODEID,
          @PLANSUBTYPECODEID,
          @STARTDATE,
          null,
          @MANAGERSTARTDATE 

        ---------------------------------------------------------------------

        -- plan steps

        -- calculate target date

        set @PLANSTEPSXML = 
          (select
            T.c.value('(CATEGORYCODEID)[1]','uniqueidentifier') as 'CATEGORYCODEID',
              T.c.value('(OBJECTIVE)[1]','nvarchar(100)') as'OBJECTIVE',
            coalesce(T.c.value('(TARGETDATE)[1]','date'), dateadd(day, T.c.value('(DATEOFFSET)[1]','int'), dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE))) as 'TARGETDATE',
              T.c.value('(ACTUALDATE)[1]','date') as 'ACTUALDATE',
              T.c.value('(STARTDATE)[1]','date') as 'STARTDATE',
              T.c.value('(ENDDATE)[1]','date') as 'ENDDATE',
              T.c.value('(DATELOCKED)[1]','bit') as'DATELOCKED',
              T.c.value('(CONTACTPERSONID)[1]','uniqueidentifier') as 'CONTACTPERSONID',    
              T.c.value('(CONTACTMETHODCODEID)[1]','uniqueidentifier') as 'CONTACTMETHODCODEID',
              T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') as 'CONSTITUENTID',
              T.c.value('(TEMPLATE)[1]','nvarchar(100)') as'TEMPLATE',
              T.c.value('(RECURSCODE)[1]','smallint') as 'RECURSCODE',
              T.c.value('(STATUSCODE)[1]','smallint') as 'STATUSCODE',
              T.c.value('(NEXTTARGETDATE)[1]','date') as 'NEXTTARGETDATE',
              T.c.value('(TARGETSTARTTIME)[1]','dbo.UDT_HOURMINUTE') as 'TARGETSTARTTIME',
              T.c.value('(TARGETENDTIME)[1]','dbo.UDT_HOURMINUTE') as 'TARGETENDTIME',
              T.c.value('(TIMEZONEENTRYID)[1]','uniqueidentifier') as 'TIMEZONEENTRYID',
              case when T.c.value('(TARGETSTARTTIME)[1]','dbo.UDT_HOURMINUTE') = '' then 1 else 0 end as 'ISALLDAYEVENT',
              T.c.value('(ACTUALSTARTTIME)[1]','dbo.UDT_HOURMINUTE') as 'ACTUALSTARTTIME',
              T.c.value('(ACTUALENDTIME)[1]','dbo.UDT_HOURMINUTE') as 'ACTUALENDTIME',
              T.c.value('(EVENTID)[1]','uniqueidentifier') as 'EVENTID',
              T.c.value('(MAILINGID)[1]','uniqueidentifier') as 'MAILINGID',
              T.c.value('(BENEFITID)[1]','uniqueidentifier') as 'BENEFITID',
              case when T.c.exist('./STEPPARTICIPANTS/ITEM') = 1 then T.c.query('(STEPPARTICIPANTS/ITEM)') else null end AS 'STEPPARTICIPANTS',
              T.c.value('(LINKTYPECODE)[1]','smallint') as LINKTYPECODE
          from @PLANSTEPS.nodes('/STEPS/ITEM') T(c)
          for xml raw('ITEM'), type, elements, root('STEPS'), binary base64
          )

        exec dbo.USP_STEWARDSHIPPLAN_STEPSWITHCHILDREN_UPDATEFROMXML @STEWARDSHIPPLANID, 0, @PLANSTEPSXML, null, @CHANGEAGENTID; -- 0->pending

        ---------------------------------------------------------------------

        -- reporting


        exec sp_executesql @SQL, @PARAMDEF, @CONSTITUENTID, @NEWPROSPECT, 0, @STEWARDSHIPPLANID 
        set @NUMBERPROCESSED = @NUMBERPROCESSED + 1;
      end try
      begin catch
        rollback transaction STEWARDSHIPPLANTX;
        if error_message() like '%UIX_STEWARDSHIPPLAN_CONSTITUENTID_NAME%'
        begin
          -- ignore duplicate plan errors

          exec sp_executesql @SQL, @PARAMDEF, @CONSTITUENTID, @NEWPROSPECT, 1, null
          set @NUMBEREXCEPTIONS = @NUMBEREXCEPTIONS + 1;
        end
        else
          exec dbo.USP_RAISE_ERROR;
      end catch

      fetch next from CONSTITUENTCURSOR into @CONSTITUENTID;
    end
    close CONSTITUENTCURSOR;
    deallocate CONSTITUENTCURSOR;
    commit transaction;
  end try
  begin catch
    close CONSTITUENTCURSOR;
    deallocate CONSTITUENTCURSOR;
    rollback transaction;
    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch
end