Option Explicit
Public Const NUMBER_OF_BRANCHES = 8
Public Const FIRST_ROW = 4
Public Const SHEET_INSURANCE = "Insurance"
Public Const SHEET_REPEAT_LOANS = "RepeatLoans"
Sub Execute()
ClearContent SHEET_INSURANCE
ExtractData SHEET_INSURANCE
AutoFillFormulas SHEET_INSURANCE
ClearContent SHEET_REPEAT_LOANS
ExtractDataRepeatLoans SHEET_REPEAT_LOANS
AutoFillFormulas SHEET_REPEAT_LOANS
Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub ClearContent(ByVal sheet As String)
Sheets(sheet).Select
Rows(CStr(FIRST_ROW + 1) & ":" & CStr(GetLastRow(sheet))).Select
Selection.ClearContents
Range("A" & CStr(FIRST_ROW) & ":" & "N" & CStr(FIRST_ROW)).Select
Selection.ClearContents
End Sub
Private Sub AutoFillFormulas(ByVal sheet As String)
Dim rangeSource As String
rangeSource = "O" & CStr(FIRST_ROW) & ":" & "Q" & CStr(FIRST_ROW)
Dim rangeDestination As String
rangeDestination = "O" & CStr(FIRST_ROW) & ":" & "Q" & CStr(GetLastRowOfColumn("A", sheet))
AutoFill rangeSource, rangeDestination, sheet
End Sub
Private Sub ExtractData(ByVal sheet As String)
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Dim cmd As ADODB.Command
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
Set cmd = New ADODB.Command
Sheets(sheet).Select
Dim dateFrom As String
dateFrom = Range("NM_DATE_FROM").Value
Dim dateTo As String
dateTo = Range("NM_DATE_TO").Value
cnx.ConnectionString = "UID=angelalihusha;PWD=Prov1921*;DRIVER={SQL Server};Server=" & Range("DB_SERVER").Value & ";Database=" & Range("DB_NAME").Value & ";"
cnx.Open
cmd.CommandText = "Select * from( " & _
"select case when loanDisbursement.LOAN_NUMBER < 200000 then 1 when loanDisbursement.LOAN_NUMBER >=200000 and loanDisbursement.LOAN_NUMBER < 300000 then 2 when loanDisbursement.LOAN_NUMBER >= 300000 and loanDisbursement.LOAN_NUMBER < 400000 then 3 when loanDisbursement.LOAN_NUMBER >= 400000 and loanDisbursement.LOAN_NUMBER < 500000 then 4 when loanDisbursement.LOAN_NUMBER >= 500000 and loanDisbursement.LOAN_NUMBER < 600000 then 5 when loanDisbursement.LOAN_NUMBER >= 600000 and loanDisbursement.LOAN_NUMBER < 700000 then 6 when loanDisbursement.LOAN_NUMBER >= 700000 and loanDisbursement.LOAN_NUMBER < 800000 then 7 when loanDisbursement.LOAN_NUMBER >= 800000 and loanDisbursement.LOAN_NUMBER < 900000 then 8 end as Branch, " & _
"loanDisbursement.client_number, loanDisbursement.CLIENT_NAME, loanDisbursement.IND_SEXO, CONVERT(VARCHAR(10),loanDisbursement.FECH_NACIMIENTO,101) as birthDate, " & _
"(select top 1 NUM_ID from cl.CL_ID_CLIENTES where cl.CL_ID_CLIENTES.COD_CLIENTE = loandisbursement.client_number and cl.CL_ID_CLIENTES.COD_TIPO_ID = 104) as NRC, " & _
"case when loanDisbursement.LOAN_NUMBER < 200000 then loanDisbursement.LOAN_NUMBER when loanDisbursement.LOAN_NUMBER >=200000 and loanDisbursement.LOAN_NUMBER < 300000 then loanDisbursement.LOAN_NUMBER - 200000 when loanDisbursement.LOAN_NUMBER >= 300000 and loanDisbursement.LOAN_NUMBER < 400000 then loanDisbursement.LOAN_NUMBER - 300000 when loanDisbursement.LOAN_NUMBER >= 400000 and loanDisbursement.LOAN_NUMBER < 500000 then loanDisbursement.LOAN_NUMBER - 400000 when loanDisbursement.LOAN_NUMBER >= 500000 and loanDisbursement.LOAN_NUMBER < 600000 then loanDisbursement.LOAN_NUMBER - 500000 when loanDisbursement.LOAN_NUMBER >= 600000 and loanDisbursement.LOAN_NUMBER < 700000 then loanDisbursement.LOAN_NUMBER - 600000 when loanDisbursement.LOAN_NUMBER >= 700000 and loanDisbursement.LOAN_NUMBER < 800000 then loanDisbursement.LOAN_NUMBER - 700000 when loanDisbursement.LOAN_NUMBER >= 800000 and loanDisbursement.LOAN_NUMBER < 900000 then loanDisbursement.LOAN_NUMBER - 800000 " & _
"end as loan_number , " & _
" case when loandisbursement.LOAN_TYPE IN (1,5,10) then 'Women market trader' when loandisbursement.LOAN_TYPE IN (3,7,12) then 'MSME' when loandisbursement.LOAN_TYPE IN (4,8,9,13) then 'Home improvement' when loandisbursement.LOAN_TYPE IN (2,6,11) then 'Consumer' when loandisbursement.LOAN_TYPE IN (14) then 'Employee Liquidity' when loandisbursement.LOAN_TYPE IN (15) then 'Employee Asset' when loandisbursement.LOAN_TYPE IN (16,17) then 'Salary Backed' when loandisbursement.LOAN_TYPE IN (18) then 'Employee Educational' else 'N/A' end as LoanType, " & _
"loanDisbursement.DURATION,loanDisbursement.loan_amount, loanDisbursement.OPENING_DATE,loanDisbursement.STATUS,case when loanDisbursement.REPEAT_LOAN = 1 then 'Yes' when loanDisbursement.REPEAT_LOAN is null then 'No' end as RepeatLoan, " & _
"isnull((select MON_MOVIMIENTO from PR.PR_MOVIMIENTOS where NUM_CREDITO = loanDisbursement.loan_number and TIP_TRANSACCION = 1 and SUB_TIP_TRANSACCION = 1 and NUM_IDENTIF = 3),0) as insurance " & _
"from dbo.Loan_disbursement_extra as loanDisbursement " & _
"left join pr.PR_CREDITOS as credit on loanDisbursement.LOAN_NUMBER = credit.NUM_CREDITO " & _
") as temp " & _
"where " & _
"OPENING_DATE >= CONVERT(DATETIME,'" & dateFrom & "', 103) and OPENING_DATE < CONVERT(DATETIME,'" & dateTo & "', 103) " & _
"order by branch, loan_number "
cmd.ActiveConnection = cnx
Set rst = cmd.Execute
ActiveSheet.Range("A4").CopyFromRecordset rst
rst.Close
Set rst = Nothing
Set cmd = Nothing
cnx.Close
End Sub
Private Sub ExtractDataRepeatLoans(ByVal sheet As String)
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Dim cmd As ADODB.Command
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
Set cmd = New ADODB.Command
Sheets(sheet).Select
Dim dateFrom As String
dateFrom = Range("NM_DATE_FROM").Value
Dim dateTo As String
dateTo = Range("NM_DATE_TO").Value
cnx.ConnectionString = "UID=angelalihusha;PWD=Prov1921*;DRIVER={SQL Server};Server=" & Range("DB_SERVER").Value & ";Database=" & Range("DB_NAME").Value & ";"
cnx.Open
cmd.CommandText = "Select Branch, client_number, CLIENT_NAME, IND_SEXO, FECH_NACIMIENTO, NRC, loan_number, LoanType,DURATION,LOAN_AMOUNT,OPENING_DATE,STATUS,repeatLoan, insurance from( " & _
"select case when loanDisbursement.LOAN_NUMBER < 200000 then 1 when loanDisbursement.LOAN_NUMBER >=200000 and loanDisbursement.LOAN_NUMBER < 300000 then 2 when loanDisbursement.LOAN_NUMBER >= 300000 and loanDisbursement.LOAN_NUMBER < 400000 then 3 when loanDisbursement.LOAN_NUMBER >= 400000 and loanDisbursement.LOAN_NUMBER < 500000 then 4 when loanDisbursement.LOAN_NUMBER >= 500000 and loanDisbursement.LOAN_NUMBER < 600000 then 5 when loanDisbursement.LOAN_NUMBER >= 600000 and loanDisbursement.LOAN_NUMBER < 700000 then 6 when loanDisbursement.LOAN_NUMBER >= 700000 and loanDisbursement.LOAN_NUMBER < 800000 then 7 when loanDisbursement.LOAN_NUMBER >= 800000 and loanDisbursement.LOAN_NUMBER < 900000 then 8 end as Branch, " & _
"loanDisbursement.client_number, loanDisbursement.CLIENT_NAME, loanDisbursement.IND_SEXO, loanDisbursement.FECH_NACIMIENTO, " & _
"(select top 1 NUM_ID from cl.CL_ID_CLIENTES where cl.CL_ID_CLIENTES.COD_CLIENTE = loandisbursement.client_number and cl.CL_ID_CLIENTES.COD_TIPO_ID = 104) as NRC, " & _
"case when loanDisbursement.LOAN_NUMBER < 200000 then loanDisbursement.LOAN_NUMBER when loanDisbursement.LOAN_NUMBER >=200000 and loanDisbursement.LOAN_NUMBER < 300000 then loanDisbursement.LOAN_NUMBER - 200000 when loanDisbursement.LOAN_NUMBER >= 300000 and loanDisbursement.LOAN_NUMBER < 400000 then loanDisbursement.LOAN_NUMBER - 300000 when loanDisbursement.LOAN_NUMBER >= 400000 and loanDisbursement.LOAN_NUMBER < 500000 then loanDisbursement.LOAN_NUMBER - 400000 when loanDisbursement.LOAN_NUMBER >= 500000 and loanDisbursement.LOAN_NUMBER < 600000 then loanDisbursement.LOAN_NUMBER - 500000 when loanDisbursement.LOAN_NUMBER >= 600000 and loanDisbursement.LOAN_NUMBER < 700000 then loanDisbursement.LOAN_NUMBER - 600000 when loanDisbursement.LOAN_NUMBER >= 700000 and loanDisbursement.LOAN_NUMBER < 800000 then loanDisbursement.LOAN_NUMBER - 700000 when loanDisbursement.LOAN_NUMBER >= 800000 and loanDisbursement.LOAN_NUMBER < 900000 then loanDisbursement.LOAN_NUMBER - 800000 " & _
"end as loan_number , " & _
" case when loandisbursement.LOAN_TYPE IN (1,5,10) then 'Women market trader' when loandisbursement.LOAN_TYPE IN (3,7,12) then 'MSME' when loandisbursement.LOAN_TYPE IN (4,8,9,13) then 'Home improvement' when loandisbursement.LOAN_TYPE IN (2,6,11) then 'Consumer' when loandisbursement.LOAN_TYPE IN (14,15) then 'Employee' when loandisbursement.LOAN_TYPE IN (16,17) then 'Salary Backed' when loandisbursement.LOAN_TYPE IN (18) then 'Employee Educational' else 'N/A' end as LoanType, " & _
"loanDisbursement.DURATION,loanDisbursement.loan_amount, loanDisbursement.OPENING_DATE,loanDisbursement.STATUS,case when loanDisbursement.REPEAT_LOAN = 1 then 'Yes' when loanDisbursement.REPEAT_LOAN is null then 'No' end as RepeatLoan, " & _
"isnull((select MON_MOVIMIENTO from PR.PR_MOVIMIENTOS where NUM_CREDITO = loanDisbursement.loan_number and TIP_TRANSACCION = 1 and SUB_TIP_TRANSACCION = 1 and NUM_IDENTIF = 3),0) as insurance , " & _
"loanDisbursement.LOAN_NUMBER as loan_number_branch " & _
"from dbo.Loan_disbursement_extra as loanDisbursement " & _
"left join pr.PR_CREDITOS as credit on loanDisbursement.LOAN_NUMBER = credit.NUM_CREDITO " & _
") as temp " & _
"Where " & _
"temp.loan_number_branch in (select max(NUM_CREDITO) from pr.pr_creditos " & _
"Where COD_CLIENTE in (select client_number from Loan_disbursement_extra where OPENING_DATE >= CONVERT(DATETIME,'" & dateFrom & "', 103) and OPENING_DATE < CONVERT(DATETIME,'" & dateTo & "', 103) and repeat_loan = 1) " & _
"and NUM_CREDITO not in (select LOAN_NUMBER from Loan_disbursement_extra where OPENING_DATE >= CONVERT(DATETIME,'" & dateFrom & "', 103) and OPENING_DATE < CONVERT(DATETIME,'" & dateTo & "', 103) and repeat_loan = 1) " & _
"group by cod_cliente) " & _
"order by branch, loan_number"
cmd.ActiveConnection = cnx
Set rst = cmd.Execute
Application.ScreenUpdating = False
ActiveSheet.Range("A4").CopyFromRecordset rst
rst.Close
Set rst = Nothing
Set cmd = Nothing
cnx.Close
End Sub
..........................................................................................