UFN_CHECKDETAIL_SPLITSCHANGED_EXCLUDEMEMBERSHIP
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@SPLITS | xml | IN |
Definition
Copy
create function dbo.UFN_CHECKDETAIL_SPLITSCHANGED_EXCLUDEMEMBERSHIP(@REVENUEID as uniqueidentifier, @SPLITS as xml)
returns bit
with execute as caller
as
begin
declare @SPLITSTABLE table
(
ID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier
);
declare @NEWSPLITSTABLE table
(
ID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier
);
declare @SPLITSCOUNT int
declare @CHANGED as bit
set @CHANGED = 0;
if @CHANGED = 0
begin
insert into @NEWSPLITSTABLE(ID, AMOUNT, DESIGNATIONID, BASEEXCHANGERATEID)
select ID, AMOUNT, DESIGNATIONID, BASEEXCHANGERATEID from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS);
declare @ISMEMBERSHIPTRANSACTION bit;
select @ISMEMBERSHIPTRANSACTION = case REVENUE.TYPECODE when 2 then dbo.UFN_RECURRINGGIFT_ISMEMBERSHIP(@REVENUEID) when 15 then 1 else 0 end
from dbo.FINANCIALTRANSACTION REVENUE where ID = @REVENUEID
--if this is a membership transaction exclude the null designation splits
if @ISMEMBERSHIPTRANSACTION = 1
begin
insert into @SPLITSTABLE(ID, AMOUNT, DESIGNATIONID, BASEEXCHANGERATEID)
select ID, TRANSACTIONAMOUNT, DESIGNATIONID, BASEEXCHANGERATEID from dbo.UFN_REVENUE_GETSPLITS_2(@REVENUEID)
where DESIGNATIONID is not null;
end
else
begin
insert into @SPLITSTABLE(ID, AMOUNT, DESIGNATIONID, BASEEXCHANGERATEID)
select ID, TRANSACTIONAMOUNT, DESIGNATIONID, BASEEXCHANGERATEID from dbo.UFN_REVENUE_GETSPLITS_2(@REVENUEID);
end
select @SPLITSCOUNT = count(ID) from @SPLITSTABLE;
if @SPLITSCOUNT <> (select count(*) from @NEWSPLITSTABLE)
set @CHANGED = 1;
if @CHANGED = 0
begin
select @SPLITSCOUNT = count([NEW].ID)
from @NEWSPLITSTABLE as [NEW]
inner join @SPLITSTABLE as [OLD]
on ([NEW].ID = [OLD].ID and
[NEW].AMOUNT = [OLD].AMOUNT and
([NEW].BASEEXCHANGERATEID = [OLD].BASEEXCHANGERATEID or ([NEW].BASEEXCHANGERATEID is null and [OLD].BASEEXCHANGERATEID is null)) and
([NEW].DESIGNATIONID = [OLD].DESIGNATIONID or ([NEW].DESIGNATIONID is null and [OLD].DESIGNATIONID is null)));
if @SPLITSCOUNT <> (select count(*) from @NEWSPLITSTABLE)
set @CHANGED = 1;
end
end
return @CHANGED
end