Skip to content

Commit 810c103

Browse files
authored
Finish feature/OP-238
OP-238: Fixed snapshot indicators report function
2 parents df38f04 + e141ad8 commit 810c103

File tree

2 files changed

+113
-17
lines changed

2 files changed

+113
-17
lines changed

sql/base/3_functions.sql

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -316,47 +316,54 @@ CREATE FUNCTION [dbo].[udfGetSnapshotIndicators](
316316
SET @ACtive = (
317317
SELECT COUNT(DISTINCT P.FamilyID) ActivePolicies FROM tblPolicy P
318318
INNER JOIN @tblOfficerSub O ON P.OfficerID = O.NewOfficer
319-
WHERE P.ValidityTo IS NULL AND PolicyStatus = 2
319+
INNER JOIN tblFamilies F on F.FamilyID = P.FamilyID
320+
WHERE P.ValidityTo IS NULL AND PolicyStatus = 2
321+
AND F.ValidityTo IS NULL
320322
AND ExpiryDate >=@Date
321323
)
322324

323325
SET @Expired = (SELECT COUNT(1) ExpiredPolicies
324326
FROM tblPolicy PL
325-
LEFT OUTER JOIN (SELECT PL.PolicyID, F.FamilyID, PR.ProdID
326-
FROM tblPolicy PL
327-
INNER JOIN tblFamilies F ON F.FamilyId = PL.FamilyId
328-
INNER JOIN tblProduct PR ON PR.ProdID= PL.ProdID OR (PL.ProdID = PR.ConversionProdID)
329-
WHERE
330-
PL.ValidityTo IS NULL
331-
AND F.ValidityTo IS NULL
332-
AND PR.ValidityTo IS NULL
333-
AND PL.PolicyStage='R'
334-
AND PL.PolicyStatus = 2
335-
) R ON PL.ProdID=R.ProdID AND PL.FamilyID=R.FamilyID
336-
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
327+
LEFT OUTER JOIN (
328+
SELECT PL.PolicyID, F.FamilyID, PR.ProdID
329+
FROM tblPolicy PL
330+
INNER JOIN tblFamilies F ON F.FamilyId = PL.FamilyId
331+
INNER JOIN tblProduct PR ON PR.ProdID= PL.ProdID OR (PL.ProdID = PR.ConversionProdID)
332+
WHERE
333+
PL.ValidityTo IS NULL
334+
AND F.ValidityTo IS NULL
335+
AND PR.ValidityTo IS NULL
336+
AND PL.PolicyStage='R'
337+
AND PL.PolicyStatus = 2
338+
) R ON PL.ProdID=R.ProdID AND PL.FamilyID=R.FamilyID
339+
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
337340
WHERE
338-
PL.ValidityTo IS NULL
339-
AND PL.PolicyStatus = 8
340-
AND R.PolicyID IS NULL
341-
AND (PL.ExpiryDate =@Date)
341+
PL.ValidityTo IS NULL
342+
AND PL.PolicyStatus = 8
343+
AND R.PolicyID IS NULL
344+
AND (PL.ExpiryDate =@Date)
342345
)
343346
SET @Idle = (
344347
SELECT COUNT(DISTINCT PL.FamilyID) IddlePolicies FROM tblPolicy PL
345348
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
346349
INNER JOIN tblProduct PR ON PR.ProdID = PL.ProdID
350+
INNER JOIN tblFamilies F ON PL.FamilyID = F.FamilyID
347351
LEFT OUTER JOIN (SELECT FamilyID, ProdID FROM tblPolicy WHERE ValidityTo IS NULL AND PolicyStatus =2 AND ExpiryDate >=@Date) ActivePolicies ON ActivePolicies.FamilyID = PL.FamilyID AND (ActivePolicies.ProdID = PL.ProdID OR ActivePolicies.ProdID = PR.ConversionProdID)
348352
WHERE PL.ValidityTo IS NULL AND PL.PolicyStatus = 1
349353
AND ExpiryDate >=@Date
350354
AND ActivePolicies.ProdID IS NULL
355+
AND F.ValidityTo IS NULL
351356
)
352357
SET @Suspended = (
353358
SELECT COUNT(DISTINCT PL.FamilyID) SuspendedPolicies FROM tblPolicy PL
354359
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
355360
INNER JOIN tblProduct PR ON PR.ProdID = PL.ProdID
361+
INNER JOIN tblFamilies F ON PL.FamilyID = F.FamilyID
356362
LEFT OUTER JOIN (SELECT FamilyID, ProdID FROM tblPolicy WHERE ValidityTo IS NULL AND PolicyStatus =2 AND ExpiryDate >=@Date) ActivePolicies ON ActivePolicies.FamilyID = PL.FamilyID AND (ActivePolicies.ProdID = PL.ProdID OR ActivePolicies.ProdID = PR.ConversionProdID)
357363
WHERE PL.ValidityTo IS NULL AND PL.PolicyStatus = 4
358364
AND ExpiryDate >=@Date
359365
AND ActivePolicies.ProdID IS NULL
366+
AND F.ValidityTo IS NULL
360367
)
361368
INSERT INTO @tblSnapshotIndicators(ACtive, Expired, Idle, Suspended) VALUES (@ACtive, @Expired, @Idle, @Suspended)
362369
RETURN

sql/migrations/1_migration_latest.sql

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9414,3 +9414,92 @@ GO
94149414
IF COL_LENGTH(N'tblEmailSettings', N'SenderDisplayName') IS NULL
94159415
ALTER TABLE tblEmailSettings ADD SenderDisplayName NVARCHAR(255) NULL
94169416
GO
9417+
9418+
9419+
DROP FUNCTION IF EXISTS [dbo].[udfGetSnapshotIndicators];
9420+
GO
9421+
9422+
CREATE FUNCTION [dbo].[udfGetSnapshotIndicators](
9423+
@Date DATE,
9424+
@OfficerId INT
9425+
) RETURNS @tblSnapshotIndicators TABLE(ACtive INT,Expired INT,Idle INT,Suspended INT)
9426+
AS
9427+
BEGIN
9428+
DECLARE @ACtive INT=0
9429+
DECLARE @Expired INT=0
9430+
DECLARE @Idle INT=0
9431+
DECLARE @Suspended INT=0
9432+
DECLARE @LegacyOfficer INT
9433+
DECLARE @tblOfficerSub TABLE(OldOfficer INT, NewOfficer INT)
9434+
9435+
INSERT INTO @tblOfficerSub(OldOfficer, NewOfficer)
9436+
SELECT DISTINCT @OfficerID, @OfficerID
9437+
9438+
SET @LegacyOfficer = (SELECT OfficerID FROM tblOfficer WHERE ValidityTo IS NULL AND OfficerIDSubst = @OfficerID)
9439+
WHILE @LegacyOfficer IS NOT NULL
9440+
BEGIN
9441+
INSERT INTO @tblOfficerSub(OldOfficer, NewOfficer)
9442+
SELECT DISTINCT @OfficerID, @LegacyOfficer
9443+
IF EXISTS(SELECT 1 FROM @tblOfficerSub GROUP BY NewOfficer HAVING COUNT(1) > 1)
9444+
BREAK;
9445+
SET @LegacyOfficer = (SELECT OfficerID FROM tblOfficer WHERE ValidityTo IS NULL AND OfficerIDSubst = @LegacyOfficer)
9446+
END;
9447+
9448+
9449+
SET @ACtive = (
9450+
SELECT COUNT(DISTINCT P.FamilyID) ActivePolicies FROM tblPolicy P
9451+
INNER JOIN @tblOfficerSub O ON P.OfficerID = O.NewOfficer
9452+
INNER JOIN tblFamilies F on F.FamilyID = P.FamilyID
9453+
WHERE P.ValidityTo IS NULL AND PolicyStatus = 2
9454+
AND F.ValidityTo IS NULL
9455+
AND ExpiryDate >=@Date
9456+
)
9457+
9458+
SET @Expired = (SELECT COUNT(1) ExpiredPolicies
9459+
FROM tblPolicy PL
9460+
LEFT OUTER JOIN (
9461+
SELECT PL.PolicyID, F.FamilyID, PR.ProdID
9462+
FROM tblPolicy PL
9463+
INNER JOIN tblFamilies F ON F.FamilyId = PL.FamilyId
9464+
INNER JOIN tblProduct PR ON PR.ProdID= PL.ProdID OR (PL.ProdID = PR.ConversionProdID)
9465+
WHERE
9466+
PL.ValidityTo IS NULL
9467+
AND F.ValidityTo IS NULL
9468+
AND PR.ValidityTo IS NULL
9469+
AND PL.PolicyStage='R'
9470+
AND PL.PolicyStatus = 2
9471+
) R ON PL.ProdID=R.ProdID AND PL.FamilyID=R.FamilyID
9472+
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
9473+
WHERE
9474+
PL.ValidityTo IS NULL
9475+
AND PL.PolicyStatus = 8
9476+
AND R.PolicyID IS NULL
9477+
AND (PL.ExpiryDate =@Date)
9478+
)
9479+
SET @Idle = (
9480+
SELECT COUNT(DISTINCT PL.FamilyID) IddlePolicies FROM tblPolicy PL
9481+
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
9482+
INNER JOIN tblProduct PR ON PR.ProdID = PL.ProdID
9483+
INNER JOIN tblFamilies F ON PL.FamilyID = F.FamilyID
9484+
LEFT OUTER JOIN (SELECT FamilyID, ProdID FROM tblPolicy WHERE ValidityTo IS NULL AND PolicyStatus =2 AND ExpiryDate >=@Date) ActivePolicies ON ActivePolicies.FamilyID = PL.FamilyID AND (ActivePolicies.ProdID = PL.ProdID OR ActivePolicies.ProdID = PR.ConversionProdID)
9485+
WHERE PL.ValidityTo IS NULL AND PL.PolicyStatus = 1
9486+
AND ExpiryDate >=@Date
9487+
AND ActivePolicies.ProdID IS NULL
9488+
AND F.ValidityTo IS NULL
9489+
)
9490+
SET @Suspended = (
9491+
SELECT COUNT(DISTINCT PL.FamilyID) SuspendedPolicies FROM tblPolicy PL
9492+
INNER JOIN @tblOfficerSub O ON PL.OfficerID = O.NewOfficer
9493+
INNER JOIN tblProduct PR ON PR.ProdID = PL.ProdID
9494+
INNER JOIN tblFamilies F ON PL.FamilyID = F.FamilyID
9495+
LEFT OUTER JOIN (SELECT FamilyID, ProdID FROM tblPolicy WHERE ValidityTo IS NULL AND PolicyStatus =2 AND ExpiryDate >=@Date) ActivePolicies ON ActivePolicies.FamilyID = PL.FamilyID AND (ActivePolicies.ProdID = PL.ProdID OR ActivePolicies.ProdID = PR.ConversionProdID)
9496+
WHERE PL.ValidityTo IS NULL AND PL.PolicyStatus = 4
9497+
AND ExpiryDate >=@Date
9498+
AND ActivePolicies.ProdID IS NULL
9499+
AND F.ValidityTo IS NULL
9500+
)
9501+
INSERT INTO @tblSnapshotIndicators(ACtive, Expired, Idle, Suspended) VALUES (@ACtive, @Expired, @Idle, @Suspended)
9502+
RETURN
9503+
END
9504+
9505+
GO

0 commit comments

Comments
 (0)