USP_REVENUEATTRIBUTES_COPYTOREVENUE

Copies attributes associated with a revenue record to another revenue record.

Parameters

Parameter Parameter Type Mode Description
@FROMREVENUEID uniqueidentifier IN
@TOREVENUEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_REVENUEATTRIBUTES_COPYTOREVENUE
(
  @FROMREVENUEID uniqueidentifier,
  @TOREVENUEID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @CURRENTDATE datetime = getdate();

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

  declare ATTRIBUTECURSOR cursor local fast_forward for
    select
      TABLECATALOG.TABLENAME as ATTRIBUTETABLENAME,
      ATTRIBUTECATEGORY.VALUECOLUMNNAME,
      ATTRIBUTECATEGORY.ONLYALLOWONEPERRECORD
    from
      dbo.ATTRIBUTECATEGORY
    inner join
      dbo.ATTRIBUTERECORDTYPE on ATTRIBUTERECORDTYPE.ID = ATTRIBUTECATEGORY.ATTRIBUTERECORDTYPEID
    inner join
      dbo.RECORDTYPE on RECORDTYPE.ID = ATTRIBUTERECORDTYPE.RECORDTYPEID
    inner join
      dbo.TABLECATALOG on TABLECATALOG.ID = ATTRIBUTECATEGORY.TABLECATALOGID 
    where
      RECORDTYPE.NAME = 'Revenue';

  declare @PARAMETERDEFINITION nvarchar(1000);
  declare @TABLENAME nvarchar(100);
  declare @VALUECOLUMN nvarchar(100);
  declare @ONLYALLOWONEPERRECORD bit;

  declare @IDCOLUMN nvarchar(50);

  open ATTRIBUTECURSOR;
  fetch next from ATTRIBUTECURSOR
    into @TABLENAME, @VALUECOLUMN, @ONLYALLOWONEPERRECORD;

  while @@FETCH_STATUS = 0
  begin
    declare @SQLQUERY nvarchar(2000) = '';

    if @ONLYALLOWONEPERRECORD = 0
    begin
      set @IDCOLUMN = 'REVENUEID';
    end
    else
    begin
      set @IDCOLUMN = 'ID';
      set @SQLQUERY = 'if not exists(select top 1 1 from dbo.' + @TABLENAME + ' where ID = @TOREVENUEID)';
    end

    set @SQLQUERY =  @SQLQUERY + 'insert into dbo.'+ @TABLENAME + '('+
      @IDCOLUMN+','+ 
      @VALUECOLUMN+','+ 
      'COMMENT,'+
      'STARTDATE,'+
      'ENDDATE,'+
      'ADDEDBYID,'+
      'CHANGEDBYID,'+
      'DATEADDED,'+
      'DATECHANGED) '+
      'select '+
      '@TOREVENUEID,'+
      @VALUECOLUMN+','+ 
      'COMMENT,'+
      'STARTDATE,'+
      'ENDDATE,'+
      '@CHANGEAGENTID,'+
      '@CHANGEAGENTID,'+
      '@CURRENTDATE,'+
      '@CURRENTDATE '+
      'from '+ 
      'dbo.'+@TABLENAME +
      ' where '+@IDCOLUMN+' = @FROMREVENUEID';

    set @PARAMETERDEFINITION = ' @FROMREVENUEID uniqueidentifier,
      @TOREVENUEID uniqueidentifier,
      @CHANGEAGENTID uniqueidentifier,
      @CURRENTDATE datetime';

    execute sp_executesql @SQLQUERY,
      @PARAMETERDEFINITION,
      @FROMREVENUEID,
      @TOREVENUEID,
      @CHANGEAGENTID,
      @CURRENTDATE

    fetch next from ATTRIBUTECURSOR
      into @TABLENAME, @VALUECOLUMN, @ONLYALLOWONEPERRECORD;
  end

  close ATTRIBUTECURSOR;
  deallocate ATTRIBUTECURSOR;