USP_DATAFORMTEMPLATE_ADD_REVENUEOFFLINEDONATION

The save procedure used by the add dataform template "Revenue Offline Donation Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@REGISTRANTID uniqueidentifier IN Registrant
@ADDRESSBOOKFAFID uniqueidentifier IN Address book Faf
@DONORNAME nvarchar(255) IN Donor name
@AMOUNT money IN Amount
@PAYMENTTYPECODE tinyint IN Payment type
@CHECKNUMBER nvarchar(20) IN Check number
@EXPECTEDDATE datetime IN Expected date
@FIRSTNAME nvarchar(50) IN First name
@KEYNAME nvarchar(50) IN Last name
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@LOCALCORPNAME nvarchar(20) IN Local corp
@LOCALCORPZIP nvarchar(20) IN Local corp zip
@EVENTID uniqueidentifier IN EventID
@CLIENTUSERSID int IN CLIENTUUSERSID

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_REVENUEOFFLINEDONATION
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @REGISTRANTID uniqueidentifier = null,
    @ADDRESSBOOKFAFID uniqueidentifier = null,
    @DONORNAME nvarchar(255)= '',
    @AMOUNT money = 0,         
    @PAYMENTTYPECODE tinyint = 0,
    @CHECKNUMBER nvarchar(20)= '',
    @EXPECTEDDATE datetime= '',

    @FIRSTNAME    nvarchar(50)= '',
    @KEYNAME    nvarchar(50)= ''

 ,@CURRENTAPPUSERID uniqueidentifier = null
 ,@LOCALCORPNAME nvarchar(20)    = 'none' -- 'none', 1= 'preferredcorp',  2 = 'zipcode'

 ,@LOCALCORPZIP nvarchar(20) = ''
 ,@EVENTID  uniqueidentifier = null
 ,@CLIENTUSERSID int = 0
 --,@AMOUNTCONFIRMED money = 0         

 --,@GifTID    int = 0

)        
as

set nocount on;

declare @CURRENTDATE date,
        @STARTDATE datetime

declare @REVENUESPLITID uniqueidentifier, 
        @REGCONSTITUENTID uniqueidentifier,
        @DESIGNATIONID uniqueidentifier,
        @BASECURRENCYID uniqueidentifier

declare @APPEALID uniqueidentifier

declare @CURRENTCONSTITUENTID uniqueidentifier,
        @TITLECODEID uniqueidentifier

if @ID is null
    set @ID = newid()

if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

set @CURRENTDATE = getdate()

if @BASECURRENCYID is null
  set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();


-- handle inserting the data

begin TRY

--1...If Address Book exist, fetch info from it (otherwise add info there- maybe later)

declare        @FNAME nvarchar (510), @MIDDLENAME nvarchar (200), @LASTNAME nvarchar (510), @EMAILADDRESS UDT_EMAILADDRESS, @CITY nvarchar (100), @POSTCODE nvarchar (24), 
          @CELLPHONE nvarchar(50), @HOMEPHONE nvarchar(50), @STATEDESC nvarchar (200), @COUNTRYDESC nvarchar (200), @ADDRESSBLOCK nvarchar (200), 
          @STATEID uniqueidentifier, @COUNTRYID uniqueidentifier

if exists (select * from dbo.ADDRESSBOOKFAF where    ID= @ADDRESSBOOKFAFID)    
begin
    select    @FNAME = FIRSTNAME, @MIDDLENAME = MIDDLENAME, @LASTNAME = LASTNAME, @EMAILADDRESS = EMAILADDRESS, @CITY = CITY, @POSTCODE = POSTCODE, 
          @CELLPHONE = CELLPHONE, @HOMEPHONE = HOMEPHONE, @STATEDESC= S.[DESCRIPTION], @COUNTRYDESC= C.[DESCRIPTION], @ADDRESSBLOCK = ABF.ADDRESSBLOCK, 
          @STATEID= ABF.STATEID, @COUNTRYID= ABF.COUNTRYID, @TITLECODEID=ABF.TITLECODEID
    from        dbo.ADDRESSBOOKFAF ABF
    left join    dbo.[STATE] S        ON  ABF.STATEID= S.ID
    left join    dbo.[COUNTRY] C    ON  ABF.COUNTRYID= C.ID
    where        ABF.ID=@ADDRESSBOOKFAFID     
END
--------------------------------------------------------------------------------------------            


--2...Get Constituent (Address/Phone/Email) info constituent related tables


declare @CONSTID uniqueidentifier
Select    @CONSTID = ConstituentID from dbo.ADDRESSBOOKFAF where ID = @ADDRESSBOOKFAFID

