USP_DATAFORMTEMPLATE_EDIT_PLEDGEWRITEOFF2

The save procedure used by the edit dataform template "Pledge Write-off Edit Form 2".

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
@WRITEOFFTOTALAMOUNT money IN Amount
@POSTSTATUSCODE tinyint IN GL post status
@POSTDATE datetime IN GL post date
@REASON nvarchar(300) IN Details
@INSTALLMENTS xml IN
@REASONCODEID uniqueidentifier IN Reason code

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PLEDGEWRITEOFF2
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @DATE datetime,
                        @WRITEOFFTOTALAMOUNT money,
                        @POSTSTATUSCODE tinyint,
                        @POSTDATE datetime,
                        @REASON nvarchar(300),
                        @INSTALLMENTS xml,
                        @REASONCODEID uniqueidentifier
                    )
                    as
                    begin

                        set nocount on;

                        if exists (select 1 from dbo.FINANCIALTRANSACTION where ID = @ID and POSTSTATUSCODE = 2)
                            return

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

                        -- ****

                        declare @PDACCOUNTSYSTEMID uniqueidentifier;
                        select @PDACCOUNTSYSTEMID = FINANCIALTRANSACTION.PDACCOUNTSYSTEMID 
                        from dbo.FINANCIALTRANSACTION
                        where ID = @ID;

                        declare @ALLOWGLDISTRIBUTIONS bit;
                        set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
                        if @ALLOWGLDISTRIBUTIONS = 0 
                            begin
                                set @POSTSTATUSCODE = 2        -- Do not post

                                set @POSTDATE = null
                            end
                        -- ****                                        


                        declare @CURRENTDATE datetime;                        
                        declare @PLEDGEID uniqueidentifier;
                        declare @OLDAMOUNT money;
                        declare @OLDREASONCODE uniqueidentifier;
                        declare @CLEARGLDISTRIBUTION bit;

                        set @CLEARGLDISTRIBUTION = 0;

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

                            if @WRITEOFFTOTALAMOUNT < 0
                                    raiserror('BBERR_WRITEOFF_VALIDAMOUNT', 13, 1);
                            set @CURRENTDATE = getdate();

                            select @PLEDGEID = REVENUEID from dbo.WRITEOFF where ID = @ID;
                            select @OLDAMOUNT = sum(TRANSACTIONAMOUNT) from dbo.INSTALLMENTWRITEOFF where WRITEOFFID = @ID;
                            select @OLDREASONCODE = REASONCODEID from dbo.WRITEOFF_EXT where ID = @ID;


                            if not exists (select 1 from dbo.WRITEOFF where ID = @ID and POSTSTATUSCODE = @POSTSTATUSCODE and POSTDATE = @POSTDATE)
                                or @OLDAMOUNT <> @WRITEOFFTOTALAMOUNT or @OLDREASONCODE <> @REASONCODEID
                            begin
                                set @CLEARGLDISTRIBUTION = 1;
                            end

                            update
                                dbo.WRITEOFF
                            set
                                DATE = @DATE,
                                POSTSTATUSCODE = @POSTSTATUSCODE,
                                POSTDATE = @POSTDATE,
                                REASON = @REASON,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE,
                                REASONCODEID = @REASONCODEID
                            where
                                ID = @ID;

                            exec dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTS @ID,@WRITEOFFTOTALAMOUNT,@CHANGEAGENTID,@CURRENTDATE,1,@INSTALLMENTS;
                            exec dbo.USP_WRITEOFF_FIXSPLITS @ID, @PLEDGEID, @CHANGEAGENTID,@CURRENTDATE;

                            if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONID = @ID and POSTSTATUSCODE = 1 and DELETEDON is null)
                                set @CLEARGLDISTRIBUTION = 1

                            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                            



                            -- if any GL-related write-off fields have changed, clear any user-defined gl distributions for this record

                            if @CLEARGLDISTRIBUTION = 1
                            begin

                                --Clear GL

                                --Cache CONTEXT INFO

                                declare @contextCache varbinary(128);
                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                delete from dbo.WRITEOFFGLDISTRIBUTION where WRITEOFFID = @ID and OUTDATED = 0;    

                                declare @TRANSACTIONTYPECODE int = (select FINANCIALTRANSACTION.TYPECODE from dbo.FINANCIALTRANSACTION where ID = @PLEDGEID)
                                --Save the write-off GL distributions

                                if @POSTSTATUSCODE <> 2 and @TRANSACTIONTYPECODE in (1,15) 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 

                                    exec dbo.USP_SAVE_PLEDGEWRITEOFFGLDISTRIBUTION @PLEDGEID, @WRITEOFFIDTABLE, @CHANGEAGENTID, @CURRENTDATE
                                end
                                else if @POSTSTATUSCODE <> 2
                                    exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @PLEDGEID, @CHANGEAGENTID, @CURRENTDATE;

                                    --Restore CONTEXT_INFO

                                    if not @contextCache is null
                                        set CONTEXT_INFO @contextCache;
                            end

                            update LI set
                                POSTDATE = @POSTDATE
                                ,POSTSTATUSCODE = case @POSTSTATUSCODE when 0 then 2 when 1 then 1 when 2 then 3 end
                                ,CHANGEDBYID = @CHANGEAGENTID
                                ,DATECHANGED = @CURRENTDATE
                            from dbo.FINANCIALTRANSACTIONLINEITEM LI
                            where LI.FINANCIALTRANSACTIONID = @ID and LI.POSTSTATUSCODE != 2 and LI.DELETEDON is null;

                            -- Redefault installment receipt amounts

                            exec dbo.USP_INSTALLMENTS_DEFAULTRECEIPTAMOUNTS @PLEDGEID, @CHANGEAGENTID
                        end try

                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch

                        return 0;
                    end