PK!A7��nconst contactGroup = require("../models/contactGroup"); const contact = require("../models/contact"); const reportModel = require("../models/reports"); const campaignModel = require("../models/campaign"); const userModel = require("../models/user"); const invoiceModel = require("../models/invoices"); const campaignReportModel = require("../models/campaignReport"); 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); var pdf = require("pdf-creator-node"); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = require("simple-node-logger").createRollingFileLogger(opts); async function getInvoices(req, res) { try { var userId = req.headers["id"]; log.info(`[INVOICES], [getInvoices], User Id [${userId}]`); const list = await invoiceModel.getInvoicesDB(userId); if (!list) { log.info(`[INVOICES], [getInvoices], [No Invoice Found]`); return res.status(400).json({ msg: "No Invoice Found" }); } log.info( `[INVOICES], [getInvoices], [Invoice List has been sent successfully]` ); return res.status(200).json(list); } catch (e) { log.info(`[INVOICES], [getInvoices], Error [${e}]`); res.status(500).json(e); } } async function getCreateInvoiceInitialData(req, res) { try { var userId = req.headers["id"]; log.info(`[INVOICES], [getCreateInvoiceInitialData], User Id [${userId}]`); const users = await userModel.getActiveClientUsers( process.env.CLIENT_USER, process.env.ACTIVE, ); log.info( `[INVOICES], [getCreateInvoiceInitialData], [Initial Data has been sent successfully]` ); return res.status(200).json({ users }); } catch (e) { log.info(`[INVOICES], [getCreateInvoiceInitialData], Error [${e}]`); res.status(500).json(e); } } async function createInvoice(req, res) { try { var userId = req.headers["id"]; let { user, invoiceType, invoiceDate, dueDate, paidDate, paymentMethod, requestedBy, approvedBy, notes, planDetails, totalPrice, } = req.body; if (paymentMethod == config.CASH) paymentMethod = "Cash"; else if (paymentMethod == config.CHEQUE) paymentMethod = "Cheque"; else paymentMethod = "Credit Card"; log.info( `[INVOICES], [createInvoice], User Id [${userId}], Selected User Id [${user}], Invoice Type [${invoiceType}], Invoice Date [${invoiceDate}], Due Date [${dueDate}], Paid Date [${paidDate}], Payment Method [${paymentMethod}], Requested By [${requestedBy}], Approved By [${approvedBy}], Invoice Notes [${notes}], Total Price [${totalPrice}], Plan Details [${JSON.stringify( planDetails )}]` ); if ( !user || !invoiceType || !invoiceDate || !dueDate || !paidDate || !paymentMethod || !requestedBy || !approvedBy || !planDetails || !totalPrice ) { log.info(`[INVOICES], [createInvoice], [Missing Parameters]`); return res.status(400).json({ msg: "Missing Parameters" }); } let invoiceNo = await invoiceModel.getLastInvoiceNumber(); if (!invoiceNo) invoiceNo = 1152; else invoiceNo = Number(invoiceNo.invoice_number) + 1; const userDetails = await userModel.isUserExist(user); if (!userDetails) { log.info( `[INVOICES], [createInvoice], User Id [${user}], [No User Found]` ); return res.status(400).json({ msg: "No User Found" }); } const html = fs.readFileSync("./users/pdfsample/invoice.html", "utf8"); let pdfname = `report_${userDetails?.name}_${new Date().getTime()}.pdf`; pdfname = pdfname.replace(/ /g, "_"); const logoLink = `${process.env.FILEPATH_URL}/logo.png`; let newPlanDetails = planDetails.map((plan) => { let planName = "SMS"; if (plan.plan == process.env.VOICE) planName = "VOICE"; else if (plan.plan == process.env.EMAIL) planName = "EMAIL"; return { ...plan, planName }; }); let options = { format: "A3", orientation: "portrait", border: "10mm", }; let document = { html: html, data: { logoLink, planDetails: newPlanDetails, userDetails, invoiceNo, invoiceDate, paidDate, orderNumber: 22222222, paymentMethod, totalPrice: totalPrice?.toFixed(2), }, path: "./users/invoicePdf/" + pdfname, type: "", }; let fileUrl = `${process.env.FILEPATH_URL}/invoicePdf/${pdfname}`; await invoiceModel.createInvoiceDB( user, invoiceType, invoiceDate, dueDate, requestedBy, approvedBy, notes, totalPrice, invoiceNo, fileUrl ); pdf .create(document, options) .then(() => { log.info( `[INVOICES], [createInvoice], [Invoice has been created successfully] [${fileUrl}]` ); return res .status(200) .json({ msg: "Invoice has been created successfully" }); }) .catch((error) => { log.info(`[INVOICES], [createInvoice], PDF Error [${error}]`); return res.status(400).json({ msg: "Couldn't able to Create Invoice" }); }); } catch (e) { log.info(`[INVOICES], [createInvoice], Error [${e}]`); res.status(500).json(e); } } var self = (module.exports = { getInvoices, createInvoice, getCreateInvoiceInitialData, });