USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION

The save procedure used by the edit dataform template "Bank Account Deposit Correction GL Distribution Edit Data 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.
@GLDISTRIBUTION xml IN Bank account deposit correction GL distribution

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @GLDISTRIBUTION xml
)
as

    set nocount on;

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

    declare @CURRENTDATE datetime
      set @CURRENTDATE = getdate();

  declare @DEBITAMOUNT money = 0;
  declare @CREDITAMOUNT money = 0;

  declare @DISTRIBUTIONS table (
    ID uniqueidentifier,
    ACCOUNT nvarchar(100),
    GLACCOUNTID uniqueidentifier,
    AMOUNT money,
    DEBITCREDIT nvarchar(50),
    PROJECT nvarchar(100),
    REFERENCE nvarchar(100),
    TRANSACTIONTYPECODE tinyint)

  insert into @DISTRIBUTIONS (ID, ACCOUNT, GLACCOUNTID, AMOUNT, DEBITCREDIT, PROJECT, REFERENCE, TRANSACTIONTYPECODE)
  select
    D.ID, A.ACCOUNTNUMBER, D.GLACCOUNTID, D.AMOUNT, D.DEBITCREDIT, D.PROJECT, D.REFERENCE, D.TRANSACTIONTYPECODE
  from dbo.UFN_BANKACCOUNTDEPOSITCORRECTION_GETGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) D
  inner join dbo.GLACCOUNT A on A.ID = D.GLACCOUNTID;

  select @DEBITAMOUNT = isnull(SUM(AMOUNT), 0) from @DISTRIBUTIONS where TRANSACTIONTYPECODE = 0;
  select @CREDITAMOUNT = isnull(SUM(AMOUNT), 0) from @DISTRIBUTIONS where TRANSACTIONTYPECODE = 1;

    begin try
        if @DEBITAMOUNT <> @CREDITAMOUNT
            raiserror('The sum of the debit accounts must equal the sum of the credit accounts.', 13, 1)

        if (select COUNT(*) from @DISTRIBUTIONS) = 0
            raiserror('At least one GL Distribution is required.', 13, 1)

        if @DEBITAMOUNT <> (select TRANSACTIONAMOUNT from dbo.BANKACCOUNTDEPOSITCORRECTION where ID = @ID)
            raiserror('The distribution amount must equal the correction amount.', 13, 1)

        declare @POSTDATE datetime;
        declare @CORRECTIONTYPECODE tinyint;
        select @POSTDATE = POSTDATE 
            ,@CORRECTIONTYPECODE = CORRECTIONTYPECODE
        from dbo.BANKACCOUNTDEPOSITCORRECTION
        inner join dbo.BANKACCOUNTTRANSACTION ON BANKACCOUNTTRANSACTION.ID = BANKACCOUNTDEPOSITCORRECTION.DEPOSITID
        where BANKACCOUNTDEPOSITCORRECTION.ID = @ID

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

    select @TRANSACTIONCURRENCYID = BAD.TRANSACTIONCURRENCYID
      ,@BASECURRENCYID = D.BASECURRENCYID
      ,@BASEEXCHANGERATEID = C.BASEEXCHANGERATEID
      ,@ORGANIZATIONEXCHANGERATEID = C.ORGANIZATIONEXCHANGERATEID
            ,@DEPOSITBASEEXCHANGERATEID = CASE WHEN BAD.TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID THEN D.BASEEXCHANGERATEID ELSE C.BASEEXCHANGERATEID END
            ,@DEPOSITORGANIZATIONEXCHANGERATEID = CASE WHEN BAD.TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID THEN D.ORGANIZATIONEXCHANGERATEID ELSE C.ORGANIZATIONEXCHANGERATEID END
    from dbo.BANKACCOUNTDEPOSITCORRECTION C
    inner join dbo.BANKACCOUNTTRANSACTION D ON D.ID = C.DEPOSITID
    inner join dbo.BANKACCOUNTDEPOSIT BAD on BAD.ID = D.ID
    inner join dbo.BANKACCOUNT BA on BA.ID = D.BANKACCOUNTID
    where C.ID = @ID

    select @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML
    (
      @GLDISTRIBUTION
      ,@BASECURRENCYID
            ,CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN @ORGANIZATIONEXCHANGERATEID ELSE @DEPOSITORGANIZATIONEXCHANGERATEID END
            ,@TRANSACTIONCURRENCYID
            ,CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN @BASEEXCHANGERATEID ELSE @DEPOSITBASEEXCHANGERATEID END
            ,CASE WHEN @CORRECTIONTYPECODE in (1, 3) THEN @ORGANIZATIONEXCHANGERATEID ELSE @DEPOSITORGANIZATIONEXCHANGERATEID END
            ,CASE WHEN @CORRECTIONTYPECODE in (1, 3) THEN @BASEEXCHANGERATEID ELSE @DEPOSITBASEEXCHANGERATEID END
    )

        exec dbo.USP_BANKACCOUNTDEPOSITCORRECTION_GLDISTRIBUTION_MULTICURRENCY_UPDATEFROMXML @ID, @GLDISTRIBUTION, @POSTDATE, @CHANGEAGENTID, @CURRENTDATE
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
    return 1
    end catch

  return 0;