UFN_REVENUE_GENERATEGLACCOUNT_STANDARD_5

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REVENUEINFORMATION xml IN
@REVENUESPLITINFORMATION xml IN
@INFORMATIONSOURCECODE tinyint IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_REVENUE_GENERATEGLACCOUNT_STANDARD_5
            (
                @REVENUEINFORMATION xml,
                @REVENUESPLITINFORMATION xml,
                @INFORMATIONSOURCECODE tinyint, -- 0 revenue tables, 1 revenue batch tables

                @CURRENTAPPUSERID uniqueidentifier = null
            )
            returns @AccountNumbers table 
                (
                    AccountString nvarchar(100),
                    ProjectCode varchar(255),
                    TransactionTypeCode tinyint,
                    AccountID uniqueidentifier,
                    ErrorMessage varchar(max),
                    MappedValues xml
                )
            as
            begin

              declare @REVENUEID uniqueidentifier;
              declare @REVENUETRANSACTIONTYPECODE tinyint;
              declare @PAYMENTMETHODCODE tinyint;

              select
              top 1  @REVENUEID = T.c.value('(ID)[1]', 'uniqueidentifier'),  
                @REVENUETRANSACTIONTYPECODE = T.c.value('(TRANSACTIONTYPECODE)[1]', 'int'), 
                @PAYMENTMETHODCODE = T.c.value('(PAYMENTMETHODCODE)[1]', 'int')
              from @REVENUEINFORMATION.nodes('/REVENUEINFORMATION/ITEM') T(c);

              declare @REVENUESPLITID uniqueidentifier;
              declare @REVENUESPLITTYPECODE tinyint;
              declare @APPLICATIONCODE tinyint;
              declare @DESIGNATIONID uniqueidentifier;

              select
                  @REVENUESPLITID = T.c.value('(ID)[1]', 'uniqueidentifier'), 
                  @REVENUESPLITTYPECODE = T.c.value('(TYPECODE)[1]', 'int'),
                  @APPLICATIONCODE = T.c.value('(APPLICATIONCODE)[1]', 'int'),
                  @DESIGNATIONID = T.c.value('(DESIGNATIONID)[1]', 'uniqueidentifier')
              from @REVENUESPLITINFORMATION.nodes('/REVENUESPLITINFORMATION/ITEM') T(c)

              -- Because of custom tables and GL mapping validation for batch we need to check if the given information source is supported before continuing.

              if (@INFORMATIONSOURCECODE != 0) -- Revenue tables are always supported so we can skip checking...

              begin
                  if (dbo.UFN_REVENUE_GENERATEGLACCOUNT_SUPPORTSINFORMATIONSOURCE(@INFORMATIONSOURCECODE) = 0)  -- If the information source is not supported we need to stop.

                  begin
                      insert into @AccountNumbers (AccountString, ProjectCode, TransactionTypeCode, AccountID ,ErrorMessage)
                      values
                        ('', '', null, null, 'Information source is not supported by GL mapping.');

                      return;
                  end
              end

              declare @ParamTable table 
                  (
                      ID uniqueidentifier, 
                      TableID uniqueidentifier, 
                      RowID uniqueidentifier, 
                      ColNumber int
                      FriendlyTableName nvarchar(255)
                  );

              declare @MappedValues UDT_MAPPEDVALUESFORGETACCOUNTS_2;
              declare @OfficeNumber integer;

              set @OfficeNumber = dbo.UFN_PDACCOUNTCODEMAPPING_GETOFFICENUMBER_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE,  @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @CURRENTAPPUSERID);
              if @OfficeNumber != 3
                set @APPLICATIONCODE = nullif(@APPLICATIONCODE,0);

              declare @AccountSystemID uniqueidentifier;
              declare @AcctSysName varchar(50);
              declare @DefaultAccountID uniqueidentifier;
              declare @DefaultAccountNumber nvarchar(100)

              if @INFORMATIONSOURCECODE = 0
                select @AccountSystemID = PDACCOUNTSYSTEMID from dbo.FINANCIALTRANSACTION where ID = @REVENUEID
              else
                set @AccountSystemID = dbo.UFN_PDACCOUNT_GETACCOUNTSYSTEMID_3(@REVENUEINFORMATION);

              if @AccountSystemID is null 
                set @AccountSystemID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';

              select @AcctSysName = PDACCOUNTSYSTEM.NAME,
                @DefaultAccountID = GLACCOUNT.ID,
                @DefaultAccountNumber = GLACCOUNT.ACCOUNTNUMBER
              from dbo.PDACCOUNTSYSTEM left join dbo.GLACCOUNT on PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID = GLACCOUNT.ID
              where PDACCOUNTSYSTEM.ID = @AccountSystemID;


              -- When performing batch validation, if the suspense (default) accounts are turned on

              -- then skip validation, as no errors will ever be presented to the user. In the future,

              -- batch could show a warning indicator when a transaction is not mapped and will fall

              -- into the suspense account for future reconciliation

              if @INFORMATIONSOURCECODE = 1 and @DefaultAccountID is not null and @DefaultAccountNumber is not null
                return;                

              declare @RowID uniqueidentifier = '99999999-9999-9999-9999-999999999999';

              with CTE (TableID, FRIENDLYTABLENAME, SEGMENTTYPECODE)
              as 
              (select distinct isnull(tables2.TABLEID, PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID) as TableID, isnull(tables2.FRIENDLYTABLENAME, PDACCOUNTTABLESAVAILABLEFORSEGMENT.FRIENDLYTABLENAME) as FRIENDLYTABLENAME, isnull(tableS2.SEGMENTTYPECODE,PDACCOUNTTABLESAVAILABLEFORSEGMENT.SEGMENTTYPECODE) as SEGMENTTYPECODE
              from dbo.PDACCOUNTSTRUCTURE inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT on PDACCOUNTSTRUCTURE.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = PDACCOUNTTABLESAVAILABLEFORSEGMENT.ID 
              left join dbo.PDCOMPOSITESEGMENTTABLELIST on PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID = PDCOMPOSITESEGMENTTABLELIST.PDCOMPOSITESEGMENTID 
              left join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT tables2 on PDCOMPOSITESEGMENTTABLELIST.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = tables2.ID
              where PDACCOUNTSTRUCTURE.PDACCOUNTSYSTEMID = @AccountSystemID and (PDACCOUNTSTRUCTURE.SEGMENTTYPE = 3 or PDACCOUNTSTRUCTURE.SEGMENTTYPE = 4))
              insert into @ParamTable (ID, TableID, RowID, ColNumber, FriendlyTableName)
              select @RowID, TABLEID, case when @OfficeNumber = 5 or @APPLICATIONCODE = 87 then @RowID else V1.TablePK end, row_number() over (order by FRIENDLYTABLENAME), FRIENDLYTABLENAME
              from
              (select TABLEID, 
              case TABLEID
                when 'A299FF27-A88C-4286-B59A-F818E50538DC' then dbo.UFN_PDACCOUNT_GETCONSTITUENCY_3(@REVENUEID, @INFORMATIONSOURCECODE, @REVENUEINFORMATION)
                when '3EF5D061-5692-40F3-B8AD-1367A8C6FAD5' then dbo.UFN_PDACCOUNT_GETEVENTID_3(@REVENUESPLITINFORMATION)
                when 'B328E14B-9269-4B6C-BF93-7B10C70F71C3' then dbo.UFN_PDACCOUNT_GETEVENTCATEGORY_3(@REVENUESPLITINFORMATION)
                when '3298E2CE-EF37-4681-AC12-050979B6C5F3' then dbo.UFN_PDACCOUNT_GETAPPEALID_3(@REVENUEINFORMATION)
                when '5FFF709E-142A-4997-B869-1331B1791108' then dbo.UFN_PDACCOUNT_GETMEMBERSHIPLEVEL_3(@REVENUESPLITINFORMATION)
                when '130FB361-1C09-4884-830D-E6DA624635AD' then dbo.UFN_PDACCOUNT_GETCAMPAIGN_3(@REVENUESPLITINFORMATION)
                when 'AEBA8FD5-42B6-4D37-93EB-8916BEC1385A' then @DESIGNATIONID
                when '35ACADB7-4D01-438A-8A3B-08366EB680DE' then dbo.UFN_PDACCOUNT_GETCHANNELCODE_3(@REVENUEINFORMATION)
                when '13BD89C4-47B3-48FF-9044-4F07D0D0664D' then dbo.UFN_PDACCOUNT_GETFUNDRAISINGPURPOSE_3(@REVENUESPLITINFORMATION)
                when '20204242-BA0F-4788-8A88-B235946EBECF' then dbo.UFN_PDACCOUNT_GETPURPOSECATEGORY_3(@REVENUESPLITINFORMATION)
  when '1278C0FF-EC92-4DF6-B51F-5E2F17C43298' then dbo.UFN_PDACCOUNT_GETPROGRAM_3(@REVENUESPLITINFORMATION)
                when '5B93DEF5-AAA7-482E-B8F7-169EE0DAA53D' then dbo.UFN_PDACCOUNT_GETREVENUECATEGORY_3(@REVENUESPLITINFORMATION)
                when '9917A3F1-AB96-45EB-88AD-0AECAFE2C3B1' then dbo.UFN_PDACCOUNT_GETAPPLICATIONSEGMENT_3(@REVENUESPLITINFORMATION)
                when 'BDC9B454-976E-4DAF-B6CF-1416CFC3392C' then dbo.UFN_PDACCOUNT_GETSITEID_3(@REVENUESPLITID, @APPLICATIONCODE, @REVENUESPLITINFORMATION)
                when '55B0FAF8-DFD3-4869-A9E7-3747A32206D1' then dbo.UFN_PDACCOUNT_GETMERCHANDISEDEPARTMENT_3(@REVENUESPLITINFORMATION)
              end as TablePK, FRIENDLYTABLENAME
              from CTE where SEGMENTTYPECODE = 1 or SEGMENTTYPECODE = 2
              union 
              select CTE.TABLEID, ROWID, tf.FRIENDLYTABLENAME 
              from dbo.UFN_PDACCOUNT_GETCUSTOMTABLESFORSEGMENT_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE,  @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @CURRENTAPPUSERID) tf
              inner join CTE on tf.TABLEID = CTE.TABLEID and CTE.SEGMENTTYPECODE = 2) V1

              if (select count(*) from @ParamTable) = 0 
                insert into @ParamTable (ID, TableID, RowID, ColNumber) values (@RowID ,null,null,1)

              insert into @MappedValues(ID, PDAccountCodeMapOfficeID, RevenueTypeID, ApplicationTypeID, PaymentMethodID, SubTypeID,
              PDAccountSystemID,
              Segment02TableID, Segment02ID, Segment03TableID, Segment03ID, Segment04TableID, Segment04ID, Segment05TableID, Segment05ID, Segment06TableID, Segment06ID, Segment07TableID, Segment07ID, Segment08TableID, Segment08ID, Segment09TableID, Segment09ID,Segment10TableID, Segment10ID, Segment11TableID, Segment11ID, Segment12TableID, Segment12ID, Segment13TableID, Segment13ID, Segment14TableID, Segment14ID, Segment15TableID, Segment15ID, Segment16TableID, Segment16ID, Segment17TableID, Segment17ID, Segment18TableID, Segment18ID, Segment19TableID, Segment19ID, Segment20TableID, Segment20ID, Segment21TableID, Segment21ID, Segment22TableID, Segment22ID, Segment23TableID, Segment23ID, Segment24TableID, Segment24ID, Segment25TableID, Segment25ID, Segment26TableID, Segment26ID, Segment27TableID, Segment27ID, Segment28TableID, Segment28ID, Segment29TableID, Segment29ID, Segment30TableID, Segment30ID)
              select Pvt1.ID, 
              DBO.UFN_PDACCOUNTCODEMAPPING_GETOFFICE_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE, @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @OFFICENUMBER, @CURRENTAPPUSERID), 
              DBO.UFN_PDACCOUNTCODEMAPPING_GETREVENUETYPE_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE, @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @OFFICENUMBER, @CURRENTAPPUSERID),
              DBO.UFN_PDACCOUNTCODEMAPPING_GETAPPLICATIONTYPE_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE, @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @OFFICENUMBER, @CURRENTAPPUSERID), 
              DBO.UFN_PDACCOUNTCODEMAPPING_GETPAYMENTMETHODTYPE_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE, @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @OFFICENUMBER, @CURRENTAPPUSERID), 
              DBO.UFN_PDACCOUNTCODEMAPPING_GETSUBTYPE_2(@REVENUEID, @REVENUESPLITID, @INFORMATIONSOURCECODE, @REVENUETRANSACTIONTYPECODE, @REVENUESPLITTYPECODE, @APPLICATIONCODE, @PAYMENTMETHODCODE, @DESIGNATIONID, @OFFICENUMBER, @CURRENTAPPUSERID), 
              @AccountSystemID,
              Pvt1.[1], Pvt2.[1], Pvt1.[2], Pvt2.[2], Pvt1.[3], Pvt2.[3], Pvt1.[4], Pvt2.[4], Pvt1.[5], Pvt2.[5], Pvt1.[6], Pvt2.[6], Pvt1.[7], Pvt2.[7], Pvt1.[8], Pvt2.[8], Pvt1.[9], Pvt2.[9], Pvt1.[10], Pvt2.[10], Pvt1.[11], Pvt2.[11], Pvt1.[12], Pvt2.[12], Pvt1.[13], Pvt2.[13], Pvt1.[14], Pvt2.[14], Pvt1.[15], Pvt2.[15], Pvt1.[16], Pvt2.[16], Pvt1.[17], Pvt2.[17], Pvt1.[18], Pvt2.[18], Pvt1.[19], Pvt2.[19], Pvt1.[20], Pvt2.[20], Pvt1.[21], Pvt2.[21], Pvt1.[22], Pvt2.[22], Pvt1.[23], Pvt2.[23], Pvt1.[24], Pvt2.[24], Pvt1.[25], Pvt2.[25], Pvt1.[26], Pvt2.[26], Pvt1.[27], Pvt2.[27], Pvt1.[28], Pvt2.[28], Pvt1.[29], Pvt2.[29]
              from
              (select ID, convert(char(36),TableID) as TableID, ColNumber
              from @ParamTable) As Source1
              PIVOT
                  (MAX(TableID) for ColNumber in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29]) ) as Pvt1
              INNER JOIN
              (select ID, convert(char(36),RowID) as RowID, ColNumber
              from @ParamTable) as Source2
              PIVOT
                  (MAX(RowID) for Colnumber in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29]) ) as Pvt2
              on Pvt1.ID = Pvt2.ID    --Currently this is meaningless since there's only a single row being generated at a time


              declare @x xml = (select tv1.* from @MappedValues tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
              declare @HashValue uniqueidentifier = dbo.UFN_GLACCOUNT_MD5_HASH_SEGMENTS(@x)

              insert into @AccountNumbers (AccountString, ProjectCode, TransactionTypeCode, AccountID, ErrorMessage, MappedValues)
              select distinct GLACCOUNT.ACCOUNTNUMBER, '', TRANSACTIONTYPECODE, GLACCOUNTID, ERRORMESSAGE, convert(nvarchar(max),@x)
              from dbo.PDACCOUNTLOOKUPCACHE inner join dbo.GLACCOUNT on PDACCOUNTLOOKUPCACHE.GLACCOUNTID = GLACCOUNT.ID
              where PDACCOUNTLOOKUPCACHE.MD5HASHCODE = @HashValue and PDACCOUNTLOOKUPCACHE.MAPPEDVALUES = convert(nvarchar(max),@x)

              if @@rowcount != 2
              begin

                delete from @AccountNumbers   --clear out incomplete results obtained using the hashcode


                declare @SegmentValues UDT_GLACCOUNT_SEGMENTVALUES;
                insert into @SegmentValues
                select s.ID, s.PDAccountStructureID, s.PDAccountSegmentValueID, s.TransactionType, s.SegType
                from UFN_GLACCOUNT_GETSEGMENTWORKTABLE(@mappedvalues) s

                --Assume no errors

                declare @AccountValues table (ID uniqueidentifier, DEBITGLACCOUNTSID uniqueidentifier, DEBITGLACCOUNTNUMBER varchar(100), CREDITGLACCOUNTSID uniqueidentifier, CREDITGLACCOUNTNUMBER varchar(100), ACCOUNTNUMBERERROR tinyint)
                insert into @AccountValues (ID, DEBITGLACCOUNTSID, DEBITGLACCOUNTNUMBER, CREDITGLACCOUNTSID, CREDITGLACCOUNTNUMBER, ACCOUNTNUMBERERROR)
                select ID, DEBITGLACCOUNTSID, DEBITGLACCOUNTNUMBER, CREDITGLACCOUNTSID, CREDITGLACCOUNTNUMBER, ACCOUNTNUMBERERROR
                from dbo.UFN_GLACCOUNT_GETACCOUNTSFROMPARAMETERS_3(@MappedValues, @SegmentValues

                if exists (select 1 from @AccountValues where ACCOUNTNUMBERERROR != 0)  --An error exists so do all the stuff to give nice error messages

                BEGIN
                  if exists(select 1 from dbo.PDACCOUNTSTRUCTURE where ISCONSTANTVALUE = 1 and PDACCOUNTSYSTEMID = @AccountSystemID)
                    insert into @ParamTable(ID, TableID, RowID, ColNumber, FriendlyTableName)
                    select '99999999-9999-9999-9999-999999999999', A.TABLEID, S.ID, 0, null
                    from dbo.PDACCOUNTSTRUCTURE S
                    inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT A on A.ID = S.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                    where ISCONSTANTVALUE = 1 and PDACCOUNTSYSTEMID = @AccountSystemID

                  declare @MissingMappings table 
                  (
                    ID uniqueidentifier, 
                    SegmentName nvarchar(100),
                    TableID uniqueidentifier, 
                    RowID uniqueidentifier, 
                    FriendlyTableName nvarchar(255)
                  );

                  --Get a list of segments that are actually missing a value so we can provide the user with a better error message

                  insert into @MissingMappings (ID, SegmentName, TableID, RowID, FriendlyTableName)
                  select P.ID, S.[DESCRIPTION], P.TableID, P.RowID, P.FriendlyTableName
                  from dbo.PDACCOUNTSTRUCTURE S
                  left join (select distinct T.PDAccountStructureID, T.PDAccountSegmentValueID
                    from @SegmentValues T
                    where T.SegType != 1) SWT on SWT.PDAccountStructureID = S.ID
                  inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT A on A.ID = S.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                  left join dbo.PDCOMPOSITESEGMENTTABLELIST L on A.TABLEID = L.PDCOMPOSITESEGMENTID 
                  left join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT A2 on L.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = A2.ID
                  inner join @ParamTable P on P.TableID = COALESCE(A2.TABLEID, A.TABLEID, S.ID) 
                  where (SWT.PDAccountStructureID is null or SWT.PDAccountSegmentValueID is null) and (S.SEGMENTTYPE = 3 or S.SEGMENTTYPE = 4) and S.PDACCOUNTSYSTEMID = @AccountSystemID


                  insert into @AccountNumbers (AccountString, ProjectCode, TransactionTypeCode, AccountID, ErrorMessage, MappedValues)
                  select  AccountString, '', case TranTypeCode when 'DEBITGLACCOUNTNUMBER' then 0 else 1 end,  case TranTypeCode when 'DEBITGLACCOUNTNUMBER' then DEBITGLACCOUNTSID else CREDITGLACCOUNTSID end , ErrorMessage ,
                  (select tv1.*, ErrorMessage as ERRORMESSAGE, ACCOUNTNUMBERERROR as ERRORCODE, 0 as HASHVALUE, @HashValue as MD5HASHVALUE from @MappedValues tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64) 
                  from (
                  select ID, case when DEBITGLACCOUNTSID IS null then coalesce(@DefaultAccountNumber, '') else DEBITGLACCOUNTNUMBER end as DEBITGLACCOUNTNUMBER
                        , case when CREDITGLACCOUNTSID IS null then coalesce(@DefaultAccountNumber, '') else CREDITGLACCOUNTNUMBER end as CREDITGLACCOUNTNUMBER
                        , isnull(DEBITGLACCOUNTSID,@DefaultAccountID) as DEBITGLACCOUNTSID
                        , isnull(CREDITGLACCOUNTSID,@DefaultAccountID) as CREDITGLACCOUNTSID, 
                    case ACCOUNTNUMBERERROR
                      when 0 then ''
                      when 1 then (select 'In account system "'+ @AcctSysName + '", a mapping does not exist for Office: '+t1.NAME+isnull(', Revenue type: '+t2.TYPENAME,'')
                          +isnull(', Application type: '+t3.TYPENAME,'')+isnull(', Payment method type: '+t4.TYPENAME,'')
                      +case when nullif(MV.SubTypeID,'00000000-0000-0000-0000-000000000000') is not null then
                        coalesce(', Gift-in-kind subtype: '+t6.DESCRIPTION,
                            ', Credit card subtype: '+t5.DESCRIPTION,
                            ', Property subtype: '+t7.DESCRIPTION,
                            ', Other subtype: '+t8.DESCRIPTION,
                            ', Pledge subtype: '+t9.NAME,
                            ', Benefit subtype: '+t10.NAME,
                            ', Resource category subtype: '+t11.DESCRIPTION,
                            ', Currency subtype: '+t12.NAME,
                            ', Program: ' + t13.NAME,
                            ', Fee: ' + t14.NAME,
                            ', Tax: ' + t15.NAME,
                            ', Facility: ' + t16.NAME,
                            ', Merchandise department: ' + t17.NAME,
      ', Unknown subtype')
                      else
                        ', Subtype not specified'
                      end
                        from @MappedValues MV inner join dbo.PDACCOUNTCODEMAPOFFICE t1 on MV.PDAccountCodeMapOfficeID = t1.ID
                        left join dbo.PDACCOUNTCODEMAPREVENUETYPE t2 on MV.RevenueTypeID = t2.ID
                        left join dbo.PDACCOUNTCODEMAPAPPLICATIONTYPE t3 on MV.ApplicationTypeID = t3.ID
                        left join dbo.PDACCOUNTCODEMAPPAYMENTMETHODTYPE t4 on MV.PaymentMethodID = t4.ID
                        left join dbo.CREDITTYPECODE t5 on MV.SubTypeID = t5.ID
                        left join dbo.GIFTINKINDSUBTYPECODE t6 on MV.SubTypeID = t6.ID
                        left join dbo.PROPERTYSUBTYPECODE t7 on MV.SubTypeID = t7.ID
                        left join dbo.OTHERPAYMENTMETHODCODE t8 on MV.SubTypeID = t8.ID
                        left join dbo.PLEDGESUBTYPE t9 on MV.SubTypeID = t9.ID
                        left join dbo.BENEFIT t10 on MV.SubTypeID = t10.ID
                        left join dbo.RESOURCECATEGORYCODE t11 on MV.SubTypeID = t11.ID
                        left join dbo.CURRENCY t12 on MV.SubTypeID = t12.ID
                        left join dbo.PROGRAM t13 on MV.SubTypeID = t13.ID
                        left join dbo.FEE t14 on MV.SubTypeID = t14.ID
                        left join dbo.TAX t15 on MV.SubTypeID = t15.ID
                        left join dbo.EVENTLOCATION t16 on MV.SubTypeID = t16.ID
                        left join dbo.MERCHANDISEDEPARTMENT t17 on MV.SubTypeID = t17.ID
                        where MV.ID = a.ID)
                      when 2 then 'In account system "'+ @AcctSysName + '", account segments have not been defined for the segment values: ' + 
                                replace(replace(substring((select '; Segment ''' + T.SegmentName + ''': ' + replace(replace(substring((select distinct ', ' + case when t10.FriendlyTableName is null then '' else t10.FriendlyTableName+ ': ' end 
                                +coalesce(PDACCOUNTSEGMENTMAPPINGVIEW.LONGDESCRIPTION, PDCOMPOSITESEGMENTMAPPINGVIEW.LONGDESCRIPTION, case when S.ID is not null then '<Constant value>' else null end, '<Not used>')
                                  from @MissingMappings t10
                                  left join dbo.PDACCOUNTSEGMENTMAPPINGVIEW on t10.RowID = PDACCOUNTSEGMENTMAPPINGVIEW.LONGDESCRIPTIONID
                                  left join dbo.PDCOMPOSITESEGMENTMAPPINGVIEW on t10.RowID = PDCOMPOSITESEGMENTMAPPINGVIEW.LONGDESCRIPTIONID
                                  left join dbo.PDACCOUNTSTRUCTURE S on t10.RowID = S.ID
                                  where t10.ID = T.ID and t10.SegmentName = T.SegmentName
                                  for xml path('')
                                  ), 3, 4000),'&lt;','<'),'&gt;','>')
                                from @MissingMappings T
                                where T.ID = a.ID
                                group by T.ID, T.SegmentName
                                for xml path('')), 3, 4000),'&lt;','<'),'&gt;','>')
                      when 3 then 'In account system "' + @AcctSysName + '", the account "' +  case when DEBITGLACCOUNTSID IS null then DEBITGLACCOUNTNUMBER else CREDITGLACCOUNTNUMBER end  + '" does not exist.'
                      end as ErrorMessage
                      ,ACCOUNTNUMBERERROR
                  from @AccountValues a) p 
                  unpivot
                      (AccountString FOR TranTypeCode in (DEBITGLACCOUNTNUMBER, CREDITGLACCOUNTNUMBER) ) as unpvt           
              end
              else    --No error, so I don't need the nice error message

                insert into @AccountNumbers (AccountString, ProjectCode, TransactionTypeCode, AccountID, ErrorMessage, MappedValues)
                select  AccountString, '', case TranTypeCode when 'DEBITGLACCOUNTNUMBER' then 0 else 1 end,  case TranTypeCode when 'DEBITGLACCOUNTNUMBER' then DEBITGLACCOUNTSID else CREDITGLACCOUNTSID end , '' ,
                (select tv1.*, '' as ERRORMESSAGE, ACCOUNTNUMBERERROR as ERRORCODE, 0 as HASHVALUE, @HashValue as MD5HASHVALUE from @MappedValues tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64) 
                from (
                select ID, case when DEBITGLACCOUNTSID IS null then coalesce(@DefaultAccountNumber, '') else DEBITGLACCOUNTNUMBER end as DEBITGLACCOUNTNUMBER
                      , case when CREDITGLACCOUNTSID IS null then coalesce(@DefaultAccountNumber, '') else CREDITGLACCOUNTNUMBER end as CREDITGLACCOUNTNUMBER
                      , isnull(DEBITGLACCOUNTSID,@DefaultAccountID) as DEBITGLACCOUNTSID
                      , isnull(CREDITGLACCOUNTSID,@DefaultAccountID) as CREDITGLACCOUNTSID
                  ,'' as ErrorMessage
                        ,ACCOUNTNUMBERERROR
                from @AccountValues a) p 
                unpivot
                    (AccountString FOR TranTypeCode in (DEBITGLACCOUNTNUMBER, CREDITGLACCOUNTNUMBER) ) as unpvt      

            end
          return
        end