@@ -8635,3 +8635,254 @@ BEGIN
86358635 WHERE [RuleName] in (' AllowInsureeWithoutPhoto' , ' AllowFamilyWithoutPolicy' , ' AllowPolicyWithoutPremium' , ' ShowPaymentOption' )
86368636END
86378637GO
8638+
8639+ IF NOT OBJECT_ID (' uspPolicyRenewalInserts' ) IS NULL
8640+ DROP PROCEDURE uspPolicyRenewalInserts
8641+ GO
8642+
8643+ CREATE PROCEDURE [dbo].[uspPolicyRenewalInserts](
8644+ -- @RenewalWarning --> 1 = no valid product for renewal 2= No enrollment officer found (no photo) 4= INVALID Enrollment officer
8645+ @RemindingInterval INT = NULL ,
8646+ @RegionId INT = NULL ,
8647+ @DistrictId INT = NULL ,
8648+ @WardId INT = NULL ,
8649+ @VillageId INT = NULL ,
8650+ @OfficerId INT = NULL ,
8651+ @DateFrom DATE = NULL ,
8652+ @DateTo DATE = NULL
8653+ )
8654+ AS
8655+ BEGIN
8656+ SET NOCOUNT ON ;
8657+ DECLARE @RenewalID int
8658+ -- DECLARE @RemindingInterval as int --days in advance
8659+
8660+ DECLARE @PolicyID as int
8661+ DECLARE @FamilyID as int
8662+ DECLARE @RenewalDate as date
8663+ DECLARE @InsureeID as int
8664+ DECLARE @ProductID as int
8665+ DECLARE @ProductCode as nvarchar (8 )
8666+ DECLARE @ProductName as nvarchar (100 )
8667+ DECLARE @ProductFromDate as date
8668+ DECLARE @ProductToDate as date
8669+ DECLARE @DistrictName as nvarchar (50 )
8670+ DECLARE @VillageName as nvarchar (50 )
8671+ DECLARE @WardName as nvarchar (50 )
8672+ DECLARE @CHFID as nvarchar (12 )
8673+ DECLARE @InsLastName as nvarchar (100 )
8674+ DECLARE @InsOtherNames as nvarchar (100 )
8675+ DECLARE @InsDOB as date
8676+ DECLARE @ConvProdID as int
8677+ -- DECLARE @OfficerID as int
8678+ DECLARE @OffCode as nvarchar (6 )
8679+ DECLARE @OffLastName as nvarchar (100 )
8680+ DECLARE @OffOtherNames as nvarchar (100 )
8681+ DECLARE @OffPhone as nvarchar (50 )
8682+ DECLARE @OffSubstID as int
8683+ DECLARE @OffWorkTo as date
8684+
8685+ DECLARE @RenewalWarning as tinyint
8686+
8687+ DECLARE @SMSStatus as tinyint
8688+ DECLARE @iCount as int
8689+
8690+ IF @RemindingInterval IS NULL
8691+ SELECT @RemindingInterval = PolicyRenewalInterval from tblIMISDefaults -- later to be passed as parameter or reading from a default table
8692+
8693+ DECLARE LOOP1 CURSOR LOCAL FORWARD_ONLY FOR
8694+ -- SELECT tblPolicy.PolicyID, tblFamilies.FamilyID, DATEADD(d, 1, tblPolicy.ExpiryDate) AS RenewalDate, tblFamilies.InsureeID, tblProduct.ProdID, tblProduct.ProductCode,
8695+ -- tblProduct.ProductName, tblProduct.DateFrom, tblProduct.DateTo, tblDistricts.DistrictName, tblVillages.VillageName, tblWards.WardName, tblInsuree.CHFID,
8696+ -- tblInsuree.LastName, tblInsuree.OtherNames, tblInsuree.DOB, tblProduct.ConversionProdID,tblOfficer.OfficerID, tblOfficer.Code, tblOfficer.LastName AS OffLastName,
8697+ -- tblOfficer.OtherNames AS OffOtherNames, tblOfficer.Phone, tblOfficer.OfficerIDSubst, tblOfficer.WorksTo
8698+ -- FROM tblPhotos LEFT OUTER JOIN
8699+ -- tblOfficer ON tblPhotos.OfficerID = tblOfficer.OfficerID RIGHT OUTER JOIN
8700+ -- tblInsuree ON tblPhotos.PhotoID = tblInsuree.PhotoID RIGHT OUTER JOIN
8701+ -- tblDistricts RIGHT OUTER JOIN
8702+ -- tblPolicy INNER JOIN
8703+ -- tblProduct ON tblProduct.ProdID = tblPolicy.ProdID INNER JOIN
8704+ -- tblFamilies ON tblPolicy.FamilyID = tblFamilies.FamilyID ON tblDistricts.DistrictID = tblFamilies.DistrictID ON
8705+ -- tblInsuree.InsureeID = tblFamilies.InsureeID LEFT OUTER JOIN
8706+ -- tblVillages ON tblFamilies.VillageID = tblVillages.VillageID LEFT OUTER JOIN
8707+ -- tblWards ON tblFamilies.WardID = tblWards.WardID
8708+ -- WHERE (tblPolicy.PolicyStatus = 2) AND (tblPolicy.ValidityTo IS NULL) AND (DATEDIFF(d, GETDATE(), tblPolicy.ExpiryDate) = @RemindingInterval)
8709+
8710+
8711+ -- ============================================================================================
8712+ -- NEW QUERY BY HIREN
8713+ -- ============================================================================================
8714+ SELECT PL .PolicyID , PL .FamilyID , DATEADD (DAY , 1 , PL .ExpiryDate ) AS RenewalDate, F .InsureeID , Prod .ProdID , Prod .ProductCode , Prod .ProductName ,
8715+ Prod .DateFrom , Prod .DateTo , D .DistrictName , V .VillageName , W .WardName , I .CHFID , I .LastName , I .OtherNames , I .DOB , Prod .ConversionProdID ,
8716+ O .OfficerID , O .Code , O .LastName OffLastName, O .OtherNames OffOtherNames, O .Phone , O .OfficerIDSubst , O .WorksTo
8717+ FROM tblPolicy PL
8718+ INNER JOIN tblFamilies F ON PL .FamilyId = F .FamilyID
8719+ INNER JOIN tblInsuree I ON F .InsureeId = I .InsureeID
8720+ INNER JOIN tblProduct Prod ON PL .ProdId = Prod .ProdID
8721+ INNER JOIN tblVillages V ON V .VillageId = F .LocationId
8722+ INNER JOIN tblWards W ON W .WardId = V .WardId
8723+ INNER JOIN tblDistricts D ON D .DistrictId = W .DistrictId
8724+ INNER JOIN tblOfficer O ON PL .OfficerId = O .OfficerID
8725+ LEFT OUTER JOIN tblPolicyRenewals PR ON PL .PolicyID = PR .PolicyID
8726+ AND I .InsureeID = PR .InsureeID
8727+ WHERE PL .ValidityTo IS NULL
8728+ AND PR .ValidityTo IS NULL
8729+ AND PR .PolicyID IS NULL
8730+ AND PL .PolicyStatus IN (2 , 8 )
8731+ AND (DATEDIFF (DAY , GETDATE (), PL .ExpiryDate ) <= @RemindingInterval OR ISNULL (@RemindingInterval, 0 ) = 0 )
8732+ AND (V .VillageId = @VillageId OR @VillageId IS NULL )
8733+ AND (W .WardId = @WardId OR @WardId IS NULL )
8734+ AND (D .DistrictId = @DistrictId OR @DistrictId IS NULL )
8735+ AND (D .Region = @RegionId OR @RegionId IS NULL )
8736+ AND (O .OfficerId = @OfficerId OR @OfficerId IS NULL )
8737+ AND (PL .ExpiryDate BETWEEN ISNULL (@DateFrom, ' 00010101' ) AND ISNULL (@DateTo, ' 30001231' ))
8738+
8739+ OPEN LOOP1
8740+ FETCH NEXT FROM LOOP1 INTO @PolicyID,@FamilyID,@RenewalDate,@InsureeID,@ProductID, @ProductCode,@ProductName,@ProductFromDate,@ProductToDate,@DistrictName,@VillageName,@WardName,
8741+ @CHFID,@InsLastName,@InsOtherNames,@InsDOB,@ConvProdID,@OfficerID, @OffCode,@OffLastName,@OffOtherNames,@OffPhone,@OffSubstID,@OffWorkTo
8742+
8743+ WHILE @@FETCH_STATUS = 0
8744+ BEGIN
8745+ SET @RenewalWarning = 0
8746+ -- GET ProductCode or the substitution
8747+ IF ISNULL (@ConvProdID,0 ) = 0
8748+ BEGIN
8749+ IF NOT (@RenewalDate BETWEEN @ProductFromDate AND @ProductToDate)
8750+ SET @RenewalWarning = @RenewalWarning + 1
8751+
8752+ END
8753+ ELSE
8754+ BEGIN
8755+ SET @iCount = 0
8756+ WHILE @ConvProdID <> 0 AND @iCount < 20 -- this to prevent a recursive loop by wrong datra entries
8757+ BEGIN
8758+ -- get new product info
8759+ SET @ProductID = @ConvProdID
8760+ SELECT @ConvProdID = ConversionProdID FROM tblProduct WHERE ProdID = @ProductID
8761+ IF ISNULL (@ConvProdID,0 ) = 0
8762+ BEGIN
8763+ SELECT @ProductCode = ProductCode from tblProduct WHERE ProdID = @ProductID
8764+ SELECT @ProductName = ProductName from tblProduct WHERE ProdID = @ProductID
8765+ SELECT @ProductFromDate = DateFrom from tblProduct WHERE ProdID = @ProductID
8766+ SELECT @ProductToDate = DateTo from tblProduct WHERE ProdID = @ProductID
8767+
8768+ IF NOT (@RenewalDate BETWEEN @ProductFromDate AND @ProductToDate)
8769+ SET @RenewalWarning = @RenewalWarning + 1
8770+
8771+ END
8772+ SET @iCount = @iCount + 1
8773+ END
8774+ END
8775+
8776+ IF ISNULL (@OfficerID ,0 ) = 0
8777+ BEGIN
8778+ SET @RenewalWarning = @RenewalWarning + 2
8779+
8780+ END
8781+ ELSE
8782+ BEGIN
8783+ -- GET OfficerCode or the substitution
8784+ IF ISNULL (@OffSubstID,0 ) = 0
8785+ BEGIN
8786+ IF @OffWorkTo < @RenewalDate
8787+ SET @RenewalWarning = @RenewalWarning + 4
8788+ END
8789+ ELSE
8790+ BEGIN
8791+
8792+ SET @iCount = 0
8793+ WHILE @OffSubstID <> 0 AND @iCount < 20 AND @OffWorkTo < @RenewalDate -- this to prevent a recursive loop by wrong datra entries
8794+ BEGIN
8795+ -- get new product info
8796+ SET @OfficerID = @OffSubstID
8797+ SELECT @OffSubstID = OfficerIDSubst FROM tblOfficer WHERE OfficerID = @OfficerID
8798+ IF ISNULL (@OffSubstID,0 ) = 0
8799+ BEGIN
8800+ SELECT @OffCode = Code from tblOfficer WHERE OfficerID = @OfficerID
8801+ SELECT @OffLastName = LastName from tblOfficer WHERE OfficerID = @OfficerID
8802+ SELECT @OffOtherNames = OtherNames from tblOfficer WHERE OfficerID = @OfficerID
8803+ SELECT @OffPhone = Phone from tblOfficer WHERE OfficerID = @OfficerID
8804+ SELECT @OffWorkTo = WorksTo from tblOfficer WHERE OfficerID = @OfficerID
8805+
8806+ IF @OffWorkTo < @RenewalDate
8807+ SET @RenewalWarning = @RenewalWarning + 4
8808+
8809+ END
8810+ SET @iCount = @iCount + 1
8811+ END
8812+ END
8813+ END
8814+
8815+
8816+ -- Code added by Hiren to check if the policy has another following policy
8817+ IF EXISTS (SELECT 1 FROM tblPolicy
8818+ WHERE ValidityTo IS NULL
8819+ AND FamilyId = @FamilyId
8820+ AND (ProdId = @ProductID OR ProdId = @ConvProdID)
8821+ AND StartDate >= @RenewalDate)
8822+
8823+ GOTO NextPolicy;
8824+
8825+ -- Check for validity phone number
8826+ SET @SMSStatus = 0 -- later to be set as the status of sending !!
8827+
8828+ -- Insert only if it's not in the table
8829+ IF NOT EXISTS (SELECT 1 FROM tblPolicyRenewals WHERE PolicyId = @PolicyId AND ValidityTo IS NULL )
8830+ BEGIN
8831+ INSERT INTO [dbo].[tblPolicyRenewals]
8832+ ([RenewalPromptDate]
8833+ ,[RenewalDate]
8834+ ,[NewOfficerID]
8835+ ,[PhoneNumber]
8836+ ,[SMSStatus]
8837+ ,[InsureeID]
8838+ ,[PolicyID]
8839+ ,[NewProdID]
8840+ ,[RenewalWarnings]
8841+ ,[ValidityFrom]
8842+ ,[AuditCreateUser])
8843+ VALUES
8844+ (GETDATE ()
8845+ ,@RenewalDate
8846+ ,@OfficerID
8847+ ,@OffPhone
8848+ ,@SMSStatus
8849+ ,@InsureeID
8850+ ,@PolicyID
8851+ ,@ProductID
8852+ ,@RenewalWarning
8853+ ,GETDATE ()
8854+ ,0 )
8855+
8856+ -- Now get all expired photographs
8857+ SELECT @RenewalID = IDENT_CURRENT(' tblPolicyRenewals' )
8858+
8859+ INSERT INTO [dbo].[tblPolicyRenewalDetails]
8860+ ([RenewalID]
8861+ ,[InsureeID]
8862+ ,[ValidityFrom]
8863+ ,[AuditCreateUser])
8864+
8865+ SELECT @RenewalID,tblInsuree .InsureeID ,GETDATE (),0
8866+ FROM tblFamilies INNER JOIN
8867+ tblInsuree ON tblFamilies .FamilyID = tblInsuree .FamilyID LEFT OUTER JOIN
8868+ tblPhotos ON tblInsuree .PhotoID = tblPhotos .PhotoID
8869+ WHERE tblFamilies .FamilyID = @FamilyID AND tblInsuree .ValidityTo IS NULL AND
8870+ ((tblInsuree .PhotoDate IS NULL )
8871+ OR
8872+ (
8873+ ((DATEDIFF (mm,tblInsuree .PhotoDate ,@RenewalDate) >= 60 )
8874+ OR (
8875+ DATEDIFF (mm,tblInsuree .PhotoDate ,@RenewalDate) >= 12 AND DATEDIFF (y,tblInsuree .DOB ,GETDATE () ) < 18
8876+ ) )
8877+ ))
8878+ END
8879+ NextPolicy:
8880+ FETCH NEXT FROM LOOP1 INTO @PolicyID,@FamilyID,@RenewalDate,@InsureeID,@ProductID, @ProductCode,@ProductName,@ProductFromDate,@ProductToDate,@DistrictName,@VillageName,@WardName,
8881+ @CHFID,@InsLastName,@InsOtherNames,@InsDOB,@ConvProdID,@OfficerID,@OffCode,@OffLastName,@OffOtherNames,@OffPhone,@OffSubstID,@OffWorkTo
8882+
8883+ END
8884+ CLOSE LOOP1
8885+ DEALLOCATE LOOP1
8886+
8887+ END
8888+ GO
0 commit comments