USP_DATAFORMTEMPLATE_OPPORTUNITY_EDIT_3_SAVE

The save procedure used by the edit dataform template "Opportunity Edit 3 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.
@EXPECTEDASKAMOUNT money IN Expected ask amount
@ASKAMOUNT money IN Ask amount
@ACCEPTEDAMOUNT money IN Accepted amount
@STATUSCODE tinyint IN Status
@EXPECTEDASKDATE datetime IN Expected ask date
@ASKDATE datetime IN Ask date
@RESPONSEDATE datetime IN Response date
@COMMENT nvarchar(max) IN Comments
@DESIGNATION xml IN Designation
@LIKELIHOODTYPECODEID uniqueidentifier IN Likelihood
@OPPORTUNITYTYPECODEID uniqueidentifier IN Opportunity type
@TRANSACTIONCURRENCYID uniqueidentifier IN Transaction currency

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_OPPORTUNITY_EDIT_3_SAVE
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @EXPECTEDASKAMOUNT money,
  @ASKAMOUNT money,
  @ACCEPTEDAMOUNT money,
  @STATUSCODE tinyint,
  @EXPECTEDASKDATE datetime,
  @ASKDATE datetime,
  @RESPONSEDATE datetime,
  @COMMENT nvarchar(max),
  @DESIGNATION xml,
  @LIKELIHOODTYPECODEID uniqueidentifier,
  @OPPORTUNITYTYPECODEID uniqueidentifier,
  @TRANSACTIONCURRENCYID uniqueidentifier
) as 
begin

  if @STATUSCODE = 4 or @STATUSCODE = 5
    set @LIKELIHOODTYPECODEID = null;

  if @STATUSCODE = 0
    set @ASKAMOUNT = 0;

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

  declare @CHANGEDATE datetime = getdate();

  begin try
    declare @DATEADDED datetime;

    declare @BASECURRENCYID uniqueidentifier;
    declare @BASEEXPECTEDASKAMOUNT money;
    declare @BASEASKAMOUNT money;
    declare @BASEACCEPTEDASKAMOUNT money;
    declare @BASEEXCHANGERATEID uniqueidentifier;
    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
    declare @ORGANIZATIONEXPECTEDASKAMOUNT money;
    declare @ORGANIZATIONASKAMOUNT money;
    declare @ORGANIZATIONACCEPTEDASKAMOUNT money;
    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

    if @TRANSACTIONCURRENCYID is null
      set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

    select
      @BASECURRENCYID = BASECURRENCYID,
      @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),
      @DATEADDED = DATEADDED
    from
      dbo.OPPORTUNITY
    where
      OPPORTUNITY.ID = @ID;

    set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID, @BASECURRENCYID, @DATEADDED, 1, null);

    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @ASKAMOUNT, @DATEADDED, @BASECURRENCYID, @BASEEXCHANGERATEID output,
      @TRANSACTIONCURRENCYID, @BASEASKAMOUNT output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONASKAMOUNT output,
      @ORGANIZATIONEXCHANGERATEID output, 1;

    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @EXPECTEDASKAMOUNT, @DATEADDED, @BASECURRENCYID, @BASEEXCHANGERATEID,
      @TRANSACTIONCURRENCYID, @BASEEXPECTEDASKAMOUNT output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONEXPECTEDASKAMOUNT output,
      @ORGANIZATIONEXCHANGERATEID, 1;

    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @ACCEPTEDAMOUNT, @DATEADDED, @BASECURRENCYID, @BASEEXCHANGERATEID,
      @TRANSACTIONCURRENCYID, @BASEACCEPTEDASKAMOUNT output, @ORGANIZATIONCURRENCYID, @ORGANIZATIONACCEPTEDASKAMOUNT output,
      @ORGANIZATIONEXCHANGERATEID, 1;

    exec dbo.USP_OPPORTUNITY_VALIDATEDESIGNATIONS @DESIGNATION;

    declare @TRANSACTIONCURRENCYCHANGED bit
    select @TRANSACTIONCURRENCYCHANGED = CASE TRANSACTIONCURRENCYID
                                          WHEN @TRANSACTIONCURRENCYID THEN 0
                                          ELSE 1
                                          END
                                          FROM dbo.OPPORTUNITY
                                          where
                                            ID = @ID;

    update
      dbo.OPPORTUNITY
    set
      STATUSCODE = @STATUSCODE,
      EXPECTEDASKAMOUNT = @BASEEXPECTEDASKAMOUNT,
      ORGANIZATIONEXPECTEDASKAMOUNT = @ORGANIZATIONEXPECTEDASKAMOUNT,
      TRANSACTIONEXPECTEDASKAMOUNT = @EXPECTEDASKAMOUNT,
      ASKAMOUNT = @BASEASKAMOUNT,
      ORGANIZATIONASKAMOUNT = @ORGANIZATIONASKAMOUNT,
      TRANSACTIONASKAMOUNT = @ASKAMOUNT,
      ACCEPTEDASKAMOUNT = case @STATUSCODE when 3 then @BASEACCEPTEDASKAMOUNT else 0.0 end,
      ORGANIZATIONACCEPTEDASKAMOUNT = @ORGANIZATIONACCEPTEDASKAMOUNT,
      TRANSACTIONACCEPTEDASKAMOUNT = @ACCEPTEDAMOUNT,
      EXPECTEDASKDATE = @EXPECTEDASKDATE,
      ASKDATE = @ASKDATE,
      RESPONSEDATE = @RESPONSEDATE,
      COMMENT = @COMMENT,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CHANGEDATE,
      LIKELIHOODTYPECODEID = @LIKELIHOODTYPECODEID,
      OPPORTUNITYTYPECODEID = @OPPORTUNITYTYPECODEID,
  BASECURRENCYID = @BASECURRENCYID,
      TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
      BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
      ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
    where
      ID = @ID;

    set @DESIGNATION = dbo.UFN_OPPORTUNITYDESIGNATION_CONVERTAMOUNTSINXML(@DESIGNATION, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @DATEADDED);

    declare @DESIGNATIONSCHANGED bit;
    set @DESIGNATIONSCHANGED = dbo.UFN_OPPORTUNITY_DESIGNATIONSCHANGED_2(@ID, @DESIGNATION);

    if @DESIGNATIONSCHANGED = 1 or @TRANSACTIONCURRENCYCHANGED = 1
    begin
      --We have to always delete and add designations because simply updating them can cause the unique constraint to fail
      exec dbo.USP_OPPORTUNITY_DESIGNATION_UPDATEFROMXML_ALWAYSADD @ID, @DESIGNATION, @CHANGEAGENTID;

      exec dbo.USP_OPPORTUNITY_CLEARANDADDCAMPAIGNS @OPPORTUNITYID = @ID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CHANGEDATE;
    end

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

  return 0;

end;