UFN_GIFTINKINDPAYMENTMETHODDETAIL_DISTRIBUTIONCHANGED
Determines if a gift-in-kind distribution has changed.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GIFTINKINDPAYMENTMETHODDETAILID | uniqueidentifier | IN | |
@DISTRIBUTION | xml | IN |
Definition
Copy
create function dbo.UFN_GIFTINKINDPAYMENTMETHODDETAIL_DISTRIBUTIONCHANGED(@GIFTINKINDPAYMENTMETHODDETAILID as uniqueidentifier, @DISTRIBUTION as xml)
returns bit
with execute as caller
as
begin
declare @DISTRIBUTIONTABLE table
(
ID uniqueidentifier,
AMOUNT money,
TRANSACTIONTYPECODE tinyint,
ACCOUNT nvarchar(100),
PROJECT nvarchar(100)
);
declare @NEWDISTRIBUTIONTABLE table
(
ID uniqueidentifier,
AMOUNT money,
TRANSACTIONTYPECODE tinyint,
ACCOUNT nvarchar(100),
PROJECT nvarchar(100)
);
declare @DISTCOUNT int
declare @CHANGED as bit
set @CHANGED = 0;
insert into @NEWDISTRIBUTIONTABLE(ID, AMOUNT, TRANSACTIONTYPECODE, ACCOUNT, PROJECT)
select
ID,
AMOUNT,
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT
from dbo.UFN_REVENUE_GETGIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION_FROMITEMLISTXML(@DISTRIBUTION);
insert into @DISTRIBUTIONTABLE(ID, AMOUNT, TRANSACTIONTYPECODE, ACCOUNT, PROJECT)
select
GIFTINKINDSALEGLDISTRIBUTION.ID,
GIFTINKINDSALEGLDISTRIBUTION.TRANSACTIONAMOUNT,
GIFTINKINDSALEGLDISTRIBUTION.TRANSACTIONTYPECODE,
GIFTINKINDSALEGLDISTRIBUTION.ACCOUNT,
GIFTINKINDSALEGLDISTRIBUTION.PROJECT
from dbo.GIFTINKINDSALEGLDISTRIBUTION
inner join dbo.GIFTINKINDSALE on GIFTINKINDSALEGLDISTRIBUTION.GIFTINKINDSALEID = GIFTINKINDSALE.ID
where GIFTINKINDPAYMENTMETHODDETAILID = @GIFTINKINDPAYMENTMETHODDETAILID
and GIFTINKINDSALEGLDISTRIBUTION.OUTDATED = 0;
select @DISTCOUNT = count(ID) from @DISTRIBUTIONTABLE;
if @DISTCOUNT <> (select count(ID) from @NEWDISTRIBUTIONTABLE)
set @CHANGED = 1;
if @CHANGED = 0
begin
if exists(
select 1
from @NEWDISTRIBUTIONTABLE
where ID is null
)
set @CHANGED = 1;
if @CHANGED = 0
begin
select @DISTCOUNT = count([NEW].ID)
from @NEWDISTRIBUTIONTABLE as [NEW]
inner join @DISTRIBUTIONTABLE as [OLD]
on [NEW].ID = [OLD].ID
and [NEW].AMOUNT = [OLD].AMOUNT
and ([NEW].TRANSACTIONTYPECODE = [OLD].TRANSACTIONTYPECODE or ([NEW].TRANSACTIONTYPECODE is null and [OLD].TRANSACTIONTYPECODE is null))
and ([NEW].ACCOUNT = [OLD].ACCOUNT or ([NEW].ACCOUNT is null and [OLD].ACCOUNT is null))
and ([NEW].PROJECT = [OLD].PROJECT or ([NEW].PROJECT is null and [OLD].PROJECT is null))
if @DISTCOUNT <> (select count(ID) from @NEWDISTRIBUTIONTABLE)
set @CHANGED = 1;
end
end
return @CHANGED
end