USP_DATAFORMTEMPLATE_ADD_MISCELLANEOUSPAYMENT

The save procedure used by the add dataform template "Miscellaneous Payment Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@PAYMENTSOURCE nvarchar(100) IN Reference
@PAYMENTDATE datetime IN Payment date
@AMOUNT money IN Amount
@POSTDATE datetime IN Post date
@POSTSTATUSCODE tinyint IN Post status
@DEPOSITID uniqueidentifier IN Deposit
@PAYMENTMETHODCODE tinyint IN Payment method
@REFERENCENUMBER nvarchar(20) IN Reference number
@REFERENCEDATE UDT_FUZZYDATE IN Reference date
@CHECKDATE UDT_FUZZYDATE IN Check date
@CHECKNUMBER nvarchar(20) IN Check number
@CARDHOLDERNAME nvarchar(255) IN Name on card
@CREDITCARDNUMBER nvarchar(4) IN Card number
@CREDITTYPECODEID uniqueidentifier IN Card type
@AUTHORIZATIONCODE nvarchar(20) IN Authorization code
@EXPIRESON UDT_FUZZYDATE IN Expires on
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN Other method
@PDACCOUNTSYSTEMID uniqueidentifier IN Account system
@TRANSACTIONCURRENCYID uniqueidentifier IN Transaction currency
@BASEEXCHANGERATEID uniqueidentifier IN Exchange rate ID
@EXCHANGERATE decimal(20, 8) IN Exchange rate
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_MISCELLANEOUSPAYMENT
                    (
                        @ID uniqueidentifier = null output,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @PAYMENTSOURCE nvarchar(100) = '',
                        @PAYMENTDATE datetime,
                        @AMOUNT money,
                        @POSTDATE datetime = null,
                        @POSTSTATUSCODE tinyint = 1,
                        @DEPOSITID uniqueidentifier = null,
                        @PAYMENTMETHODCODE tinyint = null,
                        @REFERENCENUMBER nvarchar(20) = '',
                        @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
                        @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
                        @CHECKNUMBER nvarchar(20) = '',
                        @CARDHOLDERNAME nvarchar(255) = '',
                        @CREDITCARDNUMBER nvarchar(4) = '',
                        @CREDITTYPECODEID uniqueidentifier = null,
                        @AUTHORIZATIONCODE nvarchar(20) = '',
                        @EXPIRESON dbo.UDT_FUZZYDATE = '00000000',
                        @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
                        @PDACCOUNTSYSTEMID uniqueidentifier  = null,
                        @TRANSACTIONCURRENCYID uniqueidentifier = null,
                        @BASEEXCHANGERATEID uniqueidentifier = null,
                        @EXCHANGERATE decimal(20,8) = null,
                        @CURRENTAPPUSERID uniqueidentifier = null            
                    )
                    as

                    set nocount on;

                    if @ID is null
                            set @ID = newid()

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

                    declare @CURRENTDATE datetime = getdate()
                    declare @DEPOSITREFERENCE nvarchar(100);
                    declare @BATRANSACTIONCURRENCYID uniqueidentifier;

                    set @TRANSACTIONCURRENCYID = nullif(@TRANSACTIONCURRENCYID,'00000000-0000-0000-0000-000000000000');

                    -- The deposit post info. overrides the misc. payment info.

                    declare @DEPOSIT_TRANSACTIONCURRENCYID uniqueidentifier
                    if @DEPOSITID is not null
                        begin
                            select
                                @POSTDATE = bat.POSTDATE,
                                @POSTSTATUSCODE = bat.POSTSTATUSCODE,
                                @DEPOSITREFERENCE = bat.REFERENCE,
                                @PDACCOUNTSYSTEMID = ba.PDACCOUNTSYSTEMID,
                                @DEPOSIT_TRANSACTIONCURRENCYID = bad.TRANSACTIONCURRENCYID,
                                @BATRANSACTIONCURRENCYID = ba.TRANSACTIONCURRENCYID
                            from
                                dbo.BANKACCOUNTTRANSACTION as bat
                                inner join dbo.BANKACCOUNT as ba on bat.BANKACCOUNTID = ba.ID
                                inner join dbo.BANKACCOUNTDEPOSIT as bad on bat.id = bad.id
                            where
                                bat.ID = @DEPOSITID

                            if @TRANSACTIONCURRENCYID is not null
                                begin
                                    if @TRANSACTIONCURRENCYID <> @DEPOSIT_TRANSACTIONCURRENCYID
                                        raiserror ('ERR_TRASACTIONCURRENCYID_MUSTMATCHDEPOSIT', 16, 1);
                                end
                            else
                                set @TRANSACTIONCURRENCYID = @DEPOSIT_TRANSACTIONCURRENCYID
                        end

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

                    -- ****

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

                    -- ****                


                    -- Get the BaseCurrencyID correctly for the user.

                    -- ****

                    declare @BASECURRENCYID uniqueidentifier

                    -- BASECURRENCYID is pulled from the PDACCOUNTSYSTEM that the user selected or inferred from the deposit they selected.

                    if @PDACCOUNTSYSTEMID is null
                        select @PDACCOUNTSYSTEMID = ID from PDACCOUNTSYSTEM where ISDEFAULT = 1;

                    select @BASECURRENCYID = BASECURRENCYID
                    from dbo.PDACCOUNTSYSTEM as PAS 
                        inner join dbo.CURRENCYSET as CS on PAS.CURRENCYSETID = CS.ID
                    where PAS.ID = @PDACCOUNTSYSTEMID      
                    -- ****


                    begin try

                        if @PAYMENTMETHODCODE is null
                            raiserror('Payment method is required.', 13, 1)

                        declare @ORGAMOUNTORIGINCODE tinyint;
                        declare @ORGCURRENCYID uniqueidentifier;
                        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                        declare @ORGCURRENCYNAME nvarchar(100);
                        select @ORGAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION;
                        select @ORGCURRENCYID = ID, @ORGCURRENCYNAME = NAME from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;
                        set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE(@BASECURRENCYID, @ORGCURRENCYID, @PAYMENTDATE, null, @TRANSACTIONCURRENCYID);
                        if (@ORGAMOUNTORIGINCODE = 1 and @TRANSACTIONCURRENCYID <> @ORGCURRENCYID) or (@ORGAMOUNTORIGINCODE = 0 and @BASECURRENCYID <> @ORGCURRENCYID)
                            if @ORGANIZATIONEXCHANGERATEID is null
                            begin
                                declare @CURRENCYNAME nvarchar(100);
                                select @CURRENCYNAME = NAME from dbo.CURRENCY where (ID = @TRANSACTIONCURRENCYID and @ORGAMOUNTORIGINCODE = 1) or (ID = @BASECURRENCYID and @ORGAMOUNTORIGINCODE = 0)
                                declare @errormessage nvarchar(200);
                                set @errormessage = 'A corporate exchange rate does not exist for ' + isnull(@CURRENCYNAME, '') + ' to ' + isnull(@ORGCURRENCYNAME, '')
                                raiserror (@errormessage, 16, 1);
                            end

                        -- handle inserting the data


                            exec dbo.USP_PAYMENT_ADDBASE
                                @ID = @ID output
                                @CHANGEAGENTID = @CHANGEAGENTID
                                @CURRENTDATE = @CURRENTDATE,
                                @CONSTITUENTID = null,
                                @DATE = @PAYMENTDATE
                                @AMOUNT = @AMOUNT,
                                @RECEIPTAMOUNT = @AMOUNT,
                                @PAYMENTMETHODCODE = @PAYMENTMETHODCODE,
                                @CHECKDATE = @CHECKDATE,
                                @CHECKNUMBER = @CHECKNUMBER,
                                @REFERENCEDATE = @REFERENCEDATE,
                                @REFERENCENUMBER = @REFERENCENUMBER,
                                @CARDHOLDERNAME = @CARDHOLDERNAME,
                                @CREDITCARDNUMBER = @CREDITCARDNUMBER,
                                @CREDITTYPECODEID = @CREDITTYPECODEID,
                                @AUTHORIZATIONCODE = @AUTHORIZATIONCODE,
                                @EXPIRESON = @EXPIRESON,
                                @POSTSTATUSCODE = @POSTSTATUSCODE,
                                @POSTDATE = @POSTDATE
                                @OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
                                @SOURCECODE = '',
                                @REFERENCE = @PAYMENTSOURCE,
                                @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                                @BASECURRENCYID = @BASECURRENCYID,
                                @BASEEXCHANGERATEID = @BASEEXCHANGERATEID output,
                                @EXCHANGERATE = @EXCHANGERATE,
                                @CURRENTAPPUSERID = @CURRENTAPPUSERID

                            exec dbo.USP_MISCELLANEOUS_ADDPAYMENT
                                @REVENUEID = @ID,
                                @AMOUNT = @AMOUNT,
                                @CREATIONDATE = @CURRENTDATE,
                                @CHANGEAGENTID = @CHANGEAGENTID

                        if @PDACCOUNTSYSTEMID is null 
                            set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';

                        exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                            @ID = @ID,
                            @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                            @CHANGEDATE = @CURRENTDATE,
                            @CHANGEAGENTID = @CHANGEAGENTID

                        insert into dbo.BANKACCOUNTDEPOSITPAYMENT
                            (ID, DEPOSITID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values
                            (@ID, @DEPOSITID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)                                          

                        --Only add distributions if the post status is Not posted

                        if @POSTSTATUSCODE = 1
                        begin
                            exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;

                            if @DEPOSITID is not null
                             begin
                                exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @ID, @DEPOSITID, @CHANGEAGENTID, @CURRENTDATE;

                                if len(@DEPOSITREFERENCE) = 0
                                    set @DEPOSITREFERENCE = @PAYMENTSOURCE;

                                if len(@DEPOSITREFERENCE) > 0
                                begin
                                    /*update dbo.GLTRANSACTION set REFERENCE = @DEPOSITREFERENCE,
                                        DATECHANGED = @CURRENTDATE,
                                        CHANGEDBYID = @CHANGEAGENTID
                                    from dbo.REVENUE
                                    inner join dbo.REVENUEGLDISTRIBUTION on REVENUE.ID = REVENUEGLDISTRIBUTION.REVENUEID
                                    inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = REVENUEGLDISTRIBUTION.GLTRANSACTIONID
                                    where REVENUE.ID = @ID and GLTRANSACTION.TRANSACTIONTYPECODE = 0 and GLTRANSACTION.POSTSTATUSCODE = 1
                                        and GLTRANSACTION.TRANSACTIONCURRENCYID = @BATRANSACTIONCURRENCYID;
                                    */
                                    update dbo.REVENUEGLDISTRIBUTION set

                                        REFERENCE = @DEPOSITREFERENCE,
                                        DATECHANGED = @CURRENTDATE,
                                        CHANGEDBYID = @CHANGEAGENTID
                                    where REVENUEGLDISTRIBUTION.ID in 
                                    (select REVENUEGLDISTRIBUTION.ID                                    
                                    from dbo.REVENUE
                                    inner join dbo.REVENUEGLDISTRIBUTION on REVENUE.ID = REVENUEGLDISTRIBUTION.REVENUEID
                                    inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = REVENUEGLDISTRIBUTION.GLTRANSACTIONID
                                    where REVENUE.ID = @ID and REVENUEGLDISTRIBUTION.TRANSACTIONTYPECODE = 0 and GLTRANSACTION.POSTSTATUSCODE = 1
                                        and GLTRANSACTION.TRANSACTIONCURRENCYID = @BATRANSACTIONCURRENCYID)
                                        ;
                                end
                             end
                        end
                    end try

                    begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                    end catch

                    return 0