325 lines
12 KiB
Plaintext
325 lines
12 KiB
Plaintext
/*
|
|
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) = '[email protected]';
|
|
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));
|