UFN_CHECKDETAIL_STREAMSCHANGED
Determines is the amount of a revenue stream has changed.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@TRANSACTIONID | uniqueidentifier | IN | |
@REVENUESTREAMS | xml | IN |
Definition
Copy
CREATE function dbo.UFN_CHECKDETAIL_STREAMSCHANGED(@TRANSACTIONID as uniqueidentifier, @REVENUESTREAMS as xml)
returns bit
with execute as caller
as
begin
declare @OLDREVENUESTREAMS table
(
ID uniqueidentifier,
APPLICATIONID uniqueidentifier,
APPLIED money,
APPLICATIONCODE tinyint,
GIFTFIELDS xml,
OTHERFIELDS xml,
CATEGORYCODEID uniqueidentifier
);
declare @UPDATEDREVENUESTREAMS table
(
ID uniqueidentifier,
APPLICATIONID uniqueidentifier,
APPLIED money,
APPLICATIONCODE tinyint,
GIFTFIELDS xml,
OTHERFIELDS xml,
CATEGORYCODEID uniqueidentifier
);
declare @STREAMCOUNT int
declare @CHANGED as bit
set @CHANGED = 0;
insert into @OLDREVENUESTREAMS
select ID, APPLICATIONID, APPLIED, APPLICATIONCODE, GIFTFIELDS,OTHERFIELDS,CATEGORYCODEID
from dbo.UFN_REVENUE_GETAPPLICATIONS(@TRANSACTIONID);
insert into @UPDATEDREVENUESTREAMS
select ID, APPLICATIONID, APPLIED, APPLICATIONCODE, GIFTFIELDS,OTHERFIELDS,CATEGORYCODEID
from dbo.UFN_REVENUE_GETAPPLICATIONS_FROMXML(@REVENUESTREAMS);
select @STREAMCOUNT = count(ID) from @OLDREVENUESTREAMS;
if @STREAMCOUNT <> (select count(*) from @UPDATEDREVENUESTREAMS)
set @CHANGED = 1;
if @CHANGED = 0
begin
select @STREAMCOUNT = count([NEW].ID)
from @UPDATEDREVENUESTREAMS as [NEW]
inner join @OLDREVENUESTREAMS as [OLD] on [OLD].ID = [NEW].ID
where ([NEW].APPLICATIONID = [OLD].APPLICATIONID
or [NEW].APPLICATIONID is null and [OLD].APPLICATIONID is null)
and [NEW].APPLIED = [OLD].APPLIED
and [NEW].APPLICATIONCODE = [OLD].APPLICATIONCODE
if @STREAMCOUNT <> (select count(ID) from @UPDATEDREVENUESTREAMS)
set @CHANGED = 1;
end
--Gift Changed
if @CHANGED = 0
begin
select @STREAMCOUNT = count([NEW].ID)
from @UPDATEDREVENUESTREAMS as [NEW]
inner join @OLDREVENUESTREAMS as [OLD] on [OLD].ID = [NEW].ID
outer apply [NEW].GIFTFIELDS.nodes('/GIFTFIELDS/ITEM') T1(giftfield)
outer apply [OLD].GIFTFIELDS.nodes('/ITEM') T2(giftfield)
where [NEW].APPLICATIONCODE = 0
and (T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') = T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier')
or T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null and T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null)
and (T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') = T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier')
or T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null and T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null)
if @STREAMCOUNT <> (select count(ID) from @UPDATEDREVENUESTREAMS where APPLICATIONCODE = 0)
set @CHANGED = 1;
end
--Unapplied matching gift Changed
if @CHANGED = 0
begin
select @STREAMCOUNT = count([NEW].ID)
from @UPDATEDREVENUESTREAMS as [NEW]
inner join @OLDREVENUESTREAMS as [OLD] on [OLD].ID = [NEW].ID
outer apply [NEW].GIFTFIELDS.nodes('/GIFTFIELDS/ITEM') T1(giftfield)
outer apply [OLD].GIFTFIELDS.nodes('/ITEM') T2(giftfield)
where [NEW].APPLICATIONCODE = 100
and (T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') = T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier')
or T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null and T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null)
and (T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') = T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier')
or T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null and T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null)
if @STREAMCOUNT <> (select count(ID) from @UPDATEDREVENUESTREAMS where APPLICATIONCODE = 100)
set @CHANGED = 1;
end
--Other Changed
if @CHANGED = 0
begin
select @STREAMCOUNT = count([NEW].ID)
from @UPDATEDREVENUESTREAMS as [NEW]
inner join @OLDREVENUESTREAMS as [OLD] on [OLD].ID = [NEW].ID
outer apply [NEW].OTHERFIELDS.nodes('/OTHERFIELDS/ITEM') T1(giftfield)
outer apply [OLD].OTHERFIELDS.nodes('/ITEM') T2(giftfield)
where [NEW].APPLICATIONCODE = 4
and (T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') = T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier')
or T1.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null and T2.giftfield.value('(DESIGNATIONID)[1]','uniqueidentifier') is null)
and (T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') = T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier')
or T1.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null and T2.giftfield.value('(CATEGORYCODEID)[1]','uniqueidentifier') is null)
if @STREAMCOUNT <> (select count(ID) from @UPDATEDREVENUESTREAMS where APPLICATIONCODE = 4)
set @CHANGED = 1;
end
return @CHANGED
end