public uploadDID(req: Request, res: Response, next: NextFunction) { let session = new SessionManagment(req, res, next); session.GetSession((error: any, sessdata: any) => { if (error == 1) { var sdata: any = JSON.parse(req.body.uploadDid) // const connection = sdata.connection[0].currid; let NumberType: any = sdata.numbertype; let did_Rates: any = sdata.Rates.split('-'); let billingfreq: any = did_Rates[2]; let flag_did: any = did_Rates[0]; did_Rates = parseFloat(did_Rates[1]); let user: any = sdata.user.split('-') let iduser: any = user[0] let idaccount: any = user[1] let objfile = new ModelCsvUpload(req, res); let fdata = objfile.fileUpload(); let results: any = []; fs.createReadStream(req.file.path) .pipe(csv()) .on("data", (data: { [key: string]: string }) => { const value = data["(NPANXXYYYY)"]; if (value) { let numberData = new APIBase(); numberData.checkNumberType(value, (errorr, resp) => { if (/^\d+$/.test(value.replace(/\s/g, ""))) { results.push(value.replace(/\s/g, "")); } }) } }) .on("end", () => { console.log("Read CSV successfully:", results); if (results.length > 0) { // let firstrow = firstrow1[0].split('\r'); // let str: string = ""; // if (!firstrow[0].match(/[a-z]/)) { // console.log("LETTER FOUND"); // str = ''; // } else { // console.log("LETTER NOT FOUND"); // str = 'IGNORE 1 LINES'; // } // let str_array: Array = []; // str_array = firstrow[0].split(','); // for (var i = 0; i < str_array.length; i++) { // // Trim the excess whitespace. // str_array[i] = str_array[i].replace(/^\s*/, "").replace(/\s*$/, "").replace(/\"/g, "").trim(); // } //remove uploaded temp file from disk. /* fs.unlink(fdata[2], (err: any) => { if (err) throw err; }); */ // let rate = new APIBase; // rate.getRate(req, res, sdata.idtariff, "message", sdata.numbertype, (err, voice_rate) => { // let did_rates: any = Array.isArray(voice_rate) && voice_rate.length > 0 ? voice_rate[0].rate : 0; // if (err == 1 && did_rates > 0) { // if (results.length > 0) { if (did_Rates >= 0 || did_Rates === 0) { let objv0 = new ModelRawQuery(req, res); // objv0.qrysql = "SELECT t.`proration`,t.`day_num` FROM `user`u JOIN `tariff`t ON u.idtariff=t.idtariff WHERE iduser= '" + iduser + "'"; objv0.qrysql = "SELECT t.`day_num`, DATE_FORMAT(IF(DATE_ADD(NOW(),INTERVAL t.day_num DAY) >NOW(), DATE_ADD(NOW(),INTERVAL t.day_num DAY),LAST_DAY(NOW())),'%Y-%m-%d %H:%i:%s') AS subscription_end_date FROM `user`u INNER JOIN `tariff` t ON t.idtariff=u.idtariff WHERE u.iduser= '" + iduser + "'"; objv0.prepare(); objv0.execute((pro_err, days) => { if (pro_err == 1 && days.length > 0) { let did_dis_days = days[0].day_num > 0 ? days[0].day_num : 0; let obj = new ModelRawNonQuery(req, res); let filelname = req.file.originalname.replace(/"/g, '\\"').replace(/'/g, "\\'"); fdata[0] = fdata[0].replace(/"/g, '\\"').replace(/'/g, "\\'"); obj.nonqrysql = "INSERT INTO `upload_did` (`uploaded_file`, `did_count`, `iduser`, `idaccount`, `description`, `campaign`, `connection`, `provider`) VALUES ('" + fdata[0] + "', '0', '" + iduser + "', '" + idaccount + "','" + parseBody(sdata.description) + "', '" + sdata.campaign + "', '" + sdata.connection + "', '" + sdata.provider + "')"; obj.prepare(); obj.execute((error: any, result: any) => { if (error == 1) { let lastid = result.insertId; // let iQry: string = "LOAD DATA LOCAL INFILE'" + fdata[1] + fdata[0] + "' IGNORE INTO TABLE `did_buy` CHARACTER SET UTF8\n" // iQry += "FIELDS TERMINATED BY ','\n" // iQry += "ENCLOSED BY ' '\n" // iQry += "ESCAPED BY ' '\n", // iQry += "LINES TERMINATED BY '\n' IGNORE 1 LINES\n" // iQry += "(@col1)\n" // iQry += "SET `did`=@col1, `iduser`='" + iduser + "', `account_id`='" + idaccount + "', `provider`='" + sdata.provider + "',`sinch_status`='0', `connection_key`='" + sdata.connection + "', `inbound_key`='" + sdata.inbound + "', `outbound_key`='" + sdata.outbound + "', `rates`='" + did_rates + "', `nrc_rates`='" + did_rates + "',`created_at`=NOW(), `type`='" + sdata.numbertype + "', `npa`=SUBSTRING(SUBSTR(REPLACE(REPLACE((@col1),' ',''),'\r',''),-10),1,3), `nxx`=SUBSTRING(REPLACE(REPLACE((@col1),' ',''),'\r',''),-7,3), `disconnect_did_status`='1', `id_upload`='" + lastid + "', `status`='completed', `osr_status`='';" let fun = new Number(); fun.prorationGet(req, res, NumberType, flag_did, sdata.idtariff, (error: any, proration: any) => { if (error == 1) { // let fullrates = parseFloat(did_Rates).toFixed(3) + parseFloat(proration.setup_cost).toFixed(3); let fullrates = (parseFloat(did_Rates) + parseFloat(proration.setup_cost)).toFixed(3); let rate = new APIBase(); rate.prorateCalculator(req, res, proration.proration, did_Rates, proration.setup_cost, (pc_err, prorate1) => { if (pc_err == 1) { rate.calculateNextBillingDate(req, res, billingfreq, (billingError, billing) => { if (billingError == 1) { let ProrateSingle = typeof prorate1 != 'undefined' && prorate1 > 0 ? prorate1 : 0; let iQry = "INSERT INTO `did_buy`(`did`,`iduser`,`account_id`,`provider`,`sinch_status`, `connection_key`,`inbound_key`, `outbound_key`,`rates`, `nrc_rates`, `created_at`,`type`, `npa`,`nxx`, `disconnect_did_status`,`id_upload`, `status`,`did_sub_type`,`did_disconnect_days`, `pro_rates`, `subscription_end_date`,`billing_frequency`,nextbilling_cycle) VALUES"; results.forEach((DID: any) => { let npa = NumberType === 'SC' ? '' : DID.slice(-10).substring(0, 3); let nxx = NumberType === 'SC' ? '' : DID.slice(-10).substring(3, 6); iQry += "('" + DID + "'," + iduser + "," + idaccount + ", '" + sdata.provider + "', '0','" + sdata.connection + "', '" + sdata.inbound + "', '" + sdata.outbound + "', '" + fullrates + "', '" + fullrates + "',NOW(),'" + sdata.numbertype + "','" + npa + "','" + nxx + "', '1', '" + lastid + "', 'completed', '" + flag_did + "','" + did_dis_days + "', '" + ProrateSingle + "','" + days[0].subscription_end_date + "','" + setToZero(billingfreq) + "','" + billing + "'),"; }); let obj = new ModelRawNonQuery(req, res); obj.nonqrysql = iQry.slice(0, -1); obj.prepare(); obj.execute((error: any, result: any) => { if (error == 1) { let objlc = new ModelRawQuery(req, res); objlc.qrysql = "SELECT COUNT(*) `did` FROM `did_buy` WHERE id_upload='" + lastid + "'"; objlc.prepare(); objlc.execute((errorC: any, listcount: any) => { if (errorC == 1) { let objlc2 = new ModelRawNonQuery(req, res); objlc2.nonqrysql = "UPDATE `upload_did` SET `did_count`='" + listcount[0].did + "' WHERE `idupload`='" + lastid + "'"; objlc2.prepare(); objlc2.execute((errU: any, result9: any) => { if (errU == 1) { let prorate: any = parseFloat(ProrateSingle) * listcount[0].did; console.log("Prorate::", prorate); if ((flag_did == 2 && prorate >= 0) || (flag_did != 2 && prorate >= 0)) { // let objlc2 = new ModelRawNonQuery(req, res); // objlc2.nonqrysql = "UPDATE `wallet` SET `balance`=`balance`-'" + prorate + "' WHERE idaccount='" + idaccount + "'"; // objlc2.prepare(); // objlc2.execute((errUy: any, result9: any) => { let logPayload = { funDetail: { tableName: 'wallet', functionName: 'uploadDID', logName: 'Wallet Update' }, data: { balance: '`balance`' + '-' + parseFloat(prorate).toFixed(2) }, connWhere: { idaccount: idaccount } }; rate.insertLog1(req, res, logPayload, (log_error1, did_log1) => { // let iQry: string = "INSERT INTO `wallet_recharge_log` SET " // iQry += "`idaccount`=" + idaccount + ", " // iQry += "`amount`='-" + prorate + "', " // iQry += "`purpose`='Wallet amount successfully updated for bulk DID import', " // iQry += "`status`=1;" // let objWL = new ModelRawNonQuery(req, res); // objWL.nonqrysql = iQry // objWL.prepare() // objWL.execute((error: any, result: any) => { // console.log("Transaction response::", result) // }) let logPayload1 = { funDetail: { tableName: 'wallet_recharge_log', functionName: 'uploadDID', logName: 'wallet' }, data: { idaccount: idaccount, amount: '-' + parseFloat(prorate).toFixed(4), purpose: 'Wallet amount successfully updated for bulk DID import', status: 1, } }; rate.insertLog(req, res, logPayload1, (log_error, did_log) => { console.log("Transaction response::", did_log) }) let objlc2 = new ModelRawQuery(req, res); objlc2.qrysql = "SELECT `did`, `order_id`, `npa`, `nxx`, `state`, `ratecenter` FROM `did_buy` WHERE id_upload=" + lastid + ";"; objlc2.prepare() objlc2.execute((error: any, result: any) => { let DIDRecords: any = Array.isArray(result) && result.length > 0 ? result : [] let DI: number = 0 iQry = "" for (let x of DIDRecords) { iQry += "INSERT INTO `did_log` (`account_id`, `user_id`, `status`, `did`, `provider`, `order_id`, `iduser`, `disconnect_did_status`, `npa`, `nxx`, `state`, `ratecenter`, `rates`, `idapi`, `pro_rates`, `type`,`event_type`,`description`) VALUES(" + idaccount + ", " + iduser + ", 'completed','" + x.did + "', '" + sdata.provider + "', '" + x.order_id + "','" + iduser + "', '1', '" + x.npa + "', '" + x.nxx + "', '" + x.state + "', '" + x.ratecenter + "', '" + fullrates + "', '" + setToZero(sessdata.idapi) + "', '" + ProrateSingle + "', '" + sdata.numbertype + "','2','Import DID');\n" DI++ } if (DI > 0) { let objlc2 = new ModelRawNonQuery(req, res); objlc2.nonqrysql = iQry objlc2.prepare(); objlc2.execute((error, result) => { let objv = new RawView(res); objv.prepare({ message: "DID Uploaded Successfully!", status: 201 }); objv.execute(); }) } else { let objv = new RawView(res); objv.prepare({ message: "DID did not uploaded something went wrong!", status: 502 }); objv.execute(); } }) }); } else { // let iQry: string = "INSERT INTO `wallet_recharge_log` SET " // iQry += "`idaccount`=" + idaccount + ", " // iQry += "`amount`='-" + prorate + "', " // iQry += "`purpose`='Billing prorate can't be 0 or less then 0 during DID upload', " // iQry += "`status`=2;" // let objWL = new ModelRawNonQuery(req, res); // objWL.nonqrysql = iQry // objWL.prepare() // objWL.execute((error: any, result: any) => { // console.log("Transaction response::", result) // }) let logPayload1 = { funDetail: { tableName: 'wallet_recharge_log', functionName: 'uploadDID', logName: 'wallet' }, data: { idaccount: idaccount, amount: '-' + prorate, purpose: "Billing prorate can't be 0 or less then 0 during DID upload", status: 2, } }; rate.insertLog(req, res, logPayload1, (log_error, did_log) => { console.log("Transaction response::", did_log) }) let objv = new RawView(res); objv.prepare({ message: "Billing prorate can't be 0 or less then 0!", status: 502 }); objv.execute(); } // update end subscription date (Need to Change) /* let obj0 = new ModelRawQuery(req, res); obj0.qrysql = "SELECT d.iddid, d.iduser, d.account_id, d.user_id,IF(DATE_ADD(d.`created_at`,INTERVAL t.day_num DAY) >NOW(),DATE_ADD(d.`created_at`,INTERVAL t.day_num DAY),LAST_DAY(NOW()))AS subscription_end_date,DATE_FORMAT(d.`created_at`,'%Y-%m-%d %H:%i:%s')`created_at` FROM `did_buy`d LEFT JOIN `endpoint`e ON d.connection_key = e.connection_key INNER JOIN `user`u ON d.iduser=u.iduser INNER JOIN `tariff` t ON t.idtariff=u.idtariff WHERE d.`id_upload`='" + lastid + "' AND disconnect_did_status = '1'"; obj0.prepare(); obj0.execute((dids_err, didRes) => { let dates = didRes[0].subscription_end_date; let isoDate = new Date(dates); let subscriptionEndDate = isoDate.toJSON().slice(0, 19).replace('T', ' '); let obj01 = new ModelRawNonQuery(req, res); obj01.nonqrysql = "UPDATE `did_buy` SET `pro_rates`='" + ProrateSingle + "',`subscription_end_date`='" + subscriptionEndDate + "' WHERE `id_upload`=" + lastid + ";" obj01.prepare(); obj01.execute((error, result) => { }) }); */ } else { let objv = new RawView(res); objv.prepare({ message: "Someting went wrong with upload DID!", status: 501, error: result9 }); objv.execute(); } }); } else { let objv = new RawView(res); objv.prepare({ message: "Something went wrong with DID Count!", status: 502, error: listcount }); objv.execute(); } }); } else { let objv = new RawView(res); objv.prepare({ message: "Data Not Found From Type!", status: 503, error: error }); objv.execute(); } }); } else{ let obj = new RawView(res); obj.prepare(billing); obj.execute(); } }); /* let setup_cost : any = proration.setup_cost; let proration_status:any = proration.proration; let dateObj = new Date(); let day = dateObj.getUTCDate(); let nDate: any = new Date() // lDate //Total days of month let lDate: any = (new Date(nDate.getFullYear(), (nDate.getMonth() + 1), 0)).getDate() let totalDays = (lDate - day) + 1; let ProrateSingle: any = proration_status == "true" ? (((totalDays * did_Rates) / lDate) + setup_cost) : (did_Rates + setup_cost); */ } else { let objv = new RawView(res); objv.prepare({ error_code: 0, error: 'Wallet Issue', message: "Something Went Wrong to Fetch Account Balance.", status: 503 }); objv.execute(); } }); } else { let objv = new RawView(res); objv.prepare({ error_code: 0, status: 502, message: "Something went wrong with connection!" }); objv.execute(); } }); } else { let objv = new RawView(res); objv.prepare({ message: "Something Went Wrong With Connection!", status: 502, error: result }); objv.execute(); } }); } else { let objv = new RawView(res); objv.prepare({ message: "Something went wrong with get days. Please complete the onboarding first for this customer!", status: 502, }); objv.execute(); } }) } else { let objv = new RawView(res); objv.prepare({ message: "DID rates not found!", status: 502, }); objv.execute(); } // } // else { // let objv = new RawView(res); // objv.prepare({ // message: "DID did not found!", // status: 502, // }); // objv.execute(); // } // }); } else { let objv = new RawView(res); objv.prepare({ message: "DID did not found!", status: 502, }); objv.execute(); } // }); }); } else { let objv = new Res406(res); objv.prepare(session); objv.execute(); } }); }