UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS

Checks that the amount of the credits is equal to the amount of the debits for a GL distribution.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@DISTRIBUTION xml IN

Definition

Copy


            create function dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS
            (            
                @DISTRIBUTION xml
            )
            returns bit    
            with execute as caller
            as
            begin

                declare @ISVALID bit;
                declare @DEBITAMOUNT as money;
                declare @CREDITAMOUNT as money;
                declare @TOTALDEBITAMOUNT as money;
                declare @TOTALCREDITAMOUNT as money;
                declare @MAPDESCRIPTION nvarchar(100);

                set @TOTALDEBITAMOUNT = 0;
                set @TOTALCREDITAMOUNT = 0;
                set @DEBITAMOUNT = 0;
                set @CREDITAMOUNT = 0;

                declare DISTRIBUTION_CURSOR cursor local fast_forward for
                    select distinct 
                        GLPAYMENTMETHODREVENUETYPEMAPPING.DESCRIPTION
                    from 
                        dbo.UFN_REVENUE_GETGLDISTRIBUTION_FROMITEMLISTXML(@DISTRIBUTION) tf
                    inner join 
                        dbo.GLPAYMENTMETHODREVENUETYPEMAPPING on tf.GLPAYMENTMETHODREVENUETYPEMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPING.ID;

                open DISTRIBUTION_CURSOR;
                fetch next from DISTRIBUTION_CURSOR into @MAPDESCRIPTION;

                while (@@FETCH_STATUS = 0)
                begin 
                    select 
                        @DEBITAMOUNT = sum(AMOUNT)
                    from 
                        dbo.UFN_REVENUE_GETGLDISTRIBUTION_FROMITEMLISTXML(@DISTRIBUTION) tf 
                    inner join 
                        dbo.GLPAYMENTMETHODREVENUETYPEMAPPING on tf.GLPAYMENTMETHODREVENUETYPEMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPING.ID
                    where 
                        tf.TRANSACTIONTYPECODE = 0 
                        and GLPAYMENTMETHODREVENUETYPEMAPPING.DESCRIPTION = @MAPDESCRIPTION;

                    select 
                        @CREDITAMOUNT = sum(AMOUNT)
                    from 
                        dbo.UFN_REVENUE_GETGLDISTRIBUTION_FROMITEMLISTXML(@DISTRIBUTION) tf 
                    inner join 
                        dbo.GLPAYMENTMETHODREVENUETYPEMAPPING on tf.GLPAYMENTMETHODREVENUETYPEMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPING.ID
                    where 
                        tf.TRANSACTIONTYPECODE = 1 
                        and GLPAYMENTMETHODREVENUETYPEMAPPING.DESCRIPTION = @MAPDESCRIPTION;            

                    if @DEBITAMOUNT is not null and @CREDITAMOUNT is not null
                    begin
                        if (@DEBITAMOUNT <> @CREDITAMOUNT)
                        begin
                            close DISTRIBUTION_CURSOR;
                            deallocate DISTRIBUTION_CURSOR;

                            return 0;
                        end                
                    end

                    set @TOTALDEBITAMOUNT = @TOTALDEBITAMOUNT + coalesce(@DEBITAMOUNT, 0);
                    set @TOTALCREDITAMOUNT = @TOTALCREDITAMOUNT + coalesce(@CREDITAMOUNT, 0);

                    fetch next from DISTRIBUTION_CURSOR into @MAPDESCRIPTION;
                end

                close DISTRIBUTION_CURSOR;
                deallocate DISTRIBUTION_CURSOR;

                if @TOTALDEBITAMOUNT <> @TOTALCREDITAMOUNT
                    return 0;

                return 1;
            end