USP_CONSTITUENTUPDATEBATCH_APPLYBIRTHDATERULES

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@PRIMARYRECORDID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@BIRTHDATERULECODE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_CONSTITUENTUPDATEBATCH_APPLYBIRTHDATERULES(
@ID uniqueidentifier,
@PRIMARYRECORDID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@BIRTHDATERULECODE tinyint = 1
)
as
begin

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

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    declare @BIRTHDATE UDT_FUZZYDATE
    declare @BIRTHDATE_YR nvarchar(4)
    declare @BIRTHDATE_M nvarchar(2)
    declare @BIRTHDATE_D nvarchar(2)
    declare @EXISTINGBIRTHDATE UDT_FUZZYDATE
    declare @EXISTINGBIRTHDATE_YR nvarchar(4)
    declare @EXISTINGBIRTHDATE_M nvarchar(2)
    declare @EXISTINGBIRTHDATE_D nvarchar(2)

    -- Get existing constituent birth date

    select 
        @EXISTINGBIRTHDATE = BIRTHDATE,
        @EXISTINGBIRTHDATE_YR = SUBSTRING(BIRTHDATE,1,4),
        @EXISTINGBIRTHDATE_M = SUBSTRING(BIRTHDATE,5,2),
        @EXISTINGBIRTHDATE_D = SUBSTRING(BIRTHDATE,7,2)
    from dbo.CONSTITUENT
    where ID = @PRIMARYRECORDID

    -- Get birth date in batch

    select 
        @BIRTHDATE = BIRTHDATE,
        @BIRTHDATE_YR = SUBSTRING(BIRTHDATE,1,4),
        @BIRTHDATE_M = SUBSTRING(BIRTHDATE,5,2),
        @BIRTHDATE_D = SUBSTRING(BIRTHDATE,7,2)
    from dbo.BATCHCONSTITUENTUPDATE
    where ID = @ID

    declare @CONFLICT bit = 1;

    -- check to see if there are any conflicts.  If none, we are allowed to apply any new information.


    if 
       (@EXISTINGBIRTHDATE_YR = '0000' or @EXISTINGBIRTHDATE_YR = @BIRTHDATE_YR or @BIRTHDATE_YR = '0000') and 
       (@EXISTINGBIRTHDATE_M = '00' or @EXISTINGBIRTHDATE_M = @BIRTHDATE_M or @BIRTHDATE_M = '00') and
       (@EXISTINGBIRTHDATE_D = '00' or @EXISTINGBIRTHDATE_D = @BIRTHDATE_D or @BIRTHDATE_D = '00'
        set @CONFLICT = 0


    --If the setting is replace and there are conflicts, put in the new value.

    --If there are no conflicts we join with existing values  


    if @CONFLICT = 0
        update dbo.BATCHCONSTITUENTUPDATE set    
            BIRTHDATE =  coalesce(NULLIF(@BIRTHDATE_YR,'0000'),@EXISTINGBIRTHDATE_YR) + coalesce(NULLIF(@BIRTHDATE_M,'00'),@EXISTINGBIRTHDATE_M) + coalesce(NULLIF(@BIRTHDATE_D,'00'),@EXISTINGBIRTHDATE_D),
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID = @ID  
    else
      begin
            -- If there?s a conflict and setting is ignore we want to keep the original value.  If the setting is replace and there is a conflict, we don't need to do anything.

            if @BIRTHDATERULECODE = 0 
                 update dbo.BATCHCONSTITUENTUPDATE set
                BIRTHDATE = @EXISTINGBIRTHDATE,
                CHANGEDBYID  = @CHANGEAGENTID,
                DATECHANGED  = @CURRENTDATE            
            where ID = @ID 
      end

end