UFN_CHECKDETAIL_INSTALLMENTSCHANGED
Determines if an installment has changed.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@installments | xml | IN |
Definition
Copy
CREATE function dbo.UFN_CHECKDETAIL_INSTALLMENTSCHANGED(@REVENUEID as uniqueidentifier, @installments as xml)
returns bit
with execute as caller
as
begin
declare @INSTALLMENTSTABLE table
(
ID uniqueidentifier,
SEQUENCE int,
AMOUNT money,
DATE datetime
);
declare @NEWINSTALLMENTSTABLE table
(
ID uniqueidentifier,
SEQUENCE int,
AMOUNT money,
DATE datetime
);
declare @INSTALLMENTSCOUNT int
declare @CHANGED as bit
set @CHANGED = 0;
insert into @NEWINSTALLMENTSTABLE(ID, SEQUENCE, AMOUNT, DATE)
select ID, ROW_NUMBER() OVER (order by DATE, AMOUNT), AMOUNT, DATE from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS);
insert into @INSTALLMENTSTABLE(ID, SEQUENCE, AMOUNT, DATE)
select ID, ROW_NUMBER() OVER (order by DATE, AMOUNT), TRANSACTIONAMOUNT, DATE from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2(@REVENUEID);
select @INSTALLMENTSCOUNT = count(ID) from @INSTALLMENTSTABLE;
if @INSTALLMENTSCOUNT <> (select count(*) from @NEWINSTALLMENTSTABLE)
set @CHANGED = 1;
if @CHANGED = 0
begin
if exists(
select 1
from @NEWINSTALLMENTSTABLE
where ID is null
)
set @CHANGED = 1;
if @CHANGED = 0
begin
select @INSTALLMENTSCOUNT = count(*)
from @NEWINSTALLMENTSTABLE as [NEW]
inner join @INSTALLMENTSTABLE as [OLD]
on [NEW].SEQUENCE = [OLD].SEQUENCE
and [NEW].AMOUNT = [OLD].AMOUNT
and [NEW].DATE = [OLD].DATE;
if @INSTALLMENTSCOUNT <> (select count(*) from @NEWINSTALLMENTSTABLE)
set @CHANGED = 1;
end
end
return @CHANGED;
end