USP_PAYMENT_APPLICATIONPAYMENTLOADCURRENCY

Stored procedure used to load currency information for payment add forms.

Parameters

Parameter Parameter Type Mode Description
@APPLICATIONID uniqueidentifier IN
@DATE datetime IN
@CURRENTAPPUSERID uniqueidentifier IN
@PDACCOUNTSYSTEMID uniqueidentifier INOUT
@SHOWACCOUNTSYSTEM bit INOUT
@TRANSACTIONCURRENCYID uniqueidentifier INOUT
@BASEEXCHANGERATEID uniqueidentifier INOUT
@EXCHANGERATE decimal(20, 8) INOUT

Definition

Copy


CREATE procedure dbo.USP_PAYMENT_APPLICATIONPAYMENTLOADCURRENCY
(
  @APPLICATIONID uniqueidentifier,
  @DATE datetime,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @PDACCOUNTSYSTEMID uniqueidentifier = null output,
  @SHOWACCOUNTSYSTEM bit = null output,
  @TRANSACTIONCURRENCYID uniqueidentifier = null output,
  @BASEEXCHANGERATEID uniqueidentifier = null output,
  @EXCHANGERATE decimal(20,8) = null output
)
as
  set nocount on;

  declare @APPLICATIONACCOUNTSYSTEMID uniqueidentifier;
  declare @APPLICATIONTRANSACTIONCURRENCYID uniqueidentifier;
  declare @APPLICATIONBASECURRENCYID uniqueidentifier;
  declare @ACCOUNTSYSTEMBASECURRENCYID uniqueidentifier;
  declare @BASECURRENCYID uniqueidentifier;

  select
    @APPLICATIONACCOUNTSYSTEMID = PDACCOUNTSYSTEMFORREVENUE.PDACCOUNTSYSTEMID,
    @APPLICATIONTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
    @APPLICATIONBASECURRENCYID = REVENUE.BASECURRENCYID
  from
    dbo.REVENUE
    left join dbo.PDACCOUNTSYSTEMFORREVENUE on REVENUE.ID = PDACCOUNTSYSTEMFORREVENUE.ID
  where
    REVENUE.ID = @APPLICATIONID;


  if dbo.UFN_VALID_BASICGL_INSTALLED() != 0
    begin

      -- The user has rights to the account system saved on the application, so default this account system

      if exists(select 1 from dbo.UFN_PDACCOUNTSYSTEM_GETSYSTEMIDSFORUSER(@CURRENTAPPUSERID) where ID = @APPLICATIONACCOUNTSYSTEMID)
      begin
        -- Only show the Account System if they have a choice.  Bug 104644

        --if dbo.UFN_PDACCOUNTSYSTEM_GETNUMBEROFSYSTEMSFORUSER(@CURRENTAPPUSERID) = 1

        --  set @SHOWACCOUNTSYSTEM = 0

        -- else

        --  set @SHOWACCOUNTSYSTEM = 1;


        --If the saved account system is found and defaulted, the user shouldn't have the ability to make a payment in a different account system than

        --the application

        set @SHOWACCOUNTSYSTEM = 0 

        set @PDACCOUNTSYSTEMID = @APPLICATIONACCOUNTSYSTEMID;
        set @TRANSACTIONCURRENCYID = @APPLICATIONTRANSACTIONCURRENCYID;
        set @BASECURRENCYID = @APPLICATIONBASECURRENCYID;
        select @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID,@BASECURRENCYID,@DATE,1,null);
      end

      -- Get the user's default account system.

      else
      begin
        declare    @NUMBEROFACCOUNTSYSTEMSFORUSER smallint;

        set @NUMBEROFACCOUNTSYSTEMSFORUSER = dbo.UFN_PDACCOUNTSYSTEM_GETNUMBEROFSYSTEMSFORUSER(@CURRENTAPPUSERID);
        if @NUMBEROFACCOUNTSYSTEMSFORUSER = 1
          begin
            set @SHOWACCOUNTSYSTEM = 0;
            select @PDACCOUNTSYSTEMID =  T1.ID from dbo.UFN_PDACCOUNTSYSTEM_GETSYSTEMIDSFORUSER(@CURRENTAPPUSERID) as T1;
          end 
        else
          begin
            set @SHOWACCOUNTSYSTEM = 1;
            set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID);
          end 

        select 
          @ACCOUNTSYSTEMBASECURRENCYID = CURRENCYSET.BASECURRENCYID
        from 
          dbo.PDACCOUNTSYSTEM
          inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
        where
          PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID;

        set @BASECURRENCYID = @ACCOUNTSYSTEMBASECURRENCYID;

        -- If the transaction currency of the application is a valid transaction currency in the default currency set,

        -- use this transaction currency as the default on the payment.

        if exists 
        (
          select 1 
          from
            dbo.PDACCOUNTSYSTEM
            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
            left join dbo.CURRENCYSETTRANSACTIONCURRENCY on CURRENCYSET.ID = CURRENCYSETTRANSACTIONCURRENCY.CURRENCYSETID
          where
            PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID
            and CURRENCYSETTRANSACTIONCURRENCY.CURRENCYID = @APPLICATIONTRANSACTIONCURRENCYID

        )
        begin
          set @TRANSACTIONCURRENCYID = @APPLICATIONTRANSACTIONCURRENCYID;
          select @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID,@BASECURRENCYID,@DATE,1,null);
        end

        else -- Use the base currency of the default currency set as the default transaction currency.

        begin
          set @TRANSACTIONCURRENCYID = @ACCOUNTSYSTEMBASECURRENCYID;
        end
      end
    end
  else
    begin
      set @SHOWACCOUNTSYSTEM = 0;
      set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';
    end

  set @EXCHANGERATE =
    case
      when @BASEEXCHANGERATEID is not null
        then (select CURRENCYEXCHANGERATE.RATE from dbo.CURRENCYEXCHANGERATE where CURRENCYEXCHANGERATE.ID = @BASEEXCHANGERATEID)
      when @TRANSACTIONCURRENCYID = @BASECURRENCYID
        then 1
      else 0
    end;

  return 0;