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