diff --git a/models/server/ExporterExcel.js b/models/server/ExporterExcel.js index 0589e4628..b6f78ec40 100644 --- a/models/server/ExporterExcel.js +++ b/models/server/ExporterExcel.js @@ -156,6 +156,8 @@ class ExporterExcel { return user; }); + + //init exceljs workbook const workbook = createWorkbook(); workbook.creator = TAPi18n.__('export-board','',this.userLanguage); @@ -364,39 +366,7 @@ class ExporterExcel { //return new Date(curdate.setHours(curdate.getHours() + 8)); //return curdate; } - //add blank row - ws.addRow().values = ['', '', '', '', '', '']; - //add kanban info - ws.addRow().values = [ - TAPi18n.__('createdAt','',this.userLanguage), - addTZhours(result.createdAt), - TAPi18n.__('modifiedAt','',this.userLanguage), - addTZhours(result.modifiedAt), - TAPi18n.__('members','',this.userLanguage), - jmem, - ]; - ws.getRow(3).font = { - name: TAPi18n.__('excel-font'), - size: 10, - bold: true, - }; - ws.mergeCells('F3:R3'); - ws.getCell('B3').style = { - font: { - name: TAPi18n.__('excel-font'), - size: '10', - bold: true, - }, - numFmt: 'yyyy/mm/dd hh:mm:ss', - }; - ws.getCell('D3').style = { - font: { - name: TAPi18n.__('excel-font'), - size: '10', - bold: true, - }, - numFmt: 'yyyy/mm/dd hh:mm:ss', - }; + //cell center function cellCenter(cellno) { ws.getCell(cellno).alignment = { @@ -412,13 +382,7 @@ class ExporterExcel { wrapText: true, }; } - cellCenter('A3'); - cellCenter('B3'); - cellCenter('C3'); - cellCenter('D3'); - cellCenter('E3'); - cellLeft('F3'); - ws.getRow(3).height = 20; + //all border function allBorder(cellno) { ws.getCell(cellno).border = { @@ -436,12 +400,84 @@ class ExporterExcel { }, }; } - allBorder('A3'); - allBorder('B3'); - allBorder('C3'); - allBorder('D3'); - allBorder('E3'); - allBorder('F3'); + + //add blank row + ws.addRow().values = ['', '', '', '', '', '']; + + //add board description + ws.addRow().values = [ + TAPi18n.__('description','',this.userLanguage), + result.description, + ]; + + ws.mergeCells('B3:H3'); + ws.getRow(3).height = 40; + ws.getRow(3).font = { + name: TAPi18n.__('excel-font'), + size: 10, + }; + ws.getCell('A3').style = { + font: { + name: TAPi18n.__('excel-font'), + size: '10', + bold: true, + }, + }; + ws.getCell(`B3`).alignment = { + wrapText: true, + vertical: 'middle', + }; + cellCenter('A3'); + + //add blank row + ws.addRow().values = ['', '', '', '', '', '']; + + //add kanban info + ws.addRow().values = [ + TAPi18n.__('createdAt','',this.userLanguage), + addTZhours(result.createdAt), + TAPi18n.__('modifiedAt','',this.userLanguage), + addTZhours(result.modifiedAt), + TAPi18n.__('members','',this.userLanguage), + jmem, + ]; + ws.getRow(5).font = { + name: TAPi18n.__('excel-font'), + size: 10, + bold: true, + }; + ws.mergeCells('F5:R5'); + ws.getCell('B5').style = { + font: { + name: TAPi18n.__('excel-font'), + size: '10', + bold: true, + }, + numFmt: 'yyyy/mm/dd hh:mm:ss', + }; + ws.getCell('D5').style = { + font: { + name: TAPi18n.__('excel-font'), + size: '10', + bold: true, + }, + numFmt: 'yyyy/mm/dd hh:mm:ss', + }; + + cellCenter('A5'); + cellCenter('B5'); + cellCenter('C5'); + cellCenter('D5'); + cellCenter('E5'); + cellLeft('F5'); + ws.getRow(5).height = 20; + + allBorder('A5'); + allBorder('B5'); + allBorder('C5'); + allBorder('D5'); + allBorder('E5'); + allBorder('F5'); //add blank row ws.addRow().values = [ '', @@ -483,46 +519,46 @@ class ExporterExcel { TAPi18n.__('overtime-hours','',this.userLanguage), TAPi18n.__('spent-time-hours','',this.userLanguage), ]; - ws.getRow(5).height = 20; - allBorder('A5'); - allBorder('B5'); - allBorder('C5'); - allBorder('D5'); - allBorder('E5'); - allBorder('F5'); - allBorder('G5'); - allBorder('H5'); - allBorder('I5'); - allBorder('J5'); - allBorder('K5'); - allBorder('L5'); - allBorder('M5'); - allBorder('N5'); - allBorder('O5'); - allBorder('P5'); - allBorder('Q5'); - allBorder('R5'); - cellCenter('A5'); - cellCenter('B5'); - cellCenter('C5'); - cellCenter('D5'); - cellCenter('E5'); - cellCenter('F5'); - cellCenter('G5'); - cellCenter('H5'); - cellCenter('I5'); - cellCenter('J5'); - cellCenter('K5'); - cellCenter('L5'); - cellCenter('M5'); - cellCenter('N5'); - cellCenter('O5'); - cellCenter('P5'); - cellCenter('Q5'); - cellCenter('R5'); - ws.getRow(5).font = { + ws.getRow(7).height = 20; + allBorder('A7'); + allBorder('B7'); + allBorder('C7'); + allBorder('D7'); + allBorder('E7'); + allBorder('F7'); + allBorder('G7'); + allBorder('H7'); + allBorder('I7'); + allBorder('J7'); + allBorder('K7'); + allBorder('L7'); + allBorder('M7'); + allBorder('N7'); + allBorder('O7'); + allBorder('P7'); + allBorder('Q7'); + allBorder('R7'); + cellCenter('A7'); + cellCenter('B7'); + cellCenter('C7'); + cellCenter('D7'); + cellCenter('E7'); + cellCenter('F7'); + cellCenter('G7'); + cellCenter('H7'); + cellCenter('I7'); + cellCenter('J7'); + cellCenter('K7'); + cellCenter('L7'); + cellCenter('M7'); + cellCenter('N7'); + cellCenter('O7'); + cellCenter('P7'); + cellCenter('Q7'); + cellCenter('R7'); + ws.getRow(7).font = { name: TAPi18n.__('excel-font'), - size: 12, + size: 10, bold: true, }; //add blank row @@ -577,8 +613,12 @@ class ExporterExcel { jcard.isOvertime ? 'true' : 'false', jcard.spentTime, ]; - const y = Number(i) + 6; + const y = Number(i) + 8; //ws.getRow(y).height = 25; + ws.getRow(y).font = { + name: TAPi18n.__('excel-font'), + size: 10, + }; allBorder(`A${y}`); allBorder(`B${y}`); allBorder(`C${y}`); @@ -614,6 +654,205 @@ class ExporterExcel { wrapText: true, }; } + + + + //Activities worksheet + //init worksheet + const worksheet2 = workbook.addWorksheet(TAPi18n.__('activity','',this.userLanguage), { + properties: { + tabColor: { + argb: 'FFC0000', + }, + }, + pageSetup: { + paperSize: 9, + orientation: 'landscape', + }, + }); + //get worksheet + const ws2 = workbook.getWorksheet(TAPi18n.__('activity','',this.userLanguage)); + ws2.properties.defaultRowHeight = 20; + //init columns + ws2.columns = [ + { + key: 'a', + width: 14, + }, + { + key: 'b', + width: 60, + }, + { + key: 'c', + width: 40, + }, + { + key: 'd', + width: 40, + }, + { + key: 'e', + width: 30, + style: { + font: { + name: TAPi18n.__('excel-font'), + size: '10', + }, + numFmt: 'yyyy/mm/dd hh:mm:ss', + }, + }, + { + key: 'f', + width: 30, + style: { + font: { + name: TAPi18n.__('excel-font'), + size: '10', + }, + numFmt: 'yyyy/mm/dd hh:mm:ss', + }, + }, + ]; + //all border + function allBorderWs2(cellno) { + ws2.getCell(cellno).border = { + top: { + style: 'thin', + }, + left: { + style: 'thin', + }, + bottom: { + style: 'thin', + }, + right: { + style: 'thin', + }, + }; + } + + //add title line + ws2.mergeCells('A1:F1'); + ws2.getCell('A1').value = result.title; + ws2.getCell('A1').style = { + font: { + name: TAPi18n.__('excel-font'), + size: '20', + }, + }; + ws2.getCell('A1').alignment = { + vertical: 'middle', + horizontal: 'center', + wrapText: true, + }; + ws2.getRow(1).height = 40; + + //add blank row + ws2.addRow().values = ['', '', '', '', '', '']; + + //add comment title + ws2.addRow().values = [ + TAPi18n.__('number','',this.userLanguage), + TAPi18n.__('activity','',this.userLanguage), + TAPi18n.__('card','',this.userLanguage), + TAPi18n.__('owner','',this.userLanguage), + TAPi18n.__('createdAt','',this.userLanguage), + TAPi18n.__('last-modified-at','',this.userLanguage), + ]; + + ws2.getRow(3).height = 20; + + ws2.getRow(3).font = { + name: TAPi18n.__('excel-font'), + size: 10, + bold: true, + }; + + ws2.getRow(3).alignment = { + vertical: 'middle', + horizontal: 'center', + wrapText: true, + }; + + allBorderWs2('A3'); + allBorderWs2('B3'); + allBorderWs2('C3'); + allBorderWs2('D3'); + allBorderWs2('E3'); + allBorderWs2('F3'); + + + + + //add comment info + for (const i in result.comments) { + const jcomment = result.comments[i]; + + //card title + const parentCard = result.cards.find( + (card) => card._id === jcomment.cardId, + ); + jcomment.cardTitle = parentCard ? parentCard.title : ''; + + //add comment detail + const t = Number(i) + 1; + ws2.addRow().values = [ + t.toString(), + jcomment.text, + jcomment.cardTitle, + jmeml[jcomment.userId], + addTZhours(jcomment.createdAt), + addTZhours(jcomment.modifiedAt), + + + ]; + + const y = Number(i) + 4; + ws2.getRow(y).font = { + name: TAPi18n.__('excel-font'), + size: 10, + }; + + ws2.getCell(`A${y}`).alignment = { + vertical: 'middle', + horizontal: 'center', + wrapText: true, + }; + ws2.getCell(`B${y}`).alignment = { + vertical: 'middle', + wrapText: true, + }; + ws2.getCell(`C${y}`).alignment = { + vertical: 'middle', + wrapText: true, + }; + ws2.getCell(`D${y}`).alignment = { + vertical: 'middle', + wrapText: true, + }; + ws2.getCell(`E${y}`).alignment = { + vertical: 'middle', + wrapText: true, + }; + ws2.getCell(`F${y}`).alignment = { + vertical: 'middle', + wrapText: true, + }; + + allBorderWs2(`A${y}`); + allBorderWs2(`B${y}`); + allBorderWs2(`C${y}`); + allBorderWs2(`D${y}`); + allBorderWs2(`E${y}`); + allBorderWs2(`F${y}`); + + + } + + + + workbook.xlsx.write(res).then(function () {}); }