UFN_CHECKDETAIL_SPLITSCHANGED

Determines if a split has changed.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@SPLITS xml IN

Definition

Copy


CREATE function dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@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);

    insert into @SPLITSTABLE(ID, AMOUNT, DESIGNATIONID, BASEEXCHANGERATEID)
      select ID, TRANSACTIONAMOUNT, DESIGNATIONID, BASEEXCHANGERATEID from dbo.UFN_REVENUE_GETSPLITS_2(@REVENUEID);

    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