UFN_PLANNEDGIFT_DESIGNATIONSCHANGED
Checks if an planned gift's designations changed.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PLANNEDGIFTID | uniqueidentifier | IN | |
@DESIGNATIONS | xml | IN |
Definition
Copy
CREATE function dbo.UFN_PLANNEDGIFT_DESIGNATIONSCHANGED
(
@PLANNEDGIFTID as uniqueidentifier,
@DESIGNATIONS as xml
)
returns bit
with execute as caller
as
begin
declare @DESIGNATIONSTABLE table
(
ID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
PLANNEDGIFTDESCATEGORYCODEID uniqueidentifier,
DESIGNATIONUSECODEID uniqueidentifier,
DATE datetime
);
declare @NEWDESIGNATIONSTABLE table
(
ID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
PLANNEDGIFTDESCATEGORYCODEID uniqueidentifier,
DESIGNATIONUSECODEID uniqueidentifier,
DATE datetime
);
declare @DESIGNATIONSCOUNT int
declare @CHANGED as bit
set @CHANGED = 0;
if @CHANGED = 0
begin
insert into @NEWDESIGNATIONSTABLE(ID, AMOUNT, DESIGNATIONID, PLANNEDGIFTDESCATEGORYCODEID, DESIGNATIONUSECODEID, DATE)
select ID, AMOUNT, DESIGNATIONID, CATEGORYCODEID, USECODEID, DATE from dbo.UFN_PLANNEDGIFT_DESIGNATION_FROMITEMLISTXML(@DESIGNATIONS);
insert into @DESIGNATIONSTABLE(ID, AMOUNT, DESIGNATIONID, PLANNEDGIFTDESCATEGORYCODEID, DESIGNATIONUSECODEID, DATE)
select ID, AMOUNT, DESIGNATIONID, CATEGORYCODEID, USECODEID, DATE from dbo.UFN_PLANNEDGIFT_DESIGNATION(@PLANNEDGIFTID);
select @DESIGNATIONSCOUNT = count(ID) from @DESIGNATIONSTABLE;
if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE)
set @CHANGED = 1;
if @CHANGED = 0
begin
select @DESIGNATIONSCOUNT = count([NEW].ID)
from @NEWDESIGNATIONSTABLE as [NEW]
inner join @DESIGNATIONSTABLE as [OLD]
on [NEW].AMOUNT = [OLD].AMOUNT
and ([NEW].PLANNEDGIFTDESCATEGORYCODEID = [OLD].PLANNEDGIFTDESCATEGORYCODEID or ([NEW].PLANNEDGIFTDESCATEGORYCODEID is null and [OLD].PLANNEDGIFTDESCATEGORYCODEID is null))
and ([NEW].DESIGNATIONUSECODEID = [OLD].DESIGNATIONUSECODEID or ([NEW].DESIGNATIONUSECODEID is null and [OLD].DESIGNATIONUSECODEID is null))
and ([NEW].DATE = [OLD].DATE or ([NEW].DATE is null and [OLD].DATE is null))
and ([NEW].DESIGNATIONID = [OLD].DESIGNATIONID or ([NEW].DESIGNATIONID is null and [OLD].DESIGNATIONID is null));
if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE)
set @CHANGED = 1;
end
end
return @CHANGED
end