@@ -8889,3 +8889,242 @@ NextPolicy:
88898889END
88908890GO
88918891
8892+ IF NOT OBJECT_ID (' uspIsValidRenewal' ) IS NULL
8893+ DROP PROCEDURE uspIsValidRenewal
8894+ GO
8895+
8896+ CREATE PROCEDURE [dbo].[uspIsValidRenewal]
8897+ (
8898+ @FileName NVARCHAR (200 ),
8899+ @XML XML
8900+ )
8901+ /*
8902+ -5: Fatal Error
8903+ 0: All OK
8904+ -1: Duplicate Receipt found
8905+ -2: Grace Period is over
8906+ -3: Renewal was alredy rejected
8907+ -4: Renewal was alredy accepted
8908+
8909+ */
8910+ AS
8911+ BEGIN
8912+ BEGIN TRY
8913+
8914+ -- DECLARE @FilePath NVARCHAR(250)
8915+ -- DECLARE @XML XML
8916+ DECLARE @RenewalId INT
8917+ DECLARE @CHFID VARCHAR (12 )
8918+ DECLARE @ProductCode VARCHAR (15 )
8919+ DECLARE @Officer VARCHAR (15 )
8920+ DECLARE @Date DATE
8921+ DECLARE @Amount DECIMAL (18 ,2 )
8922+ DECLARE @Receipt NVARCHAR (50 )
8923+ DECLARE @Discontinue VARCHAR (10 )
8924+ DECLARE @PayerId INT
8925+ DECLARE @Query NVARCHAR (3000 )
8926+
8927+ DECLARE @FromPhoneId INT = 0 ;
8928+ DECLARE @RecordCount INT = 0
8929+ DECLARE @RenewalOrder INT = 0
8930+ DECLARE @ResponseStatus INT = 0
8931+
8932+ SELECT
8933+ @RenewalId = T .Policy .query(' RenewalId' ).value (' .' ,' INT' ),
8934+ @CHFID = T .Policy .query(' CHFID' ).value (' .' ,' VARCHAR(12)' ),
8935+ @ProductCode = T .Policy .query(' ProductCode' ).value (' .' ,' VARCHAR(15)' ),
8936+ @Officer = T .Policy .query(' Officer' ).value (' .' ,' VARCHAR(15)' ) ,
8937+ @Date = T .Policy .query(' Date' ).value (' .' ,' DATE' ),
8938+ @Amount = T .Policy .query(' Amount' ).value (' .' ,' DECIMAL(18,2)' ),
8939+ @Receipt = T .Policy .query(' ReceiptNo' ).value (' .' ,' NVARCHAR(50)' ),
8940+ @Discontinue = T .policy .query(' Discontinue' ).value (' .' ,' VARCHAR(10)' ),
8941+ @PayerId = NULLIF (T .policy .query(' PayerId' ).value (' .' , ' INT' ), 0 )
8942+ FROM
8943+ @XML.nodes (' Policy' ) AS T(Policy );
8944+
8945+ IF NOT ( @XML.exist(' (Policy/RenewalId)' )= 1 )
8946+ RETURN - 5
8947+
8948+
8949+ -- Checking if the renewal already exists and get the status
8950+ DECLARE @DocStatus NVARCHAR (1 )
8951+ SELECT @DocStatus = FP .DocStatus FROM tblPolicyRenewals PR
8952+ INNER JOIN tblOfficer O ON PR .NewOfficerID = O .OfficerID
8953+ INNER JOIN tblFromPhone FP ON FP .OfficerCode = O .Code
8954+ WHERE O .ValidityTo IS NULL
8955+ AND OfficerCode = @Officer AND CHFID = @CHFID AND PR .RenewalID = @RenewalId
8956+
8957+
8958+
8959+ -- Insert the file details in the tblFromPhone
8960+ -- Initially we keep to DocStatus REJECTED and once the renewal is accepted we will update the Status
8961+ INSERT INTO tblFromPhone(DocType, DocName, DocStatus, OfficerCode, CHFID)
8962+ SELECT N ' R' DocType, @FileName DocName, N ' R' DocStatus, @Officer OfficerCode, @CHFID CHFID;
8963+
8964+ SELECT @FromPhoneId = SCOPE_IDENTITY ();
8965+
8966+ DECLARE @PreviousPolicyId INT = 0
8967+
8968+ SELECT @PreviousPolicyId = PolicyId,@ResponseStatus= ResponseStatus FROM tblPolicyRenewals WHERE ValidityTo IS NULL AND RenewalID = @RenewalId;
8969+ IF @ResponseStatus = 1
8970+ BEGIN
8971+ RETURN - 4
8972+ END
8973+
8974+
8975+ DECLARE @Tbl TABLE (Id INT )
8976+
8977+ INSERT INTO @Tbl(Id)
8978+ SELECT TOP 1 I .InsureeID Result
8979+ FROM tblInsuree I INNER JOIN tblPolicy PL ON I .FamilyID = PL .FamilyID
8980+ INNER JOIN tblProduct PR ON PL .ProdID = PR .ProdID
8981+ WHERE CHFID = @CHFID
8982+ AND PR .ProductCode = @ProductCode
8983+ AND I .ValidityTo IS NULL
8984+ AND PL .ValidityTo IS NULL
8985+ UNION ALL
8986+ SELECT OfficerID
8987+ FROM tblOfficer
8988+ WHERE Code = @Officer
8989+ AND ValidityTo IS NULL
8990+
8991+
8992+ DECLARE @FamilyID INT = (SELECT FamilyId from tblInsuree WHERE CHFID = @CHFID AND ValidityTo IS NULL )
8993+ DECLARE @ProdId INT
8994+ DECLARE @StartDate DATE
8995+ DECLARE @ExpiryDate DATE
8996+ DECLARE @HasCycle BIT
8997+ -- PAUL -24/04/2019 INSERTED @@AND tblPolicy.ValidityTo@@ to ensure that query does not include deleted policies
8998+ SELECT TOP 1 @ProdId = tblPolicy .ProdID , @ExpiryDate = tblPolicy .ExpiryDate from tblPolicy INNER JOIN tblProduct ON tblPolicy .ProdID = tblProduct .ProdID AND tblPolicy .ValidityTo IS NULL WHERE FamilyID = @FamilyID AND tblProduct .ProductCode = @ProductCode AND tblProduct .ValidityTo IS NULL ORDER BY ExpiryDate DESC
8999+
9000+ IF EXISTS (SELECT 1 FROM tblPremium PR INNER JOIN tblPolicy PL ON PR .PolicyID = PL .PolicyID
9001+ WHERE PR .Receipt = @Receipt
9002+ AND PL .ProdID = @ProdId
9003+ AND PR .ValidityTo IS NULL )
9004+
9005+ RETURN - 1 ;
9006+
9007+ -- Check if the renewal is not after the grace period
9008+ DECLARE @LastRenewalDate DATE
9009+ SELECT @LastRenewalDate = DATEADD (MONTH ,GracePeriodRenewal,DATEADD (DAY ,1 ,@ExpiryDate))
9010+ FROM tblProduct
9011+ WHERE ValidityTo IS NULL
9012+ AND ProdId = @ProdId;
9013+
9014+
9015+ -- IF EXISTS(SELECT 1 FROM tblProduct WHERE ProdId = @ProdId AND LEN(StartCycle1) > 0)
9016+ -- --CHECK IF IT IS A FREE PRODUCT AND IGNORE GRACE PERIOD RENEWAL, IF IS NOT A FREE PRODUCT RETURN -2
9017+ -- IF @LastRenewalDate < @Date
9018+ -- BEGIN
9019+ -- RETURN -2
9020+ -- END
9021+ SELECT @RecordCount = COUNT (1 ) FROM @Tbl;
9022+
9023+
9024+
9025+
9026+ IF @RecordCount = 2
9027+ BEGIN
9028+ IF @Discontinue = ' false' OR @Discontinue = N ' '
9029+ BEGIN
9030+
9031+ DECLARE @tblPeriod TABLE (StartDate DATE , ExpiryDate DATE , HasCycle BIT )
9032+ DECLARE @EnrolmentDate DATE = DATEADD (D,1 ,@ExpiryDate)
9033+ INSERT INTO @tblPeriod
9034+ EXEC uspGetPolicyPeriod @ProdId, @Date, @HasCycle OUTPUT ,' R' ;
9035+
9036+ DECLARE @ExpiryDatePreviousPolicy DATE
9037+
9038+ SELECT @ExpiryDatePreviousPolicy = ExpiryDate FROM tblPolicy WHERE PolicyID= @PreviousPolicyId AND ValidityTo IS NULL
9039+
9040+
9041+ IF @HasCycle = 1
9042+ BEGIN
9043+ SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
9044+ IF @StartDate < @ExpiryDatePreviousPolicy
9045+ BEGIN
9046+ UPDATE @tblPeriod SET StartDate= DATEADD (DAY , 1 , @ExpiryDatePreviousPolicy)
9047+ SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
9048+ END
9049+ END
9050+ ELSE
9051+ BEGIN
9052+
9053+ IF @Date < @ExpiryDate
9054+ SELECT @StartDate = DATEADD (D,1 ,@ExpiryDate), @ExpiryDate = DATEADD (DAY ,- 1 ,DATEADD (MONTH ,InsurancePeriod,DATEADD (D,1 ,@ExpiryDate))) FROM tblProduct WHERE ProdID = @ProdId;
9055+ ELSE
9056+ SELECT @StartDate = @Date, @ExpiryDate = DATEADD (DAY ,- 1 ,DATEADD (MONTH ,InsurancePeriod,@Date)) FROM tblProduct WHERE ProdID = @ProdId;
9057+ END
9058+
9059+
9060+
9061+ DECLARE @OfficerID INT = (SELECT OfficerID FROM tblOfficer WHERE Code = @Officer AND ValidityTo IS NULL )
9062+ DECLARE @PolicyValue DECIMAL (18 ,2 )
9063+
9064+ SET @EnrolmentDate = @Date
9065+ EXEC @PolicyValue = uspPolicyValue
9066+ @FamilyId = @FamilyID,
9067+ @ProdId = @ProdId,
9068+ @EnrollDate = @EnrolmentDate,
9069+ @PreviousPolicyId = @PreviousPolicyId,
9070+ @PolicyStage = ' R' ;
9071+
9072+ DECLARE @PolicyStatus TINYINT = 2
9073+
9074+ IF @Amount < @PolicyValue SET @PolicyStatus = 1
9075+
9076+ INSERT INTO tblPolicy(FamilyID, EnrollDate, StartDate, EffectiveDate, ExpiryDate, PolicyStatus, PolicyValue, ProdID, OfficerID, AuditUserID, PolicyStage)
9077+ VALUES (@FamilyID, @Date, @StartDate, @StartDate,@ExpiryDate, @PolicyStatus, @PolicyValue, @ProdId, @OfficerID, 0 , ' R' )
9078+
9079+ DECLARE @PolicyID INT = (SELECT SCOPE_IDENTITY ())
9080+
9081+ -- No need to create if the payment is not made yet
9082+ IF @Amount > 0
9083+ BEGIN
9084+ INSERT INTO tblPremium(PolicyID, Amount, Receipt, PayDate, PayType, AuditUserID, PayerID)
9085+ Values (@PolicyID, @Amount, @Receipt, @Date, ' C' ,0 , @PayerId)
9086+ END
9087+
9088+
9089+ DECLARE @InsureeId INT
9090+ DECLARE CurNewPolicy CURSOR FOR SELECT I .InsureeID FROM tblInsuree I
9091+ INNER JOIN tblFamilies F ON I .FamilyID = F .FamilyID
9092+ INNER JOIN tblPolicy P ON P .FamilyID = F .FamilyID
9093+ WHERE P .PolicyId = @PolicyId
9094+ AND I .ValidityTo IS NULL
9095+ AND F .ValidityTo IS NULL
9096+ AND P .ValidityTo IS NULL
9097+ OPEN CurNewPolicy;
9098+ FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
9099+ WHILE @@FETCH_STATUS = 0
9100+ BEGIN
9101+ EXEC uspAddInsureePolicy @InsureeId;
9102+ FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
9103+ END
9104+ CLOSE CurNewPolicy;
9105+ DEALLOCATE CurNewPolicy;
9106+
9107+ UPDATE tblPolicyRenewals SET ResponseStatus = 1 , ResponseDate = GETDATE () WHERE RenewalId = @RenewalId;
9108+ END
9109+ ELSE
9110+ BEGIN
9111+ UPDATE tblPolicyRenewals SET ResponseStatus = 2 , ResponseDate = GETDATE () WHERE RenewalId = @RenewalId
9112+ END
9113+
9114+ UPDATE tblFromPhone SET DocStatus = N ' A' WHERE FromPhoneId = @FromPhoneId;
9115+
9116+ SELECT * FROM @Tbl;
9117+ END
9118+ ELSE
9119+ BEGIN
9120+ RETURN - 5
9121+ END
9122+ END TRY
9123+ BEGIN CATCH
9124+ SELECT ERROR_MESSAGE ()
9125+ RETURN - 1
9126+ END CATCH
9127+
9128+ RETURN 0
9129+ END
9130+ GO
0 commit comments