USP_DATAFORMTEMPLATE_EDIT_MKTLISTBASECURRENCY

The save procedure used by the edit dataform template "List Base Currency 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.
@BASECURRENCYID uniqueidentifier IN Base currency

Definition

Copy

CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTLISTBASECURRENCY]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @BASECURRENCYID uniqueidentifier
)
as
  set nocount on;

  declare @ISINUSE bit;
  declare @OLDBASECURRENCYID uniqueidentifier;
  declare @DATEADDED datetime;
  declare @CURRENTDATE datetime = getdate();

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

  begin try
    select
      @ISINUSE = dbo.[UFN_MKTSEGMENT_ISINUSE]([MKTSEGMENT].[ID]),
      @OLDBASECURRENCYID = [MKTLIST].[BASECURRENCYID],
      @DATEADDED = [MKTLIST].[DATEADDED]
    from dbo.[MKTLIST]
    left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[LISTID] = [MKTLIST].[ID]
    left join dbo.[MKTSEGMENT] on [MKTSEGMENT].[CURRENTSEGMENTLISTID] = [MKTSEGMENTLIST].[ID]
    where [MKTLIST].[ID] = @ID;

    if @ISINUSE = 0
      begin
        --If the user saves without changing the base currency, don't update org amounts.
        if @OLDBASECURRENCYID <> @BASECURRENCYID
          begin
            declare @ORGCURRENCYID uniqueidentifier = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();

            --If the new base currency is the org currency, org amount equals amount, so don't bother getting
            --    an exchange rate or doing a conversion.
            if @BASECURRENCYID = @ORGCURRENCYID
              begin
                update dbo.[MKTLIST] set
                  [BASECURRENCYID] = @BASECURRENCYID,
                  [ORGANIZATIONBASERENTALCOST] = [BASERENTALCOST],
                  [ORGANIZATIONBASEEXCHANGECOST] = [BASEEXCHANGECOST],
                  [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [ID] = @ID;

                update dbo.[MKTSEGMENTLIST] set
                  [BASECURRENCYID] = @BASECURRENCYID,
                  [ORGANIZATIONEXCHANGECOSTADJUSTMENT] = [EXCHANGECOSTADJUSTMENT],
                  [ORGANIZATIONRENTALCOSTADJUSTMENT] = [RENTALCOSTADJUSTMENT],
                  [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [LISTID] = @ID;

                update dbo.[MKTSEGMENT] set
                  [BASECURRENCYID] = @BASECURRENCYID,
                  [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [CURRENTSEGMENTLISTID] in (select [ID] from dbo.[MKTSEGMENTLIST] where [LISTID] = @ID);
              end
            else --Base currency has changed and isn't the org currency
              begin
                declare @CURRENCYEXCHANGERATEID uniqueidentifier = dbo.[UFN_CURRENCYEXCHANGERATE_GETLATEST](@BASECURRENCYID, dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY](), @DATEADDED, 0, null);

                update dbo.[MKTLIST] set
                  [BASECURRENCYID] = @BASECURRENCYID,
                  [ORGANIZATIONBASERENTALCOST] = dbo.[UFN_CURRENCY_CONVERT]([BASERENTALCOST], @CURRENCYEXCHANGERATEID),
                  [ORGANIZATIONBASEEXCHANGECOST] = dbo.[UFN_CURRENCY_CONVERT]([BASEEXCHANGECOST], @CURRENCYEXCHANGERATEID),
                  [CURRENCYEXCHANGERATEID] = @CURRENCYEXCHANGERATEID,
                  [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [ID] = @ID;

                update dbo.[MKTSEGMENTLIST] set
                  [BASECURRENCYID] = @BASECURRENCYID,
                  [ORGANIZATIONEXCHANGECOSTADJUSTMENT] = dbo.[UFN_CURRENCY_CONVERT]([EXCHANGECOSTADJUSTMENT], @CURRENCYEXCHANGERATEID),
                  [ORGANIZATIONRENTALCOSTADJUSTMENT] = dbo.[UFN_CURRENCY_CONVERT]([RENTALCOSTADJUSTMENT], @CURRENCYEXCHANGERATEID),
                  [CURRENCYEXCHANGERATEID] = @CURRENCYEXCHANGERATEID,
                  [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [LISTID] = @ID;

                update dbo.[MKTSEGMENT] set
                  [BASECURRENCYID] = @BASECURRENCYID,
          [CHANGEDBYID] = @CHANGEAGENTID,
                  [DATECHANGED] = @CURRENTDATE
                where [CURRENTSEGMENTLISTID] in (select [ID] from dbo.[MKTSEGMENTLIST] where [LISTID] = @ID);
              end
          end
      end
  end try

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

  return 0;