USP_REVENUE_BENEFITS_VALIDATEGLMAPPINGS

Validates that GL accounts are mapped for revenue benefits.

Parameters

Parameter Parameter Type Mode Description
@TYPECODE tinyint IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@BENEFITS xml IN
@PERCENTAGEBENEFITS xml IN

Definition

Copy


CREATE procedure dbo.USP_REVENUE_BENEFITS_VALIDATEGLMAPPINGS
(
  @TYPECODE tinyint = 0,
  @PDACCOUNTSYSTEMID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @BENEFITS xml = null,
  @PERCENTAGEBENEFITS xml = null
)
as
begin
  set nocount on;

  declare @ERRORCODE tinyint;
  declare @ERRORCODE2 tinyint;
  declare @PDACCOUNTCODEMAPPINGID uniqueidentifier;
  declare @UNMAPPEDACCOUNTID uniqueidentifier = null;
  declare @UNMAPPEDBENEFITNAME nvarchar(100);
  declare @ACCTSYSNAME nvarchar(50);
  declare @MESSAGE nvarchar(2000);

  --Validate benefits only if BasicGL is installed and Revenue Type is Payment or Pledge (not Recurring Gift)

  if dbo.UFN_VALID_BASICGL_INSTALLED() != 0 and ((@TYPECODE = 0) or (@TYPECODE = 1))
  begin
    if @PDACCOUNTSYSTEMID is null
      set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID);

      select
        @UNMAPPEDACCOUNTID = DEFAULTGLACCOUNTID
      from
        dbo.PDACCOUNTSYSTEM
      where
        PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID;

    if @PDACCOUNTSYSTEMID is not null and @UNMAPPEDACCOUNTID is null
    begin
      select
        @ACCTSYSNAME = NAME
      from
        dbo.PDACCOUNTSYSTEM
      where
        ID = @PDACCOUNTSYSTEMID;

      declare @PDBENEFITMAPPINGIDTABLE table
      (
        BENEFITID uniqueidentifier,
        BATCHREVID uniqueidentifier,
        BENEFITMAPPINGID uniqueidentifier,
        LIABILITYMAPPINGID uniqueidentifier
      );

      insert into @PDBENEFITMAPPINGIDTABLE
      (
        BENEFITID,
        BATCHREVID
      )
      select
        T1.BENEFITID,
        T2.BATCHREVENUEID
      from
        dbo.UFN_REVENUEBATCH_GETBENEFITS_FROMITEMLISTXML(@BENEFITS) as T1
      inner join
        dbo.BATCHREVENUEBENEFIT as T2 on T1.ID = T2.ID

      union

      select
        T1.BENEFITID,
        T2.BATCHREVENUEID
      from
        dbo.UFN_REVENUEBATCH_GETBENEFITSPCT_FROMITEMLISTXML(@PERCENTAGEBENEFITS) as T1
      inner join
        dbo.BATCHREVENUEBENEFITPCT as T2 on T1.ID = T2.ID     

      if @TYPECODE = 1 
      begin
        if exists(select 1 from dbo.BENEFIT as T1 join @PDBENEFITMAPPINGIDTABLE as T2 on T1.ID = T2.BENEFITID where T1.SENDBENEFITCODE = 1)
        begin

          if not exists(select 1 from PDACCOUNTCODEMAPPING where OFFICEID = 4 and (REVENUETYPE & 8) = 8 and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID)
            set @ERRORCODE2 = 1
          else
          begin
            if not exists (select 1 from dbo.PDACCOUNTCODEMAPPING as T1 inner join dbo.PDACCOUNTCODEMAPPINGSUBTYPE as T2 on T1.ID = T2.PDACCOUNTCODEMAPPINGID
              where OFFICEID = 4 and (REVENUETYPE & 8) = 8 and T2.SUBTYPEID = '99999999-9999-9999-9999-999999999999' and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID)
            begin
              if exists (select 1 from dbo.PDACCOUNTCODEMAPPING as T1
                  inner join dbo.PDACCOUNTCODEMAPPINGSUBTYPE as T2 on T1.ID = T2.PDACCOUNTCODEMAPPINGID
                  left outer join dbo.BATCHREVENUE as T3 on T3.PLEDGESUBTYPEID = T2.SUBTYPEID
                  left outer join @PDBENEFITMAPPINGIDTABLE as T4 on T3.ID = T4.BATCHREVID
                  where T1.OFFICEID = 4 and (T1.REVENUETYPE & 8) = 8 and T1.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and T3.ID is null )
                set @ERRORCODE2 = 1
            end
          end
        end
      end

      if --Type is Payment and Payments not mapped in GL

        (@TYPECODE = 0 and not exists (select * from dbo.PDACCOUNTCODEMAPPING where PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID AND (REVENUETYPE & 1) = 1 AND OFFICEID = 5))
        or
        --Type is Pledge and Pledges not mapped in GL

        (@TYPECODE = 1 and not exists (select * from dbo.PDACCOUNTCODEMAPPING where PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID AND (REVENUETYPE & 4) = 4 AND OFFICEID = 5))
          set @ERRORCODE = 0

      --If all subtypes are not mapped, then check individual mappings

      if not exists (select T1.ID from dbo.PDACCOUNTCODEMAPPINGSUBTYPE as T1
        inner join PDACCOUNTCODEMAPPING as T2 on T2.ID = T1.PDACCOUNTCODEMAPPINGID
        where T1.ADDITIONALSUBTYPE = 6 and SUBTYPEID = '99999999-9999-9999-9999-999999999999'
        and REVENUETYPE & (case @TYPECODE when 0 then  1 else 4 end) = (case @TYPECODE when 0 then  1 else 4 end))
      begin
        declare @UNMAPPEDBENEFITID uniqueidentifier = null;

        if exists (select 1 from @PDBENEFITMAPPINGIDTABLE as T1
            where T1.BENEFITID not in 
            (select T2.SUBTYPEID from PDACCOUNTCODEMAPPINGSUBTYPE as T2  
            join PDACCOUNTCODEMAPPING as T3 on T3.ID = T2.PDACCOUNTCODEMAPPINGID
            where T3.OFFICEID = 5 and T3.PDACCOUNTSYSTEMID  =  @PDACCOUNTSYSTEMID 
            and REVENUETYPE & (case @TYPECODE when 0 then  1 else 4 end) = (case @TYPECODE when 0 then  1 else 4 end)))                            
          select top 1 @UNMAPPEDBENEFITID = T1.BENEFITID
          from @PDBENEFITMAPPINGIDTABLE as T1
          where T1.BENEFITID not in 
          (select  T2.SUBTYPEID from PDACCOUNTCODEMAPPINGSUBTYPE T2  
          join PDACCOUNTCODEMAPPING  T3 on T3.ID = T2.PDACCOUNTCODEMAPPINGID
          where T3.OFFICEID = 5 and T3.PDACCOUNTSYSTEMID  =  @PDACCOUNTSYSTEMID 
          and REVENUETYPE & (case @TYPECODE when 0 then  1 else 4 end) = (case @TYPECODE when 0 then  1 else 4 end))

        if @UNMAPPEDBENEFITID is not null
        begin
          set @ERRORCODE = 1;
          select @UNMAPPEDBENEFITNAME = NAME from dbo.BENEFIT where ID = @UNMAPPEDBENEFITID;
        end
      end                     
    end
  end

      --Variables for error reporting

  declare @OFFICENAME nvarchar(100);
  declare @REVENUETYPENAME nvarchar(50);

  -- Report errors, if needed

  if @ERRORCODE is not null
  begin
    -- Get account system name

    select @ACCTSYSNAME = NAME from dbo.PDACCOUNTSYSTEM where ID = @PDACCOUNTSYSTEMID;

    -- Get Office and Revenue Type name

    select
      @OFFICENAME = t1.NAME,
      @REVENUETYPENAME = t2.TYPENAME 
    from
      dbo.PDACCOUNTCODEMAPOFFICE as t1
    left join
      dbo.PDACCOUNTCODEMAPREVENUETYPE as t2 on t1.ID = t2.PDACCOUNTCODEMAPOFFICEID and t2.NAMEID = case when @TYPECODE = 0 then 1 else 4 end and t2.OFFICEID = 5          
    where
      t1.OFFICEID = 5

    -- Make error message, depending on which error was thrown

    if @ERRORCODE = 0
      set @MESSAGE = 'In account system "' + @ACCTSYSNAME + '", a mapping does not exist for Office: '+ @OFFICENAME + isnull(', Revenue type: '+ @REVENUETYPENAME,'') + ', Subtype not specified.';
    else
      set @MESSAGE = 'In account system "' + @ACCTSYSNAME + '", a mapping does not exist for Office: '+ @OFFICENAME + ', ' + @UNMAPPEDBENEFITNAME;

    raiserror(@MESSAGE, 13, 1);
  end

  if @ERRORCODE is null and @ERRORCODE2 = 1
  begin            
    select
      @OFFICENAME = t1.NAME,
      @REVENUETYPENAME = t2.TYPENAME
    from
      dbo.PDACCOUNTCODEMAPOFFICE as t1
    inner join
      dbo.PDACCOUNTCODEMAPREVENUETYPE as t2 on t1.ID = t2.PDACCOUNTCODEMAPOFFICEID and t2.NAMEID = 8 and t1.OFFICEID = 4

    select @ACCTSYSNAME = NAME from dbo.PDACCOUNTSYSTEM where ID = @PDACCOUNTSYSTEMID;

    set @MESSAGE = 'In account system "' + @ACCTSYSNAME + '", a mapping does not exist for Office: '+ @OFFICENAME + isnull(', Revenue type: '+ @REVENUETYPENAME,'');

    raiserror(@MESSAGE, 13, 1);
  end

  return 0;
end