@@ -5375,3 +5375,53 @@ BEGIN
53755375END
53765376GO
53775377
5378+ IF OBJECT_ID (' [uspLastDateForPayment]' , ' P' ) IS NOT NULL
5379+ DROP PROCEDURE [uspLastDateForPayment]
5380+ GO
5381+ CREATE PROCEDURE [dbo].[uspLastDateForPayment]
5382+ (
5383+ @PolicyId INT
5384+ )
5385+ AS
5386+ BEGIN
5387+ DECLARE @ProdId INT ,
5388+ @HasCycle BIT = 0 ,
5389+ @GracePeriod INT ,
5390+ @WaitingPeriod INT ,
5391+ @StartDate DATE ,
5392+ @PolicyStage CHAR (1 ),
5393+ @ExpiryDate DATE ,
5394+ @EnrollDate DATE ,
5395+ @LastDate DATE
5396+
5397+ SELECT @ProdId = ProdId FROM tblPolicy WHERE PolicyId = @PolicyId;
5398+ IF EXISTS (SELECT 1 FROM tblProduct Prod WHERE ProdID = @ProdId AND (StartCycle1 IS NOT NULL OR StartCycle2 IS NOT NULL OR StartCycle3 IS NOT NULL OR StartCycle4 IS NOT NULL ))
5399+ SET @HasCycle = 1 ;
5400+
5401+ SELECT @GracePeriod = CASE PL .PolicyStage WHEN ' N' THEN ISNULL (Prod .GracePeriod , 0 ) WHEN ' R' THEN ISNULL (Prod .GracePeriodRenewal , 0 ) END ,
5402+ @WaitingPeriod = Prod .WaitingPeriod
5403+ FROM tblProduct Prod
5404+ INNER JOIN tblPolicy PL ON PL .ProdId = Prod .ProdId
5405+ WHERE Prod .ProdId = @ProdId;
5406+
5407+ IF @HasCycle = 1
5408+ BEGIN
5409+ PRINT N ' Calculate on Fixed Cycle' ;
5410+ SELECT @StartDate = StartDate FROM tblPolicy WHERE PolicyId = @PolicyId;
5411+ SET @LastDate = DATEADD (MONTH , @GracePeriod, @StartDate)
5412+ PRINT @LastDate
5413+ END
5414+ ELSE
5415+ BEGIN
5416+ PRINT N ' Calculate on Free Cycle' ;
5417+ SELECT @PolicyStage = PolicyStage, @EnrollDate = EnrollDate, @ExpiryDate = ExpiryDate FROM tblPolicy WHERE PolicyId = @PolicyId;
5418+ IF @PolicyStage = ' N'
5419+ SET @LastDate = DATEADD (MONTH , @WaitingPeriod, @EnrollDate);
5420+ IF @PolicyStage = ' R'
5421+ SET @LastDate = DATEADD (MONTH , @WaitingPeriod, DATEADD (DAY , 1 , @ExpiryDate));
5422+ END
5423+
5424+ SELECT DATEADD (DAY , - 1 , @LastDate) LastDate;
5425+ END
5426+ GO
5427+
0 commit comments