if @CONSTID is null   -- new person

  Begin
      if exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U')    and o.id = object_id( N'tempdb..'+'#TEMP_Get_ConstID') )  
          drop table  #TEMP_Get_ConstID
      ----------------

      if not exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U')    and o.id = object_id( N'tempdb..'+'#TEMP_Get_ConstID') )  
        begin
            create table    #TEMP_Get_ConstID ( PRIM_ID int IDENTITY(1,1) primary key, CONSTITUENTID uniqueidentifier, FIRSTNAME nvarchar(100), LASTNAME nvarchar(200), MATCHPERCENTAGE decimal)
            -----    

            insert into        #TEMP_Get_ConstID ( CONSTITUENTID, FIRSTNAME, LASTNAME, MATCHPERCENTAGE) 
            --

            exec USP_CONSTITUENT_FUZZY_LOOKUP    @TRANSACTIONTYPE = 'FAF Donation', @FIRSTNAME = @FNAME, @MIDDLENAME = @MIDDLENAME,  @LASTNAME = @LASTNAME, @EMAILADDRESS_EMAILADDRESS = @EMAILADDRESS
                                                                              @ADDRESS_CITY = @CITY, @ADDRESS_POSTCODE = @POSTCODE, @PHONE_NUMBER = @CELLPHONE, @ADDRESS_STATEID= @STATEID 
                                                                            --@ADDRESS_ADDRESSBLOCK= @ADDRESS_ADDRESSBLOCK, @ADDRESS_COUNTRY= @COUNTRYDESC, 

        END

      --3...If Donor does exist in Constituent, then update ADDRESSBOOKFAF table with constituent info, else create constituent record 1st, then update ADDRESSBOOKFAF

      if  exists ( select CONSTITUENTID from #TEMP_Get_ConstID T, CONSTITUENT C where C.ID= T.CONSTITUENTID)
         Begin
             Select @CONSTID = (select top 1 CONSTITUENTID from #TEMP_Get_ConstID T order by T.MATCHPERCENTAGE desc)
           Update     ADDRESSBOOKFAF Set CONSTITUENTID= @CONSTID where ID = @ADDRESSBOOKFAFID
         End
      ELSE
         begin
              declare @def_COUNTRYID uniqueidentifier
              --if @COUNTRYID IS NULL set @def_COUNTRYID= 'CB8084BB-5A77-4E7F-9BA2-D6CD301F6913'

            if @COUNTRYID IS NULL select @def_COUNTRYID= ID from COUNTRY where ABBREVIATION= 'USA'  ELSE select @def_COUNTRYID= @COUNTRYID

              exec    USP_DATAFORM_ADDNEW_1f9671b3_6740_447c_ad15_ef2718c0e43a    @ID=@CONSTID output, @FIRSTNAME=@FNAME, @MIDDLENAME=@MIDDLENAME, @LASTNAME=@LASTNAME, @EMAILADDRESS_EMAILADDRESS=@EMAILADDRESS,
                                                                                                                                  @ADDRESS_CITY=@CITY, @ADDRESS_POSTCODE=@POSTCODE, @PHONE_NUMBER=@CELLPHONE,  @ADDRESS_STATEID=@STATEID
                                                                                                                                  @ADDRESS_COUNTRYID=@def_COUNTRYID, @ADDRESS_ADDRESSBLOCK=@ADDRESSBLOCK
                                                                                                                                  @CHANGEAGENTID=@CHANGEAGENTID, @CURRENTAPPUSERID= @CURRENTAPPUSERID
              select @CONSTID

              update     ADDRESSBOOKFAF set CONSTITUENTID= @CONSTID        where ID= @ADDRESSBOOKFAFID
         End                                
  End
--------------------------------------------------------------------------------------------            



-----     select     @CONSTID= CONSTITUENTID    from  ADDRESSBOOKFAF    where ID= @ADDRESSBOOKFAFID                    

--------------------------------------------------------------------------------------------            


  declare @BASEEXCHANGERATEID uniqueidentifier,
          @TRANSACTIONCURRENCYID uniqueidentifier,
          @BASEAMOUNT money,
          @ORGANIZATIONCURRENCYID uniqueidentifier,
          @ORGANIZATIONAMOUNT money,
          @ORGANIZATIONEXCHANGERATEID uniqueidentifier

  exec dbo.USP_CURRENCY_GETCURRENCYvalues @AMOUNT, @CURRENTDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;

    --declare @REVENUEOFFLINEDONATIONID uniqueidentifier  


    --select @EVENTID= R.EVENTID from REGISTRANT R JOIN EVENTEXTENSION EX ON R.EVENTID= EX.EVENTID where R.ID= @REGISTRANTID

    --select @CLIENTUSERSID= CLIENTUSERSID from ADDRESSBOOKFAF where ID=  @ADDRESSBOOKFAFID

    --select @REVENUEOFFLINEDONATIONID= NewID()    


  Select @APPEALID= APPEALID from EVENT where ID= @EVENTID    

    -- Need to handle NSA preferred corps processing by zipcode or registrant 


    -- select @DESIGNATIONID = DESIGNATIONID from APPEALDESIGNATION where APPEALID = @APPEALID   

    DECLARE @LOCALCORPCOUNT INT
    DECLARE @ZIPCODE nvarchar(5)

    SET @LOCALCORPCOUNT = (SELECT COUNT(*) FROM LOCALCORP) 
  -- SHL BBIS Bug 319197; If the offline gift is not specifying a local corp when it is an option (as indicated by 'preferredcorp') 

  -- then it gets the same designation as as a normal online donation (the event's designation)


  -- UPDATE: BBIS Bug 399926; Handled 'preferredcorp' condition in 'else if' block. 

    IF @LOCALCORPCOUNT > 0 AND @LOCALCORPNAME <> 'none' AND @LOCALCORPNAME <> 'preferredcorp'
    BEGIN
            IF len(@LOCALCORPZIP) > 5
                SET @ZIPCODE = substring(@LOCALCORPZIP, 1, 5);
            ELSE
                SET @ZIPCODE = @LOCALCORPZIP;

            SET @DESIGNATIONID = 
            ( 
                SELECT  TOP 1 B.DESIGNATIONID
                FROM dbo.LOCALCORP L(NOLOCK)
                JOIN dbo.BBNCDESIGNATIONIDMAP B(NOLOCK) ON (B.DESIGNATIONID = L.DESIGNATIONID)
                JOIN dbo.ClientMerchantAccounts M(NOLOCK) ON (M.Name = L.MERCHANTACCT)
                WHERE L.ZIPCODE = @ZIPCODE and L.ISACTIVE=1
            )        

      -- SET DESIGNATIONID IF IT IS NOT FOUND.

        IF @DESIGNATIONID IS null 
              SET @DESIGNATIONID = ( SELECT DESIGNATIONID FROM LOCALCORP WHERE ISNULL(LOCALCORP,'') = '' AND ISNULL(TERRITORYABBREV,'') = '' AND
                ISNULL( DIVISIONABBREV , '') = '')
    END
  ELSE IF @LOCALCORPNAME = 'preferredcorp'
    BEGIN
        SET @DESIGNATIONID = 
        (
        SELECT  TOP 1  B.DESIGNATIONID
           FROM dbo.LOCALCORP L(NOLOCK)
           JOIN dbo.BBNCDESIGNATIONIDMAP B(nolock) on (B.DESIGNATIONID = L.DESIGNATIONID)
           JOIN dbo.ClientMerchantAccounts M(nolock) on (M.Name = L.MERCHANTACCT)
           JOIN dbo.REGISTRANTEXTENSION R(nolock) on (R.LOCALCORPID = L.ID)
           WHERE R.REGISTRANTID = @REGISTRANTID and L.ISACTIVE=1
         )

     -- SET DESIGNATIONID IF IT IS NOT FOUND.

        IF @DESIGNATIONID IS null 
              SET @DESIGNATIONID = ( SELECT DESIGNATIONID FROM LOCALCORP WHERE ISNULL(LOCALCORP,'') = '' AND ISNULL(TERRITORYABBREV,'') = '' AND
                ISNULL( DIVISIONABBREV , '') = '')
    END

        IF @DESIGNATIONID IS null     
            SET @DESIGNATIONID = ( SELECT DESIGNATIONID FROM APPEALDESIGNATION where APPEALID = @APPEALID and ISDEFAULT = 1


--4...Create Offline Donation 

if not exists (select ID from REVENUE R where R.ID= @ID)
begin    
  declare @PDACCOUNTSYSTEMID uniqueidentifier = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B',
          @INSTALLMENTID uniqueidentifier;
  set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

  /*insert into dbo.REVENUE 
        (ID, CONSTITUENTID, DATE, DOnotPOST, POSTDATE, DOnotRECEIPT, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, MAILINGID, APPEALID, SOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)  
    values                        
        (@ID, @CONSTID, @CURRENTDATE, 1, @CURRENTDATE, 1, @AMOUNT, 9, 0, NULL, @APPEALID, '', @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
  */
  insert into dbo.FINANCIALTRANSACTION
    (ID, CONSTITUENTID, DATE, POSTDATE, POSTSTATUSCODE, TRANSACTIONAMOUNT, TYPECODE, TRANSACTIONCURRENCYID, BASEAMOUNT, ORGAMOUNT, PDACCOUNTSYSTEMID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED) 
  values
   (@ID, @CONSTID, @CURRENTDATE, @CURRENTDATE, 3,  @AMOUNT, 9, @ORGANIZATIONCURRENCYID, @AMOUNT, @AMOUNT, @PDACCOUNTSYSTEMID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

  insert into dbo.REVENUE_EXT
    (ID, DONOTRECEIPT, RECEIPTAMOUNT, APPEALID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
  values
   (@ID, 1, 0, @APPEALID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

    --Add origination source  

    exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTID, @CHANGEAGENTID, @CURRENTDATE

    insert into dbo.REVENUEPAYMENTMETHOD 
        (REVENUEID, AMOUNT, PAYMENTMETHODCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)  
    values 
        (@ID, @AMOUNT, @PAYMENTTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE ,@CURRENTDATE)  ;

    insert into dbo.REVENUEOFFLINEDONATION
    --Dave added back the paymenttypecode as it is required by the table

        (ID, CLIENTUSERSID, EVENTID, REGISTRANTID, ADDRESSBOOKFAFID, DONORNAME, CHECKNUMBER, EXPECTEDDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, PAYMENTTYPECODE, LOCALCORPNAME)               --AMOUNTCONFIRMED, GifTID,

    values
        (@ID, @CLIENTUSERSID, @EVENTID, @REGISTRANTID, @ADDRESSBOOKFAFID, @DONORNAME, @CHECKNUMBER, @EXPECTEDDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @PAYMENTTYPECODE, @LOCALCORPNAME); --@AMOUNTCONFIRMED, @GifTID, @LOCALCORPNAME


    set @REVENUESPLITID = NewID()

  select @STARTDATE = [DATE] from dbo.REVENUE where ID = @ID

    insert into dbo.REVENUESCHEDULE 
        (ID, STARTDATE, FREQUENCYCODE, NUMBEROFINSTALLMENTS, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    values 
        (@ID, @STARTDATE, 5, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

   set @INSTALLMENTID = newid();
   insert into dbo.INSTALLMENT 
    (ID, REVENUEID, AMOUNT, DATE, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID)
     values 
    (@INSTALLMENTID, @ID, @AMOUNT, @CURRENTDATE, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);

  insert into dbo.FINANCIALTRANSACTIONLINEITEM
  (ID, FINANCIALTRANSACTIONID, TRANSACTIONAMOUNT, BASEAMOUNT, ORGAMOUNT, POSTDATE, POSTSTATUSCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
  values
  (@REVENUESPLITID, @ID, @AMOUNT, @AMOUNT, @AMOUNT, @CURRENTDATE, 3, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

  insert into dbo.REVENUESPLIT_EXT
  (ID, DESIGNATIONID, TYPECODE, APPLICATIONCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
  values
  (@REVENUESPLITID, @DESIGNATIONID, 0, 0, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

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

  insert into dbo.INSTALLMENTSPLIT( INSTALLMENTID, PLEDGEID, DESIGNATIONID, AMOUNT,
                            ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASECURRENCYID, ORGANIZATIONAMOUNT,
                            ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID)
    select @INSTALLMENTID, @ID, @DESIGNATIONID, @AMOUNT,
                 @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @BASECURRENCYID, FTLI.ORGAMOUNT,
                            FT.ORGEXCHANGERATEID, @AMOUNT, FT.TRANSACTIONCURRENCYID,
                            FT.BASEEXCHANGERATEID
   from dbo.FINANCIALTRANSACTION FT
   left join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FT.ID = FTLI.FINANCIALTRANSACTIONID
   where FT.ID = @ID

  select @REGCONSTITUENTID= CONSTITUENTID from dbo.REGISTRANT where ID=@REGISTRANTID

  insert into REVENUERECOGNITION 
      (ID, REVENUESPLITID, CONSTITUENTID, AMOUNT, EFFECTIVEDATE, REVENUERECOGNITIONTYPECODEID, ORGANIZATIONAMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
  values                        
    (NewID(), @REVENUESPLITID, @REGCONSTITUENTID, @AMOUNT, @CURRENTDATE, NULL, @AMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)

  -- link site to constituent

  Exec dbo.USP_ADDSITETOCONSTITUENT @CONSTID, @EVENTID

end

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0