UFN_OPPORTUNITY_DESIGNATIONSCHANGED_2

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@OPPORTUNITYID uniqueidentifier IN
@DESIGNATIONS xml IN

Definition

Copy


create function dbo.UFN_OPPORTUNITY_DESIGNATIONSCHANGED_2
(
  @OPPORTUNITYID as uniqueidentifier,
  @DESIGNATIONS as xml

returns bit
with execute as caller
as
begin

  declare @DESIGNATIONSTABLE table
  (
    ID uniqueidentifier,
    DESIGNATIONID uniqueidentifier,
    AMOUNT money,
    SEQUENCE int,
    CONSTITUENTID uniqueidentifier,
    TRANSACTIONCURRENCYID uniqueidentifier,
    FUNDINGMETHODCODEID uniqueidentifier,
    CATEGORYCODEID uniqueidentifier,
    TYPECODEID uniqueidentifier,
    USECODEID uniqueidentifier
  );

  declare @NEWDESIGNATIONSTABLE table
  (
    ID uniqueidentifier,
    DESIGNATIONID uniqueidentifier,
    AMOUNT money,
    SEQUENCE int,
    CONSTITUENTID uniqueidentifier,
    TRANSACTIONCURRENCYID uniqueidentifier,
    FUNDINGMETHODCODEID uniqueidentifier,
    CATEGORYCODEID uniqueidentifier,
    TYPECODEID uniqueidentifier,
    USECODEID uniqueidentifier
  );

  declare @DESIGNATIONSCOUNT int;
  declare @CHANGED as bit = 0;

  insert into
    @NEWDESIGNATIONSTABLE
  (
    ID,
    DESIGNATIONID,
    AMOUNT,
    SEQUENCE,
    CONSTITUENTID,
    TRANSACTIONCURRENCYID,
    FUNDINGMETHODCODEID,
    CATEGORYCODEID,
    TYPECODEID,
    USECODEID
  )
  select
    ID,
    DESIGNATIONID,
    AMOUNT,
    SEQUENCE,
    CONSTITUENTID,
    TRANSACTIONCURRENCYID,
    FUNDINGMETHODCODEID,
    CATEGORYCODEID,
    TYPECODEID,
    USECODEID
  from
    dbo.UFN_OPPORTUNITY_DESIGNATION_2_FROMITEMLISTXML(@DESIGNATIONS);

  insert into
    @DESIGNATIONSTABLE
  (
    ID,
    DESIGNATIONID,
    AMOUNT,
    SEQUENCE,
    CONSTITUENTID,
    TRANSACTIONCURRENCYID,
    FUNDINGMETHODCODEID,
    CATEGORYCODEID,
    TYPECODEID,
    USECODEID
  )
  select
    ID,
    DESIGNATIONID,
    AMOUNT,
    SEQUENCE,
    CONSTITUENTID,
    TRANSACTIONCURRENCYID,
    FUNDINGMETHODCODEID,
    CATEGORYCODEID,
    TYPECODEID,
    USECODEID
  from
    dbo.UFN_OPPORTUNITY_DESIGNATION_2(@OPPORTUNITYID);

  select @DESIGNATIONSCOUNT = count(ID) from @DESIGNATIONSTABLE;

  if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE
    set @CHANGED = 1;

  if @CHANGED = 0
  begin
    select
      @DESIGNATIONSCOUNT = count(NEW.ID)
    from
      @NEWDESIGNATIONSTABLE as NEW
    inner join
      @DESIGNATIONSTABLE as OLD on
        NEW.AMOUNT = OLD.AMOUNT and
        NEW.SEQUENCE = OLD.SEQUENCE and
        (NEW.DESIGNATIONID = OLD.DESIGNATIONID or (NEW.DESIGNATIONID is null and OLD.DESIGNATIONID is null)) and
        (NEW.CONSTITUENTID = OLD.CONSTITUENTID or (NEW.CONSTITUENTID is null and OLD.CONSTITUENTID is null)) and
        (NEW.TRANSACTIONCURRENCYID = OLD.TRANSACTIONCURRENCYID or (NEW.TRANSACTIONCURRENCYID is null and OLD.TRANSACTIONCURRENCYID is null)) and
        (NEW.FUNDINGMETHODCODEID = OLD.FUNDINGMETHODCODEID or (NEW.FUNDINGMETHODCODEID is null and OLD.FUNDINGMETHODCODEID is null)) and
        (NEW.CATEGORYCODEID = OLD.CATEGORYCODEID or (NEW.CATEGORYCODEID is null and OLD.CATEGORYCODEID is null)) and
        (NEW.TYPECODEID = OLD.TYPECODEID or (NEW.TYPECODEID is null and OLD.TYPECODEID is null)) and
        (NEW.USECODEID = OLD.USECODEID or (NEW.USECODEID is null and OLD.USECODEID is null))

    if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE)
      set @CHANGED = 1;
  end

  return @CHANGED;
end