USP_DATAFORMTEMPLATE_EDIT_REVENUEOFFLINEDONATION_2

The save procedure used by the edit dataform template "Revenue Offline Donation 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.
@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
@LOCALCORPNAME nvarchar(20) IN Local corp
@LOCALCORPZIP nvarchar(20) IN Local corp zip
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEOFFLINEDONATION_2 (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,

    @REGISTRANTID uniqueidentifier,
    @ADDRESSBOOKFAFID uniqueidentifier,
    @DONORNAME nvarchar(255),
    @AMOUNT money,     
    @PAYMENTTYPECODE tinyint,
    @CHECKNUMBER nvarchar(20),
    @EXPECTEDDATE datetime
   ,@LOCALCORPNAME nvarchar(20) --    = 'none' -- 'none', 1= 'preferredcorp',  2 = 'zipcode'
   ,@LOCALCORPZIP nvarchar(20)  -- = ''
   ,@CURRENTAPPUSERID uniqueidentifier = null     
 --,@AMOUNTCONFIRMED money 
 --,@GIFTID    int  
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

  declare @ISGIFTCONFIRMED bit = 0
  select  @ISGIFTCONFIRMED = case when PLEDGEID is not null then 1 else 0 end 
  from dbo.INSTALLMENTSPLITPAYMENT  
  where PLEDGEID= @ID

  if @ISGIFTCONFIRMED = 1
  begin
        raiserror('The donation has been confirmed by the event administrator and cannot be edited.',13,1);
      return 1;
    end

    BEGIN TRY

    -- insert new donor into all members' of the household address 
    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, @TITLECODEID uniqueidentifier, @CONSTID uniqueidentifier;
    declare @CURRENTCONSTITUENTID uniqueidentifier, @EVENTID uniqueidentifier;

    -- if change the donor, insert the new donor into all members' of the household address 
    IF NOT EXISTS (SELECT * FROM dbo.REVENUEOFFLINEDONATION  WHERE ID=@ID AND ADDRESSBOOKFAFID=@ADDRESSBOOKFAFID)
      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, @CONSTID=CONSTITUENTID
          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;

        select @CURRENTCONSTITUENTID=CONSTITUENTID from dbo.REGISTRANT where id=@REGISTRANTID;
        select @EVENTID=EVENTID from REVENUEOFFLINEDONATION where ID=@ID
        if @CURRENTCONSTITUENTID is not null and @EVENTID is not null
        begin
          create table #TEMP_HOUSEHOLD_PEOPLE
            (        
                CLIENTUSERSID int
            );
          insert into #TEMP_HOUSEHOLD_PEOPLE (CLIENTUSERSID)
          select dbo.ufn_CLIENTUSERID_GET_BY_CONSTITUENT(C.ID)
          from dbo.TEAMFUNDRAISINGTEAMMEMBER TM  
             INNER JOIN dbo.UFN_FAF_GETTEAMINFO_BY_REGISTRANT(@CURRENTCONSTITUENTID, @EVENTID) FNTEAM  
                ON TM.TEAMFUNDRAISINGTEAMID = FNTEAM.TEAMID  
                AND FNTEAM.TEAMTYPECODE = 3 --household  
             INNER JOIN dbo.TEAMFUNDRAISER TF  
                ON TM.TEAMFUNDRAISERID = TF.ID  
             INNER JOIN dbo.CONSTITUENT C  
                ON TF.CONSTITUENTID = C.ID 
             where C.ID<>@CURRENTCONSTITUENTID
          if exists(select * from #TEMP_HOUSEHOLD_PEOPLE)
          begin
            insert into dbo.ADDRESSBOOKFAF 
              (
                  ID,
                  CLIENTUSERSID,
                  CONSTITUENTID,
                  FIRSTNAME,
                  LASTNAME,
                  MIDDLENAME,
                  TITLECODEID,
                  EMAILADDRESS,
                  HOMEPHONE,
                  ADDRESSBLOCK,
                  CITY,
                  STATEID,
                  COUNTRYID,
                  POSTCODE,
                  ADDEDBYID,
                  CHANGEDBYID,
                  DATEADDED,
                  DATECHANGED
              )
            select newid(),
              THP.CLIENTUSERSID,
              @CONSTID,
              @FNAME,
              @LASTNAME,
              @MIDDLENAME,
              @TITLECODEID,
              @EMAILADDRESS,
              @HOMEPHONE,
              @ADDRESSBLOCK,
              @CITY,
              @STATEID,
              @COUNTRYID,
              @POSTCODE,
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              getdate(),
              getdate()
            FROM #TEMP_HOUSEHOLD_PEOPLE THP(nolock)  
            WHERE
              THP.CLIENTUSERSID NOT IN
              (
                SELECT TP.CLIENTUSERSID
                FROM #TEMP_HOUSEHOLD_PEOPLE TP(nolock) 
                inner join ADDRESSBOOKFAF AB(nolock) on AB.CLIENTUSERSID = TP.CLIENTUSERSID  
                and AB.CONSTITUENTID = @CONSTID
              )
          end
        end
      END



 --...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    

      --...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    
--------------------------------------------------------------------------------------------      
        -- handle updating the data
        UPDATE dbo.REVENUEOFFLINEDONATION 
        SET
            REGISTRANTID =        ISNULL(@REGISTRANTID, REGISTRANTID), 
            ADDRESSBOOKFAFID =    ISNULL(@ADDRESSBOOKFAFID, ADDRESSBOOKFAFID), 
            DONORNAME =            ISNULL(@DONORNAME, DONORNAME), 
            CHECKNUMBER =        ISNULL(@CHECKNUMBER, CHECKNUMBER), 
            EXPECTEDDATE = (case when @EXPECTEDDATE IS null then EXPECTEDDATE when @EXPECTEDDATE = CAST('1900-01-01' AS DATETIME) then null else GETDATE() end), 

         --,AMOUNTCONFIRMED =        ISNULL(@AMOUNTCONFIRMED, AMOUNTCONFIRMED)
         --,GIFTID =        ISNULL(@GIFTID, GIFTID),

            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE,
            LOCALCORPNAME = @LOCALCORPNAME
        WHERE ID = @ID

    IF EXISTS (SELECT * FROM dbo.FINANCIALTRANSACTION WHERE ID= @ID)
    UPDATE dbo.FINANCIALTRANSACTION              
      SET TRANSACTIONAMOUNT= ISNULL(@AMOUNT, TRANSACTIONAMOUNT) , 
          BASEAMOUNT = ISNULL(@AMOUNT, BASEAMOUNT),
          ORGAMOUNT = ISNULL(@AMOUNT, ORGAMOUNT),
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE,
      CONSTITUENTID = @CONSTID   
    WHERE ID= @ID

    declare @HASORIGINROW bit = 0;  
    select @HASORIGINROW = 1
    from dbo.CONSTITUENTORIGINATION  
    where ID = @CONSTID   
    if @HASORIGINROW = 0  
    begin  
     update dbo.CONSTITUENTORIGINATION  
     set  ID = @CONSTID      
    where REVENUEID = @ID  AND ID <> @CONSTID 
    end    

      -- link site to constituent  
    Exec dbo.USP_ADDSITETOCONSTITUENT @CONSTID, @EVENTID  

    IF EXISTS (SELECT * FROM dbo.REVENUEPAYMENTMETHOD WHERE REVENUEID= @ID
    UPDATE dbo.REVENUEPAYMENTMETHOD 
      SET AMOUNT= ISNULL(@AMOUNT, AMOUNT), PAYMENTMETHODCODE= ISNULL(@PAYMENTTYPECODE, PAYMENTMETHODCODE),      
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
    WHERE REVENUEID= @ID

    IF EXISTS (SELECT * FROM dbo.INSTALLMENT WHERE REVENUEID= @ID
    UPDATE dbo.INSTALLMENT 
      SET AMOUNT= ISNULL(@AMOUNT, AMOUNT) ,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
    WHERE REVENUEID= @ID

    UPDATE dbo.INSTALLMENTSPLIT
    SET 
      AMOUNT = @AMOUNT,
      TRANSACTIONAMOUNT = @AMOUNT,
      ORGANIZATIONAMOUNT = @AMOUNT,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
    WHERE 
      PLEDGEID = @ID

    UPDATE dbo.FINANCIALTRANSACTIONLINEITEM
    SET 
      TRANSACTIONAMOUNT= ISNULL(@AMOUNT, TRANSACTIONAMOUNT) , 
      BASEAMOUNT = ISNULL(@AMOUNT, BASEAMOUNT),
      ORGAMOUNT = ISNULL(@AMOUNT, ORGAMOUNT),
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
    where
      FINANCIALTRANSACTIONID = @ID


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

    -- select @DESIGNATIONID = DESIGNATIONID from APPEALDESIGNATION where APPEALID = @APPEALID   
    -- select @DESIGNATIONID = SELECT DESIGNATIONID FROM REVENUESPLIT WHERE REVENUEID = @ID
    DECLARE @LOCALCORPCOUNT INT
    DECLARE @ZIPCODE nvarchar(5)
    DECLARE  @DESIGNATIONID uniqueidentifier
    DECLARE @APPEALID uniqueidentifier

    SET @APPEALID= ( SELECT APPEALID from EVENT where ID= @EVENTID    )
    SET @LOCALCORPCOUNT = (SELECT COUNT(*) FROM LOCALCORP) 
    IF @LOCALCORPCOUNT > 0 AND @LOCALCORPNAME <> 'none' 
    BEGIN

        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
                  )
        END
        ELSE IF @LOCALCORPNAME = 'zipcode'
        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
            )        
        END

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


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

        IF @DESIGNATIONID IS null     
            SET @DESIGNATIONID = ( SELECT DESIGNATIONID FROM APPEALDESIGNATION where APPEALID = @APPEALID and ISDEFAULT = 1 )  
    END    
    ELSE
    BEGIN
        SET @DESIGNATIONID = (SELECT DESIGNATIONID FROM REVENUESPLIT WHERE REVENUEID = @ID   )
    END

/* --obsolete
    IF EXISTS (SELECT * FROM dbo.REVENUESPLIT WHERE REVENUEID= @ID)     
    UPDATE dbo.REVENUESPLIT 
      SET AMOUNT= ISNULL(@AMOUNT, AMOUNT) ,      
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE,
            DESIGNATIONID = ISNULL(@DESIGNATIONID, DESIGNATIONID)
    WHERE REVENUEID= @ID
 */

--  IF EXISTS (SELECT * FROM dbo.REVENUESPLIT WHERE REVENUEID= @ID)   
    UPDATE REVENUESPLIT_EXT 
        SET DESIGNATIONID = ISNULL(@DESIGNATIONID, RSXT.DESIGNATIONID)
    FROM REVENUESPLIT RS 
    JOIN REVENUESPLIT_EXT RSXT ON RS.ID = RSXT.ID
    WHERE RS.REVENUEID= @ID 


    IF EXISTS (SELECT * FROM dbo.REVENUERECOGNITION WHERE ID= @ID)     
    UPDATE dbo.REVENUERECOGNITION 
      SET AMOUNT= ISNULL(@AMOUNT, AMOUNT) ,      
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
    WHERE ID= @ID

    END TRY

    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

return 0;