USP_DATAFORMTEMPLATE_EDIT_GIFTFEEGLDISTRIBUTION

The save procedure used by the edit dataform template "Gift Fee GL Distribution Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@GLDISTRIBUTION xml IN Gift fee GL distribution
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.

Definition

Copy

                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_GIFTFEEGLDISTRIBUTION
                    (
                        @ID uniqueidentifier,
                        @GLDISTRIBUTION xml,
                        @CHANGEAGENTID uniqueidentifier = null
                    )
                as
                    set nocount on;

                    begin try
                        -- GLPAYMENTMETHODREVENUETYPEMAPPINGID is required on GIFTFEEGLDISTRIBUTION but only appears in the UI if LegacyGL is unlocked.  
                        -- Gift Fee GL specs are only available for BasicGL so, for new distribution rows, following the example of 
                        -- BenefitGLDistribution.Edit.xml when LegacyGL is locked of defaulting GLPAYMENTMETHODREVENUETYPEMAPPINGID 
                        -- to the first debit GLPAYMENTMETHODREVENUETYPEMAPPINGID found for the revenue
                        -- (this occurs in that specs UIModel class)
                        declare @DEFAULTMAPPINGID uniqueidentifier
                        select top 1 @DEFAULTMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPINGID
                        from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION(@ID)

                        set @GLDISTRIBUTION = (    select
                                                    ID, 
                                                    coalesce(GLPAYMENTMETHODREVENUETYPEMAPPINGID, @DEFAULTMAPPINGID) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                                                    TRANSACTIONTYPECODE,
                                                    ACCOUNT, 
                                                    AMOUNT, 
                                                    REFERENCE,
                                                    TRANSACTIONCURRENCYID
                                                from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION)
                                                for xml raw('ITEM'),type,elements,root('GLDISTRIBUTION'),BINARY BASE64)

                        --validate post status
                        if exists (    select 1 from dbo.REVENUEPOSTED where REVENUEPOSTED.ID = @ID)
                            raiserror('BBERR_CANNOTEDITPOSTEDGIFTFEESDISTRIBUTION', 13, 1)

                        if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
                            raiserror('BBERR_SUMOFCREDITSMUSTEQUALSUMOFDEBITS', 13, 1)

                        if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS_2(@GLDISTRIBUTION, @ID) = 0)
                            raiserror('BBERR_ACCOUNTDOESNOTEXIST', 13, 1)

                        declare @DISTRIBUTIONSUM money;
                        select @DISTRIBUTIONSUM = sum(AMOUNT) 
                        from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION
                        where TRANSACTIONTYPECODE = 0;

                        if @DISTRIBUTIONSUM <> coalesce((    select sum(REVENUESPLITGIFTFEE.TRANSACTIONAMOUNT) from dbo.REVENUESPLITGIFTFEE
                                                            inner join dbo.REVENUESPLIT on REVENUESPLITGIFTFEE.ID = REVENUESPLIT.ID
                                                            where
                                                                REVENUESPLIT.REVENUEID = @ID), 0)
                            raiserror('BBERR_DISTRIBUTIONAMOUNTMUSTEQUALGIFTFEESAMOUNT', 13, 1);

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

                        declare @POSTDATE datetime;
                        select @POSTDATE = POSTDATE from dbo.REVENUE where ID = @ID;

                        declare @TRANSACTIONCURRENCYID uniqueidentifier;
                        declare @BASECURRENCYID uniqueidentifier;
                        declare @BASEEXCHANGERATEID uniqueidentifier;
                        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                        declare @DEPOSITBASEEXCHANGERATEID uniqueidentifier;
                        declare @DEPOSITORGANIZATIONEXCHANGERATEID uniqueidentifier;

                        select 
                            @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                            @BASECURRENCYID = REVENUE.BASECURRENCYID,
                            @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
                            @ORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID,
                            @DEPOSITBASEEXCHANGERATEID = case 
                                when isnull(BA.TRANSACTIONCURRENCYID, NEWID()) = REVENUE.TRANSACTIONCURRENCYID then T.BASEEXCHANGERATEID 
                                else REVENUE.BASEEXCHANGERATEID 
                            end,
                            @DEPOSITORGANIZATIONEXCHANGERATEID = case 
                                when isnull(BA.TRANSACTIONCURRENCYID, NEWID()) = REVENUE.TRANSACTIONCURRENCYID then T.ORGANIZATIONEXCHANGERATEID 
                                else REVENUE.ORGANIZATIONEXCHANGERATEID
                            end
                        from
                            dbo.REVENUE
                        left outer join 
                            dbo.BANKACCOUNTDEPOSITPAYMENT DP on DP.ID = REVENUE.ID
                        left outer join 
                            dbo.BANKACCOUNTTRANSACTION T on T.ID = DP.DEPOSITID
                        left outer join 
                            dbo.BANKACCOUNT BA on BA.ID = T.BANKACCOUNTID
                        where
                            REVENUE.ID = @ID;

                        --Set the currency values in the GLDISTRIBUTION collection
                        select @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML
                        (
                            @GLDISTRIBUTION,
                            @BASECURRENCYID,
                            @DEPOSITORGANIZATIONEXCHANGERATEID,
                            @TRANSACTIONCURRENCYID,
                            @DEPOSITBASEEXCHANGERATEID,
                            @ORGANIZATIONEXCHANGERATEID,
                            @BASEEXCHANGERATEID
                        )

                        exec dbo.USP_REVENUE_GETGIFTFEEGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2 @ID, @GLDISTRIBUTION, @POSTDATE, @CHANGEAGENTID;
                    end try

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

                    return 0;