Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. @module("/report")
  2. export default class ReportModule {
  3. @get("/excel", [])
  4. public async exportData(ctx) {
  5. if (!ctx.request.query.start_date || !ctx.request.query.end_date) {
  6. ctx.status = 400;
  7. ctx.body = {
  8. message: 'Please add start and end date'
  9. };
  10. return;
  11. }
  12.  
  13. // ctx.body = {
  14. // message: `start date is ${ctx.request.query.start_date}, end date is ${ctx.request.query.end_date}`
  15. // }
  16.  
  17. let q = await GuestbookModel.query()
  18. .select('Guestbook.*')
  19. // .leftJoin('Guestbook.id','Guestbook.entiy_id','Guestbook.data')
  20. .whereBetween('Guestbook.created_at', [ctx.request.query.start_date, ctx.request.query.end_date])
  21.  
  22. if (q.length === 0) {
  23. ctx.status = 400;
  24. ctx.body = {
  25. message: 'Data for selected date empty'
  26. };
  27. return;
  28. }
  29.  
  30. let data = await q;
  31. const wb = new xl.Workbook();
  32. const ws = wb.addWorksheet('Sheet 1');
  33. let style = wb.createStyle({
  34. font: {
  35. color: '#000000',
  36. size: 12,
  37. },
  38. numberFormat: '$#,##0.00; ($#,##0.00); -',
  39. });
  40.  
  41.  
  42. // mengambil data dari database
  43. // let dataExport = [];
  44. data.map(it => {
  45. data.push(JSON.parse(it.data))
  46. return it;
  47. })
  48.  
  49. // ctx.body = {
  50. // dataExport
  51. // }
  52.  
  53. //write column
  54. Object.keys(data[0]).map((it, index) => {
  55. ws.cell(1, index + 1).string(it).style(style)
  56. });
  57.  
  58. data.map((it, row) => {
  59. Object.keys(it).map((prop, col) => {
  60. ws.cell(row + 2, col + 1).string(it[prop]).style(style);
  61. });
  62. });
  63.  
  64. let fileName = uuid.v4();
  65. const uploads = path.resolve(path.join(__dirname, '../../uploads'));
  66. const filenameFull = path.join(uploads, `${fileName}.xlsx`);
  67.  
  68. let result = await new Promise(((resolve, reject) => {
  69. wb.write(filenameFull, (err, stats) => {
  70. if (err) return reject(err);
  71. return resolve(stats);
  72. });
  73. }));
  74.  
  75. await send(ctx, `${fileName}.xlsx`, { root: uploads });
  76. return;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement