USP_PLEDGEWRITEOFFPROCESS_ADDWRITEOFF

Adds a write off for the global pledge writeoff process.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@PLEDGEID uniqueidentifier IN
@DATE datetime IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@REASON nvarchar(300) IN
@REASONCODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@ADDWRITEOFF bit IN
@INSTALLMENTID uniqueidentifier IN
@WRITEOFFAMOUNT money IN

Definition

Copy


      CREATE procedure dbo.USP_PLEDGEWRITEOFFPROCESS_ADDWRITEOFF
      (
        @ID uniqueidentifier,
        @PLEDGEID uniqueidentifier,
        @DATE datetime,
        @POSTDATE datetime,
        @POSTSTATUSCODE tinyint,
        @REASON nvarchar(300),
        @REASONCODEID uniqueidentifier,
        @CHANGEAGENTID uniqueidentifier,
        @CURRENTDATE datetime,
        @ADDWRITEOFF bit,
        @INSTALLMENTID uniqueidentifier,
        @WRITEOFFAMOUNT money
      )
      as
      begin
              set nocount on;

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

        if @CURRENTDATE is null
          set @CURRENTDATE = GetDate();

        declare @ERRORMESSAGE nvarchar(max);
        set @ERRORMESSAGE = '';

          -- Check GL business rule for this account system and set to 'Do not post' if needed.

          declare @PDACCOUNTSYSTEMID uniqueidentifier;
          select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @PLEDGEID;
          if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
          begin
            set @POSTSTATUSCODE = 2  -- Do not post

            set @POSTDATE = null
          end

        begin transaction;      

          if @ADDWRITEOFF = 1
        begin
          if @POSTSTATUSCODE = 1
                insert into dbo.WRITEOFF(ID,REVENUEID,DATE,POSTDATE,POSTSTATUSCODE,REASON,REASONCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                  values (@ID,@PLEDGEID,@DATE,@POSTDATE,@POSTSTATUSCODE,@REASON,@REASONCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
          else
                insert into dbo.WRITEOFF(ID,REVENUEID,DATE,POSTSTATUSCODE,REASON,REASONCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                  values (@ID,@PLEDGEID,@DATE,@POSTSTATUSCODE,@REASON,@REASONCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
        end

            exec dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTSPLITS @PLEDGEID,@INSTALLMENTID,@ID,@WRITEOFFAMOUNT,@CHANGEAGENTID,@CURRENTDATE;


        exec dbo.USP_WRITEOFF_FIXSPLITS @ID,@PLEDGEID,@CHANGEAGENTID,@CURRENTDATE

        declare @WRITEOFFTRANSACTIONAMOUNT money;
        declare @WRITEOFFBASEAMOUNT  money;
        declare @WRITEOFFORGAMOUNT money;

        select  
            @WRITEOFFTRANSACTIONAMOUNT = sum(T2.TRANSACTIONAMOUNT),
            @WRITEOFFBASEAMOUNT = sum(T2.BASEAMOUNT),
            @WRITEOFFORGAMOUNT = sum(T2.ORGAMOUNT)
        from dbo.FINANCIALTRANSACTION T1 
            inner join  dbo.FINANCIALTRANSACTIONLINEITEM T2 on T1.ID = T2.FINANCIALTRANSACTIONID 
            where T1.TYPECODE = 20 and T1.ID = @ID

        update     dbo.FINANCIALTRANSACTION 
            set TRANSACTIONAMOUNT = isnull(@WRITEOFFTRANSACTIONAMOUNT,0),    
                BASEAMOUNT = isnull(@WRITEOFFBASEAMOUNT,0),        
                ORGAMOUNT = isnull(@WRITEOFFORGAMOUNT,0)    
            where ID = @ID    

        --Bug 164325 We're comparing the current sequence to the max sequence to determine if this is the final installment for a pledge. If it is then we can safely write 

        -- the GL and it will be for the correct amount.

        declare @MAXSEQUENCE int  = (select max(SEQUENCE) from dbo.INSTALLMENT where REVENUEID=@PLEDGEID);
        declare @CURRENTSEQUENCE int = (select SEQUENCE from dbo.INSTALLMENT where ID=@INSTALLMENTID);

        if @CURRENTSEQUENCE = @MAXSEQUENCE
        begin
          --Save the write-off GL distributions

          if @POSTSTATUSCODE <> 2 and dbo.UFN_VALID_BASICGL_INSTALLED() = 1 
          begin
            -- Using a table to support redistributing across multiple write-offs, e.g. editing a pledge designation

            declare @WRITEOFFIDTABLE UDT_GENERICID;
            insert into @WRITEOFFIDTABLE values (@ID);
            --Write-off for pledge, use try/catch to grab the error

            begin try
              exec dbo.USP_SAVE_PLEDGEWRITEOFFGLDISTRIBUTION @PLEDGEID, @WRITEOFFIDTABLE, @CHANGEAGENTID, @CURRENTDATE
            end try
            begin catch
              set @ERRORMESSAGE = ERROR_MESSAGE();
            end catch
          end
          else if @POSTSTATUSCODE <> 2
            exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION_PROCESS @PLEDGEID, @CHANGEAGENTID, @CURRENTDATE, @ERRORMESSAGE output;
        end

        if @ERRORMESSAGE <> ''
        begin
          rollback transaction;
         raiserror('%s', 13, 1, @ERRORMESSAGE);
          return 1;
        end

        commit transaction;
              return 0;
      end