temu-labels-crawler/sync-fi-invoices.js

80 lines
1.9 KiB
JavaScript

const puppeteer = require("puppeteer");
const luxon = require("luxon");
const fs = require("fs");
const path = require("path");
const dotenv = require("dotenv").config({ path: __dirname + "/.env" });
const utils = require("./utils");
(async () => {
console.log(
`===========< STARTED ${utils.getPakistanStandardTime(
luxon.DateTime.now()
)} >=========`
);
/**
* loading config data
*/
const config = JSON.parse(fs.readFileSync(__dirname + "/config.json"));
const environment = process.env["ENVIRONMENT"];
const browser = await puppeteer.launch({
headless: "new",
args: ["--no-sandbox", "--disable-setuid-sandbox"]
});
const page = await browser.newPage();
await page.goto(
config[environment].psw_url,
{
waitUntil: "domcontentloaded",
timeout: 0
}
);
await page.waitForSelector("tbody tr.ItemStyle");
const data = await page.evaluate(() => {
const rows = document.querySelectorAll(
"tbody tr.ItemStyle, tbody tr.AlternatingItemStyle"
);
return Array.from(rows).map(row => {
const cells = row.querySelectorAll("td");
const finNo =
cells[0]?.querySelector("label")?.innerText.trim() ||
cells[0]?.innerText.trim();
return {
financialInstrumentNo: finNo,
date: cells[1]?.innerText.trim(),
authorizedDealer: cells[2]?.innerText.trim(),
consigneeName: cells[3]?.innerText.trim(),
invoiceValue: cells[4]?.innerText.trim(),
currency: cells[6]?.innerText.trim(),
status: cells[7]?.innerText.trim(),
balance: cells[8]?.innerText.trim()
};
});
});
const jsonDir = path.join(config[environment].psw_fi_invoices_path, "data/unprocessed");
fs.mkdirSync(jsonDir, { recursive: true });
const outputFile = path.join(jsonDir, `${luxon.DateTime.now().toMillis()}.json`);
fs.writeFileSync(outputFile, JSON.stringify(data, null, 2));
console.log(`Saved JSON to ${outputFile}`);
await page.close();
await browser.close();
})();