diff --git a/app/controllers/cibil.controller.js b/app/controllers/cibil.controller.js index d288638..243c253 100644 --- a/app/controllers/cibil.controller.js +++ b/app/controllers/cibil.controller.js @@ -3,6 +3,7 @@ const { logMsg } = require('../services/logger.js'); const Helper = require('../services/cibil.controller.helper.js'); const DataInsertHelper = require('../services/cibil.datainsert.helper.js'); const { Op } = require('sequelize'); +const moment = require('moment'); // landing page list of all pan number and reference number from commercial & consumer against losid @@ -358,7 +359,7 @@ exports.consolidatedActiveClosedLoanSplitUp =async (req, res) => - +//split up apis @@ -555,7 +556,55 @@ exports.ConsolidatedSanctionAmountSplitUp =async (req, res) => - +//merge-unmerge api's +exports.ConsolidatedActiveAndClosedLoansReviewAction =async (req, res) => +{ + try + { + + LoanData = await sequelize.query("SELECT [losid],STRING_AGG(ref_no,',')as ref_no,STRING_AGG(consumer_name, ',') as consumer_name, [account_type],count(*) as loan_count, [ownership], [reported_and_certified_date], [opened_date], [sanctioned_amount], [current_balance], [repayment_tenure], [emi_amount], [overdue_amount], [status], [current_dpd], [highest_dpd_month_wise_bucket_or_count_0_to_6], [highest_dpd_month_wise_bucket_or_count_07_to_12], [highest_dpd_month_wise_bucket_or_count_13_to_24], [highest_dpd_month_wise_bucket_or_count_25_to_36], [DateClosed], [grp_str] FROM [out_active_and_closed_loans_details] AS [OutputActiveAndClosedLoans] WHERE [OutputActiveAndClosedLoans].[losid] = '"+req.query.losid+"' GROUP BY [grp_str], [losid], [account_type], [ownership], [reported_and_certified_date], [opened_date], [sanctioned_amount], [current_balance], [repayment_tenure], [emi_amount], [overdue_amount], [status], [current_dpd], [highest_dpd_month_wise_bucket_or_count_0_to_6], [highest_dpd_month_wise_bucket_or_count_07_to_12], [highest_dpd_month_wise_bucket_or_count_13_to_24], [highest_dpd_month_wise_bucket_or_count_25_to_36], [DateClosed]"); + if(LoanData.length != 0) + { + + var LoanDataPromises = new Promise(async(resolve, reject) => { + FinalLoanData = []; + LoanData[0].forEach(async(value,index,array) => { + if(value.loan_count == 1) + { + Object.assign(value , {subValue : [] }); + if (index === array.length -1) { resolve(FinalLoanData); } + }else{ + subValue = await OutputActiveAndClosedLoans.findAll({raw:true,where:{losid:value.losid,grp_str:value.grp_str}}) + .catch(err=>{ }); + Object.assign(value , {subValue : subValue }); + if (index === array.length -1) { resolve(FinalLoanData); } + } + + FinalLoanData.push(value); + + }); + }); + LoanDataPromises.then(async(FinalLoanData)=>{ + setTimeout(() => { + res.send({'status':200 , message:"Success." ,'data': FinalLoanData}); + }, 1000); + + }); + + + + } + else{ + res.send({'status':400 , message:"Failed." ,'data': "No Data"}); + } + + + } catch(err) { + res.status(500).send({'status':404, + message: err.message || "Some error occurred while inserting statements." ,'data': "No data" + }); } //end of try catch + +}; @@ -617,7 +666,7 @@ exports.testone =async (req, res) => { try { - data = await Helper.cibilInputDataApiCall('MW00045413','AAACR4282J',2); + data = await Helper.cibilInputDataApiCall('MW00045413','AAACR4282J',1); DataInsertHelper.commercialDataInsert(data); res.send(data); @@ -638,8 +687,18 @@ exports.test2 =async (req, res) => { try { + //token = await Helper.getLoginToken() + data = await Helper.cibilInputDataApiCall('MW00045413','AAACR4282J',1); + res.send(data); + // beforedate = data.lstConsumerBorrowersDetails[0].dateTimeProcessed; + // var date= moment(beforedate).format('YYYY-MM-DD'); + // console.log(date); - + + req_obj ={ + "losid":'MW112233', + Me + } } catch(err) { diff --git a/app/routes/routes.js b/app/routes/routes.js index 4e4696f..91c6baa 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -7,7 +7,7 @@ module.exports = app => { // router.get("/testone", Cibilcontroller.testone); // router.get("/starter", Cibilcontroller.starter); - // router.get("/test2", Cibilcontroller.test2); + router.get("/test2", Cibilcontroller.test2); /** * @swagger @@ -381,6 +381,26 @@ router.get("/consolidatedSanctionAmountSplitUp", Cibilcontroller.ConsolidatedSan router.get("/consolidatedActiveClosedLoanSplitUp", Cibilcontroller.consolidatedActiveClosedLoanSplitUp); +/** +* @swagger +* /api/ConsolidatedActiveAndClosedLoansReviewAction: +* get: +* summary: landing Page Details +* description: Get active & closed loans Data +* parameters: +* - in: query +* name: losid +* schema: +* type: string +* required: true +* example: MW112233 +* responses: +* 200: +* description: success +*/ +router.get("/ConsolidatedActiveAndClosedLoansReviewAction", Cibilcontroller.ConsolidatedActiveAndClosedLoansReviewAction); + + // routes started here app.use('/api', router); }; diff --git a/app/services/cibil.controller.helper.js b/app/services/cibil.controller.helper.js index a776eea..f5d0109 100644 --- a/app/services/cibil.controller.helper.js +++ b/app/services/cibil.controller.helper.js @@ -64,10 +64,10 @@ function findBucketCount(sk_array,dpd_date) } -function cibilInputDataApiCall(losid,pan_no,applicant_type) { +async function cibilInputDataApiCall(losid,pan_no,applicant_type) { try { CIBIL_URL = process.env.CIBIL_DATA_URL; - token = process.env.CIBIL_URL_TOKEN; + token = await getLoginToken(); request_object = { "losid": losid, "panNo": pan_no, diff --git a/app/services/cibil.datainsert.helper.js b/app/services/cibil.datainsert.helper.js index 1f728f4..adfaca4 100644 --- a/app/services/cibil.datainsert.helper.js +++ b/app/services/cibil.datainsert.helper.js @@ -999,33 +999,34 @@ async function consumerIntermediateDataInsert(losid,refNo) try { - ConBorrowDetailData = await ConBorrowDetail.findAll({attributes: ['losid','MemberReferenceNumber','ConsumerNameField1','ConsumerNameField2','ConsumerNameField3','ConsumerNameField4','ConsumerNameField5'],raw:true ,where:{losid:'MW112233'},include:[{model:ConIDDetail , attributes: ['IDNumber'],where:{IDType:'Income Tax ID Number'}}]}); - var ConBorrowDetailDataInsert = new Promise(async(resolve, reject) => { - ConBorrowDetailArray = []; - ConBorrowDetailData.forEach(async(value,index,array) => { - ConBorrowDetailDataObj = { - losid : value.losid, - ReferenceNumber : value.MemberReferenceNumber, - ConsumerNameField1 : value.ConsumerNameField1, - ConsumerNameField2 : value.ConsumerNameField2, - ConsumerNameField3 : value.ConsumerNameField3, - ConsumerNameField4 : value.ConsumerNameField4, - ConsumerNameField5 : value.ConsumerNameField5, - PAN : value['ConIDDetails.IDNumber'], - cibil_type : 1 - } - ConBorrowDetailArray.push(ConBorrowDetailDataObj); - if (index === array.length -1) { resolve(ConBorrowDetailArray); } - }); - }); - ConBorrowDetailDataInsert.then(async(ConBorrowDetailArray)=>{ - await InBorrowerDetail.bulkCreate(ConBorrowDetailArray); + ConBorrowDetailData = await ConBorrowDetail.findAll({attributes: ['losid','MemberReferenceNumber','ConsumerNameField1','ConsumerNameField2','ConsumerNameField3','ConsumerNameField4','ConsumerNameField5','DateTimeProcessed'],raw:true ,where:{losid:losid,MemberReferenceNumber:refNo},include:[{model:ConIDDetail , attributes: ['IDNumber'],where:{IDType:'Income Tax ID Number'}}]}); + + + ConBorrowDetailData.forEach(async(value,index,array) => { + ConBorrowDetailDataObj = { + losid : value.losid, + ReferenceNumber : value.MemberReferenceNumber, + ConsumerNameField1 : value.ConsumerNameField1, + ConsumerNameField2 : value.ConsumerNameField2, + ConsumerNameField3 : value.ConsumerNameField3, + ConsumerNameField4 : value.ConsumerNameField4, + ConsumerNameField5 : value.ConsumerNameField5, + PAN : value['ConIDDetails.IDNumber'], + cibil_type : 1 + } + await InBorrowerDetail.update(ConBorrowDetailDataObj,{where:{losid:ConBorrowDetailDataObj.losid,PAN:ConBorrowDetailDataObj.PAN,cibil_type:1}}); + }); + + //month bucket count + // DateTimeProcessed = ConBorrowDetailData end_date = '2022-05-05' sk = await Helper.createSkeleton(end_date); - ConEnquiryDetailData = await ConEnquiryDetail.findAll({attributes: ['losid','MemberReferenceNumber','DateOfEnquiry','EnquiryPurpose','EnquiryAmount'],raw:true ,where:{losid:'MW112233'}}); + + + ConEnquiryDetailData = await ConEnquiryDetail.findAll({attributes: ['losid','MemberReferenceNumber','DateOfEnquiry','EnquiryPurpose','EnquiryAmount'],raw:true ,where:{losid:losid,MemberReferenceNumber:refNo}}); var ConEnquiryDetailDataInsert = new Promise(async(resolve, reject) => { ConEnquiryDetailArray = []; ConEnquiryDetailData.forEach(async(value,index,array) => { @@ -1050,11 +1051,8 @@ async function consumerIntermediateDataInsert(losid,refNo) - end_date = '2022-05-05' - sk = await Helper.createSkeleton(end_date); - ConAccountTranscationData = await ConAccountTranscation.findAll({attributes: ['losid','AccountTranDetailsID','MemberReferenceNumber','AccountType','OwnershipIndicator','DateOpenedDisbursed','DateReportedAndCertified','HighCreditSanctionedAmount','CurrentBalance','AmountOverdue','CreditLimit','RepaymentTenure','EMIAmount','WrittenOffAndSettledStatus','DateClosed'],raw:true ,where:{losid:'MW112233'}}); - + ConAccountTranscationData = await ConAccountTranscation.findAll({attributes: ['losid','AccountTranDetailsID','MemberReferenceNumber','AccountType','OwnershipIndicator','DateOpenedDisbursed','DateReportedAndCertified','HighCreditSanctionedAmount','CurrentBalance','AmountOverdue','CreditLimit','RepaymentTenure','EMIAmount','WrittenOffAndSettledStatus','DateClosed'],raw:true ,where:{losid:losid,MemberReferenceNumber:refNo}}); ConAccountTranscationData.forEach(async(value) => { month_bucket_result = await Helper.findBucketCount(sk,value.DateOpenedDisbursed); Num = value.MemberReferenceNumber; @@ -1142,9 +1140,10 @@ async function commercialIntermediateDataInsert(losid,refNo) { try { - BorrowerProfileData = await BorrowerProfile.findAll({attributes: ['losid','ApplicationRefno','EnqInfoBorrowerName','EnqInfoPan'],raw:true ,where:{losid:'MW112233'}}); - var BorrowerProfileDataInsert = new Promise(async(resolve, reject) => { - BorrowerProfileArray = []; + + + BorrowerProfileData = await BorrowerProfile.findAll({attributes: ['losid','ApplicationRefno','EnqInfoBorrowerName','EnqInfoPan'],raw:true ,where:{losid:losid,ApplicationRefno:refNo}}); + BorrowerProfileData.forEach(async(value,index,array) => { BorrowerProfileDataObj = { losid : value.losid, @@ -1156,22 +1155,43 @@ async function commercialIntermediateDataInsert(losid,refNo) ConsumerNameField5 : null, PAN : value.EnqInfoPan, cibil_type : 2 - } - BorrowerProfileArray.push(BorrowerProfileDataObj); - if (index === array.length -1) { resolve(BorrowerProfileArray); } - }); - }); - BorrowerProfileDataInsert.then(async(BorrowerProfileArray)=>{ - await InBorrowerDetail.bulkCreate(BorrowerProfileArray); + } + await InBorrowerDetail.update(BorrowerProfileDataObj,{where:{losid:BorrowerProfileDataObj.losid,PAN:BorrowerProfileDataObj.PAN,cibil_type:2}}); }); + // BorrowerProfileData = await BorrowerProfile.findAll({attributes: ['losid','ApplicationRefno','EnqInfoBorrowerName','EnqInfoPan'],raw:true ,where:{losid:'MW112233'}}); + // var BorrowerProfileDataInsert = new Promise(async(resolve, reject) => { + // BorrowerProfileArray = []; + // BorrowerProfileData.forEach(async(value,index,array) => { + // BorrowerProfileDataObj = { + // losid : value.losid, + // ReferenceNumber : value.ApplicationRefno, + // ConsumerNameField1 : value.EnqInfoBorrowerName, + // ConsumerNameField2 : null, + // ConsumerNameField3 : null, + // ConsumerNameField4 : null, + // ConsumerNameField5 : null, + // PAN : value.EnqInfoPan, + // cibil_type : 2 + // } + // BorrowerProfileArray.push(BorrowerProfileDataObj); + // if (index === array.length -1) { resolve(BorrowerProfileArray); } + // }); + // }); + // BorrowerProfileDataInsert.then(async(BorrowerProfileArray)=>{ + // await InBorrowerDetail.bulkCreate(BorrowerProfileArray); + // }); + end_date = '2022-05-05' sk = await Helper.createSkeleton(end_date); - ComEnquiryDetailData = await EnquiryDetail.findAll({attributes: ['losid','ApplicationRefno','EnquiryDetailsEnquiryDt','EnquiryDetailsEnquiryPurpose','EnquiryDetailsEnquiryAmt'],raw:true ,where:{losid:'MW112233'}}); + + + + ComEnquiryDetailData = await EnquiryDetail.findAll({attributes: ['losid','ApplicationRefno','EnquiryDetailsEnquiryDt','EnquiryDetailsEnquiryPurpose','EnquiryDetailsEnquiryAmt'],raw:true ,where:{losid:losid,ApplicationRefno:refNo}}); var ComEnquiryDetailDataInsert = new Promise(async(resolve, reject) => { ComEnquiryDetailArray = []; ComEnquiryDetailData.forEach(async(value,index,array) => { @@ -1199,10 +1219,8 @@ async function commercialIntermediateDataInsert(losid,refNo) - end_date = '2022-05-05' - sk = await Helper.createSkeleton(end_date); - ComCreditFacilityCurrentDetailData = await CreditFacilityCurrentDetail.findAll({attributes: ['losid','ApplicationRefno','CreditFacilityCDcfSrNo','CreditFacilityCDcfType','CreditFacilityCDDatesSanctionedDt','CreditFacilityCDLstReportedDate','CreditFacilityCDAmtSanctionedAmt','CreditFacilityCDAmtoutstandingBalance','CreditFacilityCDAmtOverdue','CreditFacilityCDODTenure','CreditFacilityCDAmtinstallmentAmt','CreditFacilityCDStatus','CreditFacilityCDDatesLoanExpiryDt'],raw:true ,where:{losid:'MW112233'}}); - + + ComCreditFacilityCurrentDetailData = await CreditFacilityCurrentDetail.findAll({attributes: ['losid','ApplicationRefno','CreditFacilityCDcfSrNo','CreditFacilityCDcfType','CreditFacilityCDDatesSanctionedDt','CreditFacilityCDLstReportedDate','CreditFacilityCDAmtSanctionedAmt','CreditFacilityCDAmtoutstandingBalance','CreditFacilityCDAmtOverdue','CreditFacilityCDODTenure','CreditFacilityCDAmtinstallmentAmt','CreditFacilityCDStatus','CreditFacilityCDDatesLoanExpiryDt'],raw:true ,where:{losid:losid,ApplicationRefno:refNo}}); ComCreditFacilityCurrentDetailData.forEach(async(value) => { month_bucket_result = await Helper.findBucketCount(sk,value.DateOpenedDisbursed); Num = value.ApplicationRefno; diff --git a/package-lock.json b/package-lock.json index 0183a30..f651a78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "smc_cet_creditpd_backend", + "name": "smc_cet_cibil_staging", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -2371,9 +2371,9 @@ "optional": true }, "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "moment-timezone": { "version": "0.5.34", diff --git a/package.json b/package.json index 5f28c65..ccb9202 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "dotenv": "^10.0.0", "express": "^4.17.1", "log4js": "^6.3.0", + "moment": "^2.29.4", "mssql": "^7.2.0", "request": "^2.88.2", "sequelize": "^6.6.5",