This commit is contained in:
2025-09-09 00:10:53 +03:00
parent 38f2a05107
commit 204fc092d7
239 changed files with 22447 additions and 9536 deletions

123
scripts/generatorExcel.js Normal file
View 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();