USP_DATAFORMTEMPLATE_EDIT_PLANNEDGIFTREVENUEADJUST

The save procedure used by the edit dataform template "Posted Planned Gift Revenue Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@DATE datetime IN Date
@AMOUNT money IN Amount
@POSTSTATUSCODE tinyint IN Post status
@POSTDATE datetime IN Post date
@SPLITS xml IN Designations
@SOURCECODE nvarchar(50) IN Source code
@APPEALID uniqueidentifier IN Appeal
@BENEFITS xml IN Benefits
@BENEFITSWAIVED bit IN Benefits waived
@GIVENANONYMOUSLY bit IN Planned gift is anonymous
@MAILINGID uniqueidentifier IN Effort
@CHANNELCODEID uniqueidentifier IN Inbound channel
@DONOTACKNOWLEDGE bit IN Do not acknowledge
@PLEDGESUBTYPEID uniqueidentifier IN Subtype
@OPPORTUNITYID uniqueidentifier IN Opportunity
@REFERENCE nvarchar(255) IN Reference
@CATEGORYCODEID uniqueidentifier IN Revenue category
@PERCENTAGEBENEFITS xml IN Benefits

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PLANNEDGIFTREVENUEADJUST
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @DATE datetime,
  @AMOUNT money,
  @POSTSTATUSCODE tinyint,
  @POSTDATE datetime,
  @SPLITS xml,
  @SOURCECODE nvarchar(50),
  @APPEALID uniqueidentifier,
  @BENEFITS xml,
  @BENEFITSWAIVED bit,
  @GIVENANONYMOUSLY bit,
  @MAILINGID uniqueidentifier,
  @CHANNELCODEID uniqueidentifier,
  @DONOTACKNOWLEDGE bit,
  @PLEDGESUBTYPEID uniqueidentifier,
  @OPPORTUNITYID uniqueidentifier,
  @REFERENCE nvarchar(255),
  @CATEGORYCODEID uniqueidentifier,
  @PERCENTAGEBENEFITS xml
)
as
begin
  set nocount on;

  declare @CURRENTDATE datetime;

  declare @contextCache varbinary(128);

  --cache current context information

  set @contextCache = CONTEXT_INFO();

  --set CONTEXT_INFO to @CHANGEAGENTID

  set CONTEXT_INFO @CHANGEAGENTID;

  begin try
    if @CHANGEAGENTID is null  
      exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    set @CURRENTDATE = GetDate();

    exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 1;

    declare @TRIBUTEAMOUNT money;
    select @TRIBUTEAMOUNT = sum(AMOUNT) from dbo.REVENUETRIBUTE where REVENUEID = @ID;

    -- do not allow the gift amount to be adjusted less than the applied tribute amount

    if (@TRIBUTEAMOUNT is not null) and (@AMOUNT < @TRIBUTEAMOUNT)
    begin
      raiserror('The planned gift amount cannot be less than the sum of the tribute amounts applied to this planned gift.', 13, 1)
    end

    declare @DONOTPOST bit;
    set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;

    /* RSC - 10/17/08 - Commenting out post to GL code until we decide on a strategy for posting planned gifts. */
    --declare @CLEARGLDISTRIBUTION bit;

    --set @CLEARGLDISTRIBUTION = 0;


    -- check to see if designations have changed

    --if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1

    --begin

    --    set @CLEARGLDISTRIBUTION = 1;

    --end    


    --declare @OLDCATEGORYCODEID uniqueidentifier

    --select top 1 @OLDCATEGORYCODEID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID

    --from dbo.REVENUECATEGORY

    --inner join dbo.REVENUESPLIT on REVENUECATEGORY.ID = REVENUESPLIT.ID

    --where REVENUESPLIT.REVENUEID = @ID


    -- check to see if amount has changed

    --if @CLEARGLDISTRIBUTION = 0

    --begin

    --if (select AMOUNT from dbo.REVENUE where ID = @ID) <> @AMOUNT or 

    --not ((@CATEGORYCODEID is null and @OLDCATEGORYCODEID is null) and (@CATEGORYCODEID = @OLDCATEGORYCODEID))

    --  begin

    --    set @CLEARGLDISTRIBUTION = 1;

    --  end

    --end


