@accounter/israeli-vat-scraper
Version:
Scraper app for fetching Israeli VAT data
95 lines (94 loc) • 4.13 kB
JavaScript
import { newPageByMonth } from '../utils/browser-util.js';
import { getReportExpansionInputs } from '../utils/evaluation-functions.js';
import { waitAndClick, waitForSelectorPlus } from '../utils/page-util.js';
import { monthExpansionRecordsHandler } from './month-expansion-records-handler.js';
const INPUTS_BUTTON_SELECTOR = '#LinkButton0';
/** תשומות */
export class MonthInputsHandler {
config;
prompt;
location;
index;
page = null;
constructor(config, prompt, location, index) {
this.config = config;
this.prompt = prompt;
this.location = [...location, 'Inputs'];
this.index = index;
}
handle = async (logger) => {
this.prompt.update(this.location, 'Fetching...', logger);
try {
this.page = await newPageByMonth(this.config.visibleBrowser, this.location[0], this.index, logger);
await waitAndClick(this.page, INPUTS_BUTTON_SELECTOR, logger);
const inputsTable = await waitForSelectorPlus(this.page, '#tblSikum', logger);
const inputsData = await inputsTable?.evaluate(getReportExpansionInputs);
// gt income records
for (const key in inputsData) {
if (key === 'total') {
continue;
}
if (inputsData[key].received.recordsCount > 0) {
const index = (() => {
switch (key) {
case 'regularInput':
return 3;
case 'pettyCash':
return 4;
case 'selfInvoiceInput':
return 5;
case 'importList':
return 6;
case 'rashapSupplier':
return 7;
case 'otherDocument':
return 8;
default:
return null;
}
})();
const secondaryIndex = 2;
if (index) {
const recordsHandler = new monthExpansionRecordsHandler(this.config, this.prompt, this.location, INPUTS_BUTTON_SELECTOR, index, secondaryIndex);
inputsData[key].received.records =
await recordsHandler.handle(logger);
}
}
if (inputsData[key].incorrect.recordsCount > 0) {
const index = (() => {
switch (key) {
case 'regularInput':
return 3;
case 'pettyCash':
return 4;
case 'selfInvoiceInput':
return 5;
case 'importList':
return 6;
case 'rashapSupplier':
return 7;
case 'otherDocument':
return 8;
default:
return null;
}
})();
const secondaryIndex = 5;
if (index) {
const recordsHandler = new monthExpansionRecordsHandler(this.config, this.prompt, this.location, INPUTS_BUTTON_SELECTOR, index, secondaryIndex);
inputsData[key].incorrect.records =
await recordsHandler.handle(logger);
}
}
}
this.page.browser().close();
this.prompt.update(this.location, 'Done', logger);
return inputsData;
}
catch (e) {
this.prompt.addError(this.location, e?.message || e, logger);
this.page?.browser().close();
return undefined;
}
};
}