USP_REVENUEBATCH_VALIDATERECOGNITIONS

Validate recognitions on a revenue batch row.

Parameters

Parameter Parameter Type Mode Description
@RECOGNITIONS xml IN
@BATCHROWID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUEBATCH_VALIDATERECOGNITIONS
            (
                @RECOGNITIONS xml,
                @BATCHROWID uniqueidentifier = null
            )
            as
            set nocount on;

            if not @RECOGNITIONS is null
            begin
                declare @REC table
                (
                    ID uniqueidentifier,
                    CONSTITUENTID uniqueidentifier,
                    AMOUNT money,
                    EFFECTIVEDATE datetime,
                    REVENUERECOGNITIONTYPECODEID uniqueidentifier
                );

                insert into @REC(ID, CONSTITUENTID, AMOUNT, EFFECTIVEDATE, REVENUERECOGNITIONTYPECODEID)
                    select
                        T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                        T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') AS 'CONSTITUENTID',
                        T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
                        T.c.value('(EFFECTIVEDATE)[1]','datetime') AS 'EFFECTIVEDATE',
                        T.c.value('(REVENUERECOGNITIONTYPECODEID)[1]','uniqueidentifier') AS 'REVENUERECOGNITIONTYPECODEID'
                    from @RECOGNITIONS.nodes('/RECOGNITIONS/ITEM') T(c);

                declare REC_CURSOR cursor local fast_forward for
                    select CONSTITUENTID, AMOUNT, EFFECTIVEDATE, REVENUERECOGNITIONTYPECODEID from @REC;

                open REC_CURSOR;

                declare @CONSTITUENTID uniqueidentifier;
                declare @AMOUNT money;
                declare @EFFECTIVEDATE datetime;
                declare @REVENUERECOGNITIONTYPECODEID uniqueidentifier;

                fetch next from REC_CURSOR into @CONSTITUENTID, @AMOUNT, @EFFECTIVEDATE, @REVENUERECOGNITIONTYPECODEID;
                while @@FETCH_STATUS = 0
                begin
                    --Validate the constituent if it's going to be created

                    if not exists(select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID)
                        exec dbo.USP_REVENUEBATCH_VALIDATENEWCONSTITUENT @REVENUEBATCHCONSTITUENTID = @CONSTITUENTID, @ISDONOR = 0, @BATCHROWID = @BATCHROWID;

          --Validate that the amount is non-negative

          if @AMOUNT < 0
            raiserror('BBERR_RECOGNITIONNEGATIVE',13,1)

                    fetch next from REC_CURSOR into @CONSTITUENTID, @AMOUNT, @EFFECTIVEDATE, @REVENUERECOGNITIONTYPECODEID;    
                end

                --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                close REC_CURSOR;
                deallocate REC_CURSOR;
            end