v1.0.0
This commit is contained in:
123
scripts/generatorExcel.js
Normal file
123
scripts/generatorExcel.js
Normal file
@@ -0,0 +1,123 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const ExcelJS = require('exceljs');
|
||||
|
||||
async function exportData() {
|
||||
const db = new sqlite3.Database('database.sqlite');
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
|
||||
// выгрузка подъездов
|
||||
await new Promise((resolve, reject) => {
|
||||
db.all(`
|
||||
SELECT
|
||||
e.id as entrance_id,
|
||||
e.entrance_number as entrance_title,
|
||||
h.number as house_number,
|
||||
h.title as house_title
|
||||
FROM entrance e
|
||||
JOIN house h ON e.house_id = h.id
|
||||
`, async (err, entrances) => {
|
||||
if (err) return reject(err);
|
||||
|
||||
for (const entrance of entrances) {
|
||||
let title = String(entrance.house_title)
|
||||
.replace('вул. ', '')
|
||||
.replace('Проспект ', '');
|
||||
|
||||
const sheet = workbook.addWorksheet(
|
||||
`${title} ${entrance.house_number} ( П. ${entrance.entrance_title + 1} )`
|
||||
);
|
||||
|
||||
sheet.columns = [
|
||||
{ header: 'ID', key: 'id', width: 10 },
|
||||
{ header: 'Вістник / Група', key: 'name', width: 30 },
|
||||
{ header: 'Початок', key: 'start', width: 20 },
|
||||
{ header: 'Кінець', key: 'end', width: 20 }
|
||||
];
|
||||
sheet.getColumn('start').numFmt = 'dd.mm.yyyy';
|
||||
sheet.getColumn('end').numFmt = 'dd.mm.yyyy';
|
||||
|
||||
await new Promise((resolve2, reject2) => {
|
||||
db.all(`
|
||||
SELECT id, name, date_start, date_end, group_id
|
||||
FROM entrance_history
|
||||
WHERE entrance_id = ?
|
||||
`, [entrance.entrance_id], (err, rows) => {
|
||||
if (err) return reject2(err);
|
||||
|
||||
rows.forEach(row => {
|
||||
const startDate = row.date_start ? new Date(row.date_start) : null;
|
||||
const endDate = row.date_end ? new Date(row.date_end) : null;
|
||||
|
||||
let name = row.name;
|
||||
if (row.name === 'Групова') {
|
||||
name = `${row.name} (${row.group_id})`;
|
||||
}
|
||||
|
||||
sheet.addRow({ id: row.id, name, start: startDate, end: endDate });
|
||||
});
|
||||
resolve2();
|
||||
});
|
||||
});
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
// выгрузка участков
|
||||
await new Promise((resolve, reject) => {
|
||||
db.all(`
|
||||
SELECT
|
||||
homestead.id as homestead_id,
|
||||
homestead.number as homestead_number,
|
||||
homestead.title as homestead_title
|
||||
FROM homestead
|
||||
`, async (err, homesteads) => {
|
||||
if (err) return reject(err);
|
||||
|
||||
for (const homestead of homesteads) {
|
||||
const sheet = workbook.addWorksheet(`${homestead.homestead_title} ${homestead.homestead_number}`);
|
||||
|
||||
sheet.columns = [
|
||||
{ header: 'ID', key: 'id', width: 10 },
|
||||
{ header: 'Вістник / Група', key: 'name', width: 30 },
|
||||
{ header: 'Початок', key: 'start', width: 20 },
|
||||
{ header: 'Кінець', key: 'end', width: 20 }
|
||||
];
|
||||
sheet.getColumn('start').numFmt = 'dd.mm.yyyy';
|
||||
sheet.getColumn('end').numFmt = 'dd.mm.yyyy';
|
||||
|
||||
await new Promise((resolve2, reject2) => {
|
||||
db.all(`
|
||||
SELECT id, name, date_start, date_end, group_id
|
||||
FROM homestead_history
|
||||
WHERE homestead_id = ?
|
||||
`, [homestead.homestead_id], (err, rows) => {
|
||||
if (err) return reject2(err);
|
||||
|
||||
rows.forEach(row => {
|
||||
const startDate = row.date_start ? new Date(row.date_start) : null;
|
||||
const endDate = row.date_end ? new Date(row.date_end) : null;
|
||||
|
||||
let name = row.name;
|
||||
if (row.name === 'Групова') {
|
||||
name = `${row.name} (${row.group_id})`;
|
||||
}
|
||||
|
||||
sheet.addRow({ id: row.id, name, start: startDate, end: endDate });
|
||||
});
|
||||
resolve2();
|
||||
});
|
||||
});
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
// сохраняем один раз
|
||||
await workbook.xlsx.writeFile('Території.xlsx');
|
||||
console.log('Файл создан: entrances.xlsx');
|
||||
|
||||
db.close();
|
||||
}
|
||||
|
||||
exportData();
|
||||
Reference in New Issue
Block a user