Skip to content

Commit fc8fdd8

Browse files
committed
add payment SMS
1 parent 466691f commit fc8fdd8

2 files changed

Lines changed: 353 additions & 1 deletion

File tree

394 Bytes
Binary file not shown.

Migration script/openIMIS migration latest.sql

Lines changed: 353 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,24 @@ BEGIN
8181
END
8282
GO
8383

84+
IF COL_LENGTH('tblPayment', 'SmsRequired') IS NULL
85+
BEGIN
86+
ALTER TABLE tblPayment ADD [SmsRequired] [bit] NULL
87+
END
88+
GO
89+
90+
if not exists (
91+
select *
92+
from sys.all_columns c
93+
join sys.tables t on t.object_id = c.object_id
94+
join sys.schemas s on s.schema_id = t.schema_id
95+
join sys.default_constraints d on c.default_object_id = d.object_id
96+
where t.name = 'tblPayment'
97+
and c.name = 'PaymentUUID'
98+
and s.name = 'dbo')
99+
ALTER TABLE [dbo].[tblPayment] ADD DEFAULT (newid()) FOR PaymentUUID
100+
GO
101+
84102
ALTER VIEW [dbo].[uvwLocations]
85103
AS
86104
SELECT 0 LocationId, null VillageId, null VillageName,NULL VillageCode, null WardId, null WardName,NULL WardCode, null DistrictId,null DistrictName, NULL DistrictCode, NULL RegionId, N'National' RegionName, null RegionCode, 0 ParentLocationId
@@ -4451,7 +4469,7 @@ BEGIN TRY
44514469
--DISTRIBUTE PAYMENTS
44524470
DECLARE @curPaymentID int, @ReceivedAmount DECIMAL(18,2), @TotalPolicyValue DECIMAL(18,2), @AmountAvailable DECIMAL(18,2)
44534471
DECLARE CUR_Pay CURSOR FAST_FORWARD FOR
4454-
SELECT PH.PaymentID, ReceivedAmount, TotalPolicyValue FROM @tblHeader PH
4472+
SELECT PH.PaymentID, ReceivedAmount FROM @tblHeader PH
44554473
OPEN CUR_Pay
44564474
FETCH NEXT FROM CUR_Pay INTO @curPaymentID, @ReceivedAmount
44574475
WHILE @@FETCH_STATUS = 0
@@ -5021,5 +5039,339 @@ END TRY
50215039
END CATCH
50225040

50235041
END
5042+
GO
50245043

