Skip to content

Commit f79d709

Browse files
committed
extract SP uspSSRSPremiumDistribution
1 parent 31e6729 commit f79d709

File tree

3 files changed

+143
-288
lines changed

3 files changed

+143
-288
lines changed

sql/base/6_bundle_stored_procedures.sql

Lines changed: 0 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -12168,150 +12168,6 @@ CREATE OR ALTER PROCEDURE [dbo].[uspSSRSPremiumCollection]
1216812168
END
1216912169
GO
1217012170

12171-
SET ANSI_NULLS ON
12172-
GO
12173-
SET QUOTED_IDENTIFIER ON
12174-
GO
12175-
12176-
CREATE OR ALTER PROCEDURE [dbo].[uspSSRSPremiumDistribution]
12177-
(
12178-
@Month INT,
12179-
@Year INT,
12180-
@LocationId INT = 0,
12181-
@ProductID INT = 0
12182-
)
12183-
AS
12184-
BEGIN
12185-
IF NOT OBJECT_ID('tempdb..#tmpResult') IS NULL DROP TABLE #tmpResult
12186-
12187-
CREATE TABLE #tmpResult(
12188-
MonthID INT,
12189-
DistrictName NVARCHAR(50),
12190-
ProductCode NVARCHAR(8),
12191-
ProductName NVARCHAR(100),
12192-
TotalCollected DECIMAL(18,4),
12193-
NotAllocated DECIMAL(18,4),
12194-
Allocated DECIMAL(18,4)
12195-
)
12196-
12197-
DECLARE @Date DATE,
12198-
@DaysInMonth INT,
12199-
@Counter INT = 1,
12200-
@MaxCount INT = 12,
12201-
@EndDate DATE
12202-
12203-
IF @Month > 0
12204-
BEGIN
12205-
SET @Counter = @Month
12206-
SET @MaxCount = @Month
12207-
END
12208-
12209-
IF @LocationId = -1
12210-
SET @LocationId = NULL
12211-
12212-
WHILE @Counter <> @MaxCount + 1
12213-
BEGIN
12214-
SELECT @Date = CAST(CAST(@Year AS VARCHAR(4)) + '-' + CAST(@Counter AS VARCHAR(2)) + '-' + '01' AS DATE)
12215-
SELECT @DaysInMonth = DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))
12216-
SELECT @EndDate = CAST(CONVERT(VARCHAR(4),@Year) + '-' + CONVERT(VARCHAR(2),@Counter) + '-' + CONVERT(VARCHAR(2),@DaysInMonth) AS DATE)
12217-
12218-
12219-
;WITH Locations AS
12220-
(
12221-
SELECT 0 LocationId, N'National' LocationName, NULL ParentLocationId
12222-
UNION
12223-
SELECT LocationId,LocationName, ISNULL(ParentLocationId, 0) FROM tblLocations WHERE ValidityTo IS NULL AND LocationId = @LocationId
12224-
UNION ALL
12225-
SELECT L.LocationId, L.LocationName, L.ParentLocationId
12226-
FROM tblLocations L
12227-
INNER JOIN Locations ON Locations.LocationId = L.ParentLocationId
12228-
WHERE L.validityTo IS NULL
12229-
AND L.LocationType IN ('R', 'D')
12230-
)
12231-
INSERT INTO #tmpResult
12232-
SELECT MonthId,DistrictName,ProductCode,ProductName,SUM(ISNULL(TotalCollected,0))TotalCollected,SUM(ISNULL(NotAllocated,0))NotAllocated,SUM(ISNULL(Allocated,0))Allocated
12233-
FROM
12234-
(
12235-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
12236-
SUM(PR.Amount) TotalCollected,
12237-
0 NotAllocated,
12238-
0 Allocated
12239-
FROM tblPremium PR
12240-
RIGHT OUTER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
12241-
INNER JOIN tblProduct Prod ON PL.ProdID = Prod.ProdID
12242-
INNER JOIN Locations L ON ISNULL(Prod.LocationId, 0) = L.LocationId
12243-
WHERE PR.ValidityTo IS NULL
12244-
AND PL.ValidityTo IS NULL
12245-
AND Prod.ValidityTo IS NULL
12246-
AND PL.PolicyStatus <> 1
12247-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
12248-
AND MONTH(PR.PayDate) = @Counter
12249-
AND YEAR(PR.PayDate) = @Year
12250-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
12251-
12252-
UNION ALL
12253-
12254-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
12255-
0 TotalCollected,
12256-
SUM(PR.Amount) NotAllocated,
12257-
0 Allocated
12258-
FROM tblPremium AS PR INNER JOIN tblPolicy AS PL ON PR.PolicyID = PL.PolicyID
12259-
INNER JOIN tblProduct AS Prod ON PL.ProdID = Prod.ProdID
12260-
INNER JOIN Locations AS L ON ISNULL(Prod.LocationId, 0) = L.LocationId
12261-
WHERE PR.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND Prod.ValidityTo IS NULL
12262-
AND (MONTH(PR.PayDate ) = @Counter)
12263-
AND (YEAR(PR.PayDate) = @Year)
12264-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
12265-
AND (PL.PolicyStatus = 1)
12266-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
12267-
12268-
UNION ALL
12269-
12270-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
12271-
0 TotalCollected,
12272-
SUM(PR.Amount) NotAllocated,
12273-
0 Allocated
12274-
FROM tblPremium AS PR INNER JOIN tblPolicy AS PL ON PR.PolicyID = PL.PolicyID
12275-
INNER JOIN tblProduct AS Prod ON PL.ProdID = Prod.ProdID
12276-
INNER JOIN Locations AS L ON ISNULL(Prod.LocationId, 0) = L.LocationId
12277-
WHERE PR.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND Prod.ValidityTo IS NULL
12278-
AND (MONTH(PR.PayDate ) = @Counter)
12279-
AND (YEAR(PR.PayDate) = @Year)
12280-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
12281-
AND (PR.PayDate > PL.ExpiryDate)
12282-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
12283-
12284-
UNION ALL
12285-
12286-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
12287-
0 TotalCollected,
12288-
0 NotAllocated,
12289-
CASE
12290-
WHEN MONTH(DATEADD(D,-1,PL.ExpiryDate)) = @Counter AND YEAR(DATEADD(D,-1,PL.ExpiryDate)) = @Year AND (DAY(PL.ExpiryDate)) > 1
12291-
THEN CASE WHEN DATEDIFF(D,CASE WHEN PR.PayDate < @Date THEN @Date ELSE PR.PayDate END,PL.ExpiryDate) = 0 THEN 1 ELSE DATEDIFF(D,CASE WHEN PR.PayDate < @Date THEN @Date ELSE PR.PayDate END,PL.ExpiryDate) END * ((SUM(PR.Amount))/(CASE WHEN (DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate)) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END))
12292-
WHEN MONTH(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END) = @Counter AND YEAR(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END) = @Year
12293-
THEN ((@DaysInMonth + 1 - DAY(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END)) * ((SUM(PR.Amount))/CASE WHEN DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END))
12294-
WHEN PL.EffectiveDate < @Date AND PL.ExpiryDate > @EndDate AND PR.PayDate < @Date
12295-
THEN @DaysInMonth * (SUM(PR.Amount)/CASE WHEN (DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,DATEADD(D,-1,PL.ExpiryDate))) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END)
12296-
END Allocated
12297-
FROM tblPremium PR
12298-
INNER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
12299-
INNER JOIN tblProduct Prod ON PL.ProdID = Prod.ProdID
12300-
INNER JOIN Locations L ON ISNULL(Prod.LocationId, 0) = L.LocationId
12301-
WHERE PR.ValidityTo IS NULL
12302-
AND PL.ValidityTo IS NULL
12303-
AND Prod.ValidityTo IS NULL
12304-
AND Prod.ProdID = @ProductID
12305-
AND PL.PolicyStatus <> 1
12306-
AND PR.PayDate <= PL.ExpiryDate
12307-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate,PL.EffectiveDate
12308-
)PremiumDistribution
12309-
GROUP BY MonthId,DistrictName,ProductCode,ProductName
12310-
SET @Counter = @Counter + 1
12311-
END
12312-
SELECT MonthId, DistrictName,ProductCode,ProductName,TotalCollected,NotAllocated,Allocated FROM #tmpResult
12313-
END
12314-
GO
1231512171

