PK!A7��nconst userModel = require("../models/user"); const quickmessage = require("../models/quickMessage"); const senderIdModel = require("../models/senderId"); const accountCreditsModel = require("../models/accountCredits"); const connections = require("../models/connection"); const messageIdGen = require("../library/messageIdGenerate"); const reqLib = require("../library/request"); const reports = require("../models/reports"); const axios = require('axios'); 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); var pdf = require("pdf-creator-node"); const common = require("../helper/common"); const quickMessageReport = require("../models/quickMessageReport"); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = require("simple-node-logger").createRollingFileLogger(opts); async function runQuickMessage(req, res) { try { let userId = req.headers["id"]; let { type, recipients, message, sender_Id, operator, url } = req.body; log.info( `[QUICK MESSAGES], [runQuickmessage], User Id [${userId}], Type [${type}], Recipients [${recipients}], Sender Id [${sender_Id}], Operator [${operator}], Message [${message}], Url [${url}]` ); if (!type || !recipients || !message || !sender_Id) { log.info(`[QUICK MESSAGES], [runQuickmessage], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } let contactArr = recipients?.split(","); const oldContactLength = contactArr.length; contactArr = Array.from(new Set(contactArr)); const newContactLength = contactArr.length; if (oldContactLength > newContactLength) { log.info(`[QUICK MESSAGES], [runQuickmessage], [${oldContactLength - newContactLength} Duplicate Entries]`); } let balanceConsumed = 0; if (contactArr) { balanceConsumed = contactArr?.filter((mobile) => mobile.length >= 9).length; } //>= 9 // let contactLength = contactArr?.length; // let mobileLength = mobile?.length; // log.info(`number [${mobileLength}]`) // balanceConsumed = contactArr?.length; //checking message length let isLengthExceeds = message?.length / 160; if (isLengthExceeds > 1) { balanceConsumed = balanceConsumed * Math.ceil(isLengthExceeds); log.info( `[QUICK MESSAGES], [runQuickmessage], Message Length Exceeds [${message?.length}], Contact Length [${contactLength}], Mobile [${JSON.stringify(contactArr)}] Balance Consumed [${balanceConsumed}]` ); } //checking account balance const accountBal = await accountCreditsModel.checkAccountBal(userId); const isSufficientBal = common.checkingBalance( "QUICK MESSAGES", "runQuickmessages", accountBal, balanceConsumed, ); if (!accountBal || !isSufficientBal) { return res .status(400) .json({ msg: "Insufficient balance to send quick message" }); } const senderIdDetails = await senderIdModel.getSenderIdById(sender_Id); if (false == senderIdDetails) { log.info(`[QUICK MESSAGES], [runQuickmessage], Sender Id not found`); return res.status(200).json({ msg: "No sender Id found" }); } contactArr.map(async (contact) => { if (contact?.length < 9) { // reject const mobile = process.env.COUNTRY_CODE + contact; log.info(`[QUICK MESSAGES], [runQuickmessage], Mobile [${mobile}] Number is not Correct`); await quickmessage.addquickmessage( userId, sender_Id, mobile, 3,//status message, 1,//type ); } else { const mobile = process.env.COUNTRY_CODE + contact.slice(-9); log.info(`[QUICK MESSAGES], [runQuickmessage], Mobile [${mobile}]`); let lastId = await quickmessage.addquickmessage( userId, sender_Id, mobile, 1, message, 1, ); await accountCreditsModel.deductBalance( userId, accountBal?.sms - balanceConsumed, "sms" ); log.info( `[QUICK MESSAGES], [runQuickmessage], [Quick sms started] Balance Consumed [${balanceConsumed}], Quick MessageType [SMS]` ); const getsmsparms = await connections.getConnectionbyid(12); if (getsmsparms) { let msgId = messageIdGen.generateMessageId(userId, lastId); log.info(`[Quick Message], [runQuickMessage], msgId [${msgId}]`); let baseUrl = 'http://localhost:' + getsmsparms.smsbox_port; let dlrUrl = `${config.QUICK_DLR_ENDPOINT}?userId=${userId}&quickSMSId=${lastId}&messageId=${msgId}&type=%d&receiver=%p&reply=%A&time=%t&usr=%n&message=%b`; let url = baseUrl + '/cgi-bin/sendsms?username=tester' + '&smsc=smpp' + '&password=foobar' + '&to=' + mobile + '&from=' + senderIdDetails.sender_id + '&text=' + encodeURIComponent(message)+ '&dlr-url=' + encodeURIComponent(dlrUrl)+ '&dlr-mask=31'; log.info(`[Quick Message], [runQuickMessage], url [${url}]`); axios.get(url) .then((response) => { log.info(`[Quick Message], [runQuickMessage], Response [${response.data}]`); // const parts = response.data.split('|'); // log.info(`[Quick Message], [runQuickMessage], Respose ONE [${JSON.stringify(parts[2])}]`); // const messageId = parts[1]; // const status = parts[2]; // if (status == "Success") { // quickmessage.updatemessageId(messageId, process.env.PAYMENT_SUCCESS, lastId); // } else { // quickmessage.updatemessageId(messageId, process.env.PAYMENT_FAILED, lastId); // } quickmessage.updatemessageId(msgId, lastId); }) .catch((error) => { log.info(`[Quick Message], [runQuickMessage], Respose TWO [${JSON.stringify(error)}]`); console.error('Error:', error); }); } else { return res.status(200).json({ msg: "invalid operator", // userCredit: NewAccountBal, }); } } }); return res.status(200).json({ msg: "Quick message is being sent", // userCredit: NewAccountBal, }); } catch (e) { log.info(`[Quick Message], [runQuickMessage], Error [${e}]`); return res.status(500).json(e); } } async function getQuickMessages(req, res) { try { var userId = req.headers["id"]; let userType; // = req.headers["usertype"]; let { type, searchType, searchValue, startDate, endDate } = req.body; if ("undefined" == req.headers["usertype"]) userType = process.env.CLIENT_USER; else userType = req.headers["usertype"]; log.info( `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], User Type [${userType}]` ); // normal QuickMessage let list = {}; let sms; if (process.env.CLIENT_USER == userType) { if (searchValue) { log.info( `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [SMS], Search Type [${searchType}], Search Value [${searchValue}], StartDate [${startDate}], EndDate [${endDate}]` ); sms = await quickmessage.getQuickMessageUserFilter( userId, searchType, searchValue, ); } else { sms = await quickmessage.getQuickMessageUser( userId, startDate, endDate ); } // voice = await quickmessage.getQuickVoiceUser( // userId, // process.env.VOICE // ); if (process.env.EMAIL == type && "" != searchValue) { log.info( `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [EMAIL], Search Type [${searchType}], Search Value [${searchValue}], StartDate [${startDate}], EndDate [${endDate}]` ); // email = await quickmessage.getQuickEmailUserFilter( // userId, // process.env.EMAIL, // searchType, // searchValue // ); } else { // email = await quickmessage.getQuickEmailUser( // userId, // process.env.EMAIL // ); } // log.info( // `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], SMS [${JSON.stringify(sms)}]` // ); list = { sms: sms || [] }; } else { if (searchValue) { log.info( `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [SMS], Search Type [${searchType}], Search Value [${searchValue}] StartDate [${startDate}], EndDate [${endDate}]` ); sms = await quickmessage.getQuickMessageAdminFilter(searchType, searchValue); } else { sms = await quickmessage.getQuickMessageAdmin(startDate, endDate); } if (process.env.EMAIL == type && "" != searchValue) { log.info( `[QUICKMESSAGE], [getQuickMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [EMAIL], Search Type [${searchType}], Search Value [${searchValue}]` ); // email = await quickmessage.getQuickEmailAdminFilter(process.env.EMAIL, searchType, searchValue); } else { // email = await quickmessage.getQuickEmailAdmin(process.env.EMAIL); } // voice = await quickmessage.getQuickVoiceAdmin(process.env.VOICE); list = { sms: sms || [] }; } log.info( `[QUICK MESSAGES], [getQuickMessages], [Quick Messages List has been sent successfully]` ); return res.status(200).json(list); } catch (e) { log.info(`[QUICK MESSAGES], [getQuickMessages], Error [${e}]`); res.status(500).json(e); } } var self = (module.exports = { runQuickMessage, // runQuickMessageForExcel, getQuickMessages, });