123 lines
4.0 KiB
JavaScript
123 lines
4.0 KiB
JavaScript
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(); |