Untitled
unknown
plain_text
a year ago
18 kB
19
Indexable
module.exports = app => {
const menu = {
parentMenu: app.parentMenu.sdh,
menus: {
7638: {
title: 'Công trình cán bộ hướng dẫn', link: '/user/sau-dai-hoc/cong-trinh-cbhd', parentKey: 7543
}
}
};
app.permission.add(
{ name: 'sdhCongTrinhCBHD:read', menu },
{ name: 'sdhCongTrinhCBHD:write' },
{ name: 'sdhCongTrinhCBHD:delete' },
{ name: 'sdhCongTrinhCBHD:export' }
);
app.get('/user/sau-dai-hoc/cong-trinh-cbhd', app.permission.check('sdhCongTrinhCBHD:read'), app.templates.admin);
// app.permissionHooks.add('staff', 'addRoleSdhCongTrinhCBHD', (user, staff) => new Promise(resolve => {
// if (staff.maDonVi && staff.maDonVi == '37') {
// app.permissionHooks.pushUserPermission(user, 'sdhCongTrinhCBHD:write', 'sdhCongTrinhCBHD:read', 'sdhCongTrinhCBHD:delete');
// resolve();
// }
// else resolve();
// }));
//APIs----------------------------------------------------------------------------------------------------------------------------------
app.get('/api/sdh/cong-trinh-cbhd/item/:id', app.permission.check('sdhCongTrinhCBHD:read'), async (req, res) => {
try {
const { id } = req.params;
const item = await app.model.sdhDmCongTrinhCanBoHuongDan.get({ id });
res.send({ item });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.get('/api/sdh/cong-trinh-cbhd/:shcc', app.permission.check('sdhCongTrinhCBHD:read'), async (req, res) => {
try {
const { shcc } = req.params;
const item = await app.model.sdhDmCongTrinhCanBoHuongDan.getAll({ shcc });
res.send({ item });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.put('/api/sdh/cong-trinh-cbhd', app.permission.check('sdhCongTrinhCBHD:write'), async (req, res) => {
try {
const { data, id } = req.body;
data.modifier = req.session.user.email;
data.timeModified = Date.now();
const item = await app.model.sdhDmCongTrinhCanBoHuongDan.update({ id }, data);
res.send({ item });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.post('/api/sdh/cong-trinh-cbhd', app.permission.check('sdhCongTrinhCBHD:write'), async (req, res) => {
try {
const { data } = req.body;
data.modifier = req.session.user.email;
data.timeModified = Date.now();
const item = await app.model.sdhDmCongTrinhCanBoHuongDan.create(data);
res.send({ item });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.delete('/api/sdh/cong-trinh-cbhd', app.permission.check('sdhCongTrinhCBHD:delete'), async (req, res) => {
try {
const { id } = req.body;
await app.model.sdhDmCongTrinhCanBoHuongDan.delete({ id });
res.end();
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.get('/api/sdh/cong-trinh-cbhd/download-template', app.permission.check('sdhCongTrinhCBHD:export'), async (req, res) => {
const workBook = app.excel.create();
const ws = workBook.addWorksheet('CongTrinhCBHD');
ws.columns = [
{ header: 'Mã cán bộ', key: 'shcc', width: 20 },
{ header: 'Tên công trình', key: 'tenCongTrinh', width: 20 },
{ header: 'Ngày đăng', key: 'ngayDang', width: 20 },
{ header: 'Tạp chí', key: 'tapChi', width: 20 },
{ header: 'Trang', key: 'trang', width: 20 },
{ header: 'Chỉ số', key: 'chiSo', width: 20 },
{ header: 'Điểm', key: 'diem', width: 20 },
];
ws.getRow(1).alignment = { ...ws.getRow(1).alignment, vertical: 'middle', wrapText: true };
ws.getRow(1).font = {
name: 'Times New Roman',
family: 4,
size: 12,
bold: true,
color: { argb: 'FF000000' }
};
ws.getRow(2).font = {
name: 'Times New Roman',
family: 4,
size: 12,
};
const rowIndex = 2;
ws.getCell('A' + rowIndex).value = '\'004.5003 (Vui lòng để 1 dấu \' ở trước như trong mẫu)';
ws.getCell('B' + rowIndex).value = 'Công Trình Xịn';
ws.getCell('C' + rowIndex).value = '14/02/2021';
ws.getCell('D' + rowIndex).value = 'TechMagazine';
ws.getCell('E' + rowIndex).value = 10;
ws.getCell('F' + rowIndex).value = 10;
ws.getCell('G' + rowIndex).value = 10;
ws.getCell('A' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('B' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('C' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('D' + rowIndex).alignment = { horizontal: 'right' };
ws.getCell('E' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('F' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('G' + rowIndex).alignment = { horizontal: 'center' };
let fileName = 'CongTrinhCBHD.xlsx';
app.excel.attachment(workBook, res, fileName);
});
//Hook upload
app.uploadHooks.add('SdhCongTrinhCBHDData', (req, fields, files, params, done) =>
app.permission.has(req, async () => await sdhCongTrinhCBHDImportData(fields, files, done), done, 'sdhCongTrinhCBHD:write')
);
const sdhCongTrinhCBHDImportData = async (fields, files, done) => {
let worksheet = null;
if (fields.userData && fields.userData[0] && fields.userData[0] == 'SdhCongTrinhCBHDData' && files.SdhCongTrinhCBHDData && files.SdhCongTrinhCBHDData.length) {
const srcPath = files.SdhCongTrinhCBHDData[0].path;
let workbook = app.excel.create();
workbook = await app.excel.readFile(srcPath);
if (workbook) {
app.fs.deleteFile(srcPath);
worksheet = workbook.getWorksheet(1);
if (worksheet) {
const items = [];
const falseItems = [];
let index = 2;
try {
while (true) {
if (!worksheet.getCell('A' + index).value) {
done({ items, falseItems });
break;
} else {
const shcc = worksheet.getCell('A' + index).value;
const tenCongTrinh = worksheet.getCell('B' + index).value;
const ngayDangText = worksheet.getCell('C' + index).value;
const tapChi = worksheet.getCell('D' + index).value;
const trang = worksheet.getCell('E' + index).value;
const diem = worksheet.getCell('F' + index).value?.toString().trim() || '';
const chiSo = worksheet.getCell('G' + index).value?.toString().trim() || '';
const row = { shcc, tenCongTrinh, tapChi, trang, diem, chiSo };
if (tenCongTrinh && ngayDangText && tapChi) {
if (typeof (ngayDangText) == Object) {
row.ngayDang = new Date(ngayDangText).getTime();
} else {
const ngayDang = ngayDangText.split('/');
if (ngayDang.length != 3) {
falseItems.push({ ...row, ghiChuExcel: 'Ngày đăng không hợp lệ' });
continue;
}
row.ngayDang = new Date(ngayDang[2], ngayDang[1] - 1, ngayDang[0]).setHours(0, 0, 0, 0);
}
if (isNaN(row.ngayDang)) {
falseItems.push({ ...row, ghiChuExcel: 'Ngày đăng không hợp lệ' });
continue;
}
const canBo = await app.model.tchcCanBo.getGiangVien('', app.utils.stringify({ shcc })).then(res => res.rows);
if (canBo.length) {
const hoTen = (canBo[0].ho ?? '') + ' ' + (canBo[0].ten ?? '');
const tmpRow = { ...row, hoTen };
items.push(tmpRow);
}
else {
const tmpRow = { ...row, ghiChuExcel: 'Mã số cán bộ không tồn tại' };
falseItems.push(tmpRow);
}
} else {
const tmpRow = { ...row, ghiChuExcel: 'Thiếu thông tin nhập vào' };
falseItems.push(tmpRow);
}
index++;
}
}
} catch (error) {
app.consoleError(error);
done({ error });
}
} else {
done({ error: 'No worksheet!' });
}
} else done({ error: 'No workbook!' });
}
};
app.get('/api/sdh/cong-trinh-cbhd/all', app.permission.check('sdhCongTrinhCBHD:read'), async (req, res) => {
try {
const items = await app.model.sdhDmCongTrinhCanBoHuongDan.getAllColumn().then(rs => rs.rows);
res.send({ items });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.post('/api/sdh/cong-trinh-cbhd/create-multiple', app.permission.check('sdhCongTrinhCBHD:write'), async (req, res) => {
try {
const { data } = req.body;
await Promise.all(data.map(item => app.model.sdhDmCongTrinhCanBoHuongDan.create({
...item,
'modifier': req.session.user.email,
'timeModified': Date.now(),
})));
res.send({ success: true });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.get('/api/sdh/cong-trinh-cbhd/download-excel', app.permission.check('sdhCongTrinhCBHD:export'), async (req, res) => {
try {
// Lấy tất cả dữ liệu từ bảng sdhDmCongTrinhCanBoHuongDan
const data = await app.model.sdhDmCongTrinhCanBoHuongDan.getAllColumn(); // Tạo file Excel từ dữ liệu
const list = data.rows;
const workBook = app.excel.create();
const ws = workBook.addWorksheet('CongTrinhCBHD');
ws.columns = [
{ header: 'STT', key: 'stt', width: 5 },
{ header: 'MSCB', key: 'shcc', width: 10 },
{ header: 'Tên cán bộ', key: 'tenCanBo', width: 30 },
{ header: 'Tên công trình', key: 'tenCongTrinh', width: 30 },
{ header: 'Ngày đăng', key: 'ngayDang', width: 15 },
{ header: 'Tạp chí', key: 'tapChi', width: 20 },
{ header: 'Trang', key: 'trang', width: 10 },
{ header: 'Điểm', key: 'diem', width: 10 },
{ header: 'Chỉ số', key: 'chiSo', width: 10 },
{ header: 'Người sửa đổi', key: 'modifier', width: 20 },
{ header: 'Thời gian sửa đổi', key: 'timeModified', width: 20 },
];
ws.getRow(1).alignment = { ...ws.getRow(1).alignment, vertical: 'middle', wrapText: true };
ws.getRow(1).font = {
name: 'Times New Roman',
family: 4,
size: 12,
bold: true,
color: { argb: 'FF000000' }
};
list.forEach((item, index) => {
const rowIndex = index + 2;
ws.getRow(rowIndex).alignment = { ...ws.getRow(1).alignment, vertical: 'middle', wrapText: true };
ws.getRow(rowIndex).font = { name: 'Times New Roman' };
ws.getCell('A' + rowIndex).value = index + 1;
ws.getCell('B' + rowIndex).value = item.shcc;
ws.getCell('C' + rowIndex).value = item.hoTen;
ws.getCell('D' + rowIndex).value = item.tenCongTrinh;
ws.getCell('E' + rowIndex).value = app.date.dateTimeFormat(new Date(item.ngayDang), 'dd/mm/yyyy');
ws.getCell('F' + rowIndex).value = item.tapChi;
ws.getCell('G' + rowIndex).value = item.trang;
ws.getCell('H' + rowIndex).value = item.diem;
ws.getCell('I' + rowIndex).value = item.chiSo;
ws.getCell('J' + rowIndex).value = item.modifier;
ws.getCell('K' + rowIndex).value = app.date.dateTimeFormat(new Date(parseInt(item.timeModified)), 'dd/mm/yyyy HH:MM:ss');
ws.getCell('A' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('D' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('F' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('G' + rowIndex).alignment = { horizontal: 'right' };
ws.getCell('J' + rowIndex).alignment = { horizontal: 'center' };
});
let fileName = `CongTrinhCBHD_${Date.now()}.xlsx`;
app.excel.attachment(workBook, res, fileName);
} catch (error) {
app.consoleError(error);
res.send({ error });
}
});
app.get('/api/sdh/cong-trinh-cbhd/tuyensinh/download-excel', app.permission.check('sdhCongTrinhCBHD:export'), async (req, res) => {
try {
const data = await app.model.sdhTsCongTrinhCbhd.getAll();
const workBook = app.excel.create();
const ws = workBook.addWorksheet('CongTrinhCBHD');
ws.columns = [
{ header: 'SHCC', key: 'Cbhd', width: 10 },
{ header: 'Tên công trình', key: 'ten', width: 30 },
{ header: 'Ngày đăng', key: 'ngayDang', width: 15 },
{ header: 'Tạp chí', key: 'tenTapChi', width: 20 },
{ header: 'Trang', key: 'trang', width: 10 },
{ header: 'Chỉ Số', key: 'chiSo', width: 10 },
{ header: 'Điểm', key: 'diem', width: 10 },
];
ws.getRow(1).alignment = { ...ws.getRow(1).alignment, vertical: 'middle', wrapText: true };
ws.getRow(1).font = {
name: 'Times New Roman',
family: 4,
size: 12,
bold: true,
color: { argb: 'FF000000' }
};
data.forEach((item, index) => {
const rowIndex = index + 2;
ws.getRow(rowIndex).alignment = { ...ws.getRow(1).alignment, vertical: 'middle', wrapText: true };
ws.getRow(rowIndex).font = { name: 'Times New Roman' };
ws.getCell('A' + rowIndex).value = item.idCbhd;
ws.getCell('B' + rowIndex).value = item.ten;
ws.getCell('C' + rowIndex).value = app.date.dateTimeFormat(new Date(item.ngayDang), 'dd/mm/yyyy');
ws.getCell('D' + rowIndex).value = item.tenTapChi;
ws.getCell('E' + rowIndex).value = item.trang;
ws.getCell('F' + rowIndex).value = item.chiSo;
ws.getCell('G' + rowIndex).value = item.diem;
ws.getCell('A' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('D' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('F' + rowIndex).alignment = { horizontal: 'center' };
ws.getCell('G' + rowIndex).alignment = { horizontal: 'right' };
});
let fileName = `CongTrinhTuyenSinhCBHD_${Date.now()}.xlsx`;
app.excel.attachment(workBook, res, fileName);
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
app.get('/api/sdh/cong-trinh-cbhd/page/:pageNumber/:pageSize', app.permission.check('sdhCongTrinhCBHD:read'), async (req, res) => {
try {
const { pageNumber, pageSize } = req.params;
let { filter = {}, condition } = req.query || {};
const searchTerm = condition ?? '';
const { rows: list, pagenumber, pagesize, pagetotal, totalitem } = await app.model.sdhDmCongTrinhCanBoHuongDan.searchPage(Number(pageNumber), Number(pageSize), app.utils.stringify(filter), searchTerm);
res.send({ page: { list, pageNumber: pagenumber, pageSize: pagesize, pageTotal: pagetotal, totalItem: totalitem } });
} catch (error) {
app.consoleError(req, error);
res.send({ error });
}
});
};Editor is loading...
Leave a Comment