USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSITCORRECTION

The save procedure used by the edit dataform template "Bank Account Deposit Correction Edit Form".

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
@REFERENCE nvarchar(100) IN Reference
@PAYMENTMETHODCODE tinyint IN Method
@AMOUNT money IN Amount
@CORRECTIONTYPECODE tinyint IN Correction type
@BASEEXCHANGERATEID uniqueidentifier IN Exchange rate ID
@BASEEXCHANGERATE decimal(20, 8) IN Exchange rate

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSITCORRECTION
                        (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @DATE datetime
                        @REFERENCE nvarchar(100),
                        @PAYMENTMETHODCODE tinyint,
                        @AMOUNT money,
                        @CORRECTIONTYPECODE tinyint,
                        @BASEEXCHANGERATEID uniqueidentifier,
                        @BASEEXCHANGERATE decimal(20,8)
                        )
                    as
                        set nocount on;

                        declare @CURRENTDATE datetime;
                        declare @ORIGINALPAYMENTMETHOD tinyint;
                        declare @ORIGINALCORRECTIONTYPE tinyint;
                        declare @ORIGINALAMOUNT money;
                        declare @ORIGINALREFERENCE nvarchar(100);
                        declare @ORIGINALBASEEXCHANGERATEID uniqueidentifier;
                        declare @ORIGINALBASEEXCHANGERATE decimal(20,8);            
                        declare @TRANSACTIONCURRENCYID uniqueidentifier;
                        declare @BASECURRENCYID uniqueidentifier;
                        declare @BANKACCOUNTTRANSACTIONCURRENCYID uniqueidentifier;
                        declare @ORIGINALORGEXCHANGERATEID uniqueidentifier;
                        declare @ORIGINALEXCHANGERATEISSPOTRATE bit = 0;
                        declare @POSTSTATUSCODE tinyint;

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

                            set @CURRENTDATE = getdate();

                            select 
                                @ORIGINALPAYMENTMETHOD = PAYMENTMETHODCODE, 
                                @ORIGINALCORRECTIONTYPE = CORRECTIONTYPECODE,
                                @ORIGINALAMOUNT = BADC.TRANSACTIONAMOUNT,
                                @ORIGINALREFERENCE = BADC.REFERENCE,
                                @ORIGINALBASEEXCHANGERATEID = ORIGINALTOBASE.ID,
                                @ORIGINALBASEEXCHANGERATE = ORIGINALTOBASE.RATE,
                                @TRANSACTIONCURRENCYID = BAD.TRANSACTIONCURRENCYID, 
                                @BASECURRENCYID = BADC.BASECURRENCYID,
                                @BANKACCOUNTTRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID,
                                @ORIGINALORGEXCHANGERATEID = BADC.ORGANIZATIONEXCHANGERATEID,
                                @ORIGINALEXCHANGERATEISSPOTRATE = CASE WHEN ORIGINALTOBASE.TYPECODE = 2 THEN 1 ELSE 0 END
                                ,@POSTSTATUSCODE = BAT.POSTSTATUSCODE
                            from dbo.BANKACCOUNTDEPOSITCORRECTION as BADC
                                inner join dbo.BANKACCOUNTDEPOSIT as BAD on BADC.DEPOSITID = BAD.ID
                                inner join dbo.BANKACCOUNTTRANSACTION as BAT on BAD.ID = BAT.ID
                                inner join dbo.BANKACCOUNT as BA on BAT.BANKACCOUNTID = BA.ID
                                left outer join dbo.CURRENCYEXCHANGERATE as ORIGINALTOBASE on ORIGINALTOBASE.ID = BADC.BASEEXCHANGERATEID              
                            where BADC.ID = @ID;

                            if (@BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
                                    and ((not @ORIGINALBASEEXCHANGERATE is null) and @ORIGINALBASEEXCHANGERATE = @BASEEXCHANGERATE))
                                set @BASEEXCHANGERATEID = @ORIGINALBASEEXCHANGERATEID;              

                            --Add a spot exchange rate if an existing rate hasn't
                            --been selected, the base and transaction currencies are different, and the rate
                            --entered isn't zero (which indicates that the user wants to enter the record without a rate).
                            if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
                                begin
                                    set @BASEEXCHANGERATEID = newid()

                                    insert into dbo.CURRENCYEXCHANGERATE(
                                        ID, 
                                        FROMCURRENCYID,
                                        TOCURRENCYID,
                                        RATE,
                                        ASOFDATE,
                                        TYPECODE,
                                        SOURCECODEID,
                                        ADDEDBYID, 
                                        CHANGEDBYID, 
                                        DATEADDED, 
                                        DATECHANGED
                                    )
                                    values(
                                        @BASEEXCHANGERATEID,
                                        @TRANSACTIONCURRENCYID,
                                        @BASECURRENCYID,
                                        @BASEEXCHANGERATE,
                                        @DATE,
                                        2,
                                        null,
                                        @CHANGEAGENTID,
                                        @CHANGEAGENTID,
                                        @CURRENTDATE,
                                        @CURRENTDATE
                                    );
                                end

                                declare @BASEAMOUNT money;
                                declare @ORGAMOUNT money;
                                declare @ORGEXCHANGERATEID uniqueidentifier;
                                declare @ORGCURRENCYID uniqueidentifier;
                                declare @ORGAMOUNTORIGINCODE tinyint;
                                declare @ORGCURRENCYNAME nvarchar(100);
                                select @ORGAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION;
                                select @ORGCURRENCYID = ID, @ORGCURRENCYNAME = NAME from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;

                                exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGCURRENCYID output, @ORGAMOUNT output, @ORGEXCHANGERATEID output, 1;
                                if (@ORGAMOUNTORIGINCODE = 1 and @TRANSACTIONCURRENCYID <> @ORGCURRENCYID) or (@ORGAMOUNTORIGINCODE = 0 and @BASECURRENCYID <> @ORGCURRENCYID)
                                    if @ORGEXCHANGERATEID 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 ' + @CURRENCYNAME + ' to ' + @ORGCURRENCYNAME
                                        raiserror (@errormessage, 16, 1);
                                    end

                                update
                                    dbo.BANKACCOUNTDEPOSITCORRECTION
                                set 
                                    DATE = @DATE,
                                    REFERENCE = @REFERENCE,
                                    PAYMENTMETHODCODE = @PAYMENTMETHODCODE,
                                    AMOUNT = @BASEAMOUNT,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE,
                                    CORRECTIONTYPECODE = @CORRECTIONTYPECODE
                                    ,TRANSACTIONAMOUNT = @AMOUNT
                                    ,ORGANIZATIONAMOUNT = @ORGAMOUNT
                                    ,BASECURRENCYID = @BASECURRENCYID
                                    ,ORGANIZATIONEXCHANGERATEID = @ORGEXCHANGERATEID
                                    ,BASEEXCHANGERATEID = @BASEEXCHANGERATEID
                                where
                                    ID = @ID;                

                                declare @DUMMYID uniqueidentifier = newid();
                                if (@ORIGINALPAYMENTMETHOD != @PAYMENTMETHODCODE) or (@ORIGINALCORRECTIONTYPE != @CORRECTIONTYPECODE) or (@ORIGINALAMOUNT != @AMOUNT) or (isnull(@ORIGINALBASEEXCHANGERATEID, @DUMMYID) != isnull(@BASEEXCHANGERATEID, @DUMMYID)) or (isnull(@ORIGINALORGEXCHANGERATEID, @DUMMYID) != isnull(@ORGEXCHANGERATEID, @DUMMYID))
                                 begin
                                    delete from dbo.GLTRANSACTION where ID in (select GLTRANSACTIONID from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION where BANKACCOUNTDEPOSITCORRECTIONID = @ID) and POSTSTATUSCODE = 1;
                                    delete from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION where BANKACCOUNTDEPOSITCORRECTIONID = @ID;

                                    if @POSTSTATUSCODE = 1 
                                        exec dbo.USP_BANKACCOUNTDEPOSITCORRECTION_CREATEDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
                                 end
                                else if (@ORIGINALREFERENCE != @REFERENCE)
                                    begin
                                        if len(@REFERENCE) = 0
                                            set @REFERENCE = 'Bank Account Deposit Correction';

                                declare @References table (ID uniqueidentifier, Reference nvarchar(255))

                                insert into @References (ID, Reference)
                                select GLTRANSACTION.ID,  
                                CASE WHEN BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2
                                    THEN CASE WHEN GLTRANSACTION.TRANSACTIONTYPECODE = 0 
                                        THEN @REFERENCE
                                        ELSE CASE WHEN len(BANKACCOUNTTRANSACTION.REFERENCE) = 0 
                                            THEN @REFERENCE
                                            ELSE BANKACCOUNTTRANSACTION.REFERENCE END
                                        END
                                    ELSE CASE WHEN GLTRANSACTION.TRANSACTIONTYPECODE = 1 
                                        THEN @REFERENCE
                                        ELSE CASE WHEN len(BANKACCOUNTTRANSACTION.REFERENCE) = 0 
                                            THEN @REFERENCE
                                            ELSE BANKACCOUNTTRANSACTION.REFERENCE END
                                        END
                                    END
                                    from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
                                    inner join dbo.BANKACCOUNTDEPOSITCORRECTION on BANKACCOUNTDEPOSITCORRECTION.ID = BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BANKACCOUNTDEPOSITCORRECTIONID
                                    inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.GLTRANSACTIONID
                                    inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTDEPOSITCORRECTION.DEPOSITID
                                    where BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BANKACCOUNTDEPOSITCORRECTIONID = @ID and GLTRANSACTION.POSTSTATUSCODE = 1
                                and     (
                                        (
                                        --Short, non-system generated 
                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2
                                        ) 
                                    or
                                        (
                                        --Over, non-system generated
                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3
                                        )
                                    or
                                        (
                                        --Short, non-system generated, same currencies (between bank account and deposit/payment currency)
                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2)
                                        and @TRANSACTIONCURRENCYID = @BANKACCOUNTTRANSACTIONCURRENCYID
                                        )
                                    or
                                        (
                                            --Over, non-system generated, same currencies (between bank account and deposit/payment currency)
                                            GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                            and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                            and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3)
                                            and @TRANSACTIONCURRENCYID = @BANKACCOUNTTRANSACTIONCURRENCYID
                                        )
                                    or 
                                        (
                                        --Short, system generated, different currencies (between bank account and deposit/payment currency), non-gain/loss
                                        GLTRANSACTION.SYSTEMDISTRIBUTION=1 
                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2)
                                        and @TRANSACTIONCURRENCYID <> @BANKACCOUNTTRANSACTIONCURRENCYID
                                        and not BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
                                        )
                                    or 
                                        (
                                        --Over, system generated, different currencies (between bank account and deposit/payment currency), non-gain/loss
                                        GLTRANSACTION.SYSTEMDISTRIBUTION=1
                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3)
                                        and @TRANSACTIONCURRENCYID <> @BANKACCOUNTTRANSACTIONCURRENCYID
                                        and not BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
                                        )
                                    );

                                    update dbo.GLTRANSACTION
                                    set REFERENCE = (select Reference from @References where ID = GLTRANSACTION.ID),
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                    where ID in (select ID from @References)

                                    delete from @References

                                    insert into @References (ID, Reference)
                                    select BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ID, 
                                                CASE WHEN BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2
                                                    THEN CASE WHEN GLTRANSACTION.TRANSACTIONTYPECODE = 0 
                                                        THEN @REFERENCE
                                                        ELSE CASE WHEN len(BANKACCOUNTTRANSACTION.REFERENCE) = 0 
                                                            THEN @REFERENCE
                                                            ELSE BANKACCOUNTTRANSACTION.REFERENCE END
                                                        END
                                                    ELSE CASE WHEN GLTRANSACTION.TRANSACTIONTYPECODE = 1 
                                                        THEN @REFERENCE
                                                        ELSE CASE WHEN len(BANKACCOUNTTRANSACTION.REFERENCE) = 0 
                                                            THEN @REFERENCE
                                                            ELSE BANKACCOUNTTRANSACTION.REFERENCE END
                                                        END
                                                    END
                                        from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
                                        inner join dbo.BANKACCOUNTDEPOSITCORRECTION on BANKACCOUNTDEPOSITCORRECTION.ID = BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BANKACCOUNTDEPOSITCORRECTIONID
                                        inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.GLTRANSACTIONID
                                        inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTDEPOSITCORRECTION.DEPOSITID
                                        where BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BANKACCOUNTDEPOSITCORRECTIONID = @ID and GLTRANSACTION.POSTSTATUSCODE = 1
                                            and 
                                                (
                                                    (
                                                        --Short, non-system generated 
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2
                                                    ) 
                                                    or
                                                    (
                                                        --Over, non-system generated
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3
                                                    )
                                                    or
                                                    (
                                                        --Short, non-system generated, same currencies (between bank account and deposit/payment currency)
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2)
                                                        and @TRANSACTIONCURRENCYID = @BANKACCOUNTTRANSACTIONCURRENCYID
                                                    )
                                                    or
                                                    (
                                                        --Over, non-system generated, same currencies (between bank account and deposit/payment currency)
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=0 
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3)
                                                        and @TRANSACTIONCURRENCYID = @BANKACCOUNTTRANSACTIONCURRENCYID
                                                    )
                                                    or 
                                                    (
                                                        --Short, system generated, different currencies (between bank account and deposit/payment currency), non-gain/loss
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=1 
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 1
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (0, 2)
                                                        and @TRANSACTIONCURRENCYID <> @BANKACCOUNTTRANSACTIONCURRENCYID
                                                        and not BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
                                                    )
                                                    or 
                                                    (
                                                        --Over, system generated, different currencies (between bank account and deposit/payment currency), non-gain/loss
                                                        GLTRANSACTION.SYSTEMDISTRIBUTION=1
                                                        and GLTRANSACTION.TRANSACTIONTYPECODE = 0
                                                        and BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPECODE in (1, 3)
                                                        and @TRANSACTIONCURRENCYID <> @BANKACCOUNTTRANSACTIONCURRENCYID
                                                        and not BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
                                                    )
                                                );

                                    update dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
                                    set REFERENCE = (select Reference from @References where ID = BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ID),
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                    where ID in (select ID from @References)

                                    end

                            if @ORIGINALBASEEXCHANGERATEID <> @BASEEXCHANGERATEID and @ORIGINALEXCHANGERATEISSPOTRATE = 1
                                delete from dbo.CURRENCYEXCHANGERATE where CURRENCYEXCHANGERATE.ID = @ORIGINALBASEEXCHANGERATEID;
                        end try

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

                        return 0;