Files
monorepo/LCU.API.Operations.IncentiveAPI/SampleQueries.txt
T
2026-03-17 09:53:09 -05:00

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));