Insert Into dbo.Scripts Values('General Hotfix v5.3.21 Cumulative',GetDate(), '|~|') Update ApplicationSetting Set Setting = '5.3.21' Where SettingID = 1 --Fixed in this script --ZD 9020 - STP error with ' in job name --ZD 9063 - EstCompletionDate populating for 5602 PL --SM STP country validation and collation added --ZD 9041 - PAYE/NI appearing on abstract --JO Cannot delete standalone user admin roles /* Changeset Proc Notes 5.3.20 881 None update tasks and mergetemplate file names from RATA to ROCAP 923 repsp_CreditorClaimsByType Updated the report to show fully admitted excluded employee claims 930 repsp_UKBatchDetailListing Added HeaderBSB and HeaderAccountNo 933 repsp_UKBatchDetailListing Added PayeeCity, PayeeState, PayeePCode and PayeeCountry to the report data 937 repsp_Superstream Removed the red validation for Clearing House saffs where there were no remittances in the report period 937 repsp_EmployeePaymentSummary Exclude FEG Direct payments from the @PriorYearPayments 07/08/2019 repfn_EmployeePaymentSummary EmployeeWagesRate to include Hourly rates 07/08/2019 Hotfix 20190807 set FK_CreditorClaim_creditor to Cascade [REMOVED] 09/08/2019 repsp_STP Removed employees without payemnts in the period from full year submit - removed FY submit flagged as not submit from validation 12/08/2019 repsp_employeePaymentdetail the employee termination date wasnt populating properly. I have updated all e.EndDate to e.terminationDate 22/08/2019 VSTS 1277 - STP lodgement saving in root of lodgements folder 22/08/2019 ufnXMLEncode Added back & <> % ZD 9288 15/10/2019 data Add TFN lookup 15/10/2019 TFN Do not post TFN to portal 5.3.21 18/10/2019 repsp_EmployeePaymentDetail Si Report was including Super Remittances created using the Super remittance wizard 18/10/2019 repsp_EmployeePaymentDetail Si Report was double counting Super when it was a Super Only dividend 18/10/2019 repsp_EmployeePaymentDetail Si Report was excluding Super deducted from an RILN dividend payment 18/10/2019 repsp_EmployeePaymentSummary Si Super was being doubled for super only dividends 18/10/2019 repsp_EmployeePaymentSummary Si Super deducted from RILN was being excluded 25/10/2019 repsp_STP JO Country validating when country not matched, but country not entered 31/10/2019 repsp_STP JO Issue with zero length address on import - validation 31/10/2019 repsp_EmployeePaymentSummary JO As above 31/10/2019 Data update JO Set paid received account flags on accounts missing the settings */ if exists (select * from sysobjects where id = object_id(N'[dbo].[gensp_UserAdminRoleDelete]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[gensp_UserAdminRoleDelete] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.gensp_UserAdminRoleDelete @UserAdminRoleID Int ,@TS uniqueIdentifier AS /* Author: AUTOGENERATED Date: 03 Nov 2003 Purpose: Notes: Revision History: */ DECLARE @Error int DECLARE @Rowcount int If Exists(SELECT * FROM [dbo].[UserAdminRole] WHERE [TS] = @TS) BEGIN DELETE FROM [dbo].[UserAdminRole] WHERE [TS] = @TS RETURN @@ERROR END ELSE BEGIN DELETE FROM [dbo].[UserAdminRole] WHERE [UserAdminRoleID] = @UserAdminRoleID AND [TS] = @TS SELECT @Error = @@ERROR, @Rowcount = @@Rowcount IF @Rowcount = 0 RETURN 5 ELSE RETURN @Error END GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].gensp_UserAdminRoleDelete TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_RecPayAbstract]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_RecPayAbstract] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_RecPayAbstract @AdminID Int ,@AdminTypeID Int = Null ,@AdminStartDate DateTime ,@FromDate DateTime ,@ToDate DateTime ,@AccountInClause Text = Null ,@NoInterEstateTfrs Bit = 0 ,@InclFlaggedTrans Bit = 0 ,@ReportGross Bit = 0 ,@SplitResults Bit = 0 ,@AsPosition Bit = 0 ,@PandL Money = 0 OUTPUT ,@AsAccrual Bit = 0 ,@InclNotes Bit = 0 ,@ForExAdmin Bit = 0 AS /* Author: Jonathan Osborne Date: 15 Jan 2004 Purpose: Notes: Revision History: SM 6/1/2015 SET ANSI_WARNINGS OFF and then off again at the end */ SET NOCOUNT ON SET ANSI_WARNINGS OFF DECLARE @IsNotTaxReg Bit DECLARE @PeriodPandL Money DECLARE @PostAppSales Money DECLARE @PeriodPostAppSales Money DECLARE @PandLProj Money DECLARE @VATOutput Money DECLARE @PostAppExp Money DECLARE @PeriodPostAppExp Money DECLARE @VATInput Money DECLARE @TaxLiab Money DECLARE @TaxRec Money DECLARE @PeriodTaxRec Money DECLARE @TaxPay Money DECLARE @PeriodTaxPay Money DECLARE @TransferDesc Varchar(100) DECLARE @CurrAdminTypeID Int DECLARE @ExAdminTypeId Int DECLARE @HasHistory Bit DECLARE @TransferDisplayOrder Int DECLARE @TaxDesc varchar(3) DECLARE @Notes nVarchar(2000) DECLARE @AccValAdminTypeID Int DECLARE @AccVal Table ( AccountID Int ,Value Money ,Value1 Money ,Value2 Money ) SELECT @CurrAdminTypeID = AdminTypeID ,@IsNotTaxReg = IsNotTaxReg ,@HasHistory = IsNull(HasHistory,0) FROM dbo.Admin WHERE AdminID = @AdminID IF @HasHistory = 1 SELECT @ExAdminTypeId = AdminTypeID FROM dbo.AdminTypeHistory WHERE AdminID = @AdminID IF @InclNotes = 1 SELECT @Notes = PropertyValue FROM dbo.CustomProperty cp INNER JOIN dbo.Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 904 DECLARE @PAYEInDesc Varchar(50) DECLARE @PAYEOutDesc Varchar(50) IF dbo.uFnSystemLocation() = 3 BEGIN SET @TaxDesc = 'VAT' SET @PAYEInDesc = 'PAYE / NI Receivable (Payable)' SET @PAYEOutDesc = 'PAYE / NI Payable (Receivable)' END ELSE BEGIN SET @TaxDesc = 'GST' SET @PAYEInDesc = 'PAYG / Super Receivable (Payable)' SET @PAYEOutDesc = 'PAYG / Super Payable (Receivable)' END IF @CurrAdminTypeID = @AdminTypeID --For current job stage BEGIN SELECT @TransferDesc = 'Transfers from ' + at.AppointeeDescription ,@TransferDisplayOrder = 950 FROM dbo.AdminTypeHistory ath INNER JOIN dbo.AdminType at ON at.AdminTypeID = ath.AdminTypeID WHERE ath.AdminID = @AdminID AND ath.AdminTypeHistoryID = (SELECT Max(AdminTypeHistoryID) FROM dbo.AdminTypeHistory WHERE AdminID = ath.AdminID) END ELSE BEGIN SELECT @TransferDesc = 'Transfers to ' + AppointeeDescription ,@TransferDisplayOrder = 2100 FROM dbo.AdminType WHERE AdminTypeID = @CurrAdminTypeID END --Default the account values --To the current admin type IF @AdminTypeID Is Null SET @AccValAdminTypeID = @CurrAdminTypeID ELSE SET @AccValAdminTypeID = @AdminTypeID IF @HasHistory = 1 --Has history so use the current job types acc vals if they exist BEGIN IF EXISTS (SELECT * FROM dbo.AccountValue av INNER JOIN dbo.Account acc ON acc.accountID = av.AccountID WHERE acc.AdminID = @AdminID AND av.AdminTypeID = @CurrAdminTypeID AND av.ValueTypeID = 1) SET @AccValAdminTypeID = @AccValAdminTypeID ELSE --Use the prior job types acc vals SET @AccValAdminTypeID = @ExAdminTypeID END --Get the account values into a temporary table INSERT INTO @AccVal SELECT av.AccountID ,av.Value ,av.Value1 ,av.Value2 FROM dbo.AccountValue av INNER JOIN dbo.Account acc ON acc.accountID = av.AccountID WHERE acc.AdminID = @AdminID AND av.AdminTypeID = @AccValAdminTypeID AND av.ValueTypeID = 1 --Select @AccValAdminTypeID --Select * --from @AccVal --Temp table for data CREATE TABLE [dbo].[#SubEntry] ( [EntryID] Int ,[SubEntryID] Int ,[SourceSubEntryID] Int ,[EntryDate] DateTime ,[Payee] nVarchar(200) ,[AccountID] Int ,[Account] Varchar(200) ,[Memo] Varchar(2000) ,[ReportableTotal] Money ,[Tax] Money ,[Direction] int ,[EntryType] Smallint ,[CreditorDividendID] Int ,[AssetID] Int ,[LiabilityID] Int ) --CREATE INDEX IDX_SE on [dbo].[#SubEntry] (EntryID,SubEntryID,SourceSubEntryID,EntryDate,Payee,EntryType) IF @AsAccrual = 0 EXECUTE dbo.repsp_RecPayData @AdminID, @AdminTypeID, @AdminStartDate, @FromDate, @ToDate, @AccountInClause, 1, @NoInterEstateTfrs, @InclFlaggedTrans ELSE EXECUTE dbo.repsp_RecPayAccrual @AdminID, @AdminTypeID, @AdminStartDate, @FromDate, @ToDate --Select * from #SubEntry --return 0 DECLARE @SE Table ( AccountID Int ,Account Varchar(200) COLLATE Latin1_General_CI_AS NULL ,AccountGroupID Int ,PeriodTax Money ,PeriodTotal Money ,Tax Money ,Total Money ,IsFixedSecurity Bit ,IsSpecificSecurity Bit ,IsFloatingSecurity Bit ,SubsequentSecurity Int ,CreditorID Int ,EntryType Int NOT NULL ,AdminTypeID Int Null ) CREATE TABLE dbo.#AccBal ( AccountID Int ,Account Varchar(100) ,Balance Money ) DECLARE @Results Table ( DisplayGroup Int ,PositionGroup SmallInt ,AccountGroup Varchar(100) COLLATE Latin1_General_CI_AS NULL ,Account Varchar(250) COLLATE Latin1_General_CI_AS NULL ,AccountID Int ,RATAVAlue Money ,PeriodBalance Money ,Balance Money ,Tax Money ,PeriodTax Money ,DisplayOrder Int ,Category Int ,Reportable Bit ) DECLARE @RepBySE Table ( AccountID Int ,Amount Money ) DECLARE @AssetSecs Table ( AssetID Int ,HasFixedSecurity TinyInt ,HasSpecificSecurity TinyInt ,HasFloatingSecurity TinyInt ) DECLARE @AssetSecs2 Table ( AssetID Int ,HasFixedSecurity Bit ,HasSpecificSecurity Bit ,HasFloatingSecurity Bit ,SubsequentSecurity Int ) DECLARE @HasOverallFC Bit SET @HasOverallFC = 0 --Check if there is an overall floating charge IF Exists (SELECT SecurityID FROM dbo.Security sec Inner Join dbo.Creditor c ON c.CreditorID = sec.CreditorID WHERE c.AdminID = @AdminID AND sec.IsOverall = 1 AND sec.SecurityTypeID = 3) SET @HasOverallFC = 1 INSERT INTO @AssetSecs SELECT sa.AssetID ,HasFixedSecurity = CASE WHEN sec.SecurityTypeID = 1 THEN 1 ELSE 0 END ,HasSpecificSecurity = CASE WHEN sec.SecurityTypeID = 4 THEN 1 ELSE 0 END ,HasFloatingSecurity = CASE WHEN sec.SecurityTypeID = 3 OR @HasOverallFC = 1 THEN 1 ELSE 0 END FROM dbo.SecurityAsset sa INNER JOIN dbo.Security sec ON sec.SecurityID = sa.SecurityID INNER JOIN dbo.Creditor c ON c.CreditorID = sec.CreditorID WHERE c.AdminID = @AdminID IF @HasOverallFC = 1 INSERT INTO @AssetSecs SELECT AssetID ,0 ,0 ,1 FROM dbo.Asset WHERE AdminID = @AdminID AND AssetID Not In(SELECT AssetID FROM @AssetSecs) --Consolidate the assets INSERT INTO @AssetSecs2 SELECT AssetID ,Max(HasFixedSecurity) ,Max(HasSpecificSecurity) ,Max(HasFloatingSecurity) ,0 FROM @AssetSecs GROUP BY AssetID UPDATE @AssetSecs2 SET SubsequentSecurity = IsNull((SELECT CASE WHEN os.SecurityTypeID = 1 THEN 20 WHEN os.SecurityTypeID = 3 THEN 30 END FROM dbo.SecurityAsset osa Inner Join Security os On os.SecurityID = osa.SecurityID WHERE osa.AssetID = as2.AssetID AND osa.Rank = 2), CASE WHEN @HasOverallFC = 1 THEN 30 ELSE 40 END) FROM @AssetSecs2 as2 WHERE as2.HasSpecificSecurity = 1 --Calculate the trading profit SELECT @PostAppSales = IsNull(Sum( CASE WHEN acc.AccountGroupID = 5000 THEN (se.ReportableTotal - CASE WHEN @IsNotTaxReg = 0 THEN se.Tax ELSE 0 END) * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) ,@PeriodPostAppSales = IsNull(Sum( CASE WHEN acc.AccountGroupID = 5000 AND se.EntryDate >= @FromDate AND se.EntryDate <= @ToDate THEN (se.ReportableTotal - CASE WHEN @IsNotTaxReg = 0 THEN se.Tax ELSE 0 END) * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) ,@VATOutput = IsNull(Sum( CASE WHEN acc.AccountGroupID = 5000 THEN se.Tax * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) ,@PostAppExp = IsNull(Sum( CASE WHEN NOT acc.AccountGroupID = 5000 THEN (se.ReportableTotal - CASE WHEN @IsNotTaxReg = 0 THEN se.Tax ELSE 0 END) * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) ,@PeriodPostAppExp = IsNull(Sum( CASE WHEN NOT acc.AccountGroupID = 5000 AND se.EntryDate >= @FromDate AND se.EntryDate <= @ToDate THEN (se.ReportableTotal - CASE WHEN @IsNotTaxReg = 0 THEN se.Tax ELSE 0 END) * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) ,@VATInput = IsNull(Sum( CASE WHEN NOT acc.AccountGroupID = 5000 THEN se.Tax * CASE WHEN se.EntryType = 0 THEN 1 ELSE -1 END ELSE 0 END), 0) FROM dbo.#SubEntry se INNER JOIN dbo.Account acc ON se.AccountID = acc.AccountID INNER JOIN dbo.SubEntry se1 ON se1.SubEntryId = se.SourceSubEntryId INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID WHERE (acc.AdminID = @AdminID) AND ((@AdminTypeID Is Null) OR (se1.AdminTypeID = @AdminTypeID)) AND ( (acc.AccountGroupID In (5000,6000,6020,6030)) --Trading Revenue and expense OR (acc.AccountGroupID In(3042,4005) AND se.SubEntryID = se.SourceSubEntryID) --trading a/r a/p unallocated ) AND (se.EntryDate <= @ToDate) SELECT @PandL = @PostAppSales + @PostAppExp ,@PeriodPandL = @PeriodPostAppSales + @PeriodPostAppExp --Get the P&L SOA Amounts SELECT @PandLProj = IsNull(SUM(Value),0) FROM dbo.AccountValue av INNER JOIN dbo.Account acc ON av.AccountID = acc.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID WHERE (acc.AdminID = @AdminID) AND (acc.AccountGroupID In (5000,6000,6020,6030)) AND (av.ValueTypeID = 1) --Get any bank and asset transfers into the job type If @AsPosition = 1 AND @ForExAdmin = 0 AND @AdminTypeID Is Not Null AND @AsAccrual=1 BEGIN INSERT INTO #SubEntry SELECT se.EntryID ,se.SubEntryID ,se.SubEntryID ,se.EntryDate ,se.Payee ,se.Account_AccountID ,acc.Description ,se.Memo ,se.ReportableTotal ,se.Tax ,se.Direction ,EntryType = CASE WHEN se.Direction = 1 THEN 0 ELSE 1 END ,se.CreditorDividendID ,se.AssetID ,se.LiabilityID FROM dbo.SubEntry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID WHERE ContextID = @AdminID AND IsNull(e.Flags,0) & 4 = 4 AND se.AdminTypeID = @AdminTypeID AND se.ReportableTotal <> 0 AND ag.AccountClassID = 3 END --Get all the rec pay sub entries INSERT INTO @SE ( AccountID ,Account ,AccountGroupID ,PeriodTax ,PeriodTotal ,Tax ,Total ,IsFixedSecurity ,IsSpecificSecurity ,IsFloatingSecurity ,SubsequentSecurity ,CreditorID ,EntryType ,AdminTypeID ) SELECT setmp.AccountID ,setmp.Account ,CASE WHEN se1.EntryType = 15 THEN 3110 WHEN @AsPosition = 0 AND se1.EntryType = 2 AND se1.Direction = 1 THEN 5050 WHEN @AsPosition = 0 AND se1.EntryType = 2 AND se1.Direction = -1 THEN 6050 WHEN @AsPosition = 1 AND se1.EntryType = 2 AND IsNull(e.Flags,0) & 4 = 0 AND se1.Direction = 1 THEN 5050 WHEN @AsPosition = 1 AND se1.EntryType = 2 AND IsNull(e.Flags,0) & 4 = 0 AND se1.Direction = -1 THEN 6050 ELSE acc.AccountGroupID END ,PeriodTax = Sum((setmp.Tax) * (CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) * (CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN 1 ELSE 0 END)) ,PeriodTotal = Sum((setmp.ReportableTotal - setmp.Tax) * (CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) * (CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN 1 ELSE 0 END)) ,Tax = Sum(setmp.Tax * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ,Total = Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal, setmp.Direction)) ,IsFixedSecurity = CASE WHEN IsNull(asec.HasFixedSecurity, 0) = 1 OR IsNull(asec2.HasFixedSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 128) = 0 THEN 1 ELSE 0 END ,IsSpecificSecurity = CASE WHEN IsNull(asec.HasSpecificSecurity, 0) = 1 OR IsNull(asec2.HasSpecificSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 256) = 0 THEN 1 ELSE 0 END ,IsFloatingSecurity = CASE WHEN @AsPosition = 1 THEN CASE WHEN IsNull(asec.HasFloatingSecurity, 0) = 1 OR IsNull(asec2.HasFloatingSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 512) = 0 THEN 1 ELSE 0 END ELSE 0 END ,SubsequentSecurity = CASE WHEN @AsPosition = 1 THEN CASE WHEN IsNull(asec.SubsequentSecurity,0) = 1 THEN 1 WHEN IsNull(asec2.SubsequentSecurity,0) = 1 THEN 1 END ELSE 0 END ,CreditorID = Null --CASE WHEN acc.AccountGroupID In (2010,2015) AND acc.CreditorClaimTypeID In(100,150) THEN se.CreditorID ELSE Null END ,CASE WHEN @ReportGross = 0 THEN CASE WHEN se1.EntryType = 15 THEN se1.EntryType ELSE dbo.uFnUKRecPaySummaryEntryType(ag.AccountClassID) END ELSE CASE WHEN se1.EntryType = 15 THEN se1.EntryType ELSE setmp.EntryType END END ,CASE WHEN @AdminTypeID Is Null AND IsNull(acc.Flags,0) & 2048 <> 0 THEN se1.AdminTypeID END FROM dbo.#SubEntry setmp INNER JOIN dbo.SubEntry se ON se.SubEntryID = setmp.SourceSubEntryID AND se.ContextID = @AdminID INNER JOIN dbo.Entry e ON e.EntryID = setmp.EntryID INNER JOIN dbo.SubEntry se1 ON se1.SubEntryID = setmp.SubEntryID AND se1.ContextID = @AdminID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = @AdminID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN @AssetSecs2 asec ON asec.AssetID = setmp.AssetID LEFT OUTER JOIN @AssetSecs2 asec2 ON asec2.AssetID = se1.AssetID WHERE dbo.uFnIsTradingRecPay(acc.AccountGroupID) = 0 AND (IsNull(acc.Flags,0) & 64) = 0 AND NOT acc.AccountGroupID In (4010,4012,4013,4016,4017,4014,4020,4040,4060) AND ((@AsPosition = 0) OR (@AsPosition = 1 AND ((NOT se.EntryType = 2) OR (se.EntryType = 2 AND IsNull(e.Flags,0) & 4 = 4)))) GROUP BY acc.AccountID ,ag.AccountClassID ,setmp.AccountID ,setmp.Account --,CASE WHEN @ReportGross = 1 THEN setmp.EntryType ELSE 0 END ,CASE WHEN se1.EntryType = 15 THEN 3110 WHEN @AsPosition = 0 AND se1.EntryType = 2 AND se1.Direction = 1 THEN 5050 WHEN @AsPosition = 0 AND se1.EntryType = 2 AND se1.Direction = -1 THEN 6050 WHEN @AsPosition = 1 AND se1.EntryType = 2 AND IsNull(e.Flags,0) & 4 = 0 AND se1.Direction = 1 THEN 5050 WHEN @AsPosition = 1 AND se1.EntryType = 2 AND IsNull(e.Flags,0) & 4 = 0 AND se1.Direction = -1 THEN 6050 ELSE acc.AccountGroupID END ,CASE WHEN IsNull(asec.HasFixedSecurity, 0) = 1 OR IsNull(asec2.HasFixedSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 128) = 0 THEN 1 ELSE 0 END ,CASE WHEN IsNull(asec.HasSpecificSecurity, 0) = 1 OR IsNull(asec2.HasSpecificSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 256) = 0 THEN 1 ELSE 0 END ,CASE WHEN @AsPosition = 1 THEN CASE WHEN IsNull(asec.HasFloatingSecurity, 0) = 1 OR IsNull(asec2.HasFloatingSecurity, 0) = 1 OR NOT (IsNull(acc.Flags,0) & 512) = 0 THEN 1 ELSE 0 END ELSE 0 END ,CASE WHEN @AsPosition = 1 THEN CASE WHEN IsNull(asec.SubsequentSecurity,0) = 1 THEN 1 WHEN IsNull(asec2.SubsequentSecurity,0) = 1 THEN 1 END ELSE 0 END ,CASE WHEN @ReportGross = 0 THEN CASE WHEN se1.EntryType = 15 THEN se1.EntryType ELSE dbo.uFnUKRecPaySummaryEntryType(ag.AccountClassID) END ELSE CASE WHEN se1.EntryType = 15 THEN se1.EntryType ELSE setmp.EntryType END END ,CASE WHEN @AdminTypeID Is Null AND IsNull(acc.Flags,0) & 2048 <> 0 THEN se1.AdminTypeID END --If @ForExAdmin = 0 --begin -- Select * -- from @SE -- End /* Exec dbo.repsp_CurrentPosition @AdminID=1032, @AdminTypeID=10, @AsAtDate='20190627', @AsAccrual=0 Exec dbo.repsp_CurrentPosition @AdminID=1032, @AdminTypeID=10, @AsAtDate='20190627' Exec dbo.repsp_CurrentPosition @AdminID=1032, @AdminTypeID=6, @AsAtDate='20190627' */ --Where EntryID = 15679 --JO 9/5/18 --If this is for the position then adjust any lease asset payout --NOTE: Not required but leave for future reference --If @AsPosition = 1 -- BEGIN -- DECLARE @LeaseP Table(AccountID Int, AssetID Int, Payout Money) -- INSERT -- INTO @LeaseP -- SELECT setmp.AccountID, setmp.AssetID, a.PurchasedFor -- FROM dbo.#SubEntry setmp -- INNER -- JOIN dbo.Account acc -- ON acc.AccountID = setmp.AccountID -- INNER -- JOIN dbo.Asset a -- ON a.AssetID = setmp.AssetID -- WHERE acc.AccountUID = '{4913F46E-7BAB-4B85-9CF8-678355F51788}' -- UPDATE @SE -- SET PeriodTotal = PeriodTotal - Payout -- ,Total = Total - Payout -- FROM @Se se -- INNER -- JOIN @LeaseP p -- ON p.AccountID = se.AccountID -- END --Get any secured assets with RATA bals and no rec pay - with fixed charges INSERT INTO @SE ( AccountID ,Account ,AccountGroupID ,PeriodTax ,PeriodTotal ,Tax ,Total ,IsFixedSecurity ,IsSpecificSecurity ,IsFloatingSecurity ,SubsequentSecurity ,EntryType ) SELECT acc.AccountID ,acc.Description ,acc.AccountGroupID ,0 ,0 ,0 ,0 ,CASE WHEN ag.AccountClassID In(2,7) OR IsNull(acc.Flags,0) & 256 <> 0 THEN 0 ELSE 1 END ,CASE WHEN IsNull(acc.Flags,0) & 256 <> 0 THEN 1 ELSE 0 END ,0 ,0 ,0 FROM dbo.repvw_Account acc INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN @AccVal av ON av.AccountID = acc.AccountID --LEFT --OUTER --JOIN dbo.AccountValue av --ON av.AccountID = acc.AccountID --AND (av.AdminTypeID = @AdminTypeID Or @AdminTypeID Is Null) --AND av.ValueTypeID = 1 WHERE acc.AdminID = @AdminID --AND ((NOT IsNull(av.Value1,0) = 0) OR (NOT (IsNull(acc.Flags,0) & 128) = 0 AND NOT IsNull(av.Value,0) = 0)) AND ( IsNull(av.Value,0) <> 0 OR IsNull(acc.Flags,0) & 128 <> 0 OR IsNull(acc.Flags,0) & 256 <> 0 ) AND acc.AccountID Not In (Select AccountID FROM @SE WHERE IsFixedSecurity = CASE WHEN ag.AccountClassID In(2,7) OR IsNull(acc.Flags,0) & 256 <> 0 THEN 0 ELSE 1 END) AND acc.AccountGroupID NOT IN(2000,5000,6000,6020,6030,7000) AND acc.AccountUID <> '{4913F46E-7BAB-4B85-9CF8-678355F51788}' --Leased assets --Where AccountID In(152921) --GET any accounts with RATA bals and no rec or pay - no fixed charges INSERT INTO @SE ( AccountID ,Account ,AccountGroupID ,PeriodTax ,PeriodTotal ,Tax ,Total ,IsFixedSecurity ,IsSpecificSecurity ,IsFloatingSecurity ,SubsequentSecurity ,EntryType ) SELECT acc.AccountID ,acc.Description ,acc.AccountGroupID ,0 ,0 ,0 ,0 ,0 ,CASE WHEN acc.AccountUID = '{4913F46E-7BAB-4B85-9CF8-678355F51788}' THEN 1 ELSE 0 END --Leased assets ,0 ,0 ,0 FROM dbo.repvw_Account acc LEFT OUTER JOIN @AccVal av ON av.AccountID = acc.AccountID --LEFT --OUTER --JOIN dbo.AccountValue av --ON av.AccountID = acc.AccountID --AND (av.AdminTypeID = @AdminTypeID Or @AdminTypeID Is Null) --AND av.ValueTypeID = 1 WHERE acc.AdminID = @AdminID AND (IsNull(av.Value,0) <> 0 OR IsNull(av.Value1,0) <> 0 OR IsNull(av.Value2,0) <> 0) AND (IsNull(acc.Flags,0) & 128) = 0 AND acc.AccountID Not In (Select AccountID FROM @SE) -- WHERE IsFixedSecurity = 0) AND acc.AccountGroupID NOT IN(2000,5000,6000,6020,6030,7000,2010,2015) AND acc.AccountUID <> '{EC834153-D5C9-447B-BB35-7C3062E107D4}' --Leased assets control --Select * FROM @SE WHERE IsFixedSecurity = 0 --AND AccountID In( --152890 --,152904 --,152905 --,152906 --,152915) --Get the dividend withholdings PAYG and Super INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = CASE WHEN setmp.EntryType = 1 THEN 'Dividend Withholdings' ELSE 'Notional Receipts' END ,Account = Null ,Null ,0 ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.ReportableTotal - setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,IsNull(Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal - setmp.Tax, setmp.Direction)),0) ,0 ,0 ,1009 ,Category = CASE WHEN setmp.EntryType = 1 THEN 51 ELSE 56 END --Withholding or Notional receipt ,Reportable = 0 FROM dbo.#SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = @AdminID WHERE (acc.AccountGroupID IN(4012,4013,4016,4017,4014,4020,4060)) --PAYG, Super etc OR (acc.AccountGroupID = 4040 AND setmp.CreditorDividendID Is Null AND NOT acc.AccountUID = '{36C41188-1230-41E0-894F-5B9B9D8D6DB7}') --Unclaimed dividends GROUP BY CASE WHEN setmp.EntryType = 1 THEN 'Dividend Withholdings' ELSE 'Notional Receipts' END ,CASE WHEN setmp.EntryType = 1 THEN 51 ELSE 56 END --Fees paid INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = 'Fees Paid' ,Account = 'Fees Paid' ,Null ,0 ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.ReportableTotal - setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,IsNull(Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal - setmp.Tax, setmp.Direction)),0) ,IsNull(Sum(setmp.Tax * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END),0) ,PeriodTax = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,1009 ,Category = 59 ,Reportable = 0 FROM dbo.#SubEntry setmp INNER JOIN dbo.repvw_Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = @AdminID WHERE acc.AccountUID = '{3509E1B4-879E-4F55-8666-F450FF6F3C1A}' OR acc.ParentAccountUID = '{3509E1B4-879E-4F55-8666-F450FF6F3C1A}' --costs paid INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = 'Costs Paid' ,Account = 'Costs Paid' ,Null ,0 ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.ReportableTotal - setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,IsNull(Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal - setmp.Tax, setmp.Direction)),0) ,IsNull(Sum(setmp.Tax * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END),0) ,PeriodTax = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,1009 ,Category = 60 ,Reportable = 0 FROM dbo.#SubEntry setmp INNER JOIN dbo.repvw_Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = @AdminID WHERE acc.AccountUID = '{735A8B93-7BBE-4FFE-A0D7-3826FDAECA7F}' OR acc.ParentAccountUID = '{735A8B93-7BBE-4FFE-A0D7-3826FDAECA7F}' --Get the PAYE NI transferred INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TransferDesc ,Account = CASE WHEN @TransferDisplayOrder = 950 THEN @PAYEInDesc ELSE @PAYEOutDesc END ,Null ,Null ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN (setmp.Total * setmp.Direction) ELSE 0 END),0) ,IsNull(Sum(setmp.Total * setmp.Direction),0) ,0 ,0 ,@TransferDisplayOrder ,Category = 54 ,Reportable = 1 FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID IN(4012,4013,4016,4017) --PAYG, Super AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 --Get the PAY NI for offset INSERT INTO @RepBySE SELECT Account_AccountID ,setmp.Total * setmp.Direction FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID IN(4012,4013,4016,4017) --PAYG, Super AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 AND setmp.ReportableTotal = 0 --Get Other liabilities transferred INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TransferDesc ,Account = 'Other Payables' ,Null ,Null ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN (setmp.Total * setmp.Direction) ELSE 0 END),0) ,IsNull(Sum(setmp.Total * setmp.Direction),0) ,0 ,0 ,@TransferDisplayOrder ,Category = 54 ,Reportable = 1 FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID IN(4014,4020,4040,4060) --Other liabilties AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 --Get the other Liabilties for offset INSERT INTO @RepBySE SELECT Account_AccountID ,setmp.Total * setmp.Direction FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID IN(4014,4020,4040,4060) --PAYG, Super AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 AND setmp.ReportableTotal = 0 --Get the VAT transferred INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TransferDesc ,Account = CASE WHEN @TransferDisplayOrder = 950 THEN @TaxDesc + ' Receivable (Payable)' ELSE @TaxDesc +' Payable (Receivable)' END ,Null ,Null ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN (setmp.ReportableTotal * setmp.Direction) ELSE 0 END),0) ,IsNull(Sum(setmp.ReportableTotal * setmp.Direction),0) ,0 ,0 ,@TransferDisplayOrder ,Category = 55 ,Reportable = 1 FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID = 4010 AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 AND setmp.CreditorDividendID Is Null --Get the VAT transferred for offset INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TransferDesc ,Account = @TaxDesc + ' Receivable (Payable)' ,Null ,Null ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN (setmp.ReportableTotal * setmp.Direction * -1) ELSE 0 END),0) ,IsNull(Sum(setmp.ReportableTotal * setmp.Direction * -1),0) ,0 ,0 ,1010 ,Category = 52 ,Reportable = 0 FROM dbo.SubEntry setmp INNER JOIN dbo.Account acc ON acc.AccountID = setmp.Account_AccountID AND acc.AdminID = setmp.ContextID WHERE acc.AccountGroupID = 4010 AND setmp.ContextID = @AdminID AND setmp.AdminTypeID = @AdminTypeID AND setmp.EntryType = 2 AND setmp.CreditorDividendID Is Null --Get the VAT Received INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TaxDesc + ' Received' ,Account = Null ,Null ,0 ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.ReportableTotal - setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,IsNull(Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal - setmp.Tax, setmp.Direction)),0) ,0 ,0 ,1010 ,Category = 52 ,Reportable = 0 FROM dbo.#SubEntry setmp INNER JOIN dbo.SubEntry se ON se.SubEntryID = setmp.SubEntryID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = se.ContextID WHERE acc.AccountGroupID = 4010 AND se.ContextID = @AdminID AND setmp.EntryType = 0 AND NOT se.EntryType = 2 AND setmp.CreditorDividendID Is Null --Get the VAT Paid INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = @TaxDesc + ' Paid' ,Account = Null ,Null ,0 ,PeriodBalance = IsNull(Sum(CASE WHEN setmp.EntryDate >= @FromDate AND setmp.EntryDate <= @ToDate THEN ((setmp.ReportableTotal - setmp.Tax) * CASE WHEN setmp.EntryType = 0 THEN 1 ELSE -1 END) ELSE 0 END),0) ,IsNull(Sum(dbo.uFnRecPaySign (setmp.EntryType, setmp.ReportableTotal - setmp.Tax, setmp.Direction)),0) ,0 ,0 ,1011 ,Category = 53 ,Reportable = 0 FROM dbo.#SubEntry setmp INNER JOIN dbo.SubEntry se ON se.SubEntryID = setmp.SubEntryID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = se.ContextID WHERE acc.AccountGroupID = 4010 AND se.ContextID = @AdminID AND setmp.EntryType = 1 AND NOT se.EntryType = 2 AND setmp.CreditorDividendID Is Null DECLARE @SecDefAccID Int DECLARE @CCTMP Table (AccountID Int ,CreditorClaimTypeID Int ,RATAAmount Money) SELECT @SecDefAccID = AccountID FROM dbo.Account WHERE AccountUID = '{F7F96558-3D59-4153-A812-DE13B64C56B5}' AND AdminID = @AdminID INSERT INTO @CCTMP SELECT cc.AccountID ,cc.CreditorClaimTypeID ,Sum(cc.RATAAmount) FROM dbo.Creditor c INNER JOIN dbo.CreditorClaim cc ON cc.CreditorID = c.CreditorID WHERE c.AdminID = @AdminID AND ( cc.CreditorClaimTypeID In(100,150) OR cc.AccountID = @SecDefAccID ) GROUP BY cc.AccountID ,cc.CreditorClaimTypeID UNION SELECT av.AccountID --Share equity ,0 ,av.Value FROM @AccVal av -- dbo.AccountValue av INNER JOIN dbo.Account acc ON acc.AccountID = av.AccountID WHERE acc.AdminID = @AdminID AND acc.AccountGroupID = 7010 --AND av.ValueTypeID = 1 UNION SELECT av.AccountID --Lease assets ,0 ,av.Value FROM @AccVal av -- dbo.AccountValue av INNER JOIN dbo.Account acc ON acc.AccountID = av.AccountID WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{4913F46E-7BAB-4B85-9CF8-678355F51788}' --Lease assets --AND av.ValueTypeID = 1 INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = CASE WHEN @AsPosition = 0 THEN 0 ELSE CASE WHEN se.IsSpecificSecurity = 1 THEN CASE WHEN SubsequentSecurity = 0 THEN 10 ELSE IsNull(SubsequentSecurity,40) END WHEN se.IsFixedSecurity = 1 THEN 20 WHEN se.IsFloatingSecurity = 1 OR @HasOverallFC = 1 THEN 30 ELSE 40 END END ,AccountGroup = dbo.uFnRecPayUKReportGroup(ag.AccountClassID, ag.AccountGroupID, acc.CreditorClaimTypeID, IsNull(acc.Flags,0), se.IsFixedSecurity, se.IsSpecificSecurity, @TransferDesc) ,Account = CASE WHEN acc.AccountGroupID In (2010,2015) THEN acc.LongDescription WHEN se.EntryType = 15 THEN 'Payout on Lease or Finance Agreement' ELSE acc.Description + CASE WHEN se.AdminTypeID Is Not Null THEN ' (' + at.ShortDescription + ')' ELSE '' END END ,acc.AccountID ,RATAValue = CASE WHEN av.Value Is Not Null THEN --There is an entry in the account value table CASE WHEN se.IsFixedSecurity = 1 OR se.IsSpecificSecurity = 1 OR ag.AccountClassID In(2,7) THEN av.Value WHEN av.Value1 <> 0 THEN av.Value1 ELSE av.Value2 END WHEN cc.RATAAmount Is Not Null AND a.RATADate Is Not Null THEN (cc.RATAAmount * -1) ELSE 0 END ,se.PeriodTotal ,se.Total - se.Tax ,se.Tax ,se.PeriodTax ,dbo.uFnRecPayUKReportOrder(ag.AccountClassID, ag.AccountGroupID, acc.CreditorClaimTypeID, IsNull(acc.Flags,0), se.IsFixedSecurity, se.IsSpecificSecurity) ,Category = CASE WHEN se.EntryType = 15 THEN 1 WHEN ag.AccountGroupID = 5050 THEN 0 WHEN ag.AccountGroupID = 6050 THEN 1 ELSE se.EntryType END ,Reportable = 1 From @SE se Inner Join dbo.Account acc On acc.AccountID = se.AccountID And acc.AdminID = @AdminID Inner Join dbo.Admin a On a.AdminID = acc.AdminID Inner Join accountGroup ag On ag.AccountGroupID = se.AccountGroupID Left Outer Join @CCTMP cc ON cc.AccountID = se.AccountID LEFT OUTER JOIN @AccVal av ON av.AccountID = acc.AccountID LEFT OUTER JOIN dbo.AdminType at ON se.AdminTypeID = at.AdminTypeID --Insert any unsecured assets that are subject to a fixed security and have a surplus where there are SOA values, but no realisations to date INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = CASE WHEN @AsPosition = 0 THEN 0 ELSE CASE WHEN se.IsSpecificSecurity = 1 THEN CASE WHEN SubsequentSecurity = 0 THEN 10 ELSE SubsequentSecurity END WHEN se.IsFixedSecurity = 1 THEN 20 WHEN se.IsFloatingSecurity = 1 OR @HasOverallFC = 1 THEN 30 ELSE 40 END END ,AccountGroup = dbo.uFnRecPayUKReportGroup(ag.AccountClassID, ag.AccountGroupID, acc.CreditorClaimTypeID, IsNull(acc.Flags,0), 0, 0, @TransferDesc) ,Account = CASE WHEN acc.AccountGroupID In (2010,2015) THEN acc.LongDescription WHEN se.EntryType = 15 THEN 'Payout on Lease or Finance Agreement' ELSE acc.Description + CASE WHEN se.AdminTypeID Is Not Null THEN ' (' + at.ShortDescription + ')' ELSE '' END END ,acc.AccountID ,RATAValue = av.Value2 ,se.PeriodTotal ,se.Total - se.Tax ,se.Tax ,se.PeriodTax ,dbo.uFnRecPayUKReportOrder(ag.AccountClassID, ag.AccountGroupID, acc.CreditorClaimTypeID, IsNull(acc.Flags,0), 0, 0) ,Category = CASE WHEN se.EntryType = 15 THEN 1 WHEN ag.AccountGroupID = 5050 THEN 0 WHEN ag.AccountGroupID = 6050 THEN 1 ELSE se.EntryType END ,Reportable = 1 From @SE se Inner Join dbo.Account acc On acc.AccountID = se.AccountID And acc.AdminID = @AdminID Inner Join dbo.Admin a On a.AdminID = acc.AdminID Inner Join accountGroup ag On ag.AccountGroupID = se.AccountGroupID INNER JOIN @AccVal av ON av.AccountID = acc.AccountID LEFT OUTER JOIN dbo.AdminType at ON se.AdminTypeID = at.AdminTypeID WHERE se.IsFixedSecurity = 1 AND se.Total = 0 AND av.Value2 <> 0 AND Not Exists (SELECT * FROM @Results WHERE AccountID = acc.AccountID AND DisplayOrder = dbo.uFnRecPayUKReportOrder(ag.AccountClassID, ag.AccountGroupID, acc.CreditorClaimTypeID, IsNull(acc.Flags,0), 0, 0)) --Insert any fixed or floating claims or shareholder where no payment has been made INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = CASE WHEN @AsPosition = 0 THEN 0 ELSE CASE WHEN cc.CreditorClaimTypeID = 100 THEN 20 WHEN cc.CreditorClaimTypeID = 150 THEN 30 ELSE 40 END END ,AccountGroup = dbo.uFnRecPayUKReportGroup(ag.AccountClassID, ag.AccountGroupID, cc.CreditorClaimTypeID, IsNull(acc.Flags,0), CASE WHEN cc.CreditorClaimTypeID = 100 THEN 1 ELSE 0 END, 0, @TransferDesc) ,Account = acc.Description ,acc.AccountID ,RATAValue = CASE WHEN av.Value Is Not Null THEN --There is an entry in the account value table av.Value WHEN cc.RATAAmount Is Not Null AND a.RATADate Is Not Null THEN (cc.RATAAmount * -1) ELSE 0 END ,0 ,0 ,0 ,0 ,dbo.uFnRecPayUKReportOrder(ag.AccountClassID, ag.AccountGroupID, cc.CreditorClaimTypeID, IsNull(acc.Flags,0), CASE WHEN cc.CreditorClaimTypeID = 100 THEN 1 ELSE 0 END, 0) ,Category = 1 ,Reportable = 1 FROM @CCTMP cc INNER JOIN dbo.Account acc ON acc.AccountID = cc.AccountID Inner Join dbo.Admin a On a.AdminID = acc.AdminID Inner Join dbo.AccountGroup ag On ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN @AccVal av ON av.AccountID = acc.AccountID WHERE Not Exists (SELECT * FROM @Results WHERE AccountID = cc.AccountID ) AND NOT cc.RATAAmount = 0 UPDATE @Results SET DisplayGroup = 3 WHERE AccountGroup = 'Represented By' INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = 'Post Appointment Trading' ,Account = CASE WHEN Round(@PandL,2) = 0 THEN 'Trading Surplus (Deficit)' WHEN @PandL > 0 THEN 'Trading Surplus' ELSE 'Trading Deficit' END ,Null ,@PandLProj ,@PeriodPandL ,@PandL ,0 ,0 ,1250 ,Category = 20 ,Reportable = 1 WHERE @PostAppSales <> 0 OR @PostAppExp <> 0 OR @PandLProj <> 0 INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = 'Trading Income' ,Account = 'Trading Income' ,Null ,Null ,@PeriodPostAppSales ,@PostAppSales ,@VATOutput ,0 ,2000 ,Category = 10 ,Reportable = 0 WHERE @PostAppSales <> 0 OR @PeriodPostAppSales <> 0 INSERT INTO @Results SELECT DisplayGroup = 1 ,PositionGroup = 0 ,AccountGroup = 'Trading Expenditure' ,Account = 'Trading Expenditure' ,Null ,Null ,@PeriodPostAppExp ,@PostAppExp ,@VATInput ,0 ,2000 ,Category = 11 ,Reportable = 0 WHERE @PostAppExp <> 0 OR @PeriodPostAppExp <> 0 --Get the represented by accounts not cash investments etc (legacy data) INSERT INTO @RepBySE SELECT setmp.AccountID --Account_AccountID ,Round(CASE WHEN se.EntryType = 201 THEN setmp.ReportableTotal ELSE se.ReportableTotal * se.Direction END,2) FROM dbo.SubEntry se INNER JOIN #SubEntry setmp ON setmp.SourceSubEntryID = se.SubEntryID INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID AND acc.AdminID = se.ContextID WHERE se.ContextID = @AdminID AND (se.AdminTypeID = @AdminTypeID Or @AdminTypeID Is Null) AND se.EntryDate <= @ToDate AND IsNull(se.IsBatchPosting, 0) = 0 AND ( ( (IsNull(acc.Flags,0) & 64) = 64) OR (acc.AccountGroupID = 3042 AND NOT(IsNull(e.Flags,0) & 1) = 0) --Trade debtors forced to abstract OR (acc.AccountGroupID = 4005 AND NOT(IsNull(e.Flags,0) & 1) = 0) --trade creditors forced to abstract OR (acc.AccountGroupID In(4012,4013,4016,4017, 4014,4020,4040,4060) --PAYE Super etc ) ) INSERT dbo.#AccBal SELECT acc.AccountID ,acc.Description ,Balance = Sum(Amount) FROM @RepBySE se INNER JOIN dbo.repvw_Account acc ON acc.AccountID = se.AccountID WHERE NOT (IsNull(acc.Flags,0) & 64) = 0 GROUP BY acc.AccountID ,acc.Description --Receivables -- INSERT dbo.#AccBal -- -- SELECT 51 -- ,'Receivables' -- ,Balance = Sum (Amount) -- -- FROM @RepBySE se -- -- INNER -- JOIN dbo.Account acc -- ON acc.AccountID = se.AccountID -- -- WHERE acc.AccountGroupID = 3042 --Trade debtors -- AND acc.AccountID NOT IN (SELECT AccountID From dbo.#AccBal) --Payables INSERT dbo.#AccBal SELECT 51 ,'Payables' ,Balance = Sum (Amount) FROM @RepBySE se INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID --WHERE acc.AccountGroupID In(4000,4005,4012,4013,4016,4017, 4014,4020,4040,4060) --trade creditors , PAYG, Super WHERE acc.AccountGroupID In(4000,4012,4013,4016,4017, 4014,4020,4040,4060) --PAYG, Super (Trade creditors removed by JO 02/10/08) AND acc.AccountID NOT IN (SELECT AccountID From dbo.#AccBal) --Get the Tax balance If @IsNotTaxReg = 0 BEGIN SELECT @TaxLiab = Round(IsNull(Sum(Tax * -1),0),2) FROM @Results Where Reportable = 1 OR Category In(10,11) --Reportable or trading SELECT @TaxLiab = @TaxLiab + IsNull(Sum(Balance * -1),0) FROM @Results WHERE Category In(52,53) --VAT Paid and received IF Not @TaxLiab = 0 BEGIN INSERT dbo.#AccBal Values(60, @TaxDesc + ' Receivable (Payable)', @TaxLiab) END END ELSE --Irrecoverable VAT BEGIN SELECT @TaxRec = IsNull(Sum(Balance),0) ,@PeriodTaxRec = IsNull(Sum(PeriodBalance),0) FROM @Results WHERE Category In(52) AND Reportable = 0 SELECT @TaxPay = IsNull(Sum(Balance),0) ,@PeriodTaxPay = IsNull(Sum(PeriodBalance),0) FROM @Results WHERE Category In(53) AND Reportable = 0 UPDATE @Results SET PeriodBalance = PeriodBalance + PeriodTax ,Balance = Balance + Tax FROM @Results WHERE DisplayGroup = 1 AND PositionGroup = 0 AND Category = 0 AND Reportable = 1 IF @TaxRec <> 0 OR @PeriodTaxRec <> 0 INSERT INTO @Results SELECT 1 ,0 ,dbo.uFnRecPayUKReportGroup(ag.AccountClassID, ag.AccountGroupID, 0, 0, 0, 0, @TransferDesc) ,@TaxDesc + ' Received' ,Null ,Null ,@PeriodTaxRec ,@TaxRec ,0 ,0 ,1400 ,0 ,1 FROM dbo.AccountGroup ag WHERE AccountGroupID = 5010 IF @TaxPay <> 0 OR @PeriodTaxPay <> 0 INSERT INTO @Results SELECT 1 ,0 ,dbo.uFnRecPayUKReportGroup(ag.AccountClassID, ag.AccountGroupID, 0, 0, 0, 0, @TransferDesc) ,@TaxDesc + ' Paid' ,Null ,Null ,@PeriodTaxPay ,@TaxPay ,0 ,0 ,1500 ,0 ,1 FROM dbo.AccountGroup ag WHERE AccountGroupID = 6005 INSERT INTO @Results SELECT DisplayGroup ,PositionGroup ,AccountGroup ,@TaxDesc + ' Irrecoverable' ,Null ,Null ,Sum(IsNull(PeriodTax,0)) ,Sum(IsNull(Tax,0)) ,0 ,0 ,DisplayOrder ,Category ,Reportable FROM @Results WHERE DisplayGroup = 1 AND PositionGroup = 0 AND Category = 1 AND Reportable = 1 GROUP BY DisplayGroup ,PositionGroup ,AccountGroup ,DisplayOrder ,Category ,Reportable UPDATE @Results SET PeriodTax = 0 ,Tax = 0 FROM @Results WHERE DisplayGroup = 1 AND PositionGroup = 0 AND Category In(0,1) AND Reportable = 1 END --Get the bank balances INSERT dbo.#AccBal EXECUTE repsp_RecPayBalanceAtDate @AdminID,@AdminTypeID,@AdminStartDate, @ToDate, @AccountInClause INSERT INTO @Results SELECT DisplayGroup = 3 ,PositionGroup = 0 ,AccountGroup = 'Represented By' ,Account ,Null ,Null ,Null ,Balance ,0 ,0 ,4000 ,Category = CASE WHEN AccountID = -1 THEN 42 ELSE AccountID END --FX gain loss ,Reportable = 1 FROM dbo.#AccBal WHERE Not Balance = 0 AND AccountID <= 100 INSERT INTO @Results SELECT DisplayGroup = 3 ,PositionGroup = 0 ,AccountGroup = 'Represented By' ,Account = acc.Description ,Null ,Null ,Null ,(ab.Balance) ,0 ,0 ,4000 ,Category = CASE WHEN NOT (IsNull(acc.Flags,0) & 1) = 0 THEN --ISA account 41 WHEN acc.AccountGroupID In(3000,3020) THEN --Cash and undeposited 40 WHEN acc.AccountGroupID In(3010,3030,3035) THEN --Bank and Investments 42 WHEN acc.AccountGroupID In(4040) THEN --Unclaimed dividends 61 ELSE 50 END ,Reportable = 1 FROM dbo.#AccBal ab INNER JOIN dbo.Account acc ON acc.AccountID = ab.AccountID WHERE Not ab.Balance = 0 IF @AsPosition = 1 INSERT INTO dbo.#RecPayPosition SELECT PositionGroup ,r.AccountID ,r.Account ,Sum(Balance) ,Category FROM @Results r INNER JOIN Account acc ON acc.AccountID = r.AccountID WHERE DisplayGroup = 1 AND Reportable = 1 GROUP BY PositionGroup ,r.AccountID ,r.Account ,Category Order By PositionGroup ELSE BEGIN IF @SplitResults = 0 SELECT DisplayGroup ,AccountGroup ,Account ,RATAValue ,PeriodBalance ,PeriodTax ,Balance ,Tax ,DisplayOrder ,Category ,Reportable ,AccountGroupID ,Notes = @Notes FROM @Results r LEFT OUTER JOIN dbo.Account acc ON acc.AccountID = r.AccountID WHERE (NOT RATAValue = 0 OR NOT Balance = 0 OR NOT PeriodBalance = 0) OR (Category = 20 AND (@PostAppSales <> 0 OR @PostAppExp <> 0)) Order By DisplayGroup ,DisplayOrder ,Account IF @SplitResults = 1 BEGIN SELECT DisplayGroup ,AccountGroup = CASE WHEN IsNull(acc.Flags,0) & 128 = 128 OR IsNull(acc.Flags,0) & 256 = 256 THEN 'Fixed' WHEN IsNull(acc.Flags,0) & 512 = 512 THEN 'Floating' WHEN DisplayOrder <= 1300 THEN 'Fixed' ELSE 'Floating' END ,Account ,RATAValue ,PeriodBalance ,PeriodTax ,Balance ,Tax ,DisplayOrder ,Category = CASE WHEN Category In(0,1) THEN Category WHEN Category = 55 THEN 0 ELSE 3 END ,Reportable ,Notes = @Notes FROM @Results r LEFT OUTER JOIN dbo.Account acc ON acc.AccountID = r.AccountID WHERE (Reportable = 1) AND --(NOT RATAValue = 0 --OR NOT Balance = 0 (NOT Balance = 0 OR NOT PeriodBalance = 0) OR (Category = 20 AND (@PostAppSales <> 0 OR @PostAppExp <> 0)) Order By Category ,DisplayOrder ,Account END END SET NOCOUNT OFF SET ANSI_WARNINGS ON RETURN @@ERROR GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].[repsp_RecPayAbstract] TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=2487, @BatchID=2254, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numberic value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=1022, @BatchID=44921, @ForValidation=0, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO --update tasks and mergetemplate file names from RATA to ROCAP UPDATE task SET Description = REPLACE(description,'Report as to Affairs','Report on Company and Property') WHERE CompletedDate = '1899-12-30 00:00:00.000' UPDATE task SET Description = REPLACE(description,'RATA','ROCAP') WHERE CompletedDate = '1899-12-30 00:00:00.000' UPDATE MergeTemplate SET Description = ' Advertise ROCAP Prepared by Receiver Manager pursuant to 4421A(3)' WHERE MergeTemplateID = 320004 Go UPDATE MergeTemplate SET Description = ' Advise Directors of Duties, Request to submit ROCAP, questionnaire and all Books and Records' WHERE MergeTemplateID = 320033 Go UPDATE MergeTemplate SET Description = ' Notice to Director or Company Officer of failure to submit ROCAP with timeframe' WHERE MergeTemplateID = 320034 Go UPDATE MergeTemplate SET Description = ' Covering Letter Providing copy of ROCAP to Solicitor' WHERE MergeTemplateID = 320037 Go UPDATE MergeTemplate SET Description = ' Advise ASIC of granting request by Director for an extension of time to submit ROCAP' WHERE MergeTemplateID = 320039 Go UPDATE MergeTemplate SET Description = ' Advise Director that Receiver is yet to receive ROCAP' WHERE MergeTemplateID = 320040 Go UPDATE MergeTemplate SET Description = ' Grant Director request for an extension of time to submit ROCAP' WHERE MergeTemplateID = 320075 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC request received from the directors for extension of time to submit ROCAP with preliminary report' WHERE MergeTemplateID = 320118 Go UPDATE MergeTemplate SET Description = ' Form Letter to Creditors Summary of ROCAP and request for information assisting Investigation' WHERE MergeTemplateID = 320134 Go UPDATE MergeTemplate SET Description = ' Grant Extension of time requiring Director or Company Officer to submit Report on Company and Property' WHERE MergeTemplateID = 320142 Go UPDATE MergeTemplate SET Description = ' Request Directors for ROCAP and advise responsibilities Receivership' WHERE MergeTemplateID = 320197 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC ROCAP comments pursuant to s429' WHERE MergeTemplateID = 320199 Go UPDATE MergeTemplate SET Description = ' Corres to Secured Creditor providing copy of ROCAP (and detail on progress)' WHERE MergeTemplateID = 320200 Go UPDATE MergeTemplate SET Description = ' Provide Certified copy of ROCAP to Court' WHERE MergeTemplateID = 320213 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC request received from the directors for extension of time to submit ROCAP' WHERE MergeTemplateID = 320214 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC yet to receive ROCAP from Directors' WHERE MergeTemplateID = 320215 Go UPDATE MergeTemplate SET Description = ' Letter to Supreme Court yet to receive ROCAP from Directors' WHERE MergeTemplateID = 320216 Go UPDATE MergeTemplate SET Description = ' Letter to Federal Court yet to receive ROCAP from Directors' WHERE MergeTemplateID = 320217 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC Receiver yet to receive ROCAP from Directors' WHERE MergeTemplateID = 320218 Go UPDATE MergeTemplate SET Description = ' Circular to Creditors Summary of ROCAP and request for information assisting Investigation' WHERE MergeTemplateID = 320226 Go UPDATE MergeTemplate SET Description = ' Letter to Directors enclosing copy of ROCAP and Receivers comments' WHERE MergeTemplateID = 320343 Go UPDATE MergeTemplate SET Description = ' Letter to Director - Receiver granting extension of time to submit ROCAP' WHERE MergeTemplateID = 320344 Go UPDATE MergeTemplate SET Description = ' Letter to Directors - Late submission of ROCAP' WHERE MergeTemplateID = 320529 Go UPDATE MergeTemplate SET Description = ' Letter to ASIC re Directors failure to complete ROCAP on time' WHERE MergeTemplateID = 320531 Go UPDATE MergeTemplate SET Description = ' Letter to Supreme Court - Directors failure to complete ROCAP on time' WHERE MergeTemplateID = 320532 Go Insert Into dbo.Scripts Values('General Hotfix remove duplicate numbers post consolidation',GetDate(), '|~|') Declare @Conts Table(ContactID Int, NumberTypeID Int, MaxNumberID Int) Declare @DelNums Table (NumberID Int) Insert into @Conts (ContactID, NumberTypeID, MaxNumberID) select c.contactID, n.NumberTypeID, 0 from Contact c inner join Contact_Number cn on cn.ContactID = c.ContactID inner join Number n on cn.NumberID = n.NumberID --where c.ContactID = 4905 group by c.contactID, n.NumberTypeID having count(n.numberTypeID) > 1 Update @Conts Set MaxNumberID = (SELECT Max(n.NumberId) FROM Number n Inner Join Contact_Number cn on n.NumberID = cn.NumberID WHERE n.NumberTypeID = c.NumberTypeID AND cn.ContactID = c.ContactID ) FROM @Conts c Insert Into @DelNums Select cn.NumberID From @Conts c Inner Join Contact_Number cn On cn.ContactID = c.ContactID Inner Join Number n On n.NumberID = cn.NumberID And n.NumberTypeID = c.NumberTypeID Where cn.NumberID <> c.MaxNumberID --Select * --from @Conts Delete Number From Number n Inner Join @DelNums dn On dn.NumberID = n.NumberID Go Declare @Emps Table(EmployeeID Int, NumberTypeID Int, MaxNumberID Int) Declare @DelNums Table (NumberID Int) Insert into @Emps (EmployeeID, NumberTypeID, MaxNumberID) select c.EmployeeID, n.NumberTypeID, 0 from Employee c inner join Employee_Number cn on cn.EmployeeID = c.EmployeeID inner join Number n on cn.NumberID = n.NumberID --where c.EmployeeID = 4905 group by c.EmployeeID, n.NumberTypeID having count(n.numberTypeID) > 1 Update @Emps Set MaxNumberID = (SELECT Max(n.NumberId) FROM Number n Inner Join Employee_Number cn on n.NumberID = cn.NumberID WHERE n.NumberTypeID = c.NumberTypeID AND cn.EmployeeID = c.EmployeeID ) FROM @Emps c Insert Into @DelNums Select cn.NumberID From @Emps c Inner Join Employee_Number cn On cn.EmployeeID = c.EmployeeID Inner Join Number n On n.NumberID = cn.NumberID And n.NumberTypeID = c.NumberTypeID Where cn.NumberID <> c.MaxNumberID --Select * --from @Emps Delete Number From Number n Inner Join @DelNums dn On dn.NumberID = n.NumberID Go Declare @Bks Table(BankruptID Int, NumberTypeID Int, MaxNumberID Int) Declare @DelNums Table (NumberID Int) Insert into @Bks (BankruptID, NumberTypeID, MaxNumberID) select c.BankruptID, n.NumberTypeID, 0 from Bankrupt c inner join Bankrupt_Number cn on cn.BankruptID = c.BankruptID inner join Number n on cn.NumberID = n.NumberID --where c.BankruptID = 4905 group by c.BankruptID, n.NumberTypeID having count(n.numberTypeID) > 1 Update @Bks Set MaxNumberID = (SELECT Max(n.NumberId) FROM Number n Inner Join Bankrupt_Number cn on n.NumberID = cn.NumberID WHERE n.NumberTypeID = c.NumberTypeID AND cn.BankruptID = c.BankruptID ) FROM @Bks c Insert Into @DelNums Select cn.NumberID From @Bks c Inner Join Bankrupt_Number cn On cn.BankruptID = c.BankruptID Inner Join Number n On n.NumberID = cn.NumberID And n.NumberTypeID = c.NumberTypeID Where cn.NumberID <> c.MaxNumberID --Select * --from @Bks Delete Number From Number n Inner Join @DelNums dn On dn.NumberID = n.NumberID Go Declare @CPS Table(CounterpartyID Int, NumberTypeID Int, MaxNumberID Int) Declare @DelNums Table (NumberID Int) Insert into @CPS (CounterpartyID, NumberTypeID, MaxNumberID) select c.CounterpartyID, n.NumberTypeID, 0 from Counterparty c inner join Counterparty_Number cn on cn.CounterpartyID = c.CounterpartyID inner join Number n on cn.NumberID = n.NumberID --where c.CounterpartyID = 4905 group by c.CounterpartyID, n.NumberTypeID having count(n.numberTypeID) > 1 Update @CPS Set MaxNumberID = (SELECT Max(n.NumberId) FROM Number n Inner Join Counterparty_Number cn on n.NumberID = cn.NumberID WHERE n.NumberTypeID = c.NumberTypeID AND cn.CounterpartyID = c.CounterpartyID ) FROM @CPS c Insert Into @DelNums Select cn.NumberID From @CPS c Inner Join Counterparty_Number cn On cn.CounterpartyID = c.CounterpartyID Inner Join Number n On n.NumberID = cn.NumberID And n.NumberTypeID = c.NumberTypeID Where cn.NumberID <> c.MaxNumberID --Select * --from @CPS Delete Number From Number n Inner Join @DelNums dn On dn.NumberID = n.NumberID Go if exists (select * from sysobjects where id = object_id(N'[dbo].repsp_eLodge5602XML') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure dbo.repsp_eLodge5602XML GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_eLodge5602XML @AdminID Int ,@AdminTypeID Int ,@StartDate DateTime ,@FromDate DateTime ,@ToDate DateTime ,@SuppressEmployeeNames Bit ,@XML XML OUTPUT AS /* Author: JO Date: 14/5/18 Purpose: To create the 5602 lodgement XML /* /* */ */ */ SET NOCOUNT ON DECLARE @FeesExpAccountID Int DECLARE @CostsExpAccountID Int DECLARE @LegalExpAccountID Int DECLARE @GSTPaidRecAccID Int DECLARE @FEGLiabAccID Int DECLARE @IsPooledGroup Bit = 0 IF Exists(SELECT * FROM dbo.AdminSetting WHERE AdminID = @AdminID AND SettingID = 1011 AND Setting = '1') SET @IsPooledGroup = 1 DECLARE @Lodge Table ( AdminID Int ,reportStartDate Varchar(10) ,reportEndDate Varchar(10) ,name Varchar(200) ,ACN Varchar(20) ,commenceDate Varchar(10) ,appointmentType Varchar(2) ,estCompletionDate Varchar(7) ) DECLARE @Appts TABLE ( AdminID int ,UserID int ,appointmentStartDate Varchar(10) ,liquidatorNo varchar(20) ) DECLARE @Assets TABLE ( AdminID int ,grossAssets DECIMAL(15,2) ,cashAtBank DECIMAL(15,2) ,high DECIMAL(15,2) ,low DECIMAL(15,2) ) DECLARE @RATA TABLE ( AdminID int ,rataReceived varchar(5) ,asicAssistance varchar(5) ) DECLARE @Creds TABLE ( AdminID int ,category varchar(255) ,estCount Int ,estValue DECIMAL(15,2) ) DECLARE @Remun TABLE ( AdminID int ,appointmentType varchar(2) ,fixedAmount DECIMAL(15,2) ,remunPaid DECIMAL(15,2) ,disbursePaid DECIMAL(15,2) ) DECLARE @FEG TABLE ( AdminID int ,wages DECIMAL(15,2) ,leaves DECIMAL(15,2) ,retrenchment DECIMAL(15,2) ) DECLARE @Divs TABLE ( AdminID int ,category varchar(255) ,estDividend DECIMAL(16,2) ,rate DECIMAL(16,2) ,totalPaid DECIMAL(15,2) ) DECLARE @RisksOrTasks TABLE ( AdminID Int ,type varchar(250) ,details varchar(2000) ) DECLARE @RP TABLE ( AdminID int ,prevReceipts DECIMAL(15,2) ,prevPayments DECIMAL(15,2) ,currReceipts DECIMAL(15,2) ,currPayments DECIMAL(15,2) ) DECLARE @FeesAcc TABLE ( AdminID int ,FeesAccID Int ) DECLARE @CostsAcc TABLE ( AdminID int ,CostsAccID Int ) DECLARE @LegalAcc TABLE ( AdminID int ,LegalAccID Int ) DECLARE @RPDetail Table ( AdminID Int ,EntryType Int ,[date] varchar(10) ,payee varchar(250) ,name varchar(2000) ,category varchar(250) ,amt DECIMAL(15,2) ,EntryDate Date ) DECLARE @RPSumm Table ( AdminID Int ,EntryType Int ,name varchar(2000) ,Category varchar(250) ,Total DECIMAL(15,2) ) --Temp table for R&P data CREATE TABLE [dbo].[#SubEntry] ( [EntryID] Int ,[SubEntryID] Int ,[SourceSubEntryID] Int ,[EntryDate] DateTime ,[Payee] nVarchar(200) ,[AccountID] Int ,[Account] Varchar(200) ,[Memo] Varchar(2000) ,[ReportableTotal] DECIMAL(15,2) ,[Tax] DECIMAL(15,2) ,[Direction] int ,[EntryType] Smallint ,[CreditorDividendID] Int ,[AssetID] Int ,[LiabilityID] Int ) --Temp table for joining sub accounts CREATE TABLE dbo.#Account ( AdminID Int ,AccountID Int ) INSERT INTO @Lodge SELECT @AdminID ,reportStartDate = Convert(varchar(10), @FromDate, 120) -- tab.col.value('lodgementDetails[1]/reportStartDate[1]', 'Varchar(10)') ,reportEndDate = tab.col.value('lodgementDetails[1]/reportEndDate[1]', 'Varchar(10)') ,name = tab.col.value('exadDetails[1]/name[1]', 'varchar(200)') ,ACN = tab.col.value('exadDetails[1]/identifier[1]/value[1]', 'varchar(20)') ,commenceDate = tab.col.value('exadDetails[1]/commenceDate[1]', 'varchar(200)') ,appointmentType = tab.col.value('exadDetails[1]/appointmentType[1]', 'varchar(200)') ,estCompletionDate = CASE WHEN @AdminTypeID = 11 THEN Null ELSE tab.col.value('exadDetails[1]/estCompletionDate[1]', 'varchar(200)') END FROM @XML.nodes('/progressReport') as tab(col) INSERT INTO @Appts (AdminID, UserID,appointmentStartDate,liquidatorNo) SELECT apt.AdminID, aa.UserID, Convert(varchar(10), apt.StartDate, 120), CASE WHEN aa.UserID Is Null THEN apt.RegNo ELSE ISNULL(u.AgentNo ,p.RegAgentNo) END FROM dbo.Appointment apt LEFT OUTER JOIN [dbo].[Appointee_Appointment] aa ON aa.AppointmentID = apt.AppointmentID LEFT OUTER JOIN [dbo].[User] u ON u.UserID = aa.UserID INNER JOIN dbo.Admin a ON a.AdminID = apt.AdminID INNER JOIN [dbo].Practice p ON p.PracticeID = a.PracticeID WHERE (apt.EndDate Is Null OR apt.EndDate >= @ToDate) AND apt.StartDate <= @ToDate AND apt.AdminID = @AdminID AND apt.AdminTypeID = @AdminTypeID INSERT INTO @Assets SELECT @AdminID ,grossAssets = tab.col.value('asset[1]/grossAssets[1]', 'DECIMAL(15,2)') ,cashAtBank = tab.col.value('cashAtBank[1]', 'DECIMAL(15,2)') ,high = tab.col.value('asset[1]/estimate[1]/high[1]', 'DECIMAL(15,2)') ,low = tab.col.value('asset[1]/estimate[1]/low[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/detailsOfAssets[1]') as tab(col) INSERT INTO @Creds SELECT @AdminID ,category = tab.col.value('(category/text())[1]', 'varchar(255)') ,estCount = tab.col.value('(estCount/text())[1]', 'Int') ,estValue = tab.col.value('(estValue/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/creditor/creditors') as tab(col) WHERE @AdminTypeID In(6,7,8,10) --ADM, DOCA, OL, CVL INSERT INTO @Remun SELECT @AdminID ,appointmentType = tab.col.value('(appointmentType/text())[1]', 'varchar(2)') ,fixedAmount = tab.col.value('(fixedAmount/text())[1]', 'DECIMAL(15,2)') ,remunPaid = tab.col.value('(remunPaid/text())[1]', 'DECIMAL(15,2)') ,disbursePaid = tab.col.value('(disbursePaid/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/remunerations/remuneration') as tab(col) INSERT INTO @FEG SELECT @AdminID ,wages = tab.col.value('paidToEmployee[1]/wages[1]', 'DECIMAL(15,2)') ,leaves = tab.col.value('paidToEmployee[1]/leaves[1]', 'DECIMAL(15,2)') ,retrenchment = tab.col.value('paidToEmployee[1]/retrenchment[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/fairEntitlement[1]') as tab(col) INSERT INTO @Divs SELECT @AdminID ,category = tab.col.value('(category/text())[1]', 'varchar(255)') ,estDividend = tab.col.value('(estDividend/text())[1]', 'DECIMAL(16,2)') ,rate = tab.col.value('(rate/text())[1]', 'DECIMAL(16,2)') ,totalPaid = tab.col.value('(totalPaid/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/dividends/dividends') as tab(col) WHERE @AdminTypeID In(7,8,9,10) --DOCA, OL, MVL, CVL INSERT INTO @RisksOrTasks SELECT AdminID ,Type = CASE WHEN SettingID = 25005 THEN 'Future asset realisations' WHEN SettingID = 25006 THEN 'Investigations' WHEN SettingID = 25007 THEN 'Litigation' WHEN SettingID = 25008 THEN 'Recovery of voidable transactions' WHEN SettingID = 25009 THEN 'Payment of dividend' WHEN SettingID = 25010 THEN 'Other' END ,dbo.uFnXMLEncode(setting) FROM dbo.AdminSetting WHERE AdminID = @AdminID AND SettingID In( 25010 ,25009 ,25008 ,25007 ,25006 ,25005 ) /* R&P SUMMARY */ EXECUTE dbo.repsp_RecPayData @AdminID=@AdminID, @AdminTypeID=@AdminTypeID, @AdminStartDate=@StartDate, @ReportStartDate=@FromDate, @ReportEndDate=@ToDate, @SuppressEmployeeNames=@SuppressEmployeeNames --Delete any GST transfers DELETE #SubEntry FROM #SubEntry setmp INNER JOIN dbo.SubEntry se ON se.SubEntryID = setmp.SourceSubEntryID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID WHERE acc.AccountGroupID = 4010 AND se.EntryType = 2 --Get the various accounts SELECT @FeesExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{3509E1B4-879E-4F55-8666-F450FF6F3C1A}' ) EXEC usp_AccountsFromID @FeesExpAccountID INSERT INTO @FeesAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @CostsExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{C46BE169-3F99-4EA2-A291-9F72BBCD031C}' ) EXEC usp_AccountsFromID @CostsExpAccountID INSERT INTO @CostsAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @LegalExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{C6969302-EF4C-4C23-8CC3-C7B4856669D5}' ) EXEC usp_AccountsFromID @LegalExpAccountID INSERT INTO @LegalAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @GSTPaidRecAccID = AccountID FROM dbo.Account WHERE AdminID = @AdminID AND AccountUID = '{8E3FB8E0-F7EF-4493-834F-141030A9A40C}' SELECT @FEGLiabAccID = AccountID FROM dbo.Account WHERE AdminID = @AdminID AND AccountUID = '{3FCE1B87-F335-4A25-B570-CFEDA198BE40}' INSERT INTO @RPDetail SELECT acc.AdminID ,se.EntryType ,Convert(varchar(10), se.EntryDate, 120) ,IsNull(dbo.uFnXMLEncode(se.Payee), '-') ,dbo.uFnXMLEncode(se.Account) ,category = dbo.uFnXMLEncode( CASE WHEN se.EntryType = 0 THEN-- Receipts CASE WHEN acc.AccountUID = '{4961EEA9-63AB-4345-9210-2D7234E5984A}' THEN 'Antecedent Transactions' WHEN se.AccountID = @GSTPaidRecAccID THEN 'GST Received' WHEN se.AccountID = @FEGLiabAccID THEN 'FEGS Received' WHEN acc.AssetClassID = 3 THEN 'Land and buildings' WHEN acc.AssetClassID = 7 THEN 'Plant and Equipment' WHEN acc.AssetClassID in (1,2) THEN 'Cash on Hand/Bank' WHEN acc.AssetClassID = 6 THEN 'Work in progress' WHEN acc.AssetClassID = 5 THEN 'Inventory' WHEN acc.AssetClassID = 4 THEN 'Sundry Debtors' WHEN acc.AssetClassID in (8, 9 ,10) THEN 'Other (Pre appointment Assets)' WHEN acc.AssetClassID = 11 THEN 'Legal Recoveries' WHEN acc.AccountGroupID = 5000 THEN 'Trading Receipts' WHEN acc.AccountGroupID in (5010,5010,5020,5030) THEN 'Other Receipts' ELSE 'Other Receipts' END ELSE -- Payments CASE WHEN acc.AccountGroupID in (6005) AND se1.AssetID IS NOT NULL AND IsNull(a.AssetClassID, 0) <> 20 THEN 'Property Realisation and Preservation Costs' --Allocation to asset, but not post appt A/R WHEN se.AccountID = @GSTPaidRecAccID THEN 'GST Paid' WHEN se.AccountID = @FEGLiabAccID THEN 'FEGS Paid' WHEN fa.FeesAccID Is Not Null THEN 'Appointee - remuneration' WHEN ca.CostsAccID Is Not Null THEN 'Appointee - disbursements' WHEN la.LegalAccID Is Not Null THEN 'Legal Fees' WHEN acc.AccountGroupID in (6020,4013) THEN 'Payroll Expenses' WHEN acc.AccountGroupID in (6030) THEN 'Purchases' WHEN acc.AccountGroupID in (6000,4017) THEN 'Other Trading Expense' WHEN cct.CreditorClassID = 1 THEN 'Secured Creditors' WHEN cct.CreditorClassID in (2, 32) THEN 'Priority Creditors' WHEN d.CreditorClassID in (2, 32) THEN 'Priority Creditors' WHEN acc.AccountGroupID in (4016) THEN 'Priority Creditors' WHEN cct.CreditorClassID In(4, 16) THEN 'Unsecured Creditors' WHEN d.CreditorClassID In(4, 16) THEN 'Unsecured Creditors' WHEN cct.CreditorClassID = 8 THEN 'Deferred Creditors' WHEN d.CreditorClassID = 8 THEN 'Deferred Creditors' WHEN acc.AccountGroupID = 7010 THEN 'Contributories Creditors' WHEN acc.AccountGroupID in (6005, 6007 ,6010) THEN 'Other Cost of Realisation' ELSE 'Other Cost of Realisation' --* END END) ,total = se.ReportableTotal ,EntryDate = se.EntryDate FROM #SubEntry se INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.SubEntry se1 ON se1.SubEntryId = se.SubEntryID LEFT OUTER JOIN dbo.Asset a ON a.AssetID = se1.AssetID LEFT JOIN dbo.CreditorClaimType cct ON acc.CreditorClaimTypeID = cct.CreditorClaimTypeID LEFT OUTER JOIN @FeesAcc fa ON fa.FeesAccID = se.AccountID LEFT OUTER JOIN @CostsAcc ca ON ca.CostsAccID = se.AccountID LEFT OUTER JOIN @LegalAcc la ON la.LegalAccID = se.AccountID LEFT OUTER JOIN dbo.Dividend d ON se.CreditorDividendID = d.DividendID ORDER BY se.EntryType, se.EntryDate INSERT INTO @RPSumm SELECT AdminID ,EntryType ,name ,category ,Sum(amt) FROM @RPDetail GROUP BY AdminID ,EntryType ,name ,category --Select * From @RPDetail --Select * From @RPSumm /* Exec dbo.repsp_eLodge5602XML @AdminID = 2540, @AdminTypeID = 10, @StartDate = '20170613' , @FromDate = '20170613', @ToDate = '20180718', @XML='2017-06-132018-07-18ACN603 766 427Infinty Contracting Pty Ltd2017-06-13VQ12/2018162500017500Priority - Wages & Super incl SGC443323.51Priority - Leave of absence12400Priority - Retrenchment12400Secured00Unsecured1083187.12Deferred00VQ000000Priority - Wages & Super incl SGC37.500Priority - Leave of absence000Priority - Retrenchment000Secured000Unsecured000Deferred000Contributories000 ', @SuppressEmployeeNames=0 */ --Get the summary totals INSERT INTO @RP SELECT @AdminID ,prevReceipts = IsNull(Sum(CASE WHEN EntryType = 0 AND EntryDate < @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,prevPayments= IsNull(Sum(CASE WHEN EntryType = 1 AND EntryDate < @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,currReceipts = IsNull(Sum(CASE WHEN EntryType = 0 AND EntryDate >= @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,currPayments = IsNull(Sum(CASE WHEN EntryType = 1 AND EntryDate >= @FromDate THEN se.ReportableTotal ELSE 0 END),0) FROM #SubEntry se /* END R&P SUMMARY */ /* */ /* BUILD THE XML */ SELECT @XML = ( SELECT (SELECT ----------------------------------------------START progressReport (SELECT l.reportStartDate ------------------------START lodgementDetails ,l.reportEndDate ,excelLodged = 'false' FOR XML PATH ('lodgementDetails'), TYPE) ---------END lodgementDetails ,(SELECT ---------------------START Exad (SELECT -----------------------START Company (SELECT --------------------START ACN type = 'ACN' ,value = l.ACN FOR XML PATH ('identifier'), TYPE) -------------END ACN ,l.name WHERE @IsPooledGroup = 0 FOR XML PATH ('company'), TYPE) ---------------END Company , (SELECT -----------------------START pooled data poolName = l.name WHERE @IsPooledGroup = 1 FOR XML PATH ('liquidatorPoolData'), TYPE) ---------------END pooled data ,l.commenceDate ,l.appointmentType ,l.estCompletionDate FOR XML PATH ('exadDetails'), TYPE) --------------END Exad ,(SELECT -----------------START appointment (SELECT ---------------------START appointees appointmentStartDate ,liquidatorNo FROM @Appts FOR XML PATH ('appointees'), TYPE) ---------END appointees FOR XML PATH ('appointment'), TYPE) ---------END appointment ,(SELECT ---------------------------START detailsOfAssets (SELECT ---------------------START asset (SELECT ---------------------START estimate low ,high FROM @Assets FOR XML PATH ('estimate'), TYPE) ---------END estimate ,grossAssets FROM @Assets FOR XML PATH ('asset'), TYPE) ---------END asset ,cashAtBank FROM @Assets FOR XML PATH ('detailsOfAssets'), TYPE) ---------END detailsOfAssets ,(SELECT rataReceived ------------------------START RATA ,asicAssistance FROM @RATA FOR XML PATH ('reportAsToAffairs'), TYPE) ---------END RATA ,(SELECT ------------------------START CREDITOR (SELECT category ------------------------START CREDITORS ,estCount ,estValue FROM @Creds FOR XML PATH ('creditors'), TYPE) ---------END CREDITORS WHERE Exists(SELECT * FROM @Creds) FOR XML PATH ('creditor'), TYPE) ---------END CREDITOR ,(SELECT ------------------------START REMUNERATION (SELECT appointmentType ------------------------START REMUNERATIONS ,fixedAmount ,remunPaid ,disbursePaid FROM @Remun FOR XML PATH ('remuneration'), TYPE) ---------END REMUNERATIONS FOR XML PATH ('remunerations'), TYPE) ---------END REMUNERATION ,(SELECT (SELECT wages ---------------------------START FEG ,leaves ,retrenchment FROM @FEG FOR XML PATH ('paidToEmployee'), TYPE) FOR XML PATH ('fairEntitlement'), TYPE) ---------END FEG ,(SELECT ------------------------START DIVIDEND (SELECT category ------------------------START DIVIDENDS ,estDividend ,rate ,totalPaid FROM @Divs WHERE totalPaid > 0 OR estDividend > 0 FOR XML PATH ('dividends'), TYPE) ---------END DIVIDENDS WHERE Exists(SELECT * FROM @Divs WHERE totalPaid > 0 OR estDividend > 0) FOR XML PATH ('dividends'), TYPE) ---------END DIVIDEND ,(SELECT------------------------------------------START Detail R&P prevReceipts ,prevPayments ,currReceipts ,currPayments ,(SELECT --------------------------------------START Detail R&PLedgers (SELECT ----------------------------------START Receipts group name ,category ,(SELECT --------------------------START Receipts lines detail date ,payee ,amt FROM @RPDetail rd1 WHERE rd1.EntryType = 0 AND rd1.name = rd.name AND rd1.category = rd.category AND EntryDate >= @FromDate FOR XML PATH ('lines'), TYPE) --------END Receipts lines detail FROM @RPDetail rd WHERE EntryType = 0 AND EntryDate >= @FromDate GROUP BY name, category FOR XML PATH ('receipts'), TYPE) ---------END Receipts group ,(SELECT ------------------------------START payments group name ,category ,(SELECT --------------------------START payments lines detail date ,payee ,amt FROM @RPDetail pd1 WHERE pd1.EntryType = 1 AND pd1.name = pd.name AND pd1.category = pd.category AND EntryDate >= @FromDate FOR XML PATH ('lines'), TYPE) --------END payments lines detail FROM @RPDetail pd WHERE EntryType = 1 AND EntryDate >= @FromDate GROUP BY name, category FOR XML PATH ('payments'), TYPE) ---------END payments group WHERE Exists(SELECT * FROM @RPDetail WHERE EntryDate >= @FromDate) FOR XML PATH ('ledgers'), TYPE) -------------END Detail R&P Ledgers FROM @RP FOR XML PATH ('receiptsAndPayments'), TYPE) -----END Detail R&P ,(SELECT ------------------------START RISK OR TASKS (SELECT type ------------------------START RISK OR TASK ,details FROM @RisksOrTasks FOR XML PATH ('riskOrTask'), TYPE) ---------END RISKS OR TASK FOR XML PATH ('risksOrTasks'), TYPE) ---------END RISKS OR TASKS FROM @Lodge l FOR XML PATH ('progressReport'), TYPE) ------------------END progressReport ) DECLARE @Ret varchar(max) = Convert(varchar(Max),@XML) Set @Ret = Replace(@Ret ,'',' ') SELECT @XML = Convert(xml, @Ret) SELECT @XML /* END BUILD THE XML */ SET NOCOUNT OFF GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_eLodge5602XML TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].repsp_eLodge5602XML') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure dbo.repsp_eLodge5602XML GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_eLodge5602XML @AdminID Int ,@AdminTypeID Int ,@StartDate DateTime ,@FromDate DateTime ,@ToDate DateTime ,@SuppressEmployeeNames Bit ,@XML XML OUTPUT AS /* Author: JO Date: 14/5/18 Purpose: To create the 5602 lodgement XML /* /* */ */ */ SET NOCOUNT ON DECLARE @FeesExpAccountID Int DECLARE @CostsExpAccountID Int DECLARE @LegalExpAccountID Int DECLARE @GSTPaidRecAccID Int DECLARE @FEGLiabAccID Int DECLARE @IsPooledGroup Bit = 0 IF Exists(SELECT * FROM dbo.AdminSetting WHERE AdminID = @AdminID AND SettingID = 1011 AND Setting = '1') SET @IsPooledGroup = 1 DECLARE @Lodge Table ( AdminID Int ,reportStartDate Varchar(10) ,reportEndDate Varchar(10) ,name Varchar(200) ,ACN Varchar(20) ,commenceDate Varchar(10) ,appointmentType Varchar(2) ,estCompletionDate Varchar(7) ) DECLARE @Appts TABLE ( AdminID int ,UserID int ,appointmentStartDate Varchar(10) ,liquidatorNo varchar(20) ) DECLARE @Assets TABLE ( AdminID int ,grossAssets DECIMAL(15,2) ,cashAtBank DECIMAL(15,2) ,high DECIMAL(15,2) ,low DECIMAL(15,2) ) DECLARE @RATA TABLE ( AdminID int ,rataReceived varchar(5) ,asicAssistance varchar(5) ) DECLARE @Creds TABLE ( AdminID int ,category varchar(255) ,estCount Int ,estValue DECIMAL(15,2) ) DECLARE @Remun TABLE ( AdminID int ,appointmentType varchar(2) ,fixedAmount DECIMAL(15,2) ,remunPaid DECIMAL(15,2) ,disbursePaid DECIMAL(15,2) ) DECLARE @FEG TABLE ( AdminID int ,wages DECIMAL(15,2) ,leaves DECIMAL(15,2) ,retrenchment DECIMAL(15,2) ) DECLARE @Divs TABLE ( AdminID int ,category varchar(255) ,estDividend DECIMAL(16,2) ,rate DECIMAL(16,2) ,totalPaid DECIMAL(15,2) ) DECLARE @RisksOrTasks TABLE ( AdminID Int ,type varchar(250) ,details varchar(2000) ) DECLARE @RP TABLE ( AdminID int ,prevReceipts DECIMAL(15,2) ,prevPayments DECIMAL(15,2) ,currReceipts DECIMAL(15,2) ,currPayments DECIMAL(15,2) ) DECLARE @FeesAcc TABLE ( AdminID int ,FeesAccID Int ) DECLARE @CostsAcc TABLE ( AdminID int ,CostsAccID Int ) DECLARE @LegalAcc TABLE ( AdminID int ,LegalAccID Int ) DECLARE @RPDetail Table ( AdminID Int ,EntryType Int ,[date] varchar(10) ,payee varchar(250) ,name varchar(2000) ,category varchar(250) ,amt DECIMAL(15,2) ,EntryDate Date ) DECLARE @RPSumm Table ( AdminID Int ,EntryType Int ,name varchar(2000) ,Category varchar(250) ,Total DECIMAL(15,2) ) --Temp table for R&P data CREATE TABLE [dbo].[#SubEntry] ( [EntryID] Int ,[SubEntryID] Int ,[SourceSubEntryID] Int ,[EntryDate] DateTime ,[Payee] nVarchar(200) ,[AccountID] Int ,[Account] Varchar(200) ,[Memo] Varchar(2000) ,[ReportableTotal] DECIMAL(15,2) ,[Tax] DECIMAL(15,2) ,[Direction] int ,[EntryType] Smallint ,[CreditorDividendID] Int ,[AssetID] Int ,[LiabilityID] Int ) --Temp table for joining sub accounts CREATE TABLE dbo.#Account ( AdminID Int ,AccountID Int ) INSERT INTO @Lodge SELECT @AdminID ,reportStartDate = Convert(varchar(10), @FromDate, 120) -- tab.col.value('lodgementDetails[1]/reportStartDate[1]', 'Varchar(10)') ,reportEndDate = tab.col.value('lodgementDetails[1]/reportEndDate[1]', 'Varchar(10)') ,name = tab.col.value('exadDetails[1]/name[1]', 'varchar(200)') ,ACN = tab.col.value('exadDetails[1]/identifier[1]/value[1]', 'varchar(20)') ,commenceDate = tab.col.value('exadDetails[1]/commenceDate[1]', 'varchar(200)') ,appointmentType = tab.col.value('exadDetails[1]/appointmentType[1]', 'varchar(200)') ,estCompletionDate = CASE WHEN @AdminTypeID = 11 THEN Null ELSE tab.col.value('exadDetails[1]/estCompletionDate[1]', 'varchar(200)') END FROM @XML.nodes('/progressReport') as tab(col) INSERT INTO @Appts (AdminID, UserID,appointmentStartDate,liquidatorNo) SELECT apt.AdminID, aa.UserID, Convert(varchar(10), apt.StartDate, 120), CASE WHEN aa.UserID Is Null THEN apt.RegNo ELSE ISNULL(u.AgentNo ,p.RegAgentNo) END FROM dbo.Appointment apt LEFT OUTER JOIN [dbo].[Appointee_Appointment] aa ON aa.AppointmentID = apt.AppointmentID LEFT OUTER JOIN [dbo].[User] u ON u.UserID = aa.UserID INNER JOIN dbo.Admin a ON a.AdminID = apt.AdminID INNER JOIN [dbo].Practice p ON p.PracticeID = a.PracticeID WHERE (apt.EndDate Is Null OR apt.EndDate >= @ToDate) AND apt.StartDate <= @ToDate AND apt.AdminID = @AdminID AND apt.AdminTypeID = @AdminTypeID INSERT INTO @Assets SELECT @AdminID ,grossAssets = tab.col.value('asset[1]/grossAssets[1]', 'DECIMAL(15,2)') ,cashAtBank = tab.col.value('cashAtBank[1]', 'DECIMAL(15,2)') ,high = tab.col.value('asset[1]/estimate[1]/high[1]', 'DECIMAL(15,2)') ,low = tab.col.value('asset[1]/estimate[1]/low[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/detailsOfAssets[1]') as tab(col) INSERT INTO @Creds SELECT @AdminID ,category = tab.col.value('(category/text())[1]', 'varchar(255)') ,estCount = tab.col.value('(estCount/text())[1]', 'Int') ,estValue = tab.col.value('(estValue/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/creditor/creditors') as tab(col) WHERE @AdminTypeID In(6,7,8,10) --ADM, DOCA, OL, CVL INSERT INTO @Remun SELECT @AdminID ,appointmentType = tab.col.value('(appointmentType/text())[1]', 'varchar(2)') ,fixedAmount = tab.col.value('(fixedAmount/text())[1]', 'DECIMAL(15,2)') ,remunPaid = tab.col.value('(remunPaid/text())[1]', 'DECIMAL(15,2)') ,disbursePaid = tab.col.value('(disbursePaid/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/remunerations/remuneration') as tab(col) INSERT INTO @FEG SELECT @AdminID ,wages = tab.col.value('paidToEmployee[1]/wages[1]', 'DECIMAL(15,2)') ,leaves = tab.col.value('paidToEmployee[1]/leaves[1]', 'DECIMAL(15,2)') ,retrenchment = tab.col.value('paidToEmployee[1]/retrenchment[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/fairEntitlement[1]') as tab(col) INSERT INTO @Divs SELECT @AdminID ,category = tab.col.value('(category/text())[1]', 'varchar(255)') ,estDividend = tab.col.value('(estDividend/text())[1]', 'DECIMAL(16,2)') ,rate = tab.col.value('(rate/text())[1]', 'DECIMAL(16,2)') ,totalPaid = tab.col.value('(totalPaid/text())[1]', 'DECIMAL(15,2)') FROM @XML.nodes('/progressReport/dividends/dividends') as tab(col) WHERE @AdminTypeID In(7,8,9,10) --DOCA, OL, MVL, CVL INSERT INTO @RisksOrTasks SELECT AdminID ,Type = CASE WHEN SettingID = 25005 THEN 'Future asset realisations' WHEN SettingID = 25006 THEN 'Investigations' WHEN SettingID = 25007 THEN 'Litigation' WHEN SettingID = 25008 THEN 'Recovery of voidable transactions' WHEN SettingID = 25009 THEN 'Payment of dividend' WHEN SettingID = 25010 THEN 'Other' END ,dbo.uFnXMLEncode(setting) FROM dbo.AdminSetting WHERE AdminID = @AdminID AND SettingID In( 25010 ,25009 ,25008 ,25007 ,25006 ,25005 ) /* R&P SUMMARY */ EXECUTE dbo.repsp_RecPayData @AdminID=@AdminID, @AdminTypeID=@AdminTypeID, @AdminStartDate=@StartDate, @ReportStartDate=@FromDate, @ReportEndDate=@ToDate, @SuppressEmployeeNames=@SuppressEmployeeNames --Delete any GST transfers DELETE #SubEntry FROM #SubEntry setmp INNER JOIN dbo.SubEntry se ON se.SubEntryID = setmp.SourceSubEntryID INNER JOIN dbo.Account acc ON acc.AccountID = setmp.AccountID WHERE acc.AccountGroupID = 4010 AND se.EntryType = 2 --Get the various accounts SELECT @FeesExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{3509E1B4-879E-4F55-8666-F450FF6F3C1A}' ) EXEC usp_AccountsFromID @FeesExpAccountID INSERT INTO @FeesAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @CostsExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{C46BE169-3F99-4EA2-A291-9F72BBCD031C}' ) EXEC usp_AccountsFromID @CostsExpAccountID INSERT INTO @CostsAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @LegalExpAccountID = ( SELECT acc.AccountID FROM dbo.Account acc WHERE acc.AdminID = @AdminID AND acc.AccountUID = '{C6969302-EF4C-4C23-8CC3-C7B4856669D5}' ) EXEC usp_AccountsFromID @LegalExpAccountID INSERT INTO @LegalAcc SELECT acc.AdminID ,acc.AccountID FROM #Account acc SELECT @GSTPaidRecAccID = AccountID FROM dbo.Account WHERE AdminID = @AdminID AND AccountUID = '{8E3FB8E0-F7EF-4493-834F-141030A9A40C}' SELECT @FEGLiabAccID = AccountID FROM dbo.Account WHERE AdminID = @AdminID AND AccountUID = '{3FCE1B87-F335-4A25-B570-CFEDA198BE40}' INSERT INTO @RPDetail SELECT acc.AdminID ,se.EntryType ,Convert(varchar(10), se.EntryDate, 120) ,IsNull(dbo.uFnXMLEncode(se.Payee), '-') ,dbo.uFnXMLEncode(se.Account) ,category = dbo.uFnXMLEncode( CASE WHEN se.EntryType = 0 THEN-- Receipts CASE WHEN acc.AccountUID = '{4961EEA9-63AB-4345-9210-2D7234E5984A}' THEN 'Antecedent Transactions' WHEN se.AccountID = @GSTPaidRecAccID THEN 'GST Received' WHEN se.AccountID = @FEGLiabAccID THEN 'FEGS Received' WHEN acc.AssetClassID = 3 THEN 'Land and buildings' WHEN acc.AssetClassID = 7 THEN 'Plant and Equipment' WHEN acc.AssetClassID in (1,2) THEN 'Cash on Hand/Bank' WHEN acc.AssetClassID = 6 THEN 'Work in progress' WHEN acc.AssetClassID = 5 THEN 'Inventory' WHEN acc.AssetClassID = 4 THEN 'Sundry Debtors' WHEN acc.AssetClassID in (8, 9 ,10) THEN 'Other (Pre appointment Assets)' WHEN acc.AssetClassID = 11 THEN 'Legal Recoveries' WHEN acc.AccountGroupID = 5000 THEN 'Trading Receipts' WHEN acc.AccountGroupID in (5010,5010,5020,5030) THEN 'Other Receipts' ELSE 'Other Receipts' END ELSE -- Payments CASE WHEN acc.AccountGroupID in (6005) AND se1.AssetID IS NOT NULL AND IsNull(a.AssetClassID, 0) <> 20 THEN 'Property Realisation and Preservation Costs' --Allocation to asset, but not post appt A/R WHEN se.AccountID = @GSTPaidRecAccID THEN 'GST Paid' WHEN se.AccountID = @FEGLiabAccID THEN 'FEGS Paid' WHEN fa.FeesAccID Is Not Null THEN 'Appointee - remuneration' WHEN ca.CostsAccID Is Not Null THEN 'Appointee - disbursements' WHEN la.LegalAccID Is Not Null THEN 'Legal Fees' WHEN acc.AccountGroupID in (6020,4013) THEN 'Payroll Expenses' WHEN acc.AccountGroupID in (6030) THEN 'Purchases' WHEN acc.AccountGroupID in (6000,4017) THEN 'Other Trading Expense' WHEN cct.CreditorClassID = 1 THEN 'Secured Creditors' WHEN cct.CreditorClassID in (2, 32) THEN 'Priority Creditors' WHEN d.CreditorClassID in (2, 32) THEN 'Priority Creditors' WHEN acc.AccountGroupID in (4016) THEN 'Priority Creditors' WHEN cct.CreditorClassID In(4, 16) THEN 'Unsecured Creditors' WHEN d.CreditorClassID In(4, 16) THEN 'Unsecured Creditors' WHEN cct.CreditorClassID = 8 THEN 'Deferred Creditors' WHEN d.CreditorClassID = 8 THEN 'Deferred Creditors' WHEN acc.AccountGroupID = 7010 THEN 'Contributories Creditors' WHEN acc.AccountGroupID in (6005, 6007 ,6010) THEN 'Other Cost of Realisation' ELSE 'Other Cost of Realisation' --* END END) ,total = se.ReportableTotal ,EntryDate = se.EntryDate FROM #SubEntry se INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.SubEntry se1 ON se1.SubEntryId = se.SubEntryID LEFT OUTER JOIN dbo.Asset a ON a.AssetID = se1.AssetID LEFT JOIN dbo.CreditorClaimType cct ON acc.CreditorClaimTypeID = cct.CreditorClaimTypeID LEFT OUTER JOIN @FeesAcc fa ON fa.FeesAccID = se.AccountID LEFT OUTER JOIN @CostsAcc ca ON ca.CostsAccID = se.AccountID LEFT OUTER JOIN @LegalAcc la ON la.LegalAccID = se.AccountID LEFT OUTER JOIN dbo.Dividend d ON se.CreditorDividendID = d.DividendID ORDER BY se.EntryType, se.EntryDate INSERT INTO @RPSumm SELECT AdminID ,EntryType ,name ,category ,Sum(amt) FROM @RPDetail GROUP BY AdminID ,EntryType ,name ,category --Select * From @RPDetail --Select * From @RPSumm /* Exec dbo.repsp_eLodge5602XML @AdminID = 2540, @AdminTypeID = 10, @StartDate = '20170613' , @FromDate = '20170613', @ToDate = '20180718', @XML='2017-06-132018-07-18ACN603 766 427Infinty Contracting Pty Ltd2017-06-13VQ12/2018162500017500Priority - Wages & Super incl SGC443323.51Priority - Leave of absence12400Priority - Retrenchment12400Secured00Unsecured1083187.12Deferred00VQ000000Priority - Wages & Super incl SGC37.500Priority - Leave of absence000Priority - Retrenchment000Secured000Unsecured000Deferred000Contributories000 ', @SuppressEmployeeNames=0 */ --Get the summary totals INSERT INTO @RP SELECT @AdminID ,prevReceipts = IsNull(Sum(CASE WHEN EntryType = 0 AND EntryDate < @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,prevPayments= IsNull(Sum(CASE WHEN EntryType = 1 AND EntryDate < @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,currReceipts = IsNull(Sum(CASE WHEN EntryType = 0 AND EntryDate >= @FromDate THEN se.ReportableTotal ELSE 0 END),0) ,currPayments = IsNull(Sum(CASE WHEN EntryType = 1 AND EntryDate >= @FromDate THEN se.ReportableTotal ELSE 0 END),0) FROM #SubEntry se /* END R&P SUMMARY */ /* */ /* BUILD THE XML */ SELECT @XML = ( SELECT (SELECT ----------------------------------------------START progressReport (SELECT l.reportStartDate ------------------------START lodgementDetails ,l.reportEndDate ,excelLodged = 'false' FOR XML PATH ('lodgementDetails'), TYPE) ---------END lodgementDetails ,(SELECT ---------------------START Exad (SELECT -----------------------START Company (SELECT --------------------START ACN type = 'ACN' ,value = l.ACN FOR XML PATH ('identifier'), TYPE) -------------END ACN ,l.name WHERE @IsPooledGroup = 0 FOR XML PATH ('company'), TYPE) ---------------END Company , (SELECT -----------------------START pooled data poolName = l.name WHERE @IsPooledGroup = 1 FOR XML PATH ('liquidatorPoolData'), TYPE) ---------------END pooled data ,l.commenceDate ,l.appointmentType ,l.estCompletionDate FOR XML PATH ('exadDetails'), TYPE) --------------END Exad ,(SELECT -----------------START appointment (SELECT ---------------------START appointees appointmentStartDate ,liquidatorNo FROM @Appts FOR XML PATH ('appointees'), TYPE) ---------END appointees FOR XML PATH ('appointment'), TYPE) ---------END appointment ,(SELECT ---------------------------START detailsOfAssets (SELECT ---------------------START asset (SELECT ---------------------START estimate low ,high FROM @Assets FOR XML PATH ('estimate'), TYPE) ---------END estimate ,grossAssets FROM @Assets FOR XML PATH ('asset'), TYPE) ---------END asset ,cashAtBank FROM @Assets FOR XML PATH ('detailsOfAssets'), TYPE) ---------END detailsOfAssets ,(SELECT rataReceived ------------------------START RATA ,asicAssistance FROM @RATA FOR XML PATH ('reportAsToAffairs'), TYPE) ---------END RATA ,(SELECT ------------------------START CREDITOR (SELECT category ------------------------START CREDITORS ,estCount ,estValue FROM @Creds FOR XML PATH ('creditors'), TYPE) ---------END CREDITORS WHERE Exists(SELECT * FROM @Creds) FOR XML PATH ('creditor'), TYPE) ---------END CREDITOR ,(SELECT ------------------------START REMUNERATION (SELECT appointmentType ------------------------START REMUNERATIONS ,fixedAmount ,remunPaid ,disbursePaid FROM @Remun FOR XML PATH ('remuneration'), TYPE) ---------END REMUNERATIONS FOR XML PATH ('remunerations'), TYPE) ---------END REMUNERATION ,(SELECT (SELECT wages ---------------------------START FEG ,leaves ,retrenchment FROM @FEG FOR XML PATH ('paidToEmployee'), TYPE) FOR XML PATH ('fairEntitlement'), TYPE) ---------END FEG ,(SELECT ------------------------START DIVIDEND (SELECT category ------------------------START DIVIDENDS ,estDividend ,rate ,totalPaid FROM @Divs WHERE totalPaid > 0 OR estDividend > 0 FOR XML PATH ('dividends'), TYPE) ---------END DIVIDENDS WHERE Exists(SELECT * FROM @Divs WHERE totalPaid > 0 OR estDividend > 0) FOR XML PATH ('dividends'), TYPE) ---------END DIVIDEND ,(SELECT------------------------------------------START Detail R&P prevReceipts ,prevPayments ,currReceipts ,currPayments ,(SELECT --------------------------------------START Detail R&PLedgers (SELECT ----------------------------------START Receipts group name ,category ,(SELECT --------------------------START Receipts lines detail date ,payee ,amt FROM @RPDetail rd1 WHERE rd1.EntryType = 0 AND rd1.name = rd.name AND rd1.category = rd.category AND EntryDate >= @FromDate FOR XML PATH ('lines'), TYPE) --------END Receipts lines detail FROM @RPDetail rd WHERE EntryType = 0 AND EntryDate >= @FromDate GROUP BY name, category FOR XML PATH ('receipts'), TYPE) ---------END Receipts group ,(SELECT ------------------------------START payments group name ,category ,(SELECT --------------------------START payments lines detail date ,payee ,amt FROM @RPDetail pd1 WHERE pd1.EntryType = 1 AND pd1.name = pd.name AND pd1.category = pd.category AND EntryDate >= @FromDate FOR XML PATH ('lines'), TYPE) --------END payments lines detail FROM @RPDetail pd WHERE EntryType = 1 AND EntryDate >= @FromDate GROUP BY name, category FOR XML PATH ('payments'), TYPE) ---------END payments group WHERE Exists(SELECT * FROM @RPDetail WHERE EntryDate >= @FromDate) FOR XML PATH ('ledgers'), TYPE) -------------END Detail R&P Ledgers FROM @RP FOR XML PATH ('receiptsAndPayments'), TYPE) -----END Detail R&P ,(SELECT ------------------------START RISK OR TASKS (SELECT type ------------------------START RISK OR TASK ,details FROM @RisksOrTasks FOR XML PATH ('riskOrTask'), TYPE) ---------END RISKS OR TASK WHERE Not @AdminTypeID = 11 FOR XML PATH ('risksOrTasks'), TYPE) ---------END RISKS OR TASKS FROM @Lodge l FOR XML PATH ('progressReport'), TYPE) ------------------END progressReport ) DECLARE @Ret varchar(max) = Convert(varchar(Max),@XML) Set @Ret = Replace(@Ret ,'',' ') SELECT @XML = Convert(xml, @Ret) SELECT @XML /* END BUILD THE XML */ SET NOCOUNT OFF GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_eLodge5602XML TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=2487, @BatchID=2254, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=1022, @BatchID=44921, @ForValidation=0, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[uFnIsTaxFileNumberValid]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[uFnIsTaxFileNumberValid] GO CREATE FUNCTION dbo.[uFnIsTaxFileNumberValid] (@TaxfileNumber Varchar(11)) RETURNS Bit AS BEGIN /* Author: Stewart McLeod Date: 8 Apr 2009 Purpose: TFN Validation Notes: Revision History: Allow for TFN not numeric SM 17/4/2019 Added back the validation pass for the exceptions '000000000' '111111111' '333333333' '444444444' '987654321' */ -- DECALRE VARIABLES DECLARE @TOTAL MONEY DECLARE @RESULT MONEY DECLARE @ReturnValue Bit DECLARE @DIGIT1 int DECLARE @DIGIT2 int DECLARE @DIGIT3 int DECLARE @DIGIT4 int DECLARE @DIGIT5 int DECLARE @DIGIT6 int DECLARE @DIGIT7 int DECLARE @DIGIT8 int DECLARE @DIGIT9 int DECLARE @WEIGHTFACTOR1 int DECLARE @WEIGHTFACTOR2 int DECLARE @WEIGHTFACTOR3 int DECLARE @WEIGHTFACTOR4 int DECLARE @WEIGHTFACTOR5 int DECLARE @WEIGHTFACTOR6 int DECLARE @WEIGHTFACTOR7 int DECLARE @WEIGHTFACTOR8 int DECLARE @WEIGHTFACTOR9 int -- POPULATE VARIABLES -- strip out the spaces SELECT @TaxfileNumber = replace(@TaxfileNumber,' ','') IF ISNUMERIC(@TaxfileNumber) = 0 BEGIN SELECT @ReturnValue = 0 END ELSE BEGIN SELECT @DIGIT1 = SUBSTRING(@TaxfileNumber,1,1) SELECT @DIGIT2 = SUBSTRING(@TaxfileNumber,2,1) SELECT @DIGIT3 = SUBSTRING(@TaxfileNumber,3,1) SELECT @DIGIT4 = SUBSTRING(@TaxfileNumber,4,1) SELECT @DIGIT5 = SUBSTRING(@TaxfileNumber,5,1) SELECT @DIGIT6 = SUBSTRING(@TaxfileNumber,6,1) SELECT @DIGIT7 = SUBSTRING(@TaxfileNumber,7,1) SELECT @DIGIT8 = SUBSTRING(@TaxfileNumber,8,1) SELECT @DIGIT9 = SUBSTRING(@TaxfileNumber,9,1) SELECT @WEIGHTFACTOR1 = 10 SELECT @WEIGHTFACTOR2 = 7 SELECT @WEIGHTFACTOR3 = 8 SELECT @WEIGHTFACTOR4 = 4 SELECT @WEIGHTFACTOR5 = 6 SELECT @WEIGHTFACTOR6 = 3 SELECT @WEIGHTFACTOR7 = 5 SELECT @WEIGHTFACTOR8 = 2 SELECT @WEIGHTFACTOR9 = 1 -- CALCULATION OF EACH DIGIT X BY WEIGHTING SELECT @TOTAL = (@DIGIT1 * @WEIGHTFACTOR1) + (@DIGIT2 * @WEIGHTFACTOR2) + (@DIGIT3 * @WEIGHTFACTOR3) + (@DIGIT4 * @WEIGHTFACTOR4) + (@DIGIT5 * @WEIGHTFACTOR5) + (@DIGIT6 * @WEIGHTFACTOR6) + (@DIGIT7 * @WEIGHTFACTOR7) + (@DIGIT8 * @WEIGHTFACTOR8) + (@DIGIT9 * @WEIGHTFACTOR9) -- DETERMINE IF ANY REMAINDER FROM DIVIDING BY 11 SELECT @RESULT = @TOTAL / 11 SELECT @ReturnValue = CASE WHEN (@RESULT = FLOOR( @RESULT ) AND LEN(@TaxfileNumber) = 9) THEN 1 ELSE 0 END IF @TaxfileNumber in ('000000000' ,'111111111' ,'333333333' ,'444444444' ,'987654321') SET @ReturnValue = 1 END RETURN @ReturnValue END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].[uFnIsTaxFileNumberValid] TO [insol2_users] GO If exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_CreditorClaimsByType]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_CreditorClaimsByType] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_CreditorClaimsByType @AdminID Int ,@AsAtDate DateTime ,@CreditorClaimInClause Varchar(1000) = NULL ,@Filter Int = 0 ,@IncludeNilCreditors Bit = 0 ,@IncludeFileNotesOnly Bit = 0 ,@SuppressNames Bit = 0 AS /* Author: AUTOGENERATED Date: 12 Apr 2002 Purpose: Notes: Revision History: SM - Jan 08 use cred claims insteaad of entries add include nil creds tmp tables SM 27/4/09 divide by zero SM 2/2/2011 Add last file note SM 4/4/2012 Added rejection reasons JO 16/2/17 Added name suppression and small debt details Si 23/7/2019 = Updated the report to show fully admitted excluded employee claims IF YOU UPDATE THE Columns in the reports data ALSO UPDATE repsp_CreditorSummaryByClaimType Exec dbo.repsp_CreditorClaimsByType 1074, '20110202', ' CreditorClaimTypeID In(100,150,160,200,240,250,255,260,270,280,400,500,600,10000)', 0, 0 */ SET NOCOUNT ON -- DECLARE DECLARE @HasUnsSubAccounts Bit = dbo.uFnHasUnsSubAccounts(@AdminID) DECLARE @SysLoc Int = dbo.ufnSystemLocation() DECLARE @SuppressTxt nvarchar(70) = 'Name and address omitted' --Temp tables CREATE TABLE dbo.#Data ( [ID] Int ) /* DECLARE @NilCreditors Table ( CreditorID Int NOT NULL ,CreditorClaimTypeID Int NOT NULL ,ClaimValue Money NOT NULL ) */ DECLARE @CreditorClass Table ( CreditorClassID Int NOT NULL ,CreditorClaimTypeID Int NOT NULL ) DECLARE @RejEmpClaims Table ( CreditorID Int NOT NULL ,RejectedPriorityAmount Money NOT NULL ) DECLARE @RejEmpClaimTotals Table ( CreditorID Int NOT NULL ,ClaimTotals Money NOT NULL ,RejectedTotals Money NOT NULL ,RejectedPriorityAmount Money ) DECLARE @CreditorClaims Table ( CreditorID Int NOT NULL ,CreditorClassID Int NOT NULL ,CreditorClaimTypeID Int ,RATAAmount Money ,AdvisedAmount Money ,ClaimedTotalAmount Money ,AdmittedAmount Money ,RejectedAmount Money ,RejectionReasons varchar(2000) ,UnderConsiderationAmount Money ,DistributedAmount Money ,RejectedPriorityAdmitted Money ,RemainingAmount Money ,ControlAmount Money ,AccountID Int ,IsRATACreditor Bit ,CreditorName nVarChar(250) ,CreditorAddress nVarChar(750) ,CreditorReference nVarChar(50) ,NoClaimAdvised Bit ,ShowClaim Bit ,RejPriorityUnsClaim Bit ) DECLARE @SumCreditorClaimsbyClass Table ( CreditorID Int NOT NULL ,CreditorClassID Int NOT NULL ,RATAAmount Money NOT NULL ,AdvisedAmount Money NOT NULL ,ClaimedTotalAmount Money NOT NULL ,AdmittedAmount Money NOT NULL ,RejectedAmount Money NOT NULL ,UnderConsiderationAmount Money NOT NULL ,DistributedAmount Money NOT NULL ) DECLARE @SUMRATA_ADVEST Table ( CreditorID Int NOT NULL ,HasAdvisedClaims Bit NOT NULL ) DECLARE @LastfileNote TABLE ( DocumentID Int ,CreditorID Int) -- TMP TABLES INSERT INTO @LastfileNote SELECT Max(DocumentID),CreditorID FROM dbo.Document GROUP BY CreditorID IF NOT @CreditorClaimInClause Is Null exec dbo.usp_Split @CreditorClaimInClause ELSE INSERT INTO dbo.#Data SELECT CreditorClaimTypeID From dbo.CreditorClaimType INSERT INTO @CreditorClass SELECT CreditorClassID , CASE WHEN CreditorClaimTypeID BETWEEN 200 AND 280 THEN 250 ELSE CreditorClaimTypeID END FROM dbo.CreditorClaimType WHERE CreditorClaimTypeID IN (SELECT ID FROM dbo.#Data) INSERT INTO @CreditorClaims SELECT ccl.CreditorID ,cct.CreditorClassID --c.CreditorClassID ,CreditorClaimTypeID = ccl.CreditorClaimTypeID ,ccl.RATAAmount ,ccl.AdvisedAmount ,ClaimedTotalAmount = ccl.ClaimedTotalAmount ,ccl.AdmittedAmount ,RejectedAmount = CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) ELSE ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE ccl.RejectedAmount END ,RejectionReasons = c.RejectionReasons ,UnderConsiderationAmount = ccl.UnderConsiderationAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted - (CASE WHEN ccl.RejectedAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.RejectedAmount ELSE ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted -- ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE 0 END)) ,DistributedAmount = CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN ( (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount = ccl.RejectedAmount) AND (ccl.AdmittedAmount + ccl.RejectedPriorityAdmitted <> 0) ) THEN ROUND( convert(float,ccl.DistributedAmount) * convert(float,ccl.AdmittedAmount) / (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) ,2) ELSE ccl.DistributedAmount -- if it doesnt add up (i.e changed the admitted after the div, what to do) END ELSE ccl.DistributedAmount END ,RejectedPriorityAdmitted = 0 --ccl.RejectedPriorityAdmitted ,RemainingAmount = -- Claim less Rej less distrib ccl.ClaimedTotalAmount - ( CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) ELSE ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE ccl.RejectedAmount END ) - ( CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount = ccl.RejectedAmount) AND (ccl.AdmittedAmount + ccl.RejectedPriorityAdmitted <> 0) THEN ROUND( convert(float,ccl.DistributedAmount) * convert(float,ccl.AdmittedAmount) / (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) ,2) ELSE ccl.DistributedAmount -- if it doesnt add up (i.e changed the admitted after the div, what to do) END ELSE ccl.DistributedAmount END ) ,ControlAmount = CASE WHEN c.PODAmount > 0 AND c.PODIsInformal = 1 THEN CASE WHEN ccl.AdvisedAmount > 0 THEN ccl.AdvisedAmount WHEN ccl.RATAAmount > 0 THEN ccl.RATAAmount ELSE 0 END WHEN ccl.ClaimedTotalAmount > 0 THEN CASE WHEN ccl.UnderConsiderationAmount > 0 THEN ccl.ClaimedTotalAmount WHEN ccl.AdmittedAmount > 0 THEN ccl.AdmittedAmount WHEN ccl.RejectedAmount = ccl.ClaimedTotalAmount THEN 0 ELSE ccl.ClaimedTotalAmount END WHEN c.PODAmount > 0 AND ccl.ClaimedTotalAmount = 0 THEN 0 WHEN ccl.AdvisedAmount > 0 THEN ccl.AdvisedAmount WHEN ccl.RATAAmount > 0 THEN ccl.RATAAmount ELSE 0 END ,ccl.AccountID ,c.IsRATACreditor ,c.CreditorName ,CreditorAddress = c.Address + Char(13) + ISNULL(c.City + ' ','') + ISNULL(c.State + ' ', '') + ISNULL(c.PostCode + ' ','') + ISNULL(c.Country + ' ','') ,c.CreditorReference ,NoClaimAdvised = ISNULL(c.NoClaimAdvised,0) ,ShowClaim = CASE WHEN ccl.AdmittedAmount + ccl.UnderConsiderationAmount + ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) > 0 THEN 1 WHEN ccl.ClaimedTotalAmount > 0 THEN 1 WHEN ccl.AdvisedAmount > 0 THEN 1 WHEN ccl.RATAAmount > 0 THEN 1 ELSE 0 END ,RejPriorityUnsClaim = 0 FROM dbo.CreditorClaim ccl INNER JOIN dbo.#Data #d ON #d.ID = ccl.CreditorClaimTypeID INNER JOIN dbo.repvw_Creditor c ON c.CreditorID = ccl.CreditorID INNER JOIN dbo.CreditorClaimType cct ON cct.CreditorClaimTypeID = ccl.CreditorClaimTypeID WHERE c.AdminID = @AdminID -- Insert Employee Rejected Amounts INSERT INTO @CreditorClaims SELECT ccl.CreditorID ,c.CreditorClassID ,CreditorClaimTypeID = cct.CreditorClaimTypeID --ccl.CreditorClaimTypeID ,RATAAmount = 0 --ccl.RATAAmountccl.RATAAmount ,ccl.AdvisedAmount ,ClaimedTotalAmount = ccl.RejectedPriorityAmount ,AdmittedAmount = ccl.RejectedPriorityAdmitted ,RejectedAmount = CASE WHEN ccl.RejectedAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.RejectedAmount ELSE ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted -- ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE 0 END ,RejectionReasons = c.RejectionReasons ,UnderConsiderationAmount = ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted - (CASE WHEN ccl.RejectedAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.RejectedAmount ELSE ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted -- ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE 0 END) ,DistributedAmount = CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount = ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.DistributedAmount ELSE ROUND( convert(float,ccl.DistributedAmount) * convert(float,ccl.RejectedPriorityAdmitted) / (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE 0 -- if it doesnt add up (i.e changed the admitted after the div, what to do) END ELSE 0 END ,RejectedPriorityAdmitted = ccl.RejectedPriorityAdmitted ,RemainingAmount = -- Claim less Rej less distrib ccl.RejectedPriorityAmount - ( CASE WHEN ccl.RejectedAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount <> ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.RejectedAmount ELSE ROUND( convert(float,ccl.RejectedAmount) * (convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) / (convert(float,ccl.ClaimedTotalAmount) - convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAmount) - convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted -- ccl.RejectedAmount - (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) END ELSE 0 END ) - ( CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN (ccl.RejectedPriorityAmount > 0) AND (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted + ccl.ClaimedTotalAmount - ccl.AdmittedAmount = ccl.RejectedAmount) THEN CASE WHEN (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) = 0 THEN ccl.DistributedAmount ELSE ROUND( convert(float,ccl.DistributedAmount) * convert(float,ccl.RejectedPriorityAdmitted) / (convert(float,ccl.AdmittedAmount) + convert(float,ccl.RejectedPriorityAdmitted)) ,2) END ELSE 0 -- if it doesnt add up (i.e changed the admitted after the div, what to do) END ELSE 0 END ) ,ControlAmount = CASE WHEN ccl.RejectedPriorityAmount > 0 THEN CASE WHEN ccl.ClaimedTotalAmount - ccl.AdmittedAmount + ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted = ccl.RejectedAmount -- ccl.UnderConsiderationAmount (ccl.RejectedPriorityAmount - ccl.RejectedPriorityAdmitted) THEN ccl.RejectedPriorityAdmitted ELSE ccl.RejectedPriorityAmount END ELSE 0 --CASE --WHEN --THEN --ELSE --END END ,ccl.AccountID ,c.IsRATACreditor ,c.CreditorName ,CreditorAddress = c.Address + Char(13) + ISNULL(c.City + ' ','') + ISNULL(c.State + ' ', '') + ISNULL(c.PostCode + ' ','') + ISNULL(c.Country + ' ','') ,c.CreditorReference ,NoClaimAdvised = ISNULL(c.NoClaimAdvised,0) ,ShowClaim = CASE WHEN ccl.RejectedPriorityAdmitted + ccl.UnderConsiderationAmount + ccl.RejectedAmount > 0 THEN 1 WHEN ccl.RejectedPriorityAmount > 0 THEN 1 WHEN ccl.AdvisedAmount > 0 THEN 1 WHEN ccl.RATAAmount > 0 THEN 1 ELSE 0 END ,RejPriorityUnsClaim = 1 FROM dbo.CreditorClaim ccl INNER JOIN dbo.#Data #d ON #d.ID = ccl.CreditorClaimTypeID INNER JOIN dbo.repvw_Creditor c ON c.CreditorID = ccl.CreditorID INNER JOIN dbo.CreditorClaimType cct ON cct.CreditorClaimTypeID = ccl.CreditorClaimTypeID WHERE c.AdminID = @AdminID AND ccl.RejectedPriorityAmount > 0 IF @IncludeNilCreditors = 1 --Insert any creditors who don;t have claims INSERT INTO @CreditorClaims (CreditorID,CreditorClassID,CreditorName,CreditorAddress,CreditorReference,NoClaimAdvised) SELECT c.CreditorID ,c.CreditorClassID ,c.CreditorName ,CreditorAddress = ISNULL(Replace(Replace(Replace(Address, char(13),''), char(10),', '),',,',','),'') + ISNULL(c.City + ' ','') + ISNULL(c.State + ' ', '') + ISNULL(c.PostCode + ' ','') + ISNULL(c.Country + ' ','') ,c.CreditorReference ,NoClaimAdvised = ISNULL(c.NoClaimAdvised,0) FROM dbo.repvw_Creditor c INNER JOIN @CreditorClass cs ON cs.CreditorClassID = c.CreditorClassID WHERE c.AdminID = @AdminID AND c.CreditorID Not In(SELECT CreditorID From @CreditorClaims) -- *** ADV EST *** -- Adv Est not equal to RATA INSERT INTO @SUMRATA_ADVEST SELECT DISTINCT CreditorID ,HasAdvisedClaims = CASE WHEN SUM(AdvisedAmount) > 0 THEN 1 ELSE 0 END FROM @CreditorClaims WHERE RATAAmount <> AdvisedAmount GROUP BY CreditorID -- If the Adv is zero use the RATA (where no other Adv amts for Creditor) UPDATE @CreditorClaims SET AdvisedAmount = CASE WHEN sra.CreditorID IS NULL OR sra.HasAdvisedClaims = 0 THEN ccl.RATAAmount ELSE ISNULL(ccl.AdvisedAmount,0) END FROM @CreditorClaims ccl LEFT OUTER JOIN @SUMRATA_ADVEST sra ON sra.CreditorID = ccl.CreditorID -- If the Creditor doesn't have a claim UPDATE @CreditorClaims SET AdvisedAmount = 0 FROM @CreditorClaims ccl LEFT OUTER JOIN @SUMRATA_ADVEST sra ON sra.CreditorID = ccl.CreditorID WHERE ccl.NoClaimAdvised = 1 -- If other claims for the same creditor have Adv amt UPDATE @CreditorClaims SET ControlAmount = CASE WHEN HasAdvisedClaims = 0 OR (ccl.AdmittedAmount + ccl.UnderConsiderationAmount + ccl.RejectedAmount + ccl.ClaimedTotalAmount > 0) THEN ccl.ControlAmount ELSE ccl.AdvisedAmount END FROM @CreditorClaims ccl INNER JOIN @SUMRATA_ADVEST sra ON sra.CreditorID = ccl.CreditorID -- Has No Claim UPDATE @CreditorClaims SET ControlAmount = CASE WHEN NoClaimAdvised = 1 THEN 0 ELSE ccl.ControlAmount END FROM @CreditorClaims ccl -- *** REPORT DATA *** SELECT FileNoteTitle = convert(varchar(20),doc.ReturnByDate,101) + ISNULL(ISNULL(' (' + u.Reference1 + ')',' (' + u.Name + ')'),'') + ' - ' + doc.KeyWords ,CreditorID = ccl.CreditorID ,CreditorName = CASE WHEN @SuppressNames = 1 AND IsNull(c.Flags,0) & 32 = 32 THEN @SuppressTxt ELSE ccl.CreditorName + (CASE WHEN ccl.RejPriorityUnsClaim = 1 THEN ' (Excl. Priority)' ELSE '' END) END + CASE WHEN IsNull(c.Flags,0) & 2 = 2 THEN ' #' ELSE '' END ,CreditorClassID = ccl.CreditorClassID ,CreditorClass = cc.Description ,DisplayOrder = cc.DisplayOrder ,CreditorClaimTypeID = IsNull(ccl.CreditorClaimTypeID,0) ,CreditorClaimType = IsNull( CASE WHEN cct.CreditorClaimTypeID = 400 AND NOT acc.ParentAccount_AccountID IS NULL THEN --@HasUnsSubAccounts = 1 THEN cct.Description + ': ' + acc.Description + (CASE WHEN ccl.RejPriorityUnsClaim = 1 THEN ' (Excl. Priority)' ELSE '' END) ELSE cct.Description + (CASE WHEN ccl.RejPriorityUnsClaim = 1 THEN ' (Excl. Priority)' ELSE '' END) END, '') ,RATAAmount = ccl.RATAAmount ,AdvisedAmount = ccl.AdvisedAmount ,ClaimedTotalAmount = ccl.ClaimedTotalAmount ,AdmittedAmount = ccl.AdmittedAmount ,RejectedAmount = ccl.RejectedAmount ,RejectionReasons = ccl.RejectionReasons ,UnderConsiderationAmount = ccl.UnderConsiderationAmount ,DistributedAmount = ccl.DistributedAmount ,RemainingAmount = ccl.RemainingAmount ,ControlAmount = ccl.ControlAmount ,CreditorMemo = c.Memo ,CreditorAddress = ccl.CreditorAddress ,CreditorReference = ccl.CreditorReference ,FilenoteUser = u.Name ,LastFileNoteTitle = doc.KeyWords ,LastFileNoteMemo = doc.Memo ,FileNoteDate = doc.ReturnByDate --,ccl.ShowClaim FROM @CreditorClaims ccl INNER JOIN dbo.Creditor c ON c.CreditorID = ccl.CreditorID LEFT OUTER JOIN dbo.Account acc ON ccl.AccountID = acc.AccountID LEFT OUTER JOIN dbo.genvw_CreditorClaimType cct ON cct.CreditorClaimTypeID = ccl.CreditorClaimTypeID LEFT OUTER JOIN dbo.genvw_CreditorClass cc ON cc.CreditorClassID = ccl.CreditorClassID LEFT OUTER JOIN @LastfileNote lfn ON lfn.CreditorID = ccl.CreditorID LEFT OUTER JOIN dbo.genvw_Document doc ON lfn.DocumentID = doc.DocumentID LEFT OUTER JOIN dbo.[USER] u ON doc.UserID = u.UserID WHERE (NOT (@Filter = 1) OR (ccl.IsRATACreditor = 1)) AND (NOT (@Filter = 2) OR (ccl.IsRATACreditor = 0)) AND (NOT (@Filter = 3) OR (ccl.ClaimedTotalAmount > 0)) AND (NOT (@Filter = 4) OR (ccl.ClaimedTotalAmount = 0)) AND (NOT (@Filter = 5) OR (ccl.ClaimedTotalAmount > 0 AND ccl.UnderConsiderationAmount > 0) ) AND (NOT (@Filter = 6) OR (ccl.ClaimedTotalAmount > 0 AND (ccl.AdmittedAmount + ccl.RejectedAmount + ccl.RejectedPriorityAdmitted) > 0) ) AND (NOT (@Filter = 7) OR ( ccl.RejectedAmount + ccl.RejectedPriorityAdmitted > 0 ) ) AND (NOT (@Filter = 8) OR ( ccl.RejectedAmount + ISNULL(ccl.RejectedPriorityAdmitted,0) > 0 AND ccl.ClaimedTotalAmount = ccl.RejectedAmount + ISNULL(ccl.RejectedPriorityAdmitted,0) ) ) AND ((@IncludeNilCreditors = 1) OR (ccl.ShowClaim = 1)) AND ((@IncludeFileNotesOnly = 0) OR (NOT doc.DocumentID IS NULL)) --AND ((@IncludeNilCreditors = 1) OR (ccl.NoClaimAdvised = 0)) ORDER BY cc.DisplayOrder , ccl.CreditorClaimTypeID, CreditorClass, CreditorClaimType ,CASE WHEN @SuppressNames = 1 AND IsNull(c.Flags,0) & 32 = 32 THEN @SuppressTxt ELSE ccl.CreditorName END SET NOCOUNT OFF RETURN @@ERROR GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].[repsp_CreditorClaimsByType] TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_UKBatchDetailListing]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_UKBatchDetailListing] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_UKBatchDetailListing @BatchID int = Null ,@EntryID int = Null ,@BatchInClause Text = Null AS /* REVISION xx Added Batch In Clause SM 01/12/2010 Added ACN SM 06/12/2010 Batch detail report add the transaction's payee bank details SM 08/12/2010 Change join on batch tbl in Report Data Si 11/03/2014 PayeeAccountName Si 25/07/2019 Addede HeaderBSB and HeaderAccountNo EXEC repsp_UKBatchDetailListing 289 */ SET NOCOUNT ON DECLARE @ACN TABLE ( AdminID Int ,PropertyValue Varchar(2000) ) DECLARE @SubEntry TABLE ( [EntryID] Int ,[BatchID] Int ,[Reference] Varchar(50) Null ,[EntryDate] DateTime Null ,[AdminShortName] Varchar(1000) Null ,[AdminName] Varchar(1000) Null ,[AdminID] Int ,[Payee] Varchar(200) Null ,[PayeeAddress] Varchar(300) Null ,[PaymentTerms] Varchar(200) Null ,[PayeeBankName] Varchar(200) Null ,[PayeeAccountName] Varchar(200) Null ,[PayeeBankAddress] Varchar(200) Null ,[PayeeBSB] Varchar(20) Null ,[PayeeBankAccountNo] Varchar(30) Null ,[Account] Varchar(150) Null ,[Net] Money Null ,[TaxCode] Varchar(10) Null ,[Tax] Money Null ,[Total] Money Null ,[Allocation] Varchar(2000) Null ,[ReceiptType] Varchar(50) Null ,[ReceiptBankAcc] Varchar(100) Null ,[IsBatchPosting] bit Null ,[HeaderAccount] Varchar(150) Null ,[HeaderTotal] Money Null ,[HeaderMemo] Varchar(2000) Null ,[RelatedEntryID] Int Null ,[ISAFees] Money Null ,[ISAFeeType] Varchar(75) Null ,EntryReference2 varchar(1000) ,PracticeID int ,PracticeName varchar(100) ,PracticeCorroName varchar(100) ,PracticeABN varchar(100) ,PracticeAddress varchar(850) ,PracticeEmail varchar(150) ,PracticePhone varchar(150) ,PracticeWeb varchar(150) ,HeaderBSB varchar(20) ,HeaderAccountNo varchar(30) ) CREATE TABLE dbo.#Data ( ID Int Not Null ) If @BatchInClause Is Not Null OR @BatchID Is Not Null BEGIN If @BatchInClause Is Not Null EXEC dbo.usp_Split @BatchInClause ELSE INSERT INTO dbo.#Data Values (@BatchID) DECLARE @Batch Table ( BatchID Int ,Direction Int ) DECLARE @BatchApp Table ( BatchID Int ,Flags Int ,UserName Varchar(200) ,Action Varchar(200) ,ActionDescription Varchar(200) ,TimeStamp Varchar(50) ) DECLARE @BatchApp2 Table ( BatchID Int ,ActionDescription Varchar(2000) ) INSERT INTO @Batch SELECT b.BatchID ,CASE WHEN acc.AccountGroupID = 1020 THEN -1 ELSE 1 END FROM dbo.#Data d INNER JOIN dbo.Batch b ON b.BatchID = d.ID INNER JOIN dbo.Account acc ON acc.accountID = b.accountID INSERT INTO @BatchApp SELECT b.BatchID ,Flags = CASE WHEN acc.AccountGroupID = 1030 THEN 5000000 ELSE 600000 END + tab.col.value('@Flags', 'int') ,UserName = tab.col.value('User[1]', 'Varchar(200)') ,Action = tab.col.value('Action[1]', 'Varchar(200)') ,ActionDescription = Null ,TimeStamp = tab.col.value('Timestamp[1]', 'Varchar(14)') FROM dbo.Batch b INNER JOIN @Batch d ON d.BatchID = b.BatchID INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountId CROSS APPLY b.Data.nodes('/Items/Item') as tab(col) UPDATE @BatchApp SET ActionDescription = '(' + (SELECT Tag FROM dbo.Lookup Where LookupListID = 10 AND Flag = CASE WHEN ba.Flags = 5262144 THEN 5000000 ELSE 6000000 END) + ')' FROM @BatchApp ba WHERE ba.Flags In(5262144, 6262144) UPDATE @BatchApp SET Action = 'Submitted' ,ActionDescription = '' FROM @BatchApp ba WHERE ba.Flags In(5000512, 6000512) UPDATE @BatchApp SET ActionDescription = '(' + l.Description + ')' FROM @BatchApp ba INNER JOIN dbo.Lookup l ON l.Flag = ba.Flags AND l.LookupListID = 10 INSERT INTO @BatchApp2 SELECT BatchID ,Null FROM @Batch UPDATE @BatchApp2 SET ActionDescription = ' ' + ISNULL( Replace( ( SELECT Action + ' ' + ActionDescription + ' - ' + UserName + ' - ' + Timestamp + '| ' As 'data()' FROM @BatchApp WHERE BatchID = b2.BatchID FOR XML PATH('') ) , '| ', CHAR(13) + CHAR(10)) , '') + CASE WHEN b.PostedBy_UserID Is not Null THEN ' Posted - ' + u.LastName + ', ' + u.FirstName + ' - ' + Convert(varchar(20), b.BatchDate, 3) + ' ' + Convert(varchar(5), b.BatchDate, 8) ELSE '' END FROM @BatchApp2 b2 INNER JOIN dbo.Batch b ON b.BatchID = b2.BatchID LEFT OUTER JOIN dbo.[User] u ON u.UserId = b.PostedBy_UserID INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID, Payee,PayeeAddress,PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = dbo.uFnHeaderSubEntryReference (se.EntryID) ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = a.AdminID ,Payee = se.Payee ,PayeeAddress = e.Address ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] ,Net = (se.Net * se.Direction * d.Direction) ,TaxCode = tc.TaxCode ,Tax = (se.Tax * se.Direction * d.Direction) ,Total = (se.Total * se.Direction * d.Direction) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID WHERE (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) AND (LiabilityID Is Null) AND (IsNull(e.SweepID, 0) = 0) DECLARE @APEnts Table ( EntryID Int ,BatchID Int ,LiabilityID Int ,Total Money ,Factor Decimal (19,9) ,SourceEntryID Int ) INSERT INTO @APEnts SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,se.LiabilityID ,se.Net ,1 ,Null FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 WHERE (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) AND (LiabilityID Is Not Null) UPDATE @APEnts SET Factor = Abs(CONVERT(Numeric(19,9), e.Total) / CONVERT(Numeric(19,9), l.LiabilityValue)) ,SourceEntryID = l.EntryID FROM @APEnts e INNER JOIN dbo.Liability l ON e.LiabilityID = l.LiabilityID WHERE l.LiabilityValue <> 0 INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID, Payee,PayeeAddress,PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = se.Reference ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = a.AdminID ,Payee = se.Payee ,PayeeAddress = e.Address ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] + ' *' ,Net = Round((se.Net * se.Direction * d.Direction) * ET.Factor ,2) ,TaxCode = tc.TaxCode ,Tax = Round((se.Tax * se.Direction * d.Direction) * ET.Factor ,2) ,Total = Round((se.Total * se.Direction * d.Direction) * ET.Factor ,2) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN @APEnts et ON et.EntryID = e.EntryID INNER JOIN dbo.Subentry se ON et.SourceEntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID END ELSE BEGIN INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID,Payee,PayeeAddress,PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = se.Reference ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = se.ContextID ,Payee = se.Payee ,PayeeAddress = e.Address ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] ,Net = (se.Net * se.Direction * -1) ,TaxCode = tc.TaxCode ,Tax = (se.Tax * se.Direction * -1) ,Total = (se.Total * se.Direction * -1) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID --AND e.BatchID > 0 AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID WHERE ((@BatchID Is Null) OR (e.BatchID = @BatchID)) AND ((@EntryID Is Null) OR (e.EntryID = @EntryID)) AND (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) END --Select * fROM @APEnts --Select * from @SubEntry --exec dbo.repsp_UKBatchDetailListing Null, Null, 'BatchID In(4453)' -- Get ISA Fees Info UPDATE @SubEntry SET ISAFees = Isnull(se.ReportableTotal,0) ,ISAFeeType = CASE WHEN acc.AccountUID = '025F4A7C-7EA2-4429-93C1-6C5F3A75C690' THEN 'ISA Transaction Fee' WHEN acc.AccountUID = 'BC10EB4E-11CA-4F0C-B327-EEB314F90DCD' THEN 'Secretary of State Fee' ELSE 'ISA Quarterly Banking Fee' END FROM @SubEntry #se INNER JOIN dbo.SubEntry se ON se.EntryID = #se.RelatedEntryID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID WHERE ((acc.AccountUID = '025F4A7C-7EA2-4429-93C1-6C5F3A75C690') OR (acc.AccountUID = 'BC10EB4E-11CA-4F0C-B327-EEB314F90DCD')) -- Update Header Info --Consolidate sweep transactions UPDATE @SubEntry SET EntryID = e.EntryID FROM @SubEntry setmp INNER JOIN dbo.SubEntry se ON se.EntryID = setmp.EntryID INNER JOIN dbo.Entry e ON e.SweepID = se.SweepID WHERE se.isHeader = 1 AND NOT IsNull(se.SweepID,0) = 0 UPDATE @SubEntry SET HeaderAccount = acc.Description ,HeaderTotal = (se.Total * se.Direction * isNull(b.Direction,1) * -1) ,HeaderMemo = Replace(se.Memo, CHAR(13) + CHAR(10), ' ' ) ,ReceiptType = pt.Description ,ReceiptBankAcc = se.Reference1 ,HeaderBSB = acc.BSB ,HeaderAccountNo = acc.BankAccountNo FROM dbo.Entry e INNER JOIN @SubEntry #se ON e.EntryID = #se.EntryID --AND e.BatchID > 0 INNER JOIN dbo.SubEntry se ON e.EntryID = se.EntryID --AND e.BatchID > 0 AND se.IsHeader = 1 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID LEFT OUTER JOIN dbo.Lookup pt ON pt.LookupID = se.PaymentType AND pt.LookupListID = 2000 LEFT OUTER JOIN @Batch b ON b.BatchID = e.BatchID WHERE ((@BatchID Is Null) OR (e.BatchID = @BatchID)) --exec dbo.repsp_UKBatchDetailListing 56688 -- Practice ABN Update @SubEntry SET PracticeABN = Replace(cp.PropertyValue,' ','') FROM @SubEntry se INNER JOIN dbo.Admin_CustomProperty acp ON se.PracticeID = acp.AdminID INNER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 2 --ABN -- Practice Name Update @SubEntry SET PracticeName = p.PracticeName ,PracticeCorroName = p.CorroName FROM @SubEntry se INNER JOIN dbo.Practice p ON se.PracticeID = p.PracticeID -- Practice Address Update @SubEntry SET PracticeAddress = a.Address FROM @SubEntry se INNER JOIN dbo.Practice_Address pa ON se.PracticeID = pa.PracticeID INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.IsMailing = 1 -- Practice Email Update @SubEntry SET PracticeEmail = ISNULL(n.Number,'Enter email') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 4 -- 4 Email -- Practice Phone Update @SubEntry SET PracticePhone = ISNULL(n.Number,'Enter phone') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 1 -- 1 Phone -- Practice Web Update @SubEntry SET PracticeWeb = ISNULL(n.Number,'Enter web address') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 5 -- 5 website --exec dbo.repsp_UKBatchDetailListing 622 -- Return the ACN IF dbo.uFnSystemLocation() = 1 BEGIN INSERT INTO @ACN SELECT #se.AdminID, cp.PropertyValue FROM @SubEntry #se LEFT OUTER JOIN dbo.Admin_CustomProperty acp ON acp.AdminID = #se.AdminID LEFT OUTER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 1 WHERE NOT cp.PropertyValue IS NULL GROUP BY #se.AdminID, cp.PropertyValue END ELSE BEGIN INSERT INTO @ACN SELECT #se.AdminID, cp.PropertyValue FROM @SubEntry #se LEFT OUTER JOIN dbo.Admin_CustomProperty acp ON acp.AdminID = #se.AdminID LEFT OUTER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 550 WHERE NOT cp.PropertyValue IS NULL GROUP BY #se.AdminID, cp.PropertyValue END --SELECT * FROM @ACN -- **** Report Data **** SELECT EntryID ,BatchId = b.BatchID ,BatchDate = b.BatchDate ,Preparer = prep.[Name] ,AuthorisedBy = auth.[Name] ,PostedBy = post.[Name] ,Reference = Reference ,EntryReference = #se.EntryReference2 ,AccrualReference = dbo.uFnPaymentonAccountInvoices(#se.EntryID) ,EntryDate = EntryDate ,AdminShortName = AdminShortName ,AdminName = AdminName ,Name = AdminShortName + ' ' + AdminName ,ACN = 'ACN ' + acn.PropertyValue ,RegNo = 'REG NO ' + acn.PropertyValue ,Payee ,PayeeAddress ,PaymentTerms = #se.PaymentTerms ,#se.[PayeeBankName] ,#se.[PayeeAccountName] ,#se.[PayeeBankAddress] ,#se.[PayeeBSB] ,#se.[PayeeBankAccountNo] ,Account ,Net ,TaxCode ,Tax ,Total ,Allocation ,ReceiptType ,ReceiptBankAcc ,PostStatus = Case when b.PostedBy_UserID Is Null then 'Unposted' else 'Posted' end ,RelatedEntryID ,ISAFees ,ISAFeeType ,HeaderAccount ,HeaderTotal ,HeaderMemo ,Memo ,ApprovalData = b2.ActionDescription ,PayeeEFT = Null ,PracticeName = #se.PracticeName ,PracticeCorroName = #se.PracticeCorroName ,PracticeABN = #se.PracticeABN ,PracticeAddress = #se.PracticeAddress ,PracticeEmail = #se.PracticeEmail ,PracticePhone = #se.PracticePhone ,PracticeWeb = #se.PracticeWeb ,HeaderBSB ,HeaderAccountNo FROM @SubEntry #se --INNER LEFT OUTER JOIN dbo.Batch b ON b.BatchId = #se.BatchId LEFT OUTER JOIN @ACN acn ON acn.AdminId = #se.AdminId LEFT OUTER JOIN @BatchApp2 b2 ON b2.BatchID = b.BatchID /* --INNER (not sure why this is outer) is the batch ID not LEFT OUTER JOIN dbo.Batch b ON b.BatchId = #se.BatchId */ --INNER LEFT OUTER JOIN dbo.[User] prep ON Prep.UserId = b.PreparedBy_UserID LEFT OUTER JOIN dbo.[User] auth ON Auth.UserId = b.AuthorisedBy_UserID LEFT OUTER JOIN dbo.[User] post ON post.UserId = b.PostedBy_UserID ORDER BY b.BatchDate,b.BatchID, #se.EntryDate, #se.EntryID, isnull(#se.Reference,0)--, #se.EntryID GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON SET NOCOUNT OFF GRANT EXECUTE ON dbo.repsp_UKBatchDetailListing TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_UKBatchDetailListing]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_UKBatchDetailListing] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_UKBatchDetailListing @BatchID int = Null ,@EntryID int = Null ,@BatchInClause Text = Null AS /* REVISION xx Added Batch In Clause SM 01/12/2010 Added ACN SM 06/12/2010 Batch detail report add the transaction's payee bank details SM 08/12/2010 Change join on batch tbl in Report Data Si 11/03/2014 PayeeAccountName Si 25/07/2019 Added HeaderBSB and HeaderAccountNo to the report data Si 29/07/2019 Added PayeeCity, PayeeState, PayeePCode and PayeeCountry to the report data EXEC repsp_UKBatchDetailListing 289 */ SET NOCOUNT ON DECLARE @ACN TABLE ( AdminID Int ,PropertyValue Varchar(2000) ) DECLARE @SubEntry TABLE ( [EntryID] Int ,[BatchID] Int ,[Reference] Varchar(50) Null ,[EntryDate] DateTime Null ,[AdminShortName] Varchar(1000) Null ,[AdminName] Varchar(1000) Null ,[AdminID] Int ,[Payee] Varchar(200) Null ,[PayeeAddress] Varchar(300) Null ,[PaymentTerms] Varchar(200) Null ,[PayeeBankName] Varchar(200) Null ,[PayeeAccountName] Varchar(200) Null ,[PayeeBankAddress] Varchar(200) Null ,[PayeeBSB] Varchar(20) Null ,[PayeeBankAccountNo] Varchar(30) Null ,[Account] Varchar(150) Null ,[Net] Money Null ,[TaxCode] Varchar(10) Null ,[Tax] Money Null ,[Total] Money Null ,[Allocation] Varchar(2000) Null ,[ReceiptType] Varchar(50) Null ,[ReceiptBankAcc] Varchar(100) Null ,[IsBatchPosting] bit Null ,[HeaderAccount] Varchar(150) Null ,[HeaderTotal] Money Null ,[HeaderMemo] Varchar(2000) Null ,[RelatedEntryID] Int Null ,[ISAFees] Money Null ,[ISAFeeType] Varchar(75) Null ,EntryReference2 varchar(1000) ,PracticeID int ,PracticeName varchar(100) ,PracticeCorroName varchar(100) ,PracticeABN varchar(100) ,PracticeAddress varchar(850) ,PracticeEmail varchar(150) ,PracticePhone varchar(150) ,PracticeWeb varchar(150) ,HeaderBSB varchar(20) ,HeaderAccountNo varchar(30) ,PayeeCity varchar(50) ,PayeeState varchar(50) ,PayeePCode varchar(50) ,PayeeCountry varchar(100) ) CREATE TABLE dbo.#Data ( ID Int Not Null ) If @BatchInClause Is Not Null OR @BatchID Is Not Null BEGIN If @BatchInClause Is Not Null EXEC dbo.usp_Split @BatchInClause ELSE INSERT INTO dbo.#Data Values (@BatchID) DECLARE @Batch Table ( BatchID Int ,Direction Int ) DECLARE @BatchApp Table ( BatchID Int ,Flags Int ,UserName Varchar(200) ,Action Varchar(200) ,ActionDescription Varchar(200) ,TimeStamp Varchar(50) ) DECLARE @BatchApp2 Table ( BatchID Int ,ActionDescription Varchar(2000) ) INSERT INTO @Batch SELECT b.BatchID ,CASE WHEN acc.AccountGroupID = 1020 THEN -1 ELSE 1 END FROM dbo.#Data d INNER JOIN dbo.Batch b ON b.BatchID = d.ID INNER JOIN dbo.Account acc ON acc.accountID = b.accountID INSERT INTO @BatchApp SELECT b.BatchID ,Flags = CASE WHEN acc.AccountGroupID = 1030 THEN 5000000 ELSE 600000 END + tab.col.value('@Flags', 'int') ,UserName = tab.col.value('User[1]', 'Varchar(200)') ,Action = tab.col.value('Action[1]', 'Varchar(200)') ,ActionDescription = Null ,TimeStamp = tab.col.value('Timestamp[1]', 'Varchar(14)') FROM dbo.Batch b INNER JOIN @Batch d ON d.BatchID = b.BatchID INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountId CROSS APPLY b.Data.nodes('/Items/Item') as tab(col) UPDATE @BatchApp SET ActionDescription = '(' + (SELECT Tag FROM dbo.Lookup Where LookupListID = 10 AND Flag = CASE WHEN ba.Flags = 5262144 THEN 5000000 ELSE 6000000 END) + ')' FROM @BatchApp ba WHERE ba.Flags In(5262144, 6262144) UPDATE @BatchApp SET Action = 'Submitted' ,ActionDescription = '' FROM @BatchApp ba WHERE ba.Flags In(5000512, 6000512) UPDATE @BatchApp SET ActionDescription = '(' + l.Description + ')' FROM @BatchApp ba INNER JOIN dbo.Lookup l ON l.Flag = ba.Flags AND l.LookupListID = 10 INSERT INTO @BatchApp2 SELECT BatchID ,Null FROM @Batch UPDATE @BatchApp2 SET ActionDescription = ' ' + ISNULL( Replace( ( SELECT Action + ' ' + ActionDescription + ' - ' + UserName + ' - ' + Timestamp + '| ' As 'data()' FROM @BatchApp WHERE BatchID = b2.BatchID FOR XML PATH('') ) , '| ', CHAR(13) + CHAR(10)) , '') + CASE WHEN b.PostedBy_UserID Is not Null THEN ' Posted - ' + u.LastName + ', ' + u.FirstName + ' - ' + Convert(varchar(20), b.BatchDate, 3) + ' ' + Convert(varchar(5), b.BatchDate, 8) ELSE '' END FROM @BatchApp2 b2 INNER JOIN dbo.Batch b ON b.BatchID = b2.BatchID LEFT OUTER JOIN dbo.[User] u ON u.UserId = b.PostedBy_UserID INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID, Payee,PayeeAddress, PayeeCity, PayeeState, PayeePCode, PayeeCountry, PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = dbo.uFnHeaderSubEntryReference (se.EntryID) ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = a.AdminID ,Payee = se.Payee ,PayeeAddress = e.Address ,PayeeCity = e.PayeeCity ,PayeeState = e.PayeeState ,PayeePCode = e.PayeePCode ,PayeeCountry = e.PayeeCountry ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] ,Net = (se.Net * se.Direction * d.Direction) ,TaxCode = tc.TaxCode ,Tax = (se.Tax * se.Direction * d.Direction) ,Total = (se.Total * se.Direction * d.Direction) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID WHERE (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) AND (LiabilityID Is Null) AND (IsNull(e.SweepID, 0) = 0) DECLARE @APEnts Table ( EntryID Int ,BatchID Int ,LiabilityID Int ,Total Money ,Factor Decimal (19,9) ,SourceEntryID Int ) INSERT INTO @APEnts SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,se.LiabilityID ,se.Net ,1 ,Null FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 WHERE (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) AND (LiabilityID Is Not Null) UPDATE @APEnts SET Factor = Abs(CONVERT(Numeric(19,9), e.Total) / CONVERT(Numeric(19,9), l.LiabilityValue)) ,SourceEntryID = l.EntryID FROM @APEnts e INNER JOIN dbo.Liability l ON e.LiabilityID = l.LiabilityID WHERE l.LiabilityValue <> 0 INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID, Payee,PayeeAddress, PayeeCity, PayeeState, PayeePCode, PayeeCountry, PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = se.Reference ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = a.AdminID ,Payee = se.Payee ,PayeeAddress = e.Address ,PayeeCity = e.PayeeCity ,PayeeState = e.PayeeState ,PayeePCode = e.PayeePCode ,PayeeCountry = e.PayeeCountry ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] + ' *' ,Net = Round((se.Net * se.Direction * d.Direction) * ET.Factor ,2) ,TaxCode = tc.TaxCode ,Tax = Round((se.Tax * se.Direction * d.Direction) * ET.Factor ,2) ,Total = Round((se.Total * se.Direction * d.Direction) * ET.Factor ,2) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN @Batch d ON d.BatchID = e.BatchID INNER JOIN @APEnts et ON et.EntryID = e.EntryID INNER JOIN dbo.Subentry se ON et.SourceEntryID = se.EntryID AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID END ELSE BEGIN INSERT INTO @SubEntry (EntryID,BatchID,Reference,EntryDate,AdminShortName,AdminName,AdminID,Payee,PayeeAddress,PayeeCity,PayeeState,PayeePCode,PayeeCountry,PaymentTerms,[PayeeBankName],[PayeeAccountName] ,[PayeeBankAddress],[PayeeBSB] ,[PayeeBankAccountNo],Account,Net,TaxCode,Tax,Total,Allocation,IsBatchPosting,RelatedEntryID,EntryReference2,PracticeID) --MatterName, SELECT EntryID = e.EntryID ,BatchID = e.BatchId ,Reference = se.Reference ,EntryDate = e.EntryDate ,AdminShortName = a.ShortName ,AdminName = a.Name ,AdminID = se.ContextID ,Payee = se.Payee ,PayeeAddress = e.Address ,PayeeCity = e.PayeeCity ,PayeeState = e.PayeeState ,PayeePCode = e.PayeePCode ,PayeeCountry = e.PayeeCountry ,PaymentTerms = e.Memo ,[PayeeBankName] = e.BankName ,[PayeeAccountName] = e.AccountName ,[PayeeBankAddress] = e.BankAddress ,[PayeeBSB] = e.BSB ,[PayeeBankAccountNo] = e.AccountNo ,Account = acc.[Description] ,Net = (se.Net * se.Direction * -1) ,TaxCode = tc.TaxCode ,Tax = (se.Tax * se.Direction * -1) ,Total = (se.Total * se.Direction * -1) ,Allocation = se.Memo ,IsBatchPosting = se.IsBatchPosting ,RelatedEntryID = e.RelatedEntryID ,EntryReference2 = e.Reference2 ,PracticeID = a.PracticeID FROM dbo.Entry e INNER JOIN dbo.Subentry se ON e.EntryID = se.EntryID --AND e.BatchID > 0 AND se.IsHeader = 0 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.repvw_Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.TaxCode tc ON se.TaxCodeID = tc.TaxCodeID WHERE ((@BatchID Is Null) OR (e.BatchID = @BatchID)) AND ((@EntryID Is Null) OR (e.EntryID = @EntryID)) AND (NOT e.EntryType = 4) AND (NOT se.EntryType = 9) END --Select * fROM @APEnts --Select * from @SubEntry --exec dbo.repsp_UKBatchDetailListing Null, Null, 'BatchID In(4453)' -- Get ISA Fees Info UPDATE @SubEntry SET ISAFees = Isnull(se.ReportableTotal,0) ,ISAFeeType = CASE WHEN acc.AccountUID = '025F4A7C-7EA2-4429-93C1-6C5F3A75C690' THEN 'ISA Transaction Fee' WHEN acc.AccountUID = 'BC10EB4E-11CA-4F0C-B327-EEB314F90DCD' THEN 'Secretary of State Fee' ELSE 'ISA Quarterly Banking Fee' END FROM @SubEntry #se INNER JOIN dbo.SubEntry se ON se.EntryID = #se.RelatedEntryID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID WHERE ((acc.AccountUID = '025F4A7C-7EA2-4429-93C1-6C5F3A75C690') OR (acc.AccountUID = 'BC10EB4E-11CA-4F0C-B327-EEB314F90DCD')) -- Update Header Info --Consolidate sweep transactions UPDATE @SubEntry SET EntryID = e.EntryID FROM @SubEntry setmp INNER JOIN dbo.SubEntry se ON se.EntryID = setmp.EntryID INNER JOIN dbo.Entry e ON e.SweepID = se.SweepID WHERE se.isHeader = 1 AND NOT IsNull(se.SweepID,0) = 0 UPDATE @SubEntry SET HeaderAccount = acc.Description ,HeaderTotal = (se.Total * se.Direction * isNull(b.Direction,1) * -1) ,HeaderMemo = Replace(se.Memo, CHAR(13) + CHAR(10), ' ' ) ,ReceiptType = pt.Description ,ReceiptBankAcc = se.Reference1 ,HeaderBSB = acc.BSB ,HeaderAccountNo = acc.BankAccountNo FROM dbo.Entry e INNER JOIN @SubEntry #se ON e.EntryID = #se.EntryID --AND e.BatchID > 0 INNER JOIN dbo.SubEntry se ON e.EntryID = se.EntryID --AND e.BatchID > 0 AND se.IsHeader = 1 AND se.IsTaxSubEntry = 0 INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID LEFT OUTER JOIN dbo.Lookup pt ON pt.LookupID = se.PaymentType AND pt.LookupListID = 2000 LEFT OUTER JOIN @Batch b ON b.BatchID = e.BatchID WHERE ((@BatchID Is Null) OR (e.BatchID = @BatchID)) --exec dbo.repsp_UKBatchDetailListing 56688 -- Practice ABN Update @SubEntry SET PracticeABN = Replace(cp.PropertyValue,' ','') FROM @SubEntry se INNER JOIN dbo.Admin_CustomProperty acp ON se.PracticeID = acp.AdminID INNER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 2 --ABN -- Practice Name Update @SubEntry SET PracticeName = p.PracticeName ,PracticeCorroName = p.CorroName FROM @SubEntry se INNER JOIN dbo.Practice p ON se.PracticeID = p.PracticeID -- Practice Address Update @SubEntry SET PracticeAddress = a.Address FROM @SubEntry se INNER JOIN dbo.Practice_Address pa ON se.PracticeID = pa.PracticeID INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.IsMailing = 1 -- Practice Email Update @SubEntry SET PracticeEmail = ISNULL(n.Number,'Enter email') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 4 -- 4 Email -- Practice Phone Update @SubEntry SET PracticePhone = ISNULL(n.Number,'Enter phone') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 1 -- 1 Phone -- Practice Web Update @SubEntry SET PracticeWeb = ISNULL(n.Number,'Enter web address') FROM @SubEntry se INNER JOIN dbo.Practice_Number pn ON se.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 5 -- 5 website --exec dbo.repsp_UKBatchDetailListing 622 -- Return the ACN IF dbo.uFnSystemLocation() = 1 BEGIN INSERT INTO @ACN SELECT #se.AdminID, cp.PropertyValue FROM @SubEntry #se LEFT OUTER JOIN dbo.Admin_CustomProperty acp ON acp.AdminID = #se.AdminID LEFT OUTER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 1 WHERE NOT cp.PropertyValue IS NULL GROUP BY #se.AdminID, cp.PropertyValue END ELSE BEGIN INSERT INTO @ACN SELECT #se.AdminID, cp.PropertyValue FROM @SubEntry #se LEFT OUTER JOIN dbo.Admin_CustomProperty acp ON acp.AdminID = #se.AdminID LEFT OUTER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 550 WHERE NOT cp.PropertyValue IS NULL GROUP BY #se.AdminID, cp.PropertyValue END --SELECT * FROM @ACN -- **** Report Data **** SELECT EntryID ,BatchId = b.BatchID ,BatchDate = b.BatchDate ,Preparer = prep.[Name] ,AuthorisedBy = auth.[Name] ,PostedBy = post.[Name] ,Reference = Reference ,EntryReference = #se.EntryReference2 ,AccrualReference = dbo.uFnPaymentonAccountInvoices(#se.EntryID) ,EntryDate = EntryDate ,AdminShortName = AdminShortName ,AdminName = AdminName ,Name = AdminShortName + ' ' + AdminName ,ACN = 'ACN ' + acn.PropertyValue ,RegNo = 'REG NO ' + acn.PropertyValue ,Payee ,PayeeAddress ,PayeeCity ,PayeeState ,PayeePCode ,PayeeCountry ,PaymentTerms = #se.PaymentTerms ,#se.[PayeeBankName] ,#se.[PayeeAccountName] ,#se.[PayeeBankAddress] ,#se.[PayeeBSB] ,#se.[PayeeBankAccountNo] ,Account ,Net ,TaxCode ,Tax ,Total ,Allocation ,ReceiptType ,ReceiptBankAcc ,PostStatus = Case when b.PostedBy_UserID Is Null then 'Unposted' else 'Posted' end ,RelatedEntryID ,ISAFees ,ISAFeeType ,HeaderAccount ,HeaderTotal ,HeaderMemo ,Memo ,ApprovalData = b2.ActionDescription ,PayeeEFT = Null ,PracticeName = #se.PracticeName ,PracticeCorroName = #se.PracticeCorroName ,PracticeABN = #se.PracticeABN ,PracticeAddress = #se.PracticeAddress ,PracticeEmail = #se.PracticeEmail ,PracticePhone = #se.PracticePhone ,PracticeWeb = #se.PracticeWeb ,HeaderBSB ,HeaderAccountNo FROM @SubEntry #se --INNER LEFT OUTER JOIN dbo.Batch b ON b.BatchId = #se.BatchId LEFT OUTER JOIN @ACN acn ON acn.AdminId = #se.AdminId LEFT OUTER JOIN @BatchApp2 b2 ON b2.BatchID = b.BatchID /* --INNER (not sure why this is outer) is the batch ID not LEFT OUTER JOIN dbo.Batch b ON b.BatchId = #se.BatchId */ --INNER LEFT OUTER JOIN dbo.[User] prep ON Prep.UserId = b.PreparedBy_UserID LEFT OUTER JOIN dbo.[User] auth ON Auth.UserId = b.AuthorisedBy_UserID LEFT OUTER JOIN dbo.[User] post ON post.UserId = b.PostedBy_UserID ORDER BY b.BatchDate,b.BatchID, #se.EntryDate, #se.EntryID, isnull(#se.Reference,0)--, #se.EntryID GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON SET NOCOUNT OFF GRANT EXECUTE ON dbo.repsp_UKBatchDetailListing TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_Superstream]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_Superstream] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_Superstream @AdminID Int ,@EmployeeXML XML = Null ,@WHeldFromDate DateTime = Null ,@WHeldToDate DateTime = Null ,@RemitFromDate DateTime = Null ,@RemitToDate DateTime = Null ,@UserID Int ,@ForValidation Bit = 0 ,@ForPayReport Bit = 0 ,@FileName nVarchar(255) = 'ABC123' -- Replace with file reference ,@CHLookupID Int = Null -- TO DO Clearing house Identifier /* UPDATES Si - 31 July 2019 - Removed the red validation for Clearing House saffs where there were no remittances in the report period --Exec dbo.repsp_Superstream @AdminID = 2487, @WHeldFromDate = '20160901', @WHeldToDate = '20190320', @RemitFromDate = '20160901', @RemitToDate = '20190320', @UserID=1019, @ForValidation=1,@EmployeeXML='',@FileName='SuperStream_SAFF_20190320_10_05.csv' */ AS SET NOCOUNT ON DECLARE @IsClearing Bit = 0 DECLARE @SuperLiabNTAccGrpID Int = 4016 DECLARE @SuperLiabTRAccGrpID Int = 4017 DECLARE @SuperLiabPaidRecFlag Int = 8388608 DECLARE @SuperSalarySacrificeFlag Int = 4194304 DECLARE @PayrollAccGrpID Int = 6020 DECLARE @NonTaxableAllowanceFlags Int = 1048576 DECLARE @SuperWheldTrading UniqueIdentifier = 'DA63EF13-7FE7-4243-AB72-67FD62614BD4' DECLARE @SuperWheldOther UniqueIdentifier = 'BCEA5ED7-4FDE-45B7-A47D-F19A30A481A1' DECLARE @SuperWheldPref UniqueIdentifier = '648B7E5E-1059-44E5-994E-8F60302D4B92' DECLARE @SuperWheldUnsec UniqueIdentifier = 'CAE8275B-4842-4488-8B9A-5425DCFD6A91' DECLARE @SuperPaidTrading UniqueIdentifier = 'B6D9FEA6-CDF4-4650-B12B-5973737EE276' DECLARE @SuperPaidNonTrading UniqueIdentifier = '75763EDC-F83F-4A92-A0A6-0C7D5D3CDDA5' DECLARE @ABN nVarchar(50) DECLARE @UserLast Varchar(75) DECLARE @UserFirst Varchar(75) DECLARE @UserEmail nVarchar(200) DECLARE @UserPhone nVarchar(200) DECLARE @Version varchar(50) --SELECT @Version = Setting FROM ApplicationSetting WHERE SettingID = x (TO DO ADD Application setting for version) SELECT @Version = '0.4' --Work out whether we are using a clearing house --if no payment dates are passed then we are IF @RemitFromDate Is Null AND @RemitToDate Is Null AND @ForPayReport = 0 SET @IsClearing = 1 DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) DECLARE @Emps TABLE ( EmployeeID Int ) DECLARE @EmpWheldTrans TABLE ( SubEntryID Int ,EntryID Int ,EntryDate Date ,BatchID Int ,EmployeeID Int ,Total Money ,VolTotal Money ,IsTrading Bit ,HasSalarySacrifice Bit ,PayPeriodFromDate Date ,PayPeriodToDate Date ) DECLARE @EmpWheldTransSum TABLE ( EntryID Int ,EntryDate Date ,BatchID Int ,EmployeeID Int ,Total Money ,VolTotal Money ,IsTrading Bit ,HasSalarySacrifice Bit ,PayPeriodFromDate Date ,PayPeriodToDate Date ) DECLARE @EmpWheldTransD TABLE ( EntryID Int ,EmployeeID Int ) DECLARE @EmpRemitTrans TABLE ( EntryID Int ,EntryDate Date ,Reference varchar(100) -- ,PaymentMethod varchar(20) ,BatchID Int ,EmployeeID Int ,Total Money ,VolTotal Money ,IsTrading Bit ) DECLARE @EmpSS TABLE ( EmployeeID Int ,EntryID Int ,SSTotal Money ,WagesTotal Money ,WHeldTotal Money ,AdjSSTotal Money ) DECLARE @EmpSSAloc TABLE ( EmployeeID Int ,SSAlloc Money ) DECLARE @EmpSSAlocSum TABLE ( EmployeeID Int ,SSAlloc Money ,TransTotal Money ) DECLARE @Batches TABLE ( BatchID Int ) DECLARE @BatchData TABLE ( BatchID Int ,PayPeriodFromDate Date ,PayPeriodToDate Date ) DECLARE @EmpWheldData TABLE ( EmployeeID Int ,TrTotal Money ,NTTotal Money ) DECLARE @EmpRemitData TABLE ( EmployeeID Int ,TrTotal Money ,NTTotal Money ) DECLARE @ValidEmps TABLE ( EmployeeID Int ) DECLARE @EmpAddress TABLE ( EmployeeID Int ,AddressLine1 nVarchar(500) ,AddressLine2 nVarchar(500) ,AddressLine3 nVarchar(500) ,AddressLine4 nVarchar(500) ,City nVarchar(50) ,State nVarchar(50) ,PostCode nVarchar(50) ,Country nVarchar(2) ,MailToParent Bit ) DECLARE @EmpNumber Table ( EmployeeID Int ,Email nVarchar(200) ,Phone nVarchar(200) ,Mobile nVarchar(200) ) DECLARE @ValidTrans TABLE ( EmployeeID Int ,EntryID Int ,SourceEntryID Int ,Reference Varchar(500) -- ,PaymentMethod Varchar(20) ,Total Money ,VolTotal Money ,SSTotal Money ,PayPeriodFromDate Date ,PayPeriodToDate Date ) --Get the ABN SELECT @ABN = PropertyValue FROM dbo.CustomProperty cp INNER JOIN dbo.Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE cp.CustomPropertyTypeID = 2 AND acp.AdminID = @AdminID --Get the contact user details SELECT @UserFirst = FirstName ,@UserLast = LastName FROM dbo.[User] WHERE UserID = @UserID SELECT @UserEmail = Number FROM dbo.Number n INNER JOIN dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Number FROM dbo.Number n INNER JOIN dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 --End user details --Get the withholding transactions --Get the employees if XML specified IF @EmployeeXML Is Not Null INSERT INTO @Emps SELECT tab.col.value('@EMPLOYEEID', 'int') as EmployeeID FROM @EmployeeXML.nodes('/EMPLOYEES/EMPLOYEE') as tab(col) ELSE INSERT INTO @Emps SELECT EmployeeID FROM dbo.Employee WHERE AdminID = @AdminID INSERT INTO @EmpWheldTrans SELECT SubEntryID ,se.EntryID ,se.EntryDate ,BatchID ,se.EmployeeID ,Total = CASE WHEN IsNull(acc.Flags,0) & 536870912 = 0 THEN Total * Direction * -1 ELSE 0 END ,VolTotal = CASE WHEN IsNull(acc.Flags,0) & 536870912 = 536870912 THEN Total * Direction * -1 ELSE 0 END ,IsTrading = CASE WHEN acc.AccountUID = @SuperWheldTrading OR IsNull(acc.Flags,0) & 536870912 = 536870912 THEN 1 ELSE 0 END ,HasSalarySacrifice = 0 ,PayPeriodFromDate = Null ,PayPeriodToDate = Null FROM dbo.SubEntry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID INNER JOIN @Emps et ON et.EmployeeID = se.EmployeeID WHERE acc.AdminID = @AdminID AND se.EntryDate >= @WHeldFromDate AND se.EntryDate <= @WHeldToDate AND acc.AccountGroupID In(@SuperLiabNTAccGrpID, @SuperLiabTRAccGrpID) --acc.AccountUID In(@SuperWheldTrading, @SuperWheldOther, @SuperWheldPref, @SuperWheldUnsec) AND IsNull(acc.Flags, 0) & @SuperLiabPaidRecFlag = 0 AND isNull(se.IsbatchPosting,0) = 0 INSERT INTO @EmpWheldTransSum SELECT EntryID ,EntryDate ,BatchID ,EmployeeID ,Sum(Total) ,Sum(VolTotal) ,IsTrading ,HasSalarySacrifice ,PayPeriodFromDate ,PayPeriodToDate FROM @EmpWheldTrans GROUP BY EntryID ,EntryDate ,BatchID ,EmployeeID ,IsTrading ,HasSalarySacrifice ,PayPeriodFromDate ,PayPeriodToDate --Get any salary sacrifice transactions INSERT INTO @EmpWheldTransD SELECT DISTINCT EntryID ,EmployeeID FROM @EmpWheldTransSum INSERT INTO @EmpSS SELECT se.EmployeeID ,se.EntryID ,Sum(Net * Direction) ,0 ,0 ,0 FROM @EmpWheldTransD t INNER JOIN dbo.SubEntry se ON se.EntryID = t.EntryID AND se.EmployeeID = t.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN @Emps et ON et.EmployeeID = se.EmployeeID WHERE IsNull(acc.Flags, 0) & @SuperSalarySacrificeFlag = @SuperSalarySacrificeFlag GROUP BY se.EmployeeID ,se.EntryID --Get the total of the wheld and wages for the SS transaction UPDATE @EmpSS SET WagesTotal = IsNull( (SELECT Sum(Net * Direction) FROM SubEntry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE se.EntryID = ss.EntryID AND acc.AccountGroupID = @PayrollAccGrpID AND IsNull(acc.Flags, 0) & @NonTaxableAllowanceFlags = 0 ),0) ,WHeldTotal = IsNull( (SELECT Sum(Net * Direction * -1) FROM SubEntry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE se.EntryID = ss.EntryID AND acc.AccountGroupID In(@SuperLiabNTAccGrpID, @SuperLiabTRAccGrpID) AND IsNull(acc.Flags, 0) & @SuperLiabPaidRecFlag = 0 ),0) FROM @EmpSS ss UPDATE @EmpWheldTransSum SET HasSalarySacrifice = 1 FROM @EmpWheldTransSum w INNER JOIN @EmpSS s ON s.EntryID = w.EntryID AND s.EmployeeID = w.EmployeeID --Pro-rate the SS against the amount wheld --We don't need to pro-rate where notional payments have been made IF @IsClearing = 0 BEGIN --Get the total SS amount of the transaction UPDATE @EmpSS SET AdjSSTotal = SSTotal WHERE WagesTotal <> 0 AND SSTotal > 0 AND SSTotal <= WHeldTotal --Pro-rate it otherwise UPDATE @EmpSS SET AdjSSTotal = Round(WheldTotal * (SSTotal / WagesTotal), 2) WHERE WagesTotal <> 0 AND AdjSSTotal = 0 END ELSE UPDATE @EmpSS SET AdjSSTotal = SSTotal WHERE WagesTotal <> 0 UPDATE @EmpSS SET AdjSSTotal = WheldTotal WHERE WagesTotal = 0 --Get the payroll batches to determine the pay period dates INSERT INTO @Batches SELECT DISTINCT b.BatchID FROM @EmpWheldTransSum et INNER JOIN dbo.Batch b ON b.BatchID = et.batchID WHERE b.BatchType_LookupID = 900000 INSERT INTO @BatchData SELECT b.BatchID ,x.v.value('@DateFrom[1]', 'Date') ,x.v.value('@DateTo[1]', 'Date') FROM dbo.Batch b INNER JOIN @Batches bt ON bt.BatchID = b.BatchID CROSS APPLY b.Data.nodes('/Items/PayrollData/Dates') x(v) --Update the whold transactions with pay period dates --from batches that specified the pay period date UPDATE @EmpWheldTransSum SET PayPeriodFromDate = b.PayPeriodFromDate ,PayPeriodToDate = b.PayPeriodToDate FROM @EmpWheldTransSum t INNER JOIN @BatchData b ON b.BatchID = t.BatchID --Update anything that does not have a to and from date specified --with the dates for the specified period UPDATE @EmpWheldTransSum SET PayPeriodFromDate = @WHeldFromDate ,PayPeriodToDate = @WHeldToDate WHERE PayPeriodFromDate Is Null IF @IsClearing = 0 OR (@IsClearing = 1 AND @ForValidation = 1) --Looking at the actual payments for non clearing BEGIN --Align the dates to the mode DECLARE @FromDate DateTime DECLARE @ToDate DateTime IF @IsClearing = 0 BEGIN SET @FromDate = @RemitFromDate SET @ToDate = @RemitToDate END ELSE BEGIN SET @FromDate = @WheldFromDate SET @ToDate = @WheldToDate END --Get the remittance transactions INSERT INTO @EmpRemitTrans SELECT se.EntryID ,se.EntryDate ,e.Reference2 ,e.BatchID ,se.EmployeeID ,Total = Sum(Total * Direction) ,VolTotal = 0 --We'll do the total / vol total below ,IsTrading = CASE WHEN acc.AccountUID = @SuperPaidTrading THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN @Emps emp ON emp.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE acc.AdminID = @AdminID AND se.EntryDate >= @FromDate AND se.EntryDate <= @ToDate AND acc.AccountGroupID In(@SuperLiabNTAccGrpID, @SuperLiabTRAccGrpID) --acc.AccountUID In(@SuperPaidTrading, @SuperPaidNonTrading) AND IsNull(acc.Flags, 0) & @SuperLiabPaidRecFlag = @SuperLiabPaidRecFlag GROUP BY se.EntryID ,se.EntryDate ,e.Reference2 ,e.BatchID ,se.EmployeeID ,CASE WHEN acc.AccountUID = @SuperPaidTrading THEN 1 ELSE 0 END END ELSE --Generate notional payments for clearing house BEGIN INSERT INTO @EmpRemitTrans SELECT EntryID ,@WHeldToDate ,Null ,Null ,EmployeeID ,Sum(Total) ,Sum(VolTotal) ,IsTrading FROM @EmpWheldTransSum GROUP BY EntryID ,EmployeeID ,IsTrading END --Exec dbo.repsp_Superstream @AdminID = 2487, @WHeldFromDate = '20180321', @WHeldToDate = '20190331', @RemitFromDate = '20180321', @RemitToDate = '20190331', @CHLookupID = 115000, @UserID=1019, @ForValidation=0,@EmployeeXML='' --Sum the amounts withheld INSERT INTO @EmpWheldData SELECT wt.EmployeeID ,Sum(CASE WHEN wt.ISTrading = 1 THEN wt.Total + wt.VolTotal ELSE 0 END) ,Sum(CASE WHEN wt.ISTrading = 0 THEN wt.Total + wt.VolTotal ELSE 0 END) FROM @EmpWheldTransSum wt GROUP BY wt.EmployeeID --Sum the amounts remitted INSERT INTO @EmpRemitData SELECT wt.EmployeeID ,Sum(CASE WHEN wt.ISTrading = 1 THEN wt.Total + wt.VolTotal ELSE 0 END) ,Sum(CASE WHEN wt.ISTrading = 0 THEN wt.Total + wt.VolTotal ELSE 0 END) FROM @EmpRemitTrans wt GROUP BY wt.EmployeeID --Select * --from @EmpWheldTransSum --Select * --From @EmpWheldData --Select * --From @EmpRemitData IF @ForValidation = 1 BEGIN -- Exec dbo.repsp_Superstream @AdminID = 6643, @WHeldFromDate = '20060401', @WHeldToDate = '20190318', @CHLookupID = 115000, @UserID=7323, @ForValidation=1,@EmployeeXML='' If @IsClearing = 0 --First level of validation, work out where the wheld amounts do not equal remitted amounts for non-clearing INSERT INTO @ValErrors SELECT ValidationError = e.EmployeeName + ' - The amount withheld for the period $' + Convert(varchar(10), IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) + ' does not equal the amount remitted for the period $' + Convert(varchar(10), IsNull(er.TrTotal,0) + IsNull(er.NTTotal,0)) + '. The employee will not appear in the SAFF.' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + Convert(varchar(12), e.EmployeeID) FROM @EmpWheldData ew INNER JOIN dbo.repvw_Employee e ON e.EmployeeID = ew.EmployeeID LEFT OUTER JOIN @EmpRemitData er ON er.EmployeeID = ew.EmployeeID WHERE (IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) <> (IsNull(er.TrTotal,0) + IsNull(er.NTTotal,0)) ORDER BY e.EmployeeName ELSE INSERT INTO @ValErrors SELECT ValidationError = e.EmployeeName + ' has had $' + Convert(varchar(10), IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) + ' paid for the period. Be careful to avoid double payments for this employee.' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + Convert(varchar(12), e.EmployeeID) FROM @EmpRemitData ew INNER JOIN dbo.repvw_Employee e ON e.EmployeeID = ew.EmployeeID --INSERT --INTO @ValErrors --SELECT ValidationError = e.EmployeeName + ' - The amount withheld for the period $' + Convert(varchar(10), IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) + ' does not equal the amount remitted for the period $' + Convert(varchar(10), IsNull(er.TrTotal,0) + IsNull(er.NTTotal,0)) + '. The employee will not appear in the SAFF.' -- ,ValidationLevel = 1 -- ,ObjectName = 'EMPLOYEE=' + Convert(varchar(12), e.EmployeeID) --FROM @EmpWheldData ew --INNER --JOIN dbo.repvw_Employee e --ON e.EmployeeID = ew.EmployeeID --LEFT --OUTER --JOIN @EmpRemitData er --ON er.EmployeeID = ew.EmployeeID --WHERE (IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) <> (IsNull(er.TrTotal,0) + IsNull(er.NTTotal,0)) --ORDER --BY e.EmployeeName END --Build up list of employees who pass the first level of validation --Get the emps where the amount wheld equals the amount deducted INSERT INTO @ValidEmps SELECT DISTINCT ew.EmployeeID FROM @EmpWheldData ew LEFT OUTER JOIN @EmpRemitData er ON er.EmployeeID = ew.EmployeeID WHERE (IsNull(ew.TrTotal,0) + IsNull(ew.NTTotal,0)) = (IsNull(er.TrTotal,0) + IsNull(er.NTTotal,0)) OR @IsClearing = 1 --Get the employee addresses INSERT INTO @EmpAddress SELECT ve.EmployeeID ,ab.AddressLine1 ,ab.AddressLine2 ,ab.AddressLine3 ,ab.AddressLine4 ,ad.City ,ad.State ,ad.PostCode ,'au' ,1 FROM @ValidEmps ve INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.Address ad ON ad.AddressID = e.AddressID CROSS APPLY [dbo].[tblfn_SplitAddressBody] (ad.Address) ab --Get the employee creditor addresses INSERT INTO @EmpAddress SELECT ve.EmployeeID ,ab.AddressLine1 ,ab.AddressLine2 ,ab.AddressLine3 ,ab.AddressLine4 ,ad.City ,ad.State ,ad.PostCode ,'au' ,IsNull(c.MailToParent, 0) FROM @ValidEmps ve INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.Address ad ON ad.AddressID = c.AddressID CROSS APPLY [dbo].[tblfn_SplitAddressBody] (ad.Address) ab WHERE e.AddressID Is Null INSERT INTO @EmpNumber (EmployeeID) SELECT EmployeeID FROM @ValidEmps ve --Email UPDATE @EmpNumber SET Email = ( SELECT n.Number FROM dbo.Number n INNER JOIN dbo.Employee_Number en ON en.NumberID = n.NumberID WHERE n.NumberTypeID = 4 AND en.EmployeeID = e.EmployeeID ) ,Phone = ( SELECT n.Number FROM dbo.Number n INNER JOIN dbo.Employee_Number en ON en.NumberID = n.NumberID WHERE n.NumberTypeID = 1 AND en.EmployeeID = e.EmployeeID ) ,Mobile = ( SELECT n.Number FROM dbo.Number n INNER JOIN dbo.Employee_Number en ON en.NumberID = n.NumberID WHERE n.NumberTypeID = 3 AND en.EmployeeID = e.EmployeeID ) FROM @EmpNumber e If @ForPayReport = 1 BEGIN DECLARE @EmpWheldTransSumm TABLE ( EmployeeID Int ,WheldTotal Money ,RemitTotal Money ) INSERT INTO @EmpWheldTransSumm SELECT EmployeeID ,Sum(Total + VolTotal) ,0 FROM @EmpWheldTransSum GROUP BY EmployeeID UPDATE @EmpWheldTransSumm SET RemitTotal = IsNull((SELECT Sum(Total) FROM @EmpRemitTrans Where EmployeeID = ts.EmployeeID),0) FROM @EmpWheldTransSumm ts --Exec dbo.repsp_Superstream @AdminID = 8233, @WHeldFromDate = '20180401', @WHeldToDate = '20180630', @RemitFromDate = '20180712', @RemitToDate = '20180712', @UserID=1229, @ForPayReport=1,@EmployeeXML='' SELECT re.EmployeeName ,WheldTotal ,RemitTotal ,Remaining = (WheldTotal - RemitTotal) ,Manager = IsNull(cp.Name, 'N/A') ,FundName = sf.Description ,MemberAcc = e.SuperFundAccountNo ,USI = sf.USI ,ESA = sf.ESA ,BSB = CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN IsNull(sf.BSB, cp.BSB) ELSE Null END --cp.BSB ,AccNo = CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN CASE WHEN sf.AccountNo Is Not Null THEN REPLACE(sf.AccountNo, ' ', '') ELSE REPLACE(cp.AccountNo, ' ', '') END END --cp.AccountNo ,AccName = CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN IsNull(sf.AccountName, cp.AccountName) ELSE Null END --cp.AccountName FROM dbo.repvw_Employee re INNER JOIN dbo.Employee e ON e.EmployeeID = re.EmployeeID INNER JOIN @EmpWheldTransSumm t ON t.EmployeeID = e.EmployeeID LEFT OUTER JOIN dbo.SuperFund sf ON sf.SuperfundID = e.SuperFundID LEFT OUTER JOIN dbo.Counterparty cp ON cp.CounterpartyID = sf.CounterpartyID ORDER BY re.EmployeeName --SELECT * from @EmpWheldTransSumm -- Exec dbo.repsp_Superstream @AdminID = 2297, @WHeldFromDate = '20150101', @WHeldToDate = '20150630', @RemitFromDate = '20150101', @RemitToDate = '20150630', @UserID=1019, @ForPayReport=1,@EmployeeXML='' RETURN 0 END --Second level employee validation --Validate all employees who pass the first level of validation IF @ForValidation = 1 BEGIN --Address not entered INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have an address entered.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN @EmpAddress ea ON ea.EmployeeID = ve.EmployeeID WHERE ea.AddressLine1 Is Null ORDER BY re.EmployeeName --City not entered INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have an city entered.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN @EmpAddress ea ON ea.EmployeeID = ve.EmployeeID WHERE ea.City Is Null AND ea.Country = 'AU' ORDER BY re.EmployeeName --State not entered INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have an state/territory entered.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN @EmpAddress ea ON ea.EmployeeID = ve.EmployeeID WHERE ea.State Is Null AND ea.Country = 'au' ORDER BY re.EmployeeName --Post Code not entered INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have an post code entered.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN @EmpAddress ea ON ea.EmployeeID = ve.EmployeeID WHERE ea.PostCode Is Null AND ea.Country = 'au' ORDER BY re.EmployeeName --DOB NOT SPECIFIED INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have a date of birth entered.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID WHERE e.DateOfBirth Is Null ORDER BY re.EmployeeName --TFN NOT SPECIFIED INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have a TFN.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID WHERE e.TFN Is Null ORDER BY re.EmployeeName --SUPER FUND NOT SPECIFIED INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have a super fund specified.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID WHERE e.SuperFundID Is Null ORDER BY re.EmployeeName --SUPER SPECIFIED NO ACCOUNT NUMBER INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' does not have a super fund account number specified.' ,ValidationLevel = 1 ,'EMPLOYEE=' + Convert(varchar(12), ve.EmployeeID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.SuperFund sf ON sf.SuperfundID = e.SuperFundID WHERE e.SuperFundAccountNo Is Null ORDER BY re.EmployeeName --SUPER SPECIFIED NO ABN INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' - super fund: ' + sf.Description + ' does not have an ABN entered' ,ValidationLevel = 1 ,'COUNTERPARTY=' + Convert(varchar(12), cp.CounterpartyID ) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.SuperFund sf ON sf.SuperfundID = e.SuperFundID INNER JOIN dbo.Counterparty cp ON cp.CounterpartyID = sf.CounterpartyID WHERE cp.ABN Is Null ORDER BY re.EmployeeName --APRA SUPER SPECIFIED NO USI INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' - super fund: ' + sf.Description + ' does not have an USI entered' ,ValidationLevel = 1 ,'SUPERFUND=' + Convert(varchar(12), sf.SuperfundID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.SuperFund sf ON sf.SuperfundID = e.SuperFundID WHERE sf.USI Is Null AND IsNull(sf.Flags,0) & 1 = 0 ORDER BY re.EmployeeName --NON APRA SUPER SPECIFIED NO ESA INSERT INTO @ValErrors SELECT ValidationError = re.EmployeeName + ' - super fund: ' + sf.Description + ' does not have an ESA entered' ,ValidationLevel = 1 ,'SUPERFUND=' + Convert(varchar(12), sf.SuperfundID) FROM @ValidEmps ve INNER JOIN dbo.repvw_Employee re ON re.EmployeeID = ve.EmployeeID INNER JOIN dbo.Employee e ON e.EmployeeID = ve.EmployeeID INNER JOIN dbo.SuperFund sf ON sf.SuperfundID = e.SuperFundID WHERE sf.ESA Is Null AND IsNull(sf.Flags,0) & 1 = 1 ORDER BY re.EmployeeName If @IsClearing = 0 --Payment Reference Number INSERT INTO @ValErrors SELECT ValidationError = 'The payment reference number for transaction ' + Convert(varchar(12), ert.EntryID) + ' does not confirm to the format [ABN][MMDD][NNN]. Make sure the PRN is correct.' ,ValidationLevel = 4 ,'ENTRYID=' + Convert(varchar(12), ert.EntryID) FROM @EmpRemitTrans ert WHERE len(ert.Reference ) <> 18 AND dbo.uFnIsABNValid(LEFT(ert.Reference,11)) = 0 END IF @ForValidation = 0 BEGIN --Get the payment trans for valid employees INSERT INTO @ValidTrans SELECT rt.EmployeeID ,rt.EntryID ,Null ,rt.Reference ,rt.Total ,rt.VolTotal ,0 ,Null ,Null FROM @EmpRemitTrans rt INNER JOIN @ValidEmps e ON e.EmployeeID = rt.EmployeeID IF @IsClearing = 0 --Match payment to remittances BEGIN --get the pay period dates based on the wheld trans and matching amounts UPDATE @ValidTrans SET SourceEntryID = (SELECT Min(EntryID) FROM @EmpWheldTransSum WHERE EmployeeID = t.EmployeeID AND t.Total = (Total + VolTotal)) ,PayPeriodFromDate = (SELECT Min(PayPeriodFromDate) FROM @EmpWheldTransSum WHERE EmployeeID = t.EmployeeID AND t.Total = (Total + VolTotal)) ,PayPeriodToDate = (SELECT Max(PayPeriodToDate) FROM @EmpWheldTransSum WHERE EmployeeID = t.EmployeeID AND t.Total = (Total + VolTotal)) FROM @ValidTrans t --get the remaining unmatched period dates based on the wheld trans and non-matching amounts UPDATE @ValidTrans SET PayPeriodFromDate = (SELECT Min(PayPeriodFromDate) FROM @EmpWheldTransSum WHERE EmployeeID = t.EmployeeID AND t.Total <> (Total + VolTotal)) FROM @ValidTrans t WHERE t.PayPeriodFromDate Is Null --get the remaining unmatched period dates based on the wheld trans and non-matching amounts UPDATE @ValidTrans SET PayPeriodToDate = (SELECT Max(PayPeriodToDate) FROM @EmpWheldTransSum WHERE EmployeeID = t.EmployeeID AND t.Total <> (Total + VolTotal)) FROM @ValidTrans t WHERE t.PayPeriodToDate Is Null --Split super and vol super UPDATE @ValidTrans SET Total = wt.Total ,VolTotal = wt.VolTotal FROM @ValidTrans t INNER JOIN @EmpWheldTransSum wt ON t.SourceEntryID = wt.EntryID AND t.EmployeeID = wt.EmployeeID WHERE wt.VolTotal <> 0 END ELSE --We've created notional transactions so we join based on entryid and employeed (which is always the same since the remit table data was derived from the withheld table data) BEGIN UPDATE @ValidTrans SET SourceEntryID = t.EntryID ,PayPeriodFromDate = wt.PayPeriodFromDate ,PayPeriodToDate = wt.PayPeriodToDate FROM @ValidTrans t INNER JOIN @EmpWheldTransSum wt ON wt.EmployeeID = t.EmployeeID AND wt.EntryID = t.EntryID END --Do the SS apportionments --for transactions that have been matched UPDATE @ValidTrans SET SSTotal = AdjSSTotal FROM @ValidTrans vt INNER JOIN @EmpSS ss ON ss.EntryID = vt.SourceEntryID AND ss.EmployeeID = vt.EmployeeID WHERE vt.Total >= ss.AdjSSTotal --Get the allocated SS amounts INSERT INTO @EmpSSAloc SELECT EmployeeID ,Sum(SSTotal * -1) FROM @ValidTrans WHERE SSTotal <> 0 GROUP BY EmployeeID --Get the total SS amounts INSERT INTO @EmpSSAloc SELECT EmployeeID ,Sum(AdjSSTotal) FROM @EmpSS WHERE AdjSSTotal <> 0 GROUP BY EmployeeID --Work out what's left to allocate for SS INSERT INTO @EmpSSAlocSum SELECT EmployeeID ,Sum(SSAlloc) ,0 FROM @EmpSSAloc GROUP BY EmployeeID --Get the total to be pro-rated against UPDATE @EmpSSAlocSum SET TransTotal = IsNull((SELECT Sum(Total + VolTotal) FROM @ValidTrans WHERE EmployeeID = e.EmployeeID AND SSTotal = 0),0) FROM @EmpSSAlocSum e --Pro-rate the remaining amounts --against unmatched transaction UPDATE @ValidTrans SET SSTotal = Round(SSAlloc * ((vt.Total + vt.VolTotal) / ss.TransTotal),2) FROM @ValidTrans vt INNER JOIN @EmpSSAlocSum ss ON ss.EmployeeID = vt.EmployeeID WHERE SourceEntryID Is Null AND SSTotal = 0 --Checksum here is we ever need it --SELECT t.EmployeeID -- ,Sum(Total) --FROM @EmpWheldTransSum t --INNER --JOIN @ValidEmps e --ON e.EmployeeID = t.EmployeeID --GROUP --BY t.EmployeeID --SELECT EmployeeID -- ,Sum(Total) --FROM @ValidTrans --GROUP --BY EmployeeID --Select * from @EmpSS --Select * from @EmpSSAloc --Select * from @EmpSSAlocSum --Select * --from @ValidTrans --Return 0 DECLARE @EmpTrans TABLE ( ID Int ,SourceID nVarchar(50) ,SourceType nVarchar(50) ,SourceESA nVarchar(50) ,SourceEEM nVarchar(10) ,SenderABN nVarchar(50) ,SenderName nVarchar(1000) ,SenderLast nVarchar(75) ,SenderFirst nVarchar(75) ,SenderEmail nVarchar(200) ,SenderPhone nVarchar(200) ,PayerABN nVarchar(50) ,PayerName nVarchar(1000) ,PayerBSB nVarchar(50) ,PayerAccNo nVarchar(50) ,PayerAccName nVarchar(250) ,FundABN nVarchar(50) ,FundUSI nVarchar(100) ,FundName nVarchar(100) ,FundESA nVarchar(100) ,PaymentMethod nVarchar(50) ,TransDate nVarchar(10) ,Reference nVarchar(50) ,PaymentAmount nVarchar(10) ,FundBSB nVarchar(50) ,FundAccNo nVarchar(50) ,FundAccName nVarchar(250) ,EmployerABN nVarchar(50) ,EmployerName nVarchar(1000) ,MemberTFN nVarchar(50) ,MemberTitle nVarchar(10) ,MemberLast nVarchar(75) ,MemberFirst nVarchar(75) ,MemberGender nVarchar(1) ,MemberDOB nVarchar(12) ,MemberAddCode nVarchar(3) ,MemberAdd1 nVarchar(100) ,MemberAdd2 nVarchar(100) ,MemberAdd3 nVarchar(100) ,MemberAdd4 nVarchar(100) ,MemberCity nVarchar(50) ,MemberPostCode nVarchar(50) ,MemberState nVarchar(50) ,MemberCountry nVarchar(2) ,MemberEmail nVarchar(200) ,MemberPhone nVarchar(200) ,MemberMobile nVarchar(200) ,MemberAccNo nVarchar(20) ,MemberPayRef nVarchar(100) ,MemberEndDate nVarchar(10) ,ContStartDate nVarchar(10) ,ContEndDate nVarchar(10) ,ContSGCAmt nVarchar(10) ,ContSSAmt nVarchar(10) ,ContVolAmt nVarchar(10) ) -- Exec dbo.repsp_Superstream @AdminID = 2295, @WHeldFromDate = '20140930', @WHeldToDate = '20151231', @CHLookupID = 115000, @UserID=1061, @ForValidation=0,@EmployeeXML='',@FileName='SuperStream_SAFF_20151021_10_56.csv' -- Exec dbo.repsp_Superstream @AdminID = 2295, @WHeldFromDate = '20140930', @WHeldToDate = '20151231', @RemitFromDate = '20140930', @RemitToDate = '20151231', @CHLookupID = 115000, @UserID=1061, @ForValidation=0,@EmployeeXML='',@FileName='SuperStream_SAFF_20151021_10_56.csv' INSERT INTO @EmpTrans SELECT 0 ,SourceID = REPLACE(@ABN, ' ', '') ,SourceType = 'urn:oasis:tc:ebcore:partyid-type:ABN:0151' ,SourceESA = Null --'TODO' ,SourceEEM = 'true' --Probably should be false or not present ,SenderABN = REPLACE(@ABN, ' ', '') ,SenderName = a.Name ,SenderLast = @UserLast ,SenderFirst = @UserFirst ,SenderEmail = @UserEmail ,SenderPhone = REPLACE( REPLACE( REPLACE( @UserPhone , ')', '') , '(', '') , ' ', '') ,PayerABN = REPLACE(@ABN, ' ', '') ,PayerName = a.Name ,PayerBSB = REPLACE(acc.BSB , ' ', '') ,PayerAccNo = REPLACE(acc.BankAccountNo , ' ', '') ,PayerAccName = IsNull(acc.Reference1, a.Name) ,FundABN = REPLACE(cp.ABN , ' ', '') ,FundUSI = REPLACE(sf.USI , ' ', '') ,FundName = sf.Description ,FundESA = sf.ESA ,PaymentMethod = 'DirectCredit' ,TransDate = CASE WHEN @IsClearing = 1 THEN Null ELSE Convert(nVarchar(10), e.EntryDate, 120) END ,Reference = t.Reference ,PaymentAmount = Convert(nVarchar(10), t.Total + t.VolTotal) ,FundBSB = CASE WHEN @IsClearing = 1 THEN --Clearing house file CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN IsNull(sf.BSB, cp.BSB) ELSE Null END --If non APRA/SMSF use the fund sf or cp data otherwise blank ELSE --Non clearing house file CASE WHEN (e.BSB Is Not Null and e.AccountNo Is Not Null AND e.AccountName Is Not Null) THEN e.BSB ELSE cp.BSB END --If the BSB has been specified in the payment entry use that otherwise use the fund data END ,FundAccNo= CASE WHEN @IsClearing = 1 THEN --Clearing house file CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN CASE WHEN sf.AccountNo Is Not Null THEN REPLACE(sf.AccountNo, ' ', '') ELSE REPLACE(cp.AccountNo, ' ', '') END ELSE Null END --If non APRA/SMSF use the fund data otherwise blank ELSE --Non clearing house file CASE WHEN (e.BSB Is Not Null and e.AccountNo Is Not Null AND e.AccountName Is Not Null) THEN REPLACE(e.AccountNo, ' ', '') ELSE REPLACE(cp.AccountNo, ' ', '') END --If the BSB has been specified in the payment entry use that otherwise use the fund data END ,FundAccName = CASE WHEN @IsClearing = 1 THEN --Clearing house file CASE WHEN IsNull(sf.Flags, 0) & 1 = 1 THEN IsNull(sf.AccountName, cp.AccountName) ELSE Null END --If non APRA/SMSF use the fund data otherwise blank ELSE --Non clearing house file CASE WHEN (e.BSB Is Not Null and e.AccountNo Is Not Null AND e.AccountName Is Not Null) THEN e.AccountName ELSE cp.AccountName END --If the BSB has been specified in the payment entry use that otherwise use the fund data END ,EmployerABN = REPLACE(@ABN, ' ', '') ,EmployerName = a.Name ,MemberTFN = REPLACE(emp.TFN, ' ', '') ,MemberTitle = emp.Title ,MemberLast = emp.LastName ,MemberFirst = emp.FirstName ,MemberGender = CASE WHEN IsNull(emp.Gender, 'M') = 'M' THEN '1' ELSE '2' END ,MemberDOB = Convert(Varchar(10), emp.DateOfBirth, 120) ,MemberAddCode = CASE WHEN ea.MailToParent = 1 THEN 'POS' ELSE 'RES' END ,MemberAdd1 = ea.AddressLine1 ,MemberAdd2 = ea.AddressLine2 ,MemberAdd3 = ea.AddressLine3 ,MemberAdd4 = ea.AddressLine4 ,MemberCity = ea.City ,MemberPostCode = ea.PostCode ,MemberState = ea.State ,MemberCountry = 'au' ,MemberEmail = en.Email ,MemberPhone = REPLACE( REPLACE( REPLACE( en.Phone , ')', '') , '(', '') , ' ', '') ,MemberMobile = REPLACE( REPLACE( REPLACE( en.Mobile , ')', '') , '(', '') , ' ', '') ,MemberAccNo = Convert(nVarchar(20), emp.SuperFundAccountNo) ,MemberPayRef = emp.PayrollReference ,MemberEndDate = Convert(nVarchar(10), emp.TerminationDate, 120) ,ContStartDate = Convert(nVarchar(10), t.PayPeriodFromDate, 120) ,ContEndDate = Convert(nVarchar(10), t.PayPeriodToDate, 120) ,ContSGCAmt = Convert(nVarchar(10), Round((Total - SSTotal),2)) ,ContSSAmt = Convert(nVarchar(10), Round(SSTotal,2)) ,ContVolAmt = Convert(nVarchar(10), Round(VolTotal,2)) FROM dbo.Entry e INNER JOIN @ValidTrans t ON t.EntryID = e.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = e.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID INNER JOIN dbo.Employee emp ON emp.EmployeeID = t.EmployeeID INNER JOIN @EmpAddress ea ON ea.EmployeeID = t.EmployeeID LEFT OUTER --INNER JOIN dbo.SuperFund sf ON sf.SuperfundID = emp.SuperFundID LEFT OUTER --INNER JOIN dbo.Counterparty cp ON cp.CounterpartyID = sf.CounterpartyID LEFT OUTER JOIN @EmpNumber en ON en.EmployeeID = t.EmployeeID ORDER BY e.EntryDate ,e.EntryID DECLARE @ID Int = 0 UPDATE @EmpTrans SET ID = @ID ,@ID = @ID + 1 END -- @ForValidation = 0 --Select * from @EmpRemitTrans --Where EmployeeID = 8107 --Select * from @BatchData --Select * from @EmpWheldData --Select * from @EmpRemitData --Select * from @ValidTrans --Where EmployeeID = 8107 --Select * from @EmpTrans --Return results IF @ForValidation = 1 SELECT * FROM @ValErrors ORDER BY ValidationError ELSE BEGIN SELECT ' ' = 'VERSION' ,'Col02' = @Version ,'Col03' = 'NEGATIVES SUPPORTED' ,'Col04' = 'false' ,'Col05' = 'FILE ID' ,'Col06' = @FileName ,'Col07' ='', 'Col08'='','Col09'='' ,'Col10' ='', 'Col11'='', 'Col12'='', 'Col13'='', 'Col14'='', 'Col15'='', 'Col16'='', 'Col17'='','Col18'='','Col19' ='' ,'Col20' ='', 'Col21'='', 'Col22'='', 'Col23'='', 'Col24'='', 'Col25'='', 'Col26'='', 'Col27'='','Col28'='','Col29' ='' ,'Col30' ='', 'Col31'='', 'Col32'='', 'Col33'='', 'Col34'='', 'Col35'='', 'Col36'='', 'Col37'='','Col38'='','Col39' ='' ,'Col40' ='', 'Col41'='', 'Col42'='', 'Col43'='', 'Col44'='', 'Col45'='', 'Col46'='', 'Col47'='','Col48'='','Col49' ='' ,'Col50' ='', 'Col51'='', 'Col52'='', 'Col53'='', 'Col54'='', 'Col55'='', 'Col56'='', 'Col57'='','Col58'='','Col59' ='' ,'Col60' ='', 'Col61'='', 'Col62'='', 'Col63'='', 'Col64'='', 'Col65'='', 'Col66'='', 'Col67'='','Col68'='','Col69' ='' ,'Col70' ='', 'Col71'='', 'Col72'='', 'Col73'='', 'Col74'='', 'Col75'='', 'Col76'='', 'Col77'='','Col78'='','Col79' ='' ,'Col80' ='', 'Col81'='', 'Col82'='', 'Col83'='', 'Col84'='', 'Col85'='', 'Col86'='', 'Col87'='','Col88'='','Col89' ='' ,'Col90' ='', 'Col91'='', 'Col92'='', 'Col93'='', 'Col94'='', 'Col95'='', 'Col96'='', 'Col97'='','Col98'='','Col99' ='' ,'Col100' ='', 'Col101'='', 'Col102'='', 'Col103'='', 'Col104'='', 'Col105'='', 'Col106'='', 'Col107'='','Col108'='','Col109' ='' ,'Col110' ='', 'Col111'='', 'Col112'='', 'Col113'='', 'Col114'='', 'Col115'='', 'Col116'='', 'Col117'='','Col118'='','Col119' ='' ,'Col120' ='', 'Col121'='', 'Col122'='', 'Col123'='', 'Col124'='', 'Col125'='', 'Col126'='', 'Col127'='','Col128'='','Col129' ='' ,'Col130' ='', 'Col131'='', 'Col132'='', 'Col133'='' ,_SortCol = 'A' UNION SELECT 'Col01' = 'LINE ID' ,'Col02' = 'HEADER' ,'Col03' = '', 'Col04'='', 'Col05'='', 'Col06'='SENDER','Col07' ='', 'Col08'='','Col09'='' ,'Col10' ='', 'Col11'='', 'Col12'='', 'Col13'='PAYER', 'Col14'='', 'Col15'='', 'Col16'='', 'Col17'='','Col18'='PAYEE/RECEIVER','Col19' ='' ,'Col20' ='', 'Col21'='', 'Col22'='', 'Col23'='', 'Col24'='', 'Col25'='', 'Col26'='', 'Col27'='','Col28'='','Col29' ='' ,'Col30' ='EMPLOYER', 'Col31'='', 'Col32'='', 'Col33'='', 'Col34'='SUPER FUND MEMBER COMMON', 'Col35'='', 'Col36'='', 'Col37'='','Col38'='','Col39' ='' ,'Col40' ='', 'Col41'='', 'Col42'='', 'Col43'='', 'Col44'='', 'Col45'='', 'Col46'='', 'Col47'='','Col48'='','Col49' ='' ,'Col50' ='', 'Col51'='', 'Col52'='', 'Col53'='', 'Col54'='', 'Col55'='', 'Col56'='', 'Col57'='','Col58'='SUPER FUND MEMBER CONTRIBUTIONS','Col59' ='' ,'Col60' ='', 'Col61'='', 'Col62'='', 'Col63'='', 'Col64'='', 'Col65'='', 'Col66'='', 'Col67'='','Col68'='SUPER FUND MEMBER REGISTRATION','Col69' ='' ,'Col70' ='', 'Col71'='', 'Col72'='', 'Col73'='', 'Col74'='', 'Col75'='', 'Col76'='', 'Col77'='','Col78'='','Col79' ='' ,'Col80' ='', 'Col81'='', 'Col82'='', 'Col83'='', 'Col84'='DEFINED BENEFITS CONTRIBUTIONS', 'Col85'='', 'Col86'='', 'Col87'='','Col88'='','Col89' ='' ,'Col90' ='', 'Col91'='', 'Col92'='', 'Col93'='', 'Col94'='', 'Col95'='', 'Col96'='', 'Col97'='','Col98'='','Col99' ='' ,'Col100' ='DEFINED BENEFITS REGISTRATION', 'Col101'='', 'Col102'='', 'Col103'='', 'Col104'='', 'Col105'='', 'Col106'='', 'Col107'='','Col108'='','Col109' ='' ,'Col110' ='', 'Col111'='', 'Col112'='', 'Col113'='', 'Col114'='', 'Col115'='', 'Col116'='', 'Col117'='','Col118'='','Col119' ='' ,'Col120' ='', 'Col121'='', 'Col122'='', 'Col123'='', 'Col124'='', 'Col125'='', 'Col126'='', 'Col127'='','Col128'='','Col129' ='' ,'Col130' ='', 'Col131'='', 'Col132'='', 'Col133'='' ,_SortCol = 'B' UNION SELECT 'Col1' ='ID', 'Col2'='SourceEntityID', 'Col3'='SourceEntityIDType', 'Col4'='SourceElectronicServiceAddress', 'Col5'='ElectronicErrorMessaging', 'Col6'='ABN', 'Col7'='Organisational Name Text', 'Col8'='Family Name','Col9'='Given Name' ,'Col10' ='Other Given Name', 'Col11'='E-mail Address Text', 'Col12'='Telephone Minimal Number', 'Col13'='ABN', 'Col14'='Organisational Name Text', 'Col15'='BSB Number', 'Col16'='Account Number', 'Col17'='Account Name Text','Col18'='ABN','Col19' ='USI' ,'Col20' ='Organisational Name Text', 'Col21'='TargetElectronicServiceAddress', 'Col22'='Payment Method Code', 'Col23'='Transaction Date', 'Col24'='Payment/Customer Reference Number', 'Col25'='Bpay Biller Code', 'Col26'='Payment Amount', 'Col27'='BSB Number','Col28'='Account Number','Col29' ='Account Name Text' ,'Col30' ='ABN', 'Col31'='Location ID', 'Col32'='Organisational Name Text', 'Col33'='Superannuation Fund Generated Employer Identifier', 'Col34'='TFN', 'Col35'='Person Name Title Text', 'Col36'='Person Name Suffix text', 'Col37'='Family Name','Col38'='Given Name','Col39' ='Other Given Name' ,'Col40' ='Sex Code', 'Col41'='Birth Date', 'Col42'='Address Usage Code', 'Col43'='Address Details Line 1 Text', 'Col44'='Address Details Line 2 Text', 'Col45'='Address Details Line 3 Text', 'Col46'='Address Details Line 4 Text', 'Col47'='Locality Name Text','Col48'='Postcode Text','Col49' ='State or Territory Code' ,'Col50' ='Country Code', 'Col51'='E-mail Address Text', 'Col52'='Telephone Minimal Number Landline', 'Col53'='Telephone Minimal Number Mobile', 'Col54'='Member Client Identifier', 'Col55'='Payroll Number Identifier', 'Col56'='Employment End Date', 'Col57'='Employment End Reason Text','Col58'='Pay Period Start Date','Col59' ='Pay Period End Date' ,'Col60' ='Superannuation Guarantee Amount', 'Col61'='Award or Productivity Amount', 'Col62'='Personal Contributions Amount', 'Col63'='Salary Sacrificed Amount', 'Col64'='Voluntary Amount', 'Col65'='Spouse Contributions Amount', 'Col66'='Child Contributions Amount', 'Col67'='Other Third Party Contributions Amount','Col68'='Employment Start Date','Col69' ='At Work Indicator' ,'Col70' ='Annual Salary for Benefits Amount', 'Col71'='Annual Salary for Contributions Amount', 'Col72'='Annual Salary for Contributions Effective Start Date', 'Col73'='Annual Salary for Contributions Effective End Date', 'Col74'='Annual Salary for Insurance Amount', 'Col75'='Weekly Hours Worked Number', 'Col76'='Occupation Description', 'Col77'='Insurance Opt Out Indicator','Col78'='Fund Registration Date','Col79' ='Benefit Category Text' ,'Col80' ='Employment Status Code', 'Col81'='Super Contribution Commence Date', 'Col82'='Super Contribution Cease Date', 'Col83'='Member Registration Amendment Reason Text', 'Col84'='Defined Benefit Member Pre Tax Contribution', 'Col85'='Defined Benefit Member Post Tax Contribution', 'Col86'='Defined Benefit Employer Contribution', 'Col87'='Defined Benefit Notional Member Pre Tax Contribution','Col88'='Defined Benefit Notional Member Post Tax Contribution','Col89' ='Defined Benefit Notional Employer Contribution' ,'Col90' ='Ordinary Time Earnings', 'Col91'='Actual Periodic Salary or Wages Earned', 'Col92'='Superannuable Allowances Paid', 'Col93'='Notional Superannuable Allowances', 'Col94'='Service Fraction', 'Col95'='Service Fraction Effective Date', 'Col96'='Full Time Hours', 'Col97'='Contracted Hours','Col98'='Actual Hours Paid','Col99' ='Employee Location Identifier' ,'Col100' ='Service Fraction', 'Col101'='Service Fraction Start Date', 'Col102'='Service Fraction End Date', 'Col103'='Defined Benefit Employer Rate', 'Col104'='Defined Benefit Employer Rate Start Date', 'Col105'='Defined Benefit Employer Rate End Date', 'Col106'='Defined Benefit Member Rate', 'Col107'='Defined Benefit Member Rate Start Date','Col108'='Defined Benefit Member Rate End Date','Col109' ='Defined Benefit Annual Salary 1' ,'Col110' ='Defined Benefit Annual Salary 1 Start Date', 'Col111'='Defined Benefit Annual Salary 1 End Date', 'Col112'='Defined Benefit Annual Salary 2', 'Col113'='Defined Benefit Annual Salary 2 Start Date', 'Col114'='Defined Benefit Annual Salary 2 End Date', 'Col115'='Defined Benefit Annual Salary 3', 'Col116'='Defined Benefit Annual Salary 3 Start Date', 'Col117'='Defined Benefit Annual Salary 3 End Date','Col118'='Defined Benefit Annual Salary 4','Col119' ='Defined Benefit Annual Salary 4 Start Date' ,'Col120' ='Defined Benefit Annual Salary 4 End Date', 'Col121'='Defined Benefit Annual Salary 5', 'Col122'='Defined Benefit Annual Salary 5 Start Date', 'Col123'='Defined Benefit Annual Salary 5 End Date', 'Col124'='Leave Without Pay Code', 'Col125'='Leave Without Pay Code Start Date', 'Col126'='Leave Without Pay Code End Date', 'Col127'='Annual Salary for Insurance Effective Date','Col128'='Annual Salary for Benefits Effective Date','Col129' ='Employee Status Effective Date' ,'Col130' ='Employee Benefit Category Effective Date', 'Col131'='Employee Location Identifier', 'Col132'='Employee Location Identifier Start Date', 'Col133'='Employee Location Identifier End Date' ,_SortCol = 'C' UNION SELECT 'Col1' = Convert(Varchar(10), ID) ,'Col02' = SourceID ,'Col03' = SourceType ,'Col04' = SourceESA ,'Col05' = SourceEEM ,'Col06' = SenderABN ,'Col07' = SenderName ,'Col08' = SenderLast ,'Col09' = SenderFirst ,'Col10' = '' ,'Col11' = SenderEmail ,'Col12' = SenderPhone ,'Col13' = PayerABN ,'Col14' = PayerName ,'Col15' = PayerBSB ,'Col16' = PayerAccNo ,'Col17' = PayerAccName ,'Col18' = FundABN ,'Col19' = FundUSI ,'Col20' = FundName ,'Col21' = FundESA ,'Col22' = PaymentMethod ,'Col23' = TransDate ,'Col24' = Reference ,'Col25' = '' ,'Col26' = PaymentAmount ,'Col27' = FundBSB ,'Col28' = FundAccNo ,'Col29' = FundAccName ,'Col30' = EmployerABN ,'Col31' = '' ,'Col32' = EmployerName ,'Col33' = '' ,'Col34' = MemberTFN ,'Col35' = MemberTitle ,'Col36' = '' ,'Col37' = MemberLast ,'Col38' = MemberFirst ,'Col39' = '' ,'Col40' = MemberGender ,'Col41' = MemberDOB ,'Col42' = MemberAddCode ,'Col43' = MemberAdd1 ,'Col44' = MemberAdd2 ,'Col45' = MemberAdd3 ,'Col46' = MemberAdd4 ,'Col47' = MemberCity ,'Col48' = MemberPostCode ,'Col49' = MemberState ,'Col50' = MemberCountry ,'Col51' = MemberEmail ,'Col52' = MemberPhone ,'Col53' = MemberMobile ,'Col54' = MemberAccNo ,'Col55' = MemberPayRef ,'Col56' = MemberEndDate ,'Col57' = '' ,'Col58' = ContStartDate ,'Col59' = ContEndDate ,'Col60' = ContSGCAmt ,'Col61' = '0' ,'Col62' = '0' ,'Col63' = ContSSAmt ,'Col64' = ContVolAmt ,'Col65' = '0' ,'Col66' = '0' ,'Col67' = '0' ,'Col68' = '' ,'Col69' = '' ,'Col70' = '' ,'Col71' = '' ,'Col72' = '' ,'Col73' = '' ,'Col74' = '' ,'Col75' = '' ,'Col76' = '' ,'Col77' = '' ,'Col78' = '' ,'Col79' = '' ,'Col80' = '' ,'Col81' = '' ,'Col82' = '' ,'Col83' = '' ,'Col84' = '' ,'Col85' = '' ,'Col86' = '' ,'Col87' = '' ,'Col88' = '' ,'Col89' = '' ,'Col90' = '' ,'Col91' = '' ,'Col92' = '' ,'Col93' = '' ,'Col94' = '' ,'Col95' = '' ,'Col96' = '' ,'Col97' = '' ,'Col98' = '' ,'Col99' = '' ,'Col100' = '' ,'Col101' = '' ,'Col102' = '' ,'Col103' = '' ,'Col104' = '' ,'Col105' = '' ,'Col106' = '' ,'Col107' = '' ,'Col108' = '' ,'Col109' = '' ,'Col110' = '' ,'Col111' = '' ,'Col112' = '' ,'Col113' = '' ,'Col114' = '' ,'Col115' = '' ,'Col116' = '' ,'Col117' = '' ,'Col118' = '' ,'Col119' = '' ,'Col120' = '' ,'Col121' = '' ,'Col122' = '' ,'Col123' = '' ,'Col124' = '' ,'Col125' = '' ,'Col126' = '' ,'Col127' = '' ,'Col128' = '' ,'Col129' = '' ,'Col130' = '' ,'Col131' = '' ,'Col132' = '' ,'Col133' = '' ,_SortCol = 'Z' FROM @EmpTrans ORDER BY _SortCol END --Exec dbo.repsp_Superstream @AdminID = 6927, @WHeldFromDate = '20160630', @WHeldToDate = '20190313', @CHLookupID = 115000, @UserID=7323, @ForValidation=0,@EmployeeXML='',@FileName='SuperStream_SAFF_20190313_15_46.csv' SET NOCOUNT OFF RETURN @@ERROR GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].[repsp_Superstream] TO [insol2_users] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* ------------------------------------------------------------------------------------------- ** Insolvency Version No 3.3.01 ** Created by: Stewart McLeod Date: Reason: Table function returning Employee Payment Summary Revision: 01/06/2010 SM Update UK account list; add Is header; and select when loc = uk 21/10/2010 SM Include trust accounts in the bank balances 08/03/2011 SM Employee Address, use employee address then job address 22/08/2013 SM Add super contribs 07/08/2019 Si Updated EmployeeWagesRate to include Hourly rates DEBUG: select * from repfn_EmployeePaymentSummary (2088,null,null,Null,Null,Null,1,0) ------------------------------------------------------------------------------------------- */ IF Exists (select * from dbo.sysobjects where id = object_id(N'[dbo].repfn_EmployeePaymentSummary') and xtype in (N'FN', N'IF', N'TF')) DROP Function [dbo].[repfn_EmployeePaymentSummary] GO CREATE FUNCTION [dbo].[repfn_EmployeePaymentSummary] ( @AdminID Int ,@DateFrom Datetime = Null ,@DateTo Datetime = Null ,@EmployeeInClause Text = Null ,@ETP Bit = 0 ,@AdminTypeID Int = Null ,@IsIndividual Bit = 1 ,@ShowEntry Bit = 0 ) RETURNS @Return TABLE ( EmployeeID Int ,EntryDate Datetime ,EmployeeName Varchar(200) ,EmployeeFirstName nVarchar(75) ,EmployeeLastName nVarchar(75) ,EmployeeAddress Varchar(1000) ,EmployeeAdd Varchar(500) ,EmployeeCity Varchar(50) ,EmployeeState Varchar(50) ,EmployeePostCode Varchar(50) ,EmployeeCountry Varchar(1000) ,PayrollReference Varchar(100) ,EmployeeWagesPeriod Varchar(250) ,EmployeeWagesRate Varchar(250) ,EmployeePositionTitle Varchar(100) ,EmployeeTFN Varchar(50) ,TFN Varchar(50) ,Payee Varchar(200) ,DateOfBirth DateTime ,Dateofpayment DateTime ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,CDEP Money ,Super Money ,ReportableSuper Money ,Allowances Money ,NonTaxableAllowances Money ,TaxableAllowances Money ,OtherIncome Money ,FBT Money ,Tax Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ABNPayerNumber Varchar(2000) ,BranchNumber Varchar(2000) ,PayerName Varchar(2000) ) AS BEGIN -- DECLARE VARIABLES DECLARE @PayerName Varchar(1105) DECLARE @PayerBranch Varchar(10) DECLARE @ABN_WPN TABLE (AdminID Int ,ABN Varchar(2000) ,WPN Varchar(2000) ,ABN_WPN Varchar(2000) ) DECLARE @SubEntry Table ( EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(500) ,Memo Varchar(2000) ,TransTotal Money ,EmployeeID Int ,Reference2 Varchar(200) ,AccountID Int ,IsHeader Bit ) DECLARE @Entry Table ( EntryID Int ,TransTotal Money ) DECLARE @TaxTable Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,TaxString2 Varchar(100) ,TaxString3 Varchar(100) ,TaxString4 Varchar(100) ,TaxString5 Varchar(100) ,CommaPos1 Int ,CommaPos2 Int ,CommaPos3 Int ,CommaPos4 Int ,CommaPos5 Int ) DECLARE @TaxTable2 Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(100) ,PipePos1 Int ,PipePos2 Int ,PipePos3 Int ) DECLARE @EmpDivPayments TABLE (EntryID Int) DECLARE @EmpPayments TABLE ( EmployeeID INT ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,Super Money ,ReportableSuper Money ,NonTaxableAllowances Money ,TaxableAllowances Money -- separate from wages ,OtherIncome Money ,TAX Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode nvarchar(5) ) DECLARE @EmpPaymentsSUM TABLE (EmployeeID INT -- ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeAddressID Int ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,Super Money ,ReportableSuper Money ,NonTaxableAllowances Money ,TaxableAllowances Money -- separate from wages ,OtherIncome Money ,TAX Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,HasLodgementETP Int ,HasLodgementIndividual Int ,HasLodgementETPThisYear Int ,HasLodgementIndividualThisYear Int ,HasAllowanceEntries Int ,ETPCode nvarchar(5) ) DECLARE @Results Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,EmployeeID Int ,IsETP Bit Not Null ,Code Char(1) Null ,Gross Money Not Null ,Tax Money Not Null ) DECLARE @MaxDateofPayment Table ( MaxEntryDate DateTime ,EmployeeID Int primary key ) -- Tmp DATA -- CUSTOM PROPERTY TYPES -- PayerName SELECT @PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE acp.AdminID = @AdminID -- if the Payer name is blank IF @PayerName IS NULL BEGIN DECLARE @JobSuffix Varchar(2000) DECLARE @JobPrefix Varchar(2000) -- JOB Prefix SELECT @JobPrefix = ISNULL(PropertyValue + ' ','') FROM dbo.CustomProperty cp INNER JOIN dbo.Admin_CustomProperty acp ON cp.CustomPropertyID = acp.CustomPropertyID WHERE cp.CustomPropertyTypeID = 501 AND acp.AdminID = @AdminID -- JOB Suffix SELECT @JobSuffix = ISNULL(' ' + PropertyValue,'') FROM dbo.CustomProperty cp INNER JOIN dbo.Admin_CustomProperty acp ON cp.CustomPropertyID = acp.CustomPropertyID WHERE cp.CustomPropertyTypeID = 12 AND acp.AdminID = @AdminID Select @PayerName = ISNULL(@JobPrefix,'') + Name + ISNULL(@JobSuffix,'') FROM dbo.Admin WHERE AdminID = @AdminID END -- PayerBranch SELECT @PayerBranch = cpBranch.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) WHERE acp.AdminID = @AdminID --- ABN WPN INSERT INTO @ABN_WPN (AdminID,WPN) SELECT AdminID = @AdminID ,ABN = cpWPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID INSERT INTO @ABN_WPN (AdminID,ABN) SELECT AdminID = @AdminID ,ABN = cpABN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID AND acp.AdminID NOT IN (Select AdminID FROM @ABN_WPN) UPDATE @ABN_WPN SET ABN_WPN = ISNULL(WPN,ABN) FROM @ABN_WPN -- Entries INSERT INTO @SubEntry SELECT se.EntryID ,se.SubEntryID ,se.EntryDate ,se.Payee ,se.Memo ,TransTotal = (se.Total * se.Direction) ,c.EmployeeID ,se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,IsHeader = se.IsHeader FROM dbo.SubEntry se INNER JOIN dbo.Creditor c ON se.CreditorID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate BETWEEN ISNULL(@DateFrom,'18991231') AND ISNULL(@DateTO,'30001231') AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.Entrytype not in (100,101) AND div.BankAccount_AccountID IS NOT NULL INSERT INTO @SubEntry SELECT se.EntryID ,se.SubEntryID ,se.EntryDate ,se.Payee ,se.Memo ,TransTotal = (se.Total * se.Direction) ,se.EmployeeID ,se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,IsHeader = se.IsHeader FROM dbo.SubEntry se LEFT JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate BETWEEN ISNULL(@DateFrom,'18991231') AND ISNULL(@DateTO,'30001231') AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND NOT EmployeeID IS NULL AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND div.DividendID IS NULL -- ********************************************** -- Calc Transaction totals -- ********************************************** INSERT INTO @Entry SELECT EntryID ,TransTotal = -TransTotal --Sum(TransTotal) FROM @SubEntry WHERE IsHeader = 1 -- ********************************************** -- Prepare the tax table -- ********************************************** INSERT INTO @TaxTable ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString ,CommaPos1 ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.AccountID ,EntryDate = se.EntryDate ,Direction = CASE WHEN se.TransTotal >= 0 THEN 1 ELSE -1 END ,EmployeeID = se.EmployeeID ,TaxString = se.Reference2 ,CommaPos1 = Charindex(',',se.Reference2) FROM @SubEntry se WHERE se.Reference2 Is Not Null Order By EmployeeID,EntryID,SubEntryID -- ********************************************** -- CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET TaxString = Replace(TaxString,'A0','A|0') UPDATE @TaxTable SET TaxString = Replace(TaxString,'ETP|','ETP=R|') UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Replace ( Substring( TaxString,charindex('E-',TaxString) - 16,20) , '|' , '' ) ,0 ) WHERE charindex('E-',TaxString) > 1 UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Substring( TaxString,charindex('E-',TaxString) - 17,21) ,'' ) WHERE charindex('E-',TaxString) > 1 -- ********************************************** -- END CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** -- ********************************************** -- SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** Update @TaxTable SET TaxString2 = SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ,CommaPos2 = Charindex(',',SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ) WHERE CommaPos1 > 0 Update @TaxTable SET TaxString3 = SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ,CommaPos3 = Charindex(',',SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ) WHERE CommaPos2 > 0 Update @TaxTable SET TaxString4 = SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ,CommaPos4 = Charindex(',',SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ) WHERE CommaPos3 > 0 Update @TaxTable SET TaxString5 = SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ,CommaPos5 = Charindex(',',SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ) WHERE CommaPos4 > 0 -- ********************************************** -- END SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** -- ********************************************** -- Work out the amounts generated in the Refernce Strings -- ********************************************** INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos1 = 0 THEN TaxString ELSE SubString(TaxString, 1, CommaPos1 - 1) END ,0,0,0 FROM @TaxTable INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos2 = 0 THEN TaxString2 ELSE SubString(TaxString2, 1, CommaPos2 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos1 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos3 = 0 THEN TaxString3 ELSE SubString(TaxString3, 1, CommaPos3 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos2 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos4 = 0 THEN TaxString4 ELSE SubString(TaxString4, 1, CommaPos4 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos3 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos4 > 0 /* INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos5 > 0 */ UPDATE @TaxTable2 SET PipePos1 = Charindex('|',TaxString) UPDATE @TaxTable2 SET PipePos2 = Charindex('|',TaxString, PipePos1 + 1) UPDATE @TaxTable2 SET PipePos3 = Charindex('|',TaxString, PipePos2 + 1) INSERT INTO @Results SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP = CASE WHEN Charindex('ETP=R',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=R',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP=O',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=O',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP',TaxString) > 0 THEN Convert(Bit, Charindex('ETP',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) ELSE 0 END ,Code = CASE WHEN Len(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1))) = 3 THEN Null ELSE Right(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)),1) END ,Gross = Convert(Money, SubString(TaxString, PipePos2 + 1, PipePos3 - (PipePos2 + 1))) * Direction ,Tax = CASE WHEN PipePos3 > 0 THEN Convert(Money, SubString(TaxString, PipePos3 + 1, Len(TaxString) - (PipePos3))) * Direction ELSE 0 END FROM @TaxTable2 --- ABN WPN DECLARE @MaxWpn Int DECLARE @MaxWpnVal varchar(2000) DECLARE @MaxABN Int DECLARE @MaxABNVal varchar(2000) SELECT @MaxWpn = cpWPN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID SELECT @MaxWpnVal = Replace(cpWPN.PropertyValue,' ','') FROM CustomProperty cpWPN WHERE cpWPN.CustomPropertyID = @MaxWpn SELECT @MaxABN = cpABN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID SELECT @MaxABNVal = Replace(cpABN.PropertyValue,' ','') FROM CustomProperty cpABN WHERE cpABN.CustomPropertyID = @MaxABN INSERT INTO @ABN_WPN (AdminID,WPN,ABN,ABN_WPN) SELECT @AdminID,@MaxWpnVal,@MaxABNVal,ISNULL(@MaxWpnVal,@MaxABNVal) -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = r.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN r.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE Code WHEN 'G' THEN Gross WHEN 'A' THEN Gross WHEN 'D' THEN Gross ELSE 0 END) ,GrossPayment = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,LumpSumA = Sum(CASE Code WHEN 'A' THEN Gross ELSE 0 END) ,LumpSumB = Sum(CASE Code WHEN 'B' THEN Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,Super = Sum(CASE Code WHEN 'Super' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,NonTaxableAllowances = 0 ,TaxableAllowances = 0 ,OtherIncome = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'B' THEN Tax ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = CASE IsETP WHEN 1 THEN r.Code ELSE '' END FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID GROUP BY r.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 1 THEN r.EntryDate ELSE NULL END ,r.Code ,r.IsETP ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- WAGES INSERT INTO @EmpPayments SELECT EmployeeID = se.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN se.EntryDate ELSE null END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = 0 ,LumpSumB = 0 ,LumpSumD = 0 ,LumpSumE = 0 ,Super = SUM( CASE WHEN acc.AccountGroupID in (4016,4017) THEN -TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 1048576 = 1048576 THEN TransTotal ELSE 0 END ) ,TaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND NOT ISNULL(acc.Flags,0) & 1048576 = 1048576 THEN TransTotal ELSE 0 END ) ,OtherIncome = 0 ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = '' FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE ag.AccountGroupID in (6020,2030,2040,4016,4017,4012,4013) AND se.EntryID NOT IN (select EntryID FROM @Results) -- AND e.AdminID = acc.AdminID GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,se.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 1 THEN se.EntryDate ELSE null END ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- PREFERRED CREDITOR PAYMENTS -- MAX Date of Payment for ETP IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN INSERT INTO @MaxDateofPayment SELECT Max(EntryDate) ,EmployeeID FROM @subentry WHERE NOT EmployeeID IS NULL GROUP BY EmployeeID END INSERT INTO @EmpPaymentsSUM SELECT EmployeeID = ep.EmployeeID -- ,EntryID = ep.EntryID ,EntryDate = MAX(ep.EntryDate) ,Payee = ep.Payee ,EmployeeAddressID = ep.EmployeeAddressID ,Wages = Sum(ep.Wages) ,GrossPayment = Sum(ep.GrossPayment) ,LumpSumA = Sum(ep.LumpSumA) ,LumpSumB = Sum(ep.LumpSumB) ,LumpSumD = Sum(ep.LumpSumD) ,LumpSumE = Sum(ep.LumpSumE) ,Super = Sum(ep.Super) ,ReportableSuper = Sum(ep.ReportableSuper) ,NonTaxableAllowances = Sum(ep.NonTaxableAllowances) ,TaxableAllowances = Sum(ep.TaxableAllowances) ,OtherIncome = Sum(ep.OtherIncome) ,Tax = Sum(ep.Tax) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) ,HasLodgementETP = 0 -- } ,HasLodgementIndividual = 0 -- ,HasLodgementETPThisYear = 0 -- history records ,HasLodgementIndividualThisYear = 0 -- } ,HasAllowanceEntries = CASE WHEN Sum(ep.NonTaxableAllowances) > 0 THEN 1 ELSE 0 END ,ETPCode = ep.ETPCode FROM @EmpPayments ep GROUP BY ep.EmployeeID, ep.Payee,ep.EmployeeAddressID--, ep.EntryDate ,ep.EntryID, ep.Memo ,ep.ETPCode -- Update Employee Address UPDATE @EmpPaymentsSUM SET EmployeeAddressID = c.AddressID FROM Creditor c INNER JOIN Employee e ON e.EmployeeId = c.EmployeeId INNER JOIN @EmpPaymentsSUM eps ON e.EmployeeId = eps.EmployeeId WHERE eps.EmployeeAddressID IS NULL -- ********************************************** -- RETURN -- ********************************************** INSERT INTO @Return SELECT EmployeeID = e.EmployeeID ,EntryDate = ep.EntryDate ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeFirstName = e.FirstName ,EmployeeLastName = e.LastName ,EmployeeAddress = ad.Address + Char(10) + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(CHAR(13) + ad.Country,'') ,EmployeeAdd = ad.Address ,EmployeeCity = ad.City ,EmployeeState = ad.State ,EmployeePostCode = ad.PostCode ,EmployeeCountry = ad.Country -- ,EmployeeStartDate = e.StartDate ,PayrollReference = e.PayrollReference ,EmployeeWagesPeriod = lu.Description ,EmployeeWagesRate = CASE WHEN WagesPeriod_LookupID = 10609 THEN e.HourlyRate ELSE e.Salary END ,EmployeePositionTitle = e.PositionTitle ,EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(e.TFN) = 1 THEN e.TFN ELSE CASE WHEN e.TFN IS NULL THEN '000000000' WHEN NOT (ISNUMERIC(e.TFN) = 1) THEN '*** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(e.TFN) = 9 THEN '*** TFN ' + e.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '*** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE e.TFN END END ,TFN = ISNULL(e.TFN,'000000000') ,Payee = ISNULL(ep.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,DateOfBirth = e.DateOfBirth ,Dateofpayment = ep.EntryDate ,Wages = ISNULL(ep.Wages,0) ,GrossPayment = ISNULL(ep.GrossPayment,0) ,LumpSumA = ISNULL(ep.LumpSumA,0) ,LumpSumB = ISNULL(ep.LumpSumB,0) ,LumpSumD = ISNULL(ep.LumpSumD,0) ,LumpSumE = ISNULL(ep.LumpSumE,0) ,CDEP = 0 ,Super = ISNULL(ep.Super,0) ,ReportableSuper = ISNULL(ep.ReportableSuper,0) ,Allowances = ISNULL(ep.TaxableAllowances,0) ,NonTaxableAllowances = ISNULL(ep.NonTaxableAllowances,0) ,TaxableAllowances = ISNULL(ep.TaxableAllowances,0) ,OtherIncome = ISNULL(ep.OtherIncome,0) ,FBT = 0 ,Tax = Round(ISNULL(ep.Tax,0) - 0.49,0) ,ETPTaxable = ISNULL(ep.ETPTaxable,0) ,ETPNonTaxable = ISNULL(ep.ETPNonTaxable,0) ,ETPTax = ISNULL(ep.ETPTax,0) ,ABNPayerNumber = ISNULL(Replace(abnwpn.ABN_WPN,' ',''),'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName FROM Employee e LEFT OUTER JOIN @EmpPaymentsSUM ep ON ep.EmployeeID = e.EmployeeID LEFT OUTER JOIN dbo.[Lookup] lu ON lu.LookUPID = e.WagesPeriod_LookUPID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID LEFT OUTER JOIN Address ad ON ad.AddressID = ep.EmployeeAddressID WHERE e.AdminID = @AdminID ORDER BY e.LastName RETURN END GO --Insert Into dbo.Scripts --Values('Hotfix 20190807 set FK_CreditorClaim_creditor to Cascade',GetDate(), '|~|') --ALTER TABLE [dbo].[CreditorClaim] DROP CONSTRAINT [FK_CreditorClaim_Creditor] --GO --ALTER TABLE [dbo].[CreditorClaim] WITH NOCHECK ADD CONSTRAINT [FK_CreditorClaim_Creditor] FOREIGN KEY([CreditorID]) --REFERENCES [dbo].[Creditor] ([CreditorID]) --ON DELETE CASCADE --GO --ALTER TABLE [dbo].[CreditorClaim] CHECK CONSTRAINT [FK_CreditorClaim_Creditor] --GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=2487, @BatchID=2254, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission /* Exec dbo.repsp_STP @AdminID=11607, @BatchID=151932, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND se.EntryDate >= @PPSTARTDATE AND se.EntryDate <= @PPENDDATE END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID LEFT OUTER JOIN dbo.Transfer t ON t.BatchID = b.BatchID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID AND IsNull(t.Flags,0) & 4096 = 0 Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=1022, @BatchID=44921, @ForValidation=0, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_EmployeePaymentDetail]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_EmployeePaymentDetail] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_EmployeePaymentDetail] @AdminID Int ,@DateFrom Datetime ,@DateTo Datetime ,@EmployeeInClause Text = Null ,@ShowEntry Bit = 1 ,@ETP Bit = NULL ,@IsIndividual Bit = 1 ,@BatchID Int = NULL ,@AdminTypeID int = NULL AS /* Author: Stewart McLeod Date: Purpose: Notes: Revision History: 28/3/2013 SM Salaray sacrifice 19/05/2015 SM allowed for extra comma in the Reference2 subentry 14/06/16 SM exclude FEG payments without bank accounts select * from lookup where lookuplistid = 121000 12/8/2019 Si Employee termination date not populating report. I have updated all instance of e.EndDate with e.TerminationDate Exec repsp_EmployeePaymentDetail @AdminID = 1022, @DateFrom = '20180701', @DateTo = '20190530', @EmployeeInClause = null, @ShowEntry = 1, @BatchID=44925 EXEC repsp_EmployeePaymentDetail @AdminID = 6665 ,@DateFrom = '20170701' ,@DateTo = '20180630' */ SET NOCOUNT ON SET ANSI_WARNINGS OFF -- DECLARE VARIABLES DECLARE @SubEntry Table ( EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,Memo Varchar(2000) ,TransTotal Money ,EmployeeID Int ,Reference2 Varchar(200) ,AccountID Int -- used for direct entry ,Account_AccountID int -- used to detemine prior year payments ,IsHeader Bit ,BatchID int ,InReport bit ) DECLARE @EmpEntries Table ( EntryID Int ,EmployeeID Int ) DECLARE @Entry Table ( EntryID Int ,BatchID int ,TransTotal Money ,HasHeader bit ) DECLARE @TaxTable Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,TaxString2 Varchar(100) ,TaxString3 Varchar(100) ,TaxString4 Varchar(100) ,TaxString5 Varchar(100) ,CommaPos1 Int ,CommaPos2 Int ,CommaPos3 Int ,CommaPos4 Int ,CommaPos5 Int ) DECLARE @TaxTable2 Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,PipePos1 Int ,PipePos2 Int ,PipePos3 Int ) DECLARE @EmpDivPayments TABLE (EntryID Int primary key) DECLARE @EmpPayments TABLE (EmployeeID INT ,EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ,IsDividend bit ) DECLARE @EmpPaymentsAll TABLE (EmployeeID INT ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ) DECLARE @EmpPaymentsSUM TABLE ( EmployeeID Int ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeCommenceDate DateTime ,EmployeeAddressID Int ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,HasLodgementETP Int ,HasLodgementIndividual Int ,HasLodgementETPThisYear Int ,HasLodgementIndividualThisYear Int ,HasAllowanceEntries Int ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,EmployeeCountryCode varchar(5) ,PrevLodgementETPDate datetime ,PrevLodgementINBDate datetime ,RemunerationIncomeType_LookupID int ,DeclarationSignatureDate datetime --,ArrangementBasis int ,RemunerationABN varchar(100) --,StudyAndTrainingLoanRepayment int --,StudentFinancialScheme int ,BatchID int ) DECLARE @Results Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,EmployeeID Int ,IsETP Bit Not Null ,Code Char(3) Null ,Gross Money Not Null ,Tax Money Not Null ,BatchID int ) DECLARE @EmpData TABLE ( EmployeeID int ,RemunerationIncomeType int ,RemunerationIncomeType_Desc VARCHAR(100) ,ArrangementBasis int ,ArrangementBasis_Desc VARCHAR(100) ,RemunerationABN varchar(100) ,RemunerationABN_Desc VARCHAR(100) ,StudyLoan int ,StudyLoan_Desc VARCHAR(100) ,StudentFinancialScheme int ,StudentFinancialScheme_Desc VARCHAR(100) ,DeclarationDate date ) DECLARE @MaxDateofPayment Table ( MaxEntryDate DateTime ,EmployeeID Int primary key ) DECLARE @ResultsXMl TABLE ( EmployeeID int ,XMLResult XML ) DECLARE @FinancialYearStartDate Datetime DECLARE @AdminStartDate Datetime SELECT @AdminStartDate = StartDate FROM dbo.Admin WHERE @AdminID = @AdminID SELECT @FinancialYearStartDate = dbo.uFnFinancialYearStartDate(@DateTo) DECLARE @BMSId Varchar(100) DECLARE @BMSUID Varchar(100) DECLARE @CAC Varchar(100) DECLARE @PayerName Varchar(1105) DECLARE @PayerBranch Varchar(10) DECLARE @AdminAddress Varchar(760) DECLARE @ABN_WPN TABLE ( AdminID Int ,ABN Varchar(2000) ,WPN Varchar(2000) ,ABN_WPN Varchar(2000) ) CREATE TABLE dbo.#Data ( ID Int Not Null ) --- ABN WPN DECLARE @MaxWpn Int DECLARE @MaxWpnVal varchar(2000) DECLARE @MaxABN Int DECLARE @MaxABNVal varchar(2000) SELECT @MaxWpn = cpWPN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID SELECT @MaxWpnVal = Replace(cpWPN.PropertyValue,' ','') FROM CustomProperty cpWPN WHERE cpWPN.CustomPropertyID = @MaxWpn SELECT @MaxABN = cpABN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID SELECT @MaxABNVal = Replace(cpABN.PropertyValue,' ','') FROM CustomProperty cpABN WHERE cpABN.CustomPropertyID = @MaxABN INSERT INTO @ABN_WPN (AdminID,WPN,ABN,ABN_WPN) SELECT @AdminID,@MaxWpnVal,@MaxABNVal,ISNULL(@MaxWpnVal,@MaxABNVal) SELECT @CAC = Isnull(cpBranch.PropertyValue,'1') FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) and acp.AdminID = @AdminID AND ISNULL(cpBranch.AdminTypeID,@AdminTypeID) = @AdminTypeID SELECT @BMSUID = Setting from dbo.AdminSetting where adminid = @AdminID AND SettingID = 30010 SET @BMSId = @BMSUID + ISNULL('-' + convert(varchar(50),@MaxABN),'') + ISNULL('-' + @CAC,'') -- ***** POPULATE TMP Tables ***** SELECT @PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE acp.AdminID = @AdminID SELECT @PayerBranch = cpBranch.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) WHERE acp.AdminID = @AdminID Set @AdminAddress = (Select ad.Address + CHAR(13) + ISNULL(ad.City + ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode + ' ','') + ISNULL(ad.Country + ' ','') FROM Admin_Address aa INNER JOIN Address ad ON aa.AddressID = ad.AddressID AND ad.IsMailing = 1 WHERE aa.AdminID = @AdminID) IF NOT @EmployeeInClause IS NULL EXEC dbo.usp_Split @EmployeeInClause ELSE INSERT INTO dbo.#Data SELECT EmployeeID FROM Employee WHERE AdminID = @AdminID -- Tmp DATA -- dividend payments INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = c.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.Entry ent ON ent.EntryID = se.EntryID INNER JOIN dbo.Creditor c ON se.CreditorID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data d ON d.ID = e.EmployeeID INNER JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.Entrytype not in (100,101) AND div.BankAccount_AccountID IS NOT NULL AND se.LiabilityID Is Null --AND ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) -- direct payments INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID LEFT JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND NOT se.EntryID in (Select EntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND div.DividendID IS NULL AND se.LiabilityID Is Null AND NOT ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) --FBT INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) * - 1 ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = 1 ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) --AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.LiabilityID Is Null AND ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) AND se.EmployeeID IS NOT NULL -- AND ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) --select dbo.ufnAccountdescription(AccountID),* from @SubEntry -- Calc Transaction totals INSERT INTO @Entry SELECT EntryID ,BatchID ,TransTotal = Sum(-TransTotal) ,HasHeader =1 FROM @SubEntry WHERE IsHeader = 1 GROUP BY EntryID,BatchID -- add entries that haven;t been assigned to employee INSERT INTO @Entry SELECT se.EntryID ,se.BatchID ,TransTotal = 0 ,HasHeader = 0 FROM @SubEntry se LEFT JOIN @Entry e ON e.EntryID = se.EntryID WHERE se.IsHeader = 0 AND e.EntryID IS NULL GROUP BY se.EntryID,se.BatchID UPDATE @Entry SET TransTotal = (Direction * Total * -1) FROM @Entry e INNER JOIN dbo.SubEntry se ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE HasHeader = 0 AND acc.AccountGroupID in (3000,3010) INSERT INTO @TaxTable ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString --,CommaPos1 ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,Direction = CASE WHEN se.TransTotal >= 0 THEN 1 ELSE -1 END ,EmployeeID = se.EmployeeID ,TaxString = se.Reference2 --,CommaPos1 = Charindex(',',se.Reference2) FROM @SubEntry se WHERE se.Reference2 Is Not Null Order By EmployeeID,EntryID,SubEntryID -- ********************************************** -- CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET TaxString = Replace(TaxString,'A0','A|0') UPDATE @TaxTable SET TaxString = Replace(TaxString,'A=T','T') UPDATE @TaxTable SET TaxString = Replace(TaxString,'ETP|','ETP=R|') UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Replace ( Substring( TaxString,charindex('E-',TaxString) - 16,20) , '|' , '' ) ,0 ) WHERE charindex('E-',TaxString) > 1 UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Substring( TaxString,charindex('E-',TaxString) - 17,21) ,'' ) WHERE charindex('E-',TaxString) > 1 -- ********************************************** -- END CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET CommaPos1 = Charindex(',',TaxString) -- ********************************************** -- SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** Update @TaxTable SET TaxString2 = SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ,CommaPos2 = Charindex(',',SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ) WHERE CommaPos1 > 0 Update @TaxTable SET TaxString3 = SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ,CommaPos3 = Charindex(',',SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ) WHERE CommaPos2 > 0 Update @TaxTable SET TaxString4 = SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ,CommaPos4 = Charindex(',',SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ) WHERE CommaPos3 > 0 Update @TaxTable SET TaxString5 = SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ,CommaPos5 = Charindex(',',SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ) WHERE CommaPos4 > 0 -- ********************************************** -- END SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos1 = 0 THEN TaxString ELSE SubString(TaxString, 1, CommaPos1 - 1) END ,0,0,0 FROM @TaxTable INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos2 = 0 THEN TaxString2 ELSE SubString(TaxString2, 1, CommaPos2 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos1 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos3 = 0 THEN TaxString3 ELSE SubString(TaxString3, 1, CommaPos3 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos2 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos4 = 0 THEN TaxString4 ELSE SubString(TaxString4, 1, CommaPos4 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos3 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos4 > 0 UPDATE @TaxTable2 SET PipePos1 = Charindex('|',TaxString) UPDATE @TaxTable2 SET PipePos2 = Charindex('|',TaxString, PipePos1 + 1) UPDATE @TaxTable2 SET PipePos3 = Charindex('|',TaxString, PipePos2 + 1) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP = CASE WHEN Charindex('ETP=R',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=R',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP=O',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=O',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP',TaxString) > 0 THEN Convert(Bit, Charindex('ETP',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) ELSE 0 END ,Code = CASE WHEN Len(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1))) = 3 THEN Null ELSE Right(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)),1) END ,Gross = Convert(Money, SubString(TaxString, PipePos2 + 1, PipePos3 - (PipePos2 + 1))) * Direction ,Tax = Convert(Money, SubString(TaxString, PipePos3 + 1, Len(TaxString) - (PipePos3))) * Direction FROM @TaxTable2 -- SGC INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = EntryID ,SubEntryID = SubEntryID ,Account_AccountID = Account_AccountID ,EntryDate = EntryDate ,EmployeeID = EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.CreditorClaimTypeID = 255 AND acc.AccountGroupID = 2030 AND se.EntryID in (Select EntryID from @Results) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,EmployeeID = se.EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = -se.TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.AccountGroupID in (4016,4017) AND se.EntryID in (Select EntryID from @Results) AND NOT se.EntryID in (Select EntryID from @Results WHERE CODE = 'SGC') UPDATE @Results SET BatchID = se.BatchID FROM @Results r INNER JOIN @SubEntry se ON se.EntryID = r.EntryID /* Select * from @SubEntry Select * from @TaxTable Select * from @TaxTable2 Select * from @Results return 0 */ -- Detemine if there's prior year entries for the employee DECLARE @PriorYearPayments TABLE ( EmployeeID INT ,Account_AccountID INT ,SubEntryID INT ,EntryDate DATETIME ,Reference2 varchar(250) ,Ref2HasR int ,Ref2HasO int ) INSERT INTO @PriorYearPayments SELECT EmployeeID = se.EmployeeID ,Account_AccountID = se.Account_AccountID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Reference2 = se.Reference2 ,Ref2HasR = CASE WHEN Charindex('ETP=R|',se.Reference2) > 0 OR Charindex('ETP=|',se.Reference2) > 0 THEN 1 ELSE 0 END ,Ref2HasO = CASE WHEN Charindex('ETP=O|',se.Reference2) > 0 THEN 1 ELSE 0 END FROM SubEntry se INNER JOIN @SubEntry se1 ON se.EmployeeID = se1.EmployeeID AND se.Account_AccountID = se1.Account_AccountID AND se.EntryDate < dbo.uFnFinancialYearStartDate(@DateFrom) AND ISNULL(se.IsBatchPosting,0) = 0 UPDATE @Results SET Code = Replace(r.Code, 'R','S') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'R' UPDATE @Results SET Code = Replace(r.Code, 'O','P') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'O' -- YTD DECLARE @STP_DETAIL_YTD TABLE ( EmployeeID int ,SubentryID int ,Amount Money ,AccountID int ,EntryDate datetime ) INSERT INTO @STP_DETAIL_YTD SELECT EmployeeID = se.EmployeeID ,SubentryID = se.SubentryID ,Amount = SUM(se.TransTotal) ,AccountID = se.AccountID ,EntryDate = se.EntryDate FROM @SubEntry se WHERE se.EmployeeID IS NOT NULL GROUP BY se.EmployeeID ,se.SubentryID ,se.AccountID ,se.EntryDate -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = r.EmployeeID ,EntryID = r.EntryID --CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,SubEntryID = CASE WHEN @ShowEntry = 0 THEN r.SubEntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE r.EntryDate END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE r.Code WHEN 'G' THEN r.Gross ELSE 0 END) ,GrossPayment = Sum(CASE r.Code WHEN 'G' THEN r.Gross ELSE 0 END) ,LumpSumA = Sum(CASE r.Code WHEN 'A' THEN r.Gross ELSE 0 END) ,LumpSumAT = Sum(CASE r.Code WHEN 'T' THEN r.Gross ELSE 0 END) ,LumpSumAType = CASE r.Code WHEN 'A' THEN 'R' ELSE NULL END ,LumpSumB = Sum(CASE r.Code WHEN 'B' THEN r.Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = CASE IsETP WHEN 1 THEN r.Code ELSE '' END ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = r.Batchid ,IsDividend = 1 FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE r.EntryDate >= @DateFrom AND r.EntryDate <= @DateTO GROUP BY r.EmployeeID ,r.EntryID --CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 0 THEN r.SubEntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE r.EntryDate END ,r.Code ,r.IsETP ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.TerminationDate , e.TaxFlags ,e.WagesPeriod_LookupID ,r.Batchid -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = se.EmployeeID ,EntryID = se.EntryID --CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,SubEntryID = CASE WHEN @ShowEntry = 0 THEN se.SubEntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN ( acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 ) THEN -TransTotal WHEN ( acc.AccountGroupID in (2030) AND acc.CreditorClaimTypeID = 255 ) THEN TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN -TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN -TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = '' ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = se.BatchID ,IsDividend = 0 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE ( (ag.AccountGroupID in (6020,2030,2040,4012,4013, 4016,4017)) OR (ag.AccountGroupID in (4040) ANd acc.Flags IS NOT NULL) ) AND se.EntryID NOT IN (select EntryID FROM @Results) AND se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,se.EmployeeID ,se.EntryID --CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 0 THEN se.SubEntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate ELSE NULL END ,se.EntryDate ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.TerminationDate ,e.TaxFlags ,e.WagesPeriod_LookupID ,se.BatchID /* select dbo.uFnAccountDescription(AccountID),* from @subentry se WHERE se.SubEntryID NOT IN (select SubEntryID FROM @Results) and se.batchid = @BatchID select dbo.uFnAccountDescription(AccountID),* from @subentry se WHERE se.SubEntryID NOT IN (select SubEntryID FROM @Results) and se.batchid = @BatchID select * from @EmpPayments where batchid = @BatchID */ -- MAX Date of Payment for ETP --IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN INSERT INTO @MaxDateofPayment SELECT Max(EntryDate) ,EmployeeID FROM @subentry WHERE NOT EmployeeID IS NULL GROUP BY EmployeeID END -- YEAR TO DATE -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPaymentsAll SELECT EmployeeID = r.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,EntryDate = MAX(EntryDate) ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,GrossPayment = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,LumpSumA = Sum(CASE Code WHEN 'A' THEN Gross ELSE 0 END) ,LumpSumAT = Sum(CASE Code WHEN 'T' THEN Gross ELSE 0 END) ,LumpSumAType = NULL ,LumpSumB = Sum(CASE Code WHEN 'B' THEN Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = NULL ,TaxFlags = NULL ,WagesPeriod_LookupID = NULL ,BatchID = CASE WHEN @ShowEntry = 1 THEN r.Batchid ELSE NULL END FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE r.EntryDate >= @FinancialYearStartDate AND r.EntryDate <= @DateTO GROUP BY r.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END /* , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE NULL END */ ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.TerminationDate , CASE WHEN @ShowEntry = 1 THEN r.Batchid ELSE NULL END -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** INSERT INTO @EmpPaymentsAll SELECT EmployeeID = se.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,EntryDate = MAX(EntryDate) ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN 0 WHEN -- lump sum ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN -- lump sum ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 THEN -TransTotal WHEN ( acc.AccountGroupID in (2030) AND acc.CreditorClaimTypeID = 255 ) THEN TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN -TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN -TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN -TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN -TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = NULL ,TaxFlags = NULL ,WagesPeriod_LookupID = NULL ,Batchid = CASE WHEN @ShowEntry = 1 THEN se.Batchid ELSE NULL END FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE ( (ag.AccountGroupID in (6020,2030,2040,4012,4013,4016,4017)) OR (ag.AccountGroupID in (4040) ANd acc.Flags IS NOT NULL) ) AND ( se.EntryID NOT IN (select EntryID FROM @Results) OR se.SubEntryID in (select EntryID FROM @Results WHERE Code = 'SGC') ) AND se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,se.EmployeeID ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.TerminationDate ,CASE WHEN @ShowEntry = 1 THEN se.Batchid ELSE NULL END /* select * from employee Select * from @TaxTable Select * from @TaxTable2 */ INSERT INTO @EmpPaymentsSUM SELECT EmployeeID = ep.EmployeeID ,EntryID = ep.EntryID ,EntryDate = MAX(ep.EntryDate) ,Payee = ep.Payee ,EmployeeDateStart = ep.EmployeeDateStart ,EmployeeDateEnd = ep.EmployeeDateEnd ,EmployeeCommenceDate = CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,EmployeeAddressID = ep.EmployeeAddressID ,Wages = Sum(ep.Wages) ,GrossPayment = Sum(ep.GrossPayment) ,LumpSumA = Sum(ep.LumpSumA) ,LumpSumAT = Sum(ep.LumpSumAT) ,LumpSumB = Sum(ep.LumpSumB) ,LumpSumD = Sum(ep.LumpSumD) ,LumpSumE = Sum(ep.LumpSumE) ,SuperSGC = Sum(ep.SuperSGC) ,ReportableSuper = Sum(ep.ReportableSuper) ,ExcludeFromOTE = Sum(ep.ExcludeFromOTE) ,NonTaxableAllowances = Sum(ep.NonTaxableAllowances) ,FBTTaxable = Sum(ep.FBTTaxable) ,FBTNonTaxable = Sum(ep.FBTNonTaxable) ,DeductWorkPlaceGiving = Sum(ep.DeductWorkPlaceGiving) ,DeductUnionFees = Sum(ep.DeductUnionFees) ,CommunityDevelopmentEmploymentProject = Sum(ep.CommunityDevelopmentEmploymentProject) ,ExemptForeignEmploymentIncome = Sum(ep.ExemptForeignEmploymentIncome) ,Allow_Car = Sum(ep.Allow_Car) ,Allow_Trans = Sum(ep.Allow_Trans) ,Allow_Laundry = Sum(ep.Allow_Laundry) ,Allow_Meals = Sum(ep.Allow_Meals) ,Allow_Travel = Sum(ep.Allow_Travel) ,Allow_Other = Sum(ep.Allow_Other) ,Tax = Sum(ep.Tax) ,ForeignWithholding = Sum(ep.ForeignWithholding) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) ,0 -- } ,0 -- ,0 -- history records ,0 -- } ,HasAllowanceEntries = CASE WHEN Sum(ep.NonTaxableAllowances) > 0 THEN 1 ELSE 0 END ,ETPCode = CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE ep.ETPCode END ,TaxFlags = ep.TaxFlags ,WagesPeriod_LookupID = ep.WagesPeriod_LookupID ,EmployeeCountryCode = NULL ,PrevLodgementETPDate = NULL ,PrevLodgementINBDate = NULL ,RemunerationIncomeType_LookupID = NULL ,DeclarationSignatureDate = NULL ,RemunerationABN = NULL ,BatchID = ep.BatchID FROM @EmpPaymentsAll ep /* --JO 14/7/16 --Duplication where ETP with 0|0 WHERE (Wages > 0 OR GrossPayment <> 0 OR LumpSumA <> 0 OR LumpSumB <> 0 OR LumpSumD <> 0 OR LumpSumE <> 0 OR SuperSGC <> 0 OR ReportableSuper <> 0 OR NonTaxableAllowances <> 0 OR FBTTaxable <> 0 OR FBTNonTaxable <> 0 OR DeductWorkPlaceGiving <> 0 OR DeductUnionFees <> 0 OR Tax <> 0 OR ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0) */ GROUP BY ep.EmployeeID ,ep.EntryID , CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,ep.Payee ,ep.EmployeeAddressID--, ep.EntryDate ,ep.EntryID, ep.Memo , CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE ep.ETPCode END ,ep.EmployeeDateStart ,ep.EmployeeDateEnd ,ep.TaxFlags ,ep.WagesPeriod_LookupID ,ep.BatchID --Employee Data SET ANSI_WARNINGS ON INSERT INTO @EmpData ( EmployeeID ,RemunerationIncomeType ,ArrangementBasis ,RemunerationABN ,StudyLoan ,StudentFinancialScheme ,DeclarationDate ) SELECT EmployeeID = ed.EmployeeID ,RemunerationIncomeType = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationIncomeType/@Value)[1]', 'int') ,'') ,ArrangementBasis = ISNULL(ed.Data.value('(/Data/Tax/Employment/ArrangementBasis/@Value)[1]', 'int') ,'') ,RemunerationABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') ,StudyLoan = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudyLoan/@Value)[1]', 'int') ,'') ,StudentFinancialScheme = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudentFinancialScheme/@Value)[1]', 'int') ,'') ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'date') ,'') FROM @EmpPaymentsSUM eps INNER JOIN dbo.EmployeeData ed ON eps.EmployeeID = ed.EmployeeID SET ANSI_WARNINGS OFF UPDATE @EmpData SET RemunerationIncomeType_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.RemunerationIncomeType = lu.LookupID UPDATE @EmpData SET ArrangementBasis_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.ArrangementBasis = lu.LookupID UPDATE @EmpData SET RemunerationABN = NULL WHERE RemunerationABN = '' UPDATE @EmpData SET RemunerationABN_Desc = 'Contractor ABN' WHERE RemunerationABN IS NOT NULL UPDATE @EmpData SET StudyLoan_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.StudyLoan = lu.LookupID UPDATE @EmpData SET DeclarationDate = NULL WHERE DeclarationDate = '19000101' UPDATE @EmpPaymentsSUM SET RemunerationIncomeType_LookupID = ed.RemunerationIncomeType FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET DeclarationSignatureDate = ed.DeclarationDate FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET RemunerationABN = ed.RemunerationABN FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID DECLARE @DEDUCTIONS TABLE ( EmployeeID int ,DeductionType varchar(30) ,DeductionAmount Money ) INSERT INTO @DEDUCTIONS SELECT EmployeeID ,'Workplace Giving' ,DeductWorkPlaceGiving FROM @EmpPaymentsSUM eps WHERE DeductWorkPlaceGiving <> 0 UNION SELECT EmployeeID ,'Fees' ,DeductUnionFees FROM @EmpPaymentsSUM eps WHERE DeductUnionFees <> 0 DECLARE @Allows TABLE ( EmployeeID int ,AllowType varchar(30) ,AllowAmount Money ,AllowTypeOtherDesc Varchar(40) ) INSERT INTO @Allows (EmployeeID ,AllowType ,AllowAmount) SELECT EmployeeID ,'Car' ,Allow_Car FROM @EmpPaymentsSUM eps WHERE Allow_Car <> 0 UNION SELECT EmployeeID ,'Transport' ,Allow_Trans FROM @EmpPaymentsSUM eps WHERE Allow_Trans <> 0 UNION SELECT EmployeeID ,'Laundry' ,Allow_Laundry FROM @EmpPaymentsSUM eps WHERE Allow_Laundry <> 0 UNION SELECT EmployeeID ,'Meals' ,Allow_Meals FROM @EmpPaymentsSUM eps WHERE Allow_Meals <> 0 UNION SELECT EmployeeID ,'Travel' ,Allow_Travel FROM @EmpPaymentsSUM eps WHERE Allow_Travel <> 0 -- other allowances for expected deductible expenses INSERT INTO @Allows SELECT EmployeeID = se.EmployeeID ,AllowType = 'Other' ,AllowAmount = Sum(se.TransTotal) ,AllowTypeOtherDesc = acc.Reference3 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 Group BY se.EmployeeID, acc.Reference3 /* select se.* ,AllowTypeOtherDesc = acc.Reference3 ,ISNULL(acc.Flags,0) & 2097152 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 select * from @Allows */ -- Work out whether the emp had amended ETP/Individual lodgements for the period or not Update @EmpPaymentsSUM SET HasLodgementETPThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 --AND @ETP = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementETP = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 --AND @ETP = 1 Update @EmpPaymentsSUM SET HasLodgementIndividualThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 --AND @IsIndividual = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementIndividual = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 --AND @IsIndividual = 1 --- **** REPORT DATA **** IF @ShowEntry = 1 BEGIN SELECT ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,EmployeeID = e.EmployeeID ,EntryID = ep.EntryID ,EntryDate = ep.EntryDate ,TransTotal = ent.TransTotal ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeAddress = CASE WHEN Ad.AddressID IS NULL THEN @AdminAddress ELSE ad.Address + ' ' + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(ad.Country,'') END ,EmployeeTFN = CASE WHEN e.TFN IS NULL THEN '**TFN IS BLANK ' WHEN NOT (ISNUMERIC(replace(e.TFN,' ','')) = 1) THEN '** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(replace(e.TFN,' ','')) = 9 THEN '** TFN ' + e.TFN + ' NOT 9 digit' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE e.TFN END ,Payee = ISNULL(ep.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,Memo = '' ,Wages = ep.Wages ,GrossPayment = ep.GrossPayment ,LumpSumA = ep.LumpSumA + ep.LumpSumAT ,LumpSumB = ep.LumpSumB ,LumpSumD = ep.LumpSumD ,LumpSumE = ep.LumpSumE ,OrdinaryTimeEarnings = ep.Wages - ep.ExcludeFromOTE ,SuperSGC = ep.SuperSGC ,ReportableSuper = ep.ReportableSuper ,NonTaxableAllowances = ep.NonTaxableAllowances ,OtherIncome = '' ,Tax = ep.Tax ,ExcludeFromOTE = ep.ExcludeFromOTE ,FBTTaxable = ep.FBTTaxable ,FBTNonTaxable = ep.FBTNonTaxable ,DeductWorkPlaceGiving = ep.DeductWorkPlaceGiving ,DeductUnionFees = ep.DeductUnionFees ,CommunityDevelopmentEmploymentProject = ep.CommunityDevelopmentEmploymentProject ,ExemptForeignEmploymentIncome = ep.ExemptForeignEmploymentIncome ,Allow_Car = ep.Allow_Car ,Allow_Trans = ep.Allow_Trans ,Allow_Laundry = ep.Allow_Laundry ,Allow_Meals = ep.Allow_Meals ,Allow_Travel = ep.Allow_Travel ,Allow_Other = ep.Allow_Other ,TAX = ep.TAX ,ForeignWithholding = ep.ForeignWithholding ,ETPTaxable = ep.ETPTaxable ,ETPNonTaxable = ep.ETPNonTaxable ,ETPTax = ep.ETPTax ,ETPCode = ep.ETPCode ,OtherDeductions = '' --ep.OtherDeductions ,TotalDeductions = ep.DeductWorkPlaceGiving + ep.DeductUnionFees ,Other = ep.FBTTaxable + ep.FBTNonTaxable + ep.ExcludeFromOTE + ep.CommunityDevelopmentEmploymentProject + ep.ExemptForeignEmploymentIncome + ep.ForeignWithholding ,PSIssuedDate = NULL ,ETPPaymentDate = NULL ,StartDate = ep.EmployeeDateStart ,EndDate = ep.EmployeeDateEnd ,IncomeType = CASE WHEN ep.RemunerationIncomeType_LookupID = 109201 THEN 'CDEP' WHEN ep.RemunerationIncomeType_LookupID = 109202 THEN 'Voluntary Agree' WHEN ep.RemunerationIncomeType_LookupID = 109203 THEN 'Labour Hire' WHEN ep.RemunerationIncomeType_LookupID = 109204 THEN 'Regulation' WHEN ep.RemunerationIncomeType_LookupID = 109205 THEN 'Joint Petroleum' WHEN ep.RemunerationIncomeType_LookupID = 109206 THEN 'Working Holiday' WHEN ep.RemunerationIncomeType_LookupID = 109207 THEN 'Foreign Resident' ELSE NULL END ,BatchID = ep.BatchID FROM @EmpPaymentsSUM ep INNER JOIN @Entry ent ON ep.EntryID = ent.EntryID INNER JOIN Employee e ON ep.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID INNER JOIN dbo.Address ad ON ad.AddressID = ep.EmployeeAddressID --CROSS --APPLY dbo.tblfn_SplitAddressBody (ad.Address) ab LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID WHERE ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) --WHERE ((@ETP = 0) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) > 0)) --AND epsh.EmployeeID = eps.EmployeeID ORDER BY e.LastName, e.FirstName, e.Title, EntryDate, e.EmployeeID END ELSE --IF @ShowEntry = 0 BEGIN DECLARE @STP_RESULTS TABLE ( STPFieldName Varchar(100) ,FieldName Varchar(100) ,subFieldName Varchar(100) ,EmployeeID int ,EmployeeSurname Varchar(100) ,EmployeeFirstName Varchar(100) ,EntryDate datetime ,Memo Varchar(1000) ,PayCodeDesc Varchar(100) ,Amount Money ,AmountYTD Money ,BatchID int ,EntryID int ,DisplayOrder int ) INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP47' ,FieldName = 'Gross Payments' ,subFieldName = NULL --lookup ,EmployeeID = se.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = se.EntryID ,DisplayOrder = 47 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ( acc.AccountGroupID in (6020) OR acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) ) AND NOT ( ISNULL(acc.Flags,0) & 4194304 = 4194304 OR ISNULL(acc.Flags,0) & 2097152 = 2097152 OR ISNULL(acc.Flags,0) & 262144 = 262144 OR ISNULL(acc.Flags,0) & 524288 = 524288 OR ISNULL(acc.Flags,0) & 33554432 = 33554432 OR ISNULL(acc.Flags,0) & 67108864 = 67108864 ) -- Voluntary Agreements --PAYEVNTEMP57 --PAYEVNTEMP115 -- Labour hire --PAYEVNTEMP48 --PAYEVNTEMP114 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = -ep.Tax --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP84' ,FieldName = 'Super Liability SGC' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.SuperSGC --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 84 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4016,4017) AND ep.SuperSGC <> 0 AND NOT ISNULL(acc.Flags,0) & 4194304 = 4194304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP111' ,FieldName = 'Reportable Super' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ReportableSuper ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 84 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ISNULL(acc.Flags,0) & 4194304 = 4194304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP61' ,FieldName = 'Exclude From OTE' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ExcludeFromOTE --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 61 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ISNULL(acc.Flags,0) & 33554432 = 33554432 AND ep.ExcludeFromOTE <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Car --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109301 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Trans --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109302 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Laundry --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109303 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Meals --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109304 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Travel --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109305 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Other --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109306 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109306 /* INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP223' ,FieldName = 'Payee Total FEI PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = NULL --,PayCodeDesc = acc.Description ,Amount = ep.ForeignWithholding ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 223 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 */ INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP125' ,FieldName = 'Payee FBT Taxable' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.FBTTaxable --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 125 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID AND ep.FBTTaxable <> 0 INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.Account_AccountID WHERE se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP126' ,FieldName = 'Payee FBT Exempt' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = NULL --,PayCodeDesc = acc.Description ,Amount = ep.FBTNonTaxable --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 126 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID AND ep.FBTNonTaxable <> 0 INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP87' ,FieldName = 'Payee Deduction' ,subFieldName = 'Giving' ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.DeductWorkPlaceGiving --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 87 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP87' ,FieldName = 'Payee Deduction' ,subFieldName = 'Union Fees' ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.DeductUnionFees --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 87 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP49' ,FieldName = 'Payee Exempt Foreign Income' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ExemptForeignEmploymentIncome--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 49 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP60' ,FieldName = 'Payee CDEP Payment' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.CommunityDevelopmentEmploymentProject--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 60 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 -- PAYEVNTEMP112 -- This is the value, during the relevant period, for the amount withheld under the Pay As You Go (PAYG) arrangement. --PAYEVNTEMP132 -- PAYEVNTEMP237 --This is a year to date credit available to a taxpayer who received foreign income that is taxable in Australia and for which they paid (or are taken to have paid) foreign tax. This amount includes credits for foreign source capital gains. INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP237' ,FieldName = 'Foreign Withholding Tax' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = -ep.ForeignWithholding--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 237 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 -- Dividends INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP47' ,FieldName = 'Gross Payments' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Dividend' --,PayCodeDesc = acc.Description ,Amount = ep.Wages ,AmountYTD = ytd.Wages ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.Wages <> 0 WHERE ep.Wages <> 0 AND ep.IsDividend = 1 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'PAYG withheld from Dividend' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.TAX ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.Wages <> 0 WHERE ep.Wages <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP52' ,FieldName = 'Payee Lump Sum A' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum A' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumA ,AmountYTD = ytd.LumpSumA ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumA <> 0 WHERE ep.LumpSumA <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum A' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumA <> 0 WHERE ep.LumpSumA <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP52' ,FieldName = 'Payee Lump Sum AT' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum AT' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumAT ,AmountYTD = ytd.LumpSumAT ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumAT <> 0 WHERE ep.LumpSumAT <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum AT' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumAT <> 0 WHERE ep.LumpSumAT <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP54' ,FieldName = 'Payee Lump Sum B' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee Lump Sum B' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumB ,AmountYTD = ytd.LumpSumB ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 54 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumB <> 0 WHERE ep.LumpSumB <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum B' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 54 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumB <> 0 WHERE ep.LumpSumB <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP55' ,FieldName = 'Payee Lump Sum D' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum D' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumD ,AmountYTD = ytd.LumpSumD ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 55 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumD <> 0 WHERE ep.LumpSumD <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum D' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 55 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumD <> 0 WHERE ep.LumpSumD <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP56' ,FieldName = 'Payee Lump Sum E' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum E' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumE ,AmountYTD = ytd.LumpSumE ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 56 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumE <> 0 WHERE ep.LumpSumE <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax Withheld Lump Sum E' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 56 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumE <> 0 WHERE ep.LumpSumE <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP84' ,FieldName = 'Super Liability Amount' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Superannuation' --,PayCodeDesc = acc.Description ,Amount = ep.SuperSGC ,AmountYTD = ytd.SuperSGC ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 78 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.SuperSGC <> 0 WHERE ep.SuperSGC <> 0 AND ep.IsDividend = 1 -- ETP INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP51' ,FieldName = 'Payee ETP Taxable' ,subFieldName = ep.ETPCode ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP Taxable' --,PayCodeDesc = acc.Description ,Amount = ep.ETPTaxable ,AmountYTD = ytd.ETPTaxable ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 51 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND Ytd.ETPTaxable <> 0 WHERE ep.ETPTaxable <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP50' ,FieldName = 'Payee ETP Tax Free' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP Tax Free' --,PayCodeDesc = acc.Description ,Amount = ep.ETPNonTaxable ,AmountYTD = ytd.ETPNonTaxable ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 50 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.ETPNonTaxable <> 0 WHERE ep.ETPNonTaxable <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP117' ,FieldName = 'Payee ETP PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP PAYGW' --,PayCodeDesc = acc.Description ,Amount = -ep.ETPTax ,AmountYTD = -ytd.ETPTax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.ETPTax <> 0 WHERE ep.ETPTax <> 0 Select *, BMSId = @BMSId FROM @STP_RESULTS WHERE ((@BatchID IS NULL) OR (BatchID = @BatchID)) ORder By EntryID,EmployeeId,DisplayOrder /* Select dbo.uFnAccountDescription (Account_AccountID),* FROM @SubEntry Select * FROM @EmpPayments */ END SET NOCOUNT OFF SET ANSI_WARNINGS ON GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_EmployeePaymentDetail TO [insol2_users] GO --VSTS 1277 Update Lookup Set Tag = '41' Where LookupID = 300016 Go SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].uFnXMLEncode') AND xtype IN (N'FN',N'IF',N'TF')) DROP FUNCTION [dbo].uFnXMLEncode GO CREATE FUNCTION dbo.uFnXMLEncode (@TextToReplace NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS BEGIN /* Author: Stewart McLeod Date: 8 Apr 2009 Purpose: Find and Replace for Notes: Revision History: 27/10/2018 - Si - Added ASCII Extended CHARS 128 through to 255 Select ASCII('?') Select Char(8226) Select ASCII('É') Select ASCII('é') Select ASCII('c') Select dbo.uFnXMLEncode ('É') Select dbo.uFnXMLEncode ('é') Select dbo.uFnXMLEncode ('Ç') Select dbo.uFnXMLEncode ('&') Select char(37) administrator's */ -- DECALRE VARIABLES SELECT @TextToReplace = @TextToReplace COLLATE Latin1_General_BIN DECLARE @RESULT NVARCHAR(4000) /* SELECT @RESULT = REPLACE( @TextToReplace ,CHAR(128),CHAR(63) ) -- € to ? */ SELECT @RESULT = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( @TextToReplace COLLATE Latin1_General_BIN ,CHAR(37),'%') -- % to % COLLATE Latin1_General_BIN ,CHAR(38),'&') -- & to & COLLATE Latin1_General_BIN ,CHAR(60),'<') -- < to < COLLATE Latin1_General_BIN ,CHAR(62),'>') -- > to > COLLATE Latin1_General_BIN ,CHAR(128),CHAR(63)) -- € to ? COLLATE Latin1_General_BIN ,CHAR(129),CHAR(32)) -- to COLLATE Latin1_General_BIN ,CHAR(130),CHAR(44)) -- ‚ to , COLLATE Latin1_General_BIN ,CHAR(131),CHAR(102)) -- ƒ to f COLLATE Latin1_General_BIN ,CHAR(132),CHAR(44)) -- „ to , COLLATE Latin1_General_BIN ,CHAR(133),CHAR(95)) -- … to _ COLLATE Latin1_General_BIN ,CHAR(134),CHAR(63)) -- † to ? COLLATE Latin1_General_BIN ,CHAR(135),CHAR(63)) -- ‡ to ? COLLATE Latin1_General_BIN ,CHAR(136),CHAR(94)) -- ˆ to ^ COLLATE Latin1_General_BIN ,CHAR(137),CHAR(37)) -- ‰ to % COLLATE Latin1_General_BIN ,CHAR(138),CHAR(83)) -- Š to S COLLATE Latin1_General_BIN ,CHAR(139),CHAR(60)) -- ‹ to < COLLATE Latin1_General_BIN ,CHAR(140),'Oe') -- Œ to ? COLLATE Latin1_General_BIN ,CHAR(141),CHAR(32)) -- to COLLATE Latin1_General_BIN ,CHAR(142),CHAR(90)) -- Ž to Z COLLATE Latin1_General_BIN ,CHAR(143),CHAR(32)) -- to COLLATE Latin1_General_BIN ,CHAR(144),CHAR(32)) -- to COLLATE Latin1_General_BIN ,CHAR(145),CHAR(39)) -- ‘ to ' COLLATE Latin1_General_BIN ,CHAR(146),CHAR(39)) -- ’ to ' COLLATE Latin1_General_BIN ,CHAR(147),CHAR(34)) -- “ to " COLLATE Latin1_General_BIN ,CHAR(148),CHAR(34)) -- ” to " COLLATE Latin1_General_BIN ,CHAR(149),CHAR(45)) -- • to - COLLATE Latin1_General_BIN ,CHAR(150),CHAR(45)) -- – to - COLLATE Latin1_General_BIN ,CHAR(151),CHAR(45)) -- — to - COLLATE Latin1_General_BIN ,CHAR(152),CHAR(126)) -- ˜ to ~ COLLATE Latin1_General_BIN ,CHAR(153),CHAR(63)) -- ™ to ? COLLATE Latin1_General_BIN ,CHAR(154),CHAR(115)) -- š to s COLLATE Latin1_General_BIN ,CHAR(155),CHAR(62)) -- › to > COLLATE Latin1_General_BIN ,CHAR(156),'oe') -- œ to o CHAR(111) COLLATE Latin1_General_BIN ,CHAR(157),CHAR(32)) -- to COLLATE Latin1_General_BIN ,CHAR(158),CHAR(122)) -- ž to z COLLATE Latin1_General_BIN ,CHAR(159),CHAR(89)) -- Ÿ to Y COLLATE Latin1_General_BIN ,CHAR(160),CHAR(32)) --   to COLLATE Latin1_General_BIN ,CHAR(161),CHAR(105)) -- ¡ to i COLLATE Latin1_General_BIN ,CHAR(162),CHAR(99)) -- ¢ to c COLLATE Latin1_General_BIN ,CHAR(163),CHAR(63)) -- £ to ? COLLATE Latin1_General_BIN ,CHAR(164),CHAR(63)) -- ¤ to ? COLLATE Latin1_General_BIN ,CHAR(165),CHAR(63)) -- ¥ to ? COLLATE Latin1_General_BIN ,CHAR(166),CHAR(124)) -- ¦ to | COLLATE Latin1_General_BIN ,CHAR(167),CHAR(63)) -- § to ? COLLATE Latin1_General_BIN ,CHAR(168),CHAR(63)) -- ¨ to ? COLLATE Latin1_General_BIN ,CHAR(169),CHAR(63)) -- © to ? COLLATE Latin1_General_BIN ,CHAR(170),CHAR(63)) -- ª to ? COLLATE Latin1_General_BIN ,CHAR(171),CHAR(60)) -- « to < COLLATE Latin1_General_BIN ,CHAR(172),CHAR(63)) -- ¬ to ? COLLATE Latin1_General_BIN ,CHAR(173),CHAR(45)) -- ­ to - COLLATE Latin1_General_BIN ,CHAR(174),CHAR(63)) -- ® to ? COLLATE Latin1_General_BIN ,CHAR(175),CHAR(63)) -- ¯ to ? COLLATE Latin1_General_BIN ,CHAR(176),CHAR(63)) -- ° to ? COLLATE Latin1_General_BIN ,CHAR(177),CHAR(63)) -- ± to ? COLLATE Latin1_General_BIN ,CHAR(178),CHAR(50)) -- ² to 2 COLLATE Latin1_General_BIN ,CHAR(179),CHAR(51)) -- ³ to 3 COLLATE Latin1_General_BIN ,CHAR(180),CHAR(39)) -- ´ to ' COLLATE Latin1_General_BIN ,CHAR(181),CHAR(117)) -- µ to u COLLATE Latin1_General_BIN ,CHAR(182),CHAR(63)) -- ¶ to ? COLLATE Latin1_General_BIN ,CHAR(183),CHAR(63)) -- · to ? COLLATE Latin1_General_BIN ,CHAR(184),CHAR(44)) -- ¸ to , COLLATE Latin1_General_BIN ,CHAR(185),CHAR(49)) -- ¹ to 1 COLLATE Latin1_General_BIN ,CHAR(186),CHAR(63)) -- º to ? COLLATE Latin1_General_BIN ,CHAR(187),CHAR(62)) -- » to > COLLATE Latin1_General_BIN ,CHAR(188),CHAR(63)) -- ¼ to ? COLLATE Latin1_General_BIN ,CHAR(189),CHAR(63)) -- ½ to ? COLLATE Latin1_General_BIN ,CHAR(190),CHAR(63)) -- ¾ to ? COLLATE Latin1_General_BIN ,CHAR(191),CHAR(63)) -- ¿ to ? COLLATE Latin1_General_BIN ,CHAR(192),CHAR(65)) -- À to A COLLATE Latin1_General_BIN ,CHAR(193),CHAR(65)) -- Á to A COLLATE Latin1_General_BIN ,CHAR(194),CHAR(65)) --  to A COLLATE Latin1_General_BIN ,CHAR(195),CHAR(65)) -- à to A COLLATE Latin1_General_BIN ,CHAR(196),CHAR(65)) -- Ä to A COLLATE Latin1_General_BIN ,CHAR(197),CHAR(65)) -- Å to A COLLATE Latin1_General_BIN ,'Æ' ,'Ae') -- Æ to A COLLATE Latin1_General_BIN ,CHAR(199),CHAR(67)) -- Ç to C COLLATE Latin1_General_BIN ,CHAR(200),CHAR(69)) -- È to E COLLATE Latin1_General_BIN ,CHAR(201),CHAR(69)) -- É to E COLLATE Latin1_General_BIN ,CHAR(202),CHAR(69)) -- Ê to E COLLATE Latin1_General_BIN ,CHAR(203),CHAR(69)) -- Ë to E COLLATE Latin1_General_BIN ,CHAR(204),CHAR(73)) -- Ì to I COLLATE Latin1_General_BIN ,CHAR(205),CHAR(73)) -- Í to I COLLATE Latin1_General_BIN ,CHAR(206),CHAR(73)) -- Î to I COLLATE Latin1_General_BIN ,CHAR(207),CHAR(73)) -- Ï to I COLLATE Latin1_General_BIN ,CHAR(208),CHAR(68)) -- Ð to D COLLATE Latin1_General_BIN ,CHAR(209),CHAR(78)) -- Ñ to N COLLATE Latin1_General_BIN ,CHAR(210),CHAR(79)) -- Ò to O COLLATE Latin1_General_BIN ,CHAR(211),CHAR(79)) -- Ó to O COLLATE Latin1_General_BIN ,CHAR(212),CHAR(79)) -- Ô to O COLLATE Latin1_General_BIN ,CHAR(213),CHAR(79)) -- Õ to O COLLATE Latin1_General_BIN ,CHAR(214),CHAR(79)) -- Ö to O COLLATE Latin1_General_BIN ,CHAR(215),CHAR(120)) -- × to x COLLATE Latin1_General_BIN ,CHAR(216),CHAR(63)) -- Ø to ? COLLATE Latin1_General_BIN ,CHAR(217),CHAR(85)) -- Ù to U COLLATE Latin1_General_BIN ,CHAR(218),CHAR(85)) -- Ú to U COLLATE Latin1_General_BIN ,CHAR(219),CHAR(85)) -- Û to U COLLATE Latin1_General_BIN ,CHAR(220),CHAR(85)) -- Ü to U COLLATE Latin1_General_BIN ,CHAR(221),CHAR(89)) -- Ý to Y COLLATE Latin1_General_BIN ,CHAR(222),'th') -- Þ to ? COLLATE Latin1_General_BIN ,CHAR(223),'ss') -- ß to ? COLLATE Latin1_General_BIN ,CHAR(224),CHAR(97)) -- à to a COLLATE Latin1_General_BIN ,CHAR(225),CHAR(97)) -- á to a COLLATE Latin1_General_BIN ,CHAR(226),CHAR(97)) -- â to a COLLATE Latin1_General_BIN ,CHAR(227),CHAR(97)) -- ã to a COLLATE Latin1_General_BIN ,CHAR(228),CHAR(97)) -- ä to a COLLATE Latin1_General_BIN ,CHAR(229),CHAR(97)) -- å to a COLLATE Latin1_General_BIN ,'æ','ae') -- æ to a CHAR(97) COLLATE Latin1_General_BIN ,CHAR(231),CHAR(99)) -- ç to c COLLATE Latin1_General_BIN ,CHAR(232),CHAR(101)) -- è to e COLLATE Latin1_General_BIN ,CHAR(233),CHAR(101)) -- é to e COLLATE Latin1_General_BIN ,CHAR(234),CHAR(101)) -- ê to e COLLATE Latin1_General_BIN ,CHAR(235),CHAR(101)) -- ë to e COLLATE Latin1_General_BIN ,CHAR(236),CHAR(105)) -- ì to i COLLATE Latin1_General_BIN ,CHAR(237),CHAR(105)) -- í to i COLLATE Latin1_General_BIN ,CHAR(238),CHAR(105)) -- î to i COLLATE Latin1_General_BIN ,CHAR(239),CHAR(105)) -- ï to i COLLATE Latin1_General_BIN ,CHAR(240),CHAR(111)) -- ð to o COLLATE Latin1_General_BIN ,CHAR(241),CHAR(110)) -- ñ to n COLLATE Latin1_General_BIN ,CHAR(242),CHAR(111)) -- ò to o COLLATE Latin1_General_BIN ,CHAR(243),CHAR(111)) -- ó to o COLLATE Latin1_General_BIN ,CHAR(244),CHAR(111)) -- ô to o COLLATE Latin1_General_BIN ,CHAR(245),CHAR(111)) -- õ to o COLLATE Latin1_General_BIN ,CHAR(246),CHAR(111)) -- ö to o COLLATE Latin1_General_BIN ,CHAR(247),CHAR(47)) -- ÷ to / COLLATE Latin1_General_BIN ,CHAR(248),CHAR(63)) -- ø to ? COLLATE Latin1_General_BIN ,CHAR(249),CHAR(117)) -- ù to u COLLATE Latin1_General_BIN ,CHAR(250),CHAR(117)) -- ú to u COLLATE Latin1_General_BIN ,CHAR(251),CHAR(117)) -- û to u COLLATE Latin1_General_BIN ,CHAR(252),CHAR(117)) -- ü to u COLLATE Latin1_General_BIN ,CHAR(253),CHAR(121)) -- ý to y COLLATE Latin1_General_BIN ,CHAR(254),'Th') -- þ to ? COLLATE Latin1_General_BIN ,CHAR(255),CHAR(121)) -- ÿ to y RETURN @RESULT END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].uFnXMLEncode TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=11142, @BatchID=23329, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission /* Exec dbo.repsp_STP @AdminID=11607, @BatchID=151932, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND se.EntryDate >= @PPSTARTDATE AND se.EntryDate <= @PPENDDATE END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID LEFT OUTER JOIN dbo.Transfer t ON t.BatchID = b.BatchID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID AND IsNull(t.Flags,0) & 4096 = 0 Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=7581, @BatchID=22675, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO IF NOT EXISTS (SELECT * FROM Lookup WHERE LookupID = 2000030) INSERT INTO [dbo].[Lookup] ([LookupID] ,[LookupListID] ,[Description] ,[Data] ,[Tag] ,[Flag] ,[CreatedDate] ,[CreatedBy] ,[UpdatedDate] ,[UpdatedBy] ,[TS]) VALUES (2000030 ,200000 ,'Tax File Number' ,'Tax Information' ,NULL ,2136571429 ,getdate() ,'admin' ,getdate() ,'admin' ,newid() ) GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO If exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[websp_CreditorCreateXML]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].websp_CreditorCreateXML GO If not (exists (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'PageData')) BEGIN RAISERROR ('pageData Type is required',16,1) /****** Object: UserDefinedTableType [dbo].[PageData] Script Date: 4/7/2017 9:28:10 AM *****/ /* CREATE TYPE [dbo].[PageData] AS TABLE( [ID] [int] IDENTITY(1,1) NOT NULL, [ObjectID] [int] NOT NULL, PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO */ END GO CREATE PROCEDURE dbo.websp_CreditorCreateXML @PageData PageData READONLY ,@AdminID Int = Null ,@UserID Int ,@CreateWebRequest Bit = 0 ,@IsDelayedRequest Int = 0 ,@RequestGroupUID UniqueIdentifier = Null --Provide this if you want to create a delayed Web request, otherwise one will be generated and the request made immediately. /* -- ******************************************************** PURPOSE Output Creditor XML to web DATE 14/08/2015 REVISION JO 14/08/2015 added RPM 10/05/2017 counterparty bankdetails, and creditor bankdetails (if they exist and Admin.AdminSetting(7000005) Exists RPM 29/08/2017 Include Creditor.WebFlag in payload RPM 05/09/2017 remove IIF for 2008 'late bloomers' RPM 02/10/2017 include creditor contact or counterparty email RPM 19/10/2017 Creditor recipients included as Additional contacts RPM 51/05/2018 Creditor TS, IsRelated, Flags, HardCopy added RPM 51/05/2018 CreditorContact 1 if creditor has contact, 0 if counterparty contact RPM 27/06/2018 change FDATA convert to 4 decimal points, convert(varchar,cpd.FData) converts 1234567.891 to 1.23457e+006 i.e. loses accuracy RPM 24/07/2017 CP Contacts added as Admin users to portal for CP RPM 03/08/2018 Bankdetails Employee RPM 22/08/2018 Enable Email Communication only if Green Tick enabled RPM 27/09/2019 DO NOT include bank data of TFN TODO - TODO if TFN supplied- add "TFN HELD" NODE - update pUID if Parent is supplied from Portal - after merging: ISNULL(cp.MUID,cp.[UID]) - EmailNotices = CASE --OZ WHEN ISNULL(num.Flags,0) = 1 THEN 'YES' ELSE 'No' END ,EmailNotices = CASE --UK WHEN ISNULL(cr.Flags,1024) = 1024 THEN 'YES (Actual)' WHEN ISNULL(cr.Flags,128) = 128 THEN 'YES (Deemed)' WHEN ISNULL(cr.Flags,512) = 512 THEN 'No (Revoked)' ELSE 'No' END - add a tmpTable to hold BankDetails (Counterparty and Creditor), only include if Admin.AdminSetting(7000005) Exists - add Employee bankdetails (if any) --TEST Declare @PageData As dbo.PageData --Get the Creditor data INSERT INTO @PageData (ObjectID) SELECT CreditorID FROM dbo.Creditor WHERE AdminID = 2298 ORDER BY CreditorID exec websp_CreditorCreateXML @PageData=@PageData, @UserID=1019,@CreateWebRequest=1, @IsDelayedRequest=1, @RequestGroupUID = '7668FE88-A546-4345-A97B-F190BE6ADEE7' Select * From TransferWebRequest Where RequestGroupUID = '7668FE88-A546-4345-A97B-F190BE6ADEE7' Select wr.* From TransferWebRequestWatch ww inner join TransferWebRequest wr on ww.RequestGroupUID = wr.RequestGroupUID WHERE wr.RequestGroupUID = '7668FE88-A546-4345-A97B-F190BE6ADEE7' */ AS SET NOCOUNT ON DECLARE @PageSize Int = IsNull((SELECT Convert (Int, Setting) FROM dbo.ApplicationSetting Where SettingID = 2005030), 40) DECLARE @PageCount Int DECLARE @ThisPage Int = 1 DECLARE @RecordCount Int DECLARE @Pages Int DECLARE @BodyXML XML DECLARE @Error Int = 0 DECLARE @Ret Int DECLARE @SysLoc Int = dbo.ufnSystemLocation() DECLARE @SuppressTxt nvarchar(70) = 'Name and address suppressed' DECLARE @TFNDescription varchar(250) = 'Tax File Number' DECLARE @CPEMP TABLE ( CreditorId INT ,CounterpartyId INT ,EmployeeId INT ,CPEMP_UID UNIQUEIDENTIFIER ) DECLARE @ContactEmails TABLE ( [CreditorID] Int NULL ,NumberID INT ,CounterpartyID INT ,EmployeeId INT ,ContactID int ,[FirstName] NVARCHAR(200) NULL ,[LastName] NVARCHAR(200) NULL ,[Email] NVARCHAR(200) NULL ,[EmailNotices] NVARCHAR(100) NULL ,Flags Int ,Additional Int ,CreditorContact Int ) DECLARE @BankData TABLE ( [CounterpartyID] [int] NULL, [EmployeeID] [int] NULL, [AdminID] [int] NULL, [CreditorID] [int] NULL, [AccountID] [int] NULL, [Field_LookupID] [int] NOT NULL, [SubType] [int] NULL, [Flags] [int] NULL, [Data] [nvarchar](200) NULL, [FData] [float] NULL, [DData] [datetime] NULL UNIQUE NONCLUSTERED ([CounterpartyID], [Field_LookupID], [CreditorID]) ) IF @RequestGroupUID Is Null SET @RequestGroupUID = NewID() SELECT @RecordCount = Count(*) FROM @PageData SET @PageCount = @RecordCount / @PageSize IF @RecordCount > 0 AND @PageCount = 0 SET @PageCount = 1 IF @RecordCount > (@PageCount * @PageSize) SET @PageCount = @PageCount + 1 INSERT INTO @CPEMP ( CreditorId ,CounterpartyId ,EmployeeId ) SELECT c.CreditorID ,c.CounterpartyID ,c.EmployeeID FROM dbo.Creditor c INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID UPDATE @CPEMP SET CPEMP_UID = e.[UID] FROM @CPEMP tmp INNER JOIN Employee e ON tmp.EmployeeId=e.EmployeeID UPDATE @CPEMP SET CPEMP_UID = CASE WHEN ((cp.PMUID IS NOT NULL)) THEN cp.MUID WHEN ((cp.PMUID IS NULL) AND (cp.MUID IS NOT NULL)) THEN cp.MUID ELSE cp.[UID] END FROM @CPEMP tmp INNER JOIN dbo.Counterparty cp ON tmp.CounterpartyID=cp.CounterpartyID; --POPULATE CONTACT DETAILS INSERT INTO @ContactEmails ( [CreditorID] ,CounterpartyID ,EmployeeId ,Flags ,CreditorContact ) SELECT c.CreditorID ,c.CounterpartyID ,c.EmployeeID ,c.Flags ,0 FROM dbo.Admin a INNER JOIN dbo.Creditor c ON a.AdminID = c.AdminID INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID --DEBUG SELECT @@ROWCOUNT as CreditorEmails; select * from @ContactEmails --Creditor Counterparty Emails - no Contact specified UPDATE @ContactEmails SET Email = em.Number ,Additional=0 FROM @ContactEmails ce inner join Creditor cr on ce.CreditorID=cr.CreditorID inner join Counterparty c on cr.CounterpartyID=c.CounterpartyID inner join Counterparty_Number cn on c.CounterpartyID=cn.CounterpartyID inner join Number em on cn.NumberID=em.NumberID WHERE cr.ContactID IS NULL and em.NumberTypeID=4 --DEBUG SELECT @@ROWCOUNT as CreditorCounterpartyEmails; select * from @ContactEmails --Creditor Contact Emails UPDATE @ContactEmails SET Email = ISNULL(em.Number,ce.Email) -- if the contact doesn't have an email use the CP email ,FirstName =con.FirstName ,LastName = con.LastName ,ContactID = con.ContactID ,Additional=0 ,CreditorContact=1 FROM @ContactEmails ce inner join Creditor cr on ce.CreditorID=cr.CreditorID inner join Contact con on cr.ContactID=con.ContactID inner join Contact_Number cn on con.ContactID=cn.ContactID inner join Number em on cn.NumberID=em.NumberID WHERE cr.ContactID IS NOT NULL and em.NumberTypeID=4; --DEBUG SELECT @@ROWCOUNT as CreditorContactsContacts; select * from @ContactEmails INSERT INTO @ContactEmails ( [CreditorID] ,CounterpartyID ,EmployeeId ,Flags ,Email ,FirstName ,LastName ,ContactID ,Additional ) SELECT DISTINCT c.CreditorID ,c.CounterpartyID ,c.EmployeeID ,c.Flags ,n.Number ,con.FirstName ,con.LastName ,con.ContactID ,1 FROM dbo.Admin a INNER JOIN dbo.Creditor c ON a.AdminID = c.AdminID INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID INNER JOIN dbo.Creditor_Contact cc ON cc.CreditorID = c.CreditorID INNER JOIN dbo.Contact con ON con.ContactID = cc.ContactID INNER JOIN dbo.Contact_Number cn ON cn.ContactID = con.ContactID INNER JOIN dbo.Number n ON n.NumberID = cn.NumberID AND n.NumberTypeID = 4 WHERE n.Number is not null and n.Number not in (select DISTINCT EMAIL from @ContactEmails c WHERE c.EMAIL is not null) and ISNULL(n.Flags,0)&1=1;--Enable Email Communication Green Tick --Employee Emails INSERT INTO @ContactEmails ( [CreditorID] ,CounterpartyID ,EmployeeId ,Flags ,Email ,FirstName ,LastName ,ContactID ,Additional ) SELECT DISTINCT c.CreditorID ,c.CounterpartyID ,c.EmployeeID ,c.Flags ,n.Number ,e.FirstName ,e.LastName ,NULL ,0 FROM dbo.Admin a INNER JOIN dbo.Creditor c ON a.AdminID = c.AdminID INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.Employee_Number en ON e.EmployeeID=en.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID AND n.NumberTypeID = 4 WHERE n.Number is not null and n.Number not in (select DISTINCT EMAIL from @ContactEmails c WHERE c.EMAIL is not null) --select * from @ContactEmails ---------------------------------------------------Bank Accounts - Counterparty INSERT INTO @BankData (Field_LookupID, [Data], [CreditorID], CounterpartyID, AdminID) SELECT cpd.[Field_LookupID],cpd.[Data], c.[CreditorID], c.CounterpartyID, cpd.AdminID FROM @PageData pd INNER JOIN dbo.Creditor c ON pd.ObjectID = c.CreditorID INNER JOIN dbo.AdminSetting ads ON ads.AdminID = c.AdminID INNER JOIN dbo.CounterpartyData cpd ON c.CounterpartyID = cpd.CounterpartyID --Counterparty only not employee INNER JOIN dbo.Lookup l ON l.LookupID = cpd.Field_LookupID WHERE l.LookupListID = 120000 --Bankdetails only AND ads.SettingID = 7000005 AND (cpd.AdminID is null); -- counterparty bankdetails only - creditor handled in XML. --DEBUG select '1' as title, * from @BankData; ---------------------------------------------------Bank Accounts - Employee --BSB INSERT INTO @BankData (Field_LookupID, [Data], [CreditorID], [EmployeeID]) SELECT 120101,emp.BSB, c.[CreditorID], c.[EmployeeID] FROM @PageData pd INNER JOIN dbo.Creditor c ON pd.ObjectID = c.CreditorID INNER JOIN dbo.AdminSetting ads ON ads.AdminID = c.AdminID INNER JOIN dbo.Employee emp ON c.EmployeeID=emp.EmployeeID WHERE emp.BSB IS NOT NULL AND ads.SettingID = 7000005 --DEBUG select '2' as title, * from @BankData; --AccountNo INSERT INTO @BankData (Field_LookupID, [Data], [CreditorID], [EmployeeID]) SELECT 120102,emp.AccountNo, c.[CreditorID], c.[EmployeeID] FROM @PageData pd INNER JOIN dbo.Creditor c ON pd.ObjectID = c.CreditorID INNER JOIN dbo.AdminSetting ads ON ads.AdminID = c.AdminID INNER JOIN dbo.Employee emp ON c.EmployeeID=emp.EmployeeID WHERE emp.AccountNo IS NOT NULL AND ads.SettingID = 7000005 --DEBUG select '3' as title, * from @BankData; --AccountName INSERT INTO @BankData (Field_LookupID, [Data], [CreditorID], [EmployeeID]) SELECT 120100,emp.AccountName, c.[CreditorID], c.[EmployeeID] FROM @PageData pd INNER JOIN dbo.Creditor c ON pd.ObjectID = c.CreditorID INNER JOIN dbo.AdminSetting ads ON ads.AdminID = c.AdminID INNER JOIN dbo.Employee emp ON c.EmployeeID=emp.EmployeeID WHERE emp.AccountName IS NOT NULL AND ads.SettingID = 7000005 --DEBUG select '4' as title, * from @BankData; DECLARE @Admin Table ( AdminID Int ,ShortName varchar(100) ,Name varchar(1000) ,UID UniqueIdentifier ,UploadBanking Bit UNIQUE NONCLUSTERED (AdminID) ) INSERT INTO @Admin SELECT DISTINCT a.AdminID ,a.ShortName ,a.Name ,a.UID ,IsNull (ads.AdminSettingID, 0) FROM dbo.Admin a INNER JOIN dbo.Creditor c ON c.AdminID = a.AdminID INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID LEFT OUTER JOIN dbo.AdminSetting ads ON ads.AdminID = a.AdminID AND ads.SettingID = 7000005 DECLARE @Address Table ( AdminId Int ,CreditorID Int ,AddressTypeId Int ,AddressType varchar(20) ,IsMailing varchar(5) ,AddressLine1 nvarchar(500) ,AddressLine2 nvarchar(500) ,AddressLine3 nvarchar(500) ,AddressLine4 nvarchar(500) ,City nvarchar(50) ,State nvarchar(50) ,PostCode nvarchar(50) ,Country nvarchar(100) UNIQUE NONCLUSTERED (AdminID, CreditorID) ) INSERT INTO @Address SELECT a.AdminID ,c.CreditorID ,ad.AddressTypeID ,at.Description ,CASE WHEN ad.IsMailing = 1 THEN 'true' ELSE 'false' END ,ab.AddressLine1 ,ab.AddressLine2 ,ab.AddressLine3 ,ab.AddressLine4 ,ad.City ,ad.State ,ad.PostCode ,ad.Country FROM @Admin a INNER JOIN dbo.Creditor c ON c.AdminID = a.AdminID INNER JOIN @PageData pd ON pd.ObjectID = c.CreditorID INNER JOIN dbo.Address ad ON ad.AddressID = c.AddressID INNER JOIN dbo.AddressType at ON at.AddressTypeID = ad.AddressTypeID CROSS APPLY dbo.tblfn_SplitAddressBody (ad.Address) ab DECLARE @UploadBanking Bit --Page the data WHILE @ThisPage <= @PageCount BEGIN --Build the Creditor XML SELECT @BodyXML = ( SELECT ------------------------------------------------ JobDetails ( SELECT 'JobName' = a.Name ,'JobShortName' = a.shortname ,'JobGuid' = a.UID FOR XML PATH ('JobDetails'), TYPE ) ,------------------------------------------------ Creditors ( SELECT ( SELECT 'InsolCreditorID' = c.CreditorID ,'InitialAuthCode' = c.[Password] ,'CounterpartyGUID' = cp.CPEMP_UID --,'CounterpartyMasterGUID' = cp.MUID --,'CounterpartyParentGUID' = cp.PMUID ,'CreditorUID' = c.TS ,'CreditorPortalTS' = cd.PortalTS ,'CreditorRef' = c.Reference1 ,'RATAOwing' = c.RATAOwing ,'AdvisedOwing' = c.AdvisedOwing ,'InsolCaptureReference' = c.CaptureReference ,'CreditorClassID' = c.CreditorClassID ,'ClaimMemo' = c.Memo ,'HasNoClaim' = ISNULL(c.NoClaimAdvised,0) ,'PODIsInformal' = ISNULL(c.PODIsInformal,0) ,'PODDate' = CONVERT(varchar(10),c.PODDate,105) ,'PODAmount' = ISNULL(c.PODAmount,0) ,'PODVotingAdmittedAmount' = ISNULL(c.PODVotingAdmittedAmount,0) ,'PODWithdrawn' = ISNULL(c.PODWithdrawn,0) ,'WebFlag' = ISNULL(c.WebFlags,0) ,'Flags' = ISNULL(c.Flags,0) ,'TS' = c.TS ,'IsRelated' = CASE WHEN ISNULL(c.Flags,0) & 1=1 THEN 1 ELSE 0 END ,'HardCopy' = CASE WHEN ISNULL(c.Flags,0) & 2048=2048 THEN 1 ELSE 0 END ------------------------------------------------ CreditorClaim ,( Select 'InsolCreditorClaimID' = cc.CreditorClaimID ,'RATA_SOAAmount' = cc.RATAAmount ,'AdvisedAmount' = cc.AdvisedAmount --,'PriorityAmount' = cc.PriorityAmount ,'RejectedPriorityAmount' = cc.RejectedPriorityAmount ,'ClaimedTotalAmount' = cc.ClaimedTotalAmount ,'CreditorClaimType_Key' = cc.CreditorClaimTypeID ,'RejectedPriorityAdmitted' = cc.RejectedPriorityAdmitted ,'AdmittedAmount' = cc.AdmittedAmount ,'RejectedAdmitted' = cc.RejectedAmount ,'DistributedAmount' = cc.DistributedAmount ,'GEERSAmount' = cc.GEERSAmount FROM dbo.CreditorClaim cc WHERE cc.CreditorID = c.creditorID FOR XML PATH ('CreditorClaim'), TYPE ) -------------------------------------------------- Bank Accounts ,( SELECT ( SELECT ( SELECT '@Field_LookupID' = bd.Field_LookupID ,'@Value' = bd.Data FROM @BankData bd WHERE (bd.CreditorID = c.CreditorID and bd.CounterpartyID=c.CounterpartyID) -- Counterparty or (bd.CreditorID = c.CreditorID and bd.[EmployeeID]=c.EmployeeID)--employee FOR XML PATH ('Data'), TYPE ) FOR XML PATH ('CounterPartyBankAccount'), TYPE ) ---------------------------------------------------CounterPartyBankAccount ,( SELECT ( SELECT '@Field_LookupID' = cpd.Field_LookupID ,'@Value' = cpd.Data FROM dbo.CounterpartyData cpd INNER JOIN dbo.Lookup l ON l.LookupID = cpd.Field_LookupID WHERE l.LookupListID = 120000 AND cpd.CounterpartyID = c.CounterpartyID --Counterparty only not employee AND cpd.AdminID = c.AdminID AND a.UploadBanking = 1 FOR XML PATH ('Data'), TYPE ) FOR XML PATH ('CreditorBankAccount'), TYPE ) ---------------------------------------------------CreditorBankAccount FOR XML PATH ('BankAccounts'), TYPE )---------------------------------------------------Bank Accounts ,( SELECT ( SELECT 'ClaimAccountDescription' = acc.Description from dbo.CreditorClaim cc inner join dbo.Account acc ON acc.AccountID = cc.AccountID WHERE cc.CreditorID = c.CreditorID AND acc.IsCore = 0 -- Non-standard account AND acc.AdminID = a.AdminID FOR XML PATH ('Claim'), TYPE )------------------------------------------CreditorMetadata\Claim\ClaimAccountDescription , (------------------------------------------CreditorMetadata\Address) SELECT 'PortalAddressType'=1 ,'AddressTypeID' = ad.AddressTypeID ,'AddressType' = ad.AddressType ,'IsMailing' = ad.IsMailing ,'AddressLine1' = ad.AddressLine1 ,'AddressLine2' = ad.AddressLine2 ,'AddressLine3' = ad.AddressLine3 ,'AddressLine4' = ad.AddressLine4 ,'City' = ad.City ,'State' = ad.State ,'PostCode' = ad.PostCode ,'Country' = ad.Country FROM @Address ad WHERE ad.AdminId = a.AdminID AND ad.CreditorID = c.CreditorID FOR XML PATH ('Address'), TYPE )------------------------------------------CreditorMetadata\Address) ,( SELECT ( SELECT 'LookupID' = l.LookupID ,'Tag' = l.Tag ,'Group' = l.Data ,'Name' = l.Description ,'Value' = CASE WHEN cpd.Data is not null THEN cpd.Data WHEN cpd.FData is not null THEN convert(varchar,CONVERT(DECIMAL(28,4),cpd.FData)) WHEN cpd.DData is not null THEN REPLACE(convert(varchar,cpd.DData,111), '/', '-') END --NULL FROM dbo.CounterpartyData cpd INNER JOIN dbo.Lookup l ON l.LookupID = cpd.Field_LookupID WHERE cpd.CreditorID is not null AND cpd.CreditorID = c.CreditorID AND cpd.CounterpartyID = c.CounterpartyID AND l.LookupListID = 200000 --CounterpartyData Custom Data Fields AND l.Description <> @TFNDescription -- do not post TFN FOR XML PATH ('Item'), TYPE )------------------------------------------CreditorMetadata\CreditorData\Item FOR XML PATH ('CreditorData'), TYPE ) FOR XML PATH ('CreditorMetaData'), TYPE )---------------------------------------------------CreditorMetaData , ( SELECT (------------------------------------------\Contact) SELECT 'FirstName' = c1.FirstName ,'LastName' = c1.LastName ,'Email' = c1.Email ,'EmailNotices' = c1.EmailNotices ,'Flags' = c1.Flags ,'Additional' = c1.Additional ,'CreditorContact' = c1.CreditorContact FROM @ContactEmails c1 WHERE c1.CreditorId=c.CreditorId And c1.Email IS NOT NULL FOR XML PATH ('Contact'), TYPE )------------------------------------------\Contact) FOR XML PATH ('Contacts'), TYPE )------------------------------------------\Contact) FROM dbo.Creditor c INNER JOIN dbo.CreditorData cd ON cd.CreditorID = c.CreditorID JOIN @PageData pd ON pd.ObjectID = c.CreditorID INNER JOIN @CPEMP cp ON cp.CreditorID = c.CreditorID WHERE pd.ID > ((@ThisPage * @PageSize) - @PageSize) AND pd.ID <= (@ThisPage * @PageSize) AND a.AdminID = c.AdminID FOR XML PATH ('Creditor'), TYPE ) FOR XML PATH ('Creditors'), TYPE ) FROM @Admin a FOR XML PATH ('Job'), TYPE ) If @CreateWebRequest = 1 BEGIN EXEC @Ret = dbo.websp_TransferWebRequestCreate @Type_LookupID=108230, @AdminID=@AdminID, @BodyXML=@BodyXML, @UserID=@UserID, @IsDelayedRequest=1, @RequestGroupUID=@RequestGroupUID SET @Error = @Error + @Ret END SET @ThisPage = @ThisPage + 1 END IF @CreateWebRequest = 1 AND @IsDelayedRequest = 0 AND @Error = 0 --Web request and higher level proc is not committing the request so commit here BEGIN EXEC @Ret = dbo.websp_TransferWebRequestWatchCreate @RequestGroupUID=@RequestGroupUID SET @Error = @Error + @Ret END SET NOCOUNT OFF RETURN @Error GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.websp_CreditorCreateXML TO [insol2_users] GO IF Exists(select * from sys.sysusers where name = 'insolSubscribeUser') BEGIN GRANT EXECUTE ON dbo.websp_CreditorCreateXML TO [insolSubscribeUser] END GO -- * ************ --END OF 5.3.19 Cumulative -- * ************ -- * ************ --START OF web -- * ************ SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO If not (exists (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'CreditorEntry')) BEGIN RAISERROR ('CreditorEntry Type is required',16,1) /* CREATE TYPE [dbo].[CreditorEntry] AS TABLE ( [CreditorID] int Not Null, [ControlAccountID] Int Not Null, [ClaimAccountID] Int Not Null, [Amount] Money Not Null, [TS] UniqueIdentifier Not Null ) GO */ END GO If exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[websp_ResponseCreditorClaimUpdate]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].websp_ResponseCreditorClaimUpdate GO CREATE PROCEDURE [dbo].[websp_ResponseCreditorClaimUpdate] @XML XML = Null ,@ResponseUID UniqueIdentifier = Null ,@AdminID int ,@UserName varchar(1000) = 'system' AS SET NOCOUNT ON /* -- ******************************************************** PURPOSE Process the Claim Response XML DATE 24/09/2015 REVISION SM 24/09/2015 added RPM 26/04/2017 CreditorData 'claim received' Event RPM 15/08/2017 Employee Creditor Doc added JO 13/09/2017 Add Claim row if missing. Update Claim Calc. RPM 13/09/2017 If there have been new claim rows inserted update the portal now. The Creditor is assumed to now be 'dirty'. The Insol App UI will be used to publish RPM 13/10/2017 Only send back up to portal Creditors with Nil claim freshly insertted RPM 21/11/2017 Bankdetails from portal update values RPM 17/01/2018 Update address from portal if one has been provided. RPM 02/02/2018 UpdatedBy is now @Username RPM 11/04/2018 Bankdetails from portal update Admin linked bankdetails RPM 08/08/2018 IsRelated: NULL don't change, 0/1 set/unset in portal SW 19/11/2018 Use ClassTypeId's for AccountId RPM 13/12/2018 Add more text to Creditor Event if HasNoClaim RPM 24/01/2019 Send email to Job Contact when claim updated - if Email enabled RPM 19/06/2019 Don't send email if no Job ContactEmail RPM 18/09/2019 IsRelated NULL to 1 RPM 27/09/2019 IF Insol.SWIFT is not null, delete if Payload.IBAN. If Insol.IBAN is not null, delete if Payload.SWIFT RPM 10/10/2019 TFN stored in CounterParty Custom TFN data field with CreditorId and AcccountId RPM 10/10/2019 If PODOwing and RATAOwing Amounts from Portal differ then add text to Portal Contact Email. SM 15/10/2019 UPDATE IBAN, SWIFT, BSB, Acc No logic: if iban: delete swift, accno, bsb, EFT -- ******************************************************** TODO TODO IF creditor TFN: create Lookup, group and description: Group = 'Class Action Unsecured Creditors' description = 'TFN', insert value in LookupTable with LookuipListID = 200000, Use the lookupId of that record as the Field_LookupID in the CPD table. TODO process DISPTUE:IF exists(Creditor.Claims.Flags&1=1) then (update amount, send email, do not update any thing else) DEBUG --TEST1 --delete all documents for Claim Submission then test delete from documentdata where DocumentID IN (select d.DocumentID from Document d where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F')) delete from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F') select * from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F') declare @XML XML = '1.02Creditor UpdatePASSED1191F144-D0E6-4467-9065-2039571954DA2017-03-23 07:03:571082322017-03-23 07:03:57martinrj30@yahoo.com.auen-GBExaltInsolvency76DA2CCB-49B0-4278-B092-2CD74F292053A75420FB-12EB-414D-A5E5-7BF79FB15917AAA_TEST299516AD12E02-D180-468C-A85D-060BEF573997063290.58002017-03-232AAAAAAAAFKs=22634840063290.5800https://insolvencyweb.azurewebsites.net75DFC541-6180-4905-95D2-356C72E6D664test1txt2/I/Doc/Index/75DFC541-6180-4905-95D2-356C72E6D6642017-03-23 07:02:41AAAAAAAAFKY=620D8321-8400-4698-9B8E-05A6B3CD908FProofOfDebt_445_20170323T070354pdf3/I/Doc/Index/620D8321-8400-4698-9B8E-05A6B3CD908F2017-03-23 07:03:56AAAAAAAAFKw=' EXEC websp_ResponseCreditorClaimUpdate @XML,NULL,1001,'web admin' select * from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F') --TEST2 --delete 1 document for Claim Submission then test delete from documentdata where DocumentID IN (select d.DocumentID from Document d where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664')) delete from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664') select * from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F') declare @XML XML = '1.02Creditor UpdatePASSED1191F144-D0E6-4467-9065-2039571954DA2017-03-23 07:03:571082322017-03-23 07:03:57martinrj30@yahoo.com.auen-GBExaltInsolvency76DA2CCB-49B0-4278-B092-2CD74F292053A75420FB-12EB-414D-A5E5-7BF79FB15917AAA_TEST299516AD12E02-D180-468C-A85D-060BEF573997063290.58002017-03-232AAAAAAAAFKs=22634840063290.5800https://insolvencyweb.azurewebsites.net75DFC541-6180-4905-95D2-356C72E6D664test1txt2/I/Doc/Index/75DFC541-6180-4905-95D2-356C72E6D6642017-03-23 07:02:41AAAAAAAAFKY=620D8321-8400-4698-9B8E-05A6B3CD908FProofOfDebt_445_20170323T070354pdf3/I/Doc/Index/620D8321-8400-4698-9B8E-05A6B3CD908F2017-03-23 07:03:56AAAAAAAAFKw=' EXEC websp_ResponseCreditorClaimUpdate @XML,NULL,1001,'web admin' select * from Document where [UID] in ('75DFC541-6180-4905-95D2-356C72E6D664','620D8321-8400-4698-9B8E-05A6B3CD908F') --TEST3 EXEC websp_ResponseCreditorClaimUpdate @ResponseID = 171 SELECT @XML as XmlToProcess; */ IF @XML IS NULL Select @XML = twr.Data FROM dbo.TransferWebResponse twr WHERE ResponseUID = @ResponseUID SET NOCOUNT ON --DEBUG SELECT @XML as XmlToProcess; -- VARS DECLARE @ContactData As dbo.Contact ,@rowsAffected int = 0 ,@claimsRefreshToPortal int =0 ,@BLookupListID int = 120000 ,@BSB_LookupID int = 120101 ,@AccNo_LookupID int = 120102 ,@IBANLookupID int = 120103 ,@SWIFTLookupID int = 120104 ,@EFTMethodLookupID int = 120150 ,@TFN nvarchar(200) ,@TFNLookupListID int = 200000 ,@TFNClaimAccountID int ,@CounterpartyDataID int ,@TFNCreditorID int ,@TFNCounterpartyID int ,@TFN_Field_LookupID int ,@TFNTS UniqueIdentifier = newid() ,@TFNRC int ,@TFNDescription varchar(250) = 'Tax File Number' ,@TFNData varchar(1000) = 'CreditorData' ,@TFNFlag int = CONVERT(INT, RAND()*2147483647) ,@TFNCreatedDate datetime = SysDateTime() ,@TFNCreatedBy varchar(75) = 'svc' ,@TFNUpdatedDate datetime = SysDateTime() ,@TFNUpdatedBy varchar(75)= 'svc' ; DECLARE @Creditor TABLE ( CreditorID int ,CounterpartyUID UniqueIdentifier ,EmployeeUID UniqueIdentifier ,PODIsInformal bit ,Comments varchar(2000) ,PODAmount Money ,RATAAmount Money ,PODDate Datetime ,WebFlags int ,IsRelated int ,HasNoClaim int ,PortalTS UniqueIdentifier ,TFN nvarchar(200) ,Differ Int ) DECLARE @CreditorClaim TABLE ( CreditorID int ,CreditorClaimID int ,CreditorClaimTypeID int ,ClaimAccountID Int ,ControlAccountID Int ,ClaimedAmount Money ,ClaimedTaxAmount Money ,ClaimedNettAmount Money ,ExClaimedAmount Money ,Delta Money ,NoExClaim Bit ,OrigClaimedAmount Money ) DECLARE @CreditorDocs TABLE ( RowId int IDENTITY ,CreditorID int ,CounterpartyUID UniqueIdentifier ,CounterpartyID int ,EmployeeUID UNIQUEIDENTIFIER ,EmployeeID int ,DocRootPath varchar(1000) ,DocGuid UniqueIdentifier ,DocName varchar(1000) ,Extension varchar(50) ,DocType int ,DocUrl varchar(1000) ,CreatedDate Datetime ) DECLARE @Bankdetails TABLE ( CreditorID int ,CounterpartyID int ,LookupListID int ,[Data] nvarchar(200) ) DECLARE @TaxRate float DECLARE @Error Int -- default tax rate Select @TaxRate = .10 -- address update details - counterparty mailing address DECLARE @CreditorAddress TABLE ( RowId int IDENTITY ,CreditorID int ,CounterpartyUID UniqueIdentifier ,AddressID Int ,AddressTypeID Int ,IsMailing Bit ,[Address] nVarChar(500) Null ,City nVarChar(50) Null ,State nVarChar(50) Null ,PostCode nVarChar(50) Null ,Country nVarChar(100) Null ,UpdatedBy VarChar(75) ,[TS] UniqueIdentifier Null ) -- Determine if it's a new response -- EXTRACT DATA FROM THE Passed XML INSERT INTO @Creditor ( CreditorID ,CounterpartyUID ,EmployeeUID ,PODIsInformal ,Comments ,PODAmount ,RATAAmount ,PODDate ,PortalTS ,IsRelated ,HasNoClaim ,TFN ) SELECT CreditorID = c.value('(CreditorID/text())[1]', 'int') ,CounterpartyUID = c.value('(CounterpartyUID/text())[1]', 'UNIQUEIDENTIFIER') ,EmployeeUID = c.value('(EmployeeUID/text())[1]', 'UNIQUEIDENTIFIER') ,PODIsInformal = c.value('(PODIsInformal/text())[1]', 'bit') ,Comments = c.value('(Comments/text())[1]', 'varchar(2000)') ,PODAmount = c.value('(PODOwing/text())[1]', 'Money') ,RATAAmount = c.value('(RATAOwing/text())[1]', 'Money') ,PODDate = c.value('(PODDate/text())[1]', 'DATETIME') ,PortalTS = c.value('(PortalTS/text())[1]', 'UNIQUEIDENTIFIER') ,IsRelated = c.value('(IsRelated/text())[1]', 'int') ,HasNoClaim = ISNULL(c.value('(HasNoClaim/text())[1]', 'int'),0) ,TFN = c.value('(TFN/text())[1]', 'varchar(2000)') FROM @XML.nodes('//XMLPayload') AS Payload (p) CROSS APPLY p.nodes('Creditors') AS Creditors (cs) CROSS APPLY cs.nodes('Creditor') AS Creditor (c) --DEBUG select 'Creditor' as Title, * from @Creditor; INSERT INTO @CreditorClaim ( CreditorID ,CreditorClaimID ,CreditorClaimTypeID ,ClaimedAmount ) SELECT CreditorID = c.value('(CreditorID/text())[1]', 'int') ,CreditorClaimID = cc.value('(InsolCreditorClaimID/text())[1]', 'int') ,CreditorClaimTypeID = cc.value('(CreditorClaimType_Key/text())[1]', 'int') ,ClaimedAmount = cc.value('(ClaimedTotalAmount/text())[1]', 'Money') FROM @XML.nodes('//XMLPayload') AS Payload (p) CROSS APPLY p.nodes('Creditors') AS Creditors (cs) CROSS APPLY cs.nodes('Creditor') AS Creditor (c) CROSS APPLY c.nodes('Claims') AS Cls (ccs) CROSS APPLY ccs.nodes('Claim') AS Cl (cc) --DEBUG select '00' as title, * from @CreditorClaim --BANK DETAILS INSERT INTO @Bankdetails (CreditorID ,LookupListID ,[Data] ) SELECT CreditorID = c.value('(CreditorID/text())[1]', 'int') ,LookupListID = i.value('(LookupListID/text())[1]', 'int') ,[Data] = i.value('(Data/text())[1]', 'nvarchar(200)') FROM @XML.nodes('//XMLPayload') AS Payload (p) CROSS APPLY p.nodes('Creditors') AS Creditors (cs) CROSS APPLY cs.nodes('Creditor') AS Creditor (c) CROSS APPLY c.nodes('CreditorBankDetails') AS CreditorBankDetails (cbd) CROSS APPLY cbd.nodes('Item') AS Item (i); DELETE @Bankdetails WHERE CreditorID IS NULL; UPDATE @Bankdetails SET CounterpartyID = c.CounterpartyID FROM @Bankdetails bd inner join Creditor c ON bd.CreditorID = c.CreditorID; --Insert data into the temp claim table --for any creditors that do not have claim --records in the response --DEBUG select * from @Bankdetails INSERT INTO @CreditorClaim (CreditorID, CreditorClaimID, CreditorClaimTypeID, ClaimAccountID, ClaimedAmount) SELECT c.CreditorID ,cc.CreditorClaimID ,CreditorClaimTypeID = IsNull (cc.CreditorClaimTypeID, CASE WHEN c.CreditorClassID = 1 THEN 100 WHEN c.CreditorClassID = 32 THEN 200 WHEN c.CreditorClassID = 4 THEN 400 WHEN c.CreditorClassID = 8 THEN 500 WHEN c.CreditorClassID = 16 THEN 600 ELSE 400 END) ,cc.AccountID ,ct.PODAmount FROM @Creditor ct INNER JOIN dbo.Creditor c ON c.CreditorID = ct.CreditorID LEFT OUTER JOIN dbo.CreditorClaim cc ON cc.CreditorID = c.CreditorID AND cc.CreditorClaimTypeID = CASE WHEN c.CreditorClassID = 1 THEN 100 WHEN c.CreditorClassID = 32 THEN 200 WHEN c.CreditorClassID = 4 THEN 400 WHEN c.CreditorClassID = 8 THEN 500 WHEN c.CreditorClassID = 16 THEN 600 ELSE 400 END WHERE c.CreditorID Not In(SELECT CreditorID FROM @CreditorClaim) AND ct.PODIsInformal=0 --DEBUG select @@ROWCOUNT as newClaimRows --DEBUG select '0' as title,* from @CreditorClaim INSERT INTO @CreditorDocs ( CreditorID ,CounterpartyUID ,EmployeeUID ,DocRootPath ,DocGUID ,DocName ,Extension ,DocType ,DocUrl ,CreatedDate ) SELECT CreditorID = c.value('(CreditorID/text())[1]', 'int') ,CounterpartyUID = c.value('(CounterpartyUID/text())[1]', 'UNIQUEIDENTIFIER') ,EmployeeUID = c.value('(EmployeeUID/text())[1]', 'UNIQUEIDENTIFIER') ,DocRootPath = ds.value('(DocRootPath/text())[1]', 'varchar(1000)') ,DocGuid = d.value('(DocGuid/text())[1]', 'UNIQUEIDENTIFIER') ,DocName = d.value('(DocName/text())[1]', 'varchar(1000)') ,Extension = d.value('(Extension/text())[1]', 'varchar(50)') ,DocType = d.value('(DocType/text())[1]', 'int') ,DocUrl = d.value('(DocUrl/text())[1]', 'varchar(1000)') ,CreatedDate = d.value('(CreatedDate/text())[1]', 'DATETIME') FROM @XML.nodes('//XMLPayload') AS Payload (p) CROSS APPLY p.nodes('Creditors') AS Creditors (cs) CROSS APPLY cs.nodes('Creditor') AS Creditor (c) CROSS APPLY c.nodes('Docs') AS Docs (ds) CROSS APPLY ds.nodes('Doc') AS Doc (d) UPDATE @CreditorDocs SET CounterpartyID = c.CounterpartyID ,EmployeeID = c.EmployeeID FROM @CreditorDocs cd INNER JOIN Creditor c ON c.CreditorID = cd.CreditorID -- Work out the admitted amounts UPDATE @CreditorClaim SET ClaimedAmount = ROUND(cc.ClaimedAmount,2) ,ClaimedTaxAmount = ROUND( CASE WHEN (1 + @TaxRate) <> 0 THEN ROUND(PODAmount / (1 + @TaxRate),2) ELSE ROUND(PODAmount,2) END * @TaxRate ,2) ,ClaimedNettAmount = ROUND(PODAmount,2) - ROUND( CASE WHEN (1 + @TaxRate) <> 0 THEN ROUND(PODAmount / (1 + @TaxRate),2) ELSE PODAmount END * @TaxRate ,2) FROM @Creditor cr INNER JOIN @CreditorClaim cc ON cr.CreditorID = cc.CreditorID --DEBUG select @@ROWCOUNT UpdatedClaimsFromCreditor --DEBUG select '1' as title, * from @CreditorClaim -- ************************************************************************************* ---- Emp UPDATE @CreditorClaim SET ClaimAccountID = cc.AccountID ,ControlAccountID = acc.AccountID FROM @CreditorClaim cct INNER JOIN dbo.CreditorClaim cc ON cc.CreditorID = cct.CreditorID AND cc.CreditorClaimID = cct.CreditorClaimID AND cc.CreditorClaimTypeID = cct.CreditorClaimTypeID INNER JOIN dbo.Creditor c ON c.CreditorID = cc.CreditorID INNER JOIN dbo.Account acc ON acc.AdminID = c.AdminID AND acc.CreditorClaimTypeID = c.CreditorClassID AND c.EmployeeID IS NOT NULL -- Uns / Pref -- ClaimAccountID UPDATE cctbl SET ClaimAccountID = cc.AccountID FROM @CreditorClaim cctbl INNER JOIN dbo.CreditorClaim cc ON cc.CreditorID = cctbl.CreditorID AND cc.CreditorClaimID = cctbl.CreditorClaimID AND cc.CreditorClaimTypeID = cctbl.CreditorClaimTypeID INNER JOIN dbo.Creditor c ON c.CreditorID = cc.CreditorID INNER JOIN dbo.Account acc ON cc.AccountID = acc.AccountID -- AND acc.ParentAccount_AccountID IS NULL; -- ControlAccount UPDATE cctbl SET ControlAccountID = acc.AccountID FROM @CreditorClaim cctbl INNER JOIN dbo.CreditorClaim cc ON cc.CreditorID = cctbl.CreditorID INNER JOIN dbo.Creditor c ON c.CreditorID = cc.CreditorID INNER JOIN dbo.CreditorClaimType cct ON cct.CreditorClassID = c.CreditorClassID INNER JOIN dbo.Account acc ON c.AdminID = acc.AdminID AND acc.CreditorClaimTypeID = cct.CreditorClassID -- DEBUG select '3' as title, * from @CreditorClaim UPDATE @CreditorClaim SET ExClaimedAmount = IsNull( (SELECT Sum(Net * Direction * -1) FROM dbo.SubEntry WHERE CreditorID = cc.CreditorID AND Account_AccountID = cc.ClaimAccountID AND EntryType In(100,101)), 0 ) FROM @CreditorClaim cc UPDATE @CreditorClaim SET Delta = ClaimedAmount - ExClaimedAmount UPDATE @CreditorClaim SET NoExClaim = 1 WHERE ClaimAccountID Is Null --DEBUG select '4' as title,* from @CreditorClaim --Get the accounts where there arent any existing creditor claims UPDATE @CreditorClaim SET ControlAccountID = acc.AccountID FROM @CreditorClaim cct INNER JOIN dbo.Creditor c ON c.CreditorID = cct.CreditorID INNER JOIN dbo.Account acc ON acc.AdminID = c.AdminID AND acc.CreditorClaimTypeID = c.CreditorClassID WHERE cct.ControlAccountID Is Null --DEBUG select '5' as title, * from @CreditorClaim -- catch all resolve claim account /* UPDATE @CreditorClaim SET ClaimAccountID = acc.AccountID FROM @CreditorClaim cct INNER JOIN dbo.Creditor c ON c.CreditorID = cct.CreditorID INNER JOIN dbo.CreditorClaimType cct ON cct.CreditorClassID = c.CreditorClassID INNER JOIN dbo.Account acc ON c.AdminID = acc.AdminID AND acc.CreditorClaimTypeID = cct.CreditorClassID */ -- Default account DECLARE @DefaultUnsecAccID int DECLARE @Use_UnsecAccID int -- set values Select @DefaultUnsecAccID = AccountID FROM dbo.Account acc Where acc.AdminID = @AdminID AND acc.CreditorClaimTypeID = 400 AND AccountGroupID = 2040 AND IsDefault = 1 -- Trade creditors Select @Use_UnsecAccID = AccountID FROM dbo.Account acc Where acc.AdminID = @AdminID AND acc.CreditorClaimTypeID = 400 AND AccountGroupID = 2040 AND acc.AccountUID = '6F973298-8576-4F69-804D-A7546A75C29D' -- Last added account IF @Use_UnsecAccID IS NULL Select @Use_UnsecAccID = Max(AccountID) FROM dbo.Account acc Where acc.AdminID = @AdminID AND acc.CreditorClaimTypeID = 400 AND AccountGroupID = 2040 AND acc.AccountID > @Use_UnsecAccID AND acc.IsCore = 0 IF @DefaultUnsecAccID IS NOT NULL -- USe the default account UPDATE @CreditorClaim SET ClaimAccountID = @DefaultUnsecAccID FROM @CreditorClaim cct WHERE cct.ClaimAccountID Is Null ELSE -- or use the latest account / trade creditors account BEGIN UPDATE @CreditorClaim SET ClaimAccountID = @Use_UnsecAccID FROM @CreditorClaim cct WHERE cct.ClaimAccountID Is Null END -- catch all UPDATE @CreditorClaim SET ClaimAccountID = ( Select Max(acc.AccountID) FROM @CreditorClaim cct INNER JOIN dbo.Creditor c ON c.CreditorID = cct.CreditorID INNER JOIN dbo.Account acc ON acc.AdminID = c.AdminID AND acc.CreditorClaimTypeID = cct.CreditorClaimTypeID WHERE cct.ClaimAccountID Is Null AND acc.ParentAccount_AccountID Is Null ) WHERE ClaimAccountID IS NULL --Has to go to the parent claim account --DEBUG select '10' as title,* from @CreditorClaim --Get Address Details INSERT INTO @CreditorAddress ( CreditorID ,CounterpartyUID ,[Address] ,[City] ,[State] ,[PostCode] ,[Country] ,[UpdatedBy] ) SELECT CreditorID = c.value('(CreditorID/text())[1]', 'int') ,CounterpartyUID = c.value('(CounterpartyUID/text())[1]', 'UNIQUEIDENTIFIER') ,[Address] = LEFT(ISNULL(a.value('(Address/text())[1]', 'nvarchar(500)'),''),500) ,[City] = LEFT(ISNULL(a.value('(City/text())[1]', 'nvarchar(500)'),''),50) ,[State] = LEFT(ISNULL(a.value('(State/text())[1]', 'nvarchar(500)'),''),50) ,[PostCode] = LEFT(ISNULL(a.value('(PostCode/text())[1]', 'nvarchar(500)'),''),50) ,[Country] = LEFT(ISNULL(a.value('(Country/text())[1]', 'nvarchar(500)'),''),100) ,[UpdatedBy] = @UserName FROM @XML.nodes('//XMLPayload') AS Payload (p) CROSS APPLY p.nodes('Creditors') AS Creditors (cs) CROSS APPLY cs.nodes('Creditor') AS Creditor (c) CROSS APPLY c.nodes('Address') AS Address (a) --Get Creditors Default Mailing Address Update ca set AddressID =ad.AddressID, TS=ad.TS FROM @CreditorAddress ca inner join dbo.Creditor c on ca.CreditorID=c.CreditorID inner join dbo.Counterparty cp on c.CounterpartyID=cp.CounterpartyID inner join dbo.Counterparty_Address cpa on cp.CounterpartyID=cpa.CounterpartyID inner join dbo.[Address] ad on ad.AddressID=cpa.AddressID where ad.IsMailing = 1 --select * from @CreditorAddress --UPDATE DATABASE --Insert the creditor claims where they don't exist INSERT INTO dbo.CreditorClaim (CreditorID ,CreditorClaimTypeID ,AccountID ,RATAAmount ,AdvisedAmount ,ClaimedNettAmount ,ClaimedTaxAmount ,ClaimedTotalAmount ,AdmittedAmount ,AdmittedTaxAmount ,RejectedAmount ,RejectedPriorityAmount ,RejectedPriorityAdmitted ,UnderConsiderationAmount ,DistributedAmount ,GEERSAmount ,[Rank] ,NI ,CreatedDate ,CreatedBy ,UpdatedDate ,UpdatedBy ,TS) SELECT cc.CreditorID ,cc.CreditorClaimTypeID ,cc.ClaimAccountID ,RATAAmount = 0 ,AdvisedAmount = 0 ,cc.ClaimedNettAmount ,cc.ClaimedTaxAmount ,cc.ClaimedAmount ,AdmittedAmount = 0 ,AdmittedTaxAmount = 0 ,RejectedAmount = 0 ,RejectedPriorityAmount = 0 ,RejectedPriorityAdmitted = 0 ,UnderConsiderationAmount = cc.ClaimedAmount ,DistributedAmount = 0 ,GEERSAmount = 0 ,[Rank] = 0 ,NI = 0 ,GetDate() ,'svc' ,GetDate() ,@UserName ,NewID() FROM @CreditorClaim cc WHERE NoExCLaim = 1 --DEBUG select @@ROWCOUNT as NewPracticeCreditorCLaimrowsInsertted; SET @claimsRefreshToPortal = @@ROWCOUNT --DEBUG select @claimsRefreshToPortal as claimsRefreshToPortal; --Select * from @CreditorClaim --Select * from CreditorClaim Where CreditorId = 3158 --return 0 DECLARE @CredEnt As dbo.CreditorEntry DECLARE @Ret Int INSERT INTO @CredEnt SELECT CreditorID ,ControlAccountID ,ClaimAccountID ,Delta ,NewID() FROM @CreditorClaim EXEC @Ret = dbo.gensp_CreditorClaimEntryUpdate @CreditorEntry=@CredEnt UPDATE dbo.Creditor SET PODAmount = cr.PODAmount ,PODDate = ISNULL(cr.PODDate,0.00) ,PODIsInformal = cr.PODIsInformal ,Memo = Memo + char(10) + char(13) + 'web: ' + cr.Comments ,UpdatedBy = @UserName ,UpdatedDate = GETDATE() ,TS = newID() ,Flags = CASE WHEN (cr.IsRelated is null) then c.Flags WHEN (cr.IsRelated=1 AND c.Flags IS NULL) then 1 WHEN (cr.IsRelated=1 AND c.Flags&1=0) then c.Flags+1 WHEN (cr.IsRelated=0 AND c.Flags&1=1) then c.Flags-1 ELSE c.Flags END FROM dbo.Creditor c INNER JOIN @Creditor cr ON cr.CreditorID = c.CreditorID --DEBUG SELECT * FROM @Creditor; -- ****************************************************************** -- Bank and creditor custom data -- ****************************************************************** --DEBUG SELECT 'during' as title, cpd.* FROM CounterpartyData cpd WHERE cpd.AdminID=@AdminID --DEBUG SELECT 'bd' as title, bd.* FROM @Bankdetails bd; --Bankdetails IF EXISTS (SELECT (1) From dbo.AdminSetting where AdminID = @AdminID and SettingID = 7000005) BEGIN --Remove Existing IBAN if supplied with SWIFT DELETE cpd FROM CounterpartyData cpd inner join @Bankdetails bd on bd.CounterpartyID = cpd.CounterpartyID and bd.LookupListID = @SWIFTLookupID inner join dbo.[Lookup] l on cpd.Field_LookupID=l.LookupID WHERE cpd.AdminID=@AdminID AND cpd.Field_LookupID = @IBANLookupID AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0) AND l.LookupListID = @BLookupListID; DELETE cpd FROM CounterpartyData cpd inner join @Bankdetails bd on bd.CounterpartyID = cpd.CounterpartyID and bd.LookupListID = @EFTMethodLookupID inner join dbo.[Lookup] l on cpd.Field_LookupID=l.LookupID WHERE cpd.AdminID=@AdminID AND cpd.Field_LookupID = @IBANLookupID AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0) AND l.LookupListID = @BLookupListID AND bd.Data = 'EFT' ; -- IBAN IF EXISTS (SELECT (1) From @Bankdetails WHERE LookupListID = @IBANLookupID) BEGIN --Remove Existing SWIFT if supplied with IBAN DELETE cpd FROM dbo.CounterpartyData cpd inner join @Bankdetails bd on bd.CounterpartyID = cpd.CounterpartyID and bd.LookupListID = @IBANLookupID -- inner join dbo.[Lookup] lu on cpd.Field_LookupID = lu.LookupID WHERE cpd.AdminID=@AdminID AND cpd.Field_LookupID = @SWIFTLookupID AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0) AND lu.LookupListID = @BLookupListID; --Remove Existing BSB if supplied with IBAN DELETE cpd FROM CounterpartyData cpd inner join @Bankdetails bd on bd.CounterpartyID=cpd.CounterpartyID and bd.LookupListID = @IBANLookupID inner join dbo.[Lookup] l on cpd.Field_LookupID=l.LookupID WHERE cpd.Field_LookupID = @BSB_LookupID AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0) AND l.LookupListID = @BLookupListID; DELETE FROM @Bankdetails WHERE LookupListID = @BSB_LookupID --Remove Existing Acc Number if supplied with IBAN DELETE cpd FROM CounterpartyData cpd inner join @Bankdetails bd on bd.CounterpartyID=cpd.CounterpartyID and bd.LookupListID = @IBANLookupID inner join dbo.[Lookup] l on cpd.Field_LookupID=l.LookupID WHERE cpd.AdminID=@AdminID AND cpd.Field_LookupID = @AccNo_LookupID AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0) AND l.LookupListID = @BLookupListID; DELETE FROM @Bankdetails WHERE LookupListID = @AccNo_LookupID END --Update Existing UPDATE cpd SET cpd.[Data] = bd.[Data] ,cpd.[UpdatedDate]=SYSDATETIME() ,cpd.[UpdatedBy]= @UserName ,cpd.[TS]=newid() FROM @Bankdetails bd inner join dbo.CounterpartyData cpd on bd.CounterpartyID=cpd.CounterpartyID and bd.LookupListID=cpd.Field_LookupID WHERE cpd.AdminID=@AdminID and cpd.CreditorID is NULL and cpd.AccountID is NULL AND ISNULL(cpd.AdminID,0) = ISNULL(@AdminID,0); --INSERT INSERT INTO [dbo].[CounterpartyData] ( [CounterpartyID] ,[AdminID] ,[CreditorID] ,[AccountID] ,[Field_LookupID] ,[SubType] ,[Flags] ,[Data] ,[FData] ,[DData] ,[CreatedDate] ,[CreatedBy] ,[UpdatedDate] ,[UpdatedBy] ,[TS] ) select [CounterpartyID] = bd.CounterpartyID ,[AdminID] = @adminid ,[CreditorID] = NULL ,[AccountID] = NULL ,[Field_LookupID] = bd.LookupListID ,[SubType] = 1 ,[Flags] = NULL ,[Data] = bd.[Data] ,[FData] = NULL ,[DData] = NULL ,[CreatedDate] = SYSDATETIME() ,[CreatedBy] = 'svc' ,[UpdatedDate] = SYSDATETIME() ,[UpdatedBy] = @UserName ,[TS] = newid() FROM @Bankdetails bd left join dbo.CounterpartyData cpd on bd.CounterpartyID=cpd.CounterpartyID and bd.LookupListID=cpd.Field_LookupID and @AdminID=cpd.AdminID where cpd.CounterpartyDataID is null ; END; --TFN SELECT TOP 1 @TFN = TFN FROM @Creditor; --IF TFN supplied from portal and not already existing -- insert IF (@TFN IS NOT NULL) BEGIN --Prepare Lookuplist if TFN Supplied Existing select @TFN_Field_LookupID = max(l.LookupID) From dbo.[Lookup] l where l.LookupListID = @TFNLookupListID and l.Data = @TFNData and l.[Description] = @TFNDescription; If (@TFN_Field_LookupID is null) BEGIN DECLARE @ErrorMessage NVARCHAR(4000) ='Tax File Number Lookup does not exist', @ErrorNumber INT=11, @ErrorSeverity INT=11, @ErrorState INT=11, @ErrorLine INT=11, @ErrorProcedure NVARCHAR(200) = 'websp_ResponseCreditorClaimUpdate'; RAISERROR ( @ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, -- parameter: original error number. @ErrorSeverity, -- parameter: original error severity. @ErrorState, -- parameter: original error state. @ErrorProcedure, -- parameter: original error procedure name. @ErrorLine -- parameter: original error line number. ); END --DEBUG SELECT @TFN_Field_LookupID as TFN_Field_LookupID; --Assume one creditor per payload SELECT TOP 1 @TFN = TFN, @TFNClaimAccountID = cc.AccountID, @TFNCreditorID = c.CreditorID, @TFNCounterpartyID = cr.CounterpartyID from @Creditor c INNER JOIN dbo.Creditor cr ON c.CreditorID = cr.CreditorID INNER JOIN dbo.CreditorClaim cc ON c.CreditorID = cc.CreditorID order by cc.AccountID; SELECT @CounterpartyDataID = CounterpartyDataID ,@TFNTS = TS FROM [dbo].[CounterpartyData] WHERE AdminID = @AdminID AND CreditorID = @TFNCreditorID AND AccountID = @TFNClaimAccountID AND Field_LookupID = 2000030 --DEBUG /* Select * FROM @Creditor SELECT @TFN AS TFN, @TFNClaimAccountID AS AccountID, @TFNCreditorID AS CreditorID, @TFNCounterpartyID AS CounterpartyID, @CounterpartyDataID As CounterpartyDataID */ --INSERT IF (@CounterpartyDataID IS NULL) BEGIN --DEBUG SELECT 'INSERT' as typeofquery; exec [dbo].[gensp_CounterpartyDataCreate] @CounterpartyDataID = @CounterpartyDataID OUTPUT ,@CounterpartyID = @TFNCounterpartyID ,@AdminID = @AdminID ,@CreditorID = @TFNCreditorID ,@AccountID = @TFNClaimAccountID ,@Field_LookupID = @TFN_Field_LookupID ,@SubType = 1 ,@Flags = @TFNFlag ,@Data = @TFN ,@FData = Null ,@DData = Null ,@CreatedBy = @TFNCreatedBy ,@TS = @TFNTS OUTPUT; --DEBUG SELECT @@ROWCOUNT as insertted, @CounterpartyDataID As CounterpartyDataID END -- INSERT counterparty data ELSE IF( @CounterpartyDataID IS NOT NULL AND @TFNCounterpartyID IS NOT NULL AND @AdminID IS NOT NULL AND @TFNCreditorID IS NOT NULL AND @TFNClaimAccountID IS NOT NULL AND @TFN_Field_LookupID IS NOT NULL ) -- UPDATE BEGIN --DEBUG SELECT 'UPDATE' as typeofquery; exec dbo.gensp_CounterpartyDataUpdate @CounterpartyDataID = @CounterpartyDataID ,@CounterpartyID = @TFNCounterpartyID ,@AdminID = @AdminID ,@CreditorID = @TFNCreditorID ,@AccountID = @TFNClaimAccountID ,@Field_LookupID = @TFN_Field_LookupID ,@SubType = 1 ,@Flags = @TFNFlag ,@Data = @TFN ,@FData = Null ,@DData = Null ,@UpdatedBy = @TFNCreatedBy ,@TS = @TFNTS OUTPUT; --DEBUG SELECT @@ROWCOUNT as Updated, @TFNTS As TFNTSUpdated END -- UPDATE counterparty data END --END TFN -- ****************************************************************** -- Events -- ****************************************************************** --set Posted Creditor Event: Declare @CredEvent As dbo.CreditorEvent Declare @RetCPEV Int INSERT INTO @CredEvent (CreditorID, UID, Flags, ResponseUserID, TimeStamp, Description) SELECT c.CreditorID ,NewID() ,1 ,NULL ,GETUTCDATE() ,'Claim submitted via portal' + CASE WHEN 1=ISNULL(c.HasNoClaim,0) THEN 'Manual intervention is required. The user ''' + @UserName + ''' has indicated they have no claim' ELSE '' END FROM @Creditor c Exec @RetCPEV = dbo.gensp_CreditorPortalEventCreate @CreditorEvent=@CredEvent --Set if Creditor Claim has been udpated UPDATE @Creditor SET Differ = CASE WHEN cr.RATAAmount IS NULL THEN 0 WHEN cr.RATAAmount > cr.PODAmount THEN -1 WHEN cr.RATAAmount < cr.PODAmount THEN 1 ELSE 0 END FROM @Creditor cr --DEBUG SELECT 'Creditor' as title, * from @Creditor; --Update Creditor Claim UPDATE dbo.CreditorClaim SET ClaimedTotalAmount = crc.ClaimedAmount ,ClaimedTaxAmount = crc.ClaimedTaxAmount ,ClaimedNettAmount = crc.ClaimedNettAmount ,UnderConsiderationAmount = crc.ClaimedAmount - cc.AdmittedAmount - cc.RejectedAmount ,UpdatedBy = @UserName ,UpdatedDate = GETDATE() ,TS = NewID() FROM dbo.CreditorClaim cc INNER JOIN @CreditorClaim crc ON cc.CreditorClaimID = crc.CreditorClaimID --DEBUG select @@ROWCOUNT as ClaimsUpdated; UPDATE dbo.Creditor SET CaptureReference = Convert(varchar(20), e.EntryID) ,UpdatedBy = @UserName ,UpdatedDate = SYSDATETIME() ,TS = newid() FROM @CredEnt ce INNER JOIN @CreditorClaim cc ON cc.CreditorID = ce.CreditorID INNER JOIN dbo.Creditor cr ON cr.CreditorID = cc.CreditorID INNER JOIN dbo.Entry e ON e.TS = ce.TS WHERE cc.NoExClaim = 1 --Work out which ones to send back up to the portal to update the portal TS DECLARE @CredXML XML SELECT @CredXML = ( SELECT ( SELECT '@ID' = CreditorID FROM @CreditorClaim cc WHERE c.CreditorID = cc.CreditorID AND cc.NoExCLaim = 1 FOR XML PATH ('Creditor'), TYPE ) FROM @Creditor c FOR XML PATH ('Creditors'), TYPE ) --DEBUG select @CredXML as CredXML; --if there have been new claim rows insertted update the portal now --if not then as the Creditor would be 'dirty' then the Practice User will initiates a portal publish IF (@claimsRefreshToPortal>0) BEGIN EXEC @Ret = dbo.websp_AdminCreateXML @AdminID=@AdminID, @CredXML=@CredXML END -- Docs --begin [gensp_DocumentCreate] for each creditor document DECLARE @RC int = NULL DECLARE @DocumentID int = NULL DECLARE @LodgementID int = NULL DECLARE @Category nvarchar(295) = NULL DECLARE @Path nvarchar(255) = NULL DECLARE @FileName nvarchar(255) = NULL DECLARE @KeyWords nvarchar(200) = NULL DECLARE @Memo nvarchar(max) = NULL DECLARE @IsUnderAdminRoot bit = NULL DECLARE @IsPublic bit = NULL DECLARE @UserID int = NULL DECLARE @TaskID int = NULL DECLARE @EntryID int = NULL DECLARE @AssetID int = NULL DECLARE @LiabilityID int = NULL DECLARE @CreditorID int = NULL DECLARE @ShareholderID int = NULL DECLARE @CounterpartyID int = NULL DECLARE @DividendID int = NULL DECLARE @EmployeeID int = NULL DECLARE @SecurityID int = NULL DECLARE @ContactID int = NULL DECLARE @BankruptID int = NULL DECLARE @MeetingID int = NULL DECLARE @BatchID int = NULL DECLARE @AccountID int = NULL DECLARE @ReconciliationID int = NULL DECLARE @CheckedOutTo varchar(100) = NULL DECLARE @ReturnByDate datetime = NULL DECLARE @TargetDestructionDate datetime = NULL DECLARE @ActualDestructionDate datetime = NULL DECLARE @AuthorisedBy_UserID int = NULL DECLARE @SentBy_UserID int = NULL DECLARE @Authorisation_TaskID int = NULL DECLARE @Despatch_TaskID int = NULL DECLARE @Flags int = NULL DECLARE @UID uniqueidentifier = NULL DECLARE @WebFlags int = NULL DECLARE @XMLData xml DECLARE @CreatedBy varchar(75) = NULL DECLARE @TS uniqueidentifier = NULL DECLARE @maxRowId int= 0; select @maxRowId = max(rowid) from @CreditorDocs WHERE CreditorID is not null DECLARE @DocumentReadId int = 0; WHILE(@DocumentReadId < @maxRowId) BEGIN SELECT TOP 1 @DocumentReadId = cd.RowId ,@AdminID = @AdminID ,@Category = 'Creditors' ,@FileName = cd.DocRootPath + cd.DocUrl ,@KeyWords = cd.DocName + ISNULL('.' + cd.Extension,'') ,@CreditorID = cd.CreditorID --For Employees too. ,@CounterpartyID = cd.CounterpartyID ,@UID = cd.DocGuid ,@UserID = 1 ,@CreatedBy = 'web upload' FROM @CreditorDocs cd WHERE cd.CreditorID IS NOT NULL AND cd.RowId > @DocumentReadId ORDER BY RowId --print @UID --Add document if it doesn't exist already IF NOT Exists(Select DocumentId from Document d where @UID = d.UID) BEGIN EXECUTE @RC = [dbo].[gensp_DocumentCreate] @DocumentID OUTPUT ,@AdminID ,@LodgementID ,@Category ,@Path ,@FileName ,@KeyWords ,@Memo ,@IsUnderAdminRoot ,@IsPublic ,@UserID ,@TaskID ,@EntryID ,@AssetID ,@LiabilityID ,@CreditorID ,@ShareholderID ,@CounterpartyID ,@DividendID ,@EmployeeID ,@SecurityID ,@ContactID ,@BankruptID ,@MeetingID ,@BatchID ,@AccountID ,@ReconciliationID ,@CheckedOutTo ,@ReturnByDate ,@TargetDestructionDate ,@ActualDestructionDate ,@AuthorisedBy_UserID ,@SentBy_UserID ,@Authorisation_TaskID ,@Despatch_TaskID ,@Flags ,@UID OUTPUT ,@WebFlags ,@XMLData ,@CreatedBy ,@TS OUTPUT; --end exec [gensp_DocumentCreate] END --end call [gensp_DocumentCreate] EXEC dbo.gensp_CreditorDocumentDataUpdate @CreditorID = @CreditorID; --delete row just sent to SP DELETE FROM @CreditorDocs WHERE DocGuid = @UID END --Address Update --select * from @CreditorAddress DECLARE @AddressID Int ,@AddressTypeID Int ,@IsMailing Bit ,@Address nVarChar(500) =Null ,@City nVarChar(50) =Null ,@State nVarChar(50) =Null ,@PostCode nVarChar(50) =Null ,@Country nVarChar(100) = Null ,@UpdatedBy VarChar(75) ,@oldTS UNIQUEIDENTIFIER ,@NewTS UniqueIdentifier ; SET @maxRowId = 0; select @maxRowId = max(rowid) from @CreditorAddress WHERE AddressID is not null DECLARE @creditorAddressesRowId int = 0; WHILE(@creditorAddressesRowId < @maxRowId) BEGIN SELECT TOP 1 @creditorAddressesRowId = ca.RowId, @AddressID = ca.AddressID ,@Address = ca.Address ,@City = ca.City ,@State = ca.State ,@PostCode = ca.PostCode ,@Country = ca.Country ,@UpdatedBy = ca.UpdatedBy ,@oldTS = ca.TS FROM @CreditorAddress ca WHERE ca.AddressID IS NOT NULL AND ca.RowId > @creditorAddressesRowId ORDER BY RowId --Update address SET @NewTS = NewID() --select @Address as beforeAddr -- ,CHARINDEX(char(10),@Address) as haschar10 -- ,CHARINDEX(char(13),@Address) as hasChar1310 ; SET @Address = CASE WHEN (CHARINDEX(char(10),@Address)>0 --has char(10) AND CHARINDEX(char(13),@Address)<=0)--does not have char(13) THEN REPLACE(@Address,char(10),char(13)+char(10)) ELSE @Address END; --select @Address as beforeAddr -- ,CHARINDEX(char(10),@Address) as haschar10 -- ,CHARINDEX(char(13),@Address) as hasChar1310 UPDATE [dbo].[Address] SET [Address] = @Address ,[City] = @City ,[State] = @State ,[PostCode] = @PostCode ,[Country] = @Country ,[UpdatedDate] = GetDate() ,[UpdatedBy] = @UpdatedBy ,[TS] = @NewTS WHERE [AddressID] = @AddressID AND [TS] = @oldTS AND ISNULL(@Address,'') <> '' --delete row just sent to SP DELETE FROM @CreditorAddress WHERE AddressID = @AddressID END --Send Email Notification --if App Email Setting Exists and NoEmail Off --DEBUG SELECT Setting FROM dbo.ApplicationSetting WHERE SettingID = 95005; /*SELECT TOP 1 ads.AdminID FROM dbo.[AdminSetting] ads inner join dbo.[Admin] a on ads.AdminID = a.AdminID WHERE ads.SettingID = 7000006 -- PortalNotificationNoEmails OFF AND a.AdminID = @AdminID; */ IF EXISTS (SELECT Setting FROM dbo.ApplicationSetting WHERE SettingID = 95005) AND NOT EXISTS (SELECT TOP 1 ads.AdminID FROM dbo.[AdminSetting] ads WHERE ads.SettingID = 7000006 -- PortalNotificationNoEmails OFF AND ads.AdminID = @AdminID ) AND EXISTS(SELECT (1) FROM dbo.Admin a LEFT JOIN dbo.AdminData ad ON a.AdminId = ad.AdminID WHERE a.AdminId = @AdminID and ad.XMLData IS NOT NULL and charindex('ContactUserID', convert(nvarchar(max),ad.XMLData))>0) BEGIN --DEBUG Print 'Sending Emails'; --DEBUG SELECT 'Email' as title; DECLARE @ContactEmail nvarchar(255) ,@UserNameEmail nvarchar(255) ,@AdminName nvarchar(255) ,@ContactName nvarchar(255) ,@CounterpartyName nvarchar(255) ,@subject nvarchar(255) ,@msg nvarchar(max) ,@ContactUserID int ; --User who made the update SELECT @UserNameEmail= d.value('(username/text())[1]', 'nvarchar(255)') FROM @XML.nodes('/Download') AS Payload (d) SELECT @AdminName = ISNULL(a.[Name],a.ShortName) FROM Admin a WHERE a.AdminID=@AdminID; --Practice User to recieve the notification email SELECT @ContactUserID = al.value('(ContactUserID/text())[1]', 'int') ,@ContactEmail = al.value('(ContactEmail/text())[1]', 'nvarchar(255)') FROM dbo.AdminData ad CROSS APPLY XMLData.nodes('/AdminData/Portal/Data') AS AccessLookup (al) WHERE ad.AdminID = @AdminID AND CHARINDEX('Portal',CONVERT(NVARCHAR(MAX),XMLData))>0 AND CHARINDEX('ContactEmail',CONVERT(NVARCHAR(MAX),XMLData))>0; SELECT @ContactName = ISNULL(u.[Name],'Insolvency Practice User') FROM [User] u WHERE u.UserId=@ContactUserID; SELECT @msg = 'A creditor claim for $ ' + Convert(nvarchar(200),ct.PODAmount) + ', has been updated on the creditors'' portal for Job ''' + @AdminName + ''' on behalf of ''' + cp.Name + '''' + ' by ' + ISNULL(@UserNameEmail,'an online user') + '.' FROM @Creditor ct INNER JOIN dbo.Creditor c ON c.CreditorID = ct.CreditorID INNER JOIN dbo.Counterparty cp ON cp.CounterpartyID=c.CounterpartyID; --DEBUG SELECT @msg as MsgBefore SELECT @msg = CASE WHEN cr.Differ <> 0 THEN @msg + '\n' + '\n' + 'NOTE: The creditor/claimant has submitted a claim of $' + Convert(nvarchar(200),cr.PODAmount) + '. The claim amount is ' + CASE WHEN cr.Differ > 0 THEN 'higher' WHEN cr.Differ < 0 THEN 'lower' END + ' than the original system amount of $' + Convert(nvarchar(200),cr.RATAAmount) + '.' ELSE @msg END FROM @Creditor cr --DEBUG SELECT @msg as MsgAfter --DEBUG SELECT 'Email' as titleContactData, * From @ContactData; --DEBUG select @msg as msg, @subject as subject; --Send Notification IF ( (@ContactEmail IS NOT NULL) AND (@ContactEmail <> '') ) BEGIN INSERT INTO @ContactData ( [Email] ,[FirstName] ,[LastName] ,[EmailDisplayName] ) SELECT [Email] = @ContactEmail ,[FirstName] = @ContactName ,[LastName] = NULL ,[EmailDisplayName] = @ContactName ; SET @subject = '''' + @AdminName + ''' updated by Portal Creditor.'; --DEBUG /* select * from @ContactData; select 'websp_TransferWebRequestEmailCreate ' as title ,@Subject as subject ,@AdminName as job ,@msg as msg ,@AdminID as adminid; */ exec websp_TransferWebRequestEmailCreate @ContactData=@ContactData ,@Subject=@Subject ,@AdminName = @AdminName ,@MessageText = @msg ,@AdminID=@AdminID ,@UserID=1 ,@CreateWebRequest=1 ,@IsDelayedRequest=0 -- cache all mesages then send in one batch ,@RequestGroupUID=NULL; END END --End Email Notifications SET NOCOUNT OFF RETURN @@ERROR GO SET NOCOUNT OFF GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.websp_ResponseCreditorClaimUpdate TO [insol2_users] GO IF Exists(select * from sys.sysusers where name = 'insolSubscribeUser') BEGIN GRANT EXECUTE ON dbo.websp_ResponseCreditorClaimUpdate TO [insolSubscribeUser] END GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_EmployeePaymentDetail]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_EmployeePaymentDetail] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_EmployeePaymentDetail] @AdminID Int ,@DateFrom Datetime ,@DateTo Datetime ,@EmployeeInClause Text = Null ,@ShowEntry Bit = 1 ,@ETP Bit = NULL ,@IsIndividual Bit = 1 ,@BatchID Int = NULL ,@AdminTypeID int = NULL AS /* Author: Stewart McLeod Date: Purpose: Notes: Revision History: 28/3/2013 SM Salaray sacrifice 19/05/2015 SM allowed for extra comma in the Reference2 subentry 14/06/16 SM exclude FEG payments without bank accounts select * from lookup where lookuplistid = 121000 12/8/2019 Si Employee termination date not populating report. I have updated all instance of e.EndDate with e.TerminationDate 18/10/2019 Si Report was including Super Remittances created using the Super remittance wizard 18/10/2019 Si Report was double counting Super when it was a Super Only dividend 18/10/2019 Si Report was excluding Super deducted from an RILN dividend payment Exec repsp_EmployeePaymentDetail @AdminID = 1022, @DateFrom = '20180701', @DateTo = '20190530', @EmployeeInClause = null, @ShowEntry = 1, @BatchID=44925 EXEC repsp_EmployeePaymentDetail @AdminID = 6665 ,@DateFrom = '20170701' ,@DateTo = '20180630' */ SET NOCOUNT ON SET ANSI_WARNINGS OFF -- DECLARE VARIABLES DECLARE @SubEntry Table ( EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,Memo Varchar(2000) ,TransTotal Money ,EmployeeID Int ,Reference2 Varchar(200) ,AccountID Int -- used for direct entry ,Account_AccountID int -- used to detemine prior year payments ,IsHeader Bit ,BatchID int ,InReport bit ) DECLARE @EmpEntries Table ( EntryID Int ,EmployeeID Int ) DECLARE @Entry Table ( EntryID Int ,BatchID int ,TransTotal Money ,HasHeader bit ) DECLARE @TaxTable Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,TaxString2 Varchar(100) ,TaxString3 Varchar(100) ,TaxString4 Varchar(100) ,TaxString5 Varchar(100) ,CommaPos1 Int ,CommaPos2 Int ,CommaPos3 Int ,CommaPos4 Int ,CommaPos5 Int ) DECLARE @TaxTable2 Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,PipePos1 Int ,PipePos2 Int ,PipePos3 Int ) DECLARE @EmpDivPayments TABLE (EntryID Int primary key) DECLARE @EmpPayments TABLE (EmployeeID INT ,EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ,IsDividend bit ) DECLARE @EmpPaymentsAll TABLE (EmployeeID INT ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ) DECLARE @EmpPaymentsSUM TABLE ( EmployeeID Int ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeCommenceDate DateTime ,EmployeeAddressID Int ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,HasLodgementETP Int ,HasLodgementIndividual Int ,HasLodgementETPThisYear Int ,HasLodgementIndividualThisYear Int ,HasAllowanceEntries Int ,ETPCode nvarchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,EmployeeCountryCode varchar(5) ,PrevLodgementETPDate datetime ,PrevLodgementINBDate datetime ,RemunerationIncomeType_LookupID int ,DeclarationSignatureDate datetime --,ArrangementBasis int ,RemunerationABN varchar(100) --,StudyAndTrainingLoanRepayment int --,StudentFinancialScheme int ,BatchID int ) DECLARE @Results Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,EmployeeID Int ,IsETP Bit Not Null ,Code Char(3) Null ,Gross Money Not Null ,Tax Money Not Null ,BatchID int ) DECLARE @EmpData TABLE ( EmployeeID int ,RemunerationIncomeType int ,RemunerationIncomeType_Desc VARCHAR(100) ,ArrangementBasis int ,ArrangementBasis_Desc VARCHAR(100) ,RemunerationABN varchar(100) ,RemunerationABN_Desc VARCHAR(100) ,StudyLoan int ,StudyLoan_Desc VARCHAR(100) ,StudentFinancialScheme int ,StudentFinancialScheme_Desc VARCHAR(100) ,DeclarationDate date ) DECLARE @MaxDateofPayment Table ( MaxEntryDate DateTime ,EmployeeID Int primary key ) DECLARE @ResultsXMl TABLE ( EmployeeID int ,XMLResult XML ) DECLARE @FinancialYearStartDate Datetime DECLARE @AdminStartDate Datetime SELECT @AdminStartDate = StartDate FROM dbo.Admin WHERE @AdminID = @AdminID SELECT @FinancialYearStartDate = dbo.uFnFinancialYearStartDate(@DateTo) DECLARE @BMSId Varchar(100) DECLARE @BMSUID Varchar(100) DECLARE @CAC Varchar(100) DECLARE @PayerName Varchar(1105) DECLARE @PayerBranch Varchar(10) DECLARE @AdminAddress Varchar(760) DECLARE @ABN_WPN TABLE ( AdminID Int ,ABN Varchar(2000) ,WPN Varchar(2000) ,ABN_WPN Varchar(2000) ) CREATE TABLE dbo.#Data ( ID Int Not Null ) --- ABN WPN DECLARE @MaxWpn Int DECLARE @MaxWpnVal varchar(2000) DECLARE @MaxABN Int DECLARE @MaxABNVal varchar(2000) SELECT @MaxWpn = cpWPN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID SELECT @MaxWpnVal = Replace(cpWPN.PropertyValue,' ','') FROM CustomProperty cpWPN WHERE cpWPN.CustomPropertyID = @MaxWpn SELECT @MaxABN = cpABN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID SELECT @MaxABNVal = Replace(cpABN.PropertyValue,' ','') FROM CustomProperty cpABN WHERE cpABN.CustomPropertyID = @MaxABN INSERT INTO @ABN_WPN (AdminID,WPN,ABN,ABN_WPN) SELECT @AdminID,@MaxWpnVal,@MaxABNVal,ISNULL(@MaxWpnVal,@MaxABNVal) SELECT @CAC = Isnull(cpBranch.PropertyValue,'1') FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) and acp.AdminID = @AdminID AND ISNULL(cpBranch.AdminTypeID,@AdminTypeID) = @AdminTypeID SELECT @BMSUID = Setting from dbo.AdminSetting where adminid = @AdminID AND SettingID = 30010 SET @BMSId = @BMSUID + ISNULL('-' + convert(varchar(50),@MaxABN),'') + ISNULL('-' + @CAC,'') -- ***** POPULATE TMP Tables ***** SELECT @PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE acp.AdminID = @AdminID SELECT @PayerBranch = cpBranch.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) WHERE acp.AdminID = @AdminID Set @AdminAddress = (Select ad.Address + CHAR(13) + ISNULL(ad.City + ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode + ' ','') + ISNULL(ad.Country + ' ','') FROM Admin_Address aa INNER JOIN Address ad ON aa.AddressID = ad.AddressID AND ad.IsMailing = 1 WHERE aa.AdminID = @AdminID) IF NOT @EmployeeInClause IS NULL EXEC dbo.usp_Split @EmployeeInClause ELSE INSERT INTO dbo.#Data SELECT EmployeeID FROM Employee WHERE AdminID = @AdminID -- Tmp DATA -- dividend payments INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = c.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.Entry ent ON ent.EntryID = se.EntryID INNER JOIN dbo.Creditor c ON se.CreditorID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data d ON d.ID = e.EmployeeID INNER JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.Entrytype not in (100,101) AND div.BankAccount_AccountID IS NOT NULL AND se.LiabilityID Is Null --AND ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) -- direct payments INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID LEFT JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND NOT se.EntryID in (Select EntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND div.DividendID IS NULL AND se.LiabilityID Is Null AND NOT ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) --FBT INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) * - 1 ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = 1 ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @DateFROM AND @DateTO AND ((@BatchId Is NULL) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) --AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.LiabilityID Is Null AND ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) AND se.EmployeeID IS NOT NULL -- AND ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) --select dbo.ufnAccountdescription(AccountID),* from @SubEntry -- Calc Transaction totals INSERT INTO @Entry SELECT EntryID ,BatchID ,TransTotal = Sum(-TransTotal) ,HasHeader =1 FROM @SubEntry WHERE IsHeader = 1 GROUP BY EntryID,BatchID -- add entries that haven;t been assigned to employee INSERT INTO @Entry SELECT se.EntryID ,se.BatchID ,TransTotal = 0 ,HasHeader = 0 FROM @SubEntry se LEFT JOIN @Entry e ON e.EntryID = se.EntryID WHERE se.IsHeader = 0 AND e.EntryID IS NULL GROUP BY se.EntryID,se.BatchID UPDATE @Entry SET TransTotal = (Direction * Total * -1) FROM @Entry e INNER JOIN dbo.SubEntry se ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE HasHeader = 0 AND acc.AccountGroupID in (3000,3010) INSERT INTO @TaxTable ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString --,CommaPos1 ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,Direction = CASE WHEN se.TransTotal >= 0 THEN 1 ELSE -1 END ,EmployeeID = se.EmployeeID ,TaxString = se.Reference2 --,CommaPos1 = Charindex(',',se.Reference2) FROM @SubEntry se WHERE se.Reference2 Is Not Null Order By EmployeeID,EntryID,SubEntryID -- ********************************************** -- CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET TaxString = Replace(TaxString,'A0','A|0') UPDATE @TaxTable SET TaxString = Replace(TaxString,'A=T','T') UPDATE @TaxTable SET TaxString = Replace(TaxString,'ETP|','ETP=R|') UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Replace ( Substring( TaxString,charindex('E-',TaxString) - 16,20) , '|' , '' ) ,0 ) WHERE charindex('E-',TaxString) > 1 UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Substring( TaxString,charindex('E-',TaxString) - 17,21) ,'' ) WHERE charindex('E-',TaxString) > 1 -- ********************************************** -- END CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET CommaPos1 = Charindex(',',TaxString) -- ********************************************** -- SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** Update @TaxTable SET TaxString2 = SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ,CommaPos2 = Charindex(',',SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ) WHERE CommaPos1 > 0 Update @TaxTable SET TaxString3 = SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ,CommaPos3 = Charindex(',',SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ) WHERE CommaPos2 > 0 Update @TaxTable SET TaxString4 = SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ,CommaPos4 = Charindex(',',SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ) WHERE CommaPos3 > 0 Update @TaxTable SET TaxString5 = SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ,CommaPos5 = Charindex(',',SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ) WHERE CommaPos4 > 0 -- ********************************************** -- END SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos1 = 0 THEN TaxString ELSE SubString(TaxString, 1, CommaPos1 - 1) END ,0,0,0 FROM @TaxTable INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos2 = 0 THEN TaxString2 ELSE SubString(TaxString2, 1, CommaPos2 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos1 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos3 = 0 THEN TaxString3 ELSE SubString(TaxString3, 1, CommaPos3 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos2 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos4 = 0 THEN TaxString4 ELSE SubString(TaxString4, 1, CommaPos4 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos3 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos4 > 0 UPDATE @TaxTable2 SET PipePos1 = Charindex('|',TaxString) UPDATE @TaxTable2 SET PipePos2 = Charindex('|',TaxString, PipePos1 + 1) UPDATE @TaxTable2 SET PipePos3 = Charindex('|',TaxString, PipePos2 + 1) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP = CASE WHEN Charindex('ETP=R',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=R',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP=O',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=O',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP',TaxString) > 0 THEN Convert(Bit, Charindex('ETP',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) ELSE 0 END ,Code = CASE WHEN Len(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1))) = 3 THEN Null ELSE Right(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)),1) END ,Gross = Convert(Money, SubString(TaxString, PipePos2 + 1, PipePos3 - (PipePos2 + 1))) * Direction ,Tax = Convert(Money, SubString(TaxString, PipePos3 + 1, Len(TaxString) - (PipePos3))) * Direction FROM @TaxTable2 -- SGC INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = EntryID ,SubEntryID = SubEntryID ,Account_AccountID = Account_AccountID ,EntryDate = EntryDate ,EmployeeID = EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.CreditorClaimTypeID in (255,280) --255 AND acc.AccountGroupID = 4016 --2030 AND se.EntryID in (Select EntryID from @Results) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,EmployeeID = se.EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = -se.TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.AccountGroupID in (4016,4017) AND se.EntryID in (Select EntryID from @Results) AND NOT se.EntryID in (Select EntryID from @Results WHERE CODE = 'SGC') UPDATE @Results SET BatchID = se.BatchID FROM @Results r INNER JOIN @SubEntry se ON se.EntryID = r.EntryID /* Select * from @SubEntry Select * from @TaxTable Select * from @TaxTable2 Select * from @Results return 0 */ -- Detemine if there's prior year entries for the employee DECLARE @PriorYearPayments TABLE ( EmployeeID INT ,Account_AccountID INT ,SubEntryID INT ,EntryDate DATETIME ,Reference2 varchar(250) ,Ref2HasR int ,Ref2HasO int ) INSERT INTO @PriorYearPayments SELECT EmployeeID = se.EmployeeID ,Account_AccountID = se.Account_AccountID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Reference2 = se.Reference2 ,Ref2HasR = CASE WHEN Charindex('ETP=R|',se.Reference2) > 0 OR Charindex('ETP=|',se.Reference2) > 0 THEN 1 ELSE 0 END ,Ref2HasO = CASE WHEN Charindex('ETP=O|',se.Reference2) > 0 THEN 1 ELSE 0 END FROM SubEntry se INNER JOIN @SubEntry se1 ON se.EmployeeID = se1.EmployeeID AND se.Account_AccountID = se1.Account_AccountID AND se.EntryDate < dbo.uFnFinancialYearStartDate(@DateFrom) AND ISNULL(se.IsBatchPosting,0) = 0 UPDATE @Results SET Code = Replace(r.Code, 'R','S') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'R' UPDATE @Results SET Code = Replace(r.Code, 'O','P') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'O' -- YTD DECLARE @STP_DETAIL_YTD TABLE ( EmployeeID int ,SubentryID int ,Amount Money ,AccountID int ,EntryDate datetime ) INSERT INTO @STP_DETAIL_YTD SELECT EmployeeID = se.EmployeeID ,SubentryID = se.SubentryID ,Amount = SUM(se.TransTotal) ,AccountID = se.AccountID ,EntryDate = se.EntryDate FROM @SubEntry se WHERE se.EmployeeID IS NOT NULL GROUP BY se.EmployeeID ,se.SubentryID ,se.AccountID ,se.EntryDate -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = r.EmployeeID ,EntryID = r.EntryID --CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,SubEntryID = CASE WHEN @ShowEntry = 0 THEN r.SubEntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE r.EntryDate END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE r.Code WHEN 'G' THEN r.Gross ELSE 0 END) ,GrossPayment = Sum(CASE r.Code WHEN 'G' THEN r.Gross ELSE 0 END) ,LumpSumA = Sum(CASE r.Code WHEN 'A' THEN r.Gross ELSE 0 END) ,LumpSumAT = Sum(CASE r.Code WHEN 'T' THEN r.Gross ELSE 0 END) ,LumpSumAType = CASE r.Code WHEN 'A' THEN 'R' ELSE NULL END ,LumpSumB = Sum(CASE r.Code WHEN 'B' THEN r.Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = CASE IsETP WHEN 1 THEN r.Code ELSE '' END ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = r.Batchid ,IsDividend = 1 FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE r.EntryDate >= @DateFrom AND r.EntryDate <= @DateTO GROUP BY r.EmployeeID ,r.EntryID --CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 0 THEN r.SubEntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE r.EntryDate END ,r.Code ,r.IsETP ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.TerminationDate , e.TaxFlags ,e.WagesPeriod_LookupID ,r.Batchid -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = se.EmployeeID ,EntryID = se.EntryID --CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,SubEntryID = CASE WHEN @ShowEntry = 0 THEN se.SubEntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN ( acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 ) THEN -TransTotal --WHEN -- ( -- acc.AccountGroupID in (2030) -- AND acc.CreditorClaimTypeID = 255 -- ) --THEN -- TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN -TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN -TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = '' ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = se.BatchID ,IsDividend = 0 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE ( (ag.AccountGroupID in (6020,2030,2040,4012,4013)) OR (ag.AccountGroupID in (4040) AND acc.Flags IS NOT NULL) OR (ag.AccountGroupID in (4016, 4017) AND NOT isnull(acc.flags,0) & 8388608 = 8388608) ) AND se.EntryID NOT IN (select EntryID FROM @Results) AND se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,se.EmployeeID ,se.EntryID --CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,CASE WHEN @ShowEntry = 0 THEN se.SubEntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate ELSE NULL END ,se.EntryDate ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.TerminationDate ,e.TaxFlags ,e.WagesPeriod_LookupID ,se.BatchID /* select dbo.uFnAccountDescription(AccountID),* from @subentry se WHERE se.SubEntryID NOT IN (select SubEntryID FROM @Results) and se.batchid = @BatchID select dbo.uFnAccountDescription(AccountID),* from @subentry se WHERE se.SubEntryID NOT IN (select SubEntryID FROM @Results) and se.batchid = @BatchID select * from @EmpPayments where batchid = @BatchID */ -- MAX Date of Payment for ETP --IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN INSERT INTO @MaxDateofPayment SELECT Max(EntryDate) ,EmployeeID FROM @subentry WHERE NOT EmployeeID IS NULL GROUP BY EmployeeID END -- YEAR TO DATE -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPaymentsAll SELECT EmployeeID = r.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,EntryDate = MAX(EntryDate) ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,GrossPayment = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,LumpSumA = Sum(CASE Code WHEN 'A' THEN Gross ELSE 0 END) ,LumpSumAT = Sum(CASE Code WHEN 'T' THEN Gross ELSE 0 END) ,LumpSumAType = NULL ,LumpSumB = Sum(CASE Code WHEN 'B' THEN Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = NULL ,TaxFlags = NULL ,WagesPeriod_LookupID = NULL ,BatchID = CASE WHEN @ShowEntry = 1 THEN r.Batchid ELSE NULL END FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE r.EntryDate >= @FinancialYearStartDate AND r.EntryDate <= @DateTO GROUP BY r.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END /* , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate ELSE NULL END */ ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.TerminationDate , CASE WHEN @ShowEntry = 1 THEN r.Batchid ELSE NULL END -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** INSERT INTO @EmpPaymentsAll SELECT EmployeeID = se.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,EntryDate = MAX(EntryDate) ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.TerminationDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN 0 WHEN -- lump sum ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN -- lump sum ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 THEN -TransTotal --WHEN -- ( -- acc.AccountGroupID in (2030) -- AND acc.CreditorClaimTypeID = 255 -- ) --THEN -- TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN -TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN -TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN -TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN -TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = NULL ,TaxFlags = NULL ,WagesPeriod_LookupID = NULL ,Batchid = CASE WHEN @ShowEntry = 1 THEN se.Batchid ELSE NULL END FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE ( (ag.AccountGroupID in (6020,2030,2040,4012,4013)) OR (ag.AccountGroupID in (4040) ANd acc.Flags IS NOT NULL) OR (ag.AccountGroupID in (4016, 4017) AND NOT isnull(acc.flags,0) & 8388608 = 8388608) ) AND ( se.EntryID NOT IN (select EntryID FROM @Results) OR se.SubEntryID in (select EntryID FROM @Results WHERE Code = 'SGC') ) AND se.EntryDate >= @FinancialYearStartDate AND se.EntryDate <= @DateTO GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,se.EmployeeID ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.TerminationDate ,CASE WHEN @ShowEntry = 1 THEN se.Batchid ELSE NULL END /* select * from employee Select * from @TaxTable Select * from @TaxTable2 */ INSERT INTO @EmpPaymentsSUM SELECT EmployeeID = ep.EmployeeID ,EntryID = ep.EntryID ,EntryDate = MAX(ep.EntryDate) ,Payee = ep.Payee ,EmployeeDateStart = ep.EmployeeDateStart ,EmployeeDateEnd = ep.EmployeeDateEnd ,EmployeeCommenceDate = CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,EmployeeAddressID = ep.EmployeeAddressID ,Wages = Sum(ep.Wages) ,GrossPayment = Sum(ep.GrossPayment) ,LumpSumA = Sum(ep.LumpSumA) ,LumpSumAT = Sum(ep.LumpSumAT) ,LumpSumB = Sum(ep.LumpSumB) ,LumpSumD = Sum(ep.LumpSumD) ,LumpSumE = Sum(ep.LumpSumE) ,SuperSGC = Sum(ep.SuperSGC) ,ReportableSuper = Sum(ep.ReportableSuper) ,ExcludeFromOTE = Sum(ep.ExcludeFromOTE) ,NonTaxableAllowances = Sum(ep.NonTaxableAllowances) ,FBTTaxable = Sum(ep.FBTTaxable) ,FBTNonTaxable = Sum(ep.FBTNonTaxable) ,DeductWorkPlaceGiving = Sum(ep.DeductWorkPlaceGiving) ,DeductUnionFees = Sum(ep.DeductUnionFees) ,CommunityDevelopmentEmploymentProject = Sum(ep.CommunityDevelopmentEmploymentProject) ,ExemptForeignEmploymentIncome = Sum(ep.ExemptForeignEmploymentIncome) ,Allow_Car = Sum(ep.Allow_Car) ,Allow_Trans = Sum(ep.Allow_Trans) ,Allow_Laundry = Sum(ep.Allow_Laundry) ,Allow_Meals = Sum(ep.Allow_Meals) ,Allow_Travel = Sum(ep.Allow_Travel) ,Allow_Other = Sum(ep.Allow_Other) ,Tax = Sum(ep.Tax) ,ForeignWithholding = Sum(ep.ForeignWithholding) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) ,0 -- } ,0 -- ,0 -- history records ,0 -- } ,HasAllowanceEntries = CASE WHEN Sum(ep.NonTaxableAllowances) > 0 THEN 1 ELSE 0 END ,ETPCode = CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE ep.ETPCode END ,TaxFlags = ep.TaxFlags ,WagesPeriod_LookupID = ep.WagesPeriod_LookupID ,EmployeeCountryCode = NULL ,PrevLodgementETPDate = NULL ,PrevLodgementINBDate = NULL ,RemunerationIncomeType_LookupID = NULL ,DeclarationSignatureDate = NULL ,RemunerationABN = NULL ,BatchID = ep.BatchID FROM @EmpPaymentsAll ep /* --JO 14/7/16 --Duplication where ETP with 0|0 WHERE (Wages > 0 OR GrossPayment <> 0 OR LumpSumA <> 0 OR LumpSumB <> 0 OR LumpSumD <> 0 OR LumpSumE <> 0 OR SuperSGC <> 0 OR ReportableSuper <> 0 OR NonTaxableAllowances <> 0 OR FBTTaxable <> 0 OR FBTNonTaxable <> 0 OR DeductWorkPlaceGiving <> 0 OR DeductUnionFees <> 0 OR Tax <> 0 OR ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0) */ GROUP BY ep.EmployeeID ,ep.EntryID , CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,ep.Payee ,ep.EmployeeAddressID--, ep.EntryDate ,ep.EntryID, ep.Memo , CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE ep.ETPCode END ,ep.EmployeeDateStart ,ep.EmployeeDateEnd ,ep.TaxFlags ,ep.WagesPeriod_LookupID ,ep.BatchID --Employee Data SET ANSI_WARNINGS ON INSERT INTO @EmpData ( EmployeeID ,RemunerationIncomeType ,ArrangementBasis ,RemunerationABN ,StudyLoan ,StudentFinancialScheme ,DeclarationDate ) SELECT EmployeeID = ed.EmployeeID ,RemunerationIncomeType = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationIncomeType/@Value)[1]', 'int') ,'') ,ArrangementBasis = ISNULL(ed.Data.value('(/Data/Tax/Employment/ArrangementBasis/@Value)[1]', 'int') ,'') ,RemunerationABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') ,StudyLoan = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudyLoan/@Value)[1]', 'int') ,'') ,StudentFinancialScheme = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudentFinancialScheme/@Value)[1]', 'int') ,'') ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'date') ,'') FROM @EmpPaymentsSUM eps INNER JOIN dbo.EmployeeData ed ON eps.EmployeeID = ed.EmployeeID SET ANSI_WARNINGS OFF UPDATE @EmpData SET RemunerationIncomeType_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.RemunerationIncomeType = lu.LookupID UPDATE @EmpData SET ArrangementBasis_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.ArrangementBasis = lu.LookupID UPDATE @EmpData SET RemunerationABN = NULL WHERE RemunerationABN = '' UPDATE @EmpData SET RemunerationABN_Desc = 'Contractor ABN' WHERE RemunerationABN IS NOT NULL UPDATE @EmpData SET StudyLoan_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.StudyLoan = lu.LookupID UPDATE @EmpData SET DeclarationDate = NULL WHERE DeclarationDate = '19000101' UPDATE @EmpPaymentsSUM SET RemunerationIncomeType_LookupID = ed.RemunerationIncomeType FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET DeclarationSignatureDate = ed.DeclarationDate FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET RemunerationABN = ed.RemunerationABN FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID DECLARE @DEDUCTIONS TABLE ( EmployeeID int ,DeductionType varchar(30) ,DeductionAmount Money ) INSERT INTO @DEDUCTIONS SELECT EmployeeID ,'Workplace Giving' ,DeductWorkPlaceGiving FROM @EmpPaymentsSUM eps WHERE DeductWorkPlaceGiving <> 0 UNION SELECT EmployeeID ,'Fees' ,DeductUnionFees FROM @EmpPaymentsSUM eps WHERE DeductUnionFees <> 0 DECLARE @Allows TABLE ( EmployeeID int ,AllowType varchar(30) ,AllowAmount Money ,AllowTypeOtherDesc Varchar(40) ) INSERT INTO @Allows (EmployeeID ,AllowType ,AllowAmount) SELECT EmployeeID ,'Car' ,Allow_Car FROM @EmpPaymentsSUM eps WHERE Allow_Car <> 0 UNION SELECT EmployeeID ,'Transport' ,Allow_Trans FROM @EmpPaymentsSUM eps WHERE Allow_Trans <> 0 UNION SELECT EmployeeID ,'Laundry' ,Allow_Laundry FROM @EmpPaymentsSUM eps WHERE Allow_Laundry <> 0 UNION SELECT EmployeeID ,'Meals' ,Allow_Meals FROM @EmpPaymentsSUM eps WHERE Allow_Meals <> 0 UNION SELECT EmployeeID ,'Travel' ,Allow_Travel FROM @EmpPaymentsSUM eps WHERE Allow_Travel <> 0 -- other allowances for expected deductible expenses INSERT INTO @Allows SELECT EmployeeID = se.EmployeeID ,AllowType = 'Other' ,AllowAmount = Sum(se.TransTotal) ,AllowTypeOtherDesc = acc.Reference3 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 Group BY se.EmployeeID, acc.Reference3 /* select se.* ,AllowTypeOtherDesc = acc.Reference3 ,ISNULL(acc.Flags,0) & 2097152 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 select * from @Allows */ -- Work out whether the emp had amended ETP/Individual lodgements for the period or not Update @EmpPaymentsSUM SET HasLodgementETPThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 --AND @ETP = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementETP = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 --AND @ETP = 1 Update @EmpPaymentsSUM SET HasLodgementIndividualThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 --AND @IsIndividual = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementIndividual = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 --AND @IsIndividual = 1 --- **** REPORT DATA **** IF @ShowEntry = 1 BEGIN SELECT ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,EmployeeID = e.EmployeeID ,EntryID = ep.EntryID ,EntryDate = ep.EntryDate ,TransTotal = ent.TransTotal ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeAddress = CASE WHEN Ad.AddressID IS NULL THEN @AdminAddress ELSE ad.Address + ' ' + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(ad.Country,'') END ,EmployeeTFN = CASE WHEN e.TFN IS NULL THEN '**TFN IS BLANK ' WHEN NOT (ISNUMERIC(replace(e.TFN,' ','')) = 1) THEN '** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(replace(e.TFN,' ','')) = 9 THEN '** TFN ' + e.TFN + ' NOT 9 digit' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE e.TFN END ,Payee = ISNULL(ep.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,Memo = '' ,Wages = ep.Wages ,GrossPayment = ep.GrossPayment ,LumpSumA = ep.LumpSumA + ep.LumpSumAT ,LumpSumB = ep.LumpSumB ,LumpSumD = ep.LumpSumD ,LumpSumE = ep.LumpSumE ,OrdinaryTimeEarnings = ep.Wages - ep.ExcludeFromOTE ,SuperSGC = ep.SuperSGC ,ReportableSuper = ep.ReportableSuper ,NonTaxableAllowances = ep.NonTaxableAllowances ,OtherIncome = '' ,Tax = ep.Tax ,ExcludeFromOTE = ep.ExcludeFromOTE ,FBTTaxable = ep.FBTTaxable ,FBTNonTaxable = ep.FBTNonTaxable ,DeductWorkPlaceGiving = ep.DeductWorkPlaceGiving ,DeductUnionFees = ep.DeductUnionFees ,CommunityDevelopmentEmploymentProject = ep.CommunityDevelopmentEmploymentProject ,ExemptForeignEmploymentIncome = ep.ExemptForeignEmploymentIncome ,Allow_Car = ep.Allow_Car ,Allow_Trans = ep.Allow_Trans ,Allow_Laundry = ep.Allow_Laundry ,Allow_Meals = ep.Allow_Meals ,Allow_Travel = ep.Allow_Travel ,Allow_Other = ep.Allow_Other ,TAX = ep.TAX ,ForeignWithholding = ep.ForeignWithholding ,ETPTaxable = ep.ETPTaxable ,ETPNonTaxable = ep.ETPNonTaxable ,ETPTax = ep.ETPTax ,ETPCode = ep.ETPCode ,OtherDeductions = '' --ep.OtherDeductions ,TotalDeductions = ep.DeductWorkPlaceGiving + ep.DeductUnionFees ,Other = ep.FBTTaxable + ep.FBTNonTaxable + ep.ExcludeFromOTE + ep.CommunityDevelopmentEmploymentProject + ep.ExemptForeignEmploymentIncome + ep.ForeignWithholding ,PSIssuedDate = NULL ,ETPPaymentDate = NULL ,StartDate = ep.EmployeeDateStart ,EndDate = ep.EmployeeDateEnd ,IncomeType = CASE WHEN ep.RemunerationIncomeType_LookupID = 109201 THEN 'CDEP' WHEN ep.RemunerationIncomeType_LookupID = 109202 THEN 'Voluntary Agree' WHEN ep.RemunerationIncomeType_LookupID = 109203 THEN 'Labour Hire' WHEN ep.RemunerationIncomeType_LookupID = 109204 THEN 'Regulation' WHEN ep.RemunerationIncomeType_LookupID = 109205 THEN 'Joint Petroleum' WHEN ep.RemunerationIncomeType_LookupID = 109206 THEN 'Working Holiday' WHEN ep.RemunerationIncomeType_LookupID = 109207 THEN 'Foreign Resident' ELSE NULL END ,BatchID = ep.BatchID FROM @EmpPaymentsSUM ep INNER JOIN @Entry ent ON ep.EntryID = ent.EntryID INNER JOIN Employee e ON ep.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID INNER JOIN dbo.Address ad ON ad.AddressID = ep.EmployeeAddressID --CROSS --APPLY dbo.tblfn_SplitAddressBody (ad.Address) ab LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID WHERE ((@BatchID IS NULL) OR (ent.BatchID = @BatchID)) --WHERE ((@ETP = 0) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) > 0)) --AND epsh.EmployeeID = eps.EmployeeID ORDER BY e.LastName, e.FirstName, e.Title, EntryDate, e.EmployeeID END ELSE --IF @ShowEntry = 0 BEGIN DECLARE @STP_RESULTS TABLE ( STPFieldName Varchar(100) ,FieldName Varchar(100) ,subFieldName Varchar(100) ,EmployeeID int ,EmployeeSurname Varchar(100) ,EmployeeFirstName Varchar(100) ,EntryDate datetime ,Memo Varchar(1000) ,PayCodeDesc Varchar(100) ,Amount Money ,AmountYTD Money ,BatchID int ,EntryID int ,DisplayOrder int ) INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP47' ,FieldName = 'Gross Payments' ,subFieldName = NULL --lookup ,EmployeeID = se.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = se.EntryID ,DisplayOrder = 47 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ( acc.AccountGroupID in (6020) OR acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) ) AND NOT ( ISNULL(acc.Flags,0) & 4194304 = 4194304 OR ISNULL(acc.Flags,0) & 2097152 = 2097152 OR ISNULL(acc.Flags,0) & 262144 = 262144 OR ISNULL(acc.Flags,0) & 524288 = 524288 OR ISNULL(acc.Flags,0) & 33554432 = 33554432 OR ISNULL(acc.Flags,0) & 67108864 = 67108864 ) -- Voluntary Agreements --PAYEVNTEMP57 --PAYEVNTEMP115 -- Labour hire --PAYEVNTEMP48 --PAYEVNTEMP114 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = -ep.Tax --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP84' ,FieldName = 'Super Liability SGC' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.SuperSGC --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 84 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4016,4017) AND ep.SuperSGC <> 0 AND NOT ISNULL(acc.Flags,0) & 4194304 = 4194304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP111' ,FieldName = 'Reportable Super' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ReportableSuper ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 84 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ISNULL(acc.Flags,0) & 4194304 = 4194304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP61' ,FieldName = 'Exclude From OTE' ,subFieldName = NULL --lookup ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ExcludeFromOTE --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 61 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND ISNULL(acc.Flags,0) & 33554432 = 33554432 AND ep.ExcludeFromOTE <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Car --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109301 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Trans --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109302 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Laundry --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109303 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Meals --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109304 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Travel --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109305 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP7' ,FieldName = 'Allowance Type' ,subFieldName = lu.Description ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = acc.Reference3 ,PayCodeDesc = acc.Description ,Amount = ep.Allow_Other --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 7 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID INNER JOIN dbo.Lookup lu ON acc.LookupID3 = lu.LookupID AND acc.LookupID3 = 109306 WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND acc.LookupID3 = 109306 /* INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP223' ,FieldName = 'Payee Total FEI PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = NULL --,PayCodeDesc = acc.Description ,Amount = ep.ForeignWithholding ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 223 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 */ INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP125' ,FieldName = 'Payee FBT Taxable' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.FBTTaxable --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 125 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID AND ep.FBTTaxable <> 0 INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.Account_AccountID WHERE se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP126' ,FieldName = 'Payee FBT Exempt' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = NULL --,PayCodeDesc = acc.Description ,Amount = ep.FBTNonTaxable --ep.Wages ,AmountYTD = -y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 126 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID AND ep.FBTNonTaxable <> 0 INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP87' ,FieldName = 'Payee Deduction' ,subFieldName = 'Giving' ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.DeductWorkPlaceGiving --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 87 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP87' ,FieldName = 'Payee Deduction' ,subFieldName = 'Union Fees' ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.DeductUnionFees --ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 87 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP49' ,FieldName = 'Payee Exempt Foreign Income' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.ExemptForeignEmploymentIncome--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 49 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP60' ,FieldName = 'Payee CDEP Payment' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = ep.CommunityDevelopmentEmploymentProject--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 60 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 -- PAYEVNTEMP112 -- This is the value, during the relevant period, for the amount withheld under the Pay As You Go (PAYG) arrangement. --PAYEVNTEMP132 -- PAYEVNTEMP237 --This is a year to date credit available to a taxpayer who received foreign income that is taxable in Australia and for which they paid (or are taken to have paid) foreign tax. This amount includes credits for foreign source capital gains. INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP237' ,FieldName = 'Foreign Withholding Tax' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = se.EntryDate ,Memo = se.Memo ,PayCodeDesc = acc.Description ,Amount = -ep.ForeignWithholding--ep.Wages ,AmountYTD = y.Amount ,BatchID = se.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 237 FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN @EmpPayments ep ON ep.SubentryID = se.SubentryID AND ep.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN @STP_DETAIL_YTD y ON y.SubentryID = se.SubentryID AND y.EmployeeID = se.EmployeeID AND y.AccountID = se.AccountID WHERE se.IsHeader = 0 AND se.EmployeeID IS NOT NULL AND acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 -- Dividends INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP47' ,FieldName = 'Gross Payments' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Dividend' --,PayCodeDesc = acc.Description ,Amount = ep.Wages ,AmountYTD = ytd.Wages ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.Wages <> 0 WHERE ep.Wages <> 0 AND ep.IsDividend = 1 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'PAYG withheld from Dividend' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.TAX ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 47 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.Wages <> 0 WHERE ep.Wages <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP52' ,FieldName = 'Payee Lump Sum A' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum A' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumA ,AmountYTD = ytd.LumpSumA ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumA <> 0 WHERE ep.LumpSumA <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum A' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumA <> 0 WHERE ep.LumpSumA <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP52' ,FieldName = 'Payee Lump Sum AT' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum AT' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumAT ,AmountYTD = ytd.LumpSumAT ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumAT <> 0 WHERE ep.LumpSumAT <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = ep.LumpSumAType ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum AT' --,PayCodeDesc = acc.Description ,Amount = -ep.TAX ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumAT <> 0 WHERE ep.LumpSumAT <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP54' ,FieldName = 'Payee Lump Sum B' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee Lump Sum B' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumB ,AmountYTD = ytd.LumpSumB ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 54 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumB <> 0 WHERE ep.LumpSumB <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum B' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 54 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumB <> 0 WHERE ep.LumpSumB <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP55' ,FieldName = 'Payee Lump Sum D' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum D' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumD ,AmountYTD = ytd.LumpSumD ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 55 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumD <> 0 WHERE ep.LumpSumD <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax withheld Lump Sum D' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 55 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumD <> 0 WHERE ep.LumpSumD <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP56' ,FieldName = 'Payee Lump Sum E' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Lump Sum E' --,PayCodeDesc = acc.Description ,Amount = ep.LumpSumE ,AmountYTD = ytd.LumpSumE ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 56 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumE <> 0 WHERE ep.LumpSumE <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP130' ,FieldName = 'Payee Total INB PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Tax Withheld Lump Sum E' --,PayCodeDesc = acc.Description ,Amount = -ep.Tax ,AmountYTD = -ytd.Tax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 56 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.LumpSumE <> 0 WHERE ep.LumpSumE <> 0 AND ep.IsDividend = 1 AND ep.TAX <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP84' ,FieldName = 'Super Liability Amount' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Superannuation' --,PayCodeDesc = acc.Description ,Amount = ep.SuperSGC ,AmountYTD = ytd.SuperSGC ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 78 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.SuperSGC <> 0 WHERE ep.SuperSGC <> 0 AND ep.IsDividend = 1 -- ETP INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP51' ,FieldName = 'Payee ETP Taxable' ,subFieldName = ep.ETPCode ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP Taxable' --,PayCodeDesc = acc.Description ,Amount = ep.ETPTaxable ,AmountYTD = ytd.ETPTaxable ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 51 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND Ytd.ETPTaxable <> 0 WHERE ep.ETPTaxable <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP50' ,FieldName = 'Payee ETP Tax Free' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP Tax Free' --,PayCodeDesc = acc.Description ,Amount = ep.ETPNonTaxable ,AmountYTD = ytd.ETPNonTaxable ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 50 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.ETPNonTaxable <> 0 WHERE ep.ETPNonTaxable <> 0 INSERT INTO @STP_RESULTS SELECT STPFieldName = 'PAYEVNTEMP117' ,FieldName = 'Payee ETP PAYGW' ,subFieldName = NULL ,EmployeeID = ep.EmployeeID ,EmployeeSurname = e.LastName ,EmployeeFirstName = e.FirstName ,EntryDate = ep.EntryDate ,Memo = ep.Memo ,PayCodeDesc = 'Payee ETP PAYGW' --,PayCodeDesc = acc.Description ,Amount = -ep.ETPTax ,AmountYTD = -ytd.ETPTax ,BatchID = ep.BatchID ,EntryID = ep.EntryID ,DisplayOrder = 52 FROM @EmpPayments ep INNER JOIN dbo.Employee e ON e.EmployeeID = ep.EmployeeID INNER JOIN @EmpPaymentsSUM ytd ON ytd.EmployeeID = ep.EmployeeID AND ytd.ETPTax <> 0 WHERE ep.ETPTax <> 0 Select *, BMSId = @BMSId FROM @STP_RESULTS WHERE ((@BatchID IS NULL) OR (BatchID = @BatchID)) ORder By EntryID,EmployeeId,DisplayOrder /* Select dbo.uFnAccountDescription (Account_AccountID),* FROM @SubEntry Select * FROM @EmpPayments */ END SET NOCOUNT OFF SET ANSI_WARNINGS ON GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_EmployeePaymentDetail TO [insol2_users] GO If exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_EmployeePaymentSummary]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].repsp_EmployeePaymentSummary GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_EmployeePaymentSummary @AdminID Int ,@DateFrom Datetime ,@DateTo Datetime ,@EmployeeInClause Text = Null ,@ShowEntry Bit = 0 -- depends on report ,@ETP Bit = NULL ,@AdminTypeID Int = Null ,@IsIndividual Bit = 1 ,@ElectronicOutput Bit = 0 ,@SelectEmployees Bit = 0 ,@LodgementID Int = Null ,@UpdatedBy Varchar(75) = Null ,@UserID Int = Null -- NOT NULL ,@BatchID Int = Null ,@PayPeriodDateStart Datetime = Null ,@PayPeriodDateEnd Datetime = Null ,@IsFinal Varchar(5) = 'false' -- true/false ,@Test int = 0 ,@TotalTax Money = Null OUTPUT ,@TotalPaid Money = Null OUTPUT ,@TransLastDate Date = Null OUTPUT --,@IsAmendment Bit = 0 --Indicator Varchar(1) = 'O' -- 'A' = amend AS SET NOCOUNT ON --SET ANSI_WARNINGS OFF /* Author: Stewart McLeod Date: 20 Apr 2007 Purpose: Notes: Revision History: 7/4/09 SM - Add the output to a table via flag @ReturnTable Called by proc repsp_EmployeePaymentSummaryElectronic 10/4/09 SM - Address was using practice 26/5/09 SM - Add Is Individual 10/06/09 JO - Add Select Employees 30/10/09 SM - Integrate Electronic Payment Summary Output 25/11/09 SM - updated the ATO plain paper reference SM - updated the Lump Sum Payment type 13/07/10 SM - clean the data remove exponential function for zero values SM - usually exponential functions are 20 char cater for a 19 digit exponential function take out clean the data remove the 'A0' replace with 'A|0' 21/07/10 SM - updated for v10, payer's address, payee's address replace double instances of 'ƒ' SM - v10 update 21/07/10 SM - updated for v10, payer's address, payee's address replace double instances of 'ƒ' SM - v10 update 02/12/10 SM - add @EmpPS - include employees receieving patments for the period (contained in @EmpPaymentsSUM) - exclude emps already having a PS for the period 01/03/11 SM - add NonTaxableAllowances 16/03/11 SM - add Reportable Employer Super Contribs 04/08/11 SM - Salary sacrifice changes (add Flag for sal sac account) 08/08/11 SM - Add Signatory1 field 24/10/2011 SM - incorrect join for Signatory1 14/11/2011 SM - now inserts a line feed after the FILE-TOTAL line in all electronic outputs not just v8 12/03/2012 SM - change 'T' test to 'P' production sm - add financial year function 15/06/2012 SM - duplic abn / wnp 03/07/2012 SM - FEMPA011.0 added for the financial year 2012. 02/11/2012 SM - FEMPA011.0 ETP Code 28/3/2013 SM - Salary sacrifice was included in gross pay TO DO.add column on detail report 24/5/2013 AmendmentIndicator ETPCode 16/07/2013 SM ACN FEMPA011.0 ETP Code updated 20/08/2014 SM strip spaces out of emp dup 20/08/2014 SM Re-issue payment after account is locked; creates new entry and reversal of the existing entry. 30/01/2015 SM replace 'NAT 72711B-12.2008' with 'NAT0046' 19/05/2015 SM allowed for extra comma in the Reference2 subentry (when the pay entry has three splits) 04/06/2015 SM allowed for extra comma in the Reference2 subentry (when the pay entry has six splits) 04/06/2015 SM Separate ETP R/S and O/T 18/06/2015 SM Rounding on all PS outputs, tax not rounded down any more, 02/07/2015 SM convert ETP to ETP R 02/07/2015 SM convert implement ETP codes S and P 02/10/2015 SM Add lump sum D tax, even though it should be nil, if someone adds tax manually it will not report. 14/06/16 SM exclude FEG payments without bank accounts 12/07/16 JO Pick up correct CAC based on job type 14/7/16 JO Duplication where ETP with 0|0 - Need to check 27/4/17 SM Truncate cents wages 16/04/18 SM XML output for SBR STP 06/09/18 SM Gross and Tax Totals if in this batch then date of batch then year to date not in a batch 25/07/19 Si Exclude FEG Direct payments from the @PriorYearPayments 18/10/19 Si Super was being doubled for super only dividends 18/10/19 Si Super deducted from RILN was being excluded Exec repsp_EmployeePaymentSUmmary 1399,'20170701','20180630',@ElectronicOutput = 1, @BatchID = 727 */ SET NOCOUNT ON -- ******************************** /* IF @ElectronicOutput = 0 */ -- ******************************** DECLARE @SubEntry Table ( EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,Memo Varchar(2000) ,TransTotal Money ,EmployeeID Int ,Reference2 Varchar(200) ,AccountID Int -- used for direct entry ,Account_AccountID int -- used to detemine prior year payments ,IsHeader Bit ,BatchID int ,InReport bit ) DECLARE @Entry Table ( EntryID Int ,TransTotal Money ) DECLARE @TaxTable Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,TaxString2 Varchar(100) ,TaxString3 Varchar(100) ,TaxString4 Varchar(100) ,TaxString5 Varchar(100) ,CommaPos1 Int ,CommaPos2 Int ,CommaPos3 Int ,CommaPos4 Int ,CommaPos5 Int ) DECLARE @TaxTable2 Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,PipePos1 Int ,PipePos2 Int ,PipePos3 Int ) DECLARE @EmpPSAmended TABLE (EmployeeID INT ,IsETPAmended Int ,IsIndividualAmended Int ) DECLARE @EmpPS Table ( EmployeeID Int ,FromDate DateTime ,ToDate DateTime ,EmployeeClaimType_LookupID Int ) DECLARE @EmpDivPayments TABLE (EntryID Int primary key) DECLARE @EmpPayments TABLE (EmployeeID INT ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode varchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ,InReport int ) DECLARE @EmpPaymentsSUM TABLE ( EmployeeID Int -- ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeCommenceDate DateTime ,EmployeeAddressID Int ,Wages Money ,GrossPayment Money ,SuperSGC Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,HasLodgementETP Int ,HasLodgementIndividual Int ,HasLodgementETPThisYear Int ,HasLodgementIndividualThisYear Int ,HasAllowanceEntries Int ,ETPCode varchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,EmployeeCountryCode varchar(5) ,PrevLodgementETPDate datetime ,PrevLodgementINBDate datetime ,RemunerationIncomeType_LookupID int ,DeclarationSignatureDate datetime ,RemunerationABN varchar(100) ,EmployeeEmail varchar(200) ,EmployeePhone varchar(200) ) DECLARE @Results Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,EmployeeID Int ,IsETP Bit Not Null ,Code Char(3) Null ,Gross Money Not Null ,Tax Money Not Null ,BatchID int ,InReport int ) DECLARE @LUMPA TABLE ( EmployeeID int ,LumpSumType Varchar(3) ,LumpSumAmount Money Not Null ) DECLARE @EmpData TABLE ( EmployeeID int ,RemunerationIncomeType int ,RemunerationIncomeType_Desc VARCHAR(100) ,ArrangementBasis int ,ArrangementBasis_Desc VARCHAR(100) ,RemunerationABN varchar(100) ,RemunerationABN_Desc VARCHAR(100) ,StudyLoan int ,StudyLoan_Desc VARCHAR(100) ,StudentFinancialScheme int ,StudentFinancialScheme_Desc VARCHAR(100) ,DeclarationDate date ) DECLARE @MaxDateofPayment Table ( MaxEntryDate DateTime ,EmployeeID Int primary key ) DECLARE @ResultsXMl TABLE ( EmployeeID int ,XMLResult XML ) DECLARE @BatchTypeID int IF @ElectronicOutput = 0 BEGIN DECLARE @Signatory1 VARCHAR(150) END DECLARE @Suppliername NCHAR(200) DECLARE @SupplierContactName NCHAR(38) DECLARE @SupplierContactEmail NCHAR(75) DECLARE @SupplierContactTelephoneNumber NCHAR(15) -- FORMAT 02b1234b5678 or 0412b123b456 DECLARE @SupplierFacsimileNumber NCHAR(15) -- FORMAT 02b1234b5678 or 0412b123b456 DECLARE @SupplierFileReference NCHAR(16) CREATE TABLE dbo.#Data ( ID Int Not Null ) IF @ElectronicOutput = 1 AND @BatchID IS NULL BEGIN --DECLARE @AmendmentIndicator Varchar(1) DECLARE @OUTPUT TABLE ( OutputOrder Int ,Outputfield Varchar(8000) ) -- Supplier data record 1 DECLARE @PracticeABN NCHAR(11) DECLARE @RunType NCHAR(1) DECLARE @ReportEndDatedd NCHAR(2) DECLARE @ReportEndDatemm NCHAR(2) DECLARE @ReportEndDateyyyy NCHAR(4) DECLARE @ReportEndDate NCHAR(8) DECLARE @ReportYear Datetime DECLARE @Datatype NCHAR(1) DECLARE @Typeofreport NCHAR(1) DECLARE @Formatofreturnmedia NCHAR(1) DECLARE @ATOReportSpecificationVersionNumber NCHAR(10) DECLARE @Filler578 NCHAR(578) -- Supplier data record 2 DECLARE @Filler327 NCHAR(327) -- Supplier data record 3 DECLARE @PracticeID Int DECLARE @PracticeStreetAddressID Int DECLARE @PracticePostalAddressID Int DECLARE @SupplierStreetAddress NCHAR(76) -- Mandatory (line1 38) Optional (line 2 38) DECLARE @SupplierStreetSuburb NCHAR(27) -- Mandatory DECLARE @SupplierStreetState NCHAR(3) -- Mandatory DECLARE @SupplierStreetPostCode NCHAR(4) -- Mandatory DECLARE @SupplierStreetCountry NCHAR(20) DECLARE @SupplierPostalAddress NCHAR(76) DECLARE @SupplierPostalSuburb NCHAR(27) DECLARE @SupplierPostalState NCHAR(3) DECLARE @SupplierPostalPostCode NCHAR(4) DECLARE @SupplierPostalCountry NCHAR(20) DECLARE @SupplierEmail NCHAR(76) DECLARE @Filler275 NCHAR(275) -- Payer identity record DECLARE @Admins TABLE ( AdminID Int ,AdminTypeID Int ,ABN NCHAR(11) ,WPN NCHAR(11) ,ABN_WPN NCHAR(11) -- Mandatory ,CAC NCHAR(3) -- Mandatory ,AdminFullName NCHAR(200) ,PayerName NCHAR(200) -- Mandatory ,PayerTradingName NCHAR(200) ,PayerAddress VARCHAR(500) ,PayerAddress1 NCHAR(38) -- Mandatory ,PayerAddress2 NCHAR(38) ,PayerSuburb NCHAR(27) -- Mandatory ,PayerState NCHAR(3) -- Mandatory ,PayerPostCode NCHAR(4) -- Mandatory ,PayerCountry NCHAR(20) ,ReportingUserID Int ,ContactName NCHAR(38) ,ContactTelephoneNumber NCHAR(15) ,ContactEmail NCHAR(50) ,ContactFacsimileNumber NCHAR(15) ,ETPPayerType NCHAR(1) ) -- Software record DECLARE @Softwareproducttype NCHAR(80) DECLARE @Filler536 NCHAR(536) -- PAYGW Payment Summary Individual Non-business data record -- Temp table for data -- DROP Table [dbo].[#EmpPaySum] CREATE TABLE [dbo].[#EmpPaySum] ( EmployeeID Int ,EntryDate Datetime ,EmployeeName Varchar(200) ,EmployeeFirstName nVarchar(75) ,EmployeeLastName nVarchar(75) ,EmployeeAddress Varchar(1000) ,EmployeeAdd Varchar(500) ,EmployeeCity Varchar(50) ,EmployeeState Varchar(50) ,EmployeePostCode Varchar(50) ,EmployeeCountry Varchar(1000) -- ,EmployeeStartDate Datetime ,EmployeeTFN Varchar(50) ,TFN Varchar(50) ,Payee Varchar(200) ,DateOfBirth DateTime ,Dateofpayment DateTime ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,ReportableSuper Money ,NonTaxableAllowances Money ,OtherIncome Money ,FBT Money ,Tax Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ABNPayerNumber Varchar(2000) ,BranchNumber Varchar(2000) ,PayerName Varchar(2000) ,PaymentTypeCode Varchar(1) ,AmendmentIndicator Varchar(1) ,AmendmentIndicatorETP Varchar(1) ) DECLARE @Emps TABLE ( PayeeTFN NCHAR(9) -- Mandatory ,PayeeSurname NCHAR(30) -- Mandatory ,PayeeFirstGivenName NCHAR(15) -- Mandatory ,PayeeSecondGivenName NCHAR(15) -- Mandatory ,PayeeAddress VARCHAR(500) ,PayeeAddress1 NCHAR(38) -- Mandatory ,PayeeAddress2 NCHAR(38) ,PayeeSuburb NCHAR(27) -- Mandatory ,PayeeState NCHAR(3) -- Mandatory ,PayeePostCode NCHAR(4) -- Mandatory ,PayeeCountry NCHAR(20) ,PeriodPaymentStart NCHAR(8) -- Mandatory ,PeriodPaymentEnd NCHAR(8) -- Mandatory ,TotalTaxWithheld NCHAR(8) -- Mandatory ,GrossPayment NCHAR(8) -- Mandatory ,TotalAllowances NCHAR(8) -- Mandatory ,LumpSumPaymentA NCHAR(8) -- Mandatory ,LumpSumPaymentB NCHAR(8) -- Mandatory ,LumpSumPaymentD NCHAR(8) -- Mandatory ,LumpSumPaymentE NCHAR(8) -- Mandatory ,PayeeDateOfBirth NCHAR(8) -- Mandatory ,PayeeETPDateofpayment NCHAR(8) -- Mandatory ETP -- ,PayeeDateStarted NCHAR(8) ,ETPTaxable NCHAR(8) ,ETPNonTaxable NCHAR(8) ,ETPTax NCHAR(8) ,CommunityDevelopmentEmploymentProject NCHAR(8) -- Mandatory ,OtherIncome NCHAR(8) -- Mandatory ,ReportableFringeBenefits NCHAR(8) -- Mandatory ,PaymentTypeCode VARCHAR(1) ,AmendmentIndicator VARCHAR(1) ,AmendmentIndicatorETP VARCHAR(1) ,ReportableSuper NCHAR(8) -- Mandatory ) DECLARE @Filler380 NCHAR(380) DECLARE @Filler377 NCHAR(377) -- Eligible Termination Payment (ETP) data record DECLARE @Filler316 NCHAR(316) DECLARE @Filler283 NCHAR(283) DECLARE @ReportableEmployerSuperannuationContribs NCHAR(8) DECLARE @LumpSumPaymentAType NCHAR(1) DECLARE @WorkplaceGiving NCHAR(8) DECLARE @UnionProfFees NCHAR(8) DECLARE @ExemptForeignEmploymentIncome NCHAR(8) DECLARE @DeductibleAmountPurchasePriceofAnnuity NCHAR(8) --File total record DECLARE @FileTotal NCHAR(10) DECLARE @NumberOfRecords NCHAR(10) DECLARE @Filler607 NCHAR(607) END DECLARE @PayerName Varchar(1105) DECLARE @PayerBranch Varchar(10) DECLARE @AdminAddressID Int DECLARE @AdminAddress Varchar(760) DECLARE @AdminAdd Varchar(500) DECLARE @AdminCity Varchar(50) DECLARE @AdminState Varchar(50) DECLARE @AdminPostCode Varchar(50) DECLARE @AdminCountry Varchar(100) DECLARE @ABN_WPN TABLE (AdminID Int ,ABN Varchar(2000) ,WPN Varchar(2000) ,ABN_WPN Varchar(2000) ) DECLARE @FinancialYearStartDate Datetime DECLARE @AdminStartDate Datetime SELECT @AdminStartDate = StartDate FROM dbo.Admin WHERE @AdminID = @AdminID -- IF Batch then start of the financial year. IF @BatchID IS NOT NULL AND @DateTo Between dbo.uFnFinancialYearStartDate(@DateTo) AND dbo.uFnFinancialYearEndDate(@DateTo) BEGIN SELECT @DateFrom = dbo.uFnFinancialYearStartDate(@DateTo) SELECT @DateTo = dbo.uFnFinancialYearEndDate(@DateTo) END SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- ***** POPULATE TMP Tables ***** INSERT INTO @EmpPS SELECT ec.EmployeeID, min(ec.FromDate), min(ec.ToDate),ec.EmployeeClaimType_LookupID FROM EmployeeClaim ec INNER JOIN dbo.Employee e ON e.EmployeeID = ec.EmployeeID WHERE ec.FromDate BETWEEN @DateFrom AND @DateTO AND ec.ToDate BETWEEN @DateFrom AND @DateTO AND ((@ETP = 1) OR (ec.EmployeeClaimType_LookupID = 300011)) AND ((@ETP = 0) OR (ec.EmployeeClaimType_LookupID = 300010)) AND e.AdminID = @AdminID GROUP BY ec.EmployeeID,ec.EmployeeClaimType_LookupID IF @SupplierContactName IS NULL Select @SupplierContactName = u.[Name] FROM [User] u INNER JOIN Admin a ON a.ReportingUserID = u.UserID WHERE a.ReportingUserID = @UserID AND a.AdminID = @AdminID SELECT @SupplierContactTelephoneNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 1 --PHONE AND pn.PracticeID = @PracticeID SELECT @PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE acp.AdminID = @AdminID SELECT @PayerBranch = cpBranch.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) WHERE acp.AdminID = @AdminID AND ((cpBranch.AdminTypeID = @AdminTypeID) OR (@AdminTypeID IS Null)) -- IF @IsAmendment = 1 -- BEGIN -- Set @AmendmentIndicator = 'A' -- amend -- END -- ELSE -- BEGIN -- Set @AmendmentIndicator = 'O' -- END -- SELECT @AdminAddressID = Min(aa.AddressID) FROM Admin_Address aa INNER JOIN Address ad ON aa.AddressID = ad.AddressID AND ad.IsMailing = 1 WHERE aa.AdminID = @AdminID GROUP BY aa.AddressID SELECT @AdminAddress = (Select ad.Address + CHAR(10) + CHAR(13) + ISNULL(ad.City + ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode + ' ','') + CHAR(13) + ISNULL(ad.Country + ' ','') FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminAdd = (Select ad.Address + CHAR(10) + CHAR(13) FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminCity = (Select ad.City FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminState = (Select UPPER(ad.State) FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminPostCode = (Select ad.PostCode FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminCountry = (Select ad.Country FROM Address ad WHERE ad.AddressID = @AdminAddressID) --Signatory1 Declare @Min_No_of_Signatory int SELECT @Min_No_of_Signatory = MIN(number) FROM dbo.Appointment apt INNER JOIN dbo.Admin a ON apt.AdminID = a.AdminID AND apt.AdminTypeID = a.AdminTypeID WHERE APT.IsSignatory = 1 AND apt.AdminID = @AdminID SELECT @Signatory1 = ISNULL(u.Name,'') FROM dbo.Appointment apt INNER JOIN dbo.Admin a ON apt.AdminID = a.AdminID AND apt.AdminTypeID = a.AdminTypeID INNER JOIN dbo.Appointee_Appointment aa ON apt.AppointmentID = aa.AppointmentID INNER JOIN dbo.[User] u ON u.UserID = aa.UserID WHERE apt.IsSignatory = 1 AND apt.Number = @Min_No_of_Signatory AND apt.AdminID = @AdminID -- CREATE TABLE dbo.#Data -- ( -- ID Int Not Null -- ) -- Employees to include IF NOT @EmployeeInClause IS NULL EXEC dbo.usp_Split @EmployeeInClause ELSE IF @BatchTypeID = 900009 -- CATCH all Batch Full Year Submit BEGIN INSERT INTO dbo.#Data SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) END ELSE IF @BatchID is NOT NULL BEGIN INSERT INTO dbo.#Data SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) END ELSE INSERT INTO dbo.#Data SELECT EmployeeID FROM Employee WHERE AdminID = @AdminID -- Tmp DATA -- DIVs / Ref2 INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = c.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN --1. isnt in another batch ( (@BatchId Is NULL) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --2. This is a catch all batch OR ( (@BatchTypeID = 900009) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --3. Normal Payroll Batch OR (ent.BatchID = @BatchID) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.Entry ent ON ent.EntryID = se.EntryID INNER JOIN dbo.Creditor c ON se.CreditorID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data d ON d.ID = e.EmployeeID INNER JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.Entrytype not in (100,101) AND se.ContextID = e.AdminID AND div.BankAccount_AccountID IS NOT NULL -- Entry INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN --1. isnt in another batch ( (@BatchId Is NULL) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --2. This is a catch all batch OR ( (@BatchTypeID = 900009) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --3. Normal Payroll Batch OR (ent.BatchID = @BatchID) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID LEFT JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND div.DividendID IS NULL AND se.LiabilityID Is Null AND NOT ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) --FBT INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = 1 ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd AND ((@BatchId Is NULL) OR (@BatchTypeID = 900009) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) --AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.LiabilityID Is Null AND ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) AND se.EmployeeID IS NOT NULL /* where entryid = 118015 Select * from @SubEntry order by payee return 0 Select * from @SubEntry order by payee return 0 FROM dbo.SubEntry se WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND ISNULL(se.ISBatchPosting,0) = 0 --AND se.EmployeeID Is Not Null */ -- Calc Transaction totals INSERT INTO @Entry SELECT EntryID ,TransTotal = -TransTotal --Sum(TransTotal) FROM @SubEntry WHERE IsHeader = 1 INSERT INTO @TaxTable ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString --,CommaPos1 ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,Direction = CASE WHEN se.TransTotal >= 0 THEN 1 ELSE -1 END ,EmployeeID = se.EmployeeID ,TaxString = se.Reference2 --,CommaPos1 = Charindex(',',se.Reference2) FROM @SubEntry se WHERE se.Reference2 Is Not Null Order By EmployeeID ,EntryID ,SubEntryID -- ********************************************** -- CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET TaxString = Replace(TaxString,'A0','A|0') UPDATE @TaxTable SET TaxString = Replace(TaxString,'A=T','T') UPDATE @TaxTable SET TaxString = Replace(TaxString,'ETP|','ETP=R|') UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Replace ( Substring( TaxString,charindex('E-',TaxString) - 16,20) , '|' , '' ) ,0 ) WHERE charindex('E-',TaxString) > 1 UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Substring( TaxString,charindex('E-',TaxString) - 17,21) ,'' ) WHERE charindex('E-',TaxString) > 1 -- ********************************************** -- END CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET CommaPos1 = Charindex(',',TaxString) -- ********************************************** -- SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** Update @TaxTable SET TaxString2 = SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ,CommaPos2 = Charindex(',',SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ) WHERE CommaPos1 > 0 Update @TaxTable SET TaxString3 = SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ,CommaPos3 = Charindex(',',SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ) WHERE CommaPos2 > 0 Update @TaxTable SET TaxString4 = SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ,CommaPos4 = Charindex(',',SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ) WHERE CommaPos3 > 0 Update @TaxTable SET TaxString5 = SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ,CommaPos5 = Charindex(',',SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ) WHERE CommaPos4 > 0 -- ********************************************** -- END SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos1 = 0 THEN TaxString ELSE SubString(TaxString, 1, CommaPos1 - 1) END ,0,0,0 FROM @TaxTable INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos2 = 0 THEN TaxString2 ELSE SubString(TaxString2, 1, CommaPos2 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos1 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos3 = 0 THEN TaxString3 ELSE SubString(TaxString3, 1, CommaPos3 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos2 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos4 = 0 THEN TaxString4 ELSE SubString(TaxString4, 1, CommaPos4 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos3 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos4 > 0 UPDATE @TaxTable2 SET PipePos1 = Charindex('|',TaxString) UPDATE @TaxTable2 SET PipePos2 = Charindex('|',TaxString, PipePos1 + 1) UPDATE @TaxTable2 SET PipePos3 = Charindex('|',TaxString, PipePos2 + 1) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP = CASE WHEN Charindex('ETP=R',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=R',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP=O',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=O',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP',TaxString) > 0 THEN Convert(Bit, Charindex('ETP',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) ELSE 0 END ,Code = CASE WHEN Len(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1))) = 3 THEN Null ELSE Right(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)),1) END ,Gross = Convert(Money, SubString(TaxString, PipePos2 + 1, PipePos3 - (PipePos2 + 1))) * Direction ,Tax = Convert(Money, SubString(TaxString, PipePos3 + 1, Len(TaxString) - (PipePos3))) * Direction FROM @TaxTable2 INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = EntryID ,SubEntryID = SubEntryID ,Account_AccountID = Account_AccountID ,EntryDate = EntryDate ,EmployeeID = EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.CreditorClaimTypeID in (255, 280) AND acc.AccountGroupID = 4016 AND se.EntryID in (Select EntryID from @Results) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,EmployeeID = se.EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = -se.TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.AccountGroupID in (4016,4017) AND se.EntryID in (Select EntryID from @Results) AND NOT se.EntryID in (Select EntryID from @Results WHERE CODE = 'SGC') UPDATE @Results SET BatchID = se.BatchID ,InReport = se.InReport FROM @Results r INNER JOIN @SubEntry se ON se.EntryID = r.EntryID /* Select * FROM @TaxTable Select * FROM @TaxTable2 Select * FROM @Results return 0 */ -- Detemine if there's prior year entries for the employee DECLARE @PriorYearPayments TABLE ( EmployeeID INT ,Account_AccountID INT ,SubEntryID INT ,EntryDate DATETIME ,Reference2 varchar(250) ,Ref2HasR int ,Ref2HasO int ) INSERT INTO @PriorYearPayments SELECT EmployeeID = se.EmployeeID ,Account_AccountID = se.Account_AccountID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Reference2 = se.Reference2 ,Ref2HasR = CASE WHEN Charindex('ETP=R|',se.Reference2) > 0 OR Charindex('ETP=|',se.Reference2) > 0 THEN 1 ELSE 0 END ,Ref2HasO = CASE WHEN Charindex('ETP=O|',se.Reference2) > 0 THEN 1 ELSE 0 END FROM SubEntry se INNER JOIN @SubEntry se1 ON se.EmployeeID = se1.EmployeeID AND se.Account_AccountID = se1.Account_AccountID AND se.EntryDate < dbo.uFnFinancialYearStartDate(@DateFrom) AND ISNULL(se.IsBatchPosting,0) = 0 UPDATE @Results SET Code = Replace(r.Code, 'R','S') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'R' AND Ref2HasR = 1 --exclude prior year payments that dont contain any reference2 PAYG info, such as Direct FEG payments UPDATE @Results SET Code = Replace(r.Code, 'O','P') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'O' AND Ref2HasO = 1 --exclude prior year payments that dont contain any reference2 PAYG info, such as Direct FEG payments /* Select dbo.uFnFinancialYearStartDate(@DateFrom), * FROM @Results Select * FROM @PriorYearPayments return 0 */ --- ABN WPN --- ABN WPN DECLARE @MaxWpn Int DECLARE @MaxWpnVal varchar(2000) DECLARE @MaxABN Int DECLARE @MaxABNVal varchar(2000) SELECT @MaxWpn = cpWPN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID SELECT @MaxWpnVal = Replace(cpWPN.PropertyValue,' ','') FROM CustomProperty cpWPN WHERE cpWPN.CustomPropertyID = @MaxWpn SELECT @MaxABN = cpABN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID SELECT @MaxABNVal = Replace(cpABN.PropertyValue,' ','') FROM CustomProperty cpABN WHERE cpABN.CustomPropertyID = @MaxABN INSERT INTO @ABN_WPN (AdminID,WPN,ABN,ABN_WPN) SELECT @AdminID,@MaxWpnVal,@MaxABNVal,ISNULL(@MaxWpnVal,@MaxABNVal) -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = r.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate --WHEN @ETP IS NOT NULL THEN r.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.EndDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,GrossPayment = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,LumpSumA = Sum(CASE Code WHEN 'A' THEN Gross ELSE 0 END) ,LumpSumAT = Sum(CASE Code WHEN 'T' THEN Gross ELSE 0 END) ,LumpSumAType = NULL ,LumpSumB = Sum(CASE Code WHEN 'B' THEN Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = CASE IsETP WHEN 1 THEN r.Code ELSE '' END ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = r.BatchID ,InReport = r.InReport FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID GROUP BY r.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate --WHEN @ETP IS NOT NULL THEN r.EntryDate ELSE NULL END ,r.Code ,r.IsETP ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.EndDate , e.TaxFlags ,e.WagesPeriod_LookupID ,r.BatchID ,r.InReport -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- WAGES INSERT INTO @EmpPayments SELECT EmployeeID = se.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate --WHEN @ETP IS NOT NULL THEN se.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.EndDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN TransTotal WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = -- THIS IS THE AMOUNT REPORTED IN THE HEADER Sum(CASE WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- ALL allowances THEN TransTotal WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN ( acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 --Salary sacrifice AND NOT ISNULL(acc.Flags,0) & 536870912 = 536870912 --Voluntary super ) THEN -TransTotal --WHEN -- ( -- acc.AccountGroupID in (2030) -- AND acc.CreditorClaimTypeID = 255 -- ) --THEN -- TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN -TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN -TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = '' ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = se.BatchID ,InReport = se.InReport FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE IsNull(acc.Flags,0) & 8388608 = 0 --payment to paid received account AND ( (ag.AccountGroupID in (6020,2030,2040,4012,4013, 4016, 4017)) OR (ag.AccountGroupID in (4040) ANd acc.Flags IS NOT NULL) ) AND ( se.EntryID NOT IN (select EntryID FROM @Results) OR se.SubEntryID in (select EntryID FROM @Results WHERE Code = 'SGC') ) GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,se.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate --WHEN @ETP IS NOT NULL THEN se.EntryDate ELSE NULL END ,se.EntryDate ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.EndDate ,e.TaxFlags ,e.WagesPeriod_LookupID ,se.BatchID ,se.InReport -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- PREFERRED CREDITOR PAYMENTS SET ANSI_WARNINGS OFF -- MAX Date of Payment for ETP IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN INSERT INTO @MaxDateofPayment SELECT Max(EntryDate) ,EmployeeID FROM @subentry WHERE NOT EmployeeID IS NULL GROUP BY EmployeeID END INSERT INTO @EmpPaymentsSUM SELECT EmployeeID = ep.EmployeeID -- ,EntryID = ep.EntryID ,EntryDate = MAX(ep.EntryDate) ,Payee = ep.Payee ,EmployeeDateStart = ep.EmployeeDateStart ,EmployeeDateEnd = ep.EmployeeDateEnd ,EmployeeCommenceDate = CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,EmployeeAddressID = ep.EmployeeAddressID ,Wages = Sum(ep.Wages) ,GrossPayment = Sum(ep.GrossPayment) ,SuperSGC = Sum(ep.SuperSGC) ,LumpSumA = Sum(ep.LumpSumA) ,LumpSumAT = Sum(ep.LumpSumAT) ,LumpSumAType = NULL ,LumpSumB = Sum(ep.LumpSumB) ,LumpSumD = Sum(ep.LumpSumD) ,LumpSumE = Sum(ep.LumpSumE) ,ReportableSuper = Sum(ep.ReportableSuper) ,ExcludeFromOTE = Sum(ep.ExcludeFromOTE) ,NonTaxableAllowances = Sum(ep.NonTaxableAllowances) ,FBTTaxable = Sum(ep.FBTTaxable) ,FBTNonTaxable = Sum(ep.FBTNonTaxable) ,DeductWorkPlaceGiving = Sum(ep.DeductWorkPlaceGiving) ,DeductUnionFees = Sum(ep.DeductUnionFees) ,CommunityDevelopmentEmploymentProject = Sum(ep.CommunityDevelopmentEmploymentProject) ,ExemptForeignEmploymentIncome = Sum(ep.ExemptForeignEmploymentIncome) ,Allow_Car = Sum(ep.Allow_Car) ,Allow_Trans = Sum(ep.Allow_Trans) ,Allow_Laundry = Sum(ep.Allow_Laundry) ,Allow_Meals = Sum(ep.Allow_Meals) ,Allow_Travel = Sum(ep.Allow_Travel) ,Allow_Other = Sum(ep.Allow_Other) ,Tax = Sum(ep.Tax) ,ForeignWithholding = Sum(ep.ForeignWithholding) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) ,0 -- } ,0 -- ,0 -- history records ,0 -- } ,HasAllowanceEntries = CASE WHEN Sum(ep.NonTaxableAllowances) > 0 THEN 1 ELSE 0 END ,ETPCode = CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE CASE WHEN @ETP = 1 THEN ep.ETPCode ELSE NULL END END ,TaxFlags = ep.TaxFlags ,WagesPeriod_LookupID = ep.WagesPeriod_LookupID ,EmployeeCountryCode = NULL ,PrevLodgementETPDate = NULL ,PrevLodgementINBDate = NULL ,RemunerationIncomeType_LookupID = NULL ,DeclarationSignatureDate = NULL ,RemunerationABN = NULL ,EmployeeEmail = NULL ,EmployeePhone = NULL FROM @EmpPayments ep -- WHERE ((@BatchID IS NULL) OR (ep.BatchID = @BatchID)) /* --JO 14/7/16 --Duplication where ETP with 0|0 WHERE (Wages > 0 OR GrossPayment <> 0 OR LumpSumA <> 0 OR LumpSumB <> 0 OR LumpSumD <> 0 OR LumpSumE <> 0 OR ReportableSuper <> 0 OR NonTaxableAllowances <> 0 OR FBTTaxable <> 0 OR FBTNonTaxable <> 0 OR DeductWorkPlaceGiving <> 0 OR DeductUnionFees <> 0 OR Tax <> 0 OR ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0) */ GROUP BY ep.EmployeeID , CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,ep.Payee ,ep.EmployeeAddressID--, ep.EntryDate ,ep.EntryID, ep.Memo , CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE CASE WHEN @ETP = 1 THEN ep.ETPCode ELSE NULL END END ,ep.EmployeeDateStart ,ep.EmployeeDateEnd ,ep.TaxFlags ,ep.WagesPeriod_LookupID SET ANSI_WARNINGS ON -- ETP IF @BatchID IS NOT NULL BEGIN DECLARE @ETP_Results TABLE ( EmployeeID int ,ETPCode varchar(20) --,LumpSumD Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ) INSERT INTO @ETP_Results SELECT EmployeeID = ep.EmployeeID ,ETPCode = ep.ETPCode --,LumpSumD = Sum(ep.LumpSumD) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) FROM @EmpPayments ep WHERE ( ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0 ) AND NOT ISNULL(ETPCode,'') = '' GROUP BY ep.EmployeeID ,ep.ETPCode END -- Previous submission dates UPDATE @EmpPaymentsSUM SET PrevLodgementINBDate = ec.ToDate FROM @EmpPS ec WHERE ec.EmployeeClaimType_LookupID = 300010 UPDATE @EmpPaymentsSUM SET PrevLodgementETPDate = ec.ToDate FROM @EmpPS ec WHERE ec.EmployeeClaimType_LookupID = 300011 -- Update Employee Address UPDATE @EmpPaymentsSUM SET EmployeeAddressID = c.AddressID FROM Creditor c INNER JOIN Employee e ON e.EmployeeId = c.EmployeeId INNER JOIN @EmpPaymentsSUM eps ON e.EmployeeId = eps.EmployeeId WHERE eps.EmployeeAddressID IS NULL -- Emp Country code UPDATE @EmpPaymentsSUM SET EmployeeCountryCode = lu.Data FROM @EmpPaymentsSUM eps INNER JOIN Address ad ON ad.AddressID = eps.EmployeeAddressID INNER JOIN Lookup lu ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 -- UPDATE ETP Date of payment -- PayeeETPDateofpayment IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN UPDATE @EmpPaymentsSUM Set EntryDate = mdop.MaxEntryDate FROM @EmpPaymentsSUM eps INNER JOIN @MaxDateofPayment mdop ON mdop.EmployeeId = eps.EmployeeID END --Employee Data --SET ANSI_WARNINGS ON INSERT INTO @EmpData ( EmployeeID ,RemunerationIncomeType ,ArrangementBasis ,RemunerationABN ,StudyLoan ,StudentFinancialScheme ,DeclarationDate ) SELECT EmployeeID = ed.EmployeeID ,RemunerationIncomeType = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationIncomeType/@Value)[1]', 'int') ,'') ,ArrangementBasis = ISNULL(ed.Data.value('(/Data/Tax/Employment/ArrangementBasis/@Value)[1]', 'int') ,'') ,RemunerationABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') ,StudyLoan = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudyLoan/@Value)[1]', 'int') ,'') ,StudentFinancialScheme = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudentFinancialScheme/@Value)[1]', 'int') ,'') ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'date') ,'') FROM @EmpPaymentsSUM eps INNER JOIN dbo.EmployeeData ed ON eps.EmployeeID = ed.EmployeeID --SET ANSI_WARNINGS OFF UPDATE @EmpData SET RemunerationIncomeType_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.RemunerationIncomeType = lu.LookupID UPDATE @EmpData SET ArrangementBasis_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.ArrangementBasis = lu.LookupID UPDATE @EmpData SET RemunerationABN = NULL WHERE RemunerationABN = '' UPDATE @EmpData SET RemunerationABN_Desc = 'Contractor ABN' WHERE RemunerationABN IS NOT NULL UPDATE @EmpData SET StudyLoan_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.StudyLoan = lu.LookupID UPDATE @EmpData SET DeclarationDate = NULL WHERE DeclarationDate = '19000101' UPDATE @EmpPaymentsSUM SET RemunerationIncomeType_LookupID = ed.RemunerationIncomeType FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET DeclarationSignatureDate = ed.DeclarationDate FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET RemunerationABN = ed.RemunerationABN FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID -- Employee Numbers -- Email UPDATE @EmpPaymentsSUM SET EmployeeEmail = n.Number FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 4 -- Mobile UPDATE @EmpPaymentsSUM SET EmployeePhone = Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'(','') ,')','') ,'+61','0') FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 3 -- Phone UPDATE @EmpPaymentsSUM SET EmployeePhone = Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'(','') ,')','') ,'+61','0') FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 1 AND eps.EmployeePhone IS NULL DECLARE @EmployeeAddress TABLE ( EmployeeID int ,AddressID int ,AddressLine1 varchar(38) ,AddressLine2 varchar(38) ,City varchar(46) ,State varchar(10) ,PostCode varchar(5) ) INSERT INTO @EmployeeAddress SELECT EmployeeID = eps.EmployeeId ,AddressID = ad.AddressID ,AddressLine1 = CONVERT(VARCHAR(38), ab.AddressLine1) ,AddressLine2 = CONVERT(VARCHAR(38), ab.AddressLine2 + ISNULL(' ' + ab.AddressLine3, '') + ISNULL(' ' + ab.AddressLine4, '') ) ,City = CONVERT(VARCHAR(46),ad.City) ,State = CONVERT(VARCHAR(10),ad.State) -- matches list? ,PostCode = CONVERT(VARCHAR(5),ad.PostCode) -- if aust is number? FROM @EmpPaymentsSUM eps INNER JOIN dbo.Address ad ON ad.AddressID = eps.EmployeeAddressID CROSS APPLY dbo.tblfn_SplitAddressBody (ad.Address) ab /* select * from @EmployeeAddress select * from @EmpData Select * from @Subentry return 0 Select * from @MaxDateofPayment --Select * from @TaxTable Select * from @TaxTable2 Select * from @EmpPayments Select * from @EmpPaymentsSUM return 0 */ DECLARE @DEDUCTIONS TABLE ( EmployeeID int ,DeductionType varchar(30) ,DeductionAmount Money ) INSERT INTO @DEDUCTIONS SELECT EmployeeID ,'Workplace Giving' ,DeductWorkPlaceGiving FROM @EmpPaymentsSUM eps WHERE DeductWorkPlaceGiving <> 0 UNION SELECT EmployeeID ,'Fees' ,DeductUnionFees FROM @EmpPaymentsSUM eps WHERE DeductUnionFees <> 0 DECLARE @Allows TABLE ( EmployeeID int ,AllowType varchar(30) ,AllowAmount Money ,AllowTypeOtherDesc Varchar(40) ) INSERT INTO @Allows (EmployeeID ,AllowType ,AllowAmount) SELECT EmployeeID ,'Car' ,Allow_Car FROM @EmpPaymentsSUM eps WHERE Allow_Car <> 0 UNION SELECT EmployeeID ,'Transport' ,Allow_Trans FROM @EmpPaymentsSUM eps WHERE Allow_Trans <> 0 UNION SELECT EmployeeID ,'Laundry' ,Allow_Laundry FROM @EmpPaymentsSUM eps WHERE Allow_Laundry <> 0 UNION SELECT EmployeeID ,'Meals' ,Allow_Meals FROM @EmpPaymentsSUM eps WHERE Allow_Meals <> 0 UNION SELECT EmployeeID ,'Travel' ,Allow_Travel FROM @EmpPaymentsSUM eps WHERE Allow_Travel <> 0 -- other allowances for expected deductible expenses INSERT INTO @Allows SELECT EmployeeID = se.EmployeeID ,AllowType = 'Other' ,AllowAmount = Sum(se.TransTotal) ,AllowTypeOtherDesc = CONVERT(Varchar(40),acc.Reference3) FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 Group BY se.EmployeeID, acc.Reference3 /* select se.* ,AllowTypeOtherDesc = acc.Reference3 ,ISNULL(acc.Flags,0) & 2097152 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 select * from @Allows */ -- Work out whether the emp had amended ETP/Individual lodgements for the period or not Update @EmpPaymentsSUM SET HasLodgementETPThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 AND @ETP = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementETP = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 AND @ETP = 1 Update @EmpPaymentsSUM SET HasLodgementIndividualThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 AND @IsIndividual = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementIndividual = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 AND @IsIndividual = 1 -- ********************************************************************************************************** -- ******* REPORT DATA ************************************************************************************** -- ********************************************************************************************************** -- THERE MAY BE DIFFERENT OUTPUTS: -- RETURN THE LIST FOR THE REPORT FILTER -- RETURN THE DATA FOR THE PAYG SUMMARY REPORT -- RETURN THE DATA FOR THE ELECTRONIC OUTPUT -- REPORT FILTER -- Used for the filter form to return the list of possible employees to select from -- This should include employees that receieved payments for the period (contained in @EmpPaymentsSUM) -- and exclude emps already having a PS for the period IF @SelectEmployees = 1 BEGIN /* Select * FROM @EmpPaymentsSUM ep LEFT OUTER JOIN @EmpPS ec ON ep.EmployeeID = ec.EmployeeID --WHERE ((ec.FromDate Is NOT Null) OR (ec.FromDate >= @DateFrom)) --AND ((ec.ToDate Is NOT Null) OR (ec.ToDate >= @DateTo)) Select * FROM @EmpPS */ SELECT e.EmployeeID ,LastName = Convert(varchar(15),e.LastName) ,FirstName = Convert(varchar(15),e.FirstName) ,Title = Convert(varchar(15),e.Title) ,IssueDate = ec.ToDate FROM dbo.Employee e INNER JOIN @EmpPaymentsSUM ep ON ep.EmployeeID = e.EmployeeID LEFT OUTER JOIN @EmpPS ec --dbo.EmployeeClaim ON e.EmployeeID = ec.EmployeeID WHERE e.AdminID = @AdminID --AND ec.EmployeeID IS NULL --we want to exclude emps that already have a PS for the period GROUP BY e.EmployeeID ,e.LastName ,e.FirstName ,e.Title ,ec.ToDate,ec.EmployeeID ORDER BY isnull(ec.ToDate,'30000101') DESC , e.LastName END ELSE --- **** REPORT DATA **** BEGIN -- PAYG SUMMARY REPORT IF @ElectronicOutput = 0 BEGIN SELECT EmployeeID = e.EmployeeID ,EntryDate = eps.EntryDate ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeFirstName = e.FirstName ,EmployeeLastName = e.LastName ,EmployeeAddress = ad.Address + Char(10) + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(CHAR(13) + ad.Country,'') ,EmployeeAdd = ad.Address ,EmployeeCity = ad.City ,EmployeeState = UPPER(ad.State) ,EmployeePostCode = ad.PostCode ,EmployeeCountry = ad.Country -- ,EmployeeStartDate = e.StartDate ,EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(e.TFN) = 1 THEN replace(e.TFN,' ','') ELSE CASE WHEN e.TFN IS NULL THEN '000000000' WHEN NOT (ISNUMERIC(e.TFN) = 1) THEN '*** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(e.TFN) = 9 THEN '*** TFN ' + e.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '*** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE replace(e.TFN,' ','') END END ,TFN = ISNULL(e.TFN,'000000000') ,Payee = ISNULL(eps.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,DateOfBirth = e.DateOfBirth ,Dateofpayment = eps.EntryDate -- ,Memo = ep.Memo ,Wages = Round(eps.Wages,0,1) ,GrossPayment = Round(eps.Wages,0,1) ,LumpSumA = Round(eps.LumpSumA,0,1) + Round(eps.LumpSumAT,0,1) ,LumpSumAT = Round(eps.LumpSumAT,0,1) ,LumpSumAType = CASE WHEN eps.LumpSumA > 0 THEN 'R' WHEN eps.LumpSumAT > 0 AND eps.LumpSumA = 0 THEN 'T' ELSE '' END ,LumpSumB = Round(eps.LumpSumB,0,1) ,LumpSumD = Round(eps.LumpSumD,0,1) ,LumpSumE = Round(eps.LumpSumE,0,1) ,CDEP = 0 ,ReportableSuper = Round(eps.ReportableSuper,0,1) ,Allowances = Round(eps.NonTaxableAllowances,0,1) ,OtherIncome = 0 ,FBTTaxable = Round(eps.FBTTaxable,0,1) ,FBTNonTaxable = Round(eps.FBTNonTaxable,0,1) ,FBT = Round(eps.FBTTaxable,0,1) ,DeductWorkPlaceGiving = Round(eps.DeductWorkPlaceGiving,0,1) ,DeductUnionFees = Round(eps.DeductUnionFees,0,1) ,Tax = Round(eps.Tax,0,1) ,ForeignWithholding = Round(eps.ForeignWithholding,0,1) ,ETPTaxable = Round(eps.ETPTaxable,0,1) ,ETPNonTaxable = Round(eps.ETPNonTaxable,0,1) ,ETPTax = Round(eps.ETPTax,0,1) ,ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,HasLodgementETP = eps.HasLodgementETPThisYear ,HasLodgementIndividual = eps.HasLodgementIndividualThisYear ,FormIDETP = '' --CASE --WHEN ep.HasLodgementETP = 1 --THEN -- CASE -- WHEN @DateTo > '20120630' -- THEN 'NAT70996-07.2012' -- ELSE 'NAT72709B-12.2008' -- END --ELSE -- CASE -- WHEN @DateTo > '20120630' -- THEN 'NAT70868-06.2012' -- ELSE 'NAT72708B-12.2008' -- END --END ,FormIDIndividual = '' --CASE --WHEN ep.HasLodgementIndividual = 1 --THEN -- CASE -- WHEN @DateTo > '20120630' -- THEN '' -- ELSE 'NAT72710B-12.2008' -- END --ELSE -- CASE -- WHEN @DateTo > '20120630' -- THEN '' -- ELSE 'NAT0046-02.2014' --'NAT 72711B-12.2008' -- END --END ,HasAllowanceEntries = eps.HasAllowanceEntries ,DateFrom = @DateFrom ,DateTo = @DateTo ,Signatory1 = @Signatory1 ,AmendmentIndicator = CASE WHEN eps.HasLodgementETPThisYear = 1 THEN 'A' ELSE 'O' END ,ETPCode = eps.ETPCode ,EmployeeEmail = eps.EmployeeEmail ,EmployeePhone = eps.EmployeePhone ,StartDate = eps.EmployeeDateStart ,EndDate = eps.EmployeeDateEnd ,IncomeType = CASE WHEN eps.RemunerationIncomeType_LookupID = 109201 THEN 'CDEP' WHEN eps.RemunerationIncomeType_LookupID = 109202 THEN 'Voluntary Agree' WHEN eps.RemunerationIncomeType_LookupID = 109203 THEN 'Labour Hire' WHEN eps.RemunerationIncomeType_LookupID = 109204 THEN 'Regulation' WHEN eps.RemunerationIncomeType_LookupID = 109205 THEN 'Joint Petroleum' WHEN eps.RemunerationIncomeType_LookupID = 109206 THEN 'Working Holiday' WHEN eps.RemunerationIncomeType_LookupID = 109207 THEN 'Foreign Resident' ELSE NULL END FROM @EmpPaymentsSUM eps INNER JOIN Employee e ON eps.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID LEFT OUTER JOIN Address ad ON ad.AddressID = eps.EmployeeAddressID WHERE e.AdminID = @AdminID --AND ((@BatchID IS NULL) OR (eps.BatchID = @BatchID)) AND ( (@ETP IS NULL) OR ( ((@ETP = 0) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) <> 0)) --AND --((@ETP = 1) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) = 0)) ) ) ORDER BY e.LastName --EntryDate END IF @ElectronicOutput = 1 AND @BatchID IS NULL BEGIN IF @LodgementID Is Not Null BEGIN -- DELETE dbo.EmployeeClaim -- FROM dbo.EmployeeClaim ec -- INNER -- JOIN dbo.#Data d -- ON d.ID = ec.EmployeeID -- WHERE IsNull(ec.FromDate, '30001231') >= @DateFrom -- AND IsNull(ec.ToDate, '18990101') <= @DateTo -- INSERT INTO dbo.EmployeeClaim (EmployeeID,EmployeeClaimType_LookupID,FromDate,ToDate,Period,Rate,TotalClaim,EmpPrefClaim,EmpUnsecClaim,ERAPrefClaim,ERAUnsecClaim,Deductions,NotionalTax,Tax,ERATax,NI,ERANI,IsTaxable,IsNI,IsManualCalc,IsManualClaim,IsFinalised,CreatedDate,CreatedBy,UpdatedDate,UpdatedBy,TS) SELECT d.ID ,EmployeeClaimType_LookupID = CASE WHEN @ETP = 1 THEN 300010 ELSE 300011 END ,@DateFrom ,@DateTo ,@LodgementID ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,GetDate() ,@UpdatedBy ,GetDate() ,@UpdatedBy ,NewID() FROM dbo.#Data d Group BY d.ID END -- POPULATE VARIABLES FOR The Report SELECT @PRACTICEID = PracticeID FROM dbo.Admin WHERE AdminID = @AdminID -- Supplier data record 1 SELECT @PracticeABN = Replace(cp.PropertyValue,' ','') FROM dbo.Admin p INNER JOIN dbo.Admin_CustomProperty acp ON p.AdminID = acp.AdminID INNER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 2 --ABN AND p.AdminID = @PracticeID Set @RunType = 'P' -- t = test; p = production Set @ReportEndDatedd = datepart(dd,@DateTo) Set @ReportEndDatemm = datepart(mm,@DateTo) Set @ReportEndDateyyyy = datepart(yyyy,@DateTo) Set @ReportEndDate = Replace( str(datepart(d,@DateTo),2) + str(datepart(m,@DateTo),2) + str(datepart(yyyy,@DateTo),4) ,' ','0') -- Mandatory Set @Datatype = 'E' Set @Typeofreport = 'A' Set @Formatofreturnmedia = 'P' IF @DateTo <= '20080630' Set @ATOReportSpecificationVersionNumber = 'FEMPA008.0' IF @DateTo <= '20090630' Set @ATOReportSpecificationVersionNumber = 'FEMPA009.0' IF @DateTo <= '20120630' Set @ATOReportSpecificationVersionNumber = 'FEMPA010.0' IF @DateTo > '20120630' Set @ATOReportSpecificationVersionNumber = 'FEMPA011.0' Set @Filler578 = '' -- Supplier data record 2 Select @Suppliername = PracticeName FROM dbo.PRACTICE Where PracticeID = @PRACTICEID Select @SupplierContactName = u.[Name] FROM [User] u WHERE UserID = ISNULL(@UserID,1) IF @SupplierContactName IS NULL Select @SupplierContactName = u.[Name] FROM [User] u INNER JOIN Admin a ON a.ReportingUserID = u.UserID WHERE a.ReportingUserID = @UserID AND a.AdminID = @AdminID SELECT @SupplierContactTelephoneNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 1 --PHONE AND pn.PracticeID = @PracticeID SELECT @SupplierFacsimileNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 2 --FAX AND pn.PracticeID = @PracticeID Select @SupplierFileReference = ShortName FROM dbo.Admin WHERE AdminID = @AdminID Set @Filler327 = '' -- Supplier data record 3 SELECT @PracticeStreetAddressID = a.AddressID FROM dbo.Practice_Address pa INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.AddressTypeId = 2 -- 2 Street AND pa.PracticeID = @PracticeID SELECT @PracticePostalAddressID = a.AddressID FROM dbo.Practice_Address pa INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.AddressTypeId = 1 -- 1 Postal AND pa.PracticeId = @PracticeID SELECT @SupplierStreetaddress = Replace(Replace(Address,char(13),''),char(10),' ') FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalAddress = Replace(Replace(Address,char(13),''),char(10),' ') FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetSuburb = CASE WHEN City is not null THEN City ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalSuburb = CASE WHEN City is not null THEN City ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetState = CASE WHEN State is not null THEN State ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalState = CASE WHEN State is not null THEN State ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetPostCode = CASE WHEN PostCode is not null THEN PostCode ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalPostCode = CASE WHEN PostCode is not null THEN PostCode ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetCountry = CASE WHEN Country is not null THEN Country ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalCountry = CASE WHEN Country is not null THEN Country ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierEmail = ISNULL(n.Number,'Enter email') FROM dbo.Practice_Number pn INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 4 -- 4 Email AND pn.PracticeID = @PracticeID IF @SupplierEmail IS NULL SELECT @SupplierEmail = '' Set @Filler275 = '' -- Payer identity record -- ****************************************** -- POPULATE THE DATA FOR THE TEXT FILE -- ****************************************** /* this part of the proc was in the original verison of repsp_EmployeePaymentSummaryElectronic which is now combined as part of repsp_EmployeePaymentSummary EXECUTE dbo.repsp_EmployeePaymentSummary @AdminID ,@DateFrom ,@DateTo ,NULL -- Employee Inclause ,0 -- Show entry ,@ETP -- Return ETP bit ,1 -- ElectronicOutput */ INSERT INTO #EmpPaySum SELECT EmployeeID = e.EmployeeID ,EntryDate = ep.EntryDate ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeFirstName = e.FirstName ,EmployeeLastName = e.LastName ,EmployeeAddress = ad.Address + Char(10) + Char(13) + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(CHAR(13) + ad.Country,'') ,EmployeeAdd = ad.Address + Char(10) + Char(13) ,EmployeeCity = ad.City ,EmployeeState = ad.State ,EmployeePostCode = ad.PostCode ,EmployeeCountry = ad.Country -- ,EmployeeStartDate = e.StartDate ,EmployeeTFN = CASE WHEN e.TFN IS NULL THEN '000000000' WHEN NOT (ISNUMERIC(replace(e.TFN,' ','')) = 1) THEN '*** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(replace(e.TFN,' ','')) = 9 THEN '*** TFN ' + e.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '*** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE replace(e.TFN,' ','') END ,TFN = ISNULL(e.TFN,'000000000') ,Payee = ISNULL(ep.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,DateOfBirth = e.DateOfBirth ,Dateofpayment = ep.EntryDate -- ,Memo = ep.Memo ,Wages = Round(ep.Wages,0,1) ,GrossPayment = Round(ep.Wages,0,1) ,LumpSumA = Round(ep.LumpSumA,0,1) ,LumpSumB = Round(ep.LumpSumB,0,1) ,LumpSumD = Round(ep.LumpSumD,0,1) ,LumpSumE = Round(ep.LumpSumE,0,1) ,ReportableSuper = Round(ep.ReportableSuper,0,1) ,NonTaxableAllowances = Round(ep.NonTaxableAllowances,0,1) ,OtherIncome = Null ,FBT = Null ,Tax = Round(ep.Tax,0,1) ,ETPTaxable = Round(ep.ETPTaxable,0,1) ,ETPNonTaxable = Round(ep.ETPNonTaxable,0,1) ,ETPTax = Round(ep.ETPTax,0,1) ,ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,PaymentTypeCode = ep.ETPCode ,AmendmentIndicator = CASE WHEN ep.HasLodgementIndividualThisYear = 1 THEN 'A' ELSE 'O' END -- Amended or Original ,AmendmentIndicatorETP = CASE WHEN ep.HasLodgementETPThisYear = 1 THEN 'A' ELSE 'O' END -- Amended or Original FROM @EmpPaymentsSUM ep INNER JOIN Employee e ON ep.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID LEFT OUTER JOIN Address ad ON ad.AddressID = ep.EmployeeAddressID WHERE e.AdminID = @AdminID AND ((@ETP = 0) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) > 0)) --AND ((@ETP = 1) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) = 0)) ORDER BY e.LastName --EntryDate -- This bit was for multiple jobs (admins). -- At the monent it only outputs job-by-job -- IF NOT @AdminInClause IS NULL -- BEGIN -- EXEC dbo.usp_Split @AdminInClause -- END -- ELSE -- BEGIN -- INSERT -- INTO dbo.#Data -- SELECT AdminID -- FROM dbo.Admin -- WHERE IsNotTaxReg = 0 -- This is where you select the jobs for inclusion -- AND PracticeID = @PracticeID -- AND AdminID = @AdminID -- AND AdminStatusID in (1,2) -- AND AdminTypeID > 1000 ---- END INSERT INTO @Admins SELECT AdminID = a.AdminID ,AdminTypeID = a.AdminTypeID ,ABN = NULL ,WPN = NULL ,ABN_WPN = NULL ,CAC = '001' -- Branch Number Mandatory *** UPDATED BELOW IF SET *** ,AdminFullName = convert(nchar(200),a.Name ) ,PayerName = NULL -- ,PayerTradingName = NULL ,PayerAddress = NULL ,PayerAddress1 = Null ,PayerAddress2 = Null ,PayerSuburb = Null -- Mandatory ,PayerState = Null -- Mandatory ,PayerPostCode = Null -- Mandatory ,PayerCountry = Null ,ReportingUserID = a.ReportingUserID ,ContactName = '' ,ContactTelephoneNumber = @SupplierContactTelephoneNumber -- FORMAT 02b1234b5678 or 0412b123b456 ,ContactEmail = @SupplierContactEmail ,ContactFacsimileNumber = @SupplierFacsimileNumber -- FORMAT 02b1234b5678 ,ETPPayerType = 'P' FROM dbo.Admin a WHERE a.AdminID = @AdminID -- INNER -- JOIN dbo.#Data #d -- ON #d.ID = a.AdminID -- ORDER BY a.AdminID -- -- ADD JOB SUFFIX UPDATE @Admins SET AdminFullName = rtrim(AdminFullName) + isnull(' ' + cpSuffix.PropertyValue,'') FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpSuffix ON cpSuffix.CustomPropertyID = acp.CustomPropertyID AND cpSuffix.CustomPropertyTypeID in (12) -- ADMINS FOR HISTORY -- UPDATE DATA -- Payer Name UPDATE @Admins SET PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE NOT cpPN.PropertyValue IS NULL UPDATE @Admins SET PayerName = Isnull(PayerName,isNull(AdminFullName,'')) -- CAC Branch Number /* */ UPDATE @Admins SET CAC = Isnull(cpBranch.PropertyValue,a.CAC) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) AND ISNULL(cpBranch.AdminTypeID,@AdminTypeID) = @AdminTypeID UPDATE @Admins SET PayerTradingName = '' -- SPLIT OUT ADDRESS LINES UPDATE @Admins SET PayerAddress = Replace(Replace(ad.Address,char(13),'ƒ'),char(10),'ƒ') ,PayerSuburb = convert(nchar(27),ad.City) -- Mandatory ,PayerState = convert(nchar(3),ad.State) -- Mandatory ,PayerPostCode = convert(nchar(4),ad.PostCode) -- Mandatory ,PayerCountry = convert(nchar(20),Isnull(ad.Country,'')) FROM dbo.Address ad INNER JOIN dbo.Admin_Address aa ON aa.AddressID = ad.AddressID INNER JOIN @Admins a ON a.AdminID = aa.AdminID WHERE ad.IsMailing = 1 UPDATE @Admins SET PayerAddress = Replace(PayerAddress,'ƒƒ','ƒ') UPDATE @Admins SET PayerAddress1 = CASE WHEN Charindex(PayerAddress,'ƒ') > 0 THEN convert(nchar(38),left(PayerAddress, Charindex(PayerAddress,'ƒ'))) ELSE convert(nchar(38),PayerAddress) END ,PayerAddress2 = convert(nchar(38),Right(PayerAddress, Charindex(PayerAddress,'ƒ'))) FROM @Admins UPDATE @Admins SET PayerAddress1 = REPLACE (PayerAddress1,'ƒ',' ') ,PayerAddress2 = REPLACE (PayerAddress2,'ƒ',' ') -- CONTACT NAME UPDATE @Admins SET ContactName = u.Name FROM @Admins a INNER JOIN dbo.[User] u ON u.UserID = a.ReportingUserID -- ABN WPN UPDATE @Admins SET ABN = convert(nchar(11),REPLACE(cpABN.PropertyValue,' ','')) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) UPDATE @Admins SET WPN = convert(nchar(11),REPLACE(cpWPN.PropertyValue,' ','')) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) UPDATE @Admins SET ABN_WPN = ISNULL(WPN,ABN) -- Software record SELECT @Softwareproducttype = 'COMMERCIAL Exalt Technologies, MYOB Insolvency ' + Setting FROM dbo.ApplicationSetting WHERE SettingId = 1 SET @Filler536 = '' -- PAYGW Payment Summary Individual Non-business data record INSERT INTO @Emps SELECT PayeeTFN = convert(nchar(9),replace(eps.TFN,' ','')) -- Mandatory ,PayeeSurname = convert(nchar(30),eps.EmployeeLastName) -- Mandatory ,PayeeFirstGivenName = CASE WHEN CharIndex(' ',eps.EmployeeFirstName) = 0 THEN Convert(nchar(15),eps.EmployeeFirstName) ELSE Convert(nchar(15),LEFT(eps.EmployeeFirstName,CharIndex(' ',eps.EmployeeFirstName))) -- Mandatory END ,PayeeSecondGivenName = CASE WHEN CharIndex(' ',eps.EmployeeFirstName) = 0 THEN '' ELSE ISNULL(convert(nchar(15),RIGHT(eps.EmployeeFirstName,LEN(eps.EmployeeFirstName) - CharIndex(' ',eps.EmployeeFirstName))),'') END --,PayeeAddress = Replace(eps.EmployeeAdd,char(13) + char(10),'ƒ') ,PayeeAddress = Replace(Replace(eps.EmployeeAdd,char(13),'ƒ'),char(10),'ƒ') ,PayeeAddress1 = '' ,PayeeAddress2 = '' ,PayeeSuburb = convert(nchar(27),eps.EmployeeCity) -- Mandatory ,PayeeState = convert(nchar(3),eps.EmployeeState) -- Mandatory ,PayeePostCode = convert(nchar(4),eps.EmployeePostCode) -- Mandatory ,PayeeCountry = convert(nchar(20),Isnull(eps.EmployeeCountry,'')) ,PeriodPaymentStart = Replace( str(datepart(d,@DateFrom),2) + str(datepart(m,@DateFrom),2) + str(datepart(yyyy,@DateFrom),4) ,' ','0') ,PeriodPaymentEnd = Replace( str(datepart(d,@DateTo),2) + str(datepart(m,@DateTo),2) + str(datepart(yyyy,@DateTo),4) ,' ','0') ,TotalTaxWithheld = REPLACE(STR(FLOOR(eps.Tax),8),' ',0) --REPLICATE('0', 8 - Len(eps.Tax)) + ,STR(eps.Tax) -- Mandatory ,GrossPayment = REPLACE(STR(FLOOR(eps.GrossPayment),8),' ',0) -- Mandatory ,TotalAllowances = REPLACE(STR(FLOOR(eps.NonTaxableAllowances),8),' ',0) -- ,LumpSumPaymentA = REPLACE(STR(FLOOR(eps.LumpSumA),8),' ',0) -- Mandatory ,LumpSumPaymentB = REPLACE(STR(FLOOR(eps.LumpSumB),8),' ',0) -- Mandatory ,LumpSumPaymentD = REPLACE(STR(FLOOR(eps.LumpSumD),8),' ',0) -- Mandatory ,LumpSumPaymentE = REPLACE(STR(FLOOR(eps.LumpSumE),8),' ',0) -- Mandatory ,PayeeDateOfBirth = ISNULL( Replace( str(datepart(d,eps.DateOfBirth),2) -- If only year is recorded then return as 00 + str(datepart(m,eps.DateOfBirth),2) -- If only year is recorded then return as 00 + str(datepart(yyyy,eps.DateOfBirth),4) ,' ','0') ,'00000000' ) -- Mandatory ,PayeeETPDateofpayment = ISNULL( Replace( str(datepart(d,eps.Dateofpayment),2) + str(datepart(m,eps.Dateofpayment),2) + str(datepart(yyyy,eps.Dateofpayment),4) ,' ','0') ,'00000000' ) -- Mandatory -- ,PayeeDateStarted = -- Replace( -- str(datepart(d,eps.PayeeDateStarted),2) -- + str(datepart(m,eps.PayeeDateStarted),2) -- + str(datepart(yyyy,eps.PayeeDateStarted),4) -- ,' ','0') -- Mandatory -- ,ETPTaxable = REPLACE(STR(FLOOR(eps.ETPTaxable),8),' ',0) ,ETPNonTaxable = REPLACE(STR(FLOOR(eps.ETPNonTaxable),8),' ',0) ,ETPTax = REPLACE(STR(FLOOR(eps.ETPTax),8),' ',0) ,CommunityDevelopmentEmploymentProject = '00000000' -- Mandatory ,OtherIncome = '00000000' -- Mandatory ,ReportableFringeBenefits = '00000000' -- Mandatory ,PaymentTypeCode ,AmendmentIndicator ,AmendmentIndicatorETP ,ReportableSuper = REPLACE(STR(FLOOR(eps.ReportableSuper),8),' ',0) FROM #EmpPaySum eps -- SPLIT OUT ADDRESS LINES UPDATE @Emps SET PayeeAddress = Replace(PayeeAddress,'ƒƒ','ƒ') /* UPDATE @Emps SET PayeeAddress = Replace(PayeeAddress,'ƒ',' ') */ UPDATE @Emps SET PayeeAddress1 = CASE WHEN Charindex('ƒ',PayeeAddress) = 0 THEN convert(nchar(38),PayeeAddress) ELSE convert(nchar(38),REPLACE(Convert(nchar(38),LEFT(PayeeAddress,CharIndex('ƒ',PayeeAddress))),'ƒ',' ')) -- Mandatory END ,PayeeAddress2 = CASE WHEN CharIndex('ƒ',PayeeAddress) = 0 THEN '' ELSE ISNULL(convert(nchar(38),RIGHT(PayeeAddress,LEN(PayeeAddress) - CharIndex('ƒ',PayeeAddress))),'') END FROM @Emps UPDATE @Emps SET PayeeAddress1 = Replace(PayeeAddress1,'ƒ',' ') ,PayeeAddress2 = Replace(PayeeAddress2,'ƒ',' ') --SELECT PayeeAddress1 , PayeeAddress2 ,REPLACE(PayeeAddress,'ƒ',' '),Charindex('ƒ',PayeeAddress),* FROM @Emps SET @Filler316 = '' SET @Filler283 = '' --SET @Filler275 = '' SET @ReportableEmployerSuperannuationContribs = '00000000' SET @LumpSumPaymentAType = 'R' -- R – where payment was for a genuine redundancy; T – where payment was not a payment for a genuine redundancy SET @WorkplaceGiving = '00000000' SET @UnionProfFees = '00000000' SET @ExemptForeignEmploymentIncome = '00000000' SET @DeductibleAmountPurchasePriceofAnnuity = '00000000' -- Eligible Termination Payment (ETP) data record Set @Filler380 = '' Set @Filler377 = '' --File total record Set @FileTotal = 'FILE-TOTAL' Set @Filler607 = '' --Select * FROM #EmpPaySum --Select * FROM @Emps --return 0 -- ******************************************************** -- REPORT OUTPUT INSERT INTO @Output SELECT -- Supplier data record 1 --Character position Field length Field format Field type Field name Data item Definitions --& edit rules --1-3 3 N M Record length (=628) SR01 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER1) SR02 7.2 --18-28 11 N M Supplier Australian Business Number SR03 7.3 --29-29 1 A M Run type (T=Test, P=Production) SR04 7.4 --30-37 8 DT M Report end date (DDMMCCYY) SR05 7.5 --38-38 1 A M Data type (=E) SR06 7.6 --39-39 1 A M Type of report (=A) SR07 7.7 --40-40 1 A M Format of return media (=P) SR08 7.8 --41-50 10 AN M ATO Report specification version number (=FEMPA007.4) SR09 7.9 --51-60 10 AN O ATO Corporate External Gateway User ID SR10 7.10 --61-628 568 A S Filler SR11 7.11 1 -- order ,'628' + 'IDENTREGISTER1' + @PracticeABN + @RunType + @ReportEndDate + @Datatype + @Typeofreport + @Formatofreturnmedia + @ATOReportSpecificationVersionNumber + @Filler578 -- + CHAR(10) + CHAR(13) -- Supplier data record 2 --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) SR12 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER2) SR13 7.12 --18-217 200 AN M Supplier name SR14 7.13 --218-255 38 AN M Supplier contact name SR15 7.14 --256-270 15 AN M Supplier contact telephone number SR16 7.15 --271-285 15 AN O Supplier facsimile number SR17 7.16 --286-301 16 AN O Supplier file reference SR18 7.17 --302-628 327 A S Filler SR19 7.11 INSERT INTO @Output SELECT 2 -- order ,'628' + 'IDENTREGISTER2' + @Suppliername + @SupplierContactName + @SupplierContactTelephoneNumber + @SupplierFacsimileNumber + @SupplierFileReference + @Filler327 -- Supplier data record 3 --1-3 3 N M Record length (=628) SR20 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER3) SR21 7.18 --18-55 38 AN M Street address - line 1 SR22 7.19 --56-93 38 AN O Street address - line 2 SR23 7.19 --94-120 27 AN M Suburb, town or city SR24 7.20 --121-123 3 A M State or territory SR25 7.21 --124-127 4 N M Postcode SR26 7.22 --128-147 20 AN O Country SR27 7.23 --148-185 38 AN O Postal address - line 1 SR28 7.24 --186-223 38 AN C Postal address - line 2 SR29 7.24 --224-250 27 AN C Suburb, town or city SR30 7.25 --251-253 3 A C State or territory SR31 7.26 --254-257 4 N C Postcode SR32 7.27 --258-277 20 AN O Country SR33 7.28 --278-353 76 AN O Supplier e-mail address SR34 7.29 --354-628 275 A S Filler SR35 7.11 INSERT INTO @Output SELECT 3 -- order ,'628' + 'IDENTREGISTER3' + @SupplierStreetaddress + @SupplierStreetSuburb + @SupplierStreetState + @SupplierStreetPostCode + @SupplierStreetCountry + @SupplierPostaladdress + @SupplierPostalSuburb + @SupplierPostalState + @SupplierPostalPostCode + @SupplierPostalCountry + @SupplierEmail + @Filler275 -- Payer identity record --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) PR01 7.1 --4-11 8 A M Record identifier (=IDENTITY) PR02 7.30 --12-22 11 N M Payer Australian Business Number or Withholding Payer Number PR03 7.31 --23-25 3 N M Branch Number PR04 7.32 --26-29 4 N M Financial year (CCYY) PR05 7.33 --30-229 200 AN M Payer name PR06 7.34 --230-429 200 AN O Payer trading name PR07 7.35 --430-467 38 AN M Payer address - line 1 PR08 7.36 --468-505 38 AN O Payer address - line 2 PR09 7.36 --506-532 27 AN M Suburb, town or city PR10 7.37 --533-535 3 A M State or territory PR11 7.38 --536-539 4 N M Postcode PR12 7.39 --540-559 20 AN O Country PR13 7.40 --560-597 38 AN O Contact name PR14 7.41 --598-612 15 AN O Contact telephone number PR15 7.42 --613-627 15 AN O Contact facsimile number PR16 7.43 --628-628 1 A C ETP payer type PR17 7.44 INSERT INTO @Output SELECT 4 -- order , '628' + 'IDENTITY' + isnull(ABN_WPN,'') -- Mandatory + CAC + Convert(nchar(4),YEAR(dbo.uFnFinancialYearEndDate(@DateTo))) -- Mandatory + PayerName + PayerTradingName + PayerAddress1 + PayerAddress2 + PayerSuburb + PayerState + PayerPostCode + PayerCountry + ContactName + ContactTelephoneNumber + ContactFacsimileNumber + ' ' --filler 1 -- ETPPayerType FROM @Admins -- Software record --Character --position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) SW01 7.1 --4-11 8 A M Record identifier (=SOFTWARE) SW02 7.45 --12-91 80 AN M Software product type SW03 7.46 --92-92 1 A M ECI tested (=Y or N) SW05 7.70 --93-628 536 A S Filler SW04 7.11 INSERT INTO @Output SELECT 5 -- order , '628' + 'SOFTWARE' + @Softwareproducttype + 'Y' + @Filler536 -- INDIVIDUAL NON-BUSINESS PAYMENT SUMMARY DATA RECORD --Character position Field length Field format Field type Field name Definitions & edit rules --1-3 3 N M Record length (=628) 7.1 --4-7 4 A M Record identifier (=DINB) 7.46 --8-8 1 A M Income type (= P or S) 7.95 --9-17 9 N M Payee tax file number 7.47 --18-25 8 DT O Payee date of birth (DDMMCCYY) 7.48 --26-55 30 AN M Payee surname 7.49 --56-70 15 AN C Payee first given name 7.50 --71-85 15 AN O Payee second given name 7.51 --86-123 38 AN M Payee address - line 1 7.52 --124-161 38 AN O Payee address - line 2 7.52 --162-188 27 AN M Suburb, town or locality 7.53 --189-191 3 A M State or territory 7.54 --192-195 4 N M Postcode 7.55 --196-215 20 AN C Country 7.56 --216-223 8 DT M Period of payment start date (DDMMCCYY) 7.57 --224-231 8 DT M Period of payment end date (DDMMCCYY) 7.58 --232-239 8 N M Total tax withheld (dollars) 7.59 --240-247 8 N M Gross payments (dollars) 7.61 --248-255 8 N M Total allowances (dollars) 7.62 --256-263 8 N M Lump sum payment A (dollars) 7.63 --264-271 8 N M Lump sum payment B (dollars) 7.63 --272-279 8 N M Lump sum payment D (dollars) 7.63 --280-287 8 N M Lump sum payment E (dollars) 7.63 --288-295 8 N M Community development employment project (dollars) 7.64 --296-303 8 N M Other income (dollars) 7.65 --304-311 8 N M Reportable fringe benefits (dollars) 7.66 --312-312 1 A M Amendment indicator (=A or O) 7.92 --313-628 316 A S Filler 7.10 --DEBUG /* SELECT 6 -- order ,'628' + 'DINB' + 'S' --S - for salary or wages , PayeeTFN -- Mandatory , PayeeDateOfBirth -- Mandatory , PayeeSurname -- Mandatory , PayeeFirstGivenName -- Mandatory , PayeeSecondGivenName , PayeeAddress1 -- Mandatory , PayeeAddress2 , PayeeSuburb -- Mandatory , PayeeState -- Mandatory , PayeePostCode -- Mandatory , PayeeCountry , PeriodPaymentStart -- Mandatory , PeriodPaymentEnd -- Mandatory , TotalTaxWithheld -- Mandatory , GrossPayment -- Mandatory , TotalAllowances -- Mandatory , LumpSumPaymentA -- Mandatory , LumpSumPaymentB -- Mandatory , LumpSumPaymentD -- Mandatory , LumpSumPaymentE -- Mandatory , CommunityDevelopmentEmploymentProject -- Mandatory ,@ATOReportSpecificationVersionNumber , CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA008.0' THEN OtherIncome -- Mandatory + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @Filler316 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA009.0' THEN ' ' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @ReportableEmployerSuperannuationContribs + @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @Filler283 ELSE -- 'FEMPA010.0' ' ' --OtherIncome left blank (Filler) + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @ReportableEmployerSuperannuationContribs + @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 END FROM @EMPS WHERE (@ETP = 0) */ INSERT INTO @Output SELECT 6 -- order ,'628' + 'DINB' + 'S' --S - for salary or wages + PayeeTFN -- Mandatory + PayeeDateOfBirth -- Mandatory + PayeeSurname -- Mandatory + PayeeFirstGivenName -- Mandatory + PayeeSecondGivenName + PayeeAddress1 -- Mandatory + PayeeAddress2 + PayeeSuburb -- Mandatory + PayeeState -- Mandatory + PayeePostCode -- Mandatory + PayeeCountry + PeriodPaymentStart -- Mandatory + PeriodPaymentEnd -- Mandatory + TotalTaxWithheld -- Mandatory + GrossPayment -- Mandatory + TotalAllowances -- Mandatory + LumpSumPaymentA -- Mandatory + LumpSumPaymentB -- Mandatory + LumpSumPaymentD -- Mandatory + LumpSumPaymentE -- Mandatory + CommunityDevelopmentEmploymentProject -- Mandatory + CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA008.0' THEN OtherIncome -- Mandatory + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @Filler316 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA009.0' THEN ' ' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + CASE WHEN LumpSumPaymentA = '00000000' THEN ' ' ELSE @LumpSumPaymentAType END + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @Filler283 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA010.0' THEN '00000000' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + ' ' -- @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 ELSE -- 'FEMPA011.0' '00000000' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + CASE WHEN LumpSumPaymentA = '00000000' THEN ' ' ELSE @LumpSumPaymentAType END + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 END FROM @EMPS WHERE (@ETP = 0) -- PAYGW Payment Summary Voluntary Agreement data record -- NOT SUPPORTED -- 7 -- order --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) VA01 7.1 --4-7 4 A M Record identifier (=DBUS) VA02 7.69 --8-18 11 N M Payee Australian Business Number VA03 7.71 --19-26 8 DT O Payee date of birth (DDMMCCYY) VA04 7.50 --27-56 30 AN M Payee surname VA05 7.51 --57-71 15 AN M Payee first given name VA06 7.52 --72-86 15 AN O Payee second given name VA07 7.53 --87-124 38 AN M Payee address - line 1 VA08 7.54 --125-162 38 AN O Payee address - line 2 VA09 7.54 --163-189 27 AN M Suburb, town or city VA10 7.55 --190-192 3 A M State or territory VA11 7.56 --193-196 4 N M Postcode VA12 7.57 --197-216 20 AN O Country VA13 7.58 --217-224 8 DT M Period of payment start date (DDMMCCYY) VA14 7.59 --225-232 8 DT M Period of payment end date (DDMMCCYY) VA15 7.60 --233-240 8 N M Total tax withheld (dollars) VA16 7.61 --241-245 5 N M Withholding rate VA17 7.62 --246-253 8 N M Gross payments, including the market value of non-cash benefits (dollars) VA18 7.72 --254-628 375 A S Filler VA19 7.11 -- PAYGW Payment Summary Labour Hire & Other Specified Payments data record -- NOT SUPPORTED -- 8 -- order -- PAYGW Payment Summary Personal Services Attributed Income data record -- NOT SUPPORTED -- 9 -- order -- Eligible Termination Payment (ETP) data record --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) ET01 7.1 --4-7 4 A M Record identifier (=DETP) ET02 7.73 --8-16 9 N M Payee Tax File Number ET03 7.49 --17-46 30 AN M Payee surname ET04 7.51 --47-61 15 AN M Payee first given name ET05 7.52 --62-76 15 AN O Payee second given name ET06 7.53 --77-114 38 AN M Payee address - line 1 ET07 7.54 --115-152 38 AN O Payee address - line 2 ET08 7.54 --153-179 27 AN M Suburb, town or city ET09 7.55 --180-182 3 A M State or territory ET10 7.56 --183-186 4 N M Postcode ET11 7.57 --187-206 20 AN O Country ET12 7.58 --207-214 8 DT C Payee date of birth (DDMMCCYY) ET13 7.74 --215-222 8 DT M Date of payment (DDMMCCYY) ET14 7.75 --223-230 8 DT M Date started (DDMMCCYY) ET15 7.76 --231-235 5 N C Number of days before 1 July 1983 ET16 7.77 --236-240 5 N M Number of days after 30 June 1983 ET17 7.78 --241-248 8 N C CGT exempt component (dollars) ET18 7.79 --249-256 8 N C Non-qualifying component (dollars) ET19 7.80 --257-264 8 N C Undeducted contributions (dollars) ET20 7.81 --265-272 8 N C Concessional component (dollars) ET21 7.82 --273-280 8 N C Pre July 1983 component (dollars) ET22 7.83 --281-288 8 N C Post June 1983 untaxed element (dollars) ET23 7.84 --289-296 8 N C Post June 1983 taxed element (dollars) ET24 7.85 --297-304 8 N C Post June 1994 invalidity component (dollars) ET25 7.86 --305-312 8 N M Gross amount of payment (dollars) ET26 7.87 --313-320 8 N M Total tax withheld (dollars) ET27 7.88 --321-328 8 N M Assessable amount (dollars) ET28 7.89 --329-329 1 A M Death benefit (=Y or N) ET29 7.90 --330-330 1 A C Type of death benefit (=T or O) ET30 7.91 --331-628 298 A S Filler ET31 7.11 -- v11.0.1 /* Character position Field length Field format Field type Field name Reference number 1-3 3 N M Record length (=628) 7.1 4-7 4 A M Record identifier (=DEMP) 7.82 8-16 9 N M Payee tax file number 7.48 17-46 30 AN M Payee surname or family name 7.50 47-61 15 AN C Payee first given name 7.51 62-76 15 AN O Payee second given name 7.52 77-114 38 AN M Payee address line 1 7.53 115-152 38 AN O Payee address line 2 7.53 153-179 27 AN M Payee suburb, town or locality 7.54 180-182 3 A M Payee state or territory 7.55 183-186 4 N M Payee postcode 7.56 187-206 20 AN C Payee country 7.57 207-214 8 DT M Payee date of birth (DDMMCCYY) 7.49 215-222 8 DT M Date of payment (DDMMCCYY) 7.83 223-230 8 N M Total tax withheld (dollars) 7.60 231-238 8 N M Taxable component (dollars) 7.84 239-246 8 N M Tax free component (dollars) 7.85 247-247 1 A M Payment type code (=R, O, S, P, D, B, N or T) 7.86 248-248 1 A M Amendment indicator (=A or O) 7.67 249-628 380 A S Filler 7.10 */ INSERT INTO @Output SELECT 10 -- order , '628' + 'DEMP' + PayeeTFN -- Mandatory + PayeeSurname -- Mandatory + PayeeFirstGivenName -- Mandatory + PayeeSecondGivenName + PayeeAddress1 -- Mandatory + PayeeAddress2 + PayeeSuburb -- Mandatory + PayeeState -- Mandatory + PayeePostCode -- Mandatory + PayeeCountry + PayeeDateOfBirth + PayeeETPDateofpayment + ETPTax --223-230 8 N M Total tax withheld (dollars) 7.60 + ETPTaxable --231-238 8 N M Taxable component (dollars) 7.79 + ETPNonTaxable -- 239-246 8 N M Tax free component (dollars) 7.80 + CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA011.0' THEN + PaymentTypeCode + AmendmentIndicatorETP --251-251 1 A M Amendment indicator (=A or O) 7.67 + @Filler380 ELSE 'N' -- Death benefit (=Y or N) Mandatory + ' ' --C Type of death benefit (=T or O) ET30 7.91 + 'N' --249-249 1 A M Transitional termination payment (=Y or N) 7.83 + 'N' --250-250 1 A M Is this payment part of a payment made in an earlier income year for the same termination? (=Y or N) 7.84 + AmendmentIndicatorETP --251-251 1 A M Amendment indicator (=A or O) 7.67 + @Filler377 END FROM @EMPS WHERE (@ETP = 1) --331-628 298 A S Filler ET31 7.11 --File total record -- calc no of records Select @NumberOfRecords = Count(Outputfield) + 1 from @Output --Character position Field length Field format Field type Field name Definitions & edit rules --1-3 3 N M Record length (=628) 7.1 --4-13 10 AN M Record identifier (=FILE-TOTAL) 7.90 --14-21 8 N M Number of records 7.91 --22-628 607 A S Filler 7.10 INSERT INTO @Output SELECT 11 -- order , '628' + @FileTotal + REPLACE(STR(FLOOR(@NumberOfRecords),8),' ',0) -- including this one + @Filler607 -- INSERTS A LINE FEED /* IF @ATOReportSpecificationVersionNumber = 'FEMPA008.0' BEGIN INSERT INTO @Output SELECT 12 -- order ,'' END */ SELECT * FROM @Output Order By OutputOrder END /* IF @BatchID IS NOT NULL BEGIN DECLARE @XMLData XML DECLARE @PayPeriodDateStart DATETIME DECLARE @PayPeriodDateEnd DATETIME DECLARE @PayrollEventFinal bit SELECT @XMLData = b.Data FROM dbo.Batch b WHERE b.BatchID = @BatchID SELECT @PayPeriodDateStart = pb.value('(@DateFrom)[1]', 'DATETIME') ,@PayPeriodDateEnd = pb.value('(@DateTo)[1]', 'DATETIME') ,@PayrollEventFinal = pb.value('(@PayrollEventFinal)[1]', 'bit') FROM @XmlData.nodes('/Items/PayrollData/Dates') AS PayData(pb) END */ IF @ElectronicOutput = 1 AND @BatchID IS NOT NULL BEGIN -- Add R INSERT INTO @LUMPA SELECT lumpA.EmployeeID ,'R' ,lumpA.LumpSumA FROM @EmpPaymentsSUM lumpA WHERE lumpA.LumpSumA <> 0 -- add a T record if there isnt any R INSERT INTO @LUMPA SELECT lumpAT.EmployeeID ,'T' ,lumpAT.LumpSumAT FROM @EmpPaymentsSUM lumpAT WHERE lumpAT.LumpSumAT <> 0 /* DECLARE @LastLumpSum_A_Date DECLARE @LastLumpSum_AT_Date select @LastLumpSum_A_Date = Max(EntryDate) FROM @EmpPayments WHERE LumpSumA <> 0 select @LastLumpSum_AT_Date = Max(EntryDate) FROM @EmpPayments WHERE LumpSumAT <> 0 */ -- Caclulate Totals Select @TotalPaid = IsNull(SUM(ep.GrossPayment),0) -- Total Withheld ,@TotalTax = IsNull(SUM(ep.TAX),0) -- Total Total Gross ,@TransLastDate = Max(ep.EntryDate) FROM @EmpPayments ep WHERE InReport = 1 /* Select @TotalTax ,@TotalPaid Select * FROM @EmpPayments ep WHERE InReport = 1*/ DECLARE @XMLResults TABLE ( EmployeeID int ,XML xml ) ; WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs,'http://www.sbr.gov.au/ato/payevntemp' as targetNamespace,'qualified' as elementFormDefault,'http://www.sbr.gov.au/ato/payevntemp' as tns) -- ('tns' as tns, DEFAULT 'tns') INSERT INTO @XMLResults Select epsh.EmployeeID ,XML = --Convert(nvarchar(max), ( -- PAYEVNTEMP Select ( -- Payee Select ( SELECT 'tns:TaxFileNumberId' = replace(e.TFN,' ','') , 'tns:AustralianBusinessNumberId' = Replace(eps.RemunerationABN,' ','') , 'tns:EmploymentPayrollNumberId' = ISNULL(e.PayrollReference,e.EmployeeID) --FROM @EmpPaymentsSUM eps_ABN --WHERE eps_ABN.RemunerationABN IS NOT NULL --AND eps_ABN.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Identifiers'), TYPE ) ,( SELECT 'tns:FamilyNameT' = e.LastName ,'tns:GivenNameT' = e.FirstName ,'tns:OtherGivenNameT' = e.Title FOR XML PATH ('tns:PersonNameDetails'), TYPE ) -- DOB ,( SELECT 'tns:BirthDm' = DAY(e.DateOfBirth) ,'tns:BirthM' = MONTH(e.DateOfBirth) ,'tns:BirthY' = YEAR(e.DateOfBirth) FOR XML PATH ('tns:PersonDemographicDetails'), TYPE ) -- Address ,( SELECT 'tns:Line1T' = ad.AddressLine1 ,'tns:Line2T' = ad.AddressLine2 ,'tns:LocalityNameT' = ad.City ,'tns:StateOrTerritoryC' = ad.State -- matches list? ,'tns:PostcodeT' = ad.PostCode -- if aust is number? ,'tns:CountryC' = eps.EmployeeCountryCode -- if not aust matches list FOR XML PATH ('tns:AddressDetails'), TYPE ) -- contact , ( SELECT 'tns:ElectronicMailAddressT' = eps.EmployeeEmail ,'tns:TelephoneMinimalN' = convert(varchar(16),eps.EmployeePhone) FOR XML PATH ('tns:ElectronicContact'), TYPE ) ,( SELECT 'tns:EmploymentStartD' = CASE WHEN PrevLodgementINBDate IS NOT NULL Or PrevLodgementINBDate IS NOT NULL THEN CONVERT(char(10),eps.EmployeeCommenceDate,126) ELSE NULL END ,'tns:EmploymentEndD' = CONVERT(char(10),eps.EmployeeDateEnd,126) FOR XML PATH ('tns:EmployerConditions'), TYPE ) ,( SELECT ( SELECT 'tns:StartD' = CONVERT(char(10),@PayPeriodDateStart,126) ,'tns:EndD' = CONVERT(char(10),@PayPeriodDateEnd,126) ,'tns:PayrollEventFinalI' = LOWER(@IsFinal) -- 'true or false' --CASE WHEN b.IsFinal = 1 THEN 'true' ELSE 'false' END FOR XML PATH ('tns:PayrollPeriod'), TYPE ) , CASE WHEN ( ISNULL(eps.RemunerationIncomeType_LookupID,0) = 0 OR eps.RemunerationIncomeType_LookupID = 109201 ) THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:CommunityDevelopmentEmploymentProjectA' = CONVERT(decimal(18,2),eps.CommunityDevelopmentEmploymentProject,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) ,'tns:ExemptForeignEmploymentIncomeA' = CONVERT(decimal(18,2),eps.ExemptForeignEmploymentIncome,0) FOR XML PATH ('tns:IndividualNonBusiness'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:VoluntaryAgreement'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109203 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:LabourHireArrangementPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109204 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:SpecifiedByRegulationPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109205 THEN ( SELECT 'tns:A' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:ForeignWithholdingA' = CONVERT(decimal(18,2),eps.ForeignWithholding,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:JointPetroleumDevelopmentAreaPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109206 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FROM @EmpData edfw WHERE edfw.RemunerationIncomeType = 109206 AND edfw.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:WorkingHolidayMaker'), TYPE ) ELSE '' END , CASE WHEN ISNULL(eps.TaxFlags,0) & 8 = 8 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:ForeignWithholdingA' = CONVERT(decimal(18,2),eps.ForeignWithholding,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:PaymentToForeignResident'), TYPE ) ELSE '' END , ( SELECT ( SELECT 'tns:TypeC' = REPLACE(etp.ETPCode,' ','') ,'tns:PaymentRecordPaymentEffectiveD' = CONVERT(char(10),eps.EntryDate,126) ,'tns:SuperannuationTaxFreeComponentA' = CONVERT(decimal(18,2),etp.ETPNonTaxable,0) ,'tns:SuperannuationEmploymentTerminationTaxableComponentTotalA' = CONVERT(decimal(18,2),etp.ETPTaxable,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),etp.ETPTax,0) FROM @ETP_Results etp WHERE etp.ETPNonTaxable + etp.ETPTaxable <> 0 AND etp.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:EmploymentTerminationPayment'), TYPE ) FOR XML PATH ('tns:EmploymentTerminationPaymentCollection'), TYPE ) , ( SELECT ( SELECT 'tns:LumpSumAC' = lumpA.LumpSumType ,'tns:LumpSumAA' = CONVERT(decimal(18,2),lumpA.LumpSumAmount,0) FROM @LUMPA lumpA WHERE lumpA.EmployeeID = eps.EmployeeID AND lumpA.LumpSumType = 'R' FOR XML PATH ('tns:LumpSumPaymentA'), TYPE ) , 'tns:LumpSumBA' = CONVERT(decimal(18,2),lump.LumpSumB,0) ,'tns:LumpSumDA' = CONVERT(decimal(18,2),lump.LumpSumD,0) ,'tns:LumpSumEA' = CONVERT(decimal(18,2),lump.LumpSumE,0) FROM @EmpPaymentsSUM lump WHERE lump.EmployeeID = eps.EmployeeID AND ( lump.LumpSumB <> 0 OR lump.LumpSumD <> 0 OR lump.LumpSumE <> 0 ) FOR XML PATH ('tns:UnusedAnnualOrLongServiceLeavePayment'), TYPE ) , ( SELECT ( SELECT 'tns:TypeC' = AllowType -- other allowance account description reqd if "Other" ,'tns:OtherAllowanceTypeDe' = CASE WHEN AllowType = 'Other' THEN ISNULL(allow.AllowTypeOtherDesc, 'other deductible expenses') ELSE NULL END ,'tns:IndividualNonBusinessEmploymentAllowancesA' = CONVERT(decimal(18,2),allow.AllowAmount,0) FROM @Allows allow WHERE allow.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Allowance'), TYPE ) FOR XML PATH ('tns:AllowanceCollection'), TYPE ) , ( SELECT ( SELECT 'tns:TypeC' = DeductionType ,'tns:A' = CONVERT(decimal(18,2),ded.DeductionAmount,0) FROM @DEDUCTIONS ded WHERE ded.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Deduction'), TYPE ) FOR XML PATH ('tns:DeductionCollection'), TYPE ) , --CASE --WHEN -- eps.RemunerationIncomeType_LookupID = 109202 -- AND ISNULL(e.TFN,'') = '' -- THEN NULL --ELSE ( SELECT 'tns:EmployerContributionsSuperannuationGuaranteeA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN 0 ELSE CONVERT(decimal(18,2),eps.SuperSGC,0) END ,'tns:OrdinaryTimeEarningsA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN 0 ELSE CONVERT(decimal(18,2),eps.Wages - eps.ExcludeFromOTE,0) END ,'tns:EmployerReportableA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN NULL ELSE CONVERT(decimal(18,2),eps.ReportableSuper,0) END FOR XML PATH ('tns:SuperannuationContribution'), TYPE ) --END , ( SELECT 'tns:TaxableIncomeFringeBenefitsReportableA' = CONVERT(decimal(18,2),eps.FBTTaxable,0) ,'tns:ExemptIncomeFringeBenefitsReportableA' = CONVERT(decimal(18,2),eps.FBTNonTaxable,0) FOR XML PATH ('tns:IncomeFringeBenefitsReportable'), TYPE ) FOR XML PATH ('tns:RemunerationIncomeTaxPayAsYouGoWithholding'), TYPE ) , -- Onboarding CASE WHEN eps.RemunerationABN IS NOT NULL AND e.TFN IS NULL THEN '' ELSE ( SELECT -- TFND ( SELECT 'tns:PaymentArrangementTerminationC' = 'T' -- | ,'tns:ResidencyTaxPurposesPersonStatusC' = -- Resident|Non-Resident|Working Holiday Maker CASE WHEN ed.RemunerationIncomeType = 109206 THEN ed.RemunerationIncomeType_DESC --'Working Holiday Maker' WHEN ISNULL(eps.TaxFlags,0) & 8 = 8 THEN 'Non-Resident' ELSE 'Resident' END ,'tns:PaymentArrangementPaymentBasisC' = CASE -- F|P|C|L|S (F = Full time payees; P = Part time payees; C = Casual payees; L = Labour hire payees; S = Pension or Annuity payees) WHEN epsTFND.WagesPeriod_LookupID = 10600 THEN 'P' -- W1 WHEN epsTFND.WagesPeriod_LookupID = 10601 THEN 'P' -- W2 WHEN epsTFND.WagesPeriod_LookupID = 10602 THEN 'P' -- W3 WHEN epsTFND.WagesPeriod_LookupID = 10603 THEN 'P' -- W4 WHEN epsTFND.WagesPeriod_LookupID = 10604 THEN 'F' -- W5 WHEN epsTFND.WagesPeriod_LookupID = 10605 THEN 'F' -- W6 WHEN epsTFND.WagesPeriod_LookupID = 10606 THEN 'F' -- W7 WHEN epsTFND.WagesPeriod_LookupID = 10607 THEN 'F' -- F WHEN epsTFND.WagesPeriod_LookupID = 10609 THEN 'C' -- H WHEN epsTFND.WagesPeriod_LookupID = 10608 THEN 'F' -- M ELSE 'F' END ,'tns:TaxOffsetClaimTaxFreeThresholdI' = CASE WHEN ( (ISNULL(eps.TaxFlags,0) & 8 = 8) OR (ISNULL(epsTFND.TaxFlags,0) & 4 = 4) ) THEN 'false' ELSE 'true' END -- The tax-free threshold is the amount of income that can be earned each year that is not taxed ,'tns:IncomeTaxPayAsYouGoWithholdingStudyAndTrainingLoanRepaymentI' = CASE WHEN NOT ISNULL(ed.StudyLoan,109501 ) = 109501 THEN 'true' ELSE 'false' END -- StudyAndTrainingLoanRepayment.Indicator Higher Education Loan Program (HELP) loan, Student Start-up Loan (SSL), ABSTUDY Student Start-up Loan (ABSTUDY SSL) or Trade Support Loan (TSL) ,'tns:StudentLoanStudentFinancialSupplementSchemeI' = CASE WHEN NOT ISNULL(ed.StudentFinancialScheme,109600 ) = 109600 THEN 'true' ELSE 'false' END FROM @EmpPaymentsSUM epsTFND LEFT JOIN @EmpData ed ON ed.EmployeeID = epsTFND.EmployeeID WHERE epsTFND.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:TFND'), TYPE ) , CASE WHEN eps.DeclarationSignatureDate IS NULL THEN NULL ELSE ( SELECT --'tns:SignatoryIdentifierT' = 't' 'tns:StatementAcceptedI' = CASE WHEN ISNULL(CONVERT(char(10),eps.DeclarationSignatureDate,126) ,'') = '' THEN 'false' ELSE 'true' END ,'tns:SignatureD' = CONVERT(char(10),eps.DeclarationSignatureDate,126) FOR XML PATH ('tns:Declaration'), TYPE ) END FOR XML PATH ('tns:Onboarding'), TYPE ) END FROM @EmpPaymentsSUM eps INNER JOIN Employee e ON eps.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID INNER JOIN @EmployeeAddress ad ON ad.AddressID = eps.EmployeeAddressID AND ad.EmployeeID = eps.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID WHERE epsh.EmployeeID = eps.EmployeeID --AND ((@ETP = 0) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) > 0)) ORDER BY e.LastName, e.FirstName, e.Title, EntryDate FOR XML RAW ('tns:Payee'), TYPE ) FOR XML RAW ('tns:PAYEVNTEMP'), TYPE ) FROM @EmpPaymentsSUM epsh -- select * from @EmpPaymentsSUM IF @Test = 1 BEGIN UPDATE @XMLResults SET XML = ' 151994243 50236 Martin Mark 2 10 1990 34 wanderer street Mt Helen VIC 3350 au markm@gmail.com 2018-04-25 2018-05-02 false 15000 3000 15000 Working Holiday Maker F false false false true 2018-05-03 ' END SELECT EmployeeID = EmployeeID ,XML = Convert(VARCHAR(MAX),XML) ,XML_Native = XML FROM @XMLResults END END SET NOCOUNT OFF --SET ANSI_WARNINGS ON GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_EmployeePaymentSummary TO [insol2_users] GO -- * ************ --END OF web -- * ************ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=11142, @BatchID=23329, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission /* Exec dbo.repsp_STP @AdminID=11607, @BatchID=151932, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND se.EntryDate >= @PPSTARTDATE AND se.EntryDate <= @PPENDDATE END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL AND e.EmployeeCountry Is Not Null UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL AND e.EmployeeCountry Is Not Null UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 200 AND 9999 --AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID LEFT OUTER JOIN dbo.Transfer t ON t.BatchID = b.BatchID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID AND IsNull(t.Flags,0) & 4096 = 0 Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL AND EmployeeCountry IS NOT NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=7581, @BatchID=22675, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=11142, @BatchID=23329, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission /* Exec dbo.repsp_STP @AdminID=11607, @BatchID=151932, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND se.EntryDate >= @PPSTARTDATE AND se.EntryDate <= @PPENDDATE END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL AND ad.Country Is Not Null UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL AND e.EmployeeCountry Is Not Null UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 200 AND 9999 --AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID LEFT OUTER JOIN dbo.Transfer t ON t.BatchID = b.BatchID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID AND IsNull(t.Flags,0) & 4096 = 0 Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL AND EmployeeCountry IS NOT NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=7581, @BatchID=22675, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO if exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_SubEntryAudit]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[repsp_SubEntryAudit] GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_SubEntryAudit @PracticeID Int = Null ,@AdminID Int = Null ,@AccountID Int = Null ,@EntryID Int = Null ,@BatchID Int = Null ,@LogonName Varchar(75) = Null ,@FromDate DateTime = Null ,@ToDate DateTime = Null ,@Mode Int = 0 --0 = All, 1 = Changed only, 2 = Deleted Only AS --Set @EntryID = 141212 /* Author: AUTOGENERATED Date: 12 Apr 2002 Purpose: Notes: Revision History: repsp_SubEntryAudit */ SET NOCOUNT ON Declare @Ents Table (EntryID Int, Action VarChar(10), LastUpdated DateTime, LastUpdatedBy varchar(75)) If @Mode = 0 OR @Mode = 1 INSERT INTO @Ents SELECT DISTINCT se.EntryID ,'Updated' ,se.UpdatedDate ,se.UpdatedBy FROM dbo.SubEntryAudit se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID WHERE ((a.PracticeID = @PracticeID) OR (@PracticeID Is Null)) AND ((a.AdminID = @AdminID) OR (@AdminID Is Null)) AND ((acc.AccountID = @AccountID) OR (@AccountID Is Null)) AND ((se.EntryID = @EntryID) OR (@EntryID Is Null)) AND ((e.BatchID = @BatchID) OR (@BatchID Is Null)) AND ((se.UpdatedBy = @LogonName) OR (@LogonName Is Null)) AND (CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) >= IsNull(@FromDate, '19000101') AND CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) <= IsNull(@ToDate, '30001231')) AND se.UpdatedDate = (SELECT Max(UpdatedDate) FROM dbo.SubEntryAudit WHERE EntryID = se.EntryID) If @Mode = 0 INSERT INTO @Ents SELECT DISTINCT se.EntryID ,'Created' ,se.CreatedDate ,se.CreatedBy FROM dbo.SubEntry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID WHERE ((a.PracticeID = @PracticeID) OR (@PracticeID Is Null)) AND ((a.AdminID = @AdminID) OR (@AdminID Is Null)) AND ((acc.AccountID = @AccountID) OR (@AccountID Is Null)) AND ((se.EntryID = @EntryID) OR (@EntryID Is Null)) AND ((e.BatchID = @BatchID) OR (@BatchID Is Null)) AND ((se.UpdatedBy = @LogonName) OR (@LogonName Is Null)) AND (CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) >= IsNull(@FromDate, '19000101') AND CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) <= IsNull(@ToDate, '30001231')) AND (se.AuditVersion = 1) AND (se.CreatedDate = (SELECT Max(CreatedDate) FROM dbo.SubEntry WHERE EntryID = se.EntryID)) AND (se.EntryID Not In(Select EntryID FROM @Ents)) If @Mode = 0 OR @Mode = 2 INSERT INTO @Ents SELECT se.EntryID ,'Deleted' ,se.UpdatedDate ,se.UpdatedBy FROM dbo.SubEntryDeleted se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID LEFT OUTER JOIN dbo.EntryDeleted ed ON ed.EntryID = se.EntryID WHERE ((a.PracticeID = @PracticeID) OR (@PracticeID Is Null)) AND ((a.AdminID = @AdminID) OR (@AdminID Is Null)) AND ((acc.AccountID = @AccountID) OR (@AccountID Is Null)) AND ((se.EntryID = @EntryID) OR (@EntryID Is Null)) AND ((ed.BatchID = @BatchID) OR (@BatchID Is Null)) AND ((se.UpdatedBy = @LogonName) OR (@LogonName Is Null)) AND (CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) >= IsNull(@FromDate, '19000101') AND CAST(CONVERT(char(8),se.UpdatedDate,112) as datetime) <= IsNull(@ToDate, '30001231')) --AND (se.UpdatedDate = (SELECT Max(UpdatedDate) FROM dbo.SubEntryDeleted WHERE EntryID = se.EntryID)) AND (se.EntryID Not In(SELECT EntryID FROM dbo.Entry)) SELECT p.PracticeName ,a.Name ,a.ShortName ,acc.Description ,Action = et.Action + ' (' + et.LastUpdatedBy + ' ' + CONVERT(varchar(10),et.LastUpdated, 103) + ' ' + CONVERT(varchar(10),et.LastUpdated, 114) + ')' ,e.EntryID ,e.Address ,e.BankName ,e.BSB ,e.AccountNo ,e.BankAddress ,se.* ,tc.TaxCode FROM @Ents et INNER JOIN dbo.Entry e ON e.EntryID = et.EntryID INNER JOIN dbo.SubEntry se ON se.EntryID = e.EntryID INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID INNER JOIN dbo.Practice p ON p.PracticeID = a.PracticeID LEFT OUTER JOIN dbo.TaxCode tc ON tc.TaxCodeID = se.TaxCodeID WHERE ( (IsNull(IsBatchPosting,0) = 0) OR (@EntryID Is Not Null) OR (@BatchID Is Not Null) ) AND IsTaxSubEntry = 0 UNION SELECT p.PracticeName ,a.Name ,a.ShortName ,acc.Description ,Action = et.Action + ' (' + et.LastUpdatedBy + ' ' + CONVERT(varchar(10),et.LastUpdated, 103) + ' ' + CONVERT(varchar(8),et.LastUpdated, 108) + ')' ,e.EntryID ,e.Address ,e.BankName ,e.BSB ,e.AccountNo ,e.BankAddress ,se.* ,tc.TaxCode FROM @Ents et INNER JOIN dbo.EntryDeleted e ON e.EntryID = et.EntryID INNER JOIN dbo.SubEntryDeleted se ON se.EntryID = e.EntryID INNER JOIN dbo.repvw_Account acc ON acc.AccountID = se.Account_AccountID INNER JOIN dbo.Admin a ON a.AdminID = acc.AdminID INNER JOIN dbo.Practice p ON p.PracticeID = a.PracticeID LEFT OUTER JOIN dbo.TaxCode tc ON tc.TaxCodeID = se.TaxCodeID WHERE ( (IsNull(IsBatchPosting,0) = 0) OR (@EntryID Is Not Null) OR (@BatchID Is Not Null) ) AND IsTaxSubEntry = 0 ORDER BY p.PracticeName ,a.Name ,e.EntryID ,se.EntryDate ,acc.Description SET NOCOUNT OFF RETURN @@ERROR GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON [dbo].[repsp_SubEntryAudit] TO [insol2_users] GO If exists (select * from sysobjects where id = object_id(N'[dbo].[repsp_EmployeePaymentSummary]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].repsp_EmployeePaymentSummary GO SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.repsp_EmployeePaymentSummary @AdminID Int ,@DateFrom Datetime ,@DateTo Datetime ,@EmployeeInClause Text = Null ,@ShowEntry Bit = 0 -- depends on report ,@ETP Bit = NULL ,@AdminTypeID Int = Null ,@IsIndividual Bit = 1 ,@ElectronicOutput Bit = 0 ,@SelectEmployees Bit = 0 ,@LodgementID Int = Null ,@UpdatedBy Varchar(75) = Null ,@UserID Int = Null -- NOT NULL ,@BatchID Int = Null ,@PayPeriodDateStart Datetime = Null ,@PayPeriodDateEnd Datetime = Null ,@IsFinal Varchar(5) = 'false' -- true/false ,@Test int = 0 ,@TotalTax Money = Null OUTPUT ,@TotalPaid Money = Null OUTPUT ,@TransLastDate Date = Null OUTPUT --,@IsAmendment Bit = 0 --Indicator Varchar(1) = 'O' -- 'A' = amend AS SET NOCOUNT ON --SET ANSI_WARNINGS OFF /* Author: Stewart McLeod Date: 20 Apr 2007 Purpose: Notes: Revision History: 7/4/09 SM - Add the output to a table via flag @ReturnTable Called by proc repsp_EmployeePaymentSummaryElectronic 10/4/09 SM - Address was using practice 26/5/09 SM - Add Is Individual 10/06/09 JO - Add Select Employees 30/10/09 SM - Integrate Electronic Payment Summary Output 25/11/09 SM - updated the ATO plain paper reference SM - updated the Lump Sum Payment type 13/07/10 SM - clean the data remove exponential function for zero values SM - usually exponential functions are 20 char cater for a 19 digit exponential function take out clean the data remove the 'A0' replace with 'A|0' 21/07/10 SM - updated for v10, payer's address, payee's address replace double instances of 'ƒ' SM - v10 update 21/07/10 SM - updated for v10, payer's address, payee's address replace double instances of 'ƒ' SM - v10 update 02/12/10 SM - add @EmpPS - include employees receieving patments for the period (contained in @EmpPaymentsSUM) - exclude emps already having a PS for the period 01/03/11 SM - add NonTaxableAllowances 16/03/11 SM - add Reportable Employer Super Contribs 04/08/11 SM - Salary sacrifice changes (add Flag for sal sac account) 08/08/11 SM - Add Signatory1 field 24/10/2011 SM - incorrect join for Signatory1 14/11/2011 SM - now inserts a line feed after the FILE-TOTAL line in all electronic outputs not just v8 12/03/2012 SM - change 'T' test to 'P' production sm - add financial year function 15/06/2012 SM - duplic abn / wnp 03/07/2012 SM - FEMPA011.0 added for the financial year 2012. 02/11/2012 SM - FEMPA011.0 ETP Code 28/3/2013 SM - Salary sacrifice was included in gross pay TO DO.add column on detail report 24/5/2013 AmendmentIndicator ETPCode 16/07/2013 SM ACN FEMPA011.0 ETP Code updated 20/08/2014 SM strip spaces out of emp dup 20/08/2014 SM Re-issue payment after account is locked; creates new entry and reversal of the existing entry. 30/01/2015 SM replace 'NAT 72711B-12.2008' with 'NAT0046' 19/05/2015 SM allowed for extra comma in the Reference2 subentry (when the pay entry has three splits) 04/06/2015 SM allowed for extra comma in the Reference2 subentry (when the pay entry has six splits) 04/06/2015 SM Separate ETP R/S and O/T 18/06/2015 SM Rounding on all PS outputs, tax not rounded down any more, 02/07/2015 SM convert ETP to ETP R 02/07/2015 SM convert implement ETP codes S and P 02/10/2015 SM Add lump sum D tax, even though it should be nil, if someone adds tax manually it will not report. 14/06/16 SM exclude FEG payments without bank accounts 12/07/16 JO Pick up correct CAC based on job type 14/7/16 JO Duplication where ETP with 0|0 - Need to check 27/4/17 SM Truncate cents wages 16/04/18 SM XML output for SBR STP 06/09/18 SM Gross and Tax Totals if in this batch then date of batch then year to date not in a batch 25/07/19 Si Exclude FEG Direct payments from the @PriorYearPayments 18/10/19 Si Super was being doubled for super only dividends 18/10/19 Si Super deducted from RILN was being excluded Exec repsp_EmployeePaymentSUmmary 1399,'20170701','20180630',@ElectronicOutput = 1, @BatchID = 727 */ SET NOCOUNT ON -- ******************************** /* IF @ElectronicOutput = 0 */ -- ******************************** DECLARE @SubEntry Table ( EntryID Int ,SubEntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,Memo Varchar(2000) ,TransTotal Money ,EmployeeID Int ,Reference2 Varchar(200) ,AccountID Int -- used for direct entry ,Account_AccountID int -- used to detemine prior year payments ,IsHeader Bit ,BatchID int ,InReport bit ) DECLARE @Entry Table ( EntryID Int ,TransTotal Money ) DECLARE @TaxTable Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,TaxString2 Varchar(100) ,TaxString3 Varchar(100) ,TaxString4 Varchar(100) ,TaxString5 Varchar(100) ,CommaPos1 Int ,CommaPos2 Int ,CommaPos3 Int ,CommaPos4 Int ,CommaPos5 Int ) DECLARE @TaxTable2 Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,Direction Int ,EmployeeID Int ,TaxString Varchar(500) ,PipePos1 Int ,PipePos2 Int ,PipePos3 Int ) DECLARE @EmpPSAmended TABLE (EmployeeID INT ,IsETPAmended Int ,IsIndividualAmended Int ) DECLARE @EmpPS Table ( EmployeeID Int ,FromDate DateTime ,ToDate DateTime ,EmployeeClaimType_LookupID Int ) DECLARE @EmpDivPayments TABLE (EntryID Int primary key) DECLARE @EmpPayments TABLE (EmployeeID INT ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeAddressID Int ,Memo Varchar(2000) ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,SuperSGC Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ETPCode varchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,BatchID int ,InReport int ) DECLARE @EmpPaymentsSUM TABLE ( EmployeeID Int -- ,EntryID Int ,EntryDate DateTime ,Payee nvarchar(200) ,EmployeeDateStart DateTime ,EmployeeDateEnd DateTime ,EmployeeCommenceDate DateTime ,EmployeeAddressID Int ,Wages Money ,GrossPayment Money ,SuperSGC Money ,LumpSumA Money ,LumpSumAT Money ,LumpSumAType Varchar(1) ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,ReportableSuper Money ,ExcludeFromOTE Money ,NonTaxableAllowances Money ,FBTTaxable Money ,FBTNonTaxable Money ,DeductWorkPlaceGiving Money ,DeductUnionFees Money ,CommunityDevelopmentEmploymentProject Money ,ExemptForeignEmploymentIncome Money ,Allow_Car Money ,Allow_Trans Money ,Allow_Laundry Money ,Allow_Meals Money ,Allow_Travel Money ,Allow_Other Money ,TAX Money ,ForeignWithholding Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,HasLodgementETP Int ,HasLodgementIndividual Int ,HasLodgementETPThisYear Int ,HasLodgementIndividualThisYear Int ,HasAllowanceEntries Int ,ETPCode varchar(5) ,TaxFlags int ,WagesPeriod_LookupID int ,EmployeeCountryCode varchar(5) ,PrevLodgementETPDate datetime ,PrevLodgementINBDate datetime ,RemunerationIncomeType_LookupID int ,DeclarationSignatureDate datetime ,RemunerationABN varchar(100) ,EmployeeEmail varchar(200) ,EmployeePhone varchar(200) ) DECLARE @Results Table ( EntryID Int ,SubEntryID Int ,Account_AccountID int ,EntryDate DateTime ,EmployeeID Int ,IsETP Bit Not Null ,Code Char(3) Null ,Gross Money Not Null ,Tax Money Not Null ,BatchID int ,InReport int ) DECLARE @LUMPA TABLE ( EmployeeID int ,LumpSumType Varchar(3) ,LumpSumAmount Money Not Null ) DECLARE @EmpData TABLE ( EmployeeID int ,RemunerationIncomeType int ,RemunerationIncomeType_Desc VARCHAR(100) ,ArrangementBasis int ,ArrangementBasis_Desc VARCHAR(100) ,RemunerationABN varchar(100) ,RemunerationABN_Desc VARCHAR(100) ,StudyLoan int ,StudyLoan_Desc VARCHAR(100) ,StudentFinancialScheme int ,StudentFinancialScheme_Desc VARCHAR(100) ,DeclarationDate date ) DECLARE @MaxDateofPayment Table ( MaxEntryDate DateTime ,EmployeeID Int primary key ) DECLARE @ResultsXMl TABLE ( EmployeeID int ,XMLResult XML ) DECLARE @BatchTypeID int IF @ElectronicOutput = 0 BEGIN DECLARE @Signatory1 VARCHAR(150) END DECLARE @Suppliername NCHAR(200) DECLARE @SupplierContactName NCHAR(38) DECLARE @SupplierContactEmail NCHAR(75) DECLARE @SupplierContactTelephoneNumber NCHAR(15) -- FORMAT 02b1234b5678 or 0412b123b456 DECLARE @SupplierFacsimileNumber NCHAR(15) -- FORMAT 02b1234b5678 or 0412b123b456 DECLARE @SupplierFileReference NCHAR(16) CREATE TABLE dbo.#Data ( ID Int Not Null ) IF @ElectronicOutput = 1 AND @BatchID IS NULL BEGIN --DECLARE @AmendmentIndicator Varchar(1) DECLARE @OUTPUT TABLE ( OutputOrder Int ,Outputfield Varchar(8000) ) -- Supplier data record 1 DECLARE @PracticeABN NCHAR(11) DECLARE @RunType NCHAR(1) DECLARE @ReportEndDatedd NCHAR(2) DECLARE @ReportEndDatemm NCHAR(2) DECLARE @ReportEndDateyyyy NCHAR(4) DECLARE @ReportEndDate NCHAR(8) DECLARE @ReportYear Datetime DECLARE @Datatype NCHAR(1) DECLARE @Typeofreport NCHAR(1) DECLARE @Formatofreturnmedia NCHAR(1) DECLARE @ATOReportSpecificationVersionNumber NCHAR(10) DECLARE @Filler578 NCHAR(578) -- Supplier data record 2 DECLARE @Filler327 NCHAR(327) -- Supplier data record 3 DECLARE @PracticeID Int DECLARE @PracticeStreetAddressID Int DECLARE @PracticePostalAddressID Int DECLARE @SupplierStreetAddress NCHAR(76) -- Mandatory (line1 38) Optional (line 2 38) DECLARE @SupplierStreetSuburb NCHAR(27) -- Mandatory DECLARE @SupplierStreetState NCHAR(3) -- Mandatory DECLARE @SupplierStreetPostCode NCHAR(4) -- Mandatory DECLARE @SupplierStreetCountry NCHAR(20) DECLARE @SupplierPostalAddress NCHAR(76) DECLARE @SupplierPostalSuburb NCHAR(27) DECLARE @SupplierPostalState NCHAR(3) DECLARE @SupplierPostalPostCode NCHAR(4) DECLARE @SupplierPostalCountry NCHAR(20) DECLARE @SupplierEmail NCHAR(76) DECLARE @Filler275 NCHAR(275) -- Payer identity record DECLARE @Admins TABLE ( AdminID Int ,AdminTypeID Int ,ABN NCHAR(11) ,WPN NCHAR(11) ,ABN_WPN NCHAR(11) -- Mandatory ,CAC NCHAR(3) -- Mandatory ,AdminFullName NCHAR(200) ,PayerName NCHAR(200) -- Mandatory ,PayerTradingName NCHAR(200) ,PayerAddress VARCHAR(500) ,PayerAddress1 NCHAR(38) -- Mandatory ,PayerAddress2 NCHAR(38) ,PayerSuburb NCHAR(27) -- Mandatory ,PayerState NCHAR(3) -- Mandatory ,PayerPostCode NCHAR(4) -- Mandatory ,PayerCountry NCHAR(20) ,ReportingUserID Int ,ContactName NCHAR(38) ,ContactTelephoneNumber NCHAR(15) ,ContactEmail NCHAR(50) ,ContactFacsimileNumber NCHAR(15) ,ETPPayerType NCHAR(1) ) -- Software record DECLARE @Softwareproducttype NCHAR(80) DECLARE @Filler536 NCHAR(536) -- PAYGW Payment Summary Individual Non-business data record -- Temp table for data -- DROP Table [dbo].[#EmpPaySum] CREATE TABLE [dbo].[#EmpPaySum] ( EmployeeID Int ,EntryDate Datetime ,EmployeeName Varchar(200) ,EmployeeFirstName nVarchar(75) ,EmployeeLastName nVarchar(75) ,EmployeeAddress Varchar(1000) ,EmployeeAdd Varchar(500) ,EmployeeCity Varchar(50) ,EmployeeState Varchar(50) ,EmployeePostCode Varchar(50) ,EmployeeCountry Varchar(1000) -- ,EmployeeStartDate Datetime ,EmployeeTFN Varchar(50) ,TFN Varchar(50) ,Payee Varchar(200) ,DateOfBirth DateTime ,Dateofpayment DateTime ,Wages Money ,GrossPayment Money ,LumpSumA Money ,LumpSumB Money ,LumpSumD Money ,LumpSumE Money ,ReportableSuper Money ,NonTaxableAllowances Money ,OtherIncome Money ,FBT Money ,Tax Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ,ABNPayerNumber Varchar(2000) ,BranchNumber Varchar(2000) ,PayerName Varchar(2000) ,PaymentTypeCode Varchar(1) ,AmendmentIndicator Varchar(1) ,AmendmentIndicatorETP Varchar(1) ) DECLARE @Emps TABLE ( PayeeTFN NCHAR(9) -- Mandatory ,PayeeSurname NCHAR(30) -- Mandatory ,PayeeFirstGivenName NCHAR(15) -- Mandatory ,PayeeSecondGivenName NCHAR(15) -- Mandatory ,PayeeAddress VARCHAR(500) ,PayeeAddress1 NCHAR(38) -- Mandatory ,PayeeAddress2 NCHAR(38) ,PayeeSuburb NCHAR(27) -- Mandatory ,PayeeState NCHAR(3) -- Mandatory ,PayeePostCode NCHAR(4) -- Mandatory ,PayeeCountry NCHAR(20) ,PeriodPaymentStart NCHAR(8) -- Mandatory ,PeriodPaymentEnd NCHAR(8) -- Mandatory ,TotalTaxWithheld NCHAR(8) -- Mandatory ,GrossPayment NCHAR(8) -- Mandatory ,TotalAllowances NCHAR(8) -- Mandatory ,LumpSumPaymentA NCHAR(8) -- Mandatory ,LumpSumPaymentB NCHAR(8) -- Mandatory ,LumpSumPaymentD NCHAR(8) -- Mandatory ,LumpSumPaymentE NCHAR(8) -- Mandatory ,PayeeDateOfBirth NCHAR(8) -- Mandatory ,PayeeETPDateofpayment NCHAR(8) -- Mandatory ETP -- ,PayeeDateStarted NCHAR(8) ,ETPTaxable NCHAR(8) ,ETPNonTaxable NCHAR(8) ,ETPTax NCHAR(8) ,CommunityDevelopmentEmploymentProject NCHAR(8) -- Mandatory ,OtherIncome NCHAR(8) -- Mandatory ,ReportableFringeBenefits NCHAR(8) -- Mandatory ,PaymentTypeCode VARCHAR(1) ,AmendmentIndicator VARCHAR(1) ,AmendmentIndicatorETP VARCHAR(1) ,ReportableSuper NCHAR(8) -- Mandatory ) DECLARE @Filler380 NCHAR(380) DECLARE @Filler377 NCHAR(377) -- Eligible Termination Payment (ETP) data record DECLARE @Filler316 NCHAR(316) DECLARE @Filler283 NCHAR(283) DECLARE @ReportableEmployerSuperannuationContribs NCHAR(8) DECLARE @LumpSumPaymentAType NCHAR(1) DECLARE @WorkplaceGiving NCHAR(8) DECLARE @UnionProfFees NCHAR(8) DECLARE @ExemptForeignEmploymentIncome NCHAR(8) DECLARE @DeductibleAmountPurchasePriceofAnnuity NCHAR(8) --File total record DECLARE @FileTotal NCHAR(10) DECLARE @NumberOfRecords NCHAR(10) DECLARE @Filler607 NCHAR(607) END DECLARE @PayerName Varchar(1105) DECLARE @PayerBranch Varchar(10) DECLARE @AdminAddressID Int DECLARE @AdminAddress Varchar(760) DECLARE @AdminAdd Varchar(500) DECLARE @AdminCity Varchar(50) DECLARE @AdminState Varchar(50) DECLARE @AdminPostCode Varchar(50) DECLARE @AdminCountry Varchar(100) DECLARE @ABN_WPN TABLE (AdminID Int ,ABN Varchar(2000) ,WPN Varchar(2000) ,ABN_WPN Varchar(2000) ) DECLARE @FinancialYearStartDate Datetime DECLARE @AdminStartDate Datetime SELECT @AdminStartDate = StartDate FROM dbo.Admin WHERE @AdminID = @AdminID -- IF Batch then start of the financial year. IF @BatchID IS NOT NULL AND @DateTo Between dbo.uFnFinancialYearStartDate(@DateTo) AND dbo.uFnFinancialYearEndDate(@DateTo) BEGIN SELECT @DateFrom = dbo.uFnFinancialYearStartDate(@DateTo) SELECT @DateTo = dbo.uFnFinancialYearEndDate(@DateTo) END SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- ***** POPULATE TMP Tables ***** INSERT INTO @EmpPS SELECT ec.EmployeeID, min(ec.FromDate), min(ec.ToDate),ec.EmployeeClaimType_LookupID FROM EmployeeClaim ec INNER JOIN dbo.Employee e ON e.EmployeeID = ec.EmployeeID WHERE ec.FromDate BETWEEN @DateFrom AND @DateTO AND ec.ToDate BETWEEN @DateFrom AND @DateTO AND ((@ETP = 1) OR (ec.EmployeeClaimType_LookupID = 300011)) AND ((@ETP = 0) OR (ec.EmployeeClaimType_LookupID = 300010)) AND e.AdminID = @AdminID GROUP BY ec.EmployeeID,ec.EmployeeClaimType_LookupID IF @SupplierContactName IS NULL Select @SupplierContactName = u.[Name] FROM [User] u INNER JOIN Admin a ON a.ReportingUserID = u.UserID WHERE a.ReportingUserID = @UserID AND a.AdminID = @AdminID SELECT @SupplierContactTelephoneNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 1 --PHONE AND pn.PracticeID = @PracticeID SELECT @PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE acp.AdminID = @AdminID SELECT @PayerBranch = cpBranch.PropertyValue FROM admin_customproperty acp INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) WHERE acp.AdminID = @AdminID AND ((cpBranch.AdminTypeID = @AdminTypeID) OR (@AdminTypeID IS Null)) -- IF @IsAmendment = 1 -- BEGIN -- Set @AmendmentIndicator = 'A' -- amend -- END -- ELSE -- BEGIN -- Set @AmendmentIndicator = 'O' -- END -- SELECT @AdminAddressID = Min(aa.AddressID) FROM Admin_Address aa INNER JOIN Address ad ON aa.AddressID = ad.AddressID AND ad.IsMailing = 1 WHERE aa.AdminID = @AdminID GROUP BY aa.AddressID SELECT @AdminAddress = (Select ad.Address + CHAR(10) + CHAR(13) + ISNULL(ad.City + ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode + ' ','') + CHAR(13) + ISNULL(ad.Country + ' ','') FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminAdd = (Select ad.Address + CHAR(10) + CHAR(13) FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminCity = (Select ad.City FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminState = (Select UPPER(ad.State) FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminPostCode = (Select ad.PostCode FROM Address ad WHERE ad.AddressID = @AdminAddressID) SELECT @AdminCountry = (Select ad.Country FROM Address ad WHERE ad.AddressID = @AdminAddressID) --Signatory1 Declare @Min_No_of_Signatory int SELECT @Min_No_of_Signatory = MIN(number) FROM dbo.Appointment apt INNER JOIN dbo.Admin a ON apt.AdminID = a.AdminID AND apt.AdminTypeID = a.AdminTypeID WHERE APT.IsSignatory = 1 AND apt.AdminID = @AdminID SELECT @Signatory1 = ISNULL(u.Name,'') FROM dbo.Appointment apt INNER JOIN dbo.Admin a ON apt.AdminID = a.AdminID AND apt.AdminTypeID = a.AdminTypeID INNER JOIN dbo.Appointee_Appointment aa ON apt.AppointmentID = aa.AppointmentID INNER JOIN dbo.[User] u ON u.UserID = aa.UserID WHERE apt.IsSignatory = 1 AND apt.Number = @Min_No_of_Signatory AND apt.AdminID = @AdminID -- CREATE TABLE dbo.#Data -- ( -- ID Int Not Null -- ) -- Employees to include IF NOT @EmployeeInClause IS NULL EXEC dbo.usp_Split @EmployeeInClause ELSE IF @BatchTypeID = 900009 -- CATCH all Batch Full Year Submit BEGIN INSERT INTO dbo.#Data SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) END ELSE IF @BatchID is NOT NULL BEGIN INSERT INTO dbo.#Data SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) END ELSE INSERT INTO dbo.#Data SELECT EmployeeID FROM Employee WHERE AdminID = @AdminID -- Tmp DATA -- DIVs / Ref2 INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = c.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN --1. isnt in another batch ( (@BatchId Is NULL) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --2. This is a catch all batch OR ( (@BatchTypeID = 900009) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --3. Normal Payroll Batch OR (ent.BatchID = @BatchID) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.Entry ent ON ent.EntryID = se.EntryID INNER JOIN dbo.Creditor c ON se.CreditorID = c.CreditorID INNER JOIN dbo.Employee e ON c.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data d ON d.ID = e.EmployeeID INNER JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.Entrytype not in (100,101) AND se.ContextID = e.AdminID AND div.BankAccount_AccountID IS NOT NULL -- Entry INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = se.IsHeader ,BatchID = ent.BatchID ,InReport = CASE WHEN --1. isnt in another batch ( (@BatchId Is NULL) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --2. This is a catch all batch OR ( (@BatchTypeID = 900009) AND (se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd) ) --3. Normal Payroll Batch OR (ent.BatchID = @BatchID) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID LEFT JOIN dbo.Dividend div ON div.DividendID = se.CreditorDividendID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND div.DividendID IS NULL AND se.LiabilityID Is Null AND NOT ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) --FBT INSERT INTO @SubEntry SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Payee = se.Payee ,Memo = se.Memo ,TransTotal = Round((se.Total * se.Direction ),2) ,EmployeeID = se.EmployeeID ,Reference2 = se.Reference2 ,AccountID = CASE WHEN se.Reference2 IS NULL THEN se.Account_AccountID ELSE NULL END ,Account_AccountID = se.Account_AccountID ,IsHeader = 1 ,BatchID = ent.BatchID ,InReport = CASE WHEN se.EntryDate BETWEEN @PayPeriodDateStart AND @PayPeriodDateEnd AND ((@BatchId Is NULL) OR (@BatchTypeID = 900009) OR (ent.BatchID = @BatchID)) THEN 1 ELSE 0 END FROM dbo.SubEntry se INNER JOIN dbo.#Data d ON d.ID = se.EmployeeID INNER JOIN dbo.Account acc ON se.Account_AccountID = acc.AccountID INNER JOIN dbo.Entry ent ON se.EntryID = ent.EntryID WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) --AND NOT se.SubEntryID in (Select subEntryID from @SubEntry) AND ISNULL(se.ISBatchPosting,0) = 0 AND se.LiabilityID Is Null AND ( ISNULL(acc.Flags,0) & 16384 = 16384 OR ISNULL(acc.Flags,0) & 32768 = 32768 ) AND se.EmployeeID IS NOT NULL /* where entryid = 118015 Select * from @SubEntry order by payee return 0 Select * from @SubEntry order by payee return 0 FROM dbo.SubEntry se WHERE se.EntryDate >= @DateFrom AND se.EntryDate <= @DateTO AND se.ContextID = @AdminID AND ((@AdminTypeID IS NULL) OR (se.AdminTypeID = @AdminTypeID)) AND se.EntryID in (Select EntryID from dbo.SubEntry WHERE EmployeeID IN (Select ID FROM dbo.#Data)) AND ISNULL(se.ISBatchPosting,0) = 0 --AND se.EmployeeID Is Not Null */ -- Calc Transaction totals INSERT INTO @Entry SELECT EntryID ,TransTotal = -TransTotal --Sum(TransTotal) FROM @SubEntry WHERE IsHeader = 1 INSERT INTO @TaxTable ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString --,CommaPos1 ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,Direction = CASE WHEN se.TransTotal >= 0 THEN 1 ELSE -1 END ,EmployeeID = se.EmployeeID ,TaxString = se.Reference2 --,CommaPos1 = Charindex(',',se.Reference2) FROM @SubEntry se WHERE se.Reference2 Is Not Null Order By EmployeeID ,EntryID ,SubEntryID -- ********************************************** -- CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET TaxString = Replace(TaxString,'A0','A|0') UPDATE @TaxTable SET TaxString = Replace(TaxString,'A=T','T') UPDATE @TaxTable SET TaxString = Replace(TaxString,'ETP|','ETP=R|') UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Replace ( Substring( TaxString,charindex('E-',TaxString) - 16,20) , '|' , '' ) ,0 ) WHERE charindex('E-',TaxString) > 1 UPDATE @TaxTable SET TaxString = Replace ( TaxString ,Substring( TaxString,charindex('E-',TaxString) - 17,21) ,'' ) WHERE charindex('E-',TaxString) > 1 -- ********************************************** -- END CLEAN UP THE FRONT END DATA TO REMOVE ERRORS -- ********************************************** UPDATE @TaxTable SET CommaPos1 = Charindex(',',TaxString) -- ********************************************** -- SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** Update @TaxTable SET TaxString2 = SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ,CommaPos2 = Charindex(',',SUBSTRING (TaxString -- string ,Charindex(',',TaxString) + 1 -- start ,Len(TaxString) - Charindex(',',TaxString) -- length ) ) WHERE CommaPos1 > 0 Update @TaxTable SET TaxString3 = SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ,CommaPos3 = Charindex(',',SUBSTRING (TaxString2 -- string ,Charindex(',',TaxString2) + 1 -- start ,Len(TaxString2) - Charindex(',',TaxString2) -- length ) ) WHERE CommaPos2 > 0 Update @TaxTable SET TaxString4 = SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ,CommaPos4 = Charindex(',',SUBSTRING (TaxString3 -- string ,Charindex(',',TaxString3) + 1 -- start ,Len(TaxString3) - Charindex(',',TaxString3) -- length ) ) WHERE CommaPos3 > 0 Update @TaxTable SET TaxString5 = SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ,CommaPos5 = Charindex(',',SUBSTRING (TaxString4 -- string ,Charindex(',',TaxString4) + 1 -- start ,Len(TaxString4) - Charindex(',',TaxString4) -- length ) ) WHERE CommaPos4 > 0 -- ********************************************** -- END SEPARATE THE TAX STRING INTO ITS COMPONENTS -- ********************************************** INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos1 = 0 THEN TaxString ELSE SubString(TaxString, 1, CommaPos1 - 1) END ,0,0,0 FROM @TaxTable INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos2 = 0 THEN TaxString2 ELSE SubString(TaxString2, 1, CommaPos2 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos1 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos3 = 0 THEN TaxString3 ELSE SubString(TaxString3, 1, CommaPos3 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos2 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos4 = 0 THEN TaxString4 ELSE SubString(TaxString4, 1, CommaPos4 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos3 > 0 INSERT INTO @TaxTable2 SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,Direction ,EmployeeID ,TaxString = CASE WHEN CommaPos5 = 0 THEN TaxString5 ELSE SubString(TaxString5, 1, CommaPos5 - 1) END ,0,0,0 FROM @TaxTable WHERE CommaPos4 > 0 UPDATE @TaxTable2 SET PipePos1 = Charindex('|',TaxString) UPDATE @TaxTable2 SET PipePos2 = Charindex('|',TaxString, PipePos1 + 1) UPDATE @TaxTable2 SET PipePos3 = Charindex('|',TaxString, PipePos2 + 1) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP = CASE WHEN Charindex('ETP=R',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=R',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP=O',TaxString) > 0 THEN Convert(Bit, Charindex('ETP=O',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) WHEN Charindex('ETP',TaxString) > 0 THEN Convert(Bit, Charindex('ETP',SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)))) ELSE 0 END ,Code = CASE WHEN Len(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1))) = 3 THEN Null ELSE Right(SubString(TaxString, PipePos1 + 1, PipePos2 - (PipePos1 + 1)),1) END ,Gross = Convert(Money, SubString(TaxString, PipePos2 + 1, PipePos3 - (PipePos2 + 1))) * Direction ,Tax = Convert(Money, SubString(TaxString, PipePos3 + 1, Len(TaxString) - (PipePos3))) * Direction FROM @TaxTable2 INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = EntryID ,SubEntryID = SubEntryID ,Account_AccountID = Account_AccountID ,EntryDate = EntryDate ,EmployeeID = EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.CreditorClaimTypeID in (255, 280) AND acc.AccountGroupID = 4016 AND se.EntryID in (Select EntryID from @Results) INSERT INTO @Results ( EntryID ,SubEntryID ,Account_AccountID ,EntryDate ,EmployeeID ,IsETP ,Code ,Gross ,Tax ) SELECT EntryID = se.EntryID ,SubEntryID = se.SubEntryID ,Account_AccountID = se.Account_AccountID ,EntryDate = se.EntryDate ,EmployeeID = se.EmployeeID ,IsETP = 0 ,Code = 'SGC' ,Gross = -se.TransTotal ,Tax = 0 FROM @Subentry se INNER JOIN dbo.Account acc ON acc.AccountID = se.Account_AccountID WHERE acc.AccountGroupID in (4016,4017) AND se.EntryID in (Select EntryID from @Results) AND NOT se.EntryID in (Select EntryID from @Results WHERE CODE = 'SGC') UPDATE @Results SET BatchID = se.BatchID ,InReport = se.InReport FROM @Results r INNER JOIN @SubEntry se ON se.EntryID = r.EntryID /* Select * FROM @TaxTable Select * FROM @TaxTable2 Select * FROM @Results return 0 */ -- Detemine if there's prior year entries for the employee DECLARE @PriorYearPayments TABLE ( EmployeeID INT ,Account_AccountID INT ,SubEntryID INT ,EntryDate DATETIME ,Reference2 varchar(250) ,Ref2HasR int ,Ref2HasO int ) INSERT INTO @PriorYearPayments SELECT EmployeeID = se.EmployeeID ,Account_AccountID = se.Account_AccountID ,SubEntryID = se.SubEntryID ,EntryDate = se.EntryDate ,Reference2 = se.Reference2 ,Ref2HasR = CASE WHEN Charindex('ETP=R|',se.Reference2) > 0 OR Charindex('ETP=|',se.Reference2) > 0 THEN 1 ELSE 0 END ,Ref2HasO = CASE WHEN Charindex('ETP=O|',se.Reference2) > 0 THEN 1 ELSE 0 END FROM SubEntry se INNER JOIN @SubEntry se1 ON se.EmployeeID = se1.EmployeeID AND se.Account_AccountID = se1.Account_AccountID AND se.EntryDate < dbo.uFnFinancialYearStartDate(@DateFrom) AND ISNULL(se.IsBatchPosting,0) = 0 UPDATE @Results SET Code = Replace(r.Code, 'R','S') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'R' AND Ref2HasR = 1 --exclude prior year payments that dont contain any reference2 PAYG info, such as Direct FEG payments UPDATE @Results SET Code = Replace(r.Code, 'O','P') FROM @Results r INNER JOIN @PriorYearPayments pyp ON pyp.EmployeeID = r.EmployeeID AND pyp.Account_AccountID = r.Account_AccountID AND r.Code = 'O' AND Ref2HasO = 1 --exclude prior year payments that dont contain any reference2 PAYG info, such as Direct FEG payments /* Select dbo.uFnFinancialYearStartDate(@DateFrom), * FROM @Results Select * FROM @PriorYearPayments return 0 */ --- ABN WPN --- ABN WPN DECLARE @MaxWpn Int DECLARE @MaxWpnVal varchar(2000) DECLARE @MaxABN Int DECLARE @MaxABNVal varchar(2000) SELECT @MaxWpn = cpWPN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) WHERE acp.AdminID = @AdminID SELECT @MaxWpnVal = Replace(cpWPN.PropertyValue,' ','') FROM CustomProperty cpWPN WHERE cpWPN.CustomPropertyID = @MaxWpn SELECT @MaxABN = cpABN.CustomPropertyID FROM admin_customproperty acp INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) WHERE acp.AdminID = @AdminID SELECT @MaxABNVal = Replace(cpABN.PropertyValue,' ','') FROM CustomProperty cpABN WHERE cpABN.CustomPropertyID = @MaxABN INSERT INTO @ABN_WPN (AdminID,WPN,ABN,ABN_WPN) SELECT @AdminID,@MaxWpnVal,@MaxABNVal,ISNULL(@MaxWpnVal,@MaxABNVal) -- *** INSERT SPLIT DIVIDEND PAYMENTS *** INSERT INTO @EmpPayments SELECT EmployeeID = r.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate --WHEN @ETP IS NOT NULL THEN r.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.EndDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = Null ,Wages = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,GrossPayment = Sum(CASE Code WHEN 'G' THEN Gross ELSE 0 END) ,LumpSumA = Sum(CASE Code WHEN 'A' THEN Gross ELSE 0 END) ,LumpSumAT = Sum(CASE Code WHEN 'T' THEN Gross ELSE 0 END) ,LumpSumAType = NULL ,LumpSumB = Sum(CASE Code WHEN 'B' THEN Gross ELSE 0 END) ,LumpSumD = Sum(CASE Code WHEN 'D' THEN Gross ELSE 0 END) ,LumpSumE = Sum(CASE Code WHEN 'E' THEN Gross ELSE 0 END) ,SuperSGC = Sum(CASE Code WHEN 'SGC' THEN Gross ELSE 0 END) ,ReportableSuper = 0 ,ExcludeFromOTE = 0 ,NonTaxableAllowances = 0 ,FBTTaxable = 0 ,FBTNonTaxable = 0 ,DeductWorkPlaceGiving = 0 ,DeductUnionFees = 0 ,CommunityDevelopmentEmploymentProject = 0 ,ExemptForeignEmploymentIncome = 0 ,Allow_Car = 0 ,Allow_Trans = 0 ,Allow_Laundry = 0 ,Allow_Meals = 0 ,Allow_Travel = 0 ,Allow_Other = 0 ,Tax = Sum(CASE Code WHEN 'G' THEN Tax WHEN 'A' THEN Tax WHEN 'T' THEN Tax WHEN 'B' THEN Tax WHEN 'D' THEN Tax WHEN 'E' THEN Tax ELSE 0 END) ,ForeignWithholding = 0 ,ETPTaxable = Sum(CASE WHEN IsETP = 1 AND Tax <> 0 THEN Gross ELSE 0 END) ,ETPNonTaxable = Sum(CASE WHEN IsETP = 1 AND Tax = 0 THEN Gross ELSE 0 END) ,ETPTax = Sum(CASE IsETP WHEN 1 THEN Tax ELSE 0 END) ,ETPCode = CASE IsETP WHEN 1 THEN r.Code ELSE '' END ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = r.BatchID ,InReport = r.InReport FROM @Results r INNER JOIN dbo.Employee e ON e.EmployeeID = r.EmployeeID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID GROUP BY r.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN r.EntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN r.EntryDate WHEN @BatchID IS NOT NULL THEN r.EntryDate --WHEN @ETP IS NOT NULL THEN r.EntryDate ELSE NULL END ,r.Code ,r.IsETP ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,(ISNULL(e.FirstName + ' ','') + e.LastName) , e.StartDate , e.EndDate , e.TaxFlags ,e.WagesPeriod_LookupID ,r.BatchID ,r.InReport -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- WAGES INSERT INTO @EmpPayments SELECT EmployeeID = se.EmployeeID ,EntryID = CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END ,EntryDate = CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate --WHEN @ETP IS NOT NULL THEN se.EntryDate ELSE NULL END ,Payee = (ISNULL(e.FirstName + ' ','') + e.LastName) --se.Payee ,EmployeeDateStart = ISNULL(e.StartDate,@AdminStartDate) ,EmployeeDateEnd = e.EndDate ,EmployeeAddressID = CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END ,Memo = CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,Wages = Sum(CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- allowances where you havent selected a type AND acc.LookupID3 IS NOT NULL THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN TransTotal WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,GrossPayment = -- THIS IS THE AMOUNT REPORTED IN THE HEADER Sum(CASE WHEN ISNULL(acc.Flags,0) & 2097152 = 2097152 -- ALL allowances THEN TransTotal WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 THEN 0 WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 THEN 0 WHEN ISNULL(acc.Flags,0) & 262144 = 262144 -- 'Community Dev. Employ. Project Gross Wages' THEN 0 WHEN ISNULL(acc.Flags,0) & 524288 = 524288 -- 'Exempt Foreign Employment Income' THEN 0 WHEN acc.AccountGroupID in (6020) THEN TransTotal WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (250,270) THEN TransTotal ELSE 0 END) ,LumpSumA = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31300 THEN TransTotal ELSE 0 END ) ,LumpSumAT = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31308 THEN TransTotal ELSE 0 END ) ,LumpSumAType = NULL ,LumpSumB = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31301 THEN TransTotal ELSE 0 END ) ,LumpSumD = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31302 THEN TransTotal ELSE 0 END ) ,LumpSumE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 67108864 = 67108864 AND acc.LookupID3 = 31303 THEN TransTotal ELSE 0 END ) ,SuperSGC = SUM( CASE WHEN ( acc.AccountGroupID in (4016,4017) AND NOT ISNULL(acc.Flags,0) & 134217728 = 134217728 --Salary sacrifice AND NOT ISNULL(acc.Flags,0) & 536870912 = 536870912 --Voluntary super ) THEN -TransTotal --WHEN -- ( -- acc.AccountGroupID in (2030) -- AND acc.CreditorClaimTypeID = 255 -- ) --THEN -- TransTotal ELSE 0 END ) ,ReportableSuper = SUM( CASE WHEN ISNULL(acc.Flags,0) & 4194304 = 4194304 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,ExcludeFromOTE = SUM( CASE WHEN ISNULL(acc.Flags,0) & 33554432 = 33554432 --acc.AccountUID = '9E974D57-2A9C-461E-998D-768E818F05EC' THEN TransTotal ELSE 0 END ) ,NonTaxableAllowances = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 THEN TransTotal ELSE 0 END ) ,FBTTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 16384 = 16384 THEN TransTotal ELSE 0 END ) ,FBTNonTaxable = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 32768 = 32768 THEN TransTotal ELSE 0 END ) ,DeductWorkPlaceGiving = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 4096 = 4096 THEN -TransTotal ELSE 0 END ) ,DeductUnionFees = Sum(CASE WHEN acc.AccountGroupID in (4040) AND ISNULL(acc.Flags,0) & 8192 = 8192 THEN -TransTotal ELSE 0 END ) ,CommunityDevelopmentEmploymentProject = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 262144 = 262144 THEN TransTotal ELSE 0 END ) ,ExemptForeignEmploymentIncome = Sum(CASE WHEN acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 524288 = 524288 THEN TransTotal ELSE 0 END ) ,Allow_Car = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109301 THEN TransTotal ELSE 0 END ) ,Allow_Trans = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109302 THEN TransTotal ELSE 0 END ) ,Allow_Laundry = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109303 THEN TransTotal ELSE 0 END ) ,Allow_Meals = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND acc.LookupID3 = 109304 ) THEN TransTotal ELSE 0 END ) ,Allow_Travel = Sum(CASE WHEN acc.AccountGroupID in (6020) AND acc.LookupID3 = 109305 THEN TransTotal ELSE 0 END ) ,Allow_Other = Sum(CASE WHEN ( acc.AccountGroupID in (6020) AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 ) THEN TransTotal ELSE 0 END ) ,Tax = Sum(CASE WHEN acc.AccountGroupID in (4012,4013) AND NOT ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ForeignWithholding = Sum(CASE WHEN acc.AccountGroupID in (4012,4013,4040) AND ISNULL(acc.Flags,0) & 131072 = 131072 THEN -TransTotal ELSE 0 END) ,ETPTaxable = Sum(CASE WHEN acc.AccountGroupID in (2030,2040) and acc.CreditorClaimTypeID IN (280) THEN TransTotal ELSE 0 END) ,ETPNonTaxable = 0 ,ETPTax = 0 ,ETPCode = '' ,TaxFlags = e.TaxFlags ,WagesPeriod_LookupID = e.WagesPeriod_LookupID ,BatchID = se.BatchID ,InReport = se.InReport FROM @SubEntry se INNER JOIN dbo.Employee e ON e.EmployeeID = se.EmployeeID INNER JOIN dbo.Account acc ON acc.AccountID = se.AccountID INNER JOIN dbo.AccountGroup ag ON ag.AccountGroupID = acc.AccountGroupID LEFT OUTER JOIN dbo.Creditor c ON c.EmployeeID = e.EmployeeID WHERE IsNull(acc.Flags,0) & 8388608 = 0 --payment to paid received account AND ( (ag.AccountGroupID in (6020,2030,2040,4012,4013, 4016, 4017)) OR (ag.AccountGroupID in (4040) ANd acc.Flags IS NOT NULL) ) AND ( se.EntryID NOT IN (select EntryID FROM @Results) OR se.SubEntryID in (select EntryID FROM @Results WHERE Code = 'SGC') ) GROUP BY (ISNULL(e.FirstName + ' ','') + e.LastName) ,se.EmployeeID ,CASE WHEN @ShowEntry = 1 THEN se.EntryID ELSE NULL END , CASE WHEN @ShowEntry = 1 THEN se.EntryDate WHEN @BatchID IS NOT NULL THEN se.EntryDate --WHEN @ETP IS NOT NULL THEN se.EntryDate ELSE NULL END ,se.EntryDate ,se.Payee ,CASE WHEN e.AddressID IS NULL THEN c.AddressID ELSE e.AddressID END , CASE WHEN @ShowEntry = 1 THEN se.Memo ELSE null END ,e.StartDate ,e.EndDate ,e.TaxFlags ,e.WagesPeriod_LookupID ,se.BatchID ,se.InReport -- *** INSERT DIRECT ENTRY (NON-DIVIDEND) PAYMENTS *** -- PREFERRED CREDITOR PAYMENTS SET ANSI_WARNINGS OFF -- MAX Date of Payment for ETP IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN INSERT INTO @MaxDateofPayment SELECT Max(EntryDate) ,EmployeeID FROM @subentry WHERE NOT EmployeeID IS NULL GROUP BY EmployeeID END INSERT INTO @EmpPaymentsSUM SELECT EmployeeID = ep.EmployeeID -- ,EntryID = ep.EntryID ,EntryDate = MAX(ep.EntryDate) ,Payee = ep.Payee ,EmployeeDateStart = ep.EmployeeDateStart ,EmployeeDateEnd = ep.EmployeeDateEnd ,EmployeeCommenceDate = CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,EmployeeAddressID = ep.EmployeeAddressID ,Wages = Sum(ep.Wages) ,GrossPayment = Sum(ep.GrossPayment) ,SuperSGC = Sum(ep.SuperSGC) ,LumpSumA = Sum(ep.LumpSumA) ,LumpSumAT = Sum(ep.LumpSumAT) ,LumpSumAType = NULL ,LumpSumB = Sum(ep.LumpSumB) ,LumpSumD = Sum(ep.LumpSumD) ,LumpSumE = Sum(ep.LumpSumE) ,ReportableSuper = Sum(ep.ReportableSuper) ,ExcludeFromOTE = Sum(ep.ExcludeFromOTE) ,NonTaxableAllowances = Sum(ep.NonTaxableAllowances) ,FBTTaxable = Sum(ep.FBTTaxable) ,FBTNonTaxable = Sum(ep.FBTNonTaxable) ,DeductWorkPlaceGiving = Sum(ep.DeductWorkPlaceGiving) ,DeductUnionFees = Sum(ep.DeductUnionFees) ,CommunityDevelopmentEmploymentProject = Sum(ep.CommunityDevelopmentEmploymentProject) ,ExemptForeignEmploymentIncome = Sum(ep.ExemptForeignEmploymentIncome) ,Allow_Car = Sum(ep.Allow_Car) ,Allow_Trans = Sum(ep.Allow_Trans) ,Allow_Laundry = Sum(ep.Allow_Laundry) ,Allow_Meals = Sum(ep.Allow_Meals) ,Allow_Travel = Sum(ep.Allow_Travel) ,Allow_Other = Sum(ep.Allow_Other) ,Tax = Sum(ep.Tax) ,ForeignWithholding = Sum(ep.ForeignWithholding) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) ,0 -- } ,0 -- ,0 -- history records ,0 -- } ,HasAllowanceEntries = CASE WHEN Sum(ep.NonTaxableAllowances) > 0 THEN 1 ELSE 0 END ,ETPCode = CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE CASE WHEN @ETP = 1 THEN ep.ETPCode ELSE NULL END END ,TaxFlags = ep.TaxFlags ,WagesPeriod_LookupID = ep.WagesPeriod_LookupID ,EmployeeCountryCode = NULL ,PrevLodgementETPDate = NULL ,PrevLodgementINBDate = NULL ,RemunerationIncomeType_LookupID = NULL ,DeclarationSignatureDate = NULL ,RemunerationABN = NULL ,EmployeeEmail = NULL ,EmployeePhone = NULL FROM @EmpPayments ep -- WHERE ((@BatchID IS NULL) OR (ep.BatchID = @BatchID)) /* --JO 14/7/16 --Duplication where ETP with 0|0 WHERE (Wages > 0 OR GrossPayment <> 0 OR LumpSumA <> 0 OR LumpSumB <> 0 OR LumpSumD <> 0 OR LumpSumE <> 0 OR ReportableSuper <> 0 OR NonTaxableAllowances <> 0 OR FBTTaxable <> 0 OR FBTNonTaxable <> 0 OR DeductWorkPlaceGiving <> 0 OR DeductUnionFees <> 0 OR Tax <> 0 OR ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0) */ GROUP BY ep.EmployeeID , CASE WHEN EmployeeDateStart >= @AdminStartDate THEN @AdminStartDate ELSE EmployeeDateStart END ,ep.Payee ,ep.EmployeeAddressID--, ep.EntryDate ,ep.EntryID, ep.Memo , CASE WHEN @BatchID IS NOT NULL THEN NULL ELSE CASE WHEN @ETP = 1 THEN ep.ETPCode ELSE NULL END END ,ep.EmployeeDateStart ,ep.EmployeeDateEnd ,ep.TaxFlags ,ep.WagesPeriod_LookupID SET ANSI_WARNINGS ON -- ETP IF @BatchID IS NOT NULL BEGIN DECLARE @ETP_Results TABLE ( EmployeeID int ,ETPCode varchar(20) --,LumpSumD Money ,ETPTaxable Money ,ETPNonTaxable Money ,ETPTax Money ) INSERT INTO @ETP_Results SELECT EmployeeID = ep.EmployeeID ,ETPCode = ep.ETPCode --,LumpSumD = Sum(ep.LumpSumD) ,ETPTaxable = Sum(ep.ETPTaxable) ,ETPNonTaxable = Sum(ep.ETPNonTaxable) ,ETPTax = Sum(ep.ETPTax) FROM @EmpPayments ep WHERE ( ETPTaxable <> 0 OR ETPNonTaxable <> 0 OR ETPTax <> 0 ) AND NOT ISNULL(ETPCode,'') = '' GROUP BY ep.EmployeeID ,ep.ETPCode END -- Previous submission dates UPDATE @EmpPaymentsSUM SET PrevLodgementINBDate = ec.ToDate FROM @EmpPS ec WHERE ec.EmployeeClaimType_LookupID = 300010 UPDATE @EmpPaymentsSUM SET PrevLodgementETPDate = ec.ToDate FROM @EmpPS ec WHERE ec.EmployeeClaimType_LookupID = 300011 -- Update Employee Address UPDATE @EmpPaymentsSUM SET EmployeeAddressID = c.AddressID FROM Creditor c INNER JOIN Employee e ON e.EmployeeId = c.EmployeeId INNER JOIN @EmpPaymentsSUM eps ON e.EmployeeId = eps.EmployeeId WHERE eps.EmployeeAddressID IS NULL -- Emp Country code UPDATE @EmpPaymentsSUM SET EmployeeCountryCode = lu.Data FROM @EmpPaymentsSUM eps INNER JOIN Address ad ON ad.AddressID = eps.EmployeeAddressID INNER JOIN Lookup lu ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 --Remove country code if AU UPDATE @EmpPaymentsSUM SET EmployeeCountryCode = Null WHERE EmployeeCountryCode = 'AU' -- UPDATE ETP Date of payment -- PayeeETPDateofpayment IF (@ShowEntry = 0) AND (@ETP = 1) BEGIN UPDATE @EmpPaymentsSUM Set EntryDate = mdop.MaxEntryDate FROM @EmpPaymentsSUM eps INNER JOIN @MaxDateofPayment mdop ON mdop.EmployeeId = eps.EmployeeID END --Employee Data --SET ANSI_WARNINGS ON INSERT INTO @EmpData ( EmployeeID ,RemunerationIncomeType ,ArrangementBasis ,RemunerationABN ,StudyLoan ,StudentFinancialScheme ,DeclarationDate ) SELECT EmployeeID = ed.EmployeeID ,RemunerationIncomeType = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationIncomeType/@Value)[1]', 'int') ,'') ,ArrangementBasis = ISNULL(ed.Data.value('(/Data/Tax/Employment/ArrangementBasis/@Value)[1]', 'int') ,'') ,RemunerationABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') ,StudyLoan = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudyLoan/@Value)[1]', 'int') ,'') ,StudentFinancialScheme = ISNULL(ed.Data.value('(/Data/Tax/StudyLoan/StudentFinancialScheme/@Value)[1]', 'int') ,'') ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'date') ,'') FROM @EmpPaymentsSUM eps INNER JOIN dbo.EmployeeData ed ON eps.EmployeeID = ed.EmployeeID --SET ANSI_WARNINGS OFF UPDATE @EmpData SET RemunerationIncomeType_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.RemunerationIncomeType = lu.LookupID UPDATE @EmpData SET ArrangementBasis_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.ArrangementBasis = lu.LookupID UPDATE @EmpData SET RemunerationABN = NULL WHERE RemunerationABN = '' UPDATE @EmpData SET RemunerationABN_Desc = 'Contractor ABN' WHERE RemunerationABN IS NOT NULL UPDATE @EmpData SET StudyLoan_Desc = lu.Description FROM dbo.Lookup lu INNER JOIN @EmpData ed ON ed.StudyLoan = lu.LookupID UPDATE @EmpData SET DeclarationDate = NULL WHERE DeclarationDate = '19000101' UPDATE @EmpPaymentsSUM SET RemunerationIncomeType_LookupID = ed.RemunerationIncomeType FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET DeclarationSignatureDate = ed.DeclarationDate FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID UPDATE @EmpPaymentsSUM SET RemunerationABN = ed.RemunerationABN FROM @EmpData ed INNER JOIN @EmpPaymentsSUM eps ON ed.EmployeeID = eps.EmployeeID -- Employee Numbers -- Email UPDATE @EmpPaymentsSUM SET EmployeeEmail = n.Number FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 4 -- Mobile UPDATE @EmpPaymentsSUM SET EmployeePhone = Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'(','') ,')','') ,'+61','0') FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 3 -- Phone UPDATE @EmpPaymentsSUM SET EmployeePhone = Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'(','') ,')','') ,'+61','0') FROM @EmpPaymentsSUM eps INNER JOIN Employee_Number en ON en.EmployeeID = eps.EmployeeID INNER JOIN dbo.Number n ON n.NumberID = en.NumberID WHERE n.NumberTypeID = 1 AND eps.EmployeePhone IS NULL DECLARE @EmployeeAddress TABLE ( EmployeeID int ,AddressID int ,AddressLine1 varchar(38) ,AddressLine2 varchar(38) ,City varchar(46) ,State varchar(10) ,PostCode varchar(5) ) INSERT INTO @EmployeeAddress SELECT EmployeeID = eps.EmployeeId ,AddressID = ad.AddressID ,AddressLine1 = CONVERT(VARCHAR(38), ab.AddressLine1) ,AddressLine2 = CONVERT(VARCHAR(38), ab.AddressLine2 + ISNULL(' ' + ab.AddressLine3, '') + ISNULL(' ' + ab.AddressLine4, '') ) ,City = CONVERT(VARCHAR(46),ad.City) ,State = CONVERT(VARCHAR(10),ad.State) -- matches list? ,PostCode = CONVERT(VARCHAR(5),ad.PostCode) -- if aust is number? FROM @EmpPaymentsSUM eps INNER JOIN dbo.Address ad ON ad.AddressID = eps.EmployeeAddressID CROSS APPLY dbo.tblfn_SplitAddressBody (ad.Address) ab /* select * from @EmployeeAddress select * from @EmpData Select * from @Subentry return 0 Select * from @MaxDateofPayment --Select * from @TaxTable Select * from @TaxTable2 Select * from @EmpPayments Select * from @EmpPaymentsSUM return 0 */ DECLARE @DEDUCTIONS TABLE ( EmployeeID int ,DeductionType varchar(30) ,DeductionAmount Money ) INSERT INTO @DEDUCTIONS SELECT EmployeeID ,'Workplace Giving' ,DeductWorkPlaceGiving FROM @EmpPaymentsSUM eps WHERE DeductWorkPlaceGiving <> 0 UNION SELECT EmployeeID ,'Fees' ,DeductUnionFees FROM @EmpPaymentsSUM eps WHERE DeductUnionFees <> 0 DECLARE @Allows TABLE ( EmployeeID int ,AllowType varchar(30) ,AllowAmount Money ,AllowTypeOtherDesc Varchar(40) ) INSERT INTO @Allows (EmployeeID ,AllowType ,AllowAmount) SELECT EmployeeID ,'Car' ,Allow_Car FROM @EmpPaymentsSUM eps WHERE Allow_Car <> 0 UNION SELECT EmployeeID ,'Transport' ,Allow_Trans FROM @EmpPaymentsSUM eps WHERE Allow_Trans <> 0 UNION SELECT EmployeeID ,'Laundry' ,Allow_Laundry FROM @EmpPaymentsSUM eps WHERE Allow_Laundry <> 0 UNION SELECT EmployeeID ,'Meals' ,Allow_Meals FROM @EmpPaymentsSUM eps WHERE Allow_Meals <> 0 UNION SELECT EmployeeID ,'Travel' ,Allow_Travel FROM @EmpPaymentsSUM eps WHERE Allow_Travel <> 0 -- other allowances for expected deductible expenses INSERT INTO @Allows SELECT EmployeeID = se.EmployeeID ,AllowType = 'Other' ,AllowAmount = Sum(se.TransTotal) ,AllowTypeOtherDesc = CONVERT(Varchar(40),acc.Reference3) FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 AND ISNULL(acc.Flags,0) & 2097152 = 2097152 AND acc.LookupID3 = 109306 Group BY se.EmployeeID, acc.Reference3 /* select se.* ,AllowTypeOtherDesc = acc.Reference3 ,ISNULL(acc.Flags,0) & 2097152 FROM @SubEntry se INNER JOIN Account acc ON acc.AccountID = se.AccountID WHERE se.EmployeeId IS NOT NULL -- AND se.IsHeader = 0 select * from @Allows */ -- Work out whether the emp had amended ETP/Individual lodgements for the period or not Update @EmpPaymentsSUM SET HasLodgementETPThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 AND @ETP = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementETP = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300010 AND @ETP = 1 Update @EmpPaymentsSUM SET HasLodgementIndividualThisYear = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 AND @IsIndividual = 1 AND ec.ToDate BETWEEN @DateFROM AND @DateTo Update @EmpPaymentsSUM SET HasLodgementIndividual = 1 FROM @EmpPaymentsSUM eps INNER JOIN EmployeeClaim ec ON eps.EmployeeID = ec.EmployeeID WHERE ec.EmployeeClaimType_LookupID = 300011 AND @IsIndividual = 1 -- ********************************************************************************************************** -- ******* REPORT DATA ************************************************************************************** -- ********************************************************************************************************** -- THERE MAY BE DIFFERENT OUTPUTS: -- RETURN THE LIST FOR THE REPORT FILTER -- RETURN THE DATA FOR THE PAYG SUMMARY REPORT -- RETURN THE DATA FOR THE ELECTRONIC OUTPUT -- REPORT FILTER -- Used for the filter form to return the list of possible employees to select from -- This should include employees that receieved payments for the period (contained in @EmpPaymentsSUM) -- and exclude emps already having a PS for the period IF @SelectEmployees = 1 BEGIN /* Select * FROM @EmpPaymentsSUM ep LEFT OUTER JOIN @EmpPS ec ON ep.EmployeeID = ec.EmployeeID --WHERE ((ec.FromDate Is NOT Null) OR (ec.FromDate >= @DateFrom)) --AND ((ec.ToDate Is NOT Null) OR (ec.ToDate >= @DateTo)) Select * FROM @EmpPS */ SELECT e.EmployeeID ,LastName = Convert(varchar(15),e.LastName) ,FirstName = Convert(varchar(15),e.FirstName) ,Title = Convert(varchar(15),e.Title) ,IssueDate = ec.ToDate FROM dbo.Employee e INNER JOIN @EmpPaymentsSUM ep ON ep.EmployeeID = e.EmployeeID LEFT OUTER JOIN @EmpPS ec --dbo.EmployeeClaim ON e.EmployeeID = ec.EmployeeID WHERE e.AdminID = @AdminID --AND ec.EmployeeID IS NULL --we want to exclude emps that already have a PS for the period GROUP BY e.EmployeeID ,e.LastName ,e.FirstName ,e.Title ,ec.ToDate,ec.EmployeeID ORDER BY isnull(ec.ToDate,'30000101') DESC , e.LastName END ELSE --- **** REPORT DATA **** BEGIN -- PAYG SUMMARY REPORT IF @ElectronicOutput = 0 BEGIN SELECT EmployeeID = e.EmployeeID ,EntryDate = eps.EntryDate ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeFirstName = e.FirstName ,EmployeeLastName = e.LastName ,EmployeeAddress = ad.Address + Char(10) + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(CHAR(13) + ad.Country,'') ,EmployeeAdd = ad.Address ,EmployeeCity = ad.City ,EmployeeState = UPPER(ad.State) ,EmployeePostCode = ad.PostCode ,EmployeeCountry = ad.Country -- ,EmployeeStartDate = e.StartDate ,EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(e.TFN) = 1 THEN replace(e.TFN,' ','') ELSE CASE WHEN e.TFN IS NULL THEN '000000000' WHEN NOT (ISNUMERIC(e.TFN) = 1) THEN '*** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(e.TFN) = 9 THEN '*** TFN ' + e.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '*** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE replace(e.TFN,' ','') END END ,TFN = ISNULL(e.TFN,'000000000') ,Payee = ISNULL(eps.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,DateOfBirth = e.DateOfBirth ,Dateofpayment = eps.EntryDate -- ,Memo = ep.Memo ,Wages = Round(eps.Wages,0,1) ,GrossPayment = Round(eps.Wages,0,1) ,LumpSumA = Round(eps.LumpSumA,0,1) + Round(eps.LumpSumAT,0,1) ,LumpSumAT = Round(eps.LumpSumAT,0,1) ,LumpSumAType = CASE WHEN eps.LumpSumA > 0 THEN 'R' WHEN eps.LumpSumAT > 0 AND eps.LumpSumA = 0 THEN 'T' ELSE '' END ,LumpSumB = Round(eps.LumpSumB,0,1) ,LumpSumD = Round(eps.LumpSumD,0,1) ,LumpSumE = Round(eps.LumpSumE,0,1) ,CDEP = 0 ,ReportableSuper = Round(eps.ReportableSuper,0,1) ,Allowances = Round(eps.NonTaxableAllowances,0,1) ,OtherIncome = 0 ,FBTTaxable = Round(eps.FBTTaxable,0,1) ,FBTNonTaxable = Round(eps.FBTNonTaxable,0,1) ,FBT = Round(eps.FBTTaxable,0,1) ,DeductWorkPlaceGiving = Round(eps.DeductWorkPlaceGiving,0,1) ,DeductUnionFees = Round(eps.DeductUnionFees,0,1) ,Tax = Round(eps.Tax,0,1) ,ForeignWithholding = Round(eps.ForeignWithholding,0,1) ,ETPTaxable = Round(eps.ETPTaxable,0,1) ,ETPNonTaxable = Round(eps.ETPNonTaxable,0,1) ,ETPTax = Round(eps.ETPTax,0,1) ,ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,HasLodgementETP = eps.HasLodgementETPThisYear ,HasLodgementIndividual = eps.HasLodgementIndividualThisYear ,FormIDETP = '' --CASE --WHEN ep.HasLodgementETP = 1 --THEN -- CASE -- WHEN @DateTo > '20120630' -- THEN 'NAT70996-07.2012' -- ELSE 'NAT72709B-12.2008' -- END --ELSE -- CASE -- WHEN @DateTo > '20120630' -- THEN 'NAT70868-06.2012' -- ELSE 'NAT72708B-12.2008' -- END --END ,FormIDIndividual = '' --CASE --WHEN ep.HasLodgementIndividual = 1 --THEN -- CASE -- WHEN @DateTo > '20120630' -- THEN '' -- ELSE 'NAT72710B-12.2008' -- END --ELSE -- CASE -- WHEN @DateTo > '20120630' -- THEN '' -- ELSE 'NAT0046-02.2014' --'NAT 72711B-12.2008' -- END --END ,HasAllowanceEntries = eps.HasAllowanceEntries ,DateFrom = @DateFrom ,DateTo = @DateTo ,Signatory1 = @Signatory1 ,AmendmentIndicator = CASE WHEN eps.HasLodgementETPThisYear = 1 THEN 'A' ELSE 'O' END ,ETPCode = eps.ETPCode ,EmployeeEmail = eps.EmployeeEmail ,EmployeePhone = eps.EmployeePhone ,StartDate = eps.EmployeeDateStart ,EndDate = eps.EmployeeDateEnd ,IncomeType = CASE WHEN eps.RemunerationIncomeType_LookupID = 109201 THEN 'CDEP' WHEN eps.RemunerationIncomeType_LookupID = 109202 THEN 'Voluntary Agree' WHEN eps.RemunerationIncomeType_LookupID = 109203 THEN 'Labour Hire' WHEN eps.RemunerationIncomeType_LookupID = 109204 THEN 'Regulation' WHEN eps.RemunerationIncomeType_LookupID = 109205 THEN 'Joint Petroleum' WHEN eps.RemunerationIncomeType_LookupID = 109206 THEN 'Working Holiday' WHEN eps.RemunerationIncomeType_LookupID = 109207 THEN 'Foreign Resident' ELSE NULL END FROM @EmpPaymentsSUM eps INNER JOIN Employee e ON eps.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID LEFT OUTER JOIN Address ad ON ad.AddressID = eps.EmployeeAddressID WHERE e.AdminID = @AdminID --AND ((@BatchID IS NULL) OR (eps.BatchID = @BatchID)) AND ( (@ETP IS NULL) OR ( ((@ETP = 0) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) <> 0)) --AND --((@ETP = 1) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) = 0)) ) ) ORDER BY e.LastName --EntryDate END IF @ElectronicOutput = 1 AND @BatchID IS NULL BEGIN IF @LodgementID Is Not Null BEGIN -- DELETE dbo.EmployeeClaim -- FROM dbo.EmployeeClaim ec -- INNER -- JOIN dbo.#Data d -- ON d.ID = ec.EmployeeID -- WHERE IsNull(ec.FromDate, '30001231') >= @DateFrom -- AND IsNull(ec.ToDate, '18990101') <= @DateTo -- INSERT INTO dbo.EmployeeClaim (EmployeeID,EmployeeClaimType_LookupID,FromDate,ToDate,Period,Rate,TotalClaim,EmpPrefClaim,EmpUnsecClaim,ERAPrefClaim,ERAUnsecClaim,Deductions,NotionalTax,Tax,ERATax,NI,ERANI,IsTaxable,IsNI,IsManualCalc,IsManualClaim,IsFinalised,CreatedDate,CreatedBy,UpdatedDate,UpdatedBy,TS) SELECT d.ID ,EmployeeClaimType_LookupID = CASE WHEN @ETP = 1 THEN 300010 ELSE 300011 END ,@DateFrom ,@DateTo ,@LodgementID ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,GetDate() ,@UpdatedBy ,GetDate() ,@UpdatedBy ,NewID() FROM dbo.#Data d Group BY d.ID END -- POPULATE VARIABLES FOR The Report SELECT @PRACTICEID = PracticeID FROM dbo.Admin WHERE AdminID = @AdminID -- Supplier data record 1 SELECT @PracticeABN = Replace(cp.PropertyValue,' ','') FROM dbo.Admin p INNER JOIN dbo.Admin_CustomProperty acp ON p.AdminID = acp.AdminID INNER JOIN dbo.CustomProperty cp ON cp.CustomPropertyID = acp.CustomPropertyID AND cp.CustomPropertyTypeID = 2 --ABN AND p.AdminID = @PracticeID Set @RunType = 'P' -- t = test; p = production Set @ReportEndDatedd = datepart(dd,@DateTo) Set @ReportEndDatemm = datepart(mm,@DateTo) Set @ReportEndDateyyyy = datepart(yyyy,@DateTo) Set @ReportEndDate = Replace( str(datepart(d,@DateTo),2) + str(datepart(m,@DateTo),2) + str(datepart(yyyy,@DateTo),4) ,' ','0') -- Mandatory Set @Datatype = 'E' Set @Typeofreport = 'A' Set @Formatofreturnmedia = 'P' IF @DateTo <= '20080630' Set @ATOReportSpecificationVersionNumber = 'FEMPA008.0' IF @DateTo <= '20090630' Set @ATOReportSpecificationVersionNumber = 'FEMPA009.0' IF @DateTo <= '20120630' Set @ATOReportSpecificationVersionNumber = 'FEMPA010.0' IF @DateTo > '20120630' Set @ATOReportSpecificationVersionNumber = 'FEMPA011.0' Set @Filler578 = '' -- Supplier data record 2 Select @Suppliername = PracticeName FROM dbo.PRACTICE Where PracticeID = @PRACTICEID Select @SupplierContactName = u.[Name] FROM [User] u WHERE UserID = ISNULL(@UserID,1) IF @SupplierContactName IS NULL Select @SupplierContactName = u.[Name] FROM [User] u INNER JOIN Admin a ON a.ReportingUserID = u.UserID WHERE a.ReportingUserID = @UserID AND a.AdminID = @AdminID SELECT @SupplierContactTelephoneNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 1 --PHONE AND pn.PracticeID = @PracticeID SELECT @SupplierFacsimileNumber = n.Number FROM dbo.Practice p INNER JOIN dbo.Practice_Number pn ON p.PracticeID = pn.PracticeID INNER JOIN dbo.Number n ON n.NumberID = pn.NumberID AND n.NumberTypeID = 2 --FAX AND pn.PracticeID = @PracticeID Select @SupplierFileReference = ShortName FROM dbo.Admin WHERE AdminID = @AdminID Set @Filler327 = '' -- Supplier data record 3 SELECT @PracticeStreetAddressID = a.AddressID FROM dbo.Practice_Address pa INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.AddressTypeId = 2 -- 2 Street AND pa.PracticeID = @PracticeID SELECT @PracticePostalAddressID = a.AddressID FROM dbo.Practice_Address pa INNER JOIN dbo.Address a ON a.AddressID = pa.AddressID WHERE a.AddressTypeId = 1 -- 1 Postal AND pa.PracticeId = @PracticeID SELECT @SupplierStreetaddress = Replace(Replace(Address,char(13),''),char(10),' ') FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalAddress = Replace(Replace(Address,char(13),''),char(10),' ') FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetSuburb = CASE WHEN City is not null THEN City ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalSuburb = CASE WHEN City is not null THEN City ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetState = CASE WHEN State is not null THEN State ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalState = CASE WHEN State is not null THEN State ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetPostCode = CASE WHEN PostCode is not null THEN PostCode ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalPostCode = CASE WHEN PostCode is not null THEN PostCode ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierStreetCountry = CASE WHEN Country is not null THEN Country ELSE '' END FROM dbo.Address WHERE AddressID = @PracticeStreetAddressID SELECT @SupplierPostalCountry = CASE WHEN Country is not null THEN Country ELSE '' END FROM dbo.Address WHERE AddressID = @PracticePostalAddressID SELECT @SupplierEmail = ISNULL(n.Number,'Enter email') FROM dbo.Practice_Number pn INNER JOIN dbo.Number n ON pn.NumberID = n.NumberID WHERE n.NumberTypeId = 4 -- 4 Email AND pn.PracticeID = @PracticeID IF @SupplierEmail IS NULL SELECT @SupplierEmail = '' Set @Filler275 = '' -- Payer identity record -- ****************************************** -- POPULATE THE DATA FOR THE TEXT FILE -- ****************************************** /* this part of the proc was in the original verison of repsp_EmployeePaymentSummaryElectronic which is now combined as part of repsp_EmployeePaymentSummary EXECUTE dbo.repsp_EmployeePaymentSummary @AdminID ,@DateFrom ,@DateTo ,NULL -- Employee Inclause ,0 -- Show entry ,@ETP -- Return ETP bit ,1 -- ElectronicOutput */ INSERT INTO #EmpPaySum SELECT EmployeeID = e.EmployeeID ,EntryDate = ep.EntryDate ,EmployeeName = ISNULL(e.Title + ' ','') + ISNULL(e.FirstName + ' ','') + e.LastName ,EmployeeFirstName = e.FirstName ,EmployeeLastName = e.LastName ,EmployeeAddress = ad.Address + Char(10) + Char(13) + ISNULL(ad.City+ ' ','') + ISNULL(ad.State + ' ','') + ISNULL(ad.PostCode,'') + ISNULL(CHAR(13) + ad.Country,'') ,EmployeeAdd = ad.Address + Char(10) + Char(13) ,EmployeeCity = ad.City ,EmployeeState = ad.State ,EmployeePostCode = ad.PostCode ,EmployeeCountry = ad.Country -- ,EmployeeStartDate = e.StartDate ,EmployeeTFN = CASE WHEN e.TFN IS NULL THEN '000000000' WHEN NOT (ISNUMERIC(replace(e.TFN,' ','')) = 1) THEN '*** TFN ' + e.TFN + ' NOT Numeric' WHEN NOT LEN(replace(e.TFN,' ','')) = 9 THEN '*** TFN ' + e.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(e.TFN) = 1 THEN '*** TFN ' + e.TFN + ' DOESN''T pass algorithm' ELSE replace(e.TFN,' ','') END ,TFN = ISNULL(e.TFN,'000000000') ,Payee = ISNULL(ep.Payee,ISNULL(e.FirstName + ' ','') + e.LastName) ,DateOfBirth = e.DateOfBirth ,Dateofpayment = ep.EntryDate -- ,Memo = ep.Memo ,Wages = Round(ep.Wages,0,1) ,GrossPayment = Round(ep.Wages,0,1) ,LumpSumA = Round(ep.LumpSumA,0,1) ,LumpSumB = Round(ep.LumpSumB,0,1) ,LumpSumD = Round(ep.LumpSumD,0,1) ,LumpSumE = Round(ep.LumpSumE,0,1) ,ReportableSuper = Round(ep.ReportableSuper,0,1) ,NonTaxableAllowances = Round(ep.NonTaxableAllowances,0,1) ,OtherIncome = Null ,FBT = Null ,Tax = Round(ep.Tax,0,1) ,ETPTaxable = Round(ep.ETPTaxable,0,1) ,ETPNonTaxable = Round(ep.ETPNonTaxable,0,1) ,ETPTax = Round(ep.ETPTax,0,1) ,ABNPayerNumber = ISNULL(abnwpn.ABN_WPN,'*** ABN or Payer No. NOT Entered') ,BranchNumber = ISNULL(@PayerBranch,'001') ,PayerName = @PayerName ,PaymentTypeCode = ep.ETPCode ,AmendmentIndicator = CASE WHEN ep.HasLodgementIndividualThisYear = 1 THEN 'A' ELSE 'O' END -- Amended or Original ,AmendmentIndicatorETP = CASE WHEN ep.HasLodgementETPThisYear = 1 THEN 'A' ELSE 'O' END -- Amended or Original FROM @EmpPaymentsSUM ep INNER JOIN Employee e ON ep.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID LEFT OUTER JOIN Address ad ON ad.AddressID = ep.EmployeeAddressID WHERE e.AdminID = @AdminID AND ((@ETP = 0) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) > 0)) --AND ((@ETP = 1) OR ((ep.ETPTaxable + ep.ETPNonTaxable + ep.ETPTax) = 0)) ORDER BY e.LastName --EntryDate -- This bit was for multiple jobs (admins). -- At the monent it only outputs job-by-job -- IF NOT @AdminInClause IS NULL -- BEGIN -- EXEC dbo.usp_Split @AdminInClause -- END -- ELSE -- BEGIN -- INSERT -- INTO dbo.#Data -- SELECT AdminID -- FROM dbo.Admin -- WHERE IsNotTaxReg = 0 -- This is where you select the jobs for inclusion -- AND PracticeID = @PracticeID -- AND AdminID = @AdminID -- AND AdminStatusID in (1,2) -- AND AdminTypeID > 1000 ---- END INSERT INTO @Admins SELECT AdminID = a.AdminID ,AdminTypeID = a.AdminTypeID ,ABN = NULL ,WPN = NULL ,ABN_WPN = NULL ,CAC = '001' -- Branch Number Mandatory *** UPDATED BELOW IF SET *** ,AdminFullName = convert(nchar(200),a.Name ) ,PayerName = NULL -- ,PayerTradingName = NULL ,PayerAddress = NULL ,PayerAddress1 = Null ,PayerAddress2 = Null ,PayerSuburb = Null -- Mandatory ,PayerState = Null -- Mandatory ,PayerPostCode = Null -- Mandatory ,PayerCountry = Null ,ReportingUserID = a.ReportingUserID ,ContactName = '' ,ContactTelephoneNumber = @SupplierContactTelephoneNumber -- FORMAT 02b1234b5678 or 0412b123b456 ,ContactEmail = @SupplierContactEmail ,ContactFacsimileNumber = @SupplierFacsimileNumber -- FORMAT 02b1234b5678 ,ETPPayerType = 'P' FROM dbo.Admin a WHERE a.AdminID = @AdminID -- INNER -- JOIN dbo.#Data #d -- ON #d.ID = a.AdminID -- ORDER BY a.AdminID -- -- ADD JOB SUFFIX UPDATE @Admins SET AdminFullName = rtrim(AdminFullName) + isnull(' ' + cpSuffix.PropertyValue,'') FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpSuffix ON cpSuffix.CustomPropertyID = acp.CustomPropertyID AND cpSuffix.CustomPropertyTypeID in (12) -- ADMINS FOR HISTORY -- UPDATE DATA -- Payer Name UPDATE @Admins SET PayerName = cpPN.PropertyValue FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpPN ON cpPN.CustomPropertyID = acp.CustomPropertyID AND cpPN.CustomPropertyTypeID in (607) WHERE NOT cpPN.PropertyValue IS NULL UPDATE @Admins SET PayerName = Isnull(PayerName,isNull(AdminFullName,'')) -- CAC Branch Number /* */ UPDATE @Admins SET CAC = Isnull(cpBranch.PropertyValue,a.CAC) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpBranch ON cpBranch.CustomPropertyID = acp.CustomPropertyID AND cpBranch.CustomPropertyTypeID in (610) AND ISNULL(cpBranch.AdminTypeID,@AdminTypeID) = @AdminTypeID UPDATE @Admins SET PayerTradingName = '' -- SPLIT OUT ADDRESS LINES UPDATE @Admins SET PayerAddress = Replace(Replace(ad.Address,char(13),'ƒ'),char(10),'ƒ') ,PayerSuburb = convert(nchar(27),ad.City) -- Mandatory ,PayerState = convert(nchar(3),ad.State) -- Mandatory ,PayerPostCode = convert(nchar(4),ad.PostCode) -- Mandatory ,PayerCountry = convert(nchar(20),Isnull(ad.Country,'')) FROM dbo.Address ad INNER JOIN dbo.Admin_Address aa ON aa.AddressID = ad.AddressID INNER JOIN @Admins a ON a.AdminID = aa.AdminID WHERE ad.IsMailing = 1 UPDATE @Admins SET PayerAddress = Replace(PayerAddress,'ƒƒ','ƒ') UPDATE @Admins SET PayerAddress1 = CASE WHEN Charindex(PayerAddress,'ƒ') > 0 THEN convert(nchar(38),left(PayerAddress, Charindex(PayerAddress,'ƒ'))) ELSE convert(nchar(38),PayerAddress) END ,PayerAddress2 = convert(nchar(38),Right(PayerAddress, Charindex(PayerAddress,'ƒ'))) FROM @Admins UPDATE @Admins SET PayerAddress1 = REPLACE (PayerAddress1,'ƒ',' ') ,PayerAddress2 = REPLACE (PayerAddress2,'ƒ',' ') -- CONTACT NAME UPDATE @Admins SET ContactName = u.Name FROM @Admins a INNER JOIN dbo.[User] u ON u.UserID = a.ReportingUserID -- ABN WPN UPDATE @Admins SET ABN = convert(nchar(11),REPLACE(cpABN.PropertyValue,' ','')) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpABN ON cpABN.CustomPropertyID = acp.CustomPropertyID AND cpABN.CustomPropertyTypeID in (2) UPDATE @Admins SET WPN = convert(nchar(11),REPLACE(cpWPN.PropertyValue,' ','')) FROM admin_customproperty acp INNER JOIN @Admins a ON a.AdminID = acp.AdminID INNER JOIN CustomProperty cpWPN ON cpWPN.CustomPropertyID = acp.CustomPropertyID AND cpWPN.CustomPropertyTypeID in (4) UPDATE @Admins SET ABN_WPN = ISNULL(WPN,ABN) -- Software record SELECT @Softwareproducttype = 'COMMERCIAL Exalt Technologies, MYOB Insolvency ' + Setting FROM dbo.ApplicationSetting WHERE SettingId = 1 SET @Filler536 = '' -- PAYGW Payment Summary Individual Non-business data record INSERT INTO @Emps SELECT PayeeTFN = convert(nchar(9),replace(eps.TFN,' ','')) -- Mandatory ,PayeeSurname = convert(nchar(30),eps.EmployeeLastName) -- Mandatory ,PayeeFirstGivenName = CASE WHEN CharIndex(' ',eps.EmployeeFirstName) = 0 THEN Convert(nchar(15),eps.EmployeeFirstName) ELSE Convert(nchar(15),LEFT(eps.EmployeeFirstName,CharIndex(' ',eps.EmployeeFirstName))) -- Mandatory END ,PayeeSecondGivenName = CASE WHEN CharIndex(' ',eps.EmployeeFirstName) = 0 THEN '' ELSE ISNULL(convert(nchar(15),RIGHT(eps.EmployeeFirstName,LEN(eps.EmployeeFirstName) - CharIndex(' ',eps.EmployeeFirstName))),'') END --,PayeeAddress = Replace(eps.EmployeeAdd,char(13) + char(10),'ƒ') ,PayeeAddress = Replace(Replace(eps.EmployeeAdd,char(13),'ƒ'),char(10),'ƒ') ,PayeeAddress1 = '' ,PayeeAddress2 = '' ,PayeeSuburb = convert(nchar(27),eps.EmployeeCity) -- Mandatory ,PayeeState = convert(nchar(3),eps.EmployeeState) -- Mandatory ,PayeePostCode = convert(nchar(4),eps.EmployeePostCode) -- Mandatory ,PayeeCountry = convert(nchar(20),Isnull(eps.EmployeeCountry,'')) ,PeriodPaymentStart = Replace( str(datepart(d,@DateFrom),2) + str(datepart(m,@DateFrom),2) + str(datepart(yyyy,@DateFrom),4) ,' ','0') ,PeriodPaymentEnd = Replace( str(datepart(d,@DateTo),2) + str(datepart(m,@DateTo),2) + str(datepart(yyyy,@DateTo),4) ,' ','0') ,TotalTaxWithheld = REPLACE(STR(FLOOR(eps.Tax),8),' ',0) --REPLICATE('0', 8 - Len(eps.Tax)) + ,STR(eps.Tax) -- Mandatory ,GrossPayment = REPLACE(STR(FLOOR(eps.GrossPayment),8),' ',0) -- Mandatory ,TotalAllowances = REPLACE(STR(FLOOR(eps.NonTaxableAllowances),8),' ',0) -- ,LumpSumPaymentA = REPLACE(STR(FLOOR(eps.LumpSumA),8),' ',0) -- Mandatory ,LumpSumPaymentB = REPLACE(STR(FLOOR(eps.LumpSumB),8),' ',0) -- Mandatory ,LumpSumPaymentD = REPLACE(STR(FLOOR(eps.LumpSumD),8),' ',0) -- Mandatory ,LumpSumPaymentE = REPLACE(STR(FLOOR(eps.LumpSumE),8),' ',0) -- Mandatory ,PayeeDateOfBirth = ISNULL( Replace( str(datepart(d,eps.DateOfBirth),2) -- If only year is recorded then return as 00 + str(datepart(m,eps.DateOfBirth),2) -- If only year is recorded then return as 00 + str(datepart(yyyy,eps.DateOfBirth),4) ,' ','0') ,'00000000' ) -- Mandatory ,PayeeETPDateofpayment = ISNULL( Replace( str(datepart(d,eps.Dateofpayment),2) + str(datepart(m,eps.Dateofpayment),2) + str(datepart(yyyy,eps.Dateofpayment),4) ,' ','0') ,'00000000' ) -- Mandatory -- ,PayeeDateStarted = -- Replace( -- str(datepart(d,eps.PayeeDateStarted),2) -- + str(datepart(m,eps.PayeeDateStarted),2) -- + str(datepart(yyyy,eps.PayeeDateStarted),4) -- ,' ','0') -- Mandatory -- ,ETPTaxable = REPLACE(STR(FLOOR(eps.ETPTaxable),8),' ',0) ,ETPNonTaxable = REPLACE(STR(FLOOR(eps.ETPNonTaxable),8),' ',0) ,ETPTax = REPLACE(STR(FLOOR(eps.ETPTax),8),' ',0) ,CommunityDevelopmentEmploymentProject = '00000000' -- Mandatory ,OtherIncome = '00000000' -- Mandatory ,ReportableFringeBenefits = '00000000' -- Mandatory ,PaymentTypeCode ,AmendmentIndicator ,AmendmentIndicatorETP ,ReportableSuper = REPLACE(STR(FLOOR(eps.ReportableSuper),8),' ',0) FROM #EmpPaySum eps -- SPLIT OUT ADDRESS LINES UPDATE @Emps SET PayeeAddress = Replace(PayeeAddress,'ƒƒ','ƒ') /* UPDATE @Emps SET PayeeAddress = Replace(PayeeAddress,'ƒ',' ') */ UPDATE @Emps SET PayeeAddress1 = CASE WHEN Charindex('ƒ',PayeeAddress) = 0 THEN convert(nchar(38),PayeeAddress) ELSE convert(nchar(38),REPLACE(Convert(nchar(38),LEFT(PayeeAddress,CharIndex('ƒ',PayeeAddress))),'ƒ',' ')) -- Mandatory END ,PayeeAddress2 = CASE WHEN CharIndex('ƒ',PayeeAddress) = 0 THEN '' ELSE ISNULL(convert(nchar(38),RIGHT(PayeeAddress,LEN(PayeeAddress) - CharIndex('ƒ',PayeeAddress))),'') END FROM @Emps UPDATE @Emps SET PayeeAddress1 = Replace(PayeeAddress1,'ƒ',' ') ,PayeeAddress2 = Replace(PayeeAddress2,'ƒ',' ') --SELECT PayeeAddress1 , PayeeAddress2 ,REPLACE(PayeeAddress,'ƒ',' '),Charindex('ƒ',PayeeAddress),* FROM @Emps SET @Filler316 = '' SET @Filler283 = '' --SET @Filler275 = '' SET @ReportableEmployerSuperannuationContribs = '00000000' SET @LumpSumPaymentAType = 'R' -- R – where payment was for a genuine redundancy; T – where payment was not a payment for a genuine redundancy SET @WorkplaceGiving = '00000000' SET @UnionProfFees = '00000000' SET @ExemptForeignEmploymentIncome = '00000000' SET @DeductibleAmountPurchasePriceofAnnuity = '00000000' -- Eligible Termination Payment (ETP) data record Set @Filler380 = '' Set @Filler377 = '' --File total record Set @FileTotal = 'FILE-TOTAL' Set @Filler607 = '' --Select * FROM #EmpPaySum --Select * FROM @Emps --return 0 -- ******************************************************** -- REPORT OUTPUT INSERT INTO @Output SELECT -- Supplier data record 1 --Character position Field length Field format Field type Field name Data item Definitions --& edit rules --1-3 3 N M Record length (=628) SR01 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER1) SR02 7.2 --18-28 11 N M Supplier Australian Business Number SR03 7.3 --29-29 1 A M Run type (T=Test, P=Production) SR04 7.4 --30-37 8 DT M Report end date (DDMMCCYY) SR05 7.5 --38-38 1 A M Data type (=E) SR06 7.6 --39-39 1 A M Type of report (=A) SR07 7.7 --40-40 1 A M Format of return media (=P) SR08 7.8 --41-50 10 AN M ATO Report specification version number (=FEMPA007.4) SR09 7.9 --51-60 10 AN O ATO Corporate External Gateway User ID SR10 7.10 --61-628 568 A S Filler SR11 7.11 1 -- order ,'628' + 'IDENTREGISTER1' + @PracticeABN + @RunType + @ReportEndDate + @Datatype + @Typeofreport + @Formatofreturnmedia + @ATOReportSpecificationVersionNumber + @Filler578 -- + CHAR(10) + CHAR(13) -- Supplier data record 2 --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) SR12 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER2) SR13 7.12 --18-217 200 AN M Supplier name SR14 7.13 --218-255 38 AN M Supplier contact name SR15 7.14 --256-270 15 AN M Supplier contact telephone number SR16 7.15 --271-285 15 AN O Supplier facsimile number SR17 7.16 --286-301 16 AN O Supplier file reference SR18 7.17 --302-628 327 A S Filler SR19 7.11 INSERT INTO @Output SELECT 2 -- order ,'628' + 'IDENTREGISTER2' + @Suppliername + @SupplierContactName + @SupplierContactTelephoneNumber + @SupplierFacsimileNumber + @SupplierFileReference + @Filler327 -- Supplier data record 3 --1-3 3 N M Record length (=628) SR20 7.1 --4-17 14 AN M Record identifier (=IDENTREGISTER3) SR21 7.18 --18-55 38 AN M Street address - line 1 SR22 7.19 --56-93 38 AN O Street address - line 2 SR23 7.19 --94-120 27 AN M Suburb, town or city SR24 7.20 --121-123 3 A M State or territory SR25 7.21 --124-127 4 N M Postcode SR26 7.22 --128-147 20 AN O Country SR27 7.23 --148-185 38 AN O Postal address - line 1 SR28 7.24 --186-223 38 AN C Postal address - line 2 SR29 7.24 --224-250 27 AN C Suburb, town or city SR30 7.25 --251-253 3 A C State or territory SR31 7.26 --254-257 4 N C Postcode SR32 7.27 --258-277 20 AN O Country SR33 7.28 --278-353 76 AN O Supplier e-mail address SR34 7.29 --354-628 275 A S Filler SR35 7.11 INSERT INTO @Output SELECT 3 -- order ,'628' + 'IDENTREGISTER3' + @SupplierStreetaddress + @SupplierStreetSuburb + @SupplierStreetState + @SupplierStreetPostCode + @SupplierStreetCountry + @SupplierPostaladdress + @SupplierPostalSuburb + @SupplierPostalState + @SupplierPostalPostCode + @SupplierPostalCountry + @SupplierEmail + @Filler275 -- Payer identity record --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) PR01 7.1 --4-11 8 A M Record identifier (=IDENTITY) PR02 7.30 --12-22 11 N M Payer Australian Business Number or Withholding Payer Number PR03 7.31 --23-25 3 N M Branch Number PR04 7.32 --26-29 4 N M Financial year (CCYY) PR05 7.33 --30-229 200 AN M Payer name PR06 7.34 --230-429 200 AN O Payer trading name PR07 7.35 --430-467 38 AN M Payer address - line 1 PR08 7.36 --468-505 38 AN O Payer address - line 2 PR09 7.36 --506-532 27 AN M Suburb, town or city PR10 7.37 --533-535 3 A M State or territory PR11 7.38 --536-539 4 N M Postcode PR12 7.39 --540-559 20 AN O Country PR13 7.40 --560-597 38 AN O Contact name PR14 7.41 --598-612 15 AN O Contact telephone number PR15 7.42 --613-627 15 AN O Contact facsimile number PR16 7.43 --628-628 1 A C ETP payer type PR17 7.44 INSERT INTO @Output SELECT 4 -- order , '628' + 'IDENTITY' + isnull(ABN_WPN,'') -- Mandatory + CAC + Convert(nchar(4),YEAR(dbo.uFnFinancialYearEndDate(@DateTo))) -- Mandatory + PayerName + PayerTradingName + PayerAddress1 + PayerAddress2 + PayerSuburb + PayerState + PayerPostCode + PayerCountry + ContactName + ContactTelephoneNumber + ContactFacsimileNumber + ' ' --filler 1 -- ETPPayerType FROM @Admins -- Software record --Character --position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) SW01 7.1 --4-11 8 A M Record identifier (=SOFTWARE) SW02 7.45 --12-91 80 AN M Software product type SW03 7.46 --92-92 1 A M ECI tested (=Y or N) SW05 7.70 --93-628 536 A S Filler SW04 7.11 INSERT INTO @Output SELECT 5 -- order , '628' + 'SOFTWARE' + @Softwareproducttype + 'Y' + @Filler536 -- INDIVIDUAL NON-BUSINESS PAYMENT SUMMARY DATA RECORD --Character position Field length Field format Field type Field name Definitions & edit rules --1-3 3 N M Record length (=628) 7.1 --4-7 4 A M Record identifier (=DINB) 7.46 --8-8 1 A M Income type (= P or S) 7.95 --9-17 9 N M Payee tax file number 7.47 --18-25 8 DT O Payee date of birth (DDMMCCYY) 7.48 --26-55 30 AN M Payee surname 7.49 --56-70 15 AN C Payee first given name 7.50 --71-85 15 AN O Payee second given name 7.51 --86-123 38 AN M Payee address - line 1 7.52 --124-161 38 AN O Payee address - line 2 7.52 --162-188 27 AN M Suburb, town or locality 7.53 --189-191 3 A M State or territory 7.54 --192-195 4 N M Postcode 7.55 --196-215 20 AN C Country 7.56 --216-223 8 DT M Period of payment start date (DDMMCCYY) 7.57 --224-231 8 DT M Period of payment end date (DDMMCCYY) 7.58 --232-239 8 N M Total tax withheld (dollars) 7.59 --240-247 8 N M Gross payments (dollars) 7.61 --248-255 8 N M Total allowances (dollars) 7.62 --256-263 8 N M Lump sum payment A (dollars) 7.63 --264-271 8 N M Lump sum payment B (dollars) 7.63 --272-279 8 N M Lump sum payment D (dollars) 7.63 --280-287 8 N M Lump sum payment E (dollars) 7.63 --288-295 8 N M Community development employment project (dollars) 7.64 --296-303 8 N M Other income (dollars) 7.65 --304-311 8 N M Reportable fringe benefits (dollars) 7.66 --312-312 1 A M Amendment indicator (=A or O) 7.92 --313-628 316 A S Filler 7.10 --DEBUG /* SELECT 6 -- order ,'628' + 'DINB' + 'S' --S - for salary or wages , PayeeTFN -- Mandatory , PayeeDateOfBirth -- Mandatory , PayeeSurname -- Mandatory , PayeeFirstGivenName -- Mandatory , PayeeSecondGivenName , PayeeAddress1 -- Mandatory , PayeeAddress2 , PayeeSuburb -- Mandatory , PayeeState -- Mandatory , PayeePostCode -- Mandatory , PayeeCountry , PeriodPaymentStart -- Mandatory , PeriodPaymentEnd -- Mandatory , TotalTaxWithheld -- Mandatory , GrossPayment -- Mandatory , TotalAllowances -- Mandatory , LumpSumPaymentA -- Mandatory , LumpSumPaymentB -- Mandatory , LumpSumPaymentD -- Mandatory , LumpSumPaymentE -- Mandatory , CommunityDevelopmentEmploymentProject -- Mandatory ,@ATOReportSpecificationVersionNumber , CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA008.0' THEN OtherIncome -- Mandatory + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @Filler316 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA009.0' THEN ' ' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @ReportableEmployerSuperannuationContribs + @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @Filler283 ELSE -- 'FEMPA010.0' ' ' --OtherIncome left blank (Filler) + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @ReportableEmployerSuperannuationContribs + @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 END FROM @EMPS WHERE (@ETP = 0) */ INSERT INTO @Output SELECT 6 -- order ,'628' + 'DINB' + 'S' --S - for salary or wages + PayeeTFN -- Mandatory + PayeeDateOfBirth -- Mandatory + PayeeSurname -- Mandatory + PayeeFirstGivenName -- Mandatory + PayeeSecondGivenName + PayeeAddress1 -- Mandatory + PayeeAddress2 + PayeeSuburb -- Mandatory + PayeeState -- Mandatory + PayeePostCode -- Mandatory + PayeeCountry + PeriodPaymentStart -- Mandatory + PeriodPaymentEnd -- Mandatory + TotalTaxWithheld -- Mandatory + GrossPayment -- Mandatory + TotalAllowances -- Mandatory + LumpSumPaymentA -- Mandatory + LumpSumPaymentB -- Mandatory + LumpSumPaymentD -- Mandatory + LumpSumPaymentE -- Mandatory + CommunityDevelopmentEmploymentProject -- Mandatory + CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA008.0' THEN OtherIncome -- Mandatory + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + @Filler316 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA009.0' THEN ' ' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + CASE WHEN LumpSumPaymentA = '00000000' THEN ' ' ELSE @LumpSumPaymentAType END + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @Filler283 WHEN @ATOReportSpecificationVersionNumber = 'FEMPA010.0' THEN '00000000' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + ' ' -- @LumpSumPaymentAType + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 ELSE -- 'FEMPA011.0' '00000000' --OtherIncome left blank + ReportableFringeBenefits -- Mandatory + AmendmentIndicator + ReportableSuper + CASE WHEN LumpSumPaymentA = '00000000' THEN ' ' ELSE @LumpSumPaymentAType END + @WorkplaceGiving + @UnionProfFees + @ExemptForeignEmploymentIncome + @DeductibleAmountPurchasePriceofAnnuity + @Filler275 END FROM @EMPS WHERE (@ETP = 0) -- PAYGW Payment Summary Voluntary Agreement data record -- NOT SUPPORTED -- 7 -- order --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) VA01 7.1 --4-7 4 A M Record identifier (=DBUS) VA02 7.69 --8-18 11 N M Payee Australian Business Number VA03 7.71 --19-26 8 DT O Payee date of birth (DDMMCCYY) VA04 7.50 --27-56 30 AN M Payee surname VA05 7.51 --57-71 15 AN M Payee first given name VA06 7.52 --72-86 15 AN O Payee second given name VA07 7.53 --87-124 38 AN M Payee address - line 1 VA08 7.54 --125-162 38 AN O Payee address - line 2 VA09 7.54 --163-189 27 AN M Suburb, town or city VA10 7.55 --190-192 3 A M State or territory VA11 7.56 --193-196 4 N M Postcode VA12 7.57 --197-216 20 AN O Country VA13 7.58 --217-224 8 DT M Period of payment start date (DDMMCCYY) VA14 7.59 --225-232 8 DT M Period of payment end date (DDMMCCYY) VA15 7.60 --233-240 8 N M Total tax withheld (dollars) VA16 7.61 --241-245 5 N M Withholding rate VA17 7.62 --246-253 8 N M Gross payments, including the market value of non-cash benefits (dollars) VA18 7.72 --254-628 375 A S Filler VA19 7.11 -- PAYGW Payment Summary Labour Hire & Other Specified Payments data record -- NOT SUPPORTED -- 8 -- order -- PAYGW Payment Summary Personal Services Attributed Income data record -- NOT SUPPORTED -- 9 -- order -- Eligible Termination Payment (ETP) data record --Character position Field length Field format Field type Field name Data item Definitions & edit rules --1-3 3 N M Record length (=628) ET01 7.1 --4-7 4 A M Record identifier (=DETP) ET02 7.73 --8-16 9 N M Payee Tax File Number ET03 7.49 --17-46 30 AN M Payee surname ET04 7.51 --47-61 15 AN M Payee first given name ET05 7.52 --62-76 15 AN O Payee second given name ET06 7.53 --77-114 38 AN M Payee address - line 1 ET07 7.54 --115-152 38 AN O Payee address - line 2 ET08 7.54 --153-179 27 AN M Suburb, town or city ET09 7.55 --180-182 3 A M State or territory ET10 7.56 --183-186 4 N M Postcode ET11 7.57 --187-206 20 AN O Country ET12 7.58 --207-214 8 DT C Payee date of birth (DDMMCCYY) ET13 7.74 --215-222 8 DT M Date of payment (DDMMCCYY) ET14 7.75 --223-230 8 DT M Date started (DDMMCCYY) ET15 7.76 --231-235 5 N C Number of days before 1 July 1983 ET16 7.77 --236-240 5 N M Number of days after 30 June 1983 ET17 7.78 --241-248 8 N C CGT exempt component (dollars) ET18 7.79 --249-256 8 N C Non-qualifying component (dollars) ET19 7.80 --257-264 8 N C Undeducted contributions (dollars) ET20 7.81 --265-272 8 N C Concessional component (dollars) ET21 7.82 --273-280 8 N C Pre July 1983 component (dollars) ET22 7.83 --281-288 8 N C Post June 1983 untaxed element (dollars) ET23 7.84 --289-296 8 N C Post June 1983 taxed element (dollars) ET24 7.85 --297-304 8 N C Post June 1994 invalidity component (dollars) ET25 7.86 --305-312 8 N M Gross amount of payment (dollars) ET26 7.87 --313-320 8 N M Total tax withheld (dollars) ET27 7.88 --321-328 8 N M Assessable amount (dollars) ET28 7.89 --329-329 1 A M Death benefit (=Y or N) ET29 7.90 --330-330 1 A C Type of death benefit (=T or O) ET30 7.91 --331-628 298 A S Filler ET31 7.11 -- v11.0.1 /* Character position Field length Field format Field type Field name Reference number 1-3 3 N M Record length (=628) 7.1 4-7 4 A M Record identifier (=DEMP) 7.82 8-16 9 N M Payee tax file number 7.48 17-46 30 AN M Payee surname or family name 7.50 47-61 15 AN C Payee first given name 7.51 62-76 15 AN O Payee second given name 7.52 77-114 38 AN M Payee address line 1 7.53 115-152 38 AN O Payee address line 2 7.53 153-179 27 AN M Payee suburb, town or locality 7.54 180-182 3 A M Payee state or territory 7.55 183-186 4 N M Payee postcode 7.56 187-206 20 AN C Payee country 7.57 207-214 8 DT M Payee date of birth (DDMMCCYY) 7.49 215-222 8 DT M Date of payment (DDMMCCYY) 7.83 223-230 8 N M Total tax withheld (dollars) 7.60 231-238 8 N M Taxable component (dollars) 7.84 239-246 8 N M Tax free component (dollars) 7.85 247-247 1 A M Payment type code (=R, O, S, P, D, B, N or T) 7.86 248-248 1 A M Amendment indicator (=A or O) 7.67 249-628 380 A S Filler 7.10 */ INSERT INTO @Output SELECT 10 -- order , '628' + 'DEMP' + PayeeTFN -- Mandatory + PayeeSurname -- Mandatory + PayeeFirstGivenName -- Mandatory + PayeeSecondGivenName + PayeeAddress1 -- Mandatory + PayeeAddress2 + PayeeSuburb -- Mandatory + PayeeState -- Mandatory + PayeePostCode -- Mandatory + PayeeCountry + PayeeDateOfBirth + PayeeETPDateofpayment + ETPTax --223-230 8 N M Total tax withheld (dollars) 7.60 + ETPTaxable --231-238 8 N M Taxable component (dollars) 7.79 + ETPNonTaxable -- 239-246 8 N M Tax free component (dollars) 7.80 + CASE WHEN @ATOReportSpecificationVersionNumber = 'FEMPA011.0' THEN + PaymentTypeCode + AmendmentIndicatorETP --251-251 1 A M Amendment indicator (=A or O) 7.67 + @Filler380 ELSE 'N' -- Death benefit (=Y or N) Mandatory + ' ' --C Type of death benefit (=T or O) ET30 7.91 + 'N' --249-249 1 A M Transitional termination payment (=Y or N) 7.83 + 'N' --250-250 1 A M Is this payment part of a payment made in an earlier income year for the same termination? (=Y or N) 7.84 + AmendmentIndicatorETP --251-251 1 A M Amendment indicator (=A or O) 7.67 + @Filler377 END FROM @EMPS WHERE (@ETP = 1) --331-628 298 A S Filler ET31 7.11 --File total record -- calc no of records Select @NumberOfRecords = Count(Outputfield) + 1 from @Output --Character position Field length Field format Field type Field name Definitions & edit rules --1-3 3 N M Record length (=628) 7.1 --4-13 10 AN M Record identifier (=FILE-TOTAL) 7.90 --14-21 8 N M Number of records 7.91 --22-628 607 A S Filler 7.10 INSERT INTO @Output SELECT 11 -- order , '628' + @FileTotal + REPLACE(STR(FLOOR(@NumberOfRecords),8),' ',0) -- including this one + @Filler607 -- INSERTS A LINE FEED /* IF @ATOReportSpecificationVersionNumber = 'FEMPA008.0' BEGIN INSERT INTO @Output SELECT 12 -- order ,'' END */ SELECT * FROM @Output Order By OutputOrder END /* IF @BatchID IS NOT NULL BEGIN DECLARE @XMLData XML DECLARE @PayPeriodDateStart DATETIME DECLARE @PayPeriodDateEnd DATETIME DECLARE @PayrollEventFinal bit SELECT @XMLData = b.Data FROM dbo.Batch b WHERE b.BatchID = @BatchID SELECT @PayPeriodDateStart = pb.value('(@DateFrom)[1]', 'DATETIME') ,@PayPeriodDateEnd = pb.value('(@DateTo)[1]', 'DATETIME') ,@PayrollEventFinal = pb.value('(@PayrollEventFinal)[1]', 'bit') FROM @XmlData.nodes('/Items/PayrollData/Dates') AS PayData(pb) END */ IF @ElectronicOutput = 1 AND @BatchID IS NOT NULL BEGIN -- Add R INSERT INTO @LUMPA SELECT lumpA.EmployeeID ,'R' ,lumpA.LumpSumA FROM @EmpPaymentsSUM lumpA WHERE lumpA.LumpSumA <> 0 -- add a T record if there isnt any R INSERT INTO @LUMPA SELECT lumpAT.EmployeeID ,'T' ,lumpAT.LumpSumAT FROM @EmpPaymentsSUM lumpAT WHERE lumpAT.LumpSumAT <> 0 /* DECLARE @LastLumpSum_A_Date DECLARE @LastLumpSum_AT_Date select @LastLumpSum_A_Date = Max(EntryDate) FROM @EmpPayments WHERE LumpSumA <> 0 select @LastLumpSum_AT_Date = Max(EntryDate) FROM @EmpPayments WHERE LumpSumAT <> 0 */ -- Caclulate Totals Select @TotalPaid = IsNull(SUM(ep.GrossPayment),0) -- Total Withheld ,@TotalTax = IsNull(SUM(ep.TAX),0) -- Total Total Gross ,@TransLastDate = Max(ep.EntryDate) FROM @EmpPayments ep WHERE InReport = 1 /* Select @TotalTax ,@TotalPaid Select * FROM @EmpPayments ep WHERE InReport = 1*/ DECLARE @XMLResults TABLE ( EmployeeID int ,XML xml ) ; WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs,'http://www.sbr.gov.au/ato/payevntemp' as targetNamespace,'qualified' as elementFormDefault,'http://www.sbr.gov.au/ato/payevntemp' as tns) -- ('tns' as tns, DEFAULT 'tns') INSERT INTO @XMLResults Select epsh.EmployeeID ,XML = --Convert(nvarchar(max), ( -- PAYEVNTEMP Select ( -- Payee Select ( SELECT 'tns:TaxFileNumberId' = replace(e.TFN,' ','') , 'tns:AustralianBusinessNumberId' = Replace(eps.RemunerationABN,' ','') , 'tns:EmploymentPayrollNumberId' = ISNULL(e.PayrollReference,e.EmployeeID) --FROM @EmpPaymentsSUM eps_ABN --WHERE eps_ABN.RemunerationABN IS NOT NULL --AND eps_ABN.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Identifiers'), TYPE ) ,( SELECT 'tns:FamilyNameT' = e.LastName ,'tns:GivenNameT' = e.FirstName ,'tns:OtherGivenNameT' = e.Title FOR XML PATH ('tns:PersonNameDetails'), TYPE ) -- DOB ,( SELECT 'tns:BirthDm' = DAY(e.DateOfBirth) ,'tns:BirthM' = MONTH(e.DateOfBirth) ,'tns:BirthY' = YEAR(e.DateOfBirth) FOR XML PATH ('tns:PersonDemographicDetails'), TYPE ) -- Address ,( SELECT 'tns:Line1T' = ad.AddressLine1 ,'tns:Line2T' = ad.AddressLine2 ,'tns:LocalityNameT' = ad.City ,'tns:StateOrTerritoryC' = ad.State -- matches list? ,'tns:PostcodeT' = ad.PostCode -- if aust is number? ,'tns:CountryC' = eps.EmployeeCountryCode -- if not aust matches list FOR XML PATH ('tns:AddressDetails'), TYPE ) -- contact , ( SELECT 'tns:ElectronicMailAddressT' = eps.EmployeeEmail ,'tns:TelephoneMinimalN' = convert(varchar(16),eps.EmployeePhone) FOR XML PATH ('tns:ElectronicContact'), TYPE ) ,( SELECT 'tns:EmploymentStartD' = CASE WHEN PrevLodgementINBDate IS NOT NULL Or PrevLodgementINBDate IS NOT NULL THEN CONVERT(char(10),eps.EmployeeCommenceDate,126) ELSE NULL END ,'tns:EmploymentEndD' = CONVERT(char(10),eps.EmployeeDateEnd,126) FOR XML PATH ('tns:EmployerConditions'), TYPE ) ,( SELECT ( SELECT 'tns:StartD' = CONVERT(char(10),@PayPeriodDateStart,126) ,'tns:EndD' = CONVERT(char(10),@PayPeriodDateEnd,126) ,'tns:PayrollEventFinalI' = LOWER(@IsFinal) -- 'true or false' --CASE WHEN b.IsFinal = 1 THEN 'true' ELSE 'false' END FOR XML PATH ('tns:PayrollPeriod'), TYPE ) , CASE WHEN ( ISNULL(eps.RemunerationIncomeType_LookupID,0) = 0 OR eps.RemunerationIncomeType_LookupID = 109201 ) THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:CommunityDevelopmentEmploymentProjectA' = CONVERT(decimal(18,2),eps.CommunityDevelopmentEmploymentProject,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) ,'tns:ExemptForeignEmploymentIncomeA' = CONVERT(decimal(18,2),eps.ExemptForeignEmploymentIncome,0) FOR XML PATH ('tns:IndividualNonBusiness'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:VoluntaryAgreement'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109203 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:LabourHireArrangementPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109204 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:SpecifiedByRegulationPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109205 THEN ( SELECT 'tns:A' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:ForeignWithholdingA' = CONVERT(decimal(18,2),eps.ForeignWithholding,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:JointPetroleumDevelopmentAreaPayment'), TYPE ) ELSE '' END , CASE WHEN eps.RemunerationIncomeType_LookupID = 109206 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FROM @EmpData edfw WHERE edfw.RemunerationIncomeType = 109206 AND edfw.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:WorkingHolidayMaker'), TYPE ) ELSE '' END , CASE WHEN ISNULL(eps.TaxFlags,0) & 8 = 8 THEN ( SELECT 'tns:GrossA' = CONVERT(decimal(18,2),eps.GrossPayment,0) ,'tns:ForeignWithholdingA' = CONVERT(decimal(18,2),eps.ForeignWithholding,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),eps.TAX,0) FOR XML PATH ('tns:PaymentToForeignResident'), TYPE ) ELSE '' END , ( SELECT ( SELECT 'tns:TypeC' = REPLACE(etp.ETPCode,' ','') ,'tns:PaymentRecordPaymentEffectiveD' = CONVERT(char(10),eps.EntryDate,126) ,'tns:SuperannuationTaxFreeComponentA' = CONVERT(decimal(18,2),etp.ETPNonTaxable,0) ,'tns:SuperannuationEmploymentTerminationTaxableComponentTotalA' = CONVERT(decimal(18,2),etp.ETPTaxable,0) ,'tns:TaxWithheldA' = CONVERT(decimal(18,2),etp.ETPTax,0) FROM @ETP_Results etp WHERE etp.ETPNonTaxable + etp.ETPTaxable <> 0 AND etp.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:EmploymentTerminationPayment'), TYPE ) FOR XML PATH ('tns:EmploymentTerminationPaymentCollection'), TYPE ) , ( SELECT ( SELECT 'tns:LumpSumAC' = lumpA.LumpSumType ,'tns:LumpSumAA' = CONVERT(decimal(18,2),lumpA.LumpSumAmount,0) FROM @LUMPA lumpA WHERE lumpA.EmployeeID = eps.EmployeeID AND lumpA.LumpSumType = 'R' FOR XML PATH ('tns:LumpSumPaymentA'), TYPE ) , 'tns:LumpSumBA' = CONVERT(decimal(18,2),lump.LumpSumB,0) ,'tns:LumpSumDA' = CONVERT(decimal(18,2),lump.LumpSumD,0) ,'tns:LumpSumEA' = CONVERT(decimal(18,2),lump.LumpSumE,0) FROM @EmpPaymentsSUM lump WHERE lump.EmployeeID = eps.EmployeeID AND ( lump.LumpSumB <> 0 OR lump.LumpSumD <> 0 OR lump.LumpSumE <> 0 ) FOR XML PATH ('tns:UnusedAnnualOrLongServiceLeavePayment'), TYPE ) , ( SELECT ( SELECT 'tns:TypeC' = AllowType -- other allowance account description reqd if "Other" ,'tns:OtherAllowanceTypeDe' = CASE WHEN AllowType = 'Other' THEN ISNULL(allow.AllowTypeOtherDesc, 'other deductible expenses') ELSE NULL END ,'tns:IndividualNonBusinessEmploymentAllowancesA' = CONVERT(decimal(18,2),allow.AllowAmount,0) FROM @Allows allow WHERE allow.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Allowance'), TYPE ) FOR XML PATH ('tns:AllowanceCollection'), TYPE ) , ( SELECT ( SELECT 'tns:TypeC' = DeductionType ,'tns:A' = CONVERT(decimal(18,2),ded.DeductionAmount,0) FROM @DEDUCTIONS ded WHERE ded.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:Deduction'), TYPE ) FOR XML PATH ('tns:DeductionCollection'), TYPE ) , --CASE --WHEN -- eps.RemunerationIncomeType_LookupID = 109202 -- AND ISNULL(e.TFN,'') = '' -- THEN NULL --ELSE ( SELECT 'tns:EmployerContributionsSuperannuationGuaranteeA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN 0 ELSE CONVERT(decimal(18,2),eps.SuperSGC,0) END ,'tns:OrdinaryTimeEarningsA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN 0 ELSE CONVERT(decimal(18,2),eps.Wages - eps.ExcludeFromOTE,0) END ,'tns:EmployerReportableA' = CASE WHEN eps.RemunerationIncomeType_LookupID = 109202 AND ISNULL(e.TFN,'') = '' THEN NULL ELSE CONVERT(decimal(18,2),eps.ReportableSuper,0) END FOR XML PATH ('tns:SuperannuationContribution'), TYPE ) --END , ( SELECT 'tns:TaxableIncomeFringeBenefitsReportableA' = CONVERT(decimal(18,2),eps.FBTTaxable,0) ,'tns:ExemptIncomeFringeBenefitsReportableA' = CONVERT(decimal(18,2),eps.FBTNonTaxable,0) FOR XML PATH ('tns:IncomeFringeBenefitsReportable'), TYPE ) FOR XML PATH ('tns:RemunerationIncomeTaxPayAsYouGoWithholding'), TYPE ) , -- Onboarding CASE WHEN eps.RemunerationABN IS NOT NULL AND e.TFN IS NULL THEN '' ELSE ( SELECT -- TFND ( SELECT 'tns:PaymentArrangementTerminationC' = 'T' -- | ,'tns:ResidencyTaxPurposesPersonStatusC' = -- Resident|Non-Resident|Working Holiday Maker CASE WHEN ed.RemunerationIncomeType = 109206 THEN ed.RemunerationIncomeType_DESC --'Working Holiday Maker' WHEN ISNULL(eps.TaxFlags,0) & 8 = 8 THEN 'Non-Resident' ELSE 'Resident' END ,'tns:PaymentArrangementPaymentBasisC' = CASE -- F|P|C|L|S (F = Full time payees; P = Part time payees; C = Casual payees; L = Labour hire payees; S = Pension or Annuity payees) WHEN epsTFND.WagesPeriod_LookupID = 10600 THEN 'P' -- W1 WHEN epsTFND.WagesPeriod_LookupID = 10601 THEN 'P' -- W2 WHEN epsTFND.WagesPeriod_LookupID = 10602 THEN 'P' -- W3 WHEN epsTFND.WagesPeriod_LookupID = 10603 THEN 'P' -- W4 WHEN epsTFND.WagesPeriod_LookupID = 10604 THEN 'F' -- W5 WHEN epsTFND.WagesPeriod_LookupID = 10605 THEN 'F' -- W6 WHEN epsTFND.WagesPeriod_LookupID = 10606 THEN 'F' -- W7 WHEN epsTFND.WagesPeriod_LookupID = 10607 THEN 'F' -- F WHEN epsTFND.WagesPeriod_LookupID = 10609 THEN 'C' -- H WHEN epsTFND.WagesPeriod_LookupID = 10608 THEN 'F' -- M ELSE 'F' END ,'tns:TaxOffsetClaimTaxFreeThresholdI' = CASE WHEN ( (ISNULL(eps.TaxFlags,0) & 8 = 8) OR (ISNULL(epsTFND.TaxFlags,0) & 4 = 4) ) THEN 'false' ELSE 'true' END -- The tax-free threshold is the amount of income that can be earned each year that is not taxed ,'tns:IncomeTaxPayAsYouGoWithholdingStudyAndTrainingLoanRepaymentI' = CASE WHEN NOT ISNULL(ed.StudyLoan,109501 ) = 109501 THEN 'true' ELSE 'false' END -- StudyAndTrainingLoanRepayment.Indicator Higher Education Loan Program (HELP) loan, Student Start-up Loan (SSL), ABSTUDY Student Start-up Loan (ABSTUDY SSL) or Trade Support Loan (TSL) ,'tns:StudentLoanStudentFinancialSupplementSchemeI' = CASE WHEN NOT ISNULL(ed.StudentFinancialScheme,109600 ) = 109600 THEN 'true' ELSE 'false' END FROM @EmpPaymentsSUM epsTFND LEFT JOIN @EmpData ed ON ed.EmployeeID = epsTFND.EmployeeID WHERE epsTFND.EmployeeID = eps.EmployeeID FOR XML PATH ('tns:TFND'), TYPE ) , CASE WHEN eps.DeclarationSignatureDate IS NULL THEN NULL ELSE ( SELECT --'tns:SignatoryIdentifierT' = 't' 'tns:StatementAcceptedI' = CASE WHEN ISNULL(CONVERT(char(10),eps.DeclarationSignatureDate,126) ,'') = '' THEN 'false' ELSE 'true' END ,'tns:SignatureD' = CONVERT(char(10),eps.DeclarationSignatureDate,126) FOR XML PATH ('tns:Declaration'), TYPE ) END FOR XML PATH ('tns:Onboarding'), TYPE ) END FROM @EmpPaymentsSUM eps INNER JOIN Employee e ON eps.EmployeeID = e.EmployeeID INNER JOIN dbo.#Data #d ON #d.ID = e.EmployeeID INNER JOIN @EmployeeAddress ad ON ad.AddressID = eps.EmployeeAddressID AND ad.EmployeeID = eps.EmployeeID LEFT OUTER JOIN @ABN_WPN abnwpn ON abnwpn.AdminID = e.AdminID WHERE epsh.EmployeeID = eps.EmployeeID --AND ((@ETP = 0) OR ((eps.ETPTaxable + eps.ETPNonTaxable + eps.ETPTax) > 0)) ORDER BY e.LastName, e.FirstName, e.Title, EntryDate FOR XML RAW ('tns:Payee'), TYPE ) FOR XML RAW ('tns:PAYEVNTEMP'), TYPE ) FROM @EmpPaymentsSUM epsh -- select * from @EmpPaymentsSUM IF @Test = 1 BEGIN UPDATE @XMLResults SET XML = ' 151994243 50236 Martin Mark 2 10 1990 34 wanderer street Mt Helen VIC 3350 au markm@gmail.com 2018-04-25 2018-05-02 false 15000 3000 15000 Working Holiday Maker F false false false true 2018-05-03 ' END SELECT EmployeeID = EmployeeID ,XML = Convert(VARCHAR(MAX),XML) ,XML_Native = XML FROM @XMLResults END END SET NOCOUNT OFF --SET ANSI_WARNINGS ON GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO GRANT EXECUTE ON dbo.repsp_EmployeePaymentSummary TO [insol2_users] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[repsp_STP]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[repsp_STP] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[repsp_STP] @AdminID Int ,@BatchID Int ,@ForValidation Bit = 0 ,@InputXML XML = Null ,@UserID Int = Null /* Exec dbo.repsp_STP @AdminID=9329, @BatchID=13139, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ AS SET NOCOUNT ON DECLARE @ABN Varchar(20) DECLARE @CAC Varchar(10) DECLARE @ISINT Varchar(5) DECLARE @RAN Varchar(20) DECLARE @TESTCASEID Varchar(30) DECLARE @IsConfTest Bit = 0 DECLARE @INTABN Varchar(20) DECLARE @PAYDATE Date DECLARE @PPSTARTDATE Date DECLARE @PPENDDATE Date DECLARE @ISFINAL Varchar(5) DECLARE @CatchAll Bit = 0 DECLARE @BatchTypeID Int DECLARE @AdminTypeID Int DECLARE @UserName Varchar(150) DECLARE @UserEmail Varchar(200) DECLARE @UserPhone Varchar(200) DECLARE @UserLogon Varchar(200) DECLARE @FullYearBatches TABLE ( BatchId int ,DateTo date ,DateFrom date ,TotalGross Money ,TotalPayg Money ,CAC varchar(10) ,AdminTypeID int ) DECLARE @TransLastDate Date DECLARE @TransLastDateChar Varchar(10) --Parse the inputs SELECT @TESTCASEID = r.c.value('TESTCASEID[1]/@Value', 'Varchar(30)') ,@ABN = r.c.value('ABN[1]/@Value', 'Varchar(20)') ,@CAC = r.c.value('CAC[1]/@Value', 'Varchar(10)') ,@ISINT = r.c.value('ISINT[1]/@Value', 'Varchar(5)') ,@RAN = r.c.value('RAN[1]/@Value', 'Varchar(20)') ,@INTABN = r.c.value('INTABN[1]/@Value', 'Varchar(20)') ,@PAYDATE = r.c.value('PAYDATE[1]/@Value', 'Date') ,@PPSTARTDATE = r.c.value('PPSTARTDATE[1]/@Value', 'Date') ,@PPENDDATE = r.c.value('PPENDDATE[1]/@Value', 'Date') ,@ISFINAL = r.c.value('ISFINAL[1]/@Value', 'Varchar(5)') FROM @InputXML.nodes('Inputs') as r(c) If CHARINDEX('CONF-ATO-PAYEVNT', @TESTCASEID) > 0 SET @IsConfTest = 1 SELECT @CAC = substring(@CAC, patindex('%[^0]%',@CAC), 10) SELECT @AdminTypeID = (SELECT TOP 1 AdminTypeID FROM CustomProperty cp INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 AND substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = @CAC AND cp.AdminTypeID IS NOT NULL ) --substring(@CAC, patindex('%[^0]%',@CAC), 10)) IF @UserID = 1 SELECT @UserEmail = 'support@exalt.com.au' ,@UserPhone = '0893823920' ELSE BEGIN SELECT @UserEmail = Number FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 4 SELECT @UserPhone = Replace ( Replace ( Replace ( Replace ( Replace ( Replace ( n.Number ,' ','') ,'-','') ,'(','') ,')','') ,'+61','0') ,'+91','0') FROM dbo.Number n Inner Join dbo.User_Number un ON un.NumberID = n.NumberID WHERE un.UserID = @UserID AND n.NumberTypeID = 1 END --Data validation for STP submission /* Exec dbo.repsp_STP @AdminID=11607, @BatchID=151932, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ IF @ForValidation = 1 BEGIN DECLARE @Emp TABLE ( EmployeeID int ,EmployeeAddressID int ,EmployeeState Varchar(46) ,EmployeeCity Varchar(100) ,EmployeePostCode Varchar(100) ,EmployeePostCodeIsLessthan10000 Varchar(100) ,EmployeeCountry Varchar(100) ,EmployeeCountryCode Varchar(10) ,EmpStateIsMatched int ,EmployeeTFN nVarchar(1000) ,TFNIsValid bit ) DECLARE @EmpData TABLE ( EmployeeID int ,DeclarationDate date ,EmployeeABN nvarchar(100) ) DECLARE @ValErrors TABLE ( ValidationError nvarchar(1000) ,ValidationLevel Int ,ObjectName nvarchar(100) ) -- POP TEMP DATA -- @BatchTypeID SELECT @BatchTypeID = BatchType_LookupID FROM dbo.Batch WHERE BatchID = @BatchID -- Employees IF @BatchTypeID = 900009 --Full year submit BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL AND se.EntryDate >= @PPSTARTDATE AND se.EntryDate <= @PPENDDATE END ELSE BEGIN INSERT INTO @Emp (EmployeeID) SELECT DISTINCT se.EmployeeID FROM dbo.Subentry se INNER JOIN dbo.Entry e ON e.EntryID = se.EntryID WHERE e.BatchID = @BatchID AND se.ContextID = @AdminID AND se.EmployeeID IS NOT NULL IF NOT EXISTs (Select * FROM @Emp) SELECT @CatchAll = 1 END -- Employee Address UPDATE @Emp SET EmployeeAddressID = emp.AddressID FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeId = emp.EmployeeId WHERE emp.AddressID IS NOT NULL UPDATE @Emp SET EmployeeAddressID = c.AddressID FROM @Emp e INNER JOIN Creditor c ON e.EmployeeId = c.EmployeeId WHERE e.EmployeeAddressID IS NULL UPDATE @Emp SET EmployeeState = convert(varchar(50),ad.State) ,EmployeeCity = convert(varchar(46),ad.City) ,EmployeePostCode = convert(varchar(50),ad.PostCode) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL UPDATE @Emp SET EmpStateIsMatched = 1 FROM @Emp e INNER JOIN dbo.[lookup] lu ON lu.Data = e.EmployeeState WHERE lu.LookupListId = 109000 UPDATE @Emp SET EmployeeCountry = convert(varchar(50),ad.Country) FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE e.EmployeeAddressID IS NOT NULL AND ad.Country Is Not Null Update @Emp SET EmployeeCountry = Null WHERE Len(Rtrim(LTrim(EmployeeCountry))) = 0 Update @Emp SET EmployeeCountry = Null WHERE Rtrim(LTrim(EmployeeCountry)) = 'Australia' UPDATE @Emp SET EmployeeCountryCode = lu.Data FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId INNER JOIN Lookup lu -- ON lu.Description COLLATE SQL_Latin1_General_CP1_CI_AS = ad.Country COLLATE SQL_Latin1_General_CP1_CI_AS -- COLLATE ON lu.Description = ad.Country -- COLLATE AND lu.LookupListID = 121000 WHERE e.EmployeeAddressID IS NOT NULL AND e.EmployeeCountry Is Not Null /* Exec dbo.repsp_STP @AdminID=9329, @BatchID=13139, @ForValidation=1, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 Exec dbo.repsp_STP @AdminID=9329, @BatchID=13139, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ --Select * --From @Emp UPDATE @Emp SET EmployeePostCodeIsLessthan10000 = 1 FROM @Emp e INNER JOIN dbo.[Address] ad ON e.EmployeeAddressID = ad.AddressId WHERE ISNUMERIC(EmployeePostCode) = 1 AND CONVERT(int,EmployeePostCode) BETWEEN 200 AND 9999 --AND CONVERT(int,EmployeePostCode) BETWEEN 1000 AND 9999 -- Employee data INSERT INTO @EmpData ( EmployeeID ,DeclarationDate ,EmployeeABN ) SELECT EmployeeID = ed.EmployeeID ,DeclarationDate = ISNULL(ed.Data.value('(/Data/Tax/Declaration/DeclarationDate/@Value)[1]', 'datetime'),'') ,EmployeeABN = ISNULL(ed.Data.value('(/Data/Tax/Employment/RemunerationABN/@Value)[1]', 'varchar(100)') ,'') FROM @Emp e INNER JOIN dbo.EmployeeData ed ON e.EmployeeID = ed.EmployeeID -- FUll year submissions IF @BatchTypeID = 900009 BEGIN INSERT INTO @FullYearBatches ( BatchId ,DateTo ,DateFrom ,TotalGross ,TotalPayg ,CAC ) SELECT BatchId = b.BatchId ,DateTo = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateTo)[1]', 'datetime'),'') ,DateFrom = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@DateFrom)[1]', 'datetime'),'') ,TotalGross = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1]', 'Money'),'') ,TotalPayg = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1]', 'Money'),'') ,CAC = ISNULL(b.Data.value('(/Items/PayrollData[1]/Dates[1]/@CAC)[1]', 'Varchar(10)'),'') FROM dbo.Batch b INNER JOIN dbo.Account acc ON acc.AccountID = b.AccountID LEFT OUTER JOIN dbo.Transfer t ON t.BatchID = b.BatchID WHERE acc.AdminID = @AdminID AND b.BatchType_LookupID = 900009 AND NOT b.BatchID = @BatchID AND IsNull(t.Flags,0) & 4096 = 0 Update @FullYearBatches SET AdminTypeID = cp.AdminTypeID FROM @FullYearBatches fyb INNER JOIN dbo.CustomProperty cp ON substring(PropertyValue, patindex('%[^0]%',PropertyValue), 10) = substring(fyb.CAC , patindex('%[^0]%',fyb.CAC ), 10) INNER JOIN Admin_CustomProperty acp ON acp.CustomPropertyID = cp.CustomPropertyID WHERE acp.AdminID = @AdminID AND cp.CustomPropertyTypeID = 610 END -- TFN UPDATE @Emp SET EmployeeTFN = CASE WHEN dbo.uFnIsTaxFileNumberValid(emp.TFN) = 1 THEN Replace(emp.TFN, ' ','') ELSE CASE WHEN emp.TFN IS NULL THEN '*** TFN NOT entered' WHEN emp.TFN = '000000000' THEN '*** 000000000 – payee has not completed a TFN declaration' WHEN emp.TFN = '111111111' THEN '*** 111111111 – payee has applied or enquired about a TFN with the ATO' WHEN emp.TFN = '333333333' THEN '*** 333333333 – payee is under the age of eighteen and earns less than the threshhold' WHEN emp.TFN = '444444444' THEN '*** 444444444 - payee is a recipient of a social security or service pension or benefit' WHEN emp.TFN = '987654321' THEN '*** 987654321 - enter when a payee quoted TFN with alpha chars' WHEN NOT (ISNUMERIC(emp.TFN) = 1) THEN '*** TFN ' + emp.TFN + ' NOT Numeric' WHEN NOT LEN(Replace(emp.TFN, ' ','')) = 9 THEN '*** TFN ' + emp.TFN + ' NOT 9 digit number' WHEN NOT dbo.UfnIsTaxFileNumberValid(emp.TFN) = 1 THEN '*** TFN ' + emp.TFN + ' DOESN''T pass algorithm' ELSE Replace(emp.TFN, ' ','') END END ,TFNIsValid = dbo.uFnIsTaxFileNumberValid( Replace(emp.TFN, ' ','')) FROM @Emp e INNER JOIN Employee emp ON e.EmployeeId = emp.EmployeeId -- REPORT VALIDATION ERRORS -- *************************************************************** -- Employee Declaration Date /* IF NOT Exists(SELECT * FROM dbo.ApplicationSetting WHERE SettingID = 1000707 and Setting = '1') INSERT INTO @ValErrors SELECT ValidationError = 'Single Touch Payroll (STP) needs to be enabled for you. Please contact support on T 1800 571 974 or raise a support ticket and our support agents will contact you with instructions.' ,ValidationLevel = 1 ,ObjectName = '' */ IF Exists(SELECT * FROM @FullYearBatches) INSERT INTO @ValErrors SELECT ValidationError = 'You have previously submitted a FULL YEAR Batch (' + convert(varchar(30),BatchId) + ') within the same Date Range, ensure the employee Wages and PAYG totals have not been submitted previously or change your date range to exclude previous submissions' ,ValidationLevel = 0 ,ObjectName = '' FROM @FullYearBatches fyb WHERE fyb.DateFrom < @PPENDDATE AND @AdminTypeID = fyb.AdminTypeID -- Batch dates If @PPSTARTDATE > @PPENDDATE INSERT INTO @ValErrors SELECT ValidationError = 'The Pay period Start date (' + convert(varchar(10),@PPSTARTDATE,103) + ') is after the Pay period End date (' + convert(varchar(10),@PPENDDATE,103) + ')' ,ValidationLevel = 1 ,ObjectName = '' -- TFN INSERT INTO @ValErrors SELECT ValidationError = 'TFN for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID ' + e.EmployeeTFN ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 0 AND NOT ISNULL(emp.TFN,'') in ('000000000','111111111','333333333','444444444','987654321') INSERT INTO @ValErrors SELECT ValidationError = 'TFN ' + e.EmployeeTFN + ' for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' INVALID' ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID AND NOT ISNULL(ed.EmployeeABN,'') = '' WHERE ed.EmployeeID IS NULL AND e.TFNIsValid = 1 AND ISNULL(emp.TFN,'') in ('000000000') -- Employer ABN IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0) INSERT INTO @ValErrors SELECT ValidationError = 'The Employee ABN does not pass the ABN algorithm for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID INNER JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE [dbo].[uFnIsABNValid](ed.EmployeeABN) = 0 AND NOT ed.EmployeeABN = '' -- Employee State IF Exists(SELECT * FROM @Emp e WHERE EmpStateIsMatched IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'STATE unmatched to known value AAT|ACT|NSW|NT|QLD|SA|TAS|VIC|WA for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE e.EmpStateIsMatched IS NULL AND e.EmployeeCountryCode IS NULL -- Employee City BLANK IF Exists(SELECT * FROM @Emp e WHERE ISNULL(e.EmployeeCity,'') = '') INSERT INTO @ValErrors SELECT ValidationError = 'CITY Cannot be left blank for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(e.EmployeeCity,'') = '' -- post code IF Exists(SELECT * FROM @Emp e WHERE IsNUMEric(EmployeePostCode) = 1) INSERT INTO @ValErrors SELECT ValidationError = 'The post code is not a four digit numeric value for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE ISNULL(EmployeePostCodeIsLessthan10000,0) <> 1 IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountryCode IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country code value ' + '''' + EmployeeCountryCode + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NOT NULL IF Exists(SELECT * FROM @Emp e WHERE EmployeeCountry IS NOT NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The employee has a country value ' + '''' + EmployeeCountry + '''' + ' for employee: ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') + ' but we can''t find the country on the approved list' ,ValidationLevel = 1 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID WHERE EmployeeCountryCode IS NULL AND EmployeeCountry IS NOT NULL -- Valid ABN? IF (SELECT [dbo].[uFnIsABNValid](@ABN)) = 0 INSERT INTO @ValErrors SELECT ValidationError = 'The job ABN (' + @ABN + ') does not conform with the expected validation' ,ValidationLevel = 1 ,ObjectName = '' -- Current financial year IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) < dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- date range of the period not in the paydate period IF ([dbo].[uFnFinancialYearEndDate](@PAYDATE) <> dbo.[uFnFinancialYearEndDate](getdate())) INSERT INTO @ValErrors SELECT ValidationError = 'The pay date (' + convert(Varchar(12),@PAYDATE,103) + ') should only be submitted for the current financial year. The underlying transaction dates need to match the payment date.' ,ValidationLevel = 0 ,ObjectName = '' -- Phone IF (@UserPhone IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs a PHONE number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- Email IF (@UserEmail IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'The current user needs an EMAIL number type entered in the user record' ,ValidationLevel = 0 ,ObjectName = '' -- tax declaration date IF Exists(SELECT * FROM @Emp e LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL) INSERT INTO @ValErrors SELECT ValidationError = 'Please enter a tax declaration date for employee ' + emp.LastName + ISNULL(', ' + emp.FirstName,'') ,ValidationLevel = 0 ,ObjectName = 'EMPLOYEE=' + CONVERT(varchar(30),e.EmployeeID) FROM @Emp e INNER JOIN dbo.Employee emp ON e.EmployeeID = emp.EmployeeID LEFT JOIN @EmpData ed ON ed.EmployeeID = e.EmployeeID WHERE ed.EmployeeID IS NULL -- Results -- ********************************************************** -- 'EMPLOYEE=27623' --0 green, 1 red, 4 amber If @IsConfTest = 0 SELECT * from @ValErrors ELSE SELECT * from @ValErrors WHERE 0 = 1 END ELSE --Creating the output files BEGIN DECLARE @IsFFR varchar(5) DECLARE @VntEmpCount Int DECLARE @TransID Varchar(200) DECLARE @Name Varchar(1000) DECLARE @Address nVarchar(500) DECLARE @Address1 nVarchar(500) DECLARE @Address2 nVarchar(500) DECLARE @City nVarchar(50) DECLARE @State nVarchar(50) DECLARE @PCode nVarchar(50) DECLARE @BMSUID Varchar(50) DECLARE @EvntEmpCount Int = 0 DECLARE @TotalTax Money = 0 DECLARE @TotalPaid Money = 0 DECLARE @AccDate Varchar(10) = Convert(varchar(10), GetDate(), 20) DECLARE @BatchXML XML DECLARE @TS varchar(50) = CONVERT(VARCHAR(50), CAST(GETUTCDATE() AS DATETIMEOFFSET(0)), 127) SELECT @UserName = Name ,@UserLogon = LogonName From dbo.[User] WHERE UserID = @UserID SELECT @Name = dbo.uFnXMLEncode(Name) FROM dbo.Admin WHERE AdminID = @AdminID --Get the FFR indicator --And the number of PAYEVNTEMP submissssions in the batch SELECT @IsFFR = CASE WHEN IsNull(Flags,0) & 2048 = 2048 THEN 'true' ELSE 'false' END ,@VntEmpCount= Processed FROM dbo.Transfer WHERE BatchID = @BatchID --Update the acceptance data into the batch SELECT @BatchXML = Data FROM dbo.Batch WHERE BatchID = @BatchID SELECT @Address = Address ,@City = City ,@State = State ,@PCode = PostCode FROM dbo.Address a INNER JOIN dbo.Admin_Address aa ON aa.AddressID = a.AddressID WHERE aa.AdminID = @AdminID AND a.IsMailing = 1 SELECT @Address1 = AddressLine1 ,@Address2 = AddressLine2 FROM dbo.tblfn_SplitAddressBody(@Address) SELECT @BMSUID = Setting FROM AdminSetting WHERE SettingID = 30010 AND AdminID = @AdminID If @BMSUID Is Null BEGIN SET @BMSUID = Convert(varchar(50), NewID()) INSERT INTO dbo.AdminSetting (AdminID, SettingID, Setting, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy, TS) SELECT @AdminID, 30010, @BMSUID, GetDate(), @UserLogon, GetDate(), @UserLogon, NewID() END SET @BMSUID = @BMSUID + '-' + @ABN + '-' + @CAC --Transaction identifier SET @TransID = lTrim(RTrim(@ABN)) + '-' + lTrim(RTrim(Str(@BatchID))) DECLARE @Out Table ( ID int ,EmployeeID int ,FileName nvarchar(max) ,FileXML nvarchar(max) ,XML_Native XML ) --Get the PAYEVENTEMP XML INSERT INTO @Out (EmployeeID, FileXML, XML_Native) EXEC dbo.repsp_EmployeePaymentSummary @AdminID = @AdminID ,@BatchID = @BatchID ,@DateFrom = @PAYDATE ,@DateTo = @PAYDATE ,@AdminTypeID = @AdminTypeID ,@PayPeriodDateStart= @PPSTARTDATE ,@PayPeriodDateEND = @PPENDDATE ,@ElectronicOutput = 1 ,@IsFinal = @IsFinal ,@TotalTax = @TotalTax OUTPUT ,@TotalPaid = @TotalPaid OUTPUT ,@TransLastDate = @TransLastDate OUTPUT SELECT @TransLastDateChar = Convert(varchar(10), @TransLastDate, 20) If Not @BatchXML Is Null BEGIN SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationUser)[1] with (sql:variable("@UserLogon"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DeclarationDate)[1] with (sql:variable("@AccDate"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@StatementAccepted)[1] with ("true")') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@GrossPayments)[1] with (sql:variable("@TotalPaid"))') SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@PAYGWithheld)[1] with (sql:variable("@TotalTax"))') IF (@BatchTypeID = 900009 AND NOT @TransLastDate IS NULL) SET @BatchXML.modify('replace value of (/Items/PayrollData[1]/Dates[1]/@DateTo)[1] with (sql:variable("@TransLastDateChar"))') UPDATE dbo.Batch SET Data = @BatchXML ,UpdatedDate = GetDate() ,UpdatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID UPDATE dbo.Transfer SET TransferDate = GETUTCDATE() ,CreatedBy = @UserLogon ,TS = NewID() WHERE BatchID = @BatchID END Select @TotalTax = ISNULL(@TotalTax,0) Select @TotalPaid = ISNULL(@TotalPaid,0) -- UPDATE ID Declare @ID_Count int Set @ID_Count = 0 UPDATE @Out SET ID = @ID_Count, @ID_Count = @ID_Count + 1 WHERE ISNULL(ID,1) > 0 UPDATE @Out SET Filename = 'PAYEVNTEMP' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) + '-' + Ltrim(RTrim(EmployeeID)) + '-~' FROM @Out WHERE ID > 0 UPDATE @Out SET FileName = REPLACE(FileName, '~', REPLICATE('0',5-LEN(RTRIM(ID))) + RTRIM(ID)) WHERE ID > 0 INSERT INTO @Out (ID,FileName, FileXML) SELECT 0 ,'PAYEVNT' + '-' + @ABN + '-' + Ltrim(RTrim(@BatchID)) ,' ' + @BMSUID + ' ' + REPLACE(@ABN, ' ','') + ' ' + CAST(CAST(@CAC AS INTEGER) AS VARCHAR(5)) + ' ' + @Name + ' ' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + @Address1 + '' + CASE WHEN @Address2 Is Not Null THEN '' + @Address2 + '' ELSE '' END + '' + IsNull(@City, '') + ' ' + IsNull(@State, '') + ' ' + IsNull(@PCode, '') + ' ' + Convert(varchar(10), @PAYDATE, 20) + ' ' + Ltrim(RTrim(Str(@VntEmpCount))) + ' ' + @TS + ' ' + @TransID + ' ' + @IsFFR + ' ' + Convert(varchar(20), @TotalTax) + ' ' + Convert(varchar(20), @TotalPaid) + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' + CASE WHEN @ISINT = 'true' THEN '' + @INTABN + '' + CASE WHEN LEN(@RAN) > 0 THEN '' + @RAN + '' ELSE '' END + '' + IsNull(@UserName, '') + ' ' + IsNull(@UserEmail, '') + ' ' + IsNull(@UserPhone, '') + ' ' + IsNull(@UserLogon, '') + ' ' + @AccDate + ' true ' ELSE '' END + '' Select o.*, e.EmployeeName, Convert(XML, FileXML) from @Out o Left Outer Join dbo.repvw_Employee e On e.EmployeeID = o.EmployeeID ORDER BY ID, o.EmployeeID END /* Exec dbo.repsp_STP @AdminID=7581, @BatchID=22675, @InputXML='Test submitCONF-ATO-PAYEVNT-BULK-001CONF-ATO-PAYEVNT-BULK-002CONF-ATO-PAYEVNT-BULK-003CONF-ATO-PAYEVNT-BULK-004CONF-ATO-PAYEVNT-BULK-005CONF-ATO-PAYEVNT-BULK-006CONF-ATO-PAYEVNT-BULK-007CONF-ATO-PAYEVNT-BULK-008CONF-ATO-PAYEVNT-BULK-009CONF-ATO-PAYEVNT-BULK-010CONF-ATO-PAYEVNT-BULK-011CONF-ATO-PAYEVNT-BULK-012CONF-ATO-PAYEVNT-BULK-013CONF-ATO-PAYEVNT-BULK-014CONF-ATO-PAYEVNT-BULK-015CONF-ATO-PAYEVNT-BULK-016CONF-ATO-PAYEVNT-BULK-017Choose True or False. If you choose True you must provide your Intermediary ABN and/or Registered Agent Number (if applicable)FalseTrueEnter your ABN if you are lodging as intermediaryEnter your registered agent number if you are lodging as intermediary and are a registered agentEnter the date the payment was madeEnter the start date of the payroll periodEnter the end date of the payroll periodIf this is the final payroll event for the financial year for the employees being paid select True otherwise choose FalseFalseTrue ', @UserID=1 */ SET NOCOUNT OFF RETURN 0 GO GRANT EXECUTE ON [dbo].[repsp_STP] TO [insol2_users] GO Update Account Set Flags = IsNull(Flags,0) + 8388608 Where AccountUID In( '75763EDC-F83F-4A92-A0A6-0C7D5D3CDDA5' ,'8E3FB8E0-F7EF-4493-834F-141030A9A40C' ,'B6D9FEA6-CDF4-4650-B12B-5973737EE276' ,'498A5A6E-4DEB-44FA-BA0C-9B1108639D32' ,'1701AE26-9F0F-4A87-903D-AA86A2E853FE' ,'626CE7C0-818C-4D9F-B441-F8B5D0CADFBD' ) AND IsNull(Flags,0) & 8388608 = 0 Update AccountTemplate Set Flags = IsNull(Flags,0) + 8388608 Where AccountUID In( '75763EDC-F83F-4A92-A0A6-0C7D5D3CDDA5' ,'8E3FB8E0-F7EF-4493-834F-141030A9A40C' ,'B6D9FEA6-CDF4-4650-B12B-5973737EE276' ,'498A5A6E-4DEB-44FA-BA0C-9B1108639D32' ,'1701AE26-9F0F-4A87-903D-AA86A2E853FE' ,'626CE7C0-818C-4D9F-B441-F8B5D0CADFBD' ) AND IsNull(Flags,0) & 8388608 = 0 Update Account Set Flags = Flags - 8388608 Where AccountUID = 'DA63EF13-7FE7-4243-AB72-67FD62614BD4' AND IsNull(Flags,0) & 8388608 = 8388608 Update AccountTemplate Set Flags = Flags - 8388608 Where AccountUID = 'DA63EF13-7FE7-4243-AB72-67FD62614BD4' AND IsNull(Flags,0) & 8388608 = 8388608 Update DataCache Set CacheUID = NewID() Go