PK!A7��nconst contactGroup = require("../models/contactGroup"); const contact = require("../models/contact"); const quickGenerateReportModel = require("../models/quickGeneratereMessageReports"); const campaignModel = require("../models/campaign"); const quickMessageReportmodel = require("../models/quickMessageReport"); const quickVoiceReportmodel = require("../models/quickMessageReportVoice"); const quickEmailReportmodel = require("../models/quickEmailReport"); const senderIdModel = require("../models/senderId"); const http = require("http"); const https = require("https"); const dotenv = require("dotenv"); const jwt = require("jsonwebtoken"); const readXlsxFile = require("read-excel-file/node"); const excelJS = require("exceljs"); const fsPromises = require("fs").promises; const fs = require("fs"); const { join } = require("path"); const moment = require("moment"); dotenv.config(); const config = process.env; var multer = require("multer"); var forms = multer(); var randomstring = require("randomstring"); const { promisify } = require("util"); const util = require("util"); const mv = promisify(fs.rename); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = require("simple-node-logger").createRollingFileLogger(opts); async function getQuickReports(req, res) { try { var userId = req.headers["id"]; const startDate = req.body.startDate; const endDate = req.body.endDate; log.info(`[QUICK REPORTS], [getQuickReports], User Id [${userId}], Start Date [${startDate}], End Date [${endDate}]`); const list = await quickGenerateReportModel.getReportsDB(userId, startDate, endDate); if (!list) { log.info(`[QUICK REPORTS], [getQuickReports], [No Reports Found]`); return res.status(400).json({ msg: "no report found" }); } log.info(`[QUICK REPORTS], [getQuickReports], [Reports List has been sent successfully]`); return res.status(200).json(list); } catch (e) { log.info(`[QUICK REPORTS], [getQuickReports], Error [${e}]`); res.status(500).json(e); } } async function viewReports(req, res) { try { var userId = req.headers["id"]; log.info(`[QUICK REPORTS], [viewReports], User Id [${userId}]`); const list = await quickGenerateReportModel.viewReportsDB(userId); if (!list) { log.info(`[QUICK REPORTS], [viewReports], [No Reports Found]`); return res.status(400).json({ msg: "No Reports Found" }); } log.info(`[QUICK REPORTS], [viewReports], [Reports List has been sent successfully]`); return res.status(200).json(list); } catch (e) { log.info(`[QUICK REPORTS], [viewReports], Error [${e}]`); res.status(500).json(e); } } async function generateQuickReport(req, res) { try { var userId = req.headers["id"]; var startDate = req.body.startDate; var endDate = req.body.endDate; var type = req.body.type; let reportName = `Report_${startDate}_${endDate}`; log.info(`[QUICK REPORTS], [generateQuickReport], User Id [${userId}],Type [${type}], StartDate[${startDate}], Enddate[${endDate}]`); if (!startDate || !endDate) { log.info(`[QUICK REPORTS], [generateQuickReport], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } let isDataAvailable = false; // if (process.env.SMS == type) { isDataAvailable = await quickMessageReportmodel.quickmessageDetails(userId, startDate, endDate); // } if (!isDataAvailable) { log.info(`[QUICK REPORTS], [generateQuickReport], [No Data found for this date range]`); return res.status(400).json({ msg: `No Data found for this date range` }); } let fileUrl = ""; let reportId = await quickGenerateReportModel.addReport(userId, reportName, type, 1, fileUrl, startDate, endDate); log.info(`[QUICK REPORTS], [generateQuickReport], Report Id [${reportId}], [Report Id]`); const path = `./users/upload/reports/${reportId}`; let folderAction = await fs.promises.mkdir(path, { recursive: true }); const workbook = new excelJS.Workbook(); let filepart = reportName.split(" ").join("_"); var xlsxFileName = `${filepart}_${reportId}.xlsx`; fileUrl = `${config.FILEPATH_URL}/upload/reports/${reportId}/${xlsxFileName}`; // if (process.env.QUICK_SMS == type) { const quickmessageDetails = await quickMessageReportmodel.quickmessageDetails(userId, startDate, endDate, type); if (!quickmessageDetails) { log.info(`[QUICK REPORTS], [generateQuickReport], [No SMS Data found for this date range]`); return res.status(400).json({ msg: `No SMS Data found for this date range` }); } generatingReport(workbook, xlsxFileName, reportName, quickmessageDetails, path, reportId); await quickGenerateReportModel.updateFileUrl(reportId, fileUrl); log.info(`[QUICK REPORTS], [generateQuickReport], File URL[${fileUrl}] [The Report is being generating]`); return res.status(200).json({ url: fileUrl, msg: "The Report is being generating" }); } catch (e) { log.info(`[QUICK REPORTS], [generateQuickReport], Error [${e}]`); res.status(500).json(e); } } const generatingReport = (workbook, xlsxFileName, reportName, quickmessageDetails, path, reportId, type) => { return new Promise(async (resolve, reject) => { try { const worksheet = workbook.addWorksheet("Reports"); worksheet.columns = [ { header: "Sender Id", key: "SenderID", width: 20 }, { header: "Phone Number", key: "msisdn", width: 20 }, { header: "Message", key: "content", width: 40 }, // { header: "MessageId", key: "messageid", width: 40 }, { header: "Status", key: "status", width: 40 }, { header: "Type", key: "type", width: 40 }, { header: "Sent Date", key: "created_at", width: 40 }, // { header: "Delivered Date", key: "deliveredDate", width: 40 }, ]; worksheet.getRow(1).eachCell((cell) => { cell.font = { bold: true }; }); quickmessageDetails.map((record) => { let status = "Sent"; let type = "N/A"; let deliveredDate = "N/A"; if (record.status == process.env.SMS_DELIVERED) { status = "Delivered"; deliveredDate = record.updated_at; } else if (record.status == process.env.SMS_NOTDELIVERED) status = "Not Delivered"; else if (record.status == process.env.SMS_FAILED) status = "Failed"; else if (record.status == process.env.SMS_EXPired) status = "Expired"; if (record["type"] == process.env.QUICK_SMS) { type = "Quick"; } else if (record["type"] == process.env.TP_API) { type = "API"; } log.info(`[QUICK REPORTS], [generateReport], UserID [${record["user_id"]}], messageid [${record["quick_message_id"]}], type [${record["type"]}] Message [${record["content"]}], SENDERNAME [${record["senderName"]}] Sent Date [${record["created_at"]}], Delivered Date [${deliveredDate}], `); var rowdata = { SenderID: record["senderName"], msisdn: record["msisdn"], messageid: record["message_id"], content: record["content"], created_at: record["created_at"], status, type, //deliveredDate, }; worksheet.addRow(rowdata); }); await workbook.xlsx.writeFile(`${path}/` + xlsxFileName); await quickGenerateReportModel.updateReportStatus(2, reportId); log.info(`[QUICK REPORTS], [generateReport], [The Report has been generated]`); resolve(true); } catch (err) { log.info(`[QUICK REPORTS], [generatingReport], ERROR [${err}] `); reject(err); } }); }; async function generateCampaignReport(req, res) { try { var userId = req.headers["id"]; var startDate = moment().format("YYYY-MM-DD"); var endDate = moment().format("YYYY-MM-DD"); let campaignId = req.params["id"]; var type = req.body.type; let reportName = `Report_${startDate}_${endDate}`; log.info(`[QUICK REPORTS], [generateQuickReport], User Id [${userId}],Type [${type}], Campaign Id [${campaignId}]StartDate[${startDate}], Enddate[${endDate}]`); // if (!startDate || !endDate) { // log.info(`[QUICK REPORTS], [generateQuickReport], [Missing parameters]`); // return res.status(400).json({ msg: "Missing parameters" }); // } let isDataAvailable = false; // if (process.env.SMS == type) { isDataAvailable = await campaignModel.getCampaignReportById(campaignId); // } if (!isDataAvailable) { log.info(`[CAMPAIGNREPORTS], [generateCampaignReport], [No Data found for this date range]`); return res.status(400).json({ msg: `No Data found for this date range` }); } let fileUrl = ""; let reportId = await quickGenerateReportModel.addReport(userId, reportName, 1, 2, fileUrl, startDate, endDate); log.info(`[CAMPAIGNREPORTS], [generateCampaignReport], Report Id [${reportId}], [Report Id]`); const path = `./users/upload/reports/${reportId}`; let folderAction = await fs.promises.mkdir(path, { recursive: true }); const workbook = new excelJS.Workbook(); let filepart = reportName.split(" ").join("_"); var xlsxFileName = `${filepart}_${reportId}.xlsx`; fileUrl = `${config.FILEPATH_URL}/upload/reports/${reportId}/${xlsxFileName}`; // if (process.env.QUICK_SMS == type) { const campaignDetail = await campaignModel.getCampaignReportById(campaignId); log.info(`[CAMAPIGN], [generateCampaignReport], CDATA[${JSON.stringify(campaignDetail)}]`); if (!campaignDetail) { log.info(`[CAMAPIGN], [generateCampaignReport], [No SMS Data found]`); return res.status(400).json({ msg: `No SMS Data found ` }); } generatingCampaignReport(workbook, xlsxFileName, reportName, campaignDetail, path, reportId); log.info(`[CAMAPIGN], [generateCampaignReport], ReportId [${reportId}]`); await campaignModel.updateFileUrl(reportId, fileUrl); log.info(`[QUICK REPORTS], [generateQuickReport], File URL[${fileUrl}] [The Report is being generating]`); return res.status(200).json({ url: fileUrl, msg: "The Report is being generating" }); } catch (e) { log.info(`[QUICK REPORTS], [generateQuickReport], Error [${e}]`); res.status(500).json(e); } } const generatingCampaignReport = (workbook, xlsxFileName, reportName, campaignDetail, path, reportId) => { return new Promise(async (resolve, reject) => { try { const worksheet = workbook.addWorksheet("Reports"); worksheet.columns = [ { header: "First Name", key: "firstName", width: 20 }, { header: "Last Name", key: "lastName", width: 15 }, { header: "Phone Number", key: "mobile", width: 20 }, { header: "Sender Id", key: "senderId", width: 20 }, { header: "Campaign Name", key: "campaignName", width: 40 }, { header: "Status", key: "status", width: 20 }, { header: "Message", key: "message", width: 160 }, { header: "MessageId", key: "messageId", width: 160 }, { header: "CreationDate", key: "creationDate", width: 160 }, ]; worksheet.getRow(1).eachCell((cell) => { cell.font = { bold: true }; }); campaignDetail.map((record) => { let status = "Sent"; let deliveredDate = "N/A"; if (record.status == process.env.SMS_DELIVERED) { status = "Delivered"; } else if (record.status == process.env.SMS_NOTDELIVERED) status = "Not Delivered"; log.info(`[QUICK REPORTS], [generatingCallReport], UserID [${record["user_id"]}], messageid [${record["quick_message_id"]}], type [${record["type"]}] Message [${record["content"]}], Sent Date [${record["created_at"]}], Delivered Date [${deliveredDate}], `); var rowdata = { firstName: record["first_name"], lastName: record["last_name"], mobile: record["msisdn"], senderId: record["sender_id"], campaignName: record["name"], status: status, message: record["content"], messageId: record["message_id"], creationDate: record["created_at"], }; worksheet.addRow(rowdata); }); await workbook.xlsx.writeFile(`${path}/` + xlsxFileName); await quickGenerateReportModel.updateReportStatus(2, reportId); log.info(`[QUICK REPORTS], [generatingCallReport], Report Name [${reportName}], [The Report has been generated]`); resolve(true); } catch (err) { log.info(`[QUICK REPORTS], [generatingCallReport], ERROR [${err}] `); reject(err); } }); }; async function GetSmsReportsBySearch(req, res) { try { var userId = req.headers["id"]; const { type, value } = req.params; log.info(`[Reports], [GetSmsReports], User Id [${userId}], Type [${type}], Value [${value}]`); if (!type || !value) { log.info(`[QUICK REPORTS], [GetSmsReports], [Missing Parameters]`); return res.status(400).json({ msg: "Missing Parameters" }); } if (type == "msisdn") { const list = await reportModel.getSmsReportByMsisdn(value); if (!list) { log.info(`[QUICK REPORTS], [GetSmsReports], [No SMS Reports Found]`); return res.status(400).json({ msg: "No SMS Reports Found" }); } log.info(`[QUICK REPORTS], [GetSmsReports], [SMS Reports has been sent successfully]`); return res.status(200).json(list); } return res.status(400).json({ msg: "search type is not correct" }); } catch (e) { log.info(`[QUICK REPORTS], [GetSmsReports], Error [${e}]`); return res.status(500).json(e); } } var self = (module.exports = { getQuickReports, viewReports, generateQuickReport, GetSmsReportsBySearch, generateCampaignReport, });