50255044
SET ANSI_NULLS ON
5045+
5046+
5047+
IF OBJECT_ID('[uspInsertPaymentIntent]', 'P') IS NOT NULL
5048+
DROP PROCEDURE [uspInsertPaymentIntent]
5049+
GO
5050+
CREATE PROCEDURE [dbo].[uspInsertPaymentIntent]
5051+
(
5052+
@XML XML,
5053+
@ExpectedAmount DECIMAL(18,2) = 0 OUT,
5054+
@PaymentID INT = 0 OUT,
5055+
@ErrorNumber INT = 0,
5056+
@ErrorMsg NVARCHAR(255)=NULL,
5057+
@ProvidedAmount decimal(18,2) = 0,
5058+
@PriorEnrollment BIT = 0
5059+
5060+
)
5061+
5062+
AS
5063+
BEGIN
5064+
DECLARE @tblHeader TABLE(officerCode nvarchar(12),requestDate DATE, phoneNumber NVARCHAR(50),LanguageName NVARCHAR(10),SmsRequired BIT, AuditUSerID INT)
5065+
DECLARE @tblDetail TABLE(InsuranceNumber nvarchar(12),productCode nvarchar(8), PolicyStage NVARCHAR(1), isRenewal BIT, PolicyValue DECIMAL(18,2), isExisting BIT)
5066+
DECLARE @OfficerLocationID INT
5067+
DECLARE @OfficerParentLocationID INT
5068+
DECLARE @AdultMembers INT
5069+
DECLARE @ChildMembers INT
5070+
DECLARE @oAdultMembers INT
5071+
DECLARE @oChildMembers INT
5072+
5073+
5074+
DECLARE @isEO BIT
5075+
INSERT INTO @tblHeader(officerCode, requestDate, phoneNumber,LanguageName, SmsRequired, AuditUSerID)
5076+
SELECT
5077+
LEFT(NULLIF(T.H.value('(OfficerCode)[1]','NVARCHAR(50)'),''),12),
5078+
NULLIF(T.H.value('(RequestDate)[1]','NVARCHAR(50)'),''),
5079+
LEFT(NULLIF(T.H.value('(PhoneNumber)[1]','NVARCHAR(50)'),''),50),
5080+
NULLIF(T.H.value('(LanguageName)[1]','NVARCHAR(10)'),''),
5081+
T.H.value('(SmsRequired)[1]','BIT'),
5082+
NULLIF(T.H.value('(AuditUserId)[1]','INT'),'')
5083+
FROM @XML.nodes('PaymentIntent/Header') AS T(H)
5084+
5085+
INSERT INTO @tblDetail(InsuranceNumber, productCode, isRenewal)
5086+
SELECT
5087+
LEFT(NULLIF(T.D.value('(InsuranceNumber)[1]','NVARCHAR(12)'),''),12),
5088+
LEFT(NULLIF(T.D.value('(ProductCode)[1]','NVARCHAR(8)'),''),8),
5089+
T.D.value('(IsRenewal)[1]','BIT')
5090+
FROM @XML.nodes('PaymentIntent/Details/Detail') AS T(D)
5091+
5092+
IF @ErrorNumber != 0
5093+
BEGIN
5094+
GOTO Start_Transaction;
5095+
END
5096+
5097+
SELECT @AdultMembers =T.P.value('(AdultMembers)[1]','INT'), @ChildMembers = T.P.value('(ChildMembers)[1]','INT') , @oAdultMembers =T.P.value('(oAdultMembers)[1]','INT') , @oChildMembers = T.P.value('(oChildMembers)[1]','INT') FROM @XML.nodes('PaymentIntent/ProxySettings') AS T(P)
5098+
5099+
SELECT @AdultMembers= ISNULL(@AdultMembers,0), @ChildMembers= ISNULL(@ChildMembers,0), @oAdultMembers= ISNULL(@oAdultMembers,0), @oChildMembers= ISNULL(@oChildMembers,0)
5100+
5101+
5102+
UPDATE D SET D.isExisting = 1 FROM @tblDetail D
5103+
INNER JOIN tblInsuree I ON D.InsuranceNumber = I.CHFID
5104+
WHERE I.IsHead = 1 AND I.ValidityTo IS NULL
5105+
5106+
UPDATE @tblDetail SET isExisting = 0 WHERE isExisting IS NULL
5107+
5108+
IF EXISTS(SELECT 1 FROM @tblHeader WHERE officerCode IS NOT NULL)
5109+
SET @isEO = 1
5110+
/**********************************************************************************************************************
5111+
VALIDATION STARTS
5112+
*********************************************************************************************************************/
5113+
/*Error Codes
5114+
2- Not valid insurance or missing product code
5115+
3- Not valid enrolment officer code
5116+
4 –Enrolment officer code and insurance product code are not compatible
5117+
5- Beneficiary has no policy of specified insurance product for renewal
5118+
6- Can not issue a control number as default indicated prior enrollment and Insuree has not been enrolled yet
5119+
5120+
7 - 'Insuree not enrolled and prior enrolement mandatory'
5121+
5122+
5123+
-1. Unexpected error
5124+
0. Success
5125+
*/
5126+
5127+
--2. Insurance number missing
5128+
IF EXISTS(SELECT 1 FROM @tblDetail WHERE LEN(ISNULL(InsuranceNumber,'')) =0)
5129+
BEGIN
5130+
SET @ErrorNumber = 2
5131+
SET @ErrorMsg ='Not valid insurance or missing product code'
5132+
GOTO Start_Transaction;
5133+
END
5134+
5135+
--4. Missing product or Product does not exists
5136+
IF EXISTS(SELECT 1 FROM @tblDetail D
5137+
LEFT OUTER JOIN tblProduct P ON P.ProductCode = D.productCode
5138+
WHERE
5139+
(P.ValidityTo IS NULL AND P.ProductCode IS NULL)
5140+
OR D.productCode IS NULL
5141+
)
5142+
BEGIN
5143+
SET @ErrorNumber = 4
5144+
SET @ErrorMsg ='Not valid insurance or missing product code'
5145+
GOTO Start_Transaction;
5146+
END
5147+
5148+
5149+
--3. Invalid Officer Code
5150+
IF EXISTS(SELECT 1 FROM @tblHeader H
5151+
LEFT JOIN tblOfficer O ON H.officerCode = O.Code
5152+
WHERE O.ValidityTo IS NULL
5153+
AND H.officerCode IS NOT NULL
5154+
AND O.Code IS NULL
5155+
)
5156+
BEGIN
5157+
SET @ErrorNumber = 3
5158+
SET @ErrorMsg ='Not valid enrolment officer code'
5159+
GOTO Start_Transaction;
5160+
END
5161+
5162+
5163+
--4. Wrong match of Enrollment Officer agaists Product
5164+
SELECT @OfficerLocationID= L.LocationId, @OfficerParentLocationID = L.ParentLocationId FROM tblLocations L
5165+
INNER JOIN tblOfficer O ON O.LocationId = L.LocationId AND O.Code = (SELECT officerCode FROM @tblHeader WHERE officerCode IS NOT NULL)
5166+
WHERE
5167+
L.ValidityTo IS NULL
5168+
AND O.ValidityTo IS NULL
5169+
5170+
5171+
IF EXISTS(SELECT D.productCode, P.ProductCode FROM @tblDetail D
5172+
LEFT OUTER JOIN tblProduct P ON P.ProductCode = D.productCode AND (P.LocationId IS NULL OR P.LocationId = @OfficerLocationID OR P.LocationId = @OfficerParentLocationID)
5173+
WHERE
5174+
P.ValidityTo IS NULL
5175+
AND P.ProductCode IS NULL
5176+
) AND EXISTS(SELECT 1 FROM @tblHeader WHERE officerCode IS NOT NULL)
5177+
BEGIN
5178+
SET @ErrorNumber = 4
5179+
SET @ErrorMsg ='Enrolment officer code and insurance product code are not compatible'
5180+
GOTO Start_Transaction;
5181+
END
5182+
5183+
5184+
--The family does't contain this product for renewal
5185+
IF EXISTS(SELECT 1 FROM @tblDetail D
5186+
LEFT OUTER JOIN tblProduct PR ON PR.ProductCode = D.productCode
5187+
LEFT OUTER JOIN tblInsuree I ON I.CHFID = D.InsuranceNumber
5188+
LEFT OUTER JOIN tblPolicy PL ON PL.FamilyID = I.FamilyID AND PL.ProdID = PR.ProdID
5189+
WHERE PR.ValidityTo IS NULL
5190+
AND D.isRenewal = 1 AND D.isExisting = 1
5191+
AND I.ValidityTo IS NULL
5192+
AND PL.ValidityTo IS NULL AND PL.PolicyID IS NULL)
5193+
BEGIN
5194+
SET @ErrorNumber = 5
5195+
SET @ErrorMsg ='Beneficiary has no policy of specified insurance product for renewal'
5196+
GOTO Start_Transaction;
5197+
END
5198+
5199+
5200+
5201+
--5. Proxy family can not renew
5202+
IF EXISTS(SELECT 1 FROM @tblDetail WHERE isExisting =0 AND isRenewal= 1)
5203+
BEGIN
5204+
SET @ErrorNumber = 5
5205+
SET @ErrorMsg ='Beneficiary has no policy of specified insurance product for renewal'
5206+
GOTO Start_Transaction;
5207+
END
5208+
5209+
5210+
--7. Insurance number not existing in system
5211+
IF @PriorEnrollment = 1 AND EXISTS(SELECT 1 FROM @tblDetail D
5212+
LEFT OUTER JOIN tblProduct PR ON PR.ProductCode = D.productCode
5213+
LEFT OUTER JOIN tblInsuree I ON I.CHFID = D.InsuranceNumber
5214+
LEFT OUTER JOIN tblPolicy PL ON PL.FamilyID = I.FamilyID AND PL.ProdID = PR.ProdID
5215+
WHERE PR.ValidityTo IS NULL
5216+
AND I.ValidityTo IS NULL
5217+
AND PL.ValidityTo IS NULL AND PL.PolicyID IS NULL)
5218+
BEGIN
5219+
SET @ErrorNumber = 7
5220+
SET @ErrorMsg ='Insuree not enrolled and prior enrollment mandatory'
5221+
GOTO Start_Transaction;
5222+
END
5223+
5224+
5225+
5226+
5227+
/**********************************************************************************************************************
5228+
VALIDATION ENDS
5229+
*********************************************************************************************************************/
5230+
/**********************************************************************************************************************
5231+
CALCULATIONS STARTS
5232+
*********************************************************************************************************************/
5233+
5234+
DECLARE @FamilyId INT, @ProductId INT, @PrevPolicyID INT, @PolicyID INT, @PremiumID INT
5235+
DECLARE @PolicyStatus TINYINT=1
5236+
DECLARE @PolicyValue DECIMAL(18,2), @PolicyStage NVARCHAR(1), @InsuranceNumber nvarchar(12), @productCode nvarchar(8), @enrollmentDate DATE, @isRenewal BIT, @isExisting BIT, @ErrorCode NVARCHAR(50)
5237+
5238+
IF @ProvidedAmount = 0
5239+
BEGIN
5240+
--only calcuylate if we want the system to provide a value to settle
5241+
DECLARE CurFamily CURSOR FOR SELECT InsuranceNumber, productCode, isRenewal, isExisting FROM @tblDetail
5242+
OPEN CurFamily
5243+
FETCH NEXT FROM CurFamily INTO @InsuranceNumber, @productCode, @isRenewal, @isExisting;
5244+
WHILE @@FETCH_STATUS = 0
5245+
BEGIN
5246+
5247+
SET @PolicyStatus=1
5248+
SET @FamilyId = NULL
5249+
SET @ProductId = NULL
5250+
SET @PolicyID = NULL
5251+
5252+
5253+
IF @isRenewal = 1
5254+
SET @PolicyStage = 'R'
5255+
ELSE
5256+
SET @PolicyStage ='N'
5257+
5258+
IF @isExisting = 1
5259+
BEGIN
5260+
5261+
SELECT @FamilyId = FamilyId FROM tblInsuree I WHERE IsHead = 1 AND CHFID = @InsuranceNumber AND ValidityTo IS NULL
5262+
SELECT @ProductId = ProdID FROM tblProduct WHERE ProductCode = @productCode AND ValidityTo IS NULL
5263+
SELECT TOP 1 @PolicyID = PolicyID FROM tblPolicy WHERE FamilyID = @FamilyId AND ProdID = @ProductId AND PolicyStage = @PolicyStage AND ValidityTo IS NULL ORDER BY EnrollDate DESC
5264+
5265+
IF @isEO = 1
5266+
IF EXISTS(SELECT 1 FROM tblPremium WHERE PolicyID = @PolicyID AND ValidityTo IS NULL)
5267+
BEGIN
5268+
SELECT @PolicyValue = ISNULL(PR.Amount - ISNULL(MatchedAmount,0),0) FROM tblPremium PR
5269+
INNER JOIN tblPolicy PL ON PL.PolicyID = PR.PolicyID
5270+
LEFT OUTER JOIN (SELECT PremiumID, SUM (Amount) MatchedAmount from tblPaymentDetails WHERE ValidityTo IS NULL GROUP BY PremiumID ) PD ON PD.PremiumID = PR.PremiumId
5271+
WHERE
5272+
PR.ValidityTo IS NULL
5273+
AND PL.ValidityTo IS NULL AND PL.PolicyID = @PolicyID
5274+
IF @PolicyValue < 0
5275+
SET @PolicyValue = 0.00
5276+
END
5277+
ELSE
5278+
BEGIN
5279+
EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, @PolicyStage, NULL, 0;
5280+
END
5281+
5282+
ELSE IF @PolicyStage ='N'
5283+
BEGIN
5284+
EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, 'N', NULL, 0;
5285+
END
5286+
ELSE
5287+
BEGIN
5288+
SELECT TOP 1 @PrevPolicyID = PolicyID, @PolicyStatus = PolicyStatus FROM tblPolicy WHERE ProdID = @ProductId AND FamilyID = @FamilyId AND ValidityTo IS NULL AND PolicyStatus != 4 ORDER BY EnrollDate DESC
5289+
IF @PolicyStatus = 1
5290+
BEGIN
5291+
SELECT @PolicyValue = (ISNULL(SUM(PL.PolicyValue),0) - ISNULL(SUM(Amount),0)) FROM tblPolicy PL
5292+
LEFT OUTER JOIN tblPremium PR ON PR.PolicyID = PL.PolicyID
5293+
WHERE PL.ValidityTo IS NULL
5294+
AND PR.ValidityTo IS NULL
5295+
AND PL.PolicyID = @PrevPolicyID
5296+
IF @PolicyValue < 0
5297+
SET @PolicyValue =0
5298+
END
5299+
ELSE
5300+
BEGIN
5301+
EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, 'R', @enrollmentDate, @PrevPolicyID, @ErrorCode OUTPUT;
5302+
END
5303+
END
5304+
END
5305+
ELSE
5306+
BEGIN
5307+
EXEC @PolicyValue = uspPolicyValueProxyFamily @productCode, @AdultMembers, @ChildMembers,@oAdultMembers,@oChildMembers
5308+
END
5309+
UPDATE @tblDetail SET PolicyValue = ISNULL(@PolicyValue,0), PolicyStage = @PolicyStage WHERE InsuranceNumber = @InsuranceNumber AND productCode = @productCode AND isRenewal = @isRenewal
5310+
FETCH NEXT FROM CurFamily INTO @InsuranceNumber, @productCode, @isRenewal, @isExisting;
5311+
END
5312+
CLOSE CurFamily
5313+
DEALLOCATE CurFamily;
5314+
5315+
5316+
5317+
END
5318+
5319+
5320+
5321+
5322+
--IF IT REACHES UP TO THIS POINT THEN THERE IS NO ERROR
5323+
SET @ErrorNumber = 0
5324+
SET @ErrorMsg = NULL
5325+
5326+
5327+
/**********************************************************************************************************************
5328+
CALCULATIONS ENDS
5329+
*********************************************************************************************************************/
5330+
5331+
/**********************************************************************************************************************
5332+
INSERTION STARTS
5333+
*********************************************************************************************************************/
5334+
Start_Transaction:
5335+
BEGIN TRY
5336+
BEGIN TRANSACTION INSERTPAYMENTINTENT
5337+
5338+
IF @ProvidedAmount > 0
5339+
SET @ExpectedAmount = @ProvidedAmount
5340+
ELSE
5341+
SELECT @ExpectedAmount = SUM(ISNULL(PolicyValue,0)) FROM @tblDetail
5342+
5343+
SET @ErrorMsg = ISNULL(CONVERT(NVARCHAR(5),@ErrorNumber)+': '+ @ErrorMsg,NULL)
5344+
--Inserting Payment
5345+
INSERT INTO [dbo].[tblPayment]
5346+
([ExpectedAmount],[OfficerCode],[PhoneNumber],[RequestDate],[PaymentStatus],[ValidityFrom],[AuditedUSerID],[RejectedReason],[LanguageName],[SmsRequired])
5347+
SELECT
5348+
@ExpectedAmount, officerCode, phoneNumber, GETDATE(),CASE @ErrorNumber WHEN 0 THEN 0 ELSE -1 END, GETDATE(), AuditUSerID, @ErrorMsg,LanguageName,SmsRequired
5349+
FROM @tblHeader
5350+
SELECT @PaymentID= SCOPE_IDENTITY();
5351+
5352+
--Inserting Payment Details
5353+
DECLARE @AuditedUSerID INT
5354+
SELECT @AuditedUSerID = AuditUSerID FROM @tblHeader
5355+
INSERT INTO [dbo].[tblPaymentDetails]
5356+
([PaymentID],[ProductCode],[InsuranceNumber],[PolicyStage],[ValidityFrom],[AuditedUserId], ExpectedAmount) SELECT
5357+
@PaymentID, productCode, InsuranceNumber, CASE isRenewal WHEN 0 THEN 'N' ELSE 'R' END, GETDATE(), @AuditedUSerID, PolicyValue
5358+
FROM @tblDetail D
5359+
5360+
5361+
5362+
COMMIT TRANSACTION INSERTPAYMENTINTENT
5363+
RETURN @ErrorNumber
5364+
END TRY
5365+
BEGIN CATCH
5366+
ROLLBACK TRANSACTION INSERTPAYMENTINTENT
5367+
SELECT ERROR_MESSAGE()
5368+
RETURN -1
5369+
END CATCH
5370+
5371+
/**********************************************************************************************************************
5372+
INSERTION ENDS
5373+
*********************************************************************************************************************/
5374+
5375+
END
5376+
GO
5377+

0 commit comments

Comments
 (0)