USP_STEPUPDATEBATCH_UPDATE

Updates a step batch with changes provided by generate process.

Parameters

Parameter Parameter Type Mode Description
@BATCHID uniqueidentifier IN
@FIELDSTOUPDATE xml IN
@OFFSET smallint IN
@MOVECODE tinyint IN
@DATEVALUEUNITCODE tinyint IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_STEPUPDATEBATCH_UPDATE
(
  @BATCHID uniqueidentifier,
  @FIELDSTOUPDATE xml ,
  @OFFSET smallint,
  @MOVECODE tinyint,
  @DATEVALUEUNITCODE tinyint,          
  @CURRENTAPPUSERID uniqueidentifier
)
as
begin
  set nocount on;

  declare @ID uniqueidentifier;
  declare @CURRENTDATE datetime;
  declare @CHANGEAGENTID uniqueidentifier;

  set @ID = NewID();

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

  set @CURRENTDATE = GetDate();

  declare @Temp table(ID uniqueidentifier PRIMARY KEY, TARGETDATE date, CONSTITUENTID uniqueidentifier, CONTACTMETHODCODEID uniqueidentifier, OBJECTIVE nvarchar(100), DATEUPDATED bit)

  insert into @Temp
  select
    BATCHSTEWARDSHIPPLANSTEPUPDATE.ID,
    BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE,
    BATCHSTEWARDSHIPPLANSTEPUPDATE.CONSTITUENTID,
    BATCHSTEWARDSHIPPLANSTEPUPDATE.CONTACTMETHODCODEID,
    upper(rtrim(BATCHSTEWARDSHIPPLANSTEPUPDATE.OBJECTIVE)) as OBJECTIVE,
    0 as DATEUPDATED
  from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
  where BATCHID = @BATCHID

  declare @REPLACEVALUES as int;
  declare @CURRENTTARGETDATEVALUE as date;
  declare @OVERWRITETARGETDATEVALUE as date;
  declare @CURRENTOBJECTIVEVALUE as nvarchar(100);
  declare @OVERWRITEOBJECTIVEVALUE as nvarchar(100);
  declare @CURRENTCONTACTMETHODVALUE as uniqueidentifier;
  declare @OVERWRITECONTACTMETHODVALUE as uniqueidentifier;
  declare @CURRENTASSIGNEDTOVALUE as uniqueidentifier;
  declare @OVERWRITEASSIGNEDTOVALUE as uniqueidentifier;

  declare FIELDSTOUPDATE cursor local fast_forward for 
  select
      T.c.value('(../../REPLACEVALUES)[1]','int') AS 'REPLACEVALUES',
      T.c.value('(CURRENTTARGETDATEVALUE)[1]','date') as currentTargetDate,
      T.c.value('(OVERWRITETARGETDATEVALUE)[1]','date') as overwriteTargetDate,
      T.c.value('(CURRENTOBJECTIVEVALUE)[1]','nvarchar(100)') as currentObjective,
      T.c.value('(OVERWRITEOBJECTIVEVALUE)[1]','nvarchar(100)') as overwriteObjective,
      T.c.value('(CURRENTCONTACTMETHODVALUE)[1]','uniqueidentifier') as currentContactMethod,
      T.c.value('(OVERWRITECONTACTMETHODVALUE)[1]','uniqueidentifier') as overwriteContactMethod,
      T.c.value('(CURRENTASSIGNEDTOVALUE)[1]','uniqueidentifier') as currentAssignedTo,
      T.c.value('(OVERWRITEASSIGNEDTOVALUE)[1]','uniqueidentifier') as overwriteAssignedTo
  from @FIELDSTOUPDATE.nodes('/FIELDSTOUPDATE/ITEM/ROWUPDATEMSG/ITEM') as T(c)

  begin try

    open FIELDSTOUPDATE
    fetch next from FIELDSTOUPDATE into @REPLACEVALUES, @CURRENTTARGETDATEVALUE, @OVERWRITETARGETDATEVALUE, @CURRENTOBJECTIVEVALUE, @OVERWRITEOBJECTIVEVALUE
                                        @CURRENTCONTACTMETHODVALUE, @OVERWRITECONTACTMETHODVALUE, @CURRENTASSIGNEDTOVALUE, @OVERWRITEASSIGNEDTOVALUE;

    while @@FETCH_STATUS = 0
    begin

        if @REPLACEVALUES = 0 --TARGETDATE

          begin
            update dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE set
              BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE = @OVERWRITETARGETDATEVALUE
            from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
            inner join @Temp TEMP on TEMP.ID = BATCHSTEWARDSHIPPLANSTEPUPDATE.ID
            where 
              TEMP.TARGETDATE = @CURRENTTARGETDATEVALUE and
              BATCHSTEWARDSHIPPLANSTEPUPDATE.DATELOCKED = 0

            update @Temp set DATEUPDATED = 1 
            where TARGETDATE = @CURRENTTARGETDATEVALUE
          end
        else if @REPLACEVALUES = 1 --ASSIGNEDTO

          update dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE set
            BATCHSTEWARDSHIPPLANSTEPUPDATE.CONSTITUENTID = @OVERWRITEASSIGNEDTOVALUE
          from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
          inner join @Temp TEMP on TEMP.ID = BATCHSTEWARDSHIPPLANSTEPUPDATE.ID
          where 
            ISNULL(TEMP.CONSTITUENTID, '00000000-0000-0000-0000-000000000000') = ISNULL(@CURRENTASSIGNEDTOVALUE, '00000000-0000-0000-0000-000000000000')
        else if @REPLACEVALUES = 2 --CONTACTMETHOD

          update dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE set
            BATCHSTEWARDSHIPPLANSTEPUPDATE.CONTACTMETHODCODEID = @OVERWRITECONTACTMETHODVALUE
          from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
          inner join @Temp TEMP on TEMP.ID = BATCHSTEWARDSHIPPLANSTEPUPDATE.ID
          where 
            ISNULL(TEMP.CONTACTMETHODCODEID, '00000000-0000-0000-0000-000000000000') = ISNULL(@CURRENTCONTACTMETHODVALUE, '00000000-0000-0000-0000-000000000000')
        else if @REPLACEVALUES = 3 --OBJECTIVE

          update dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE set
            BATCHSTEWARDSHIPPLANSTEPUPDATE.OBJECTIVE = @OVERWRITEOBJECTIVEVALUE
          from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
          inner join @Temp TEMP on TEMP.ID = BATCHSTEWARDSHIPPLANSTEPUPDATE.ID
          where 
            TEMP.OBJECTIVE = upper(rtrim(@CURRENTOBJECTIVEVALUE))

      fetch next from FIELDSTOUPDATE into @REPLACEVALUES, @CURRENTTARGETDATEVALUE, @OVERWRITETARGETDATEVALUE, @CURRENTOBJECTIVEVALUE, @OVERWRITEOBJECTIVEVALUE
                                          @CURRENTCONTACTMETHODVALUE, @OVERWRITECONTACTMETHODVALUE, @CURRENTASSIGNEDTOVALUE, @OVERWRITEASSIGNEDTOVALUE;
    end
    close FIELDSTOUPDATE
    deallocate FIELDSTOUPDATE

    --set negative when moving backward

    if @MOVECODE = 1 
      set @OFFSET = -1 * @OFFSET

    --move target dates not updated by FIELDSTOUPDATE

    if @OFFSET <> 0
      update dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE set
        BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE = 
          case @DATEVALUEUNITCODE
            when 0 then DATEADD(d,@OFFSET,BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE)
            when 1 then DATEADD(wk,@OFFSET,BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE)
            when 2 then DATEADD(m,@OFFSET,BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE)
            when 3 then DATEADD(yy,@OFFSET,BATCHSTEWARDSHIPPLANSTEPUPDATE.TARGETDATE)
          end
      from dbo.BATCHSTEWARDSHIPPLANSTEPUPDATE
      inner join @Temp TEMP on TEMP.ID = BATCHSTEWARDSHIPPLANSTEPUPDATE.ID and TEMP.DATEUPDATED = 0
      where 
        BATCHSTEWARDSHIPPLANSTEPUPDATE.BATCHID = @BATCHID and
        BATCHSTEWARDSHIPPLANSTEPUPDATE.DATELOCKED = 0
  end try

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

  return 0;
end