1231612172
SET ANSI_NULLS ON
1231712173
GO

sql/migrations/1_migration_latest.sql

Lines changed: 0 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,150 +1150,6 @@ GO
11501150
END
11511151
GO
11521152

1153-
IF OBJECT_ID('uspSSRSPremiumDistribution', 'P') IS NOT NULL
1154-
DROP PROCEDURE uspSSRSPremiumDistribution
1155-
GO
1156-
1157-
CREATE PROCEDURE [dbo].[uspSSRSPremiumDistribution]
1158-
(
1159-
@Month INT,
1160-
@Year INT,
1161-
@LocationId INT = 0,
1162-
@ProductID INT = 0
1163-
)
1164-
AS
1165-
BEGIN
1166-
IF NOT OBJECT_ID('tempdb..#tmpResult') IS NULL DROP TABLE #tmpResult
1167-
1168-
CREATE TABLE #tmpResult(
1169-
MonthID INT,
1170-
DistrictName NVARCHAR(50),
1171-
ProductCode NVARCHAR(8),
1172-
ProductName NVARCHAR(100),
1173-
TotalCollected DECIMAL(18,4),
1174-
NotAllocated DECIMAL(18,4),
1175-
Allocated DECIMAL(18,4)
1176-
)
1177-
1178-
DECLARE @Date DATE,
1179-
@DaysInMonth INT,
1180-
@Counter INT = 1,
1181-
@MaxCount INT = 12,
1182-
@EndDate DATE
1183-
1184-
IF @Month > 0
1185-
BEGIN
1186-
SET @Counter = @Month
1187-
SET @MaxCount = @Month
1188-
END
1189-
1190-
IF @LocationId = -1
1191-
SET @LocationId = NULL
1192-
1193-
WHILE @Counter <> @MaxCount + 1
1194-
BEGIN
1195-
SELECT @Date = CAST(CAST(@Year AS VARCHAR(4)) + '-' + CAST(@Counter AS VARCHAR(2)) + '-' + '01' AS DATE)
1196-
SELECT @DaysInMonth = DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))
1197-
SELECT @EndDate = CAST(CONVERT(VARCHAR(4),@Year) + '-' + CONVERT(VARCHAR(2),@Counter) + '-' + CONVERT(VARCHAR(2),@DaysInMonth) AS DATE)
1198-
1199-
1200-
;WITH Locations AS
1201-
(
1202-
SELECT 0 LocationId, N'National' LocationName, NULL ParentLocationId
1203-
UNION
1204-
SELECT LocationId,LocationName, ISNULL(ParentLocationId, 0) FROM tblLocations WHERE ValidityTo IS NULL AND LocationId = @LocationId
1205-
UNION ALL
1206-
SELECT L.LocationId, L.LocationName, L.ParentLocationId
1207-
FROM tblLocations L
1208-
INNER JOIN Locations ON Locations.LocationId = L.ParentLocationId
1209-
WHERE L.validityTo IS NULL
1210-
AND L.LocationType IN ('R', 'D')
1211-
)
1212-
INSERT INTO #tmpResult
1213-
SELECT MonthId,DistrictName,ProductCode,ProductName,SUM(ISNULL(TotalCollected,0))TotalCollected,SUM(ISNULL(NotAllocated,0))NotAllocated,SUM(ISNULL(Allocated,0))Allocated
1214-
FROM
1215-
(
1216-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
1217-
SUM(PR.Amount) TotalCollected,
1218-
0 NotAllocated,
1219-
0 Allocated
1220-
FROM tblPremium PR
1221-
RIGHT OUTER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
1222-
INNER JOIN tblProduct Prod ON PL.ProdID = Prod.ProdID
1223-
INNER JOIN Locations L ON ISNULL(Prod.LocationId, 0) = L.LocationId
1224-
WHERE PR.ValidityTo IS NULL
1225-
AND PL.ValidityTo IS NULL
1226-
AND Prod.ValidityTo IS NULL
1227-
AND PL.PolicyStatus <> 1
1228-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
1229-
AND MONTH(PR.PayDate) = @Counter
1230-
AND YEAR(PR.PayDate) = @Year
1231-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
1232-
1233-
UNION ALL
1234-
1235-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
1236-
0 TotalCollected,
1237-
SUM(PR.Amount) NotAllocated,
1238-
0 Allocated
1239-
FROM tblPremium AS PR INNER JOIN tblPolicy AS PL ON PR.PolicyID = PL.PolicyID
1240-
INNER JOIN tblProduct AS Prod ON PL.ProdID = Prod.ProdID
1241-
INNER JOIN Locations AS L ON ISNULL(Prod.LocationId, 0) = L.LocationId
1242-
WHERE PR.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND Prod.ValidityTo IS NULL
1243-
AND (MONTH(PR.PayDate ) = @Counter)
1244-
AND (YEAR(PR.PayDate) = @Year)
1245-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
1246-
AND (PL.PolicyStatus = 1)
1247-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
1248-
1249-
UNION ALL
1250-
1251-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
1252-
0 TotalCollected,
1253-
SUM(PR.Amount) NotAllocated,
1254-
0 Allocated
1255-
FROM tblPremium AS PR INNER JOIN tblPolicy AS PL ON PR.PolicyID = PL.PolicyID
1256-
INNER JOIN tblProduct AS Prod ON PL.ProdID = Prod.ProdID
1257-
INNER JOIN Locations AS L ON ISNULL(Prod.LocationId, 0) = L.LocationId
1258-
WHERE PR.ValidityTo IS NULL AND PL.ValidityTo IS NULL AND Prod.ValidityTo IS NULL
1259-
AND (MONTH(PR.PayDate ) = @Counter)
1260-
AND (YEAR(PR.PayDate) = @Year)
1261-
AND (Prod.ProdId = @ProductId OR @ProductId IS NULL)
1262-
AND (PR.PayDate > PL.ExpiryDate)
1263-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate
1264-
1265-
UNION ALL
1266-
1267-
SELECT @Counter MonthId,L.LocationName DistrictName,Prod.ProductCode,Prod.ProductName,
1268-
0 TotalCollected,
1269-
0 NotAllocated,
1270-
CASE
1271-
WHEN MONTH(DATEADD(D,-1,PL.ExpiryDate)) = @Counter AND YEAR(DATEADD(D,-1,PL.ExpiryDate)) = @Year AND (DAY(PL.ExpiryDate)) > 1
1272-
THEN CASE WHEN DATEDIFF(D,CASE WHEN PR.PayDate < @Date THEN @Date ELSE PR.PayDate END,PL.ExpiryDate) = 0 THEN 1 ELSE DATEDIFF(D,CASE WHEN PR.PayDate < @Date THEN @Date ELSE PR.PayDate END,PL.ExpiryDate) END * ((SUM(PR.Amount))/(CASE WHEN (DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate)) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END))
1273-
WHEN MONTH(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END) = @Counter AND YEAR(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END) = @Year
1274-
THEN ((@DaysInMonth + 1 - DAY(CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END)) * ((SUM(PR.Amount))/CASE WHEN DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END))
1275-
WHEN PL.EffectiveDate < @Date AND PL.ExpiryDate > @EndDate AND PR.PayDate < @Date
1276-
THEN @DaysInMonth * (SUM(PR.Amount)/CASE WHEN (DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,DATEADD(D,-1,PL.ExpiryDate))) <= 0 THEN 1 ELSE DATEDIFF(DAY,CASE WHEN PR.PayDate < PL.EffectiveDate THEN PL.EffectiveDate ELSE PR.PayDate END,PL.ExpiryDate) END)
1277-
END Allocated
1278-
FROM tblPremium PR
1279-
INNER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
1280-
INNER JOIN tblProduct Prod ON PL.ProdID = Prod.ProdID
1281-
INNER JOIN Locations L ON ISNULL(Prod.LocationId, 0) = L.LocationId
1282-
WHERE PR.ValidityTo IS NULL
1283-
AND PL.ValidityTo IS NULL
1284-
AND Prod.ValidityTo IS NULL
1285-
AND Prod.ProdID = @ProductID
1286-
AND PL.PolicyStatus <> 1
1287-
AND PR.PayDate <= PL.ExpiryDate
1288-
GROUP BY L.LocationName,Prod.ProductCode,Prod.ProductName,PR.Amount,PR.PayDate,PL.ExpiryDate,PL.EffectiveDate
1289-
)PremiumDistribution
1290-
GROUP BY MonthId,DistrictName,ProductCode,ProductName
1291-
SET @Counter = @Counter + 1
1292-
END
1293-
SELECT MonthId, DistrictName,ProductCode,ProductName,TotalCollected,NotAllocated,Allocated FROM #tmpResult
1294-
END
1295-
GO
1296-
12971153
IF OBJECT_ID('uspSSRSFeedbackPrompt', 'P') IS NOT NULL
12981154
DROP PROCEDURE uspSSRSFeedbackPrompt
12991155
GO

0 commit comments

Comments
 (0)