USP_BBNC_NAMEFORMATS_ADDUPDATE

Add or update name format values from a Blackbaud Internet Solutions transaction to the system.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@XMLITEMS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_BBNC_NAMEFORMATS_ADDUPDATE
            (
                @CONSTITUENTID uniqueidentifier,
                @XMLITEMS xml = null,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
            )
            as
                set nocount on;

                if (@XMLITEMS is null) return 0;

                if @CONSTITUENTID is null
                    begin
                        raiserror('The constituent ID is required to process name format updates',16,1);
                        return -2;
                    end

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

                if @CHANGEDATE is null
                    set @CHANGEDATE = getdate();

                -- Build a temporary table to hold the name format values from XMLITEMS

                declare @NAMEFORMATS table (
                    [TYPE] nvarchar(max),
                    [VALUE] nvarchar(max),
                    [DEFAULTFUNCTION] uniqueidentifier
                );

                insert into @NAMEFORMATS 
                    select 
                        [TYPE],[VALUE],null
                    from 
                        dbo.UFN_BBNC_NAMEFORMATS_FROMITEMLISTXML(@XMLITEMS);

                update @NAMEFORMATS 
                    set DEFAULTFUNCTION = [NAMEFORMATFUNCTIONID]
                    from dbo.NAMEFORMATDEFAULT x inner join dbo.NAMEFORMATTYPECODE y on x.NAMEFORMATTYPECODEID = y.ID 
                    where y.[DESCRIPTION] = [TYPE] and x.APPLYTOCODE = 0

                begin try
                    if exists(select 1 from @NAMEFORMATS)
                    begin
                        -- Say Mrs Brown wants to be called "Brown Family" in the annual report (while "Annual report" is the name format type name)

                        -- case 1: the database does not have an entry of "Annual report" type for Mrs Brown

                        -- if Mrs Brown sent a blank value, we apply the system default [NAMEFORMATFUNCTIONID]

                        insert into dbo.[NAMEFORMAT]
                            ([CONSTITUENTID]
                            ,[NAMEFORMATTYPECODEID]
                            ,[NAMEFORMATFUNCTIONID]
                            ,[CUSTOMNAME]
                            ,[ADDEDBYID]
                            ,[CHANGEDBYID]
                            ,[DATEADDED]
                            ,[DATECHANGED])
                        select
                            @CONSTITUENTID
                            ,a.ID
                            ,case when temp.[VALUE] <> '' then NULL else temp.DEFAULTFUNCTION end
                            ,case when temp.[VALUE] <> '' then temp.[VALUE] else '' end
                            ,@CHANGEAGENTID
                            ,@CHANGEAGENTID
                            ,@CHANGEDATE
                            ,@CHANGEDATE
                        from @NAMEFORMATS temp
                        inner join dbo.NAMEFORMATTYPECODE a on a.[DESCRIPTION] = temp.[TYPE
                        where not exists (
                            select 1 from dbo.NAMEFORMAT f 
                            inner join dbo.NAMEFORMATTYPECODE c on c.ID = f.NAMEFORMATTYPECODEID 
                            inner join @NAMEFORMATS temp1 on temp1.[TYPE] = c.[DESCRIPTION]
                            where f.CONSTITUENTID = @CONSTITUENTID
                        )
                  and (temp.[VALUE] <> '' or temp.DEFAULTFUNCTION is not null);

                        -- case 2: the database has an existing entry of "Annual report" type for Mrs Brown

                        update dbo.[NAMEFORMAT] 
                        set 
                            [NAMEFORMATFUNCTIONID] = case when temp.[VALUE] <> '' then NULL else b.[NAMEFORMATFUNCTIONID] end
                            ,[CUSTOMNAME] = case when temp.[VALUE] <> '' then temp.[VALUE] else '' end
                            ,[ADDEDBYID] = @CHANGEAGENTID
                            ,[CHANGEDBYID] = @CHANGEAGENTID
                            ,[DATEADDED] = @CHANGEDATE
                            ,[DATECHANGED] = @CHANGEDATE
                        from @NAMEFORMATS temp
                        inner join dbo.NAMEFORMATTYPECODE a on a.[DESCRIPTION] = temp.[TYPE
                        inner join dbo.NAMEFORMATDEFAULT b on b.NAMEFORMATTYPECODEID = a.ID 
                        where 
                        exists (
                            select 1 from dbo.NAMEFORMAT f 
                            inner join dbo.NAMEFORMATTYPECODE c on c.ID = f.NAMEFORMATTYPECODEID 
                            inner join @NAMEFORMATS temp1 on temp1.[TYPE] = c.[DESCRIPTION]
                            where f.CONSTITUENTID = @CONSTITUENTID
                        ) 
                        and [NAMEFORMAT].NAMEFORMATTYPECODEID = (select ID from dbo.NAMEFORMATTYPECODE where NAMEFORMATTYPECODE.[DESCRIPTION] = temp.[TYPE])
                        and b.APPLYTOCODE = 0 and [NAMEFORMAT].CONSTITUENTID = @CONSTITUENTID;
                    end
                end try
                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                return 0;