smc_cet_creditpd_backend/app/controllers/creditpd.controller.js
suseendhiran17 fb2b0dcd2c susee:log
2023-07-19 16:03:12 +05:30

547 lines
23 KiB
JavaScript

const { sequelize,Test,CreditGeneralInformation,SizeAndGeographicalResearch,CreditProfile,ProductAndProcess,PortFolioHealth,TotalOverallDebit,OverallPlanOfAction,ValidationPoint, CreditLoanDetail,CreditFinalRemarks,CreditGeneralBusinessInformation,CreditKeyProductBusinessContribution,EmployeeStrength,CreditBusinessAndPersonalBankingDetails,CreditFinancialInformation, SupplierDetail ,ClientDetail,CreditFuturePlans,CreditExistingLoanObligation,FamilyMemberInvolvedInBusiness,CreditManager,CreditBorrowerAndGuarantorDetails,CreditFinancialAnalysis,CreditAddressDetail, CreditKeyShareholder,Covid19Questions,StockDetail,BusinessAsset,CreditFilterTable,Photograph } = require('../models')
const { logMsg } = require('../services/logger.js');
const Credit_PdHelper = require('../services/CreditPdHelper.js');
const request = require('request');
const moment = require('moment');
const { json } = require('body-parser');
const path = require('path');
const {Storage} = require('@google-cloud/storage');
const fs = require('fs');
const https = require('https');
// var global = require('global');
// global.arr = [ CreditAddressDetail , CreditBorrowerAndGuarantorDetails , CreditBusinessAndPersonalBankingDetails, BusinessAsset , ClientDetail , Covid19Questions , EmployeeStrength , CreditExistingLoanObligation , FamilyMemberInvolvedInBusiness , CreditFinalRemarks , CreditFinancialAnalysis , CreditFinancialInformation , CreditFuturePlans , CreditGeneralBusinessInformation , CreditGeneralInformation , CreditKeyProductBusinessContribution , CreditKeyShareholder , CreditLoanDetail , OverallPlanOfAction , PortFolioHealth , ProductAndProcess , CreditProfile , SizeAndGeographicalResearch , StockDetail , SupplierDetail , TotalOverallDebit , ValidationPoint , CreditManager , Photograph ]
// PullCreditPdData
exports.PullCreditPdData = async (req, res) => {
try {
CreditGeneralInformationDataExist = await CreditGeneralInformation.findOne({ where : { ref_no : req.body.pdid ,product:req.body.product,case_no :req.body.caseno, is_active : 1 }});
if(CreditGeneralInformationDataExist)
{
res.send({'status':200, 'message': "data already exist." ,'data': "No data" });
logMsg.info("CreditGeneralInformation data already exist.,PdId(ref_no)= "+req.body.pdid);
}
else
{
const arr = [ CreditAddressDetail , CreditBorrowerAndGuarantorDetails , CreditBusinessAndPersonalBankingDetails, BusinessAsset , ClientDetail , Covid19Questions , EmployeeStrength , CreditExistingLoanObligation , FamilyMemberInvolvedInBusiness , CreditFinalRemarks , CreditFinancialAnalysis , CreditFinancialInformation , CreditFuturePlans , CreditGeneralBusinessInformation , CreditGeneralInformation , CreditKeyProductBusinessContribution , CreditKeyShareholder , CreditLoanDetail , OverallPlanOfAction , PortFolioHealth , ProductAndProcess , CreditProfile , SizeAndGeographicalResearch , StockDetail , SupplierDetail , TotalOverallDebit , ValidationPoint , CreditManager , Photograph ] ;
const tempData = JSON.parse(JSON.stringify(req.body));
PDID = [];
obj = {};
GenInfoObj = {};
temp_array = [];
if(req.body.completed_date === null){ completed_date = req.body.completed_date }else{
originalDate = req.body.completed_date;
parts = originalDate.split(/[/ :]/);
day = parts[0];
month = parts[1];
year = parts[2];
completed_date = `${year}-${month}-${day}`;
}
console.log(completed_date);
// create creditGeneralInormationData
Object.assign(obj, { ref_no: tempData.pdid , product : tempData.product , case_no : tempData.caseno , credit_pd_type : req.body.credit_pd_type , completed_date : completed_date , applicant_id :req.body.lender_applicant_id , location : req.body.start_location});
await CreditGeneralInformation.create(obj)
.then((successData)=>{logMsg.info("GeneralInformation insert success ,PdId= "+successData.dataValues.pd_id);})
.catch((err)=>{ logMsg.info("GeneralInformation insert failed ,PdId(ref_no)= "+req.body.pdid+ " ERR =" + err); });
PDID = await CreditGeneralInformation.findOne({ where : { ref_no : req.body.pdid ,case_no :req.body.caseno, is_active : 1 }});
length = [];
for (var [OverallKey, OverallValue] of Object.entries(tempData.data)) {
length.push(OverallKey);
if(OverallKey != "Officer Details" || OverallKey != "last_index"){
table_name = await CreditFilterTable.findAll({ raw: true, attributes: [ 'table_name'], where : { section : OverallKey , is_active : 1 } , group: ['table_name']});
}
obj = { };
temp_array.length = 0 ;
for (var [ObjectKey, ObjectValue] of Object.entries(OverallValue)) {
if (Array.isArray(OverallValue[ObjectKey]) == true && OverallValue[ObjectKey].length != 0)
{
temp_array = await Credit_PdHelper.ARRAY( OverallValue[ObjectKey] , GenInfoObj , OverallKey )
}
else if (typeof OverallValue[ObjectKey] === "object" && ( OverallValue[ObjectKey] !== null ))
{
delete OverallValue[ObjectKey].display_data; delete OverallValue.display_data;
obj = await Credit_PdHelper.OBJECT( OverallValue, ObjectKey , OverallValue[ObjectKey] )
}
else if (moment(OverallValue[ObjectKey], "DD-MM-YYYY", true).isValid() == true || moment(OverallValue[ObjectKey], "DD/MM/YYYY hh:mm:ss A", true).isValid() == true )
{
date = await Credit_PdHelper.DATE( OverallValue[ObjectKey] );
Object.assign(obj, { [ObjectKey]: date });
if (OverallKey == "Officer Details") { Object.assign(GenInfoObj,{[ObjectKey] : date}) };
}
else
{
if(ObjectValue == "" && OverallKey == "Financial Information"){ delete OverallValue[ObjectKey]; }
else {
Object.assign(obj, { [ObjectKey]: ObjectValue });
if (OverallKey == "Borrower & Guarantor Details" && ObjectKey == "common_remarks") { Object.assign(GenInfoObj,{remarks : ObjectValue}) };
if (OverallKey == "Loan details" && ObjectKey == "loan_amount") { Object.assign(GenInfoObj,{loan_amount : ObjectValue}) };
if (OverallKey == "Officer Details") { Object.assign(GenInfoObj,{[ObjectKey] : ObjectValue}) };}
}
}
// DB Insertion
if (Object.entries(tempData.data).length == length.length) { await CreditGeneralInformation.update(GenInfoObj , { where : { pd_id : PDID.dataValues.pd_id , is_active : 1}}); logMsg.info("CreditGeneralInformation update success ,PdId= "+PDID.dataValues.pd_id); }
if (temp_array.length > 0)
{
temp_array.forEach(async(element) => {
if (OverallKey == "Borrower & Guarantor Details" && element.entity_type.toLowerCase() != "individual") { console.log(element.borrower_type.toLowerCase()); Object.assign(element,{borrower_age : element.numbers_of_years_business_running}); delete element.numbers_of_years_business_running; }
Object.assign(element , {pd_id : PDID.dataValues.pd_id , ref_no : req.body.pdid} ); Object.assign(element ,obj );
var index = table_name[0].table_name;
var tableName = arr[index];
console.log(tableName);
await tableName.create(element)
.then((successData)=>{logMsg.info(tableName+" insert success ,PdId= "+successData.dataValues.pd_id);})
.catch((err)=>{ logMsg.info(tableName+" insert failed ,PdId = "+PDID.dataValues.pd_id+ " ERR =" + err ); });
});
}
else
{
if(OverallKey != "Officer Details") {
Object.assign(obj , {pd_id : PDID.dataValues.pd_id} );
var index = table_name[0].table_name;
var tableName = arr[index];
console.log(tableName);
await tableName.create(obj)
.then((successData)=>{logMsg.info(tableName+" insert success ,PdId= "+successData.dataValues.pd_id);})
.catch((err)=>{ logMsg.info(tableName+" insert failed ,PdId= "+PDID.dataValues.pd_id+ " ERR =" + err); });
}
}
}
res.send({'status':200,'message':"success"});
}//end of else condition
}
catch (err) {
res.send({ 'status': 404, message: err.message || "Some error occurred while retrieving data.", 'data': "No data" });
} //end of try catch
}
exports.PullCreditPdPhotographsData = async (req, res) =>
{
try
{
// fetch SMC PdId from DB
GeneralSectionData = await CreditGeneralInformation.findOne({ where : { ref_no : req.body.pdid ,case_no :req.body.caseno, is_active : 1 }});
PdId = GeneralSectionData.dataValues.pd_id;
// convert image file to base64 code
// path = "storage/uploads/"
// file = path+img_name;
// base64_data = "data:image/png;base64," + fs.readFileSync(file, 'base64');
// insert photograph data here
await Photograph.create({pd_id: PdId , ref_no :req.body.pdid , img_name :req.body.img_name , img : img_name})
.then((successData)=>{
logMsg.info("Photograph insert success ,PdId= "+PdId);
res.send({'status':200,'message':"success",'data': "no data"}); //,"+base64_data+"
})
.catch((err)=>{
logMsg.info("Photograph insert failed ,PdId= "+PdId+" ERROR : "+err);
res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" });
});
// responce to FE
} catch(err) {
res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" });
} //end of try catch
};
// MWISE00840
exports.imageView = async (req, res) =>
{
try
{
const filePath = "storage/uploads/"+req.query.img_name;
const { dirname } = require('path');
const appDir = dirname(require.main.filename);
res.sendFile(filePath , { root: appDir });
} catch(err) {
res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }) ;
} //end of try catch
};
exports.DownloadPdReport = async (req, res) =>
{
try
{
// pd_id = req.query.ref_no;
// DownloadPdReportUrl = process.env.PD_REPORT_URL;
// url = DownloadPdReportUrl+"getCreditPDReportforCETApp?credit_pd_id="+pd_id;
// request({
// url: url,
// method: "GET"
// }, function (error, response, body) { console.log(body);
// if (body != undefined) {
// data = JSON.parse(body);
// if ( data.status == 200) {
// link = data.records;
// res.send({'status':200,'message':"success",'data':link});
// }else{
// res.send({'status':404,'message':"failed",'data':"No data"});
// }
// }
// });
const storage = new Storage({ keyFilename : path.join(__dirname, "../../googleCloud.json") });
const bucketName = process.env.GCP_BUCKET_NAME;
const fileName = 'credit-pd/pd'+req.query.ref_no+'/'+req.query.ref_no+'.pdf';
const options = {version: 'v2', action: 'read',expires: Date.now() + 1000 * 60 * 60, };
const [url] = await storage.bucket(bucketName).file(fileName).getSignedUrl(options);
res.send({'status':200,'message':"success",'data':url});
} catch(err) {
res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" });
} //end of try catch
};
exports.GetCreditPdData = async (req, res) =>
{
try
{
// applicantDetails = await Credit_PdHelper.MainApplicantDetails(req.query.losid);
// MainApplicantDetails = JSON.parse(applicantDetails);
// if(MainApplicantDetails.status == 200)
// {
CreditGeneralInformation.findAll({ where : { applicant_id : req.query.losid,is_active : 1},
include : [
{model: CreditAddressDetail },
{model : CreditBorrowerAndGuarantorDetails },
{model: CreditKeyShareholder },
{model: FamilyMemberInvolvedInBusiness },
{model: CreditGeneralBusinessInformation },
{model: EmployeeStrength },
{model: CreditFinancialInformation },
{model: SupplierDetail },
{model: ClientDetail },
{model: StockDetail },
{model: CreditFuturePlans },
{model: CreditBusinessAndPersonalBankingDetails },
{model: CreditExistingLoanObligation },
{model : CreditManager },
{model: CreditFinalRemarks },
{model: BusinessAsset },
{model: CreditKeyProductBusinessContribution },
{model: Photograph },
{model: CreditLoanDetail },
]
})
.then(async(data)=>{
if (data.length > 0)
{
if(Array.isArray(data[0].dataValues.Photographs) == true && data[0].dataValues.Photographs.length > 0)
{
ImageData = [];
const storage = new Storage({ keyFilename : path.join(__dirname, "../../googleCloud.json") });
const bucketName = process.env.GCP_BUCKET_NAME;
const bucketFolderName = process.env.GCP_BUCKET_FOLDER_NAME;
for(const PhotographsValue of data[0].dataValues.Photographs)
{
const fileName = bucketFolderName+'/pd'+PhotographsValue.ref_no+'/images/'+PhotographsValue.img;
const options = {version: 'v2', action: 'read',expires: Date.now() + 1000 * 60 * 60, };
const [url] = await storage.bucket(bucketName).file(fileName).getSignedUrl(options);
await ImageData.push( Object.assign(PhotographsValue.dataValues, { url: url }));
}
Object.assign(data[0], {Photographs:ImageData})
}
res.send({'status':200,'message':"success",'data':data});
}
else
{
res.send({'status':404,'message':"failed",'data':"No data"});
}
})
// }
// else
// {
// res.send({'status':404,'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"
});
}
};
exports.ReInsertImageData = async (req, res) =>
{
try
{
CreditGeneralInformationData = await CreditGeneralInformation.findOne({ where : { ref_no : req.body.pdid ,product:req.body.product,case_no :req.body.caseno, is_active : 1 }});
if(CreditGeneralInformationData)
{
var salesPD = new Promise(async(resolve, reject) => {
const reqData =JSON.parse(JSON.stringify(req.body.data));
key = 'Photograph Details';
if (Array.isArray(reqData[key].photo) == true )
{
Photograph.destroy({ where: { pd_id: CreditGeneralInformationData.pd_id , ref_no :req.body.pdid} }).then(function(result) {
logMsg.info("Photos count for pd_id (ref_no) = "+reqData[key].photo);
reqData[key].photo.forEach(async(values,index,array) => {
Object.assign(values, { pd_id: CreditGeneralInformationData.pd_id,ref_no:req.body.pdid });
await Photograph.create( values).then((successData)=>{logMsg.info("Photograph insert success name = "+values.img+", PdId = "+CreditGeneralInformationData.pd_id);}).catch((err)=>{ logMsg.info("Photograph insert failed name = "+values.img+", PdId = "+CreditGeneralInformationData.pd_id+" Error = "+err);});
if(array.length == index+1){resolve(true);}
});
}).catch(err=>{});
} else {resolve(false); }
}); // end of promise
salesPD.then(async(result) => {
setTimeout(() => {
if(result == false)
{
res.send({'status':404,'message':"failed",'data':"No Data"});
}else{
res.send({'status':200,'message':"success",'data':"No Data"});
}
}, 1000);
});
} else { res.send({'status':404,'message':"PD not exist",'data':"No Data"}); }
} catch(err) {
res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" });
} //end of try catch
};
// exports.GetCreditPdData__1 = async (req, res) =>
// {
// try
// {
// // // applicantDetails = await Credit_PdHelper.MainApplicantDetails(req.query.losid);
// // // MainApplicantDetails = JSON.parse(applicantDetails);
// // // if(MainApplicantDetails.status == 200)
// // // {
// CreditGeneralInformation.findAll({ where : { pd_id :432,is_active : 1},
// include : [
// {model: CreditAddressDetail },
// {model: CreditFuturePlans },
// {model : CreditBorrowerAndGuarantorDetails },
// {model: CreditBusinessAndPersonalBankingDetails }, {model: BusinessAsset },
// {model: CreditFinancialInformation }, {model: CreditKeyShareholder },
// {model: CreditKeyProductBusinessContribution }, {model: EmployeeStrength },
// {model: ClientDetail }, {model: StockDetail },
// {model: CreditExistingLoanObligation },
// {model: FamilyMemberInvolvedInBusiness },
// {model : CreditManager },
// {model: Photograph },
// {model: CreditFinalRemarks }, {model: CreditLoanDetail },
// {model: CreditGeneralBusinessInformation },
// {model: SupplierDetail }
// ]
// })
// .then((data)=>{
// if (data.length > 0)
// {
// res.send({'status':200,'message':"success",'data':data});
// }
// else
// {
// res.send({'status':404,'message':"failed",'data':"No data"});
// }
// })
// // // }
// // // else
// // // {
// // // res.send({'status':404,'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"
// });
// }
// };
exports.readLogFileName = async (req , res) =>
{
try
{
folderName = req;
const logFilePath = 'storage/log';
const fileNames = fs.readdirSync(logFilePath);
// Remove the first element (0th index)
const [, ...data] = fileNames;
return 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
};
exports.readLogFile = async (req , res) =>
{
try
{
folderName = req.body.folder;
fileName = req.body.file;
const logFilePath = 'storage/log/'+fileName;
fs.readFile(logFilePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
res.status(500).send({'status':404,'message': err.message || "Error reading log file." ,'data': "No data"});
}
res.send({'status':200 , message:"Success." ,'data': 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
};
exports.viewLandingPage = async (req , res) =>
{
try
{
moduleName = [ { "module":"CREDIT PD","folder":"smc_cet_creditpd_backend"} ];
img = []
for(const [index,val] of moduleName.entries())
{
fileName = await this.readLogFileName(val.folder);
for (let i = 0; i < fileName.length; i++)
{
filePath = 'storage/log/'+fileName[i];
const logData = fs.readFileSync(filePath);
// Convert the file content to Base64
const base64Data = logData.toString('base64');
// Create Base64 URL from Base64 data
const base64Url = `data:application/octet-stream;base64,${encodeURIComponent(base64Data)}`;
img.push(base64Url)
}
moduleName[index] = await Object.assign(val,{'file':fileName , 'img':img});
};
res.render( 'module' , { 'data' : moduleName } ,function (err, html ) {
res.send(html)
})
}
catch(err)
{
res.status(500).send({'status':404,
message: err.message || "Some error occurred while inserting statements." ,'data': "No data"
});
} //end of try catch
};
exports.deleteLogFile = async (req , res) =>
{
try
{
folderName = req.body.folder;
fileName = req.body.file;
// folderName = 'smc_cet_creditpd_backend';
// fileName = 'msg.log.2023-07-10';
const logFilePath = 'storage/log/'+fileName;
fs.unlink(logFilePath, (err) => {
if (err) {
console.error(`Error deleting file: ${err}`);
return;
}
console.log('File deleted successfully.');
res.send({'status':200 , message:"Success." ,'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
};