Vos
/* LLP On the bais of Principal overdue Ignored Interest OverDue*/
SET NOCOUNT ON;
DECLARE
@BranchCode VARCHAR (3),
@Today DATETIME,
@FromDate DATE,
@ToDate DATE
SELECT @Today = Today FROM ControlTable (NOLOCK);
--SELECT @FromDate = CONVERT(datetime2,'01-01-2019')
--SELECT @ToDate = CONVERT(datetime2,'18-08-2019' )
SELECT @BranchCode = '001'
--SELECT @BranchCode = 'ALL'
SELECT
'BBB'=M.BranchCode,'AT'=AcType,M.Obligor,M.ClientCode,M.MainCode,C.Name,
'Address'=Address1,Phone,M.Limit ,
'O/S GoodBaln' = SUM(ISNULL(ABS(M.GoodBaln),0)),
'OverduePrin' = ISNULL(SUM(ISNULL(DuePrincipal,0)-ISNULL(PaidPrincipal,0)) ,0),
'PrinODDate'=
(
SELECT MIN(DueDate)
FROM LoanRepaySched S (NOLOCK)
WHERE S.MainCode = M.MainCode
and (ISNULL(DuePrincipal,0)-ISNULL(PaidPrincipal,0))<>0
),
'Accr. Int' = SUM(ISNULL(M.IntDrAmt,0)),
'OverDueInterest' = ISNULL(SUM(ISNULL(DueInterest,0)-ISNULL(PaidInterest,0)),0) ,
'IntODDate' =
CASE WHEN (SELECT MIN(DueDate) FROM LoanRepaySched S (NOLOCK)
WHERE S.MainCode = M.MainCode
and (ISNULL(DueInterest,0)-ISNULL(PaidInterest,0))<>0
AND ISNULL(DueInterest,0)<>0
GROUP BY MainCode
) > @Today THEN NULL ELSE
(
SELECT MIN(DueDate) FROM LoanRepaySched S (NOLOCK)
WHERE S.MainCode = M.MainCode
and (ISNULL(DueInterest,0)-ISNULL(PaidInterest,0))<>0
AND ISNULL(DueInterest,0)<>0
GROUP BY MainCode
) END
INTO #TEMPOD
FROM Master M (NOLOCK),ClientTable C (NOLOCK),LoanRepaySched L (NOLOCK)
WHERE M.ClientCode=C.ClientCode
AND M.MainCode=L.MainCode
--AND L.MainCode = L1.MainCode
--AND L.MainCode = L2.MainCode
AND M.AcType NOT IN (SELECT distinct AcType FROM CustTypeAcType WHERE CustTypeCode = '5')
AND DueDate< @Today
AND IsBlocked<>'C'
AND M.BranchCode = CASE WHEN UPPER(@BranchCode) = 'ALL' THEN M.BranchCode ELSE @BranchCode END
AND GoodBaln<0
GROUP BY M.BranchCode, AcType,M.MainCode, C.Name,Address1,Phone,M.Limit, L.MainCode, M.Obligor, M.ClientCode
HAVING (SUM(ISNULL(DuePrincipal,0)-ISNULL(PaidPrincipal,0))<>0 OR SUM(ISNULL(DueInterest,0)-ISNULL(PaidInterest,0))<>0)
UNION ALL
SELECT
M.BranchCode,AcType,M.Obligor,M.ClientCode,M.MainCode,M.Name,
Address1,Phone,M.Limit,
'O/S GoodBaln' = ABS(M.GoodBaln),
'OverduePrin' = CASE WHEN M.LimitExpiryDate <= @Today THEN ISNULL(ABS(M.GoodBaln),0) ELSE 0 END,
'PrinODDate' = M.LimitExpiryDate,--CASE WHEN M.LimitExpiryDate <= @Today THEN M.LimitExpiryDate ELSE NULL END,
M.IntDrAmt,
'ODInt'= (SELECT SUM(ISNULL(DrInt,0)) FROM PastDuedList P(NOLOCK) WHERE P.ReferenceNo = M.MainCode AND IsIntDue = 'T'),
--O.IntODDate
(SELECT MIN(DueDate) FROM PastDuedList P(NOLOCK)
WHERE P.ReferenceNo = M.MainCode
AND IsIntDue = 'T'
) as IntODDate
FROM Master M(NOLOCK), ClientTable C(NOLOCK)
--,
-- (
-- SELECT BranchCode, ReferenceNo, 'IntODDate' = MIN(DueDate)
-- FROM PastDuedList P(NOLOCK)
-- GROUP BY BranchCode, ReferenceNo
-- ) AS O
WHERE M.IsNormalDr = 'T'
--AND M.MainCode = O.ReferenceNo
--AND M.BranchCode = O.BranchCode
AND M.AcType NOT IN (SELECT distinct AcType FROM CustTypeAcType (NOLOCK) WHERE CustTypeCode = '5')
AND M.BranchCode = CASE WHEN UPPER(@BranchCode) = 'ALL' THEN M.BranchCode ELSE @BranchCode END
AND M.ClientCode = C.ClientCode
AND M.MainCode NOT IN (SELECT distinct MainCode FROM LoanMaster WHERE HasRepaySched = 'T')
and M.AcTypeType ='C'
--SELECT * FROM #TEMPOD
---------
SELECT
M.BranchCode,M.Obligor,M.ClientCode,MainCode,Name,
'DisbursementDate' =
CASE WHEN M.AcType<'51' THEN CONVERT(VARCHAR(10),AcOpenDate,103)
WHEN (SELECT MoveType From Master(NOLOCK) WHERE MainCode = M.MainCode)= '3'
THEN CONVERT(VARCHAR(10),AcOpenDate,103)
ELSE (SELECT CONVERT(VARCHAR(10),LastDisburseDate,103) FROM LoanMaster(NOLOCK) WHERE MainCode = M.MainCode) END,
'TypesOfCredit' =
CASE WHEN A.AcTypeDesc = 'LAS ACCOUNT' THEN 'LOAN AGAINST SHARE'
WHEN A.AcTypeDesc = 'ML OD ACCOUNT' THEN 'MORTGAGE LOAN O/D ACCOUNT'
ELSE A.AcTypeDesc END,
M.AcType,
M.Limit AS ApprovedLimit,
ROUND(-Balance,2) as [O/SPrincipal],
ROUND(IntDrAmt,2) as [O/SInterest],
'OverDuePrincipal' =
CASE WHEN (SELECT HasRepaySched FROM LoanMaster(NOLOCK) WHERE MainCode = M.MainCode)= 'T'
THEN (SELECT ISNULL(SUM(ISNULL(DuePrincipal,0)) - SUM(ISNULL(PaidPrincipal,0)),0)
FROM LoanRepaySched L (NOLOCK)
WHERE L.MainCode = M.MainCode
AND ISNULL(DuePrincipal,0) > ISNULL(PaidPrincipal,0)
AND DATEDIFF(DAY,DueDate,(SELECT Today FROM ControlTable (NOLOCK)))>0
)
WHEN M.LimitExpiryDate >= (SELECT Today FROM ControlTable (NOLOCK)) Then 0 ELSE -M.Balance END,
--'Limit Expiry Date' = CONVERT (VARCHAR(12),M.LimitExpiryDate,106),
'Limit Expiry Date' = M.LimitExpiryDate,
'Loan Class'= dbo.f_GetLoanClass(BranchCode,MainCode),
'Prov' =
CASE
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) IN ('Good','UnDue') THEN 1
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) = 'WatchList' THEN 2
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) = 'Substandard' THEN 3
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) = 'Doubtful' THEN 4
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) = 'Bad' THEN 5
END,
'ProvAmt'=
CASE
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) IN ('Good','UnDue') THEN ROUND(-Balance * 0.01,2)
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) ='WatchList' THEN ROUND(-Balance * 0.05,2)
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) ='Substandard' THEN ROUND(-Balance * 0.25,2)
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) ='Doubtful' THEN ROUND(-Balance * 0.5,2)
WHEN dbo.f_GetLoanClass(BranchCode,MainCode) ='Bad' THEN ROUND(-Balance,2)
END
INTO #TEMP
FROM Master M (NOLOCK),AcTypeTable A (NOLOCK)
WHERE M.AcType = A.AcType
AND M.BranchCode = CASE WHEN UPPER(@BranchCode) = 'ALL' THEN M.BranchCode ELSE @BranchCode END
AND A.IsNormalDr = 'T'
AND M.Balance< 0
--AND M.AcType < '51'
AND A.AcTypeType = 'C'
AND A.AcType NOT IN (SELECT DISTINCT AcType FROM CustTypeAcType (NOLOCK) WHERE CustTypeCode = '5')
ORDER BY 1,2,3
--select * from #TEMP
--SELECT PrinODDate,(SELECT Today FROM ControlTable (NOLOCK)),* from #TEMPOD
SELECT
T.BranchCode,T.Obligor,T.ClientCode,T.MainCode,T.Name,T.DisbursementDate,T.TypesOfCredit,T.AcType,
T.ApprovedLimit,
T.[O/SPrincipal],
T.[O/SInterest],
T.[OverDuePrincipal],
CONVERT(VARCHAR(13),T.[Limit Expiry Date],103) AS [Limit Expiry Date],
T.[Loan Class], T.Prov, T.ProvAmt,
ISNULL(S.OverduePrin,0) as OverDuePrin,
'PrinODDate' = S.PrinODDate,
'PrinODDays' = CASE WHEN DATEDIFF(DAY,S.PrinODDate,@Today)>=0 THEN DATEDIFF(DAY,S.PrinODDate,@Today) ELSE 0 END,
--'PrinODDays'= DATEDIFF(DAY,S.PrinODDate,@Today),
'LimitExpiryDays'= CASE WHEN DATEDIFF(DAY,T.[Limit Expiry Date],@Today) > 0 THEN DATEDIFF(DAY,T.[Limit Expiry Date],@Today) ELSE 0 END,
--'LimitExpiryDays'=DATEDIFF(DAY,T.[Limit Expiry Date],@Today),
--'OverDueInterest' = ISNULL(S.OverDueInterest,0),
'OverDueInterest' = CASE WHEN ISNULL(S.OverDueInterest,0) > 0 THEN ISNULL(S.OverDueInterest,0)ELSE 0 END,
--'IntODDate' = S.IntODDate,
'IntODDate' = CASE WHEN DATEDIFF(DAY,S.IntODDate,@Today)>=0 AND ISNULL(S.OverDueInterest,0) > 0 THEN S.IntODDate ELSE @Today END,
--'IntOdDays' = DATEDIFF(DAY,S.IntODDate,@Today)
'IntOdDays' = CASE WHEN DATEDIFF(DAY,S.IntODDate,@Today)>=0 AND ISNULL(S.OverDueInterest,0) > 0 THEN DATEDIFF(DAY,S.IntODDate,@Today) ELSE 0 END
INTO #TEMP1
FROM #TEMP T
FULL OUTER JOIN #TEMPOD S
ON T.MainCode = S.MainCode
WHERE T.MainCode IS NOT NULL
AND PrinODDate BETWEEN '2019-01-01 00:00:00.000' AND '2020-01-01 00:00:00.000'
--SELECT * FROM #TEMP1 WHERE MainCode = '00103400001443000004'
SELECT
'Date' = ISNULL([PrinODDate],@Today),
T.*
INTO #TEMP2
FROM #TEMP1 T(NOLOCK)
--SELECT * FROM #TEMP2 WHERE MainCode = '00103400001443000004'
SELECT
BranchCode,Obligor,ClientCode,MainCode,Name,DisbursementDate,TypesOfCredit,AcType,ApprovedLimit,
[O/SPrincipal],[O/SInterest],OverDuePrincipal,[Limit Expiry Date],
--[Loan Class],[Prov],[ProvAmt],
OverDuePrin,
CONVERT(VARCHAR(15),[Date],103) [PrinODDate],
PrinODDays,LimitExpiryDays,
OverDueInterest,
CONVERT(VARCHAR(15),[Date],103) [IntODDate],
IntOdDays,
CONVERT(VARCHAR(15),[Date],103) [Date],
--,LoanClass_1,ProvAmt_1,
--T.*,
'LoanClass_1' = dbo.f_GetLoanClass1(BranchCode, MainCode,Date),
(CASE
WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) IN ('Good','UnDue') THEN ROUND((CONVERT(MONEY,[O/SPrincipal]) * 0.01),2)
--WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) ='WatchList' THEN ROUND([O/SPrincipal] * 0.05,2)
--WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) ='Substandard' THEN ROUND([O/SPrincipal] *0.25,2)
--WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) ='Doubtful' THEN ROUND([O/SPrincipal] * 0.5,2)
WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) ='Doubtful' THEN ROUND([O/SPrincipal] * 0.35,2)
WHEN dbo.f_GetLoanClass1(BranchCode, MainCode,[Date]) ='Bad' THEN ROUND([O/SPrincipal],2)
END) as ProvAmt_1,
'Sectorwise Code C' = (SELECT CustType + ' '+ CustDesc FROM v_AcCustType S(NOLOCK) WHERE CustTypeCode = 'C' AND S.MainCode = T.MainCode),
'Productwise Code K' = (SELECT CustType + ' '+ CustDesc FROM v_AcCustType P(NOLOCK) WHERE CustTypeCode = 'K' AND P.MainCode = T.MainCode),
'NRB5 D' = (SELECT CustType + ' '+ CustDesc FROM v_AcCustType P(NOLOCK) WHERE CustTypeCode = 'D' AND P.MainCode = T.MainCode),
'SME' = (SELECT CustType + ' '+ CustDesc FROM v_AcCustType P(NOLOCK) WHERE CustTypeCode = 'K' AND CustType = 'KC' AND P.MainCode = T.MainCode),
'Address' = (SELECT ISNULL(Address1,'') + ' ' + ISNULL(Address2,'') + ' ' + ISNULL(Address3,'')
FROM ClientTable C(NOLOCK) WHERE C.ClientCode = T.ClientCode)
INTO #TTT
FROM #TEMP2 T(NOLOCK)
--SELECT ROUND((CONVERT(MONEY,[O/SPrincipal])),2),* FROM #TTT where MainCode = '00103400001443000004'
SELECT
BranchCode,Obligor,ClientCode,MainCode,Name,DisbursementDate,TypesOfCredit,AcType,
ApprovedLimit,[O/SPrincipal],[O/SInterest],OverDuePrincipal,[Limit Expiry Date],
OverDuePrin,PrinODDate,PrinODDays,LimitExpiryDays,
--OverDueInterest,
ISNULL(ROUND((CONVERT(MONEY,[OverDueInterest])),2),0) as OverDueInterest,
IntODDate,IntOdDays,
[Date],
LoanClass_1,
ISNULL(ROUND((CONVERT(MONEY,[ProvAmt_1])),2),0) as ProvAmt_1,
[Sectorwise Code C],[Productwise Code K],[NRB5 D],SME,[Address]
FROM #TTT
--where MainCode = '00103400001443000004'
UNION ALL
SELECT
'~~~~~~', '~~~~~~','~~~~~~', '~~~~~~~~~', 'Grand Total', '','', '~~',
NULL,SUM([O/SPrincipal]), SUM([O/SInterest]), SUM(OverDuePrincipal),
NULL,
--'',NULL,SUM(ProvAmt),
SUM(OverDuePrin), NULL,NULL,NULL,
--SUM(OverDueInterest),
SUM(ISNULL(ROUND((CONVERT(MONEY,[OverDueInterest])),2),0)),
NULL, NULL,
NULL,
LoanClass_1= NULL,
SUM(ISNULL(ROUND((CONVERT(MONEY,[ProvAmt_1])),2),0)),
NULL,NULL,NULL,NULL,NULL
FROM #TTT
--WHERE IntODDate BETWEEN '2019-01-01 00:00:00.000' AND '2020-01-01 00:00:00.000'
ORDER BY 1,8,4
DROP TABLE #TEMP, #TEMPOD, #TEMP1, #TEMP2,#TTT
Comments
Post a Comment