-- check to see if the revenue record needs to be re-acknowledged

    if (coalesce((select top 1 REACKNOWLEDGEREVENUE from dbo.ACKNOWLEDGEMENTPREFERENCE), 0)) = 1
    begin
      declare @FIELDCHANGED bit;    
      set @FIELDCHANGED = 0;            

      -- check to see if amount have changed

      if (select count(REVENUE.ID) from dbo.REVENUE where REVENUE.ID = @ID and AMOUNT = @AMOUNT) = 0
        set @FIELDCHANGED = 1;

      -- check to see if designations have changed

      if @FIELDCHANGED = 0
        if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1
          set @FIELDCHANGED = 1;

      -- if a field has changed, mark the revenue letters for this record out of date, if necessary

      if @FIELDCHANGED = 1
        exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID;     

    end

    update
      dbo.REVENUE
    set
      DATE = @DATE,
      DONOTPOST = @DONOTPOST,
      POSTDATE = @POSTDATE,
      AMOUNT = @AMOUNT,
      SOURCECODE = @SOURCECODE,
      APPEALID = @APPEALID,
      BENEFITSWAIVED = @BENEFITSWAIVED,
      GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
      MAILINGID = @MAILINGID,
      CHANNELCODEID = @CHANNELCODEID,
      DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    where
      ID = @ID;

    update 
      dbo.INSTALLMENT
    set 
      AMOUNT = @AMOUNT,
      DATE = @DATE,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    where 
      REVENUEID = @ID;

    declare @SPLITSCHANGED bit
    set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS)

    exec dbo.USP_REVENUE_GETSPLITS_UPDATEFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;

    -- update benefits

    declare @TOTALBENEFITS xml;
    set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
    exec dbo.USP_REVENUE_GETBENEFITS2_UPDATEFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE;

    exec dbo.USP_REVENUE_UPDATESOLICITORS @ID, @CHANGEAGENTID, @CURRENTDATE;

    if @SPLITSCHANGED = 1
    begin
      --assume one installment

      declare @INSTALLMENTSPLITS xml;
      set @INSTALLMENTSPLITS = (
        select distinct
          INSTALLMENTSPLIT.ID, 
          INSTALLMENT.ID INSTALLMENTID, 
          REVENUESPLIT.DESIGNATIONID, 
          REVENUESPLIT.AMOUNT,
          REVENUESPLIT.ID as REVENUESPLITID
        from 
          dbo.REVENUESPLIT
        inner join 
          dbo.INSTALLMENT on INSTALLMENT.REVENUEID = REVENUESPLIT.REVENUEID
        left outer join 
          dbo.INSTALLMENTSPLIT on REVENUESPLIT.ID = INSTALLMENTSPLIT.REVENUESPLITID
        where 
          REVENUESPLIT.REVENUEID = @ID
        for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64
      );

      exec dbo.USP_PLEDGE_GETINSTALLMENTSPLITS_UPDATEFROMXML @ID, @INSTALLMENTSPLITS, @CHANGEAGENTID, @CURRENTDATE;
    end

    exec dbo.USP_REVENUEREFERENCE_EDIT @ID, @REFERENCE, @CHANGEAGENTID

    exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CURRENTDATE

    if @OPPORTUNITYID is null
      delete REVENUEOPPORTUNITY
      from dbo.REVENUEOPPORTUNITY 
      inner join dbo.REVENUESPLIT
        on REVENUESPLIT.ID = REVENUEOPPORTUNITY.ID
      where REVENUESPLIT.REVENUEID = @ID
    else begin
      exec dbo.USP_REVENUE_PULLSOLICITORSFROMOPPORTUNITY @ID, @OPPORTUNITYID, @CHANGEAGENTID, @CURRENTDATE

      insert into dbo.REVENUEOPPORTUNITY (ID, OPPORTUNITYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select ID, @OPPORTUNITYID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from dbo.REVENUESPLIT where REVENUEID = @ID
        and not exists(select top 1 REVENUEOPPORTUNITY.ID from REVENUEOPPORTUNITY where REVENUEOPPORTUNITY.ID = REVENUESPLIT.ID);

      exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID, @DATE, @CHANGEAGENTID, @CURRENTDATE
    end


    -- clear the user-defined gl distributions

    --if @CLEARGLDISTRIBUTION = 1

    --begin

      --Clear GL

    --delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;


      -- Add new GL distributions

    --if @POSTSTATUSCODE <> 2

    --  exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;

    --end


    if dbo.UFN_PLEDGEPAYMENT_DESIGNATIONSBALANCE(@ID) = 0
      raiserror('PLEDGEPAYMENT_DESIGNATIONSBALANCE', 13, 10);

  end try

  begin catch
    --reset CONTEXT_INFO to previous value

    if not @contextCache is null
      set CONTEXT_INFO @contextCache;


    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch

  --reset CONTEXT_INFO to previous value

  if not @contextCache is null
    set CONTEXT_INFO @contextCache;

  return 0;
end