USP_DONORCHALLENGEENCUMBERED_VALIDATEAMOUNT

Validates an amount is acceptable for the given donor challenge.

Parameters

Parameter Parameter Type Mode Description
@AMOUNT money IN
@DONORCHALLENGEID uniqueidentifier IN
@DONORCHALLENGEENCUMBEREDID uniqueidentifier IN
@RESERVED bit IN

Definition

Copy


      CREATE procedure dbo.USP_DONORCHALLENGEENCUMBERED_VALIDATEAMOUNT
      (
        @AMOUNT money = 0,
        @DONORCHALLENGEID uniqueidentifier = null,
        @DONORCHALLENGEENCUMBEREDID uniqueidentifier = null,
        @RESERVED bit = 0
      )
      as
        set nocount on;

      declare @PREVIOUSAMOUNT money = 0;

      --If the fund is already encumbered and reserved the amount must be > 0

      if (@DONORCHALLENGEENCUMBEREDID is not null) or (@RESERVED = 1)
      begin
        if @DONORCHALLENGEENCUMBEREDID is not null
          select
            @DONORCHALLENGEID = DONORCHALLENGEID,
            @AMOUNT = case when STATUSTYPECODE = 2 then AMOUNT else @AMOUNT end,
            @PREVIOUSAMOUNT = case when STATUSTYPECODE = 2 then 0 else AMOUNT end,
            @RESERVED = case when METHODTYPECODE = 2 then 1 else 0 end
          from
            dbo.DONORCHALLENGEENCUMBERED
          where
            ID = @DONORCHALLENGEENCUMBEREDID

        if (@RESERVED = 1) and (@AMOUNT = 0)
        begin
          raiserror('BBERR_DONORCHALLENGEENCUMBERED_AMOUNTGREATERTHANZERO', 13, 1);
          return 1;
        end
      end

      declare @TOTALFUNDS money = 0;
      declare @MATCHEDFUNDS money = 0;
      declare @ENCUMBEREDFUNDS money = 0;

      select
        @TOTALFUNDS = case when TYPECODE = 1 then MATCHTHRESHOLD else TOTALFUNDS end
      from
        dbo.DONORCHALLENGE
      where
        ID = @DONORCHALLENGEID

      set @MATCHEDFUNDS = dbo.UFN_DONORCHALLENGE_MATCHEDAMOUNT(@DONORCHALLENGEID);

      set @ENCUMBEREDFUNDS = dbo.UFN_DONORCHALLENGE_ENCUMBEREDAMOUNT(@DONORCHALLENGEID);

      set @ENCUMBEREDFUNDS = @ENCUMBEREDFUNDS - @PREVIOUSAMOUNT;

      --Can't encumber an amount larger than our remaining funds

      if @AMOUNT > (@TOTALFUNDS - @ENCUMBEREDFUNDS - @MATCHEDFUNDS)
      begin
        raiserror('BBERR_DONORCHALLENGEENCUMBERED_AMOUNTEXCEEDSAVAILABLEFUNDS', 13, 1);
        return 1;
      end

      return 0;