/* Get Goals with their GoalChanges */ USE IncentiveManager; DECLARE @DEPARTMENT_ID INT = 63; DECLARE @START_DATE DATETIME2 = '2022-01-01 00:00:00.0000000'; /* Goals are joined to the goal change table as seen below in the sample query Get all department goals for @DEPARTMENT_ID along with their changes in descending order where the start date is @START_DATE If no joining data is found in the goal change table for a goal it has not been changed since it was initially created */ SELECT * FROM Goals g LEFT JOIN GoalChanges gc ON g.DepartmentId = gc.DepartmentId AND g.Product = gc.Product AND g.StartDate = gc.StartDate AND g.EndDate = gc.EndDate AND COALESCE(g.EmployeeId, '') = COALESCE(gc.PersonId, '') WHERE g.StartDate = @START_DATE AND g.DepartmentId = @DEPARTMENT_ID AND g.EmployeeId IS NULL AND gc.PersonId IS NULL -- If g.EmployeeId and gc.PersonId are null then the goal and its changes belong to a department, not an individual user ORDER BY gc.Created DESC; /* Get all non home department payouts for @PRODUCT in @PAYOUT_PERIOD */ USE IncentiveManager; DECLARE @PRODUCT VARCHAR(255) = 'GAPInsurance'; DECLARE @PAYOUT_PERIOD DATETIME2 = '2022-06-01 00:00:00.0000000'; WITH MultiplePayoutEmployees AS (SELECT pli.EmployeeId, pli.ActivityPeriod, COUNT(pli.EmployeeId) AS PayoutCount FROM PayoutLineItems pli WHERE pli.Product = @PRODUCT GROUP BY pli.EmployeeId, pli.ActivityPeriod HAVING COUNT(pli.EmployeeId) > 1) SELECT DISTINCT au.FullName, pli.* FROM MultiplePayoutEmployees mpe LEFT JOIN PayoutLineItems pli ON mpe.EmployeeId = pli.EmployeeId AND mpe.ActivityPeriod = pli.ActivityPeriod LEFT JOIN AppUser au ON pli.EmployeeId = au.EmployeeId LEFT JOIN DeptAssignments da ON pli.EmployeeId = da.EmployeeId AND pli.DepartmentId = da.DepartmentId AND @PAYOUT_PERIOD >= da.StartDate AND (da.EndDate IS NULL OR @PAYOUT_PERIOD <= da.EndDate) WHERE pli.Product = @PRODUCT AND pli.ActivityPeriod = @PAYOUT_PERIOD AND da.IsHome = 0 ORDER BY pli.EmployeeId; /* Delete all non home department payouts for @PRODUCT in @PAYOUT_PERIOD */ BEGIN TRANSACTION; -- COMMIT TRANSACTION; -- ROLLBACK TRANSACTION; USE IncentiveManager; DECLARE @PRODUCT VARCHAR(255) = 'GAPInsurance'; DECLARE @PAYOUT_PERIOD DATETIME2 = '2022-06-01 00:00:00.0000000'; DECLARE @TARGET_PAYOUT_IDS TABLE(ID INT); SET NOCOUNT ON; -- Suppress unwanted count on var table insert WITH MultiplePayoutEmployees AS (SELECT pli.EmployeeId, pli.ActivityPeriod, COUNT(pli.EmployeeId) AS PayoutCount FROM PayoutLineItems pli WHERE pli.Product = @PRODUCT GROUP BY pli.EmployeeId, pli.ActivityPeriod HAVING COUNT(pli.EmployeeId) > 1), TargetPayoutIds AS (SELECT pli.Id FROM MultiplePayoutEmployees mpe LEFT JOIN PayoutLineItems pli ON mpe.EmployeeId = pli.EmployeeId AND mpe.ActivityPeriod = pli.ActivityPeriod LEFT JOIN AppUser au ON pli.EmployeeId = au.EmployeeId LEFT JOIN DeptAssignments da ON pli.EmployeeId = da.EmployeeId AND pli.DepartmentId = da.DepartmentId AND @PAYOUT_PERIOD >= da.StartDate AND (da.EndDate IS NULL OR @PAYOUT_PERIOD <= da.EndDate) WHERE pli.Product = @PRODUCT AND pli.ActivityPeriod = @PAYOUT_PERIOD AND da.IsHome = 0) INSERT INTO @TARGET_PAYOUT_IDS SELECT Id FROM TargetPayoutIds; SET NOCOUNT OFF; -- Re enable count after insert for DBA DELETE rows affected verification -- SELECT * FROM @TARGET_PAYOUT_IDS; -- SELECT * FROM ActivityPayouts WHERE PayoutLineItemId IN (SELECT * FROM @TARGET_PAYOUT_IDS); -- SELECT * FROM PayoutLineItems WHERE Id IN (SELECT * FROM @TARGET_PAYOUT_IDS); DELETE FROM ActivityPayouts WHERE PayoutLineItemId IN (SELECT * FROM @TARGET_PAYOUT_IDS); DELETE FROM PayoutLineItems WHERE Id IN (SELECT * FROM @TARGET_PAYOUT_IDS); /* Delete all duplicate goals for @BRANCH in @PAYOUT_PERIOD */ -- (20 rows affected) BEGIN TRANSACTION; -- COMMIT TRANSACTION; -- ROLLBACK TRANSACTION; USE IncentiveManager; DECLARE @BRANCH VARCHAR(255) = '11'; DECLARE @PAYOUT_PERIOD DATETIME2 = '2022-08-01 00:00:00.0000000'; WITH MultipleGoalEmployees AS ( SELECT g.EmployeeId, g.StartDate, g.Product, COUNT(g.EmployeeId) AS GoalCount FROM Goals g WHERE g.StartDate = @PAYOUT_PERIOD GROUP BY g.EmployeeId, g.StartDate, g.Product HAVING COUNT(g.EmployeeId) > 1 ), TargetItems AS( SELECT au.FullName, ROW_NUMBER() OVER (PARTITION BY g.EmployeeId, g.StartDate, g.Product ORDER BY g.LastUpdated ASC) AS RowRank, g.* FROM MultipleGoalEmployees mge LEFT JOIN AppUser au ON mge.EmployeeId = au.EmployeeId LEFT JOIN Goals g ON mge.EmployeeId = g.EmployeeId AND mge.Product = g.Product AND mge.StartDate = g.StartDate WHERE g.DepartmentId IN (@BRANCH) ) DELETE FROM Goals WHERE Id IN( SELECT ti.Id FROM TargetItems ti WHERE ti.RowRank = 1 ) /* Sample Manual Data Update State Change Insert To Maintain Long Term Data Integrity */ INSERT INTO ActivityStateChanges (CreatedBy, Created, CreatedByType, ActivityId, State, Note, ActivityMatchId, AcceptedDate, CreatedByAppUserId) VALUES ('Incentive Manager', GETUTCDATE(), 1, @TARGET_ACTIVITY_ID, 'Accepted', 'Auto-Decision: MBP Accepted', 0, @UPDATE_ACTIVITY_ACCEPTED_DATE, '00000000-0000-0000-0000-000000000000'); /* Remove @TARGET_ACTIVITY_ID from system, this should only be a last resort for data issues since the system is supposed to be auditable */ USE IncentiveManager; DECLARE @TARGET_ACTIVITY_ID INT = 143613; BEGIN TRANSACTION; DELETE FROM ActivityDetailUpdates WHERE Id IN (SELECT adu.Id FROM Activity a LEFT JOIN ActivityDetail ad ON a.Id = ad.ActivityRef LEFT JOIN ActivityDetailUpdates adu ON ad.Id = adu.ActivityDetailId WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM ActivityDetail WHERE Id IN (SELECT ad.Id FROM Activity a LEFT JOIN ActivityDetail ad ON a.Id = ad.ActivityRef WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM dbo.ActivityMetaData WHERE Id IN (SELECT amd.Id FROM Activity a LEFT JOIN ActivityMetaData amd ON a.Id = amd.ActivityRef WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM ActivityStateChanges WHERE Id IN (SELECT ad.Id FROM Activity a LEFT JOIN ActivityStateChanges ad ON a.Id = ad.ActivityId WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM ActivityTransferActions WHERE Id IN (SELECT ata.Id FROM Activity a LEFT JOIN ActivityTransferActions ata ON a.Id = ata.RequestedActivityId OR a.Id = ata.NewActivityId WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM PayoutLineItems WHERE Id IN (SELECT pli.Id FROM Activity a LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId LEFT JOIN PayoutLineItems pli ON ap.PayoutLineItemId = pli.Id WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM ActivityPayouts WHERE ActivityId IN (SELECT ap.ActivityId FROM Activity a LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId WHERE a.Id = @TARGET_ACTIVITY_ID); DELETE FROM Activity WHERE Id IN (SELECT a.Id FROM Activity a WHERE a.Id = @TARGET_ACTIVITY_ID); ROLLBACK TRANSACTION; -- COMMIT TRANSACTION; /* Sample Query To Manually Enter AppUser */ DECLARE @USER_EMAIL VARCHAR(MAX) = 'EMPLOYEEEMAIL@LANDMARKCU.COM'; DECLARE @USER_ID UNIQUEIDENTIFIER = NEWID(); INSERT INTO IncentiveManager.dbo.AppUser (Id, AdEmail, PersonId, EmployeeId, CreatedBy, Created, CreatedByType, LastUpdatedBy, LastUpdated, LastUpdatedByType, HomeDepartment, BaseRole, ManagerKey, Role, FullName, Terminated, CreatedByAppUserId, LastUpdatedByAppUserId) VALUES (@USER_ID,@USER_EMAIL, 0, N'X099', N'Incentive Manager', N'2021-10-16 02:01:19.2424619', 1, N'Incentive Manager', N'2022-09-14 23:50:39.2427930', 1, N'HEADQUARTERS - INFORMATION TECHNOLOGY', N'SOFTWARE ENG', N'11519', N'Admin', N'DEPRATT, ANDREW', null, N'00000000-0000-0000-0000-000000000000', N'00000000-0000-0000-0000-000000000000'); INSERT INTO IncentiveManager.dbo.DeptAssignments (CreatedBy, Created, CreatedByType, LastUpdatedBy, LastUpdated, LastUpdatedByType, DepartmentId, StartDate, EndDate, Note, IsHome, Role, SlidingPayout, AppUserId, CreatedByAppUserId, LastUpdatedByAppUserId) VALUES (N'Incentive Manager', N'2021-10-16 02:01:19.2424607', 1, N'Incentive Manager', N'2022-09-14 23:50:39.2427934', 1, 2, N'2020-08-01 00:00:00.0000000', null, N'Auto Generated Home Assignment', 1, N'Admin', 100.00, @USER_ID, N'00000000-0000-0000-0000-000000000000', N'00000000-0000-0000-0000-000000000000'); /* Update @TARGET_ACTIVITY_ID and associated payouts along with the final state change to have a different payout period and accepted date */ USE IncentiveManager; -- (1 row affected) -- (1 row affected) -- (1 row affected) BEGIN TRANSACTION; -- ROLLBACK TRANSACTION; -- COMMIT TRANSACTION; DECLARE @NEW_ACTIVITY_PERIOD DATETIME2 = '2022-11-01 00:00:00.0000000'; DECLARE @NEW_ACCEPTED_DATE DATETIME2 = '2022-11-29 12:00:00.0000000'; DECLARE @TARGET_ACTIVITY_ID INT = 177281; UPDATE ActivityStateChanges SET AcceptedDate = @NEW_ACCEPTED_DATE WHERE Id IN (SELECT TOP 1 ad.Id FROM Activity a LEFT JOIN ActivityStateChanges ad ON a.Id = ad.ActivityId WHERE a.Id = @TARGET_ACTIVITY_ID AND ad.State = 'Accepted' ORDER BY ad.Created DESC); UPDATE PayoutLineItems SET ActivityPeriod = @NEW_ACTIVITY_PERIOD WHERE Id IN (SELECT pli.Id FROM Activity a LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId LEFT JOIN PayoutLineItems pli ON ap.PayoutLineItemId = pli.Id WHERE a.Id = @TARGET_ACTIVITY_ID); UPDATE Activity SET Accepted = @NEW_ACCEPTED_DATE WHERE Id IN (SELECT a.Id FROM Activity a WHERE a.Id = @TARGET_ACTIVITY_ID); -- SELECT * -- FROM ActivityStateChanges -- WHERE Id IN (SELECT TOP 1 ad.Id -- FROM Activity a -- LEFT JOIN ActivityStateChanges ad ON a.Id = ad.ActivityId -- WHERE a.Id = @TARGET_ACTIVITY_ID -- AND ad.State = 'Accepted' -- ORDER BY ad.Created DESC); -- SELECT * -- FROM PayoutLineItems -- WHERE Id IN (SELECT pli.Id -- FROM Activity a -- LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId -- LEFT JOIN PayoutLineItems pli ON ap.PayoutLineItemId = pli.Id -- WHERE a.Id = @TARGET_ACTIVITY_ID); -- SELECT * -- FROM Activity -- WHERE Id IN (SELECT a.Id -- FROM Activity a -- WHERE a.Id = @TARGET_ACTIVITY_ID); /* DELETE ActivityPayouts linked to @TARGET_ACTIVITY_ID so they can be recreated */ USE IncentiveManager; -- (1 row affected) BEGIN TRANSACTION; -- ROLLBACK TRANSACTION; -- COMMIT TRANSACTION; DECLARE @TARGET_ACTIVITY_ID INT = 177281; DELETE PayoutLineItems WHERE Id IN (SELECT pli.Id FROM Activity a LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId LEFT JOIN PayoutLineItems pli ON ap.PayoutLineItemId = pli.Id WHERE a.Id = @TARGET_ACTIVITY_ID); -- SELECT * -- FROM PayoutLineItems -- WHERE Id IN (SELECT pli.Id -- FROM Activity a -- LEFT JOIN ActivityPayouts ap ON a.Id = ap.ActivityId -- LEFT JOIN PayoutLineItems pli ON ap.PayoutLineItemId = pli.Id -- WHERE a.Id = @TARGET_ACTIVITY_ID); -- SELECT * -- FROM ActivityPayouts -- WHERE ActivityId = @TARGET_ACTIVITY_ID; /* UPDATE @TARGET_APPUSER_EMPLOYEE_ID to be @NEW_APPUSER_ROLE for local/QA dev */ DECLARE @TARGET_APPUSER_EMPLOYEE_ID VARCHAR(MAX) = '8675309'; DECLARE @NEW_APPUSER_ROLE VARCHAR(MAX) = 'Admin'; UPDATE AppUser SET Role = @NEW_APPUSER_ROLE WHERE Id IN (SELECT au.Id FROM AppUser au WHERE au.EmployeeId IN (@TARGET_APPUSER_EMPLOYEE_ID)); Update DeptAssignments Set Role = @NEW_APPUSER_ROLE WHERE Id IN (SELECT da.Id FROM AppUser au LEFT JOIN DeptAssignments da on au.Id = da.AppUserId WHERE au.EmployeeId IN (@TARGET_APPUSER_EMPLOYEE